address-encoder 1.0.2__tar.gz → 1.0.3__tar.gz

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 (288) hide show
  1. {address_encoder-1.0.2 → address_encoder-1.0.3}/PKG-INFO +6 -4
  2. {address_encoder-1.0.2 → address_encoder-1.0.3}/README.md +4 -2
  3. {address_encoder-1.0.2 → address_encoder-1.0.3}/pyproject.toml +1 -1
  4. address_encoder-1.0.3/src/address_encoder/utils/byron.py +48 -0
  5. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/bytes_.py +10 -1
  6. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_icx.py +10 -0
  7. address_encoder-1.0.3/tests/test_utils_byron.py +77 -0
  8. address_encoder-1.0.3/tests/test_utils_bytes.py +40 -0
  9. address_encoder-1.0.2/src/address_encoder/utils/byron.py +0 -24
  10. {address_encoder-1.0.2 → address_encoder-1.0.3}/.github/workflows/publish.yml +0 -0
  11. {address_encoder-1.0.2 → address_encoder-1.0.3}/.github/workflows/test.yml +0 -0
  12. {address_encoder-1.0.2 → address_encoder-1.0.3}/.gitignore +0 -0
  13. {address_encoder-1.0.2 → address_encoder-1.0.3}/LICENSE +0 -0
  14. {address_encoder-1.0.2 → address_encoder-1.0.3}/docs/supported-cryptocurrencies.md +0 -0
  15. {address_encoder-1.0.2 → address_encoder-1.0.3}/scripts/_maintainer.py +0 -0
  16. {address_encoder-1.0.2 → address_encoder-1.0.3}/scripts/add_evm_coin.py +0 -0
  17. {address_encoder-1.0.2 → address_encoder-1.0.3}/scripts/format_supported_coins.py +0 -0
  18. {address_encoder-1.0.2 → address_encoder-1.0.3}/scripts/generate_coin.py +0 -0
  19. {address_encoder-1.0.2 → address_encoder-1.0.3}/scripts/prepublish_only.py +0 -0
  20. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/__init__.py +0 -0
  21. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coders.py +0 -0
  22. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/__init__.py +0 -0
  23. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/abbc.py +0 -0
  24. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ada.py +0 -0
  25. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ae.py +0 -0
  26. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/aib.py +0 -0
  27. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/aion.py +0 -0
  28. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/algo.py +0 -0
  29. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ar.py +0 -0
  30. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ardr.py +0 -0
  31. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ark.py +0 -0
  32. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/atom.py +0 -0
  33. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/avax.py +0 -0
  34. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bcd.py +0 -0
  35. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bch.py +0 -0
  36. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bcn.py +0 -0
  37. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bdx.py +0 -0
  38. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bnb.py +0 -0
  39. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bps.py +0 -0
  40. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bsv.py +0 -0
  41. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/btc.py +0 -0
  42. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/btg.py +0 -0
  43. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/btm.py +0 -0
  44. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/bts.py +0 -0
  45. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/cca.py +0 -0
  46. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ccxx.py +0 -0
  47. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/celoLegacy.py +0 -0
  48. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ckb.py +0 -0
  49. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/cloLegacy.py +0 -0
  50. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/dash.py +0 -0
  51. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/dcr.py +0 -0
  52. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/dgb.py +0 -0
  53. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/divi.py +0 -0
  54. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/doge.py +0 -0
  55. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/dot.py +0 -0
  56. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/egld.py +0 -0
  57. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ela.py +0 -0
  58. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/eos.py +0 -0
  59. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/etcLegacy.py +0 -0
  60. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/eth.py +0 -0
  61. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/etn.py +0 -0
  62. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ewtLegacy.py +0 -0
  63. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/fil.py +0 -0
  64. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/fio.py +0 -0
  65. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/firo.py +0 -0
  66. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/flow.py +0 -0
  67. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/flux.py +0 -0
  68. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ftmLegacy.py +0 -0
  69. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/gnoLegacy.py +0 -0
  70. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/goLegacy.py +0 -0
  71. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/grin.py +0 -0
  72. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/gxc.py +0 -0
  73. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/hbar.py +0 -0
  74. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/hive.py +0 -0
  75. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/hns.py +0 -0
  76. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/hnt.py +0 -0
  77. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/icx.py +0 -0
  78. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/iost.py +0 -0
  79. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/iota.py +0 -0
  80. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/iotx.py +0 -0
  81. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/iris.py +0 -0
  82. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/kava.py +0 -0
  83. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/kmd.py +0 -0
  84. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ksm.py +0 -0
  85. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/lcc.py +0 -0
  86. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/lrg.py +0 -0
  87. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/lsk.py +0 -0
  88. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ltc.py +0 -0
  89. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/luna.py +0 -0
  90. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/mona.py +0 -0
  91. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/mrx.py +0 -0
  92. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nano.py +0 -0
  93. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nas.py +0 -0
  94. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/near.py +0 -0
  95. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/neo.py +0 -0
  96. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nim.py +0 -0
  97. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nmc.py +0 -0
  98. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nostr.py +0 -0
  99. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nrgLegacy.py +0 -0
  100. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/nuls.py +0 -0
  101. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/one.py +0 -0
  102. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ont.py +0 -0
  103. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/poaLegacy.py +0 -0
  104. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ppc.py +0 -0
  105. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/qtum.py +0 -0
  106. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/rbtc.py +0 -0
  107. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/rdd.py +0 -0
  108. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/rune.py +0 -0
  109. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/rvn.py +0 -0
  110. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/sc.py +0 -0
  111. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/sero.py +0 -0
  112. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/sol.py +0 -0
  113. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/srm.py +0 -0
  114. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/steem.py +0 -0
  115. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/strat.py +0 -0
  116. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/strk.py +0 -0
  117. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/stx.py +0 -0
  118. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/sui.py +0 -0
  119. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/sys.py +0 -0
  120. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/tfuel.py +0 -0
  121. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/thetaLegacy.py +0 -0
  122. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/tomoLegacy.py +0 -0
  123. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/trx.py +0 -0
  124. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/ttLegacy.py +0 -0
  125. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/vet.py +0 -0
  126. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/via.py +0 -0
  127. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/vlx.py +0 -0
  128. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/vlxLegacy.py +0 -0
  129. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/vsys.py +0 -0
  130. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/wan.py +0 -0
  131. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/waves.py +0 -0
  132. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/wicc.py +0 -0
  133. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xch.py +0 -0
  134. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xem.py +0 -0
  135. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xhv.py +0 -0
  136. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xlm.py +0 -0
  137. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xmr.py +0 -0
  138. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xrp.py +0 -0
  139. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xtz.py +0 -0
  140. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/xvg.py +0 -0
  141. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/zec.py +0 -0
  142. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/zen.py +0 -0
  143. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/coins/zil.py +0 -0
  144. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/consts/__init__.py +0 -0
  145. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/consts/coin_maps.py +0 -0
  146. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/py.typed +0 -0
  147. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/types.py +0 -0
  148. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/__init__.py +0 -0
  149. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/base32.py +0 -0
  150. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/base58_.py +0 -0
  151. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/base64url.py +0 -0
  152. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/bch.py +0 -0
  153. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/bech32_.py +0 -0
  154. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/bitcoin.py +0 -0
  155. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/crc32.py +0 -0
  156. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/dot.py +0 -0
  157. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/eosio.py +0 -0
  158. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/evm.py +0 -0
  159. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/flow.py +0 -0
  160. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/hex_.py +0 -0
  161. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/near.py +0 -0
  162. {address_encoder-1.0.2 → address_encoder-1.0.3}/src/address_encoder/utils/zcash.py +0 -0
  163. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_abbc.py +0 -0
  164. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ada.py +0 -0
  165. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ae.py +0 -0
  166. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_aib.py +0 -0
  167. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_aion.py +0 -0
  168. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_algo.py +0 -0
  169. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ar.py +0 -0
  170. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ardr.py +0 -0
  171. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ark.py +0 -0
  172. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_atom.py +0 -0
  173. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_avax.py +0 -0
  174. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bcd.py +0 -0
  175. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bch.py +0 -0
  176. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bcn.py +0 -0
  177. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bdx.py +0 -0
  178. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bnb.py +0 -0
  179. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bps.py +0 -0
  180. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bsv.py +0 -0
  181. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_btc.py +0 -0
  182. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_btg.py +0 -0
  183. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_btm.py +0 -0
  184. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_bts.py +0 -0
  185. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_cca.py +0 -0
  186. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ccxx.py +0 -0
  187. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_celoLegacy.py +0 -0
  188. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ckb.py +0 -0
  189. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_cloLegacy.py +0 -0
  190. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_coders.py +0 -0
  191. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_coins.py +0 -0
  192. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_dash.py +0 -0
  193. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_dcr.py +0 -0
  194. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_dgb.py +0 -0
  195. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_divi.py +0 -0
  196. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_doge.py +0 -0
  197. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_dot.py +0 -0
  198. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_egld.py +0 -0
  199. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ela.py +0 -0
  200. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_eos.py +0 -0
  201. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_etcLegacy.py +0 -0
  202. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_eth.py +0 -0
  203. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_etn.py +0 -0
  204. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ewtLegacy.py +0 -0
  205. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_fil.py +0 -0
  206. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_fio.py +0 -0
  207. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_firo.py +0 -0
  208. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_flow.py +0 -0
  209. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_flux.py +0 -0
  210. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ftmLegacy.py +0 -0
  211. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_gnoLegacy.py +0 -0
  212. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_goLegacy.py +0 -0
  213. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_grin.py +0 -0
  214. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_gxc.py +0 -0
  215. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_hbar.py +0 -0
  216. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_hive.py +0 -0
  217. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_hns.py +0 -0
  218. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_hnt.py +0 -0
  219. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_index.py +0 -0
  220. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_iost.py +0 -0
  221. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_iota.py +0 -0
  222. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_iotx.py +0 -0
  223. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_iris.py +0 -0
  224. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_kava.py +0 -0
  225. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_kmd.py +0 -0
  226. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ksm.py +0 -0
  227. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_lcc.py +0 -0
  228. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_lrg.py +0 -0
  229. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_lsk.py +0 -0
  230. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ltc.py +0 -0
  231. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_luna.py +0 -0
  232. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_mona.py +0 -0
  233. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_mrx.py +0 -0
  234. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nano.py +0 -0
  235. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nas.py +0 -0
  236. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_near.py +0 -0
  237. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_neo.py +0 -0
  238. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nim.py +0 -0
  239. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nmc.py +0 -0
  240. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nostr.py +0 -0
  241. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nrgLegacy.py +0 -0
  242. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_nuls.py +0 -0
  243. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_one.py +0 -0
  244. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ont.py +0 -0
  245. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_poaLegacy.py +0 -0
  246. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ppc.py +0 -0
  247. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_qtum.py +0 -0
  248. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_rbtc.py +0 -0
  249. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_rdd.py +0 -0
  250. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_rune.py +0 -0
  251. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_rvn.py +0 -0
  252. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_sc.py +0 -0
  253. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_sero.py +0 -0
  254. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_sol.py +0 -0
  255. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_srm.py +0 -0
  256. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_steem.py +0 -0
  257. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_strat.py +0 -0
  258. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_strk.py +0 -0
  259. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_stx.py +0 -0
  260. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_sui.py +0 -0
  261. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_sys.py +0 -0
  262. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_tfuel.py +0 -0
  263. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_thetaLegacy.py +0 -0
  264. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_tomoLegacy.py +0 -0
  265. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_trx.py +0 -0
  266. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_ttLegacy.py +0 -0
  267. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_utils_evm.py +0 -0
  268. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_utils_hex.py +0 -0
  269. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_utils_near.py +0 -0
  270. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_vet.py +0 -0
  271. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_via.py +0 -0
  272. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_vlx.py +0 -0
  273. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_vlxLegacy.py +0 -0
  274. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_vsys.py +0 -0
  275. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_wan.py +0 -0
  276. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_waves.py +0 -0
  277. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_wicc.py +0 -0
  278. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xch.py +0 -0
  279. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xem.py +0 -0
  280. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xhv.py +0 -0
  281. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xlm.py +0 -0
  282. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xmr.py +0 -0
  283. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xrp.py +0 -0
  284. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xtz.py +0 -0
  285. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_xvg.py +0 -0
  286. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_zec.py +0 -0
  287. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_zen.py +0 -0
  288. {address_encoder-1.0.2 → address_encoder-1.0.3}/tests/test_zil.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: address-encoder
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Encodes and decodes address formats for various cryptocurrencies
5
5
  Project-URL: Homepage, https://github.com/ensdomains/address-encoder-py
