|
4 | 4 | from electrum.transaction import Transaction, TxOutput
|
5 | 5 | from electrum.bitcoin import TYPE_ADDRESS, is_address
|
6 | 6 | from electrum.wallet import Wallet
|
7 |
| -from electrum.network import Network |
| 7 | +from electrum.network import Network, SimpleConfig |
8 | 8 | from Crypto.Cipher import AES
|
9 | 9 | from Crypto.Random import get_random_bytes
|
10 | 10 | from Crypto.Util.Padding import pad, unpad
|
|
15 | 15 |
|
16 | 16 | class CoinJoinManager:
|
17 | 17 |
|
18 |
| - def __init__(self): |
| 18 | + def __init__(self, network_type="mainnet"): |
19 | 19 | self.peers = []
|
20 | 20 | self.session_id = None
|
21 | 21 | self.outputs = []
|
22 | 22 | self.network = None
|
23 | 23 | self.wallet = None
|
24 | 24 | self.known_peers = None
|
25 | 25 | self.shared_secrets = {} # Store shared secrets with peers
|
| 26 | + self.network_type = network_type |
26 | 27 |
|
27 |
| - async def setup_network(self, network, wallet: Wallet, known_peers): |
28 |
| - self.network = network |
| 28 | + async def setup_network(self, wallet: Wallet, known_peers): |
29 | 29 | self.wallet = wallet
|
30 | 30 | self.known_peers = known_peers
|
| 31 | + |
| 32 | + # Initialize the network based on the desired network type |
| 33 | + self.network = self._get_network_for_type(self.network_type) |
31 | 34 | if not self.network:
|
32 |
| - self.network = Network() |
| 35 | + raise ValueError(f"Network type {self.network_type} is not supported") |
| 36 | + |
| 37 | + def _get_network_for_type(self, network_type): |
| 38 | + """ |
| 39 | + Returns an appropriate Network instance for the given type. |
| 40 | + Supports 'mainnet', 'signet', and 'testnet4'. |
| 41 | + """ |
| 42 | + config = SimpleConfig({"electrumx": {"server": "localhost"}}) |
| 43 | + |
| 44 | + if network_type == "mainnet": |
| 45 | + return Network(config) |
| 46 | + elif network_type == "signet": |
| 47 | + return Network(SimpleConfig({"network": "signet", "electrumx": {"server": "localhost"}})) |
| 48 | + elif network_type == "testnet4": |
| 49 | + return Network(SimpleConfig({"network": "testnet4", "electrumx": {"server": "localhost"}})) |
| 50 | + else: |
| 51 | + return None |
33 | 52 |
|
34 | 53 | async def initiate_coinjoin(self, wallet: Wallet, known_peers):
|
35 | 54 | self.session_id = self._generate_session_id()
|
@@ -184,10 +203,12 @@ async def run_server():
|
184 | 203 | if __name__ == "__main__":
|
185 | 204 | known_peers = ["127.0.0.1:12345", "127.0.0.1:12346", "127.0.0.1:12347"]
|
186 | 205 |
|
| 206 | + # Choose a network: "mainnet", "signet", "testnet4" |
| 207 | + coinjoin_manager = CoinJoinManager(network_type="mainnet") |
| 208 | + |
187 | 209 | # Run the server for testing (normally, peers would run this)
|
188 | 210 | asyncio.run(run_server())
|
189 | 211 |
|
190 |
| - # Run the CoinJoin process |
191 |
| - # wallet = ... # Get the wallet instance |
192 |
| - # coinjoin_manager = CoinJoinManager() |
193 |
| - |
| 212 | + # Assuming 'wallet' is initialized as needed |
| 213 | + # await coinjoin_manager.setup_network(wallet, known_peers) |
| 214 | + # asyncio.run(coinjoin_manager.initiate_coinjoin(wallet, known_peers)) |
0 commit comments