Skip to content

Commit da87f44

Browse files
committed
Firebolt electrum support to mainnet, signet and testnet4
1 parent be32f5d commit da87f44

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

README.md

+1-7
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,8 @@
2222
### Run Firebolt Electrum Plugin
2323

2424
[Tutorial](https://github.com/AreaLayer/firebolt-electrum/blob/main/docs/tutorial.md)
25-
26-
### Observations
27-
28-
**⚠️ Don't use for mainnet**
29-
30-
**⚠️ Use Signet**
3125

3226
## Roadmap
3327

34-
- [ ] Mainnet in 2025 & final verion (out of beta)
28+
- [x] Mainnet in 2025 & final verion (out of beta)
3529
- [x] Post quantum resistence Coinjoin (beta)

_init_.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111

1212
fullname = 'firebolt-electrum'
13-
description = _("P2P Coinjoin")
13+
description = _("P2P Coinjoin by ZK Proof")
1414
available_for = ['qt']
1515

1616

qt.py

+30-9
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from electrum.transaction import Transaction, TxOutput
55
from electrum.bitcoin import TYPE_ADDRESS, is_address
66
from electrum.wallet import Wallet
7-
from electrum.network import Network
7+
from electrum.network import Network, SimpleConfig
88
from Crypto.Cipher import AES
99
from Crypto.Random import get_random_bytes
1010
from Crypto.Util.Padding import pad, unpad
@@ -15,21 +15,40 @@
1515

1616
class CoinJoinManager:
1717

18-
def __init__(self):
18+
def __init__(self, network_type="mainnet"):
1919
self.peers = []
2020
self.session_id = None
2121
self.outputs = []
2222
self.network = None
2323
self.wallet = None
2424
self.known_peers = None
2525
self.shared_secrets = {} # Store shared secrets with peers
26+
self.network_type = network_type
2627

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):
2929
self.wallet = wallet
3030
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)
3134
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
3352

3453
async def initiate_coinjoin(self, wallet: Wallet, known_peers):
3554
self.session_id = self._generate_session_id()
@@ -184,10 +203,12 @@ async def run_server():
184203
if __name__ == "__main__":
185204
known_peers = ["127.0.0.1:12345", "127.0.0.1:12346", "127.0.0.1:12347"]
186205

206+
# Choose a network: "mainnet", "signet", "testnet4"
207+
coinjoin_manager = CoinJoinManager(network_type="mainnet")
208+
187209
# Run the server for testing (normally, peers would run this)
188210
asyncio.run(run_server())
189211

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

Comments
 (0)