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.
Files changed (149) hide show
  1. address_encoder/__init__.py +72 -0
  2. address_encoder/coders.py +368 -0
  3. address_encoder/coins/__init__.py +67 -0
  4. address_encoder/coins/abbc.py +15 -0
  5. address_encoder/coins/ada.py +32 -0
  6. address_encoder/coins/ae.py +23 -0
  7. address_encoder/coins/aib.py +17 -0
  8. address_encoder/coins/aion.py +32 -0
  9. address_encoder/coins/algo.py +42 -0
  10. address_encoder/coins/ar.py +15 -0
  11. address_encoder/coins/ardr.py +77 -0
  12. address_encoder/coins/ark.py +24 -0
  13. address_encoder/coins/atom.py +15 -0
  14. address_encoder/coins/avax.py +31 -0
  15. address_encoder/coins/bcd.py +20 -0
  16. address_encoder/coins/bch.py +42 -0
  17. address_encoder/coins/bcn.py +41 -0
  18. address_encoder/coins/bdx.py +15 -0
  19. address_encoder/coins/bnb.py +15 -0
  20. address_encoder/coins/bps.py +17 -0
  21. address_encoder/coins/bsv.py +28 -0
  22. address_encoder/coins/btc.py +20 -0
  23. address_encoder/coins/btg.py +20 -0
  24. address_encoder/coins/btm.py +15 -0
  25. address_encoder/coins/bts.py +15 -0
  26. address_encoder/coins/cca.py +17 -0
  27. address_encoder/coins/ccxx.py +20 -0
  28. address_encoder/coins/celoLegacy.py +15 -0
  29. address_encoder/coins/ckb.py +15 -0
  30. address_encoder/coins/cloLegacy.py +15 -0
  31. address_encoder/coins/dash.py +17 -0
  32. address_encoder/coins/dcr.py +15 -0
  33. address_encoder/coins/dgb.py +20 -0
  34. address_encoder/coins/divi.py +17 -0
  35. address_encoder/coins/doge.py +17 -0
  36. address_encoder/coins/dot.py +15 -0
  37. address_encoder/coins/egld.py +15 -0
  38. address_encoder/coins/ela.py +15 -0
  39. address_encoder/coins/eos.py +15 -0
  40. address_encoder/coins/etcLegacy.py +15 -0
  41. address_encoder/coins/eth.py +15 -0
  42. address_encoder/coins/etn.py +46 -0
  43. address_encoder/coins/ewtLegacy.py +15 -0
  44. address_encoder/coins/fil.py +69 -0
  45. address_encoder/coins/fio.py +15 -0
  46. address_encoder/coins/firo.py +17 -0
  47. address_encoder/coins/flow.py +32 -0
  48. address_encoder/coins/flux.py +21 -0
  49. address_encoder/coins/ftmLegacy.py +15 -0
  50. address_encoder/coins/gnoLegacy.py +15 -0
  51. address_encoder/coins/goLegacy.py +15 -0
  52. address_encoder/coins/grin.py +15 -0
  53. address_encoder/coins/gxc.py +15 -0
  54. address_encoder/coins/hbar.py +33 -0
  55. address_encoder/coins/hive.py +15 -0
  56. address_encoder/coins/hns.py +39 -0
  57. address_encoder/coins/hnt.py +26 -0
  58. address_encoder/coins/icx.py +37 -0
  59. address_encoder/coins/iost.py +15 -0
  60. address_encoder/coins/iota.py +26 -0
  61. address_encoder/coins/iotx.py +15 -0
  62. address_encoder/coins/iris.py +15 -0
  63. address_encoder/coins/kava.py +15 -0
  64. address_encoder/coins/kmd.py +17 -0
  65. address_encoder/coins/ksm.py +15 -0
  66. address_encoder/coins/lcc.py +20 -0
  67. address_encoder/coins/lrg.py +17 -0
  68. address_encoder/coins/lsk.py +25 -0
  69. address_encoder/coins/ltc.py +20 -0
  70. address_encoder/coins/luna.py +15 -0
  71. address_encoder/coins/mona.py +20 -0
  72. address_encoder/coins/mrx.py +15 -0
  73. address_encoder/coins/nano.py +74 -0
  74. address_encoder/coins/nas.py +42 -0
  75. address_encoder/coins/near.py +27 -0
  76. address_encoder/coins/neo.py +15 -0
  77. address_encoder/coins/nim.py +72 -0
  78. address_encoder/coins/nmc.py +15 -0
  79. address_encoder/coins/nostr.py +15 -0
  80. address_encoder/coins/nrgLegacy.py +15 -0
  81. address_encoder/coins/nuls.py +68 -0
  82. address_encoder/coins/one.py +15 -0
  83. address_encoder/coins/ont.py +26 -0
  84. address_encoder/coins/poaLegacy.py +15 -0
  85. address_encoder/coins/ppc.py +17 -0
  86. address_encoder/coins/qtum.py +15 -0
  87. address_encoder/coins/rbtc.py +15 -0
  88. address_encoder/coins/rdd.py +17 -0
  89. address_encoder/coins/rune.py +15 -0
  90. address_encoder/coins/rvn.py +17 -0
  91. address_encoder/coins/sc.py +38 -0
  92. address_encoder/coins/sero.py +22 -0
  93. address_encoder/coins/sol.py +31 -0
  94. address_encoder/coins/srm.py +15 -0
  95. address_encoder/coins/steem.py +15 -0
  96. address_encoder/coins/strat.py +17 -0
  97. address_encoder/coins/strk.py +53 -0
  98. address_encoder/coins/stx.py +104 -0
  99. address_encoder/coins/sui.py +34 -0
  100. address_encoder/coins/sys.py +20 -0
  101. address_encoder/coins/tfuel.py +15 -0
  102. address_encoder/coins/thetaLegacy.py +15 -0
  103. address_encoder/coins/tomoLegacy.py +15 -0
  104. address_encoder/coins/trx.py +15 -0
  105. address_encoder/coins/ttLegacy.py +15 -0
  106. address_encoder/coins/vet.py +15 -0
  107. address_encoder/coins/via.py +17 -0
  108. address_encoder/coins/vlx.py +15 -0
  109. address_encoder/coins/vlxLegacy.py +15 -0
  110. address_encoder/coins/vsys.py +44 -0
  111. address_encoder/coins/wan.py +44 -0
  112. address_encoder/coins/waves.py +43 -0
  113. address_encoder/coins/wicc.py +17 -0
  114. address_encoder/coins/xch.py +15 -0
  115. address_encoder/coins/xem.py +31 -0
  116. address_encoder/coins/xhv.py +15 -0
  117. address_encoder/coins/xlm.py +50 -0
  118. address_encoder/coins/xmr.py +15 -0
  119. address_encoder/coins/xrp.py +14 -0
  120. address_encoder/coins/xtz.py +51 -0
  121. address_encoder/coins/xvg.py +17 -0
  122. address_encoder/coins/zec.py +21 -0
  123. address_encoder/coins/zen.py +36 -0
  124. address_encoder/coins/zil.py +15 -0
  125. address_encoder/consts/__init__.py +17 -0
  126. address_encoder/consts/coin_maps.py +162 -0
  127. address_encoder/py.typed +0 -0
  128. address_encoder/types.py +22 -0
  129. address_encoder/utils/__init__.py +120 -0
  130. address_encoder/utils/base32.py +68 -0
  131. address_encoder/utils/base58_.py +129 -0
  132. address_encoder/utils/base64url.py +14 -0
  133. address_encoder/utils/bch.py +103 -0
  134. address_encoder/utils/bech32_.py +181 -0
  135. address_encoder/utils/bitcoin.py +50 -0
  136. address_encoder/utils/byron.py +24 -0
  137. address_encoder/utils/bytes_.py +43 -0
  138. address_encoder/utils/crc32.py +55 -0
  139. address_encoder/utils/dot.py +33 -0
  140. address_encoder/utils/eosio.py +30 -0
  141. address_encoder/utils/evm.py +19 -0
  142. address_encoder/utils/flow.py +24 -0
  143. address_encoder/utils/hex_.py +69 -0
  144. address_encoder/utils/near.py +11 -0
  145. address_encoder/utils/zcash.py +39 -0
  146. address_encoder-1.0.0.dist-info/METADATA +132 -0
  147. address_encoder-1.0.0.dist-info/RECORD +149 -0
  148. address_encoder-1.0.0.dist-info/WHEEL +4 -0
  149. address_encoder-1.0.0.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
+