Skip to content

Commit ecade4b

Browse files
authored
Merge pull request #82 from git-infinianti/master
Added Ravencoin Testnet and P2wpkh support,
2 parents b5b4fc0 + b0381d4 commit ecade4b

File tree

4 files changed

+267
-18
lines changed

4 files changed

+267
-18
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ make.bat
44
Makefile
55

66
# Folders stuff
7+
env/
78
experiment/
89
.idea/
910
.tox/
11+
.vs/
1012

1113
# Setuptools stuff
1214
build/

hdwallet/cryptocurrencies.py

Lines changed: 248 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,45 @@ class AuroracoinMainnet(Cryptocurrency):
354354
WIF_SECRET_KEY = 0x97
355355

356356

357+
class AviancoinMainnet(Cryptocurrency):
358+
NAME = "Aviancoin"
359+
SYMBOL = "AVN"
360+
NETWORK = "mainnet"
361+
SOURCE_CODE = "https://github.com/AvianNetwork/Avian"
362+
COIN_TYPE = CoinType({
363+
"INDEX": 921,
364+
"HARDENED": True
365+
})
366+
367+
SCRIPT_ADDRESS = 0x7a
368+
PUBLIC_KEY_ADDRESS = 0x3c
369+
SEGWIT_ADDRESS = SegwitAddress({
370+
"HRP": "av",
371+
"VERSION": 0x0d
372+
})
373+
374+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
375+
"P2PKH": 0x488ade4,
376+
"P2SH": 0x488ade4,
377+
"P2WPKH": 0x04b2430c,
378+
"P2WPKH_IN_P2SH": 0x049d7878,
379+
"P2WSH": 0x02aa7a99,
380+
"P2WSH_IN_P2SH": 0x0295b005
381+
})
382+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
383+
"P2PKH": 0x488b21e,
384+
"P2SH": 0x488b21e,
385+
"P2WPKH": 0x04b24746,
386+
"P2WPKH_IN_P2SH": 0x049d7cb2,
387+
"P2WSH": 0x02aa7ed3,
388+
"P2WSH_IN_P2SH": 0x0295b43f
389+
})
390+
391+
MESSAGE_PREFIX = "Aviancoin Signed Message:\n"
392+
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
393+
WIF_SECRET_KEY = 0x80
394+
395+
357396
class AxeMainnet(Cryptocurrency):
358397

359398
NAME = "Axe"
@@ -2154,6 +2193,86 @@ class EuropeCoinMainnet(Cryptocurrency):
21542193
WIF_SECRET_KEY = 0xa8
21552194

21562195

