address-encoder 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- address_encoder/__init__.py +72 -0
- address_encoder/coders.py +368 -0
- address_encoder/coins/__init__.py +67 -0
- address_encoder/coins/abbc.py +15 -0
- address_encoder/coins/ada.py +32 -0
- address_encoder/coins/ae.py +23 -0
- address_encoder/coins/aib.py +17 -0
- address_encoder/coins/aion.py +32 -0
- address_encoder/coins/algo.py +42 -0
- address_encoder/coins/ar.py +15 -0
- address_encoder/coins/ardr.py +77 -0
- address_encoder/coins/ark.py +24 -0
- address_encoder/coins/atom.py +15 -0
- address_encoder/coins/avax.py +31 -0
- address_encoder/coins/bcd.py +20 -0
- address_encoder/coins/bch.py +42 -0
- address_encoder/coins/bcn.py +41 -0
- address_encoder/coins/bdx.py +15 -0
- address_encoder/coins/bnb.py +15 -0
- address_encoder/coins/bps.py +17 -0
- address_encoder/coins/bsv.py +28 -0
- address_encoder/coins/btc.py +20 -0
- address_encoder/coins/btg.py +20 -0
- address_encoder/coins/btm.py +15 -0
- address_encoder/coins/bts.py +15 -0
- address_encoder/coins/cca.py +17 -0
- address_encoder/coins/ccxx.py +20 -0
- address_encoder/coins/celoLegacy.py +15 -0
- address_encoder/coins/ckb.py +15 -0
- address_encoder/coins/cloLegacy.py +15 -0
- address_encoder/coins/dash.py +17 -0
- address_encoder/coins/dcr.py +15 -0
- address_encoder/coins/dgb.py +20 -0
- address_encoder/coins/divi.py +17 -0
- address_encoder/coins/doge.py +17 -0
- address_encoder/coins/dot.py +15 -0
- address_encoder/coins/egld.py +15 -0
- address_encoder/coins/ela.py +15 -0
- address_encoder/coins/eos.py +15 -0
- address_encoder/coins/etcLegacy.py +15 -0
- address_encoder/coins/eth.py +15 -0
- address_encoder/coins/etn.py +46 -0
- address_encoder/coins/ewtLegacy.py +15 -0
- address_encoder/coins/fil.py +69 -0
- address_encoder/coins/fio.py +15 -0
- address_encoder/coins/firo.py +17 -0
- address_encoder/coins/flow.py +32 -0
- address_encoder/coins/flux.py +21 -0
- address_encoder/coins/ftmLegacy.py +15 -0
- address_encoder/coins/gnoLegacy.py +15 -0
- address_encoder/coins/goLegacy.py +15 -0
- address_encoder/coins/grin.py +15 -0
- address_encoder/coins/gxc.py +15 -0
- address_encoder/coins/hbar.py +33 -0
- address_encoder/coins/hive.py +15 -0
- address_encoder/coins/hns.py +39 -0
- address_encoder/coins/hnt.py +26 -0
- address_encoder/coins/icx.py +37 -0
- address_encoder/coins/iost.py +15 -0
- address_encoder/coins/iota.py +26 -0
- address_encoder/coins/iotx.py +15 -0
- address_encoder/coins/iris.py +15 -0
- address_encoder/coins/kava.py +15 -0
- address_encoder/coins/kmd.py +17 -0
- address_encoder/coins/ksm.py +15 -0
- address_encoder/coins/lcc.py +20 -0
- address_encoder/coins/lrg.py +17 -0
- address_encoder/coins/lsk.py +25 -0
- address_encoder/coins/ltc.py +20 -0
- address_encoder/coins/luna.py +15 -0
- address_encoder/coins/mona.py +20 -0
- address_encoder/coins/mrx.py +15 -0
- address_encoder/coins/nano.py +74 -0
- address_encoder/coins/nas.py +42 -0
- address_encoder/coins/near.py +27 -0
- address_encoder/coins/neo.py +15 -0
- address_encoder/coins/nim.py +72 -0
- address_encoder/coins/nmc.py +15 -0
- address_encoder/coins/nostr.py +15 -0
- address_encoder/coins/nrgLegacy.py +15 -0
- address_encoder/coins/nuls.py +68 -0
- address_encoder/coins/one.py +15 -0
- address_encoder/coins/ont.py +26 -0
- address_encoder/coins/poaLegacy.py +15 -0
- address_encoder/coins/ppc.py +17 -0
- address_encoder/coins/qtum.py +15 -0
- address_encoder/coins/rbtc.py +15 -0
- address_encoder/coins/rdd.py +17 -0
- address_encoder/coins/rune.py +15 -0
- address_encoder/coins/rvn.py +17 -0
- address_encoder/coins/sc.py +38 -0
- address_encoder/coins/sero.py +22 -0
- address_encoder/coins/sol.py +31 -0
- address_encoder/coins/srm.py +15 -0
- address_encoder/coins/steem.py +15 -0
- address_encoder/coins/strat.py +17 -0
- address_encoder/coins/strk.py +53 -0
- address_encoder/coins/stx.py +104 -0
- address_encoder/coins/sui.py +34 -0
- address_encoder/coins/sys.py +20 -0
- address_encoder/coins/tfuel.py +15 -0
- address_encoder/coins/thetaLegacy.py +15 -0
- address_encoder/coins/tomoLegacy.py +15 -0
- address_encoder/coins/trx.py +15 -0
- address_encoder/coins/ttLegacy.py +15 -0
- address_encoder/coins/vet.py +15 -0
- address_encoder/coins/via.py +17 -0
- address_encoder/coins/vlx.py +15 -0
- address_encoder/coins/vlxLegacy.py +15 -0
- address_encoder/coins/vsys.py +44 -0
- address_encoder/coins/wan.py +44 -0
- address_encoder/coins/waves.py +43 -0
- address_encoder/coins/wicc.py +17 -0
- address_encoder/coins/xch.py +15 -0
- address_encoder/coins/xem.py +31 -0
- address_encoder/coins/xhv.py +15 -0
- address_encoder/coins/xlm.py +50 -0
- address_encoder/coins/xmr.py +15 -0
- address_encoder/coins/xrp.py +14 -0
- address_encoder/coins/xtz.py +51 -0
- address_encoder/coins/xvg.py +17 -0
- address_encoder/coins/zec.py +21 -0
- address_encoder/coins/zen.py +36 -0
- address_encoder/coins/zil.py +15 -0
- address_encoder/consts/__init__.py +17 -0
- address_encoder/consts/coin_maps.py +162 -0
- address_encoder/py.typed +0 -0
- address_encoder/types.py +22 -0
- address_encoder/utils/__init__.py +120 -0
- address_encoder/utils/base32.py +68 -0
- address_encoder/utils/base58_.py +129 -0
- address_encoder/utils/base64url.py +14 -0
- address_encoder/utils/bch.py +103 -0
- address_encoder/utils/bech32_.py +181 -0
- address_encoder/utils/bitcoin.py +50 -0
- address_encoder/utils/byron.py +24 -0
- address_encoder/utils/bytes_.py +43 -0
- address_encoder/utils/crc32.py +55 -0
- address_encoder/utils/dot.py +33 -0
- address_encoder/utils/eosio.py +30 -0
- address_encoder/utils/evm.py +19 -0
- address_encoder/utils/flow.py +24 -0
- address_encoder/utils/hex_.py +69 -0
- address_encoder/utils/near.py +11 -0
- address_encoder/utils/zcash.py +39 -0
- address_encoder-1.0.0.dist-info/METADATA +132 -0
- address_encoder-1.0.0.dist-info/RECORD +149 -0
- address_encoder-1.0.0.dist-info/WHEEL +4 -0
- address_encoder-1.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base64url import base64url_nopad_decode, base64url_nopad_encode
|
|
5
|
+
|
|
6
|
+
encode_ar_address = base64url_nopad_encode
|
|
7
|
+
decode_ar_address = base64url_nopad_decode
|
|
8
|
+
|
|
9
|
+
ar = CoinCoder(
|
|
10
|
+
name="ar",
|
|
11
|
+
coin_type=472,
|
|
12
|
+
encode=encode_ar_address,
|
|
13
|
+
decode=decode_ar_address,
|
|
14
|
+
)
|
|
15
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
_PREFIX = "ARDOR"
|
|
6
|
+
_ALPHABET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
|
|
7
|
+
_CODEWORD_MAP = [3, 2, 1, 0, 7, 6, 5, 4, 13, 14, 15, 16, 12, 8, 9, 10, 11]
|
|
8
|
+
|
|
9
|
+
_GLOG = [
|
|
10
|
+
0, 0, 1, 18, 2, 5, 19, 11, 3, 29, 6, 27, 20, 8, 12, 23, 4, 10, 30, 17, 7, 22,
|
|
11
|
+
28, 26, 21, 25, 9, 16, 13, 14, 24, 15,
|
|
12
|
+
]
|
|
13
|
+
_GEXP = [
|
|
14
|
+
1, 2, 4, 8, 16, 5, 10, 20, 13, 26, 17, 7, 14, 28, 29, 31, 27, 19, 3, 6, 12,
|
|
15
|
+
24, 21, 15, 30, 25, 23, 11, 22, 9, 18, 1,
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _gmult(a: int, b: int) -> int:
|
|
20
|
+
if a == 0 or b == 0:
|
|
21
|
+
return 0
|
|
22
|
+
return _GEXP[(_GLOG[a] + _GLOG[b]) % 31]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _ardr_checksum(source: bytes) -> bool:
|
|
26
|
+
sum_value = 0
|
|
27
|
+
for i in range(1, 5):
|
|
28
|
+
t = 0
|
|
29
|
+
for j in range(31):
|
|
30
|
+
if j > 12 and j < 27:
|
|
31
|
+
continue
|
|
32
|
+
pos = j - 14 if j > 26 else j
|
|
33
|
+
t ^= _gmult(source[pos], _GEXP[(i * j) % 31])
|
|
34
|
+
sum_value |= t
|
|
35
|
+
return sum_value == 0
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def encode_ardr_address(source: bytes) -> str:
|
|
39
|
+
chars = [""] * 17
|
|
40
|
+
for index, byte in enumerate(source):
|
|
41
|
+
write_index = _CODEWORD_MAP[index]
|
|
42
|
+
chars[write_index] = _ALPHABET[16 * ((byte & 0xF0) >> 4) + (byte & 0x0F)]
|
|
43
|
+
return (
|
|
44
|
+
f"{_PREFIX}-{''.join(chars[0:4])}-{''.join(chars[4:8])}-"
|
|
45
|
+
f"{''.join(chars[8:12])}-{''.join(chars[12:17])}"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def decode_ardr_address(source: str) -> bytes:
|
|
50
|
+
if not source.startswith(f"{_PREFIX}-") or len(source) != 26:
|
|
51
|
+
raise ValueError("Unrecognised address format")
|
|
52
|
+
|
|
53
|
+
joined = source[6:]
|
|
54
|
+
codeword = bytearray([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
|
|
55
|
+
j = 0
|
|
56
|
+
for i in range(20):
|
|
57
|
+
char = joined[i]
|
|
58
|
+
if char == "-":
|
|
59
|
+
continue
|
|
60
|
+
pos = _ALPHABET.index(char)
|
|
61
|
+
write_index = _CODEWORD_MAP[j]
|
|
62
|
+
j += 1
|
|
63
|
+
codeword[write_index] = pos
|
|
64
|
+
|
|
65
|
+
if not _ardr_checksum(bytes(codeword)):
|
|
66
|
+
raise ValueError("Unrecognised address format")
|
|
67
|
+
|
|
68
|
+
return bytes(codeword)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
ardr = CoinCoder(
|
|
72
|
+
name="ardr",
|
|
73
|
+
coin_type=16754,
|
|
74
|
+
encode=encode_ardr_address,
|
|
75
|
+
decode=decode_ardr_address,
|
|
76
|
+
)
|
|
77
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import base58_check_decode, base58_check_encode
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def encode_ark_address(source: bytes) -> str:
|
|
8
|
+
return base58_check_encode(source)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def decode_ark_address(source: str) -> bytes:
|
|
12
|
+
decoded = base58_check_decode(source)
|
|
13
|
+
if decoded[0] != 23:
|
|
14
|
+
raise ValueError("Invalid address")
|
|
15
|
+
return decoded
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ark = CoinCoder(
|
|
19
|
+
name="ark",
|
|
20
|
+
coin_type=111,
|
|
21
|
+
encode=encode_ark_address,
|
|
22
|
+
decode=decode_ark_address,
|
|
23
|
+
)
|
|
24
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bech32_ import create_bech32_decoder, create_bech32_encoder
|
|
6
|
+
|
|
7
|
+
encode_atom_address = create_bech32_encoder("cosmos")
|
|
8
|
+
decode_atom_address = create_bech32_decoder("cosmos")
|
|
9
|
+
|
|
10
|
+
atom = CoinCoder(
|
|
11
|
+
name="atom",
|
|
12
|
+
coin_type=118,
|
|
13
|
+
encode=encode_atom_address,
|
|
14
|
+
decode=decode_atom_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.bech32_ import create_bech32_decoder, create_bech32_encoder
|
|
5
|
+
|
|
6
|
+
_hrp = "avax"
|
|
7
|
+
_decode_bech32 = create_bech32_decoder(_hrp)
|
|
8
|
+
_encode_bech32 = create_bech32_encoder(_hrp)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def encode_avax_address(source: bytes) -> str:
|
|
12
|
+
return _encode_bech32(source)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def decode_avax_address(source: str) -> bytes:
|
|
16
|
+
address = source
|
|
17
|
+
chain_id, _, possible_addr = source.partition("-")
|
|
18
|
+
if possible_addr:
|
|
19
|
+
address = possible_addr
|
|
20
|
+
else:
|
|
21
|
+
chain_id = ""
|
|
22
|
+
return _decode_bech32(address)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
avax = CoinCoder(
|
|
26
|
+
name="avax",
|
|
27
|
+
coin_type=9000,
|
|
28
|
+
encode=encode_avax_address,
|
|
29
|
+
decode=decode_avax_address,
|
|
30
|
+
)
|
|
31
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bitcoin import BitcoinCoderParameters, create_bitcoin_decoder, create_bitcoin_encoder
|
|
6
|
+
|
|
7
|
+
_params = BitcoinCoderParameters(
|
|
8
|
+
hrp="bcd",
|
|
9
|
+
p2pkh_versions=(bytes([0]),),
|
|
10
|
+
p2sh_versions=(bytes([5]),),
|
|
11
|
+
)
|
|
12
|
+
encode_bcd_address = create_bitcoin_encoder(_params)
|
|
13
|
+
decode_bcd_address = create_bitcoin_decoder(_params)
|
|
14
|
+
|
|
15
|
+
bcd = CoinCoder(
|
|
16
|
+
name="bcd",
|
|
17
|
+
coin_type=999,
|
|
18
|
+
encode=encode_bcd_address,
|
|
19
|
+
decode=decode_bcd_address,
|
|
20
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder
|
|
5
|
+
from address_encoder.utils.bch import decode_bch_address_to_type_and_hash, encode_bch_address_with_version
|
|
6
|
+
|
|
7
|
+
_p2pkh_versions = (bytes([0x00]),)
|
|
8
|
+
_p2sh_versions = (bytes([0x05]),)
|
|
9
|
+
_bch_base58_decode = create_base58_versioned_decoder(_p2pkh_versions, _p2sh_versions)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def encode_bch_address(source: bytes) -> str:
|
|
13
|
+
if source[0] == 0x76:
|
|
14
|
+
if source[1] != 0xA9 or source[-2] != 0x88 or source[-1] != 0xAC:
|
|
15
|
+
raise ValueError("Unrecognised address format")
|
|
16
|
+
return encode_bch_address_with_version(0, source[3 : 3 + source[2]])
|
|
17
|
+
if source[0] == 0xA9:
|
|
18
|
+
if source[-1] != 0x87:
|
|
19
|
+
raise ValueError("Unrecognised address format")
|
|
20
|
+
return encode_bch_address_with_version(8, source[2 : 2 + source[1]])
|
|
21
|
+
raise ValueError("Unrecognised address format")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def decode_bch_address(source: str) -> bytes:
|
|
25
|
+
try:
|
|
26
|
+
return _bch_base58_decode(source)
|
|
27
|
+
except ValueError:
|
|
28
|
+
address_type, hash_bytes = decode_bch_address_to_type_and_hash(source)
|
|
29
|
+
if address_type == 0:
|
|
30
|
+
return b"\x76\xa9\x14" + hash_bytes + b"\x88\xac"
|
|
31
|
+
if address_type == 8:
|
|
32
|
+
return b"\xa9\x14" + hash_bytes + b"\x87"
|
|
33
|
+
raise ValueError("Unrecognised address format") from None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
bch = CoinCoder(
|
|
37
|
+
name="bch",
|
|
38
|
+
coin_type=145,
|
|
39
|
+
encode=encode_bch_address,
|
|
40
|
+
decode=decode_bch_address,
|
|
41
|
+
)
|
|
42
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from Crypto.Hash import keccak
|
|
4
|
+
|
|
5
|
+
from address_encoder.types import CoinCoder
|
|
6
|
+
from address_encoder.utils.base58_ import base58xmr_decode, base58xmr_encode
|
|
7
|
+
|
|
8
|
+
_VALID_TAGS = (bytes([0x06]), bytes([0xCE, 0xF6, 0x22]))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _bcn_checksum(data: bytes) -> bytes:
|
|
12
|
+
return keccak.new(digest_bits=256, data=data).digest()[:4]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _bcn_checksum_decode(data: bytes) -> bytes:
|
|
16
|
+
payload, checksum = data[:-4], data[-4:]
|
|
17
|
+
if _bcn_checksum(payload) != checksum:
|
|
18
|
+
raise ValueError("Invalid checksum")
|
|
19
|
+
return payload
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def encode_bcn_address(source: bytes) -> str:
|
|
23
|
+
checksum = _bcn_checksum(source)
|
|
24
|
+
return base58xmr_encode(source + checksum)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def decode_bcn_address(source: str) -> bytes:
|
|
28
|
+
decoded = base58xmr_decode(source)
|
|
29
|
+
tag = decoded[:-68]
|
|
30
|
+
if len(decoded) < 68 or tag not in _VALID_TAGS:
|
|
31
|
+
raise ValueError("Unrecognised address format")
|
|
32
|
+
return _bcn_checksum_decode(decoded)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
bcn = CoinCoder(
|
|
36
|
+
name="bcn",
|
|
37
|
+
coin_type=204,
|
|
38
|
+
encode=encode_bcn_address,
|
|
39
|
+
decode=decode_bcn_address,
|
|
40
|
+
)
|
|
41
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import base58xmr_decode, base58xmr_encode
|
|
5
|
+
|
|
6
|
+
encode_bdx_address = base58xmr_encode
|
|
7
|
+
decode_bdx_address = base58xmr_decode
|
|
8
|
+
|
|
9
|
+
bdx = CoinCoder(
|
|
10
|
+
name="bdx",
|
|
11
|
+
coin_type=570,
|
|
12
|
+
encode=encode_bdx_address,
|
|
13
|
+
decode=decode_bdx_address,
|
|
14
|
+
)
|
|
15
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bech32_ import create_bech32_decoder, create_bech32_encoder
|
|
6
|
+
|
|
7
|
+
encode_bnb_address = create_bech32_encoder("bnb")
|
|
8
|
+
decode_bnb_address = create_bech32_decoder("bnb")
|
|
9
|
+
|
|
10
|
+
bnb = CoinCoder(
|
|
11
|
+
name="bnb",
|
|
12
|
+
coin_type=714,
|
|
13
|
+
encode=encode_bnb_address,
|
|
14
|
+
decode=decode_bnb_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder, create_base58_versioned_encoder
|
|
6
|
+
|
|
7
|
+
_p2pkh = (bytes([0]),)
|
|
8
|
+
_p2sh = (bytes([5]),)
|
|
9
|
+
encode_bps_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_bps_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
bps = CoinCoder(
|
|
13
|
+
name="bps",
|
|
14
|
+
coin_type=576,
|
|
15
|
+
encode=encode_bps_address,
|
|
16
|
+
decode=decode_bps_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import base58_check_decode, base58_check_encode
|
|
5
|
+
|
|
6
|
+
_VERSION = bytes([0x00])
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def encode_bsv_address(source: bytes) -> str:
|
|
10
|
+
return base58_check_encode(_VERSION + source)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def decode_bsv_address(source: str) -> bytes:
|
|
14
|
+
decoded = base58_check_decode(source)
|
|
15
|
+
if len(decoded) != 21:
|
|
16
|
+
raise ValueError("Unrecognised address format")
|
|
17
|
+
if decoded[0] != 0x00:
|
|
18
|
+
raise ValueError("Unrecognised address format")
|
|
19
|
+
return decoded[1:]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
bsv = CoinCoder(
|
|
23
|
+
name="bsv",
|
|
24
|
+
coin_type=236,
|
|
25
|
+
encode=encode_bsv_address,
|
|
26
|
+
decode=decode_bsv_address,
|
|
27
|
+
)
|
|
28
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bitcoin import BitcoinCoderParameters, create_bitcoin_decoder, create_bitcoin_encoder
|
|
6
|
+
|
|
7
|
+
_params = BitcoinCoderParameters(
|
|
8
|
+
hrp="bc",
|
|
9
|
+
p2pkh_versions=(bytes([0]),),
|
|
10
|
+
p2sh_versions=(bytes([5]),),
|
|
11
|
+
)
|
|
12
|
+
encode_btc_address = create_bitcoin_encoder(_params)
|
|
13
|
+
decode_btc_address = create_bitcoin_decoder(_params)
|
|
14
|
+
|
|
15
|
+
btc = CoinCoder(
|
|
16
|
+
name="btc",
|
|
17
|
+
coin_type=0,
|
|
18
|
+
encode=encode_btc_address,
|
|
19
|
+
decode=decode_btc_address,
|
|
20
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bitcoin import BitcoinCoderParameters, create_bitcoin_decoder, create_bitcoin_encoder
|
|
6
|
+
|
|
7
|
+
_params = BitcoinCoderParameters(
|
|
8
|
+
hrp="btg",
|
|
9
|
+
p2pkh_versions=(bytes([38]),),
|
|
10
|
+
p2sh_versions=(bytes([23]),),
|
|
11
|
+
)
|
|
12
|
+
encode_btg_address = create_bitcoin_encoder(_params)
|
|
13
|
+
decode_btg_address = create_bitcoin_decoder(_params)
|
|
14
|
+
|
|
15
|
+
btg = CoinCoder(
|
|
16
|
+
name="btg",
|
|
17
|
+
coin_type=156,
|
|
18
|
+
encode=encode_btg_address,
|
|
19
|
+
decode=decode_btg_address,
|
|
20
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bech32_ import create_bech32_segwit_decoder, create_bech32_segwit_encoder
|
|
6
|
+
|
|
7
|
+
encode_btm_address = create_bech32_segwit_encoder("bm")
|
|
8
|
+
decode_btm_address = create_bech32_segwit_decoder("bm")
|
|
9
|
+
|
|
10
|
+
btm = CoinCoder(
|
|
11
|
+
name="btm",
|
|
12
|
+
coin_type=153,
|
|
13
|
+
encode=encode_btm_address,
|
|
14
|
+
decode=decode_btm_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.eosio import create_eos_decoder, create_eos_encoder
|
|
6
|
+
|
|
7
|
+
encode_bts_address = create_eos_encoder("BTS")
|
|
8
|
+
decode_bts_address = create_eos_decoder("BTS")
|
|
9
|
+
|
|
10
|
+
bts = CoinCoder(
|
|
11
|
+
name="bts",
|
|
12
|
+
coin_type=308,
|
|
13
|
+
encode=encode_bts_address,
|
|
14
|
+
decode=decode_bts_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder, create_base58_versioned_encoder
|
|
6
|
+
|
|
7
|
+
_p2pkh = (bytes([11]),)
|
|
8
|
+
_p2sh = (bytes([5]),)
|
|
9
|
+
encode_cca_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_cca_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
cca = CoinCoder(
|
|
13
|
+
name="cca",
|
|
14
|
+
coin_type=489,
|
|
15
|
+
encode=encode_cca_address,
|
|
16
|
+
decode=decode_cca_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bitcoin import BitcoinCoderParameters, create_bitcoin_decoder, create_bitcoin_encoder
|
|
6
|
+
|
|
7
|
+
_params = BitcoinCoderParameters(
|
|
8
|
+
hrp="ccx",
|
|
9
|
+
p2pkh_versions=(bytes([137]),),
|
|
10
|
+
p2sh_versions=(bytes([75]), bytes([5]),),
|
|
11
|
+
)
|
|
12
|
+
encode_ccxx_address = create_bitcoin_encoder(_params)
|
|
13
|
+
decode_ccxx_address = create_bitcoin_decoder(_params)
|
|
14
|
+
|
|
15
|
+
ccxx = CoinCoder(
|
|
16
|
+
name="ccxx",
|
|
17
|
+
coin_type=571,
|
|
18
|
+
encode=encode_ccxx_address,
|
|
19
|
+
decode=decode_ccxx_address,
|
|
20
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.hex_ import create_hex_checksummed_decoder, create_hex_checksummed_encoder
|
|
6
|
+
|
|
7
|
+
encode_celoLegacy_address = create_hex_checksummed_encoder()
|
|
8
|
+
decode_celoLegacy_address = create_hex_checksummed_decoder()
|
|
9
|
+
|
|
10
|
+
celoLegacy = CoinCoder(
|
|
11
|
+
name="celoLegacy",
|
|
12
|
+
coin_type=52752,
|
|
13
|
+
encode=encode_celoLegacy_address,
|
|
14
|
+
decode=decode_celoLegacy_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bech32_ import create_bech32_decoder, create_bech32_encoder
|
|
6
|
+
|
|
7
|
+
encode_ckb_address = create_bech32_encoder("ckb")
|
|
8
|
+
decode_ckb_address = create_bech32_decoder("ckb")
|
|
9
|
+
|
|
10
|
+
ckb = CoinCoder(
|
|
11
|
+
name="ckb",
|
|
12
|
+
coin_type=309,
|
|
13
|
+
encode=encode_ckb_address,
|
|
14
|
+
decode=decode_ckb_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.hex_ import create_hex_checksummed_decoder, create_hex_checksummed_encoder
|
|
6
|
+
|
|
7
|
+
encode_cloLegacy_address = create_hex_checksummed_encoder()
|
|
8
|
+
decode_cloLegacy_address = create_hex_checksummed_decoder()
|
|
9
|
+
|
|
10
|
+
cloLegacy = CoinCoder(
|
|
11
|
+
name="cloLegacy",
|
|
12
|
+
coin_type=820,
|
|
13
|
+
encode=encode_cloLegacy_address,
|
|
14
|
+
decode=decode_cloLegacy_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder, create_base58_versioned_encoder
|
|
6
|
+
|
|
7
|
+
_p2pkh = (bytes([76]),)
|
|
8
|
+
_p2sh = (bytes([16]),)
|
|
9
|
+
encode_dash_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_dash_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
dash = CoinCoder(
|
|
13
|
+
name="dash",
|
|
14
|
+
coin_type=5,
|
|
15
|
+
encode=encode_dash_address,
|
|
16
|
+
decode=decode_dash_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import base58_unchecked_decode, base58_unchecked_encode
|
|
5
|
+
|
|
6
|
+
encode_dcr_address = base58_unchecked_encode
|
|
7
|
+
decode_dcr_address = base58_unchecked_decode
|
|
8
|
+
|
|
9
|
+
dcr = CoinCoder(
|
|
10
|
+
name="dcr",
|
|
11
|
+
coin_type=42,
|
|
12
|
+
encode=encode_dcr_address,
|
|
13
|
+
decode=decode_dcr_address,
|
|
14
|
+
)
|
|
15
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bitcoin import BitcoinCoderParameters, create_bitcoin_decoder, create_bitcoin_encoder
|
|
6
|
+
|
|
7
|
+
_params = BitcoinCoderParameters(
|
|
8
|
+
hrp="dgb",
|
|
9
|
+
p2pkh_versions=(bytes([30]),),
|
|
10
|
+
p2sh_versions=(bytes([63]),),
|
|
11
|
+
)
|
|
12
|
+
encode_dgb_address = create_bitcoin_encoder(_params)
|
|
13
|
+
decode_dgb_address = create_bitcoin_decoder(_params)
|
|
14
|
+
|
|
15
|
+
dgb = CoinCoder(
|
|
16
|
+
name="dgb",
|
|
17
|
+
coin_type=20,
|
|
18
|
+
encode=encode_dgb_address,
|
|
19
|
+
decode=decode_dgb_address,
|
|
20
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder, create_base58_versioned_encoder
|
|
6
|
+
|
|
7
|
+
_p2pkh = (bytes([30]),)
|
|
8
|
+
_p2sh = (bytes([13]),)
|
|
9
|
+
encode_divi_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_divi_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
divi = CoinCoder(
|
|
13
|
+
name="divi",
|
|
14
|
+
coin_type=301,
|
|
15
|
+
encode=encode_divi_address,
|
|
16
|
+
decode=decode_divi_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.base58_ import create_base58_versioned_decoder, create_base58_versioned_encoder
|
|
6
|
+
|
|
7
|
+
_p2pkh = (bytes([30]),)
|
|
8
|
+
_p2sh = (bytes([22]),)
|
|
9
|
+
encode_doge_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_doge_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
doge = CoinCoder(
|
|
13
|
+
name="doge",
|
|
14
|
+
coin_type=3,
|
|
15
|
+
encode=encode_doge_address,
|
|
16
|
+
decode=decode_doge_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.dot import create_dot_address_decoder, create_dot_address_encoder
|
|
6
|
+
|
|
7
|
+
encode_dot_address = create_dot_address_encoder(0)
|
|
8
|
+
decode_dot_address = create_dot_address_decoder(0)
|
|
9
|
+
|
|
10
|
+
dot = CoinCoder(
|
|
11
|
+
name="dot",
|
|
12
|
+
coin_type=354,
|
|
13
|
+
encode=encode_dot_address,
|
|
14
|
+
decode=decode_dot_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.bech32_ import create_bech32_decoder, create_bech32_encoder
|
|
6
|
+
|
|
7
|
+
encode_egld_address = create_bech32_encoder("erd")
|
|
8
|
+
decode_egld_address = create_bech32_decoder("erd")
|
|
9
|
+
|
|
10
|
+
egld = CoinCoder(
|
|
11
|
+
name="egld",
|
|
12
|
+
coin_type=508,
|
|
13
|
+
encode=encode_egld_address,
|
|
14
|
+
decode=decode_egld_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.base58_ import base58_unchecked_decode, base58_unchecked_encode
|
|
5
|
+
|
|
6
|
+
encode_ela_address = base58_unchecked_encode
|
|
7
|
+
decode_ela_address = base58_unchecked_decode
|
|
8
|
+
|
|
9
|
+
ela = CoinCoder(
|
|
10
|
+
name="ela",
|
|
11
|
+
coin_type=2305,
|
|
12
|
+
encode=encode_ela_address,
|
|
13
|
+
decode=decode_ela_address,
|
|
14
|
+
)
|
|
15
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
|
|
5
|
+
from address_encoder.utils.eosio import create_eos_decoder, create_eos_encoder
|
|
6
|
+
|
|
7
|
+
encode_eos_address = create_eos_encoder("EOS")
|
|
8
|
+
decode_eos_address = create_eos_decoder("EOS")
|
|
9
|
+
|
|
10
|
+
eos = CoinCoder(
|
|
11
|
+
name="eos",
|
|
12
|
+
coin_type=194,
|
|
13
|
+
encode=encode_eos_address,
|
|
14
|
+
decode=decode_eos_address,
|
|
15
|
+
)
|