address-encoder 1.0.0rc3__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.0rc3.dist-info/METADATA +132 -0
- address_encoder-1.0.0rc3.dist-info/RECORD +149 -0
- address_encoder-1.0.0rc3.dist-info/WHEEL +4 -0
- address_encoder-1.0.0rc3.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder import coins
|
|
4
|
+
from address_encoder.consts.coin_maps import (
|
|
5
|
+
COIN_NAME_TO_TYPE,
|
|
6
|
+
COIN_TYPE_TO_NAME,
|
|
7
|
+
EVM_COIN_NAME_TO_TYPE,
|
|
8
|
+
EVM_COIN_TYPE_TO_NAME,
|
|
9
|
+
NON_EVM_COIN_NAME_TO_TYPE,
|
|
10
|
+
NON_EVM_COIN_TYPE_TO_NAME,
|
|
11
|
+
)
|
|
12
|
+
from address_encoder.types import CoinCoder
|
|
13
|
+
from address_encoder.utils.evm import SLIP44_MSB, coin_type_to_evm_chain_id
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"COIN_NAME_TO_TYPE",
|
|
17
|
+
"COIN_TYPE_TO_NAME",
|
|
18
|
+
"EVM_COIN_NAME_TO_TYPE",
|
|
19
|
+
"EVM_COIN_TYPE_TO_NAME",
|
|
20
|
+
"NON_EVM_COIN_NAME_TO_TYPE",
|
|
21
|
+
"NON_EVM_COIN_TYPE_TO_NAME",
|
|
22
|
+
"CoinCoder",
|
|
23
|
+
"SLIP44_MSB",
|
|
24
|
+
"coin_type_to_evm_chain_id",
|
|
25
|
+
"get_coder_by_coin_name",
|
|
26
|
+
"get_coder_by_coin_type",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def get_coder_by_coin_name(name: str) -> CoinCoder:
|
|
31
|
+
"""Return the address codec for a coin symbol such as ``btc`` or ``op``."""
|
|
32
|
+
coin_type = COIN_NAME_TO_TYPE.get(name)
|
|
33
|
+
if coin_type is None:
|
|
34
|
+
raise ValueError(f"Unsupported coin: {name}")
|
|
35
|
+
|
|
36
|
+
if coin_type >= SLIP44_MSB:
|
|
37
|
+
evm_chain_id = coin_type_to_evm_chain_id(coin_type)
|
|
38
|
+
return CoinCoder(
|
|
39
|
+
name=name,
|
|
40
|
+
coin_type=coin_type,
|
|
41
|
+
evm_chain_id=evm_chain_id,
|
|
42
|
+
encode=coins.eth.encode,
|
|
43
|
+
decode=coins.eth.decode,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
try:
|
|
47
|
+
return getattr(coins, name)
|
|
48
|
+
except AttributeError as exc:
|
|
49
|
+
raise ValueError(f"Failed to load coin: {name}") from exc
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def get_coder_by_coin_type(coin_type: int) -> CoinCoder:
|
|
53
|
+
"""Return the address codec for a SLIP-44 coin type."""
|
|
54
|
+
names = COIN_TYPE_TO_NAME.get(coin_type)
|
|
55
|
+
|
|
56
|
+
if coin_type >= SLIP44_MSB:
|
|
57
|
+
evm_chain_id = coin_type_to_evm_chain_id(coin_type)
|
|
58
|
+
is_unknown_chain = names is None
|
|
59
|
+
name = f"Unknown Chain ({evm_chain_id})" if is_unknown_chain else names[0]
|
|
60
|
+
return CoinCoder(
|
|
61
|
+
name=name,
|
|
62
|
+
coin_type=coin_type,
|
|
63
|
+
evm_chain_id=evm_chain_id,
|
|
64
|
+
is_unknown_chain=is_unknown_chain,
|
|
65
|
+
encode=coins.eth.encode,
|
|
66
|
+
decode=coins.eth.decode,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
if names is None:
|
|
70
|
+
raise ValueError(f"Unsupported coin type: {coin_type}")
|
|
71
|
+
|
|
72
|
+
return get_coder_by_coin_name(names[0])
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.coins.abbc import decode_abbc_address, encode_abbc_address
|
|
4
|
+
from address_encoder.coins.ada import decode_ada_address, encode_ada_address
|
|
5
|
+
from address_encoder.coins.ae import decode_ae_address, encode_ae_address
|
|
6
|
+
from address_encoder.coins.aib import decode_aib_address, encode_aib_address
|
|
7
|
+
from address_encoder.coins.aion import decode_aion_address, encode_aion_address
|
|
8
|
+
from address_encoder.coins.algo import decode_algo_address, encode_algo_address
|
|
9
|
+
from address_encoder.coins.ar import decode_ar_address, encode_ar_address
|
|
10
|
+
from address_encoder.coins.ardr import decode_ardr_address, encode_ardr_address
|
|
11
|
+
from address_encoder.coins.ark import decode_ark_address, encode_ark_address
|
|
12
|
+
from address_encoder.coins.atom import decode_atom_address, encode_atom_address
|
|
13
|
+
from address_encoder.coins.avax import decode_avax_address, encode_avax_address
|
|
14
|
+
from address_encoder.coins.bcd import decode_bcd_address, encode_bcd_address
|
|
15
|
+
from address_encoder.coins.bch import decode_bch_address, encode_bch_address
|
|
16
|
+
from address_encoder.coins.bcn import decode_bcn_address, encode_bcn_address
|
|
17
|
+
from address_encoder.coins.bdx import decode_bdx_address, encode_bdx_address
|
|
18
|
+
from address_encoder.coins.bnb import decode_bnb_address, encode_bnb_address
|
|
19
|
+
from address_encoder.coins.bps import decode_bps_address, encode_bps_address
|
|
20
|
+
from address_encoder.coins.bsv import decode_bsv_address, encode_bsv_address
|
|
21
|
+
from address_encoder.coins.btc import decode_btc_address, encode_btc_address
|
|
22
|
+
from address_encoder.coins.btg import decode_btg_address, encode_btg_address
|
|
23
|
+
from address_encoder.coins.btm import decode_btm_address, encode_btm_address
|
|
24
|
+
from address_encoder.coins.bts import decode_bts_address, encode_bts_address
|
|
25
|
+
from address_encoder.coins.cca import decode_cca_address, encode_cca_address
|
|
26
|
+
from address_encoder.coins.ccxx import decode_ccxx_address, encode_ccxx_address
|
|
27
|
+
from address_encoder.coins.celoLegacy import decode_celoLegacy_address, encode_celoLegacy_address
|
|
28
|
+
from address_encoder.coins.ckb import decode_ckb_address, encode_ckb_address
|
|
29
|
+
from address_encoder.coins.cloLegacy import decode_cloLegacy_address, encode_cloLegacy_address
|
|
30
|
+
from address_encoder.coins.dash import decode_dash_address, encode_dash_address
|
|
31
|
+
from address_encoder.coins.dcr import decode_dcr_address, encode_dcr_address
|
|
32
|
+
from address_encoder.coins.dgb import decode_dgb_address, encode_dgb_address
|
|
33
|
+
from address_encoder.coins.divi import decode_divi_address, encode_divi_address
|
|
34
|
+
from address_encoder.coins.doge import decode_doge_address, encode_doge_address
|
|
35
|
+
from address_encoder.coins.dot import decode_dot_address, encode_dot_address
|
|
36
|
+
from address_encoder.coins.egld import decode_egld_address, encode_egld_address
|
|
37
|
+
from address_encoder.coins.ela import decode_ela_address, encode_ela_address
|
|
38
|
+
from address_encoder.coins.eos import decode_eos_address, encode_eos_address
|
|
39
|
+
from address_encoder.coins.etcLegacy import decode_etcLegacy_address, encode_etcLegacy_address
|
|
40
|
+
from address_encoder.coins.eth import decode_eth_address, encode_eth_address
|
|
41
|
+
from address_encoder.coins.etn import decode_etn_address, encode_etn_address
|
|
42
|
+
from address_encoder.coins.ewtLegacy import decode_ewtLegacy_address, encode_ewtLegacy_address
|
|
43
|
+
from address_encoder.coins.fil import decode_fil_address, encode_fil_address
|
|
44
|
+
from address_encoder.coins.fio import decode_fio_address, encode_fio_address
|
|
45
|
+
from address_encoder.coins.firo import decode_firo_address, encode_firo_address
|
|
46
|
+
from address_encoder.coins.flow import decode_flow_address, encode_flow_address
|
|
47
|
+
from address_encoder.coins.flux import decode_flux_address, encode_flux_address
|
|
48
|
+
from address_encoder.coins.ftmLegacy import decode_ftmLegacy_address, encode_ftmLegacy_address
|
|
49
|
+
from address_encoder.coins.gnoLegacy import decode_gnoLegacy_address, encode_gnoLegacy_address
|
|
50
|
+
from address_encoder.coins.goLegacy import decode_goLegacy_address, encode_goLegacy_address
|
|
51
|
+
from address_encoder.coins.grin import decode_grin_address, encode_grin_address
|
|
52
|
+
from address_encoder.coins.gxc import decode_gxc_address, encode_gxc_address
|
|
53
|
+
from address_encoder.coins.hbar import decode_hbar_address, encode_hbar_address
|
|
54
|
+
from address_encoder.coins.hive import decode_hive_address, encode_hive_address
|
|
55
|
+
from address_encoder.coins.hns import decode_hns_address, encode_hns_address
|
|
56
|
+
from address_encoder.coins.hnt import decode_hnt_address, encode_hnt_address
|
|
57
|
+
from address_encoder.coins.icx import decode_icx_address, encode_icx_address
|
|
58
|
+
from address_encoder.coins.iost import decode_iost_address, encode_iost_address
|
|
59
|
+
from address_encoder.coins.iota import decode_iota_address, encode_iota_address
|
|
60
|
+
from address_encoder.coins.iotx import decode_iotx_address, encode_iotx_address
|
|
61
|
+
from address_encoder.coins.iris import decode_iris_address, encode_iris_address
|
|
62
|
+
from address_encoder.coins.kava import decode_kava_address, encode_kava_address
|
|
63
|
+
from address_encoder.coins.kmd import decode_kmd_address, encode_kmd_address
|
|
64
|
+
from address_encoder.coins.ksm import decode_ksm_address, encode_ksm_address
|
|
65
|
+
from address_encoder.coins.lcc import decode_lcc_address, encode_lcc_address
|
|
66
|
+
from address_encoder.coins.lrg import decode_lrg_address, encode_lrg_address
|
|
67
|
+
from address_encoder.coins.lsk import decode_lsk_address, encode_lsk_address
|
|
68
|
+
from address_encoder.coins.ltc import decode_ltc_address, encode_ltc_address
|
|
69
|
+
from address_encoder.coins.luna import decode_luna_address, encode_luna_address
|
|
70
|
+
from address_encoder.coins.mona import decode_mona_address, encode_mona_address
|
|
71
|
+
from address_encoder.coins.mrx import decode_mrx_address, encode_mrx_address
|
|
72
|
+
from address_encoder.coins.nano import decode_nano_address, encode_nano_address
|
|
73
|
+
from address_encoder.coins.nas import decode_nas_address, encode_nas_address
|
|
74
|
+
from address_encoder.coins.near import decode_near_address, encode_near_address
|
|
75
|
+
from address_encoder.coins.neo import decode_neo_address, encode_neo_address
|
|
76
|
+
from address_encoder.coins.nim import decode_nim_address, encode_nim_address
|
|
77
|
+
from address_encoder.coins.nmc import decode_nmc_address, encode_nmc_address
|
|
78
|
+
from address_encoder.coins.nostr import decode_nostr_address, encode_nostr_address
|
|
79
|
+
from address_encoder.coins.nrgLegacy import decode_nrgLegacy_address, encode_nrgLegacy_address
|
|
80
|
+
from address_encoder.coins.nuls import decode_nuls_address, encode_nuls_address
|
|
81
|
+
from address_encoder.coins.one import decode_one_address, encode_one_address
|
|
82
|
+
from address_encoder.coins.ont import decode_ont_address, encode_ont_address
|
|
83
|
+
from address_encoder.coins.poaLegacy import decode_poaLegacy_address, encode_poaLegacy_address
|
|
84
|
+
from address_encoder.coins.ppc import decode_ppc_address, encode_ppc_address
|
|
85
|
+
from address_encoder.coins.qtum import decode_qtum_address, encode_qtum_address
|
|
86
|
+
from address_encoder.coins.rbtc import decode_rbtc_address, encode_rbtc_address
|
|
87
|
+
from address_encoder.coins.rdd import decode_rdd_address, encode_rdd_address
|
|
88
|
+
from address_encoder.coins.rune import decode_rune_address, encode_rune_address
|
|
89
|
+
from address_encoder.coins.rvn import decode_rvn_address, encode_rvn_address
|
|
90
|
+
from address_encoder.coins.sc import decode_sc_address, encode_sc_address
|
|
91
|
+
from address_encoder.coins.sero import decode_sero_address, encode_sero_address
|
|
92
|
+
from address_encoder.coins.sol import decode_sol_address, encode_sol_address
|
|
93
|
+
from address_encoder.coins.srm import decode_srm_address, encode_srm_address
|
|
94
|
+
from address_encoder.coins.steem import decode_steem_address, encode_steem_address
|
|
95
|
+
from address_encoder.coins.strat import decode_strat_address, encode_strat_address
|
|
96
|
+
from address_encoder.coins.strk import decode_strk_address, encode_strk_address
|
|
97
|
+
from address_encoder.coins.stx import decode_stx_address, encode_stx_address
|
|
98
|
+
from address_encoder.coins.sui import decode_sui_address, encode_sui_address
|
|
99
|
+
from address_encoder.coins.sys import decode_sys_address, encode_sys_address
|
|
100
|
+
from address_encoder.coins.tfuel import decode_tfuel_address, encode_tfuel_address
|
|
101
|
+
from address_encoder.coins.thetaLegacy import decode_thetaLegacy_address, encode_thetaLegacy_address
|
|
102
|
+
from address_encoder.coins.tomoLegacy import decode_tomoLegacy_address, encode_tomoLegacy_address
|
|
103
|
+
from address_encoder.coins.trx import decode_trx_address, encode_trx_address
|
|
104
|
+
from address_encoder.coins.ttLegacy import decode_ttLegacy_address, encode_ttLegacy_address
|
|
105
|
+
from address_encoder.coins.vet import decode_vet_address, encode_vet_address
|
|
106
|
+
from address_encoder.coins.via import decode_via_address, encode_via_address
|
|
107
|
+
from address_encoder.coins.vlx import decode_vlx_address, encode_vlx_address
|
|
108
|
+
from address_encoder.coins.vlxLegacy import decode_vlxLegacy_address, encode_vlxLegacy_address
|
|
109
|
+
from address_encoder.coins.vsys import decode_vsys_address, encode_vsys_address
|
|
110
|
+
from address_encoder.coins.wan import decode_wan_address, encode_wan_address
|
|
111
|
+
from address_encoder.coins.waves import decode_waves_address, encode_waves_address
|
|
112
|
+
from address_encoder.coins.wicc import decode_wicc_address, encode_wicc_address
|
|
113
|
+
from address_encoder.coins.xch import decode_xch_address, encode_xch_address
|
|
114
|
+
from address_encoder.coins.xem import decode_xem_address, encode_xem_address
|
|
115
|
+
from address_encoder.coins.xhv import decode_xhv_address, encode_xhv_address
|
|
116
|
+
from address_encoder.coins.xlm import decode_xlm_address, encode_xlm_address
|
|
117
|
+
from address_encoder.coins.xmr import decode_xmr_address, encode_xmr_address
|
|
118
|
+
from address_encoder.coins.xrp import decode_xrp_address, encode_xrp_address
|
|
119
|
+
from address_encoder.coins.xtz import decode_xtz_address, encode_xtz_address
|
|
120
|
+
from address_encoder.coins.xvg import decode_xvg_address, encode_xvg_address
|
|
121
|
+
from address_encoder.coins.zec import decode_zec_address, encode_zec_address
|
|
122
|
+
from address_encoder.coins.zen import decode_zen_address, encode_zen_address
|
|
123
|
+
from address_encoder.coins.zil import decode_zil_address, encode_zil_address
|
|
124
|
+
|
|
125
|
+
__all__ = [
|
|
126
|
+
"decode_abbc_address",
|
|
127
|
+
"encode_abbc_address",
|
|
128
|
+
"decode_ada_address",
|
|
129
|
+
"encode_ada_address",
|
|
130
|
+
"decode_ae_address",
|
|
131
|
+
"encode_ae_address",
|
|
132
|
+
"decode_aib_address",
|
|
133
|
+
"encode_aib_address",
|
|
134
|
+
"decode_aion_address",
|
|
135
|
+
"encode_aion_address",
|
|
136
|
+
"decode_algo_address",
|
|
137
|
+
"encode_algo_address",
|
|
138
|
+
"decode_ar_address",
|
|
139
|
+
"encode_ar_address",
|
|
140
|
+
"decode_ardr_address",
|
|
141
|
+
"encode_ardr_address",
|
|
142
|
+
"decode_ark_address",
|
|
143
|
+
"encode_ark_address",
|
|
144
|
+
"decode_atom_address",
|
|
145
|
+
"encode_atom_address",
|
|
146
|
+
"decode_avax_address",
|
|
147
|
+
"encode_avax_address",
|
|
148
|
+
"decode_bcd_address",
|
|
149
|
+
"encode_bcd_address",
|
|
150
|
+
"decode_bch_address",
|
|
151
|
+
"encode_bch_address",
|
|
152
|
+
"decode_bcn_address",
|
|
153
|
+
"encode_bcn_address",
|
|
154
|
+
"decode_bdx_address",
|
|
155
|
+
"encode_bdx_address",
|
|
156
|
+
"decode_bnb_address",
|
|
157
|
+
"encode_bnb_address",
|
|
158
|
+
"decode_bps_address",
|
|
159
|
+
"encode_bps_address",
|
|
160
|
+
"decode_bsv_address",
|
|
161
|
+
"encode_bsv_address",
|
|
162
|
+
"decode_btc_address",
|
|
163
|
+
"encode_btc_address",
|
|
164
|
+
"decode_btg_address",
|
|
165
|
+
"encode_btg_address",
|
|
166
|
+
"decode_btm_address",
|
|
167
|
+
"encode_btm_address",
|
|
168
|
+
"decode_bts_address",
|
|
169
|
+
"encode_bts_address",
|
|
170
|
+
"decode_cca_address",
|
|
171
|
+
"encode_cca_address",
|
|
172
|
+
"decode_ccxx_address",
|
|
173
|
+
"encode_ccxx_address",
|
|
174
|
+
"decode_celoLegacy_address",
|
|
175
|
+
"encode_celoLegacy_address",
|
|
176
|
+
"decode_ckb_address",
|
|
177
|
+
"encode_ckb_address",
|
|
178
|
+
"decode_cloLegacy_address",
|
|
179
|
+
"encode_cloLegacy_address",
|
|
180
|
+
"decode_dash_address",
|
|
181
|
+
"encode_dash_address",
|
|
182
|
+
"decode_dcr_address",
|
|
183
|
+
"encode_dcr_address",
|
|
184
|
+
"decode_dgb_address",
|
|
185
|
+
"encode_dgb_address",
|
|
186
|
+
"decode_divi_address",
|
|
187
|
+
"encode_divi_address",
|
|
188
|
+
"decode_doge_address",
|
|
189
|
+
"encode_doge_address",
|
|
190
|
+
"decode_dot_address",
|
|
191
|
+
"encode_dot_address",
|
|
192
|
+
"decode_egld_address",
|
|
193
|
+
"encode_egld_address",
|
|
194
|
+
"decode_ela_address",
|
|
195
|
+
"encode_ela_address",
|
|
196
|
+
"decode_eos_address",
|
|
197
|
+
"encode_eos_address",
|
|
198
|
+
"decode_etcLegacy_address",
|
|
199
|
+
"encode_etcLegacy_address",
|
|
200
|
+
"decode_eth_address",
|
|
201
|
+
"encode_eth_address",
|
|
202
|
+
"decode_etn_address",
|
|
203
|
+
"encode_etn_address",
|
|
204
|
+
"decode_ewtLegacy_address",
|
|
205
|
+
"encode_ewtLegacy_address",
|
|
206
|
+
"decode_fil_address",
|
|
207
|
+
"encode_fil_address",
|
|
208
|
+
"decode_fio_address",
|
|
209
|
+
"encode_fio_address",
|
|
210
|
+
"decode_firo_address",
|
|
211
|
+
"encode_firo_address",
|
|
212
|
+
"decode_flow_address",
|
|
213
|
+
"encode_flow_address",
|
|
214
|
+
"decode_flux_address",
|
|
215
|
+
"encode_flux_address",
|
|
216
|
+
"decode_ftmLegacy_address",
|
|
217
|
+
"encode_ftmLegacy_address",
|
|
218
|
+
"decode_gnoLegacy_address",
|
|
219
|
+
"encode_gnoLegacy_address",
|
|
220
|
+
"decode_goLegacy_address",
|
|
221
|
+
"encode_goLegacy_address",
|
|
222
|
+
"decode_grin_address",
|
|
223
|
+
"encode_grin_address",
|
|
224
|
+
"decode_gxc_address",
|
|
225
|
+
"encode_gxc_address",
|
|
226
|
+
"decode_hbar_address",
|
|
227
|
+
"encode_hbar_address",
|
|
228
|
+
"decode_hive_address",
|
|
229
|
+
"encode_hive_address",
|
|
230
|
+
"decode_hns_address",
|
|
231
|
+
"encode_hns_address",
|
|
232
|
+
"decode_hnt_address",
|
|
233
|
+
"encode_hnt_address",
|
|
234
|
+
"decode_icx_address",
|
|
235
|
+
"encode_icx_address",
|
|
236
|
+
"decode_iost_address",
|
|
237
|
+
"encode_iost_address",
|
|
238
|
+
"decode_iota_address",
|
|
239
|
+
"encode_iota_address",
|
|
240
|
+
"decode_iotx_address",
|
|
241
|
+
"encode_iotx_address",
|
|
242
|
+
"decode_iris_address",
|
|
243
|
+
"encode_iris_address",
|
|
244
|
+
"decode_kava_address",
|
|
245
|
+
"encode_kava_address",
|
|
246
|
+
"decode_kmd_address",
|
|
247
|
+
"encode_kmd_address",
|
|
248
|
+
"decode_ksm_address",
|
|
249
|
+
"encode_ksm_address",
|
|
250
|
+
"decode_lcc_address",
|
|
251
|
+
"encode_lcc_address",
|
|
252
|
+
"decode_lrg_address",
|
|
253
|
+
"encode_lrg_address",
|
|
254
|
+
"decode_lsk_address",
|
|
255
|
+
"encode_lsk_address",
|
|
256
|
+
"decode_ltc_address",
|
|
257
|
+
"encode_ltc_address",
|
|
258
|
+
"decode_luna_address",
|
|
259
|
+
"encode_luna_address",
|
|
260
|
+
"decode_mona_address",
|
|
261
|
+
"encode_mona_address",
|
|
262
|
+
"decode_mrx_address",
|
|
263
|
+
"encode_mrx_address",
|
|
264
|
+
"decode_nano_address",
|
|
265
|
+
"encode_nano_address",
|
|
266
|
+
"decode_nas_address",
|
|
267
|
+
"encode_nas_address",
|
|
268
|
+
"decode_near_address",
|
|
269
|
+
"encode_near_address",
|
|
270
|
+
"decode_neo_address",
|
|
271
|
+
"encode_neo_address",
|
|
272
|
+
"decode_nim_address",
|
|
273
|
+
"encode_nim_address",
|
|
274
|
+
"decode_nmc_address",
|
|
275
|
+
"encode_nmc_address",
|
|
276
|
+
"decode_nostr_address",
|
|
277
|
+
"encode_nostr_address",
|
|
278
|
+
"decode_nrgLegacy_address",
|
|
279
|
+
"encode_nrgLegacy_address",
|
|
280
|
+
"decode_nuls_address",
|
|
281
|
+
"encode_nuls_address",
|
|
282
|
+
"decode_one_address",
|
|
283
|
+
"encode_one_address",
|
|
284
|
+
"decode_ont_address",
|
|
285
|
+
"encode_ont_address",
|
|
286
|
+
"decode_poaLegacy_address",
|
|
287
|
+
"encode_poaLegacy_address",
|
|
288
|
+
"decode_ppc_address",
|
|
289
|
+
"encode_ppc_address",
|
|
290
|
+
"decode_qtum_address",
|
|
291
|
+
"encode_qtum_address",
|
|
292
|
+
"decode_rbtc_address",
|
|
293
|
+
"encode_rbtc_address",
|
|
294
|
+
"decode_rdd_address",
|
|
295
|
+
"encode_rdd_address",
|
|
296
|
+
"decode_rune_address",
|
|
297
|
+
"encode_rune_address",
|
|
298
|
+
"decode_rvn_address",
|
|
299
|
+
"encode_rvn_address",
|
|
300
|
+
"decode_sc_address",
|
|
301
|
+
"encode_sc_address",
|
|
302
|
+
"decode_sero_address",
|
|
303
|
+
"encode_sero_address",
|
|
304
|
+
"decode_sol_address",
|
|
305
|
+
"encode_sol_address",
|
|
306
|
+
"decode_srm_address",
|
|
307
|
+
"encode_srm_address",
|
|
308
|
+
"decode_steem_address",
|
|
309
|
+
"encode_steem_address",
|
|
310
|
+
"decode_strat_address",
|
|
311
|
+
"encode_strat_address",
|
|
312
|
+
"decode_strk_address",
|
|
313
|
+
"encode_strk_address",
|
|
314
|
+
"decode_stx_address",
|
|
315
|
+
"encode_stx_address",
|
|
316
|
+
"decode_sui_address",
|
|
317
|
+
"encode_sui_address",
|
|
318
|
+
"decode_sys_address",
|
|
319
|
+
"encode_sys_address",
|
|
320
|
+
"decode_tfuel_address",
|
|
321
|
+
"encode_tfuel_address",
|
|
322
|
+
"decode_thetaLegacy_address",
|
|
323
|
+
"encode_thetaLegacy_address",
|
|
324
|
+
"decode_tomoLegacy_address",
|
|
325
|
+
"encode_tomoLegacy_address",
|
|
326
|
+
"decode_trx_address",
|
|
327
|
+
"encode_trx_address",
|
|
328
|
+
"decode_ttLegacy_address",
|
|
329
|
+
"encode_ttLegacy_address",
|
|
330
|
+
"decode_vet_address",
|
|
331
|
+
"encode_vet_address",
|
|
332
|
+
"decode_via_address",
|
|
333
|
+
"encode_via_address",
|
|
334
|
+
"decode_vlx_address",
|
|
335
|
+
"encode_vlx_address",
|
|
336
|
+
"decode_vlxLegacy_address",
|
|
337
|
+
"encode_vlxLegacy_address",
|
|
338
|
+
"decode_vsys_address",
|
|
339
|
+
"encode_vsys_address",
|
|
340
|
+
"decode_wan_address",
|
|
341
|
+
"encode_wan_address",
|
|
342
|
+
"decode_waves_address",
|
|
343
|
+
"encode_waves_address",
|
|
344
|
+
"decode_wicc_address",
|
|
345
|
+
"encode_wicc_address",
|
|
346
|
+
"decode_xch_address",
|
|
347
|
+
"encode_xch_address",
|
|
348
|
+
"decode_xem_address",
|
|
349
|
+
"encode_xem_address",
|
|
350
|
+
"decode_xhv_address",
|
|
351
|
+
"encode_xhv_address",
|
|
352
|
+
"decode_xlm_address",
|
|
353
|
+
"encode_xlm_address",
|
|
354
|
+
"decode_xmr_address",
|
|
355
|
+
"encode_xmr_address",
|
|
356
|
+
"decode_xrp_address",
|
|
357
|
+
"encode_xrp_address",
|
|
358
|
+
"decode_xtz_address",
|
|
359
|
+
"encode_xtz_address",
|
|
360
|
+
"decode_xvg_address",
|
|
361
|
+
"encode_xvg_address",
|
|
362
|
+
"decode_zec_address",
|
|
363
|
+
"encode_zec_address",
|
|
364
|
+
"decode_zen_address",
|
|
365
|
+
"encode_zen_address",
|
|
366
|
+
"decode_zil_address",
|
|
367
|
+
"encode_zil_address",
|
|
368
|
+
]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
from collections.abc import Iterator, Mapping
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from address_encoder.types import CoinCoder
|
|
9
|
+
|
|
10
|
+
_COINS_DIR = Path(__file__).parent
|
|
11
|
+
_COIN_MODULE_NAMES: tuple[str, ...] | None = None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _coin_module_names() -> tuple[str, ...]:
|
|
15
|
+
global _COIN_MODULE_NAMES
|
|
16
|
+
if _COIN_MODULE_NAMES is None:
|
|
17
|
+
_COIN_MODULE_NAMES = tuple(
|
|
18
|
+
sorted(
|
|
19
|
+
path.stem
|
|
20
|
+
for path in _COINS_DIR.glob("*.py")
|
|
21
|
+
if path.stem != "__init__"
|
|
22
|
+
)
|
|
23
|
+
)
|
|
24
|
+
return _COIN_MODULE_NAMES
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class _LazyCoins(Mapping[str, CoinCoder]):
|
|
28
|
+
def __getitem__(self, key: str) -> CoinCoder:
|
|
29
|
+
if key not in _coin_module_names():
|
|
30
|
+
raise KeyError(key)
|
|
31
|
+
return _load_coin(key)
|
|
32
|
+
|
|
33
|
+
def __iter__(self) -> Iterator[str]:
|
|
34
|
+
return iter(_coin_module_names())
|
|
35
|
+
|
|
36
|
+
def __len__(self) -> int:
|
|
37
|
+
return len(_coin_module_names())
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
_COINS: _LazyCoins | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _load_coin(name: str) -> CoinCoder:
|
|
44
|
+
existing = globals().get(name)
|
|
45
|
+
if isinstance(existing, CoinCoder):
|
|
46
|
+
return existing
|
|
47
|
+
module = importlib.import_module(f"{__name__}.{name}")
|
|
48
|
+
coin = getattr(module, name, None)
|
|
49
|
+
if coin is None:
|
|
50
|
+
raise AttributeError(name)
|
|
51
|
+
globals()[name] = coin
|
|
52
|
+
return coin
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def __getattr__(name: str) -> Any:
|
|
56
|
+
if name == "COINS":
|
|
57
|
+
global _COINS
|
|
58
|
+
if _COINS is None:
|
|
59
|
+
_COINS = _LazyCoins()
|
|
60
|
+
return _COINS
|
|
61
|
+
if name in _coin_module_names():
|
|
62
|
+
return _load_coin(name)
|
|
63
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def __dir__() -> list[str]:
|
|
67
|
+
return sorted([*_coin_module_names(), "COINS"])
|
|
@@ -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_abbc_address = create_eos_encoder("ABBC")
|
|
8
|
+
decode_abbc_address = create_eos_decoder("ABBC")
|
|
9
|
+
|
|
10
|
+
abbc = CoinCoder(
|
|
11
|
+
name="abbc",
|
|
12
|
+
coin_type=367,
|
|
13
|
+
encode=encode_abbc_address,
|
|
14
|
+
decode=decode_abbc_address,
|
|
15
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from address_encoder.types import CoinCoder
|
|
4
|
+
from address_encoder.utils.bech32_ import create_plain_bech32_decoder, create_plain_bech32_encoder
|
|
5
|
+
from address_encoder.utils.byron import byron_decode, byron_encode
|
|
6
|
+
|
|
7
|
+
_hrp = "addr"
|
|
8
|
+
_limit = 104
|
|
9
|
+
_cardano_bech32_encode = create_plain_bech32_encoder(_hrp, _limit)
|
|
10
|
+
_cardano_bech32_decode = create_plain_bech32_decoder(_hrp, _limit)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def encode_ada_address(source: bytes) -> str:
|
|
14
|
+
try:
|
|
15
|
+
return byron_encode(source)
|
|
16
|
+
except Exception:
|
|
17
|
+
return _cardano_bech32_encode(source)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def decode_ada_address(source: str) -> bytes:
|
|
21
|
+
if source.lower().startswith(_hrp):
|
|
22
|
+
return _cardano_bech32_decode(source)
|
|
23
|
+
return byron_decode(source)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
ada = CoinCoder(
|
|
27
|
+
name="ada",
|
|
28
|
+
coin_type=1815,
|
|
29
|
+
encode=encode_ada_address,
|
|
30
|
+
decode=decode_ada_address,
|
|
31
|
+
)
|
|
32
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
_PREFIX = bytes([0x30, 0x78])
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def encode_ae_address(source: bytes) -> str:
|
|
10
|
+
return f"ak_{base58_check_encode(source[2:])}"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def decode_ae_address(source: str) -> bytes:
|
|
14
|
+
return _PREFIX + base58_check_decode(source[3:])
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ae = CoinCoder(
|
|
18
|
+
name="ae",
|
|
19
|
+
coin_type=457,
|
|
20
|
+
encode=encode_ae_address,
|
|
21
|
+
decode=decode_ae_address,
|
|
22
|
+
)
|
|
23
|
+
|
|
@@ -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([23]),)
|
|
8
|
+
_p2sh = (bytes([5]),)
|
|
9
|
+
encode_aib_address = create_base58_versioned_encoder(_p2pkh[0], _p2sh[0])
|
|
10
|
+
decode_aib_address = create_base58_versioned_decoder(_p2pkh, _p2sh)
|
|
11
|
+
|
|
12
|
+
aib = CoinCoder(
|
|
13
|
+
name="aib",
|
|
14
|
+
coin_type=55,
|
|
15
|
+
encode=encode_aib_address,
|
|
16
|
+
decode=decode_aib_address,
|
|
17
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
from address_encoder.types import CoinCoder
|
|
6
|
+
from address_encoder.utils.bytes_ import bytes_to_hex, hex_without_prefix_to_bytes
|
|
7
|
+
|
|
8
|
+
_HEX_REGEX = re.compile(r"^[0-9A-Fa-f]{64}$")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def encode_aion_address(source: bytes) -> str:
|
|
12
|
+
if len(source) != 32:
|
|
13
|
+
raise ValueError("Unrecognised address format")
|
|
14
|
+
return bytes_to_hex(source)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def decode_aion_address(source: str) -> bytes:
|
|
18
|
+
no_prefix = source[2:] if source.startswith("0x") else source
|
|
19
|
+
if len(no_prefix) != 64:
|
|
20
|
+
raise ValueError("Unrecognised address format")
|
|
21
|
+
if not _HEX_REGEX.fullmatch(no_prefix):
|
|
22
|
+
raise ValueError("Unrecognised address format")
|
|
23
|
+
return hex_without_prefix_to_bytes(no_prefix)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
aion = CoinCoder(
|
|
27
|
+
name="aion",
|
|
28
|
+
coin_type=425,
|
|
29
|
+
encode=encode_aion_address,
|
|
30
|
+
decode=decode_aion_address,
|
|
31
|
+
)
|
|
32
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
|
|
5
|
+
from address_encoder.types import CoinCoder
|
|
6
|
+
from address_encoder.utils.base32 import base32_unpadded_decode, base32_unpadded_encode
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _algo_checksum(data: bytes) -> bytes:
|
|
10
|
+
return hashlib.new("sha512-256", data).digest()[-4:]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _algo_checksum_encode(data: bytes) -> bytes:
|
|
14
|
+
return data + _algo_checksum(data)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _algo_checksum_decode(data: bytes) -> bytes:
|
|
18
|
+
payload, checksum = data[:-4], data[-4:]
|
|
19
|
+
if _algo_checksum(payload) != checksum:
|
|
20
|
+
raise ValueError("Invalid checksum")
|
|
21
|
+
return payload
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def encode_algo_address(source: bytes) -> str:
|
|
25
|
+
checksummed = _algo_checksum_encode(source)
|
|
26
|
+
return base32_unpadded_encode(checksummed)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def decode_algo_address(source: str) -> bytes:
|
|
30
|
+
decoded = base32_unpadded_decode(source)
|
|
31
|
+
if len(decoded) != 36:
|
|
32
|
+
raise ValueError("Unrecognised address format")
|
|
33
|
+
return _algo_checksum_decode(decoded)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
algo = CoinCoder(
|
|
37
|
+
name="algo",
|
|
38
|
+
coin_type=283,
|
|
39
|
+
encode=encode_algo_address,
|
|
40
|
+
decode=decode_algo_address,
|
|
41
|
+
)
|
|
42
|
+
|