2196+
class EvrmoreMainnet(Cryptocurrency):
2197+
2198+
NAME = "Evrmore"
2199+
SYMBOL = "EVR"
2200+
NETWORK = "mainnet"
2201+
SOURCE_CODE = "https://github.com/EvrmoreOrg/Evrmore"
2202+
COIN_TYPE = CoinType({
2203+
"INDEX": 175,
2204+
"HARDENED": True
2205+
})
2206+
2207+
SCRIPT_ADDRESS = 0x5c
2208+
PUBLIC_KEY_ADDRESS = 0x21
2209+
SEGWIT_ADDRESS = SegwitAddress({
2210+
"HRP": "ev",
2211+
"VERSION": 0x0b
2212+
})
2213+
2214+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
2215+
"P2PKH": 0x488ade4,
2216+
"P2SH": 0x488ade4,
2217+
"P2WPKH": 0x04b2430c,
2218+
"P2WPKH_IN_P2SH": 0x049d7878,
2219+
"P2WSH": 0x02aa7a99,
2220+
"P2WSH_IN_P2SH": 0x0295b005
2221+
})
2222+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
2223+
"P2PKH": 0x488b21e,
2224+
"P2SH": 0x488b21e,
2225+
"P2WPKH": 0x04b24746,
2226+
"P2WPKH_IN_P2SH": 0x049d7cb2,
2227+
"P2WSH": 0x02aa7ed3,
2228+
"P2WSH_IN_P2SH": 0x0295b43f
2229+
})
2230+
2231+
MESSAGE_PREFIX = "Evrmore Signed Message:\n"
2232+
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
2233+
WIF_SECRET_KEY = 0x80
2234+
2235+
2236+
class EvrmoreTestnet(Cryptocurrency):
2237+
2238+
NAME = "Evrmore"
2239+
SYMBOL = "EVRTEST"
2240+
NETWORK = "testnet"
2241+
SOURCE_CODE = "https://github.com/EvrmoreOrg/Evrmore"
2242+
COIN_TYPE = CoinType({
2243+
"INDEX": 1,
2244+
"HARDENED": True
2245+
})
2246+
2247+
SCRIPT_ADDRESS = 0xc4
2248+
PUBLIC_KEY_ADDRESS = 0x6f
2249+
SEGWIT_ADDRESS = SegwitAddress({
2250+
"HRP": "te",
2251+
"VERSION": 0x00
2252+
})
2253+
2254+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
2255+
"P2PKH": 0x488ade4,
2256+
"P2SH": 0x488ade4,
2257+
"P2WPKH": 0x04b2430c,
2258+
"P2WPKH_IN_P2SH": 0x049d7878,
2259+
"P2WSH": 0x02aa7a99,
2260+
"P2WSH_IN_P2SH": 0x0295b005
2261+
})
2262+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
2263+
"P2PKH": 0x488b21e,
2264+
"P2SH": 0x488b21e,
2265+
"P2WPKH": 0x04b24746,
2266+
"P2WPKH_IN_P2SH": 0x049d7cb2,
2267+
"P2WSH": 0x02aa7ed3,
2268+
"P2WSH_IN_P2SH": 0x0295b43f
2269+
})
2270+
2271+
MESSAGE_PREFIX = "Evrmore Signed Message:\n"
2272+
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
2273+
WIF_SECRET_KEY = 0xef
2274+
2275+
21572276
class ExclusiveCoinMainnet(Cryptocurrency):
21582277

21592278
NAME = "Exclusive Coin"
@@ -2431,6 +2550,87 @@ class FluxMainnet(Cryptocurrency):
24312550
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
24322551
WIF_SECRET_KEY = 0x80
24332552

2553+
2554+
class FoxdcoinMainnet(Cryptocurrency):
2555+
2556+
NAME = "Foxdcoin"
2557+
SYMBOL = "FOXD"
2558+
NETWORK = "mainnet"
2559+
SOURCE_CODE = "https://github.com/foxdproject/foxdcoin"
2560+
COIN_TYPE = CoinType({
2561+
"INDEX": 175,
2562+
"HARDENED": True
2563+
})
2564+
2565+
SCRIPT_ADDRESS = 0x1e
2566+
PUBLIC_KEY_ADDRESS = 0x23
2567+
SEGWIT_ADDRESS = SegwitAddress({
2568+
"HRP": "fx",
2569+
"VERSION": 0x0d
2570+
})
2571+
2572+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
2573+
"P2PKH": 0x488ade4,
2574+
"P2SH": 0x488ade4,
2575+
"P2WPKH": 0x04b2430c,
2576+
"P2WPKH_IN_P2SH": 0x049d7878,
2577+
"P2WSH": 0x02aa7a99,
2578+
"P2WSH_IN_P2SH": 0x0295b005
2579+
})
2580+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
2581+
"P2PKH": 0x488b21e,
2582+
"P2SH": 0x488b21e,
2583+
"P2WPKH": 0x04b24746,
2584+
"P2WPKH_IN_P2SH": 0x049d7cb2,
2585+
"P2WSH": 0x02aa7ed3,
2586+
"P2WSH_IN_P2SH": 0x0295b43f
2587+
})
2588+
2589+
MESSAGE_PREFIX = "Foxdcoin Signed Message:\n"
2590+
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
2591+
WIF_SECRET_KEY = 0x80
2592+
2593+
2594+
class FoxdcoinTestnet(Cryptocurrency):
2595+
2596+
NAME = "Foxdcoin"
2597+
SYMBOL = "FOXDTEST"
2598+
NETWORK = "testnet"
2599+
SOURCE_CODE = "https://github.com/foxdproject/foxdcoin"
2600+
COIN_TYPE = CoinType({
2601+
"INDEX": 1,
2602+
"HARDENED": True
2603+
})
2604+
2605+
SCRIPT_ADDRESS = 0x5a
2606+
PUBLIC_KEY_ADDRESS = 0x5f
2607+
SEGWIT_ADDRESS = SegwitAddress({
2608+
"HRP": "tf",
2609+
"VERSION": 0x00
2610+
})
2611+
2612+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
2613+
"P2PKH": 0x488ade4,
2614+
"P2SH": 0x488ade4,
2615+
"P2WPKH": 0x04b2430c,
2616+
"P2WPKH_IN_P2SH": 0x049d7878,
2617+
"P2WSH": 0x02aa7a99,
2618+
"P2WSH_IN_P2SH": 0x0295b005
2619+
})
2620+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
2621+
"P2PKH": 0x488b21e,
2622+
"P2SH": 0x488b21e,
2623+
"P2WPKH": 0x04b24746,
2624+
"P2WPKH_IN_P2SH": 0x049d7cb2,
2625+
"P2WSH": 0x02aa7ed3,
2626+
"P2WSH_IN_P2SH": 0x0295b43f
2627+
})
2628+
2629+
MESSAGE_PREFIX = "Foxdcoin Signed Message:\n"
2630+
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
2631+
WIF_SECRET_KEY = 0xef
2632+
2633+
24342634
class FujiCoinMainnet(Cryptocurrency):
24352635

24362636
NAME = "Fuji Coin"
@@ -4836,7 +5036,7 @@ class RavencoinMainnet(Cryptocurrency):
48365036
NAME = "Ravencoin"
48375037
SYMBOL = "RVN"
48385038
NETWORK = "mainnet"
4839-
SOURCE_CODE = None
5039+
SOURCE_CODE = "https://github.com/RavenProject/Ravencoin"
48405040
COIN_TYPE = CoinType({
48415041
"INDEX": 175,
48425042
"HARDENED": True
@@ -4845,32 +5045,68 @@ class RavencoinMainnet(Cryptocurrency):
48455045
SCRIPT_ADDRESS = 0x7a
48465046
PUBLIC_KEY_ADDRESS = 0x3c
48475047
SEGWIT_ADDRESS = SegwitAddress({
4848-
"HRP": None,
4849-
"VERSION": 0x00
5048+
"HRP": "ra",
5049+
"VERSION": 0x0c
48505050
})
48515051

48525052
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
48535053
"P2PKH": 0x488ade4,
48545054
"P2SH": 0x488ade4,
4855-
"P2WPKH": None,
4856-
"P2WPKH_IN_P2SH": None,
4857-
"P2WSH": None,
4858-
"P2WSH_IN_P2SH": None
5055+
"P2WPKH": 0x04b2430c,
5056+
"P2WPKH_IN_P2SH": 0x049d7878,
5057+
"P2WSH": 0x02aa7a99,
5058+
"P2WSH_IN_P2SH": 0x0295b005
48595059
})
48605060
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
48615061
"P2PKH": 0x488b21e,
48625062
"P2SH": 0x488b21e,
4863-
"P2WPKH": None,
4864-
"P2WPKH_IN_P2SH": None,
4865-
"P2WSH": None,
4866-
"P2WSH_IN_P2SH": None
5063+
"P2WPKH": 0x04b24746,
5064+
"P2WPKH_IN_P2SH": 0x049d7cb2,
5065+
"P2WSH": 0x02aa7ed3,
5066+
"P2WSH_IN_P2SH": 0x0295b43f
48675067
})
48685068