6
6
  Project-URL: Repository, https://github.com/ensdomains/address-encoder-py
@@ -31,9 +31,11 @@ Description-Content-Type: text/markdown
31
31
 
32
32
  # address-encoder
33
33
 
34
- Encodes and decodes address formats for various cryptocurrencies. Converts addresses between human-readable text and their native binary representations for use with [EIP-2304](https://eips.ethereum.org/EIPS/eip-2304) and ENS multichain resolution.
34
+ [![CI](https://github.com/ensdomains/address-encoder-py/actions/workflows/test.yml/badge.svg)](https://github.com/ensdomains/address-encoder-py/actions/workflows/test.yml)
35
35
 
36
- Source: [github.com/ensdomains/address-encoder-py](https://github.com/ensdomains/address-encoder-py)
36
+ Encodes and decodes address formats for various cryptocurrencies.
37
+
38
+ Converts addresses between human-readable text and their native binary representations for use with [EIP-2304](https://eips.ethereum.org/EIPS/eip-2304) and ENS multichain resolution.
37
39
 
38
40
  EVM compatible chains are either specified using SLIP-44 coin type or `0x80000000 | chainId` where `0x80000000` is the MSB (most significant bit) reserved at SLIP-44 and no coin types exist in that range. This is to avoid number collision with the existing coin types.
39
41
 
@@ -1,8 +1,10 @@
1
1
  # address-encoder
2
2
 
3
- Encodes and decodes address formats for various cryptocurrencies. Converts addresses between human-readable text and their native binary representations for use with [EIP-2304](https://eips.ethereum.org/EIPS/eip-2304) and ENS multichain resolution.
3
+ [![CI](https://github.com/ensdomains/address-encoder-py/actions/workflows/test.yml/badge.svg)](https://github.com/ensdomains/address-encoder-py/actions/workflows/test.yml)
4
4
 
5
- Source: [github.com/ensdomains/address-encoder-py](https://github.com/ensdomains/address-encoder-py)
5
+ Encodes and decodes address formats for various cryptocurrencies.
6
+
7
+ Converts addresses between human-readable text and their native binary representations for use with [EIP-2304](https://eips.ethereum.org/EIPS/eip-2304) and ENS multichain resolution.
6
8
 
7
9
  EVM compatible chains are either specified using SLIP-44 coin type or `0x80000000 | chainId` where `0x80000000` is the MSB (most significant bit) reserved at SLIP-44 and no coin types exist in that range. This is to avoid number collision with the existing coin types.
8
10
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "address-encoder"
7
- version = "1.0.2"
7
+ version = "1.0.3"
8
8
  description = "Encodes and decodes address formats for various cryptocurrencies"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -0,0 +1,48 @@
1
+ from __future__ import annotations
2
+
3
+ from io import BytesIO
4
+
5
+ import cbor2
6
+
7
+ from address_encoder.utils.base58_ import base58_unchecked_decode, base58_unchecked_encode
8
+ from address_encoder.utils.crc32 import crc32
9
+
10
+ # Byron addresses are CBOR `[#6.24(address bytes), crc32(address bytes)]`
11
+ _ADDRESS_TAG = 24
12
+
13
+
14
+ def byron_encode(source: bytes) -> str:
15
+ checksum = crc32(source)
16
+ cbor_encoded = cbor2.dumps([cbor2.CBORTag(_ADDRESS_TAG, source), checksum])
17
+ address = base58_unchecked_encode(cbor_encoded)
18
+ if not address.startswith(("Ae2", "Ddz")):
19
+ raise ValueError("Unrecognised address format")
20
+ return address
21
+
22
+
23
+ def byron_decode(source: str) -> bytes:
24
+ data = base58_unchecked_decode(source)
25
+ stream = BytesIO(data)
26
+ try:
27
+ decoded = cbor2.CBORDecoder(stream).decode()
28
+ except Exception as exc:
29
+ raise ValueError("Unrecognised address format") from exc
30
+ # Reject trailing bytes after the CBOR item
31
+ if stream.tell() != len(data):
32
+ raise ValueError("Unrecognised address format")
33
+
34
+ if not isinstance(decoded, list) or len(decoded) != 2:
35
+ raise ValueError("Unrecognised address format")
36
+
37
+ tagged_address, checksum = decoded
38
+ if (
39
+ not isinstance(tagged_address, cbor2.CBORTag)
40
+ or tagged_address.tag != _ADDRESS_TAG
41
+ or not isinstance(tagged_address.value, bytes)
42
+ ):
43
+ raise ValueError("Unrecognised address format")
44
+ value: bytes = tagged_address.value
45
+
46
+ if type(checksum) is not int or crc32(value) != checksum:
47
+ raise ValueError("Unrecognised address format")
48
+ return value
@@ -1,5 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
4
+
5
+ _HEX_REGEX = re.compile(r"[0-9a-fA-F]*")
3
6
 
4
7
  def hex_to_bytes(hex_value: str) -> bytes:
5
8
  hex_string = hex_value[2:] if hex_value.startswith("0x") else hex_value
@@ -39,5 +42,11 @@ def base10_to_bytes(value: str) -> bytes:
39
42
  return number.to_bytes(length, "big")
40
43
 
41
44
 
45
+ def hex_without_prefix_to_bytes(hex_value: str) -> bytes:
46
+ # Strict, like @noble/hashes hexToBytes: no 0x prefix, even length, hex digits only
47
+ if len(hex_value) % 2 or not _HEX_REGEX.fullmatch(hex_value):
48
+ raise ValueError(f'Invalid hex sequence in "{hex_value}".')
49
+ return bytes.fromhex(hex_value)
50
+
51
+
42
52
  bytes_to_hex_without_prefix = lambda data: data.hex()
43
- hex_without_prefix_to_bytes = hex_to_bytes
@@ -18,3 +18,13 @@ def test_icx_decode(text: str, hex_value: str) -> None:
18
18
  def test_icx_encode(expected_text: str, hex_value: str) -> None:
19
19
  assert encode_icx_address(bytes.fromhex(hex_value)) == expected_text
20
20
 
21
+
22
+ @pytest.mark.parametrize('text', [
23
+ 'hx' + '1' * 39,
24
+ 'hx' + '12 ' * 20,
25
+ 'hx0x' + '12' * 20,
26
+ 'hx' + 'zz' * 20,
27
+ ])
28
+ def test_icx_decode_rejects_malformed_hex(text: str) -> None:
29
+ with pytest.raises(ValueError):
30
+ decode_icx_address(text)
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+
3
+ import cbor2
4
+ import pytest
5
+
6
+ from address_encoder.utils.base58_ import base58_unchecked_encode
7
+ from address_encoder.utils.byron import byron_decode, byron_encode
8
+ from address_encoder.utils.crc32 import crc32
9
+
10
+ ADDRESS = bytes.fromhex("83581cba970ad36654d8dd8f74274b733452ddeab9a62a397746be3c42ccdda000")
11
+ TEXT = "Ae2tdPwUPEZFRbyhz3cpfC2CumGzNkFBN2L42rcUc2yjQpEkxDbkPodpMAi"
12
+
13
+
14
+ def _encode_cbor(value: object) -> str:
15
+ return base58_unchecked_encode(cbor2.dumps(value))
16
+
17
+
18
+ def test_byron_round_trip() -> None:
19
+ assert byron_encode(ADDRESS) == TEXT
20
+ assert byron_decode(TEXT) == ADDRESS
21
+
22
+
23
+ # Truncated inputs from the upstream cborDecode() regression tests
24
+ @pytest.mark.parametrize(
25
+ "data",
26
+ [
27
+ [],
28
+ [0xBF],
29
+ [0x9F],
30
+ [0x5F],
31
+ [0x7F],
32
+ [0xBF, 0x01],
33
+ [0xA1, 0x01],
34
+ [0x81],
35
+ [0x18],
36
+ [0x19, 0x00],
37
+ [0x1A, 0x00],
38
+ [0x1B, 0x00],
39
+ [0xFA, 0x00],
40
+ [0xFB, 0x00],
41
+ [0x41],
42
+ [0x61],
43
+ [0x61, 0xC2, 0xA2],
44
+ [0x7F, 0x61, 0xC2, 0xA2, 0xFF],
45
+ [0x9B, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
46
+ ],
47
+ )
48
+ def test_byron_rejects_truncated_cbor(data: list[int]) -> None:
49
+ with pytest.raises(ValueError, match="Unrecognised address format"):
50
+ byron_decode(base58_unchecked_encode(bytes(data)))
51
+
52
+
53
+ @pytest.mark.parametrize(
54
+ "value",
55
+ [
56
+ 5,
57
+ {0: 1, 1: 2},
58
+ [],
59
+ [cbor2.CBORTag(24, ADDRESS)],
60
+ [ADDRESS, crc32(ADDRESS)],
61
+ [cbor2.CBORTag(24, ADDRESS), crc32(ADDRESS), 0],
62
+ [cbor2.CBORTag(100, ADDRESS), crc32(ADDRESS)],
63
+ [cbor2.CBORTag(24, 5), 0],
64
+ [cbor2.CBORTag(24, "text"), 0],
65
+ [cbor2.CBORTag(24, ADDRESS), crc32(ADDRESS) + 1],
66
+ [cbor2.CBORTag(24, ADDRESS), str(crc32(ADDRESS))],
67
+ ],
68
+ )
69
+ def test_byron_rejects_malformed_structure(value: object) -> None:
70
+ with pytest.raises(ValueError, match="Unrecognised address format"):
71
+ byron_decode(_encode_cbor(value))
72
+
73
+
74
+ def test_byron_rejects_trailing_bytes() -> None:
75
+ data = cbor2.dumps([cbor2.CBORTag(24, ADDRESS), crc32(ADDRESS)]) + b"\x00"
76
+ with pytest.raises(ValueError, match="Unrecognised address format"):
77
+ byron_decode(base58_unchecked_encode(data))
@@ -0,0 +1,40 @@
1
+ from __future__ import annotations
2
+
3
+ import pytest
4
+
5
+ from address_encoder.utils.bytes_ import hex_to_bytes, hex_without_prefix_to_bytes
6
+
7
+
8
+ @pytest.mark.parametrize(
9
+ ("text", "expected"),
10
+ [
11
+ ("", b""),
12
+ ("00", b"\x00"),
13
+ ("beef", b"\xbe\xef"),
14
+ ("DeAdBeEf", b"\xde\xad\xbe\xef"),
15
+ ],
16
+ )
17
+ def test_hex_without_prefix_to_bytes(text: str, expected: bytes) -> None:
18
+ assert hex_without_prefix_to_bytes(text) == expected
19
+
20
+
21
+ @pytest.mark.parametrize(
22
+ "text",
23
+ [
24
+ "0xbeef",
25
+ "abc",
26
+ "zz",
27
+ "be ef",
28
+ " beef",
29
+ "beef\n",
30
+ "be_ef",
31
+ ],
32
+ )
33
+ def test_hex_without_prefix_to_bytes_rejects_invalid(text: str) -> None:
34
+ with pytest.raises(ValueError):
35
+ hex_without_prefix_to_bytes(text)
36
+
37
+
38
+ def test_hex_to_bytes_is_unchanged() -> None:
39
+ assert hex_to_bytes("0xbeef") == b"\xbe\xef"
40
+ assert hex_to_bytes("0xabc") == b"\x0a\xbc"
@@ -1,24 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import cbor2
4
-
5
- from address_encoder.utils.base58_ import base58_unchecked_decode, base58_unchecked_encode
6
- from address_encoder.utils.crc32 import crc32
7
-
8
-
9
- def byron_encode(source: bytes) -> str:
10
- checksum = crc32(source)
11
- cbor_encoded = cbor2.dumps([cbor2.CBORTag(24, source), checksum])
12
- address = base58_unchecked_encode(cbor_encoded)
13
- if not address.startswith(("Ae2", "Ddz")):
14
- raise ValueError("Unrecognised address format")
15
- return address
16
-
17
-
18
- def byron_decode(source: str) -> bytes:
19
- decoded = cbor2.loads(base58_unchecked_decode(source))
20
- tagged_address, checksum = decoded[0], decoded[1]
21
- value = tagged_address.value if isinstance(tagged_address, cbor2.CBORTag) else tagged_address
22
- if crc32(value) != checksum:
23
- raise ValueError("Unrecognised address format")
24
- return value
File without changes