Merge pull request #173 from pooler/verbytes
Allow multiple address versions for each coin
This commit is contained in:
commit
411ce06cd2
42
lib/coins.py
42
lib/coins.py
@ -170,7 +170,7 @@ class Coin(object):
|
||||
def P2SH_address_from_hash160(cls, hash160):
|
||||
'''Return a coin address given a hash160.'''
|
||||
assert len(hash160) == 20
|
||||
return Base58.encode_check(cls.P2SH_VERBYTE + hash160)
|
||||
return Base58.encode_check(cls.P2SH_VERBYTES[0] + hash160)
|
||||
|
||||
@classmethod
|
||||
def multisig_address(cls, m, pubkeys):
|
||||
@ -213,7 +213,7 @@ class Coin(object):
|
||||
|
||||
if verbyte == cls.P2PKH_VERBYTE:
|
||||
return ScriptPubKey.P2PKH_script(hash_bytes)
|
||||
if verbyte == cls.P2SH_VERBYTE:
|
||||
if verbyte in cls.P2SH_VERBYTES:
|
||||
return ScriptPubKey.P2SH_script(hash_bytes)
|
||||
|
||||
raise CoinError('invalid address: {}'.format(address))
|
||||
@ -318,7 +318,7 @@ class Bitcoin(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("00")
|
||||
P2SH_VERBYTE = bytes.fromhex("05")
|
||||
P2SH_VERBYTES = [bytes.fromhex("05")]
|
||||
WIF_BYTE = bytes.fromhex("80")
|
||||
GENESIS_HASH = ('000000000019d6689c085ae165831e93'
|
||||
'4ff763ae46a2a6c172b3f1b60a8ce26f')
|
||||
@ -353,7 +353,7 @@ class BitcoinTestnet(Bitcoin):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("6f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
GENESIS_HASH = ('000000000933ea01ad0ee984209779ba'
|
||||
'aec3ced90fa3f408719526f8d77f4943')
|
||||
@ -413,7 +413,7 @@ class Litecoin(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("30")
|
||||
P2SH_VERBYTE = bytes.fromhex("05")
|
||||
P2SH_VERBYTES = [bytes.fromhex("32"), bytes.fromhex("05")]
|
||||
WIF_BYTE = bytes.fromhex("b0")
|
||||
GENESIS_HASH = ('12a765e31ffd4059bada1e25190f6e98'
|
||||
'c99d9714d334efa41a195a7e7e04bfe2')
|
||||
@ -444,7 +444,7 @@ class LitecoinTestnet(Litecoin):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("6f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("3a"), bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
GENESIS_HASH = ('4966625a4b2851d9fdee139e56211a0d'
|
||||
'88575f59ed816ff5e6a63deb4e3e29a0')
|
||||
@ -467,7 +467,7 @@ class Viacoin(CoinAuxPow):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488B21E")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ADE4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("47")
|
||||
P2SH_VERBYTE = bytes.fromhex("21")
|
||||
P2SH_VERBYTES = [bytes.fromhex("21")]
|
||||
WIF_BYTE = bytes.fromhex("c7")
|
||||
GENESIS_HASH = ('4e9b54001f9976049830128ec0331515'
|
||||
'eaabe35a70970d79971da1539a400ba1')
|
||||
@ -492,7 +492,7 @@ class ViacoinTestnet(Viacoin):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587CF")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("7f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ff")
|
||||
GENESIS_HASH = ('00000007199508e34a9ff81e6ec0c477'
|
||||
'a4cccff2a4767a8eee39c11db367b008')
|
||||
@ -519,7 +519,7 @@ class Namecoin(CoinAuxPow):
|
||||
XPUB_VERBYTES = bytes.fromhex("d7dd6370")
|
||||
XPRV_VERBYTES = bytes.fromhex("d7dc6e31")
|
||||
P2PKH_VERBYTE = bytes.fromhex("34")
|
||||
P2SH_VERBYTE = bytes.fromhex("0d")
|
||||
P2SH_VERBYTES = [bytes.fromhex("0d")]
|
||||
WIF_BYTE = bytes.fromhex("e4")
|
||||
GENESIS_HASH = ('000000000062b72c5e2ceb45fbc8587e'
|
||||
'807c155b0da735e6483dfba2f0a9c770')
|
||||
@ -537,7 +537,7 @@ class NamecoinTestnet(Namecoin):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("6f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
GENESIS_HASH = ('00000007199508e34a9ff81e6ec0c477'
|
||||
'a4cccff2a4767a8eee39c11db367b008')
|
||||
@ -550,7 +550,7 @@ class Dogecoin(CoinAuxPow):
|
||||
XPUB_VERBYTES = bytes.fromhex("02facafd")
|
||||
XPRV_VERBYTES = bytes.fromhex("02fac398")
|
||||
P2PKH_VERBYTE = bytes.fromhex("1e")
|
||||
P2SH_VERBYTE = bytes.fromhex("16")
|
||||
P2SH_VERBYTES = [bytes.fromhex("16")]
|
||||
WIF_BYTE = bytes.fromhex("9e")
|
||||
GENESIS_HASH = ('1a91e3dace36e2be3bf030a65679fe82'
|
||||
'1aa1d6ef92e7c9902eb318182c355691')
|
||||
@ -569,7 +569,7 @@ class DogecoinTestnet(Dogecoin):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("71")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("f1")
|
||||
GENESIS_HASH = ('bb0a78264637406b6360aad926284d54'
|
||||
'4d7049f45189db5664f3c4d07350559e')
|
||||
@ -585,7 +585,7 @@ class Dash(Coin):
|
||||
GENESIS_HASH = ('00000ffd590b1485b3caadc19b22e637'
|
||||
'9c733355108f107a430458cdf3407ab6')
|
||||
P2PKH_VERBYTE = bytes.fromhex("4c")
|
||||
P2SH_VERBYTE = bytes.fromhex("10")
|
||||
P2SH_VERBYTES = [bytes.fromhex("10")]
|
||||
WIF_BYTE = bytes.fromhex("cc")
|
||||
TX_COUNT_HEIGHT = 569399
|
||||
TX_COUNT = 2157510
|
||||
@ -617,7 +617,7 @@ class DashTestnet(Dash):
|
||||
GENESIS_HASH = ('00000bafbc94add76cb75e2ec9289483'
|
||||
'7288a481e5c005f6563d91623bf8bc2c')
|
||||
P2PKH_VERBYTE = bytes.fromhex("8c")
|
||||
P2SH_VERBYTE = bytes.fromhex("13")
|
||||
P2SH_VERBYTES = [bytes.fromhex("13")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
TX_COUNT_HEIGHT = 101619
|
||||
TX_COUNT = 132681
|
||||
@ -637,7 +637,7 @@ class Argentum(CoinAuxPow):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("17")
|
||||
P2SH_VERBYTE = bytes.fromhex("05")
|
||||
P2SH_VERBYTES = [bytes.fromhex("05")]
|
||||
WIF_BYTE = bytes.fromhex("97")
|
||||
GENESIS_HASH = ('88c667bc63167685e4e4da058fffdfe8'
|
||||
'e007e5abffd6855de52ad59df7bb0bb2')
|
||||
@ -655,7 +655,7 @@ class ArgentumTestnet(Argentum):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("6f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
REORG_LIMIT = 2000
|
||||
|
||||
@ -667,7 +667,7 @@ class DigiByte(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("1E")
|
||||
P2SH_VERBYTE = bytes.fromhex("05")
|
||||
P2SH_VERBYTES = [bytes.fromhex("05")]
|
||||
WIF_BYTE = bytes.fromhex("80")
|
||||
GENESIS_HASH = ('7497ea1b465eb39f1c8f507bc877078f'
|
||||
'e016d6fcb6dfad3a64c98dcc6e1e8496')
|
||||
@ -684,7 +684,7 @@ class DigiByteTestnet(DigiByte):
|
||||
XPUB_VERBYTES = bytes.fromhex("043587cf")
|
||||
XPRV_VERBYTES = bytes.fromhex("04358394")
|
||||
P2PKH_VERBYTE = bytes.fromhex("6f")
|
||||
P2SH_VERBYTE = bytes.fromhex("c4")
|
||||
P2SH_VERBYTES = [bytes.fromhex("c4")]
|
||||
WIF_BYTE = bytes.fromhex("ef")
|
||||
GENESIS_HASH = ('b5dca8039e300198e5fe7cd23bdd1728'
|
||||
'e2a444af34c447dbd0916fa3430a68c2')
|
||||
@ -701,7 +701,7 @@ class FairCoin(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("5f")
|
||||
P2SH_VERBYTE = bytes.fromhex("24")
|
||||
P2SH_VERBYTES = [bytes.fromhex("24")]
|
||||
WIF_BYTE = bytes.fromhex("df")
|
||||
GENESIS_HASH = ('1f701f2b8de1339dc0ec908f3fb6e9b0'
|
||||
'b870b6f20ba893e120427e42bbc048d7')
|
||||
@ -750,7 +750,7 @@ class Zcash(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("1CB8")
|
||||
P2SH_VERBYTE = bytes.fromhex("1CBD")
|
||||
P2SH_VERBYTES = [bytes.fromhex("1CBD")]
|
||||
WIF_BYTE = bytes.fromhex("80")
|
||||
GENESIS_HASH = ('00040fe8ec8471911baa1db1266ea15d'
|
||||
'd06b4a8a5c453883c000b031973dce08')
|
||||
@ -798,7 +798,7 @@ class Einsteinium(Coin):
|
||||
XPUB_VERBYTES = bytes.fromhex("0488b21e")
|
||||
XPRV_VERBYTES = bytes.fromhex("0488ade4")
|
||||
P2PKH_VERBYTE = bytes.fromhex("21")
|
||||
P2SH_VERBYTE = bytes.fromhex("05")
|
||||
P2SH_VERBYTES = [bytes.fromhex("05")]
|
||||
WIF_BYTE = bytes.fromhex("a1")
|
||||
GENESIS_HASH = ('4e56204bb7b8ac06f860ff1c845f03f9'
|
||||
'84303b5b97eb7b42868f714611aed94b')
|
||||
|
||||
@ -36,7 +36,7 @@ addresses = [
|
||||
"a773db925b09add367dcc253c1f9bbc1d11ec6fd", "062d8515e50cb92b8a3a73"),
|
||||
(Litecoin, "LNBAaWuZmipg29WXfz5dtAm1pjo8FEH8yg",
|
||||
"206168f5322583ff37f8e55665a4789ae8963532", "b8cb80b26e8932f5b12a7e"),
|
||||
(Litecoin, "3GxRZWkJufR5XA8hnNJgQ2gkASSheoBcmW",
|
||||
(Litecoin, "MPAZsQAGrnGWKfQbtFJ2Dfw9V939e7D3E2",
|
||||
"a773db925b09add367dcc253c1f9bbc1d11ec6fd", "062d8515e50cb92b8a3a73"),
|
||||
(Zcash, "t1LppKe1sfPNDMysGSGuTjxoAsBcvvSYv5j",
|
||||
"206168f5322583ff37f8e55665a4789ae8963532", "b8cb80b26e8932f5b12a7e"),
|
||||
@ -64,7 +64,7 @@ def test_address_from_hash160(address):
|
||||
verbyte, hash_bytes = raw[:verlen], raw[verlen:]
|
||||
if coin.P2PKH_VERBYTE == verbyte:
|
||||
assert coin.P2PKH_address_from_hash160(bytes.fromhex(hash)) == addr
|
||||
elif coin.P2SH_VERBYTE == verbyte:
|
||||
elif verbyte in coin.P2SH_VERBYTES:
|
||||
assert coin.P2SH_address_from_hash160(bytes.fromhex(hash)) == addr
|
||||
else:
|
||||
raise Exception("Unknown version byte")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user