4869-
MESSAGE_PREFIX = "Raven Signed Message:\n"
5069+
MESSAGE_PREFIX = "Raven Signed Message:\n"
48705070
DEFAULT_PATH = f"m/44'/{str(COIN_TYPE)}/0'/0/0"
48715071
WIF_SECRET_KEY = 0x80
48725072

48735073

5074+
class RavencoinTestnet(Cryptocurrency):
5075+
5076+
NAME = "Ravencoin"
5077+
SYMBOL = "RVNTEST"
5078+
NETWORK = "testnet"
5079+
SOURCE_CODE = "https://github.com/RavenProject/Ravencoin"
5080+
COIN_TYPE = CoinType({
5081+
"INDEX": 1,
5082+
"HARDENED": True
5083+
})
5084+
5085+
SCRIPT_ADDRESS = 0xc4
5086+
PUBLIC_KEY_ADDRESS = 0x6f
5087+
SEGWIT_ADDRESS = SegwitAddress({
5088+
"HRP": "tr",
5089+
"VERSION": 0x00
5090+
})
5091+
5092+
EXTENDED_PRIVATE_KEY = ExtendedPrivateKey({
5093+
"P2PKH": 0x488ade4,
5094+
"P2SH": 0x488ade4,
5095+
"P2WPKH": 0x04b2430c,
5096+
"P2WPKH_IN_P2SH": 0x049d7878,
5097+
"P2WSH": 0x02aa7a99,
5098+
"P2WSH_IN_P2SH": 0x0295b005
5099+
})
5100+
EXTENDED_PUBLIC_KEY = ExtendedPublicKey({
5101+
"P2PKH": 0x488b21e,
5102+
"P2SH": 0x488b21e,
5103+
"P2WPKH": 0x04b24746,
5104+
"P2WPKH_IN_P2SH": 0x049d7cb2,
5105+
"P2WSH": 0x02aa7ed3,
5106+
"P2WSH_IN_P2SH": 0x0295b43f
5107+
})
5108+
5109+
48745110
class ReddcoinMainnet(Cryptocurrency):
48755111

48765112
NAME = "Reddcoin"

hdwallet/hdwallet.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,9 +1196,10 @@ def p2wpkh_address(self) -> Optional[str]:
11961196

11971197
compressed_public_key = unhexlify(self.compressed())
11981198
public_key_hash = ripemd160(sha256(compressed_public_key).digest())
1199-
if self._cryptocurrency.SEGWIT_ADDRESS.HRP is None:
1199+
segwit = self._cryptocurrency.SEGWIT_ADDRESS
1200+
if segwit.HRP is None:
12001201
return None
1201-
return ensure_string(encode(self._cryptocurrency.SEGWIT_ADDRESS.HRP, 0, public_key_hash))
1202+
return ensure_string(encode(segwit.HRP, segwit.VERSION, public_key_hash))
12021203

12031204
def p2wpkh_in_p2sh_address(self) -> Optional[str]:
12041205
"""
@@ -1240,9 +1241,10 @@ def p2wsh_address(self) -> Optional[str]:
12401241

12411242
compressed_public_key = unhexlify("5121" + self.compressed() + "51ae")
12421243
script_hash = sha256(compressed_public_key).digest()
1243-
if self._cryptocurrency.SEGWIT_ADDRESS.HRP is None:
1244+
segwit = self._cryptocurrency.SEGWIT_ADDRESS
1245+
if segwit.HRP is None:
12441246
return None
1245-
return ensure_string(encode(self._cryptocurrency.SEGWIT_ADDRESS.HRP, 0, script_hash))
1247+
return ensure_string(encode(segwit.HRP, segwit.VERSION, script_hash))
12461248

12471249
def p2wsh_in_p2sh_address(self) -> Optional[str]:
12481250
"""

0 commit comments

Comments
 (0)