@getomnichain/omnichain 0.2.0

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 (296) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/dist/abstract_gas_pricing.d.ts +31 -0
  4. package/dist/abstract_gas_pricing.d.ts.map +1 -0
  5. package/dist/abstract_gas_pricing.js +22 -0
  6. package/dist/abstract_gas_pricing.js.map +1 -0
  7. package/dist/address.d.ts +10 -0
  8. package/dist/address.d.ts.map +1 -0
  9. package/dist/address.factory.d.ts +26 -0
  10. package/dist/address.factory.d.ts.map +1 -0
  11. package/dist/address.factory.js +75 -0
  12. package/dist/address.factory.js.map +1 -0
  13. package/dist/address.js +13 -0
  14. package/dist/address.js.map +1 -0
  15. package/dist/address_field.decorator.d.ts +17 -0
  16. package/dist/address_field.decorator.d.ts.map +1 -0
  17. package/dist/address_field.decorator.js +34 -0
  18. package/dist/address_field.decorator.js.map +1 -0
  19. package/dist/chain.base.d.ts +79 -0
  20. package/dist/chain.base.d.ts.map +1 -0
  21. package/dist/chain.base.js +113 -0
  22. package/dist/chain.base.js.map +1 -0
  23. package/dist/chain_ids.d.ts +122 -0
  24. package/dist/chain_ids.d.ts.map +1 -0
  25. package/dist/chain_ids.js +193 -0
  26. package/dist/chain_ids.js.map +1 -0
  27. package/dist/errors.d.ts +42 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/errors.js +62 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/evm/evm_address.d.ts +11 -0
  32. package/dist/evm/evm_address.d.ts.map +1 -0
  33. package/dist/evm/evm_address.js +56 -0
  34. package/dist/evm/evm_address.js.map +1 -0
  35. package/dist/evm/evm_chain.d.ts +123 -0
  36. package/dist/evm/evm_chain.d.ts.map +1 -0
  37. package/dist/evm/evm_chain.js +685 -0
  38. package/dist/evm/evm_chain.js.map +1 -0
  39. package/dist/evm/evm_chains.d.ts +83 -0
  40. package/dist/evm/evm_chains.d.ts.map +1 -0
  41. package/dist/evm/evm_chains.js +493 -0
  42. package/dist/evm/evm_chains.js.map +1 -0
  43. package/dist/evm/evm_gas_estimate.d.ts +45 -0
  44. package/dist/evm/evm_gas_estimate.d.ts.map +1 -0
  45. package/dist/evm/evm_gas_estimate.js +70 -0
  46. package/dist/evm/evm_gas_estimate.js.map +1 -0
  47. package/dist/evm/evm_gas_pricing.d.ts +40 -0
  48. package/dist/evm/evm_gas_pricing.d.ts.map +1 -0
  49. package/dist/evm/evm_gas_pricing.js +56 -0
  50. package/dist/evm/evm_gas_pricing.js.map +1 -0
  51. package/dist/evm/evm_token.d.ts +7 -0
  52. package/dist/evm/evm_token.d.ts.map +1 -0
  53. package/dist/evm/evm_token.js +22 -0
  54. package/dist/evm/evm_token.js.map +1 -0
  55. package/dist/evm/evm_tokens.d.ts +81 -0
  56. package/dist/evm/evm_tokens.d.ts.map +1 -0
  57. package/dist/evm/evm_tokens.js +104 -0
  58. package/dist/evm/evm_tokens.js.map +1 -0
  59. package/dist/evm/evm_transaction_status.d.ts +108 -0
  60. package/dist/evm/evm_transaction_status.d.ts.map +1 -0
  61. package/dist/evm/evm_transaction_status.js +177 -0
  62. package/dist/evm/evm_transaction_status.js.map +1 -0
  63. package/dist/evm/index.d.ts +10 -0
  64. package/dist/evm/index.d.ts.map +1 -0
  65. package/dist/evm/index.js +10 -0
  66. package/dist/evm/index.js.map +1 -0
  67. package/dist/evm/unsigned_evm_transaction.d.ts +19 -0
  68. package/dist/evm/unsigned_evm_transaction.d.ts.map +1 -0
  69. package/dist/evm/unsigned_evm_transaction.js +18 -0
  70. package/dist/evm/unsigned_evm_transaction.js.map +1 -0
  71. package/dist/index.d.ts +18 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +18 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/is_address.decorator.d.ts +3 -0
  76. package/dist/is_address.decorator.d.ts.map +1 -0
  77. package/dist/is_address.decorator.js +51 -0
  78. package/dist/is_address.decorator.js.map +1 -0
  79. package/dist/network_type.d.ts +73 -0
  80. package/dist/network_type.d.ts.map +1 -0
  81. package/dist/network_type.js +144 -0
  82. package/dist/network_type.js.map +1 -0
  83. package/dist/priority.d.ts +23 -0
  84. package/dist/priority.d.ts.map +1 -0
  85. package/dist/priority.js +23 -0
  86. package/dist/priority.js.map +1 -0
  87. package/dist/solana/index.d.ts +9 -0
  88. package/dist/solana/index.d.ts.map +1 -0
  89. package/dist/solana/index.js +9 -0
  90. package/dist/solana/index.js.map +1 -0
  91. package/dist/solana/solana_address.d.ts +20 -0
  92. package/dist/solana/solana_address.d.ts.map +1 -0
  93. package/dist/solana/solana_address.js +45 -0
  94. package/dist/solana/solana_address.js.map +1 -0
  95. package/dist/solana/solana_chain.d.ts +213 -0
  96. package/dist/solana/solana_chain.d.ts.map +1 -0
  97. package/dist/solana/solana_chain.js +704 -0
  98. package/dist/solana/solana_chain.js.map +1 -0
  99. package/dist/solana/solana_chains.d.ts +24 -0
  100. package/dist/solana/solana_chains.d.ts.map +1 -0
  101. package/dist/solana/solana_chains.js +84 -0
  102. package/dist/solana/solana_chains.js.map +1 -0
  103. package/dist/solana/solana_gas_pricing.d.ts +30 -0
  104. package/dist/solana/solana_gas_pricing.d.ts.map +1 -0
  105. package/dist/solana/solana_gas_pricing.js +26 -0
  106. package/dist/solana/solana_gas_pricing.js.map +1 -0
  107. package/dist/solana/solana_token.d.ts +19 -0
  108. package/dist/solana/solana_token.d.ts.map +1 -0
  109. package/dist/solana/solana_token.js +34 -0
  110. package/dist/solana/solana_token.js.map +1 -0
  111. package/dist/solana/solana_tokens.d.ts +22 -0
  112. package/dist/solana/solana_tokens.d.ts.map +1 -0
  113. package/dist/solana/solana_tokens.js +26 -0
  114. package/dist/solana/solana_tokens.js.map +1 -0
  115. package/dist/solana/solana_transaction_status.d.ts +59 -0
  116. package/dist/solana/solana_transaction_status.d.ts.map +1 -0
  117. package/dist/solana/solana_transaction_status.js +144 -0
  118. package/dist/solana/solana_transaction_status.js.map +1 -0
  119. package/dist/solana/unsigned_solana_transaction.d.ts +31 -0
  120. package/dist/solana/unsigned_solana_transaction.d.ts.map +1 -0
  121. package/dist/solana/unsigned_solana_transaction.js +26 -0
  122. package/dist/solana/unsigned_solana_transaction.js.map +1 -0
  123. package/dist/token.d.ts +35 -0
  124. package/dist/token.d.ts.map +1 -0
  125. package/dist/token.js +62 -0
  126. package/dist/token.js.map +1 -0
  127. package/dist/ton/index.d.ts +2 -0
  128. package/dist/ton/index.d.ts.map +1 -0
  129. package/dist/ton/index.js +2 -0
  130. package/dist/ton/index.js.map +1 -0
  131. package/dist/ton/ton_address.d.ts +10 -0
  132. package/dist/ton/ton_address.d.ts.map +1 -0
  133. package/dist/ton/ton_address.js +53 -0
  134. package/dist/ton/ton_address.js.map +1 -0
  135. package/dist/transaction_status.d.ts +140 -0
  136. package/dist/transaction_status.d.ts.map +1 -0
  137. package/dist/transaction_status.js +271 -0
  138. package/dist/transaction_status.js.map +1 -0
  139. package/dist/unsigned_transaction.d.ts +7 -0
  140. package/dist/unsigned_transaction.d.ts.map +1 -0
  141. package/dist/unsigned_transaction.js +9 -0
  142. package/dist/unsigned_transaction.js.map +1 -0
  143. package/dist/utxo/btc/btc_address.d.ts +15 -0
  144. package/dist/utxo/btc/btc_address.d.ts.map +1 -0
  145. package/dist/utxo/btc/btc_address.js +39 -0
  146. package/dist/utxo/btc/btc_address.js.map +1 -0
  147. package/dist/utxo/btc/btc_chain.d.ts +34 -0
  148. package/dist/utxo/btc/btc_chain.d.ts.map +1 -0
  149. package/dist/utxo/btc/btc_chain.js +62 -0
  150. package/dist/utxo/btc/btc_chain.js.map +1 -0
  151. package/dist/utxo/btc/btc_chains.d.ts +25 -0
  152. package/dist/utxo/btc/btc_chains.d.ts.map +1 -0
  153. package/dist/utxo/btc/btc_chains.js +43 -0
  154. package/dist/utxo/btc/btc_chains.js.map +1 -0
  155. package/dist/utxo/btc/btc_token.d.ts +6 -0
  156. package/dist/utxo/btc/btc_token.d.ts.map +1 -0
  157. package/dist/utxo/btc/btc_token.js +11 -0
  158. package/dist/utxo/btc/btc_token.js.map +1 -0
  159. package/dist/utxo/btc/index.d.ts +14 -0
  160. package/dist/utxo/btc/index.d.ts.map +1 -0
  161. package/dist/utxo/btc/index.js +14 -0
  162. package/dist/utxo/btc/index.js.map +1 -0
  163. package/dist/utxo/btc/network_params.d.ts +50 -0
  164. package/dist/utxo/btc/network_params.d.ts.map +1 -0
  165. package/dist/utxo/btc/network_params.js +188 -0
  166. package/dist/utxo/btc/network_params.js.map +1 -0
  167. package/dist/utxo/btc/tools/asset_outpoint.d.ts +7 -0
  168. package/dist/utxo/btc/tools/asset_outpoint.d.ts.map +1 -0
  169. package/dist/utxo/btc/tools/asset_outpoint.js +12 -0
  170. package/dist/utxo/btc/tools/asset_outpoint.js.map +1 -0
  171. package/dist/utxo/btc/tools/bitcoin_core.tool.d.ts +41 -0
  172. package/dist/utxo/btc/tools/bitcoin_core.tool.d.ts.map +1 -0
  173. package/dist/utxo/btc/tools/bitcoin_core.tool.js +172 -0
  174. package/dist/utxo/btc/tools/bitcoin_core.tool.js.map +1 -0
  175. package/dist/utxo/btc/tools/esplora.tool.d.ts +27 -0
  176. package/dist/utxo/btc/tools/esplora.tool.d.ts.map +1 -0
  177. package/dist/utxo/btc/tools/esplora.tool.js +113 -0
  178. package/dist/utxo/btc/tools/esplora.tool.js.map +1 -0
  179. package/dist/utxo/btc/tools/inscription_index.d.ts +6 -0
  180. package/dist/utxo/btc/tools/inscription_index.d.ts.map +1 -0
  181. package/dist/utxo/btc/tools/inscription_index.js +2 -0
  182. package/dist/utxo/btc/tools/inscription_index.js.map +1 -0
  183. package/dist/utxo/btc/tools/ordiscan.tool.d.ts +19 -0
  184. package/dist/utxo/btc/tools/ordiscan.tool.d.ts.map +1 -0
  185. package/dist/utxo/btc/tools/ordiscan.tool.js +53 -0
  186. package/dist/utxo/btc/tools/ordiscan.tool.js.map +1 -0
  187. package/dist/utxo/btc/tools/rare_sat_index.d.ts +6 -0
  188. package/dist/utxo/btc/tools/rare_sat_index.d.ts.map +1 -0
  189. package/dist/utxo/btc/tools/rare_sat_index.js +2 -0
  190. package/dist/utxo/btc/tools/rare_sat_index.js.map +1 -0
  191. package/dist/utxo/btc/tools/rune_index.d.ts +6 -0
  192. package/dist/utxo/btc/tools/rune_index.d.ts.map +1 -0
  193. package/dist/utxo/btc/tools/rune_index.js +2 -0
  194. package/dist/utxo/btc/tools/rune_index.js.map +1 -0
  195. package/dist/utxo/btc/tools/unisat.tool.d.ts +18 -0
  196. package/dist/utxo/btc/tools/unisat.tool.d.ts.map +1 -0
  197. package/dist/utxo/btc/tools/unisat.tool.js +49 -0
  198. package/dist/utxo/btc/tools/unisat.tool.js.map +1 -0
  199. package/dist/utxo/coin_selection.d.ts +29 -0
  200. package/dist/utxo/coin_selection.d.ts.map +1 -0
  201. package/dist/utxo/coin_selection.js +156 -0
  202. package/dist/utxo/coin_selection.js.map +1 -0
  203. package/dist/utxo/doge/doge_chains.d.ts +17 -0
  204. package/dist/utxo/doge/doge_chains.d.ts.map +1 -0
  205. package/dist/utxo/doge/doge_chains.js +28 -0
  206. package/dist/utxo/doge/doge_chains.js.map +1 -0
  207. package/dist/utxo/doge/index.d.ts +3 -0
  208. package/dist/utxo/doge/index.d.ts.map +1 -0
  209. package/dist/utxo/doge/index.js +3 -0
  210. package/dist/utxo/doge/index.js.map +1 -0
  211. package/dist/utxo/doge/network_params.d.ts +4 -0
  212. package/dist/utxo/doge/network_params.d.ts.map +1 -0
  213. package/dist/utxo/doge/network_params.js +24 -0
  214. package/dist/utxo/doge/network_params.js.map +1 -0
  215. package/dist/utxo/ecc.d.ts +2 -0
  216. package/dist/utxo/ecc.d.ts.map +1 -0
  217. package/dist/utxo/ecc.js +11 -0
  218. package/dist/utxo/ecc.js.map +1 -0
  219. package/dist/utxo/fee.d.ts +12 -0
  220. package/dist/utxo/fee.d.ts.map +1 -0
  221. package/dist/utxo/fee.js +51 -0
  222. package/dist/utxo/fee.js.map +1 -0
  223. package/dist/utxo/index.d.ts +20 -0
  224. package/dist/utxo/index.d.ts.map +1 -0
  225. package/dist/utxo/index.js +20 -0
  226. package/dist/utxo/index.js.map +1 -0
  227. package/dist/utxo/ltc/index.d.ts +3 -0
  228. package/dist/utxo/ltc/index.d.ts.map +1 -0
  229. package/dist/utxo/ltc/index.js +3 -0
  230. package/dist/utxo/ltc/index.js.map +1 -0
  231. package/dist/utxo/ltc/ltc_chains.d.ts +17 -0
  232. package/dist/utxo/ltc/ltc_chains.d.ts.map +1 -0
  233. package/dist/utxo/ltc/ltc_chains.js +28 -0
  234. package/dist/utxo/ltc/ltc_chains.js.map +1 -0
  235. package/dist/utxo/ltc/network_params.d.ts +4 -0
  236. package/dist/utxo/ltc/network_params.d.ts.map +1 -0
  237. package/dist/utxo/ltc/network_params.js +27 -0
  238. package/dist/utxo/ltc/network_params.js.map +1 -0
  239. package/dist/utxo/script.d.ts +16 -0
  240. package/dist/utxo/script.d.ts.map +1 -0
  241. package/dist/utxo/script.js +52 -0
  242. package/dist/utxo/script.js.map +1 -0
  243. package/dist/utxo/tools/broadcaster.d.ts +6 -0
  244. package/dist/utxo/tools/broadcaster.d.ts.map +1 -0
  245. package/dist/utxo/tools/broadcaster.js +2 -0
  246. package/dist/utxo/tools/broadcaster.js.map +1 -0
  247. package/dist/utxo/tools/chain_tip_provider.d.ts +5 -0
  248. package/dist/utxo/tools/chain_tip_provider.d.ts.map +1 -0
  249. package/dist/utxo/tools/chain_tip_provider.js +2 -0
  250. package/dist/utxo/tools/chain_tip_provider.js.map +1 -0
  251. package/dist/utxo/tools/fee_estimator.d.ts +6 -0
  252. package/dist/utxo/tools/fee_estimator.d.ts.map +1 -0
  253. package/dist/utxo/tools/fee_estimator.js +2 -0
  254. package/dist/utxo/tools/fee_estimator.js.map +1 -0
  255. package/dist/utxo/tools/raw_transaction_provider.d.ts +8 -0
  256. package/dist/utxo/tools/raw_transaction_provider.d.ts.map +1 -0
  257. package/dist/utxo/tools/raw_transaction_provider.js +2 -0
  258. package/dist/utxo/tools/raw_transaction_provider.js.map +1 -0
  259. package/dist/utxo/tools/utxo_provider.d.ts +7 -0
  260. package/dist/utxo/tools/utxo_provider.d.ts.map +1 -0
  261. package/dist/utxo/tools/utxo_provider.js +2 -0
  262. package/dist/utxo/tools/utxo_provider.js.map +1 -0
  263. package/dist/utxo/unsigned_utxo_transaction.d.ts +32 -0
  264. package/dist/utxo/unsigned_utxo_transaction.d.ts.map +1 -0
  265. package/dist/utxo/unsigned_utxo_transaction.js +32 -0
  266. package/dist/utxo/unsigned_utxo_transaction.js.map +1 -0
  267. package/dist/utxo/utxo.d.ts +43 -0
  268. package/dist/utxo/utxo.d.ts.map +1 -0
  269. package/dist/utxo/utxo.js +2 -0
  270. package/dist/utxo/utxo.js.map +1 -0
  271. package/dist/utxo/utxo_chain.d.ts +102 -0
  272. package/dist/utxo/utxo_chain.d.ts.map +1 -0
  273. package/dist/utxo/utxo_chain.js +524 -0
  274. package/dist/utxo/utxo_chain.js.map +1 -0
  275. package/dist/utxo/utxo_chains.d.ts +29 -0
  276. package/dist/utxo/utxo_chains.d.ts.map +1 -0
  277. package/dist/utxo/utxo_chains.js +63 -0
  278. package/dist/utxo/utxo_chains.js.map +1 -0
  279. package/dist/utxo/utxo_gas_pricing.d.ts +22 -0
  280. package/dist/utxo/utxo_gas_pricing.d.ts.map +1 -0
  281. package/dist/utxo/utxo_gas_pricing.js +20 -0
  282. package/dist/utxo/utxo_gas_pricing.js.map +1 -0
  283. package/dist/utxo/utxo_network_params.d.ts +25 -0
  284. package/dist/utxo/utxo_network_params.d.ts.map +1 -0
  285. package/dist/utxo/utxo_network_params.js +15 -0
  286. package/dist/utxo/utxo_network_params.js.map +1 -0
  287. package/dist/utxo/utxo_transaction_status.d.ts +73 -0
  288. package/dist/utxo/utxo_transaction_status.d.ts.map +1 -0
  289. package/dist/utxo/utxo_transaction_status.js +89 -0
  290. package/dist/utxo/utxo_transaction_status.js.map +1 -0
  291. package/docs/PUBLISHING.md +119 -0
  292. package/docs/README.md +273 -0
  293. package/docs/evm.md +205 -0
  294. package/docs/solana.md +220 -0
  295. package/docs/utxo.md +364 -0
  296. package/package.json +94 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Chain ID constants — mirrors omnichain-py/src/omnichain/chain_ids.py.
3
+ * Source of truth: https://github.com/getomnichain/omnichain-py
4
+ *
5
+ * EVM chain IDs are the canonical EIP-155 numbers.
6
+ * Non-EVM chains use synthetic negative IDs (Python convention) so a single
7
+ * `number` fits every chain and the sign disambiguates families.
8
+ */
9
+ export declare const CHAIN_ID_BITCOIN_MAINNET = -1;
10
+ export declare const CHAIN_ID_BITCOIN_TESTNET = -2;
11
+ export declare const CHAIN_ID_BITCOIN_SIGNET = -3;
12
+ export declare const CHAIN_ID_LITECOIN_MAINNET = -10;
13
+ export declare const CHAIN_ID_DOGECOIN_MAINNET = -12;
14
+ export declare const CHAIN_ID_DASH_MAINNET = -14;
15
+ export declare const CHAIN_ID_ZCASH_MAINNET = -16;
16
+ export declare const CHAIN_ID_BITCOIN_CASH_MAINNET = -18;
17
+ export declare const CHAIN_FAMILY_UTXO: ReadonlySet<number>;
18
+ /**
19
+ * True for any chainId in the static UTXO family set (Python parity).
20
+ *
21
+ * **Divergence warning**: `networkTypeOf` currently routes only `-1/-2/-3`
22
+ * (BTC) statically. `LTC (-10)`, `DOGE (-12)`, `DASH (-14)`, `ZCASH (-16)`,
23
+ * `BCH (-18)` return `true` here for family membership, but v0 has no
24
+ * `addressFor` path for them — construct the chain instance and call
25
+ * `chain.validateAddress(raw)` directly. Do not use `isUtxo` as a routing
26
+ * precondition; use `tryNetworkTypeOf` or per-chain registration checks.
27
+ */
28
+ export declare function isUtxo(chainId: number): boolean;
29
+ export declare const CHAIN_ID_SOLANA_MAINNET = -2000;
30
+ export declare const CHAIN_ID_SOLANA_TESTNET = -2001;
31
+ export declare const CHAIN_ID_SOLANA_DEVNET = -2002;
32
+ export declare const CHAIN_FAMILY_SOLANA: ReadonlySet<number>;
33
+ export declare function isSolana(chainId: number): boolean;
34
+ export declare const CHAIN_ID_SUI_MAINNET = -2500;
35
+ export declare const CHAIN_ID_SUI_TESTNET = -2501;
36
+ export declare const CHAIN_ID_SUI_DEVNET = -2502;
37
+ export declare const CHAIN_FAMILY_SUI: ReadonlySet<number>;
38
+ export declare function isSui(chainId: number): boolean;
39
+ export declare const CHAIN_ID_XRPL_MAINNET = -3000;
40
+ export declare const CHAIN_ID_XRPL_TESTNET = -3001;
41
+ export declare const CHAIN_FAMILY_XRPL: ReadonlySet<number>;
42
+ export declare function isXrpl(chainId: number): boolean;
43
+ export declare const CHAIN_ID_STELLAR_MAINNET = -3500;
44
+ export declare const CHAIN_ID_STELLAR_TESTNET = -3501;
45
+ export declare const CHAIN_FAMILY_STELLAR: ReadonlySet<number>;
46
+ export declare function isStellar(chainId: number): boolean;
47
+ export declare const CHAIN_ID_TON_MAINNET = -4000;
48
+ export declare const CHAIN_ID_TON_TESTNET = -4001;
49
+ export declare const CHAIN_FAMILY_TON: ReadonlySet<number>;
50
+ export declare function isTon(chainId: number): boolean;
51
+ export declare const CHAIN_ID_TRON_MAINNET = 728126428;
52
+ export declare const CHAIN_ID_TRON_SHASTA = 2494104990;
53
+ export declare const CHAIN_FAMILY_TRON: ReadonlySet<number>;
54
+ export declare function isTron(chainId: number): boolean;
55
+ export declare const CHAIN_ID_ETHEREUM = 1;
56
+ export declare const CHAIN_ID_GOERLI = 5;
57
+ export declare const CHAIN_ID_OPTIMISM = 10;
58
+ export declare const CHAIN_ID_CRONOS = 25;
59
+ export declare const CHAIN_ID_BNB_CHAIN = 56;
60
+ export declare const CHAIN_ID_OKX_CHAIN = 66;
61
+ export declare const CHAIN_ID_GNOSIS = 100;
62
+ export declare const CHAIN_ID_UNICHAIN = 130;
63
+ export declare const CHAIN_ID_POLYGON = 137;
64
+ export declare const CHAIN_ID_MONAD = 143;
65
+ export declare const CHAIN_ID_SONIC = 146;
66
+ export declare const CHAIN_ID_SHIMMER = 148;
67
+ export declare const CHAIN_ID_XLAYER = 196;
68
+ export declare const CHAIN_ID_OPBNB = 204;
69
+ export declare const CHAIN_ID_FANTOM = 250;
70
+ export declare const CHAIN_ID_BOBA = 288;
71
+ export declare const CHAIN_ID_ZKSYNC = 324;
72
+ export declare const CHAIN_ID_WORLD_CHAIN = 480;
73
+ export declare const CHAIN_ID_WANCHAIN = 888;
74
+ export declare const CHAIN_ID_STABLE = 988;
75
+ export declare const CHAIN_ID_HYPER_EVM = 999;
76
+ export declare const CHAIN_ID_METIS = 1088;
77
+ export declare const CHAIN_ID_POLYGON_ZKEVM = 1101;
78
+ export declare const CHAIN_ID_MOONBEAM = 1284;
79
+ export declare const CHAIN_ID_MOONRIVER = 1285;
80
+ export declare const CHAIN_ID_SEI_EVM = 1329;
81
+ export declare const CHAIN_ID_SONEIUM = 1868;
82
+ export declare const CHAIN_ID_ABSTRACT = 2741;
83
+ export declare const CHAIN_ID_CITREA = 4114;
84
+ export declare const CHAIN_ID_TEMPO = 4217;
85
+ export declare const CHAIN_ID_MEGA_ETH = 4326;
86
+ export declare const CHAIN_ID_MANTLE = 5000;
87
+ export declare const CHAIN_ID_ZETACHAIN = 7000;
88
+ export declare const CHAIN_ID_BASE = 8453;
89
+ export declare const CHAIN_ID_IOTA_EVM = 8822;
90
+ export declare const CHAIN_ID_PLASMA = 9745;
91
+ export declare const CHAIN_ID_MODE = 34443;
92
+ export declare const CHAIN_ID_ARBITRUM = 42161;
93
+ export declare const CHAIN_ID_CELO = 42220;
94
+ export declare const CHAIN_ID_AVALANCHE_C_CHAIN = 43114;
95
+ export declare const CHAIN_ID_INK = 57073;
96
+ export declare const CHAIN_ID_LINEA = 59144;
97
+ export declare const CHAIN_ID_BOB = 60808;
98
+ export declare const CHAIN_ID_BERA_CHAIN = 80094;
99
+ export declare const CHAIN_ID_BLAST = 81457;
100
+ export declare const CHAIN_ID_TAIKO = 167000;
101
+ export declare const CHAIN_ID_SCROLL = 534352;
102
+ export declare const CHAIN_ID_KATANA = 747474;
103
+ export declare const CHAIN_ID_ZKLINK_NOVA = 810180;
104
+ export declare const CHAIN_ID_ZORA = 7777777;
105
+ export declare const CHAIN_ID_SEPOLIA = 11155111;
106
+ export declare const CHAIN_ID_CELO_SEPOLIA = 11142220;
107
+ export declare const CHAIN_ID_AURORA = 1313161554;
108
+ /**
109
+ * Sign/family test — returns `true` for any positive integer chainId that
110
+ * isn't a Tron chain. Does NOT assert that the chainId corresponds to a
111
+ * pre-baked `EvmChain`. Consumers wanting a support check should look up the
112
+ * chain in `ALL_DECLARED_EVM_CHAINS` (48 pre-baked chains); the smaller
113
+ * `ALL_EVM_CHAINS` is the pre-v0 "wired" set of 4 kept for backward compat.
114
+ *
115
+ * **Caveat on all `is*` predicates**: they operate on the immutable Python-
116
+ * parity family sets in this file. `networkTypeOf()` (in `network_type.ts`)
117
+ * reads the runtime registry that also includes consumer-registered chains,
118
+ * and is the authoritative routing check. The two can disagree for any
119
+ * chainId a consumer registered.
120
+ */
121
+ export declare function isEvm(chainId: number): boolean;
122
+ //# sourceMappingURL=chain_ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain_ids.d.ts","sourceRoot":"","sources":["../chain_ids.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Chain ID constants — mirrors omnichain-py/src/omnichain/chain_ids.py.
3
+ * Source of truth: https://github.com/getomnichain/omnichain-py
4
+ *
5
+ * EVM chain IDs are the canonical EIP-155 numbers.
6
+ * Non-EVM chains use synthetic negative IDs (Python convention) so a single
7
+ * `number` fits every chain and the sign disambiguates families.
8
+ */
9
+ // -----------------------------------------------------------------------------
10
+ // UTXO family (mirrors chain_ids.py:17-25)
11
+ // -----------------------------------------------------------------------------
12
+ export const CHAIN_ID_BITCOIN_MAINNET = -1;
13
+ export const CHAIN_ID_BITCOIN_TESTNET = -2;
14
+ export const CHAIN_ID_BITCOIN_SIGNET = -3;
15
+ export const CHAIN_ID_LITECOIN_MAINNET = -10;
16
+ export const CHAIN_ID_DOGECOIN_MAINNET = -12;
17
+ export const CHAIN_ID_DASH_MAINNET = -14;
18
+ export const CHAIN_ID_ZCASH_MAINNET = -16;
19
+ export const CHAIN_ID_BITCOIN_CASH_MAINNET = -18;
20
+ export const CHAIN_FAMILY_UTXO = new Set([
21
+ CHAIN_ID_BITCOIN_MAINNET,
22
+ CHAIN_ID_BITCOIN_TESTNET,
23
+ CHAIN_ID_BITCOIN_SIGNET,
24
+ CHAIN_ID_LITECOIN_MAINNET,
25
+ CHAIN_ID_DOGECOIN_MAINNET,
26
+ CHAIN_ID_DASH_MAINNET,
27
+ CHAIN_ID_ZCASH_MAINNET,
28
+ CHAIN_ID_BITCOIN_CASH_MAINNET,
29
+ ]);
30
+ /**
31
+ * True for any chainId in the static UTXO family set (Python parity).
32
+ *
33
+ * **Divergence warning**: `networkTypeOf` currently routes only `-1/-2/-3`
34
+ * (BTC) statically. `LTC (-10)`, `DOGE (-12)`, `DASH (-14)`, `ZCASH (-16)`,
35
+ * `BCH (-18)` return `true` here for family membership, but v0 has no
36
+ * `addressFor` path for them — construct the chain instance and call
37
+ * `chain.validateAddress(raw)` directly. Do not use `isUtxo` as a routing
38
+ * precondition; use `tryNetworkTypeOf` or per-chain registration checks.
39
+ */
40
+ export function isUtxo(chainId) {
41
+ return CHAIN_FAMILY_UTXO.has(chainId);
42
+ }
43
+ // -----------------------------------------------------------------------------
44
+ // Solana family (mirrors chain_ids.py:43-55)
45
+ // -----------------------------------------------------------------------------
46
+ export const CHAIN_ID_SOLANA_MAINNET = -2000;
47
+ export const CHAIN_ID_SOLANA_TESTNET = -2001;
48
+ export const CHAIN_ID_SOLANA_DEVNET = -2002;
49
+ export const CHAIN_FAMILY_SOLANA = new Set([
50
+ CHAIN_ID_SOLANA_MAINNET,
51
+ CHAIN_ID_SOLANA_TESTNET,
52
+ CHAIN_ID_SOLANA_DEVNET,
53
+ ]);
54
+ export function isSolana(chainId) {
55
+ return CHAIN_FAMILY_SOLANA.has(chainId);
56
+ }
57
+ // -----------------------------------------------------------------------------
58
+ // Sui family (mirrors chain_ids.py:57-67) — not implemented on TS v0.
59
+ // -----------------------------------------------------------------------------
60
+ export const CHAIN_ID_SUI_MAINNET = -2500;
61
+ export const CHAIN_ID_SUI_TESTNET = -2501;
62
+ export const CHAIN_ID_SUI_DEVNET = -2502;
63
+ export const CHAIN_FAMILY_SUI = new Set([
64
+ CHAIN_ID_SUI_MAINNET,
65
+ CHAIN_ID_SUI_TESTNET,
66
+ CHAIN_ID_SUI_DEVNET,
67
+ ]);
68
+ export function isSui(chainId) {
69
+ return CHAIN_FAMILY_SUI.has(chainId);
70
+ }
71
+ // -----------------------------------------------------------------------------
72
+ // XRPL family (mirrors chain_ids.py:69-78) — not implemented on TS v0.
73
+ // -----------------------------------------------------------------------------
74
+ export const CHAIN_ID_XRPL_MAINNET = -3000;
75
+ export const CHAIN_ID_XRPL_TESTNET = -3001;
76
+ export const CHAIN_FAMILY_XRPL = new Set([
77
+ CHAIN_ID_XRPL_MAINNET,
78
+ CHAIN_ID_XRPL_TESTNET,
79
+ ]);
80
+ export function isXrpl(chainId) {
81
+ return CHAIN_FAMILY_XRPL.has(chainId);
82
+ }
83
+ // -----------------------------------------------------------------------------
84
+ // Stellar family (mirrors chain_ids.py:80-89) — not implemented on TS v0.
85
+ // -----------------------------------------------------------------------------
86
+ export const CHAIN_ID_STELLAR_MAINNET = -3500;
87
+ export const CHAIN_ID_STELLAR_TESTNET = -3501;
88
+ export const CHAIN_FAMILY_STELLAR = new Set([
89
+ CHAIN_ID_STELLAR_MAINNET,
90
+ CHAIN_ID_STELLAR_TESTNET,
91
+ ]);
92
+ export function isStellar(chainId) {
93
+ return CHAIN_FAMILY_STELLAR.has(chainId);
94
+ }
95
+ // -----------------------------------------------------------------------------
96
+ // TON family (mirrors chain_ids.py:92-100) — not implemented on TS v0
97
+ // (only TonAddress is exported; TonChain deferred).
98
+ // -----------------------------------------------------------------------------
99
+ export const CHAIN_ID_TON_MAINNET = -4000;
100
+ export const CHAIN_ID_TON_TESTNET = -4001;
101
+ export const CHAIN_FAMILY_TON = new Set([
102
+ CHAIN_ID_TON_MAINNET,
103
+ CHAIN_ID_TON_TESTNET,
104
+ ]);
105
+ export function isTon(chainId) {
106
+ return CHAIN_FAMILY_TON.has(chainId);
107
+ }
108
+ // -----------------------------------------------------------------------------
109
+ // Tron family (mirrors chain_ids.py:103-111) — not implemented on TS v0.
110
+ // Note: Tron uses positive numeric IDs (not synthetic negatives).
111
+ // -----------------------------------------------------------------------------
112
+ export const CHAIN_ID_TRON_MAINNET = 728126428;
113
+ export const CHAIN_ID_TRON_SHASTA = 2494104990;
114
+ export const CHAIN_FAMILY_TRON = new Set([
115
+ CHAIN_ID_TRON_MAINNET,
116
+ CHAIN_ID_TRON_SHASTA,
117
+ ]);
118
+ export function isTron(chainId) {
119
+ return CHAIN_FAMILY_TRON.has(chainId);
120
+ }
121
+ // -----------------------------------------------------------------------------
122
+ // EVM chain IDs (mirrors chain_ids.py:114-167).
123
+ // -----------------------------------------------------------------------------
124
+ export const CHAIN_ID_ETHEREUM = 1;
125
+ export const CHAIN_ID_GOERLI = 5;
126
+ export const CHAIN_ID_OPTIMISM = 10;
127
+ export const CHAIN_ID_CRONOS = 25;
128
+ export const CHAIN_ID_BNB_CHAIN = 56;
129
+ export const CHAIN_ID_OKX_CHAIN = 66;
130
+ export const CHAIN_ID_GNOSIS = 100;
131
+ export const CHAIN_ID_UNICHAIN = 130;
132
+ export const CHAIN_ID_POLYGON = 137;
133
+ export const CHAIN_ID_MONAD = 143;
134
+ export const CHAIN_ID_SONIC = 146;
135
+ export const CHAIN_ID_SHIMMER = 148;
136
+ export const CHAIN_ID_XLAYER = 196;
137
+ export const CHAIN_ID_OPBNB = 204;
138
+ export const CHAIN_ID_FANTOM = 250;
139
+ export const CHAIN_ID_BOBA = 288;
140
+ export const CHAIN_ID_ZKSYNC = 324;
141
+ export const CHAIN_ID_WORLD_CHAIN = 480;
142
+ export const CHAIN_ID_WANCHAIN = 888;
143
+ export const CHAIN_ID_STABLE = 988;
144
+ export const CHAIN_ID_HYPER_EVM = 999;
145
+ export const CHAIN_ID_METIS = 1088;
146
+ export const CHAIN_ID_POLYGON_ZKEVM = 1101;
147
+ export const CHAIN_ID_MOONBEAM = 1284;
148
+ export const CHAIN_ID_MOONRIVER = 1285;
149
+ export const CHAIN_ID_SEI_EVM = 1329;
150
+ export const CHAIN_ID_SONEIUM = 1868;
151
+ export const CHAIN_ID_ABSTRACT = 2741;
152
+ export const CHAIN_ID_CITREA = 4114;
153
+ export const CHAIN_ID_TEMPO = 4217;
154
+ export const CHAIN_ID_MEGA_ETH = 4326;
155
+ export const CHAIN_ID_MANTLE = 5000;
156
+ export const CHAIN_ID_ZETACHAIN = 7000;
157
+ export const CHAIN_ID_BASE = 8453;
158
+ export const CHAIN_ID_IOTA_EVM = 8822;
159
+ export const CHAIN_ID_PLASMA = 9745;
160
+ export const CHAIN_ID_MODE = 34443;
161
+ export const CHAIN_ID_ARBITRUM = 42161;
162
+ export const CHAIN_ID_CELO = 42220;
163
+ export const CHAIN_ID_AVALANCHE_C_CHAIN = 43114;
164
+ export const CHAIN_ID_INK = 57073;
165
+ export const CHAIN_ID_LINEA = 59144;
166
+ export const CHAIN_ID_BOB = 60808;
167
+ export const CHAIN_ID_BERA_CHAIN = 80094;
168
+ export const CHAIN_ID_BLAST = 81457;
169
+ export const CHAIN_ID_TAIKO = 167000;
170
+ export const CHAIN_ID_SCROLL = 534352;
171
+ export const CHAIN_ID_KATANA = 747474;
172
+ export const CHAIN_ID_ZKLINK_NOVA = 810180;
173
+ export const CHAIN_ID_ZORA = 7777777;
174
+ export const CHAIN_ID_SEPOLIA = 11155111;
175
+ export const CHAIN_ID_CELO_SEPOLIA = 11142220;
176
+ export const CHAIN_ID_AURORA = 1313161554;
177
+ /**
178
+ * Sign/family test — returns `true` for any positive integer chainId that
179
+ * isn't a Tron chain. Does NOT assert that the chainId corresponds to a
180
+ * pre-baked `EvmChain`. Consumers wanting a support check should look up the
181
+ * chain in `ALL_DECLARED_EVM_CHAINS` (48 pre-baked chains); the smaller
182
+ * `ALL_EVM_CHAINS` is the pre-v0 "wired" set of 4 kept for backward compat.
183
+ *
184
+ * **Caveat on all `is*` predicates**: they operate on the immutable Python-
185
+ * parity family sets in this file. `networkTypeOf()` (in `network_type.ts`)
186
+ * reads the runtime registry that also includes consumer-registered chains,
187
+ * and is the authoritative routing check. The two can disagree for any
188
+ * chainId a consumer registered.
189
+ */
190
+ export function isEvm(chainId) {
191
+ return Number.isInteger(chainId) && chainId > 0 && !CHAIN_FAMILY_TRON.has(chainId);
192
+ }
193
+ //# sourceMappingURL=chain_ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain_ids.js","sourceRoot":"","sources":["../chain_ids.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Replace `rpcUrl` in `message` with its host-only form so API keys carried
3
+ * in the URL path/query don't leak into error strings. Falls back to a
4
+ * `<rpc>` placeholder if the URL is unparseable.
5
+ */
6
+ export declare function sanitizeMessage(message: string, rpcUrl: string | null): string;
7
+ /**
8
+ * Build a fresh `Error` from `cause` with a sanitized message and stack,
9
+ * dropping every other property (axios errors carry `.config.headers`
10
+ * `Authorization` and `.config.url`/`baseURL` with API keys). Consumers'
11
+ * structured loggers (pino `err` serializer, `util.inspect({showHidden})`)
12
+ * walk `error.cause`; this ensures the API key never lands in logs.
13
+ * Returns `undefined` for non-Error causes so the ChainError constructor
14
+ * leaves cause unset.
15
+ */
16
+ export declare function sanitizeCause(cause: unknown, rpcUrl: string | null): Error | undefined;
17
+ export declare const ChainErrorKinds: {
18
+ readonly ChainNotSupported: "chain_not_supported";
19
+ readonly DuplicateToken: "duplicate_token";
20
+ readonly RpcNotConfigured: "rpc_not_configured";
21
+ readonly RpcError: "rpc_error";
22
+ readonly TransactionDecodeFailed: "transaction_decode_failed";
23
+ readonly InvalidAddress: "invalid_address";
24
+ readonly InvalidTokenIdentifier: "invalid_token_identifier";
25
+ readonly InvalidArgument: "invalid_argument";
26
+ };
27
+ export type ChainErrorKind = (typeof ChainErrorKinds)[keyof typeof ChainErrorKinds];
28
+ export interface ChainErrorMeta {
29
+ chainId?: number;
30
+ txHash?: string;
31
+ address?: string;
32
+ identifier?: string;
33
+ rpcHost?: string;
34
+ envCandidates?: string[];
35
+ }
36
+ export declare class ChainError extends Error {
37
+ readonly kind: ChainErrorKind;
38
+ readonly meta: ChainErrorMeta;
39
+ constructor(kind: ChainErrorKind, message: string, meta?: ChainErrorMeta, cause?: unknown);
40
+ }
41
+ export declare function isChainError(err: unknown, kind?: ChainErrorKind): err is ChainError;
42
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAU9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAMtF;AAED,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;gBAElB,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,EAAE,KAAK,CAAC,EAAE,OAAO;CAM9F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,IAAI,UAAU,CAGnF"}
package/dist/errors.js ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Replace `rpcUrl` in `message` with its host-only form so API keys carried
3
+ * in the URL path/query don't leak into error strings. Falls back to a
4
+ * `<rpc>` placeholder if the URL is unparseable.
5
+ */
6
+ export function sanitizeMessage(message, rpcUrl) {
7
+ if (!rpcUrl)
8
+ return message;
9
+ let host;
10
+ try {
11
+ const u = new URL(rpcUrl);
12
+ host = `${u.protocol}//${u.host}`;
13
+ }
14
+ catch {
15
+ return message.replaceAll(rpcUrl, '<rpc>');
16
+ }
17
+ return message.replaceAll(rpcUrl, host);
18
+ }
19
+ /**
20
+ * Build a fresh `Error` from `cause` with a sanitized message and stack,
21
+ * dropping every other property (axios errors carry `.config.headers`
22
+ * `Authorization` and `.config.url`/`baseURL` with API keys). Consumers'
23
+ * structured loggers (pino `err` serializer, `util.inspect({showHidden})`)
24
+ * walk `error.cause`; this ensures the API key never lands in logs.
25
+ * Returns `undefined` for non-Error causes so the ChainError constructor
26
+ * leaves cause unset.
27
+ */
28
+ export function sanitizeCause(cause, rpcUrl) {
29
+ if (!(cause instanceof Error))
30
+ return undefined;
31
+ const safe = new Error(sanitizeMessage(cause.message, rpcUrl));
32
+ safe.name = cause.name;
33
+ if (cause.stack)
34
+ safe.stack = sanitizeMessage(cause.stack, rpcUrl);
35
+ return safe;
36
+ }
37
+ export const ChainErrorKinds = {
38
+ ChainNotSupported: 'chain_not_supported',
39
+ DuplicateToken: 'duplicate_token',
40
+ RpcNotConfigured: 'rpc_not_configured',
41
+ RpcError: 'rpc_error',
42
+ TransactionDecodeFailed: 'transaction_decode_failed',
43
+ InvalidAddress: 'invalid_address',
44
+ InvalidTokenIdentifier: 'invalid_token_identifier',
45
+ InvalidArgument: 'invalid_argument',
46
+ };
47
+ export class ChainError extends Error {
48
+ kind;
49
+ meta;
50
+ constructor(kind, message, meta = {}, cause) {
51
+ super(message, cause === undefined ? undefined : { cause });
52
+ this.name = 'ChainError';
53
+ this.kind = kind;
54
+ this.meta = meta;
55
+ }
56
+ }
57
+ export function isChainError(err, kind) {
58
+ if (!(err instanceof ChainError))
59
+ return false;
60
+ return kind === undefined || err.kind === kind;
61
+ }
62
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,MAAqB;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAqB;IACjE,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE,qBAAqB;IACxC,cAAc,EAAE,iBAAiB;IACjC,gBAAgB,EAAE,oBAAoB;IACtC,QAAQ,EAAE,WAAW;IACrB,uBAAuB,EAAE,2BAA2B;IACpD,cAAc,EAAE,iBAAiB;IACjC,sBAAsB,EAAE,0BAA0B;IAClD,eAAe,EAAE,kBAAkB;CAC3B,CAAC;AAaX,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAiB;IACrB,IAAI,CAAiB;IAE9B,YAAY,IAAoB,EAAE,OAAe,EAAE,OAAuB,EAAE,EAAE,KAAe;QAC3F,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,IAAqB;IAC9D,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AACjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { NetworkType } from '../network_type.ts';
2
+ import { Address } from '../address.ts';
3
+ export declare class EvmAddress extends Address {
4
+ constructor(raw: string);
5
+ canonical(): string;
6
+ toChecksum(): string;
7
+ get networkType(): NetworkType;
8
+ private static normalize;
9
+ private static assertChecksumIfMixedCase;
10
+ }
11
+ //# sourceMappingURL=evm_address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm_address.d.ts","sourceRoot":"","sources":["../../evm/evm_address.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAMxC,qBAAa,UAAW,SAAQ,OAAO;gBACzB,GAAG,EAAE,MAAM;IAKvB,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,MAAM;IAWpB,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,OAAO,CAAC,MAAM,CAAC,SAAS;IAYxB,OAAO,CAAC,MAAM,CAAC,yBAAyB;CAiBzC"}
@@ -0,0 +1,56 @@
1
+ import jsSha3 from 'js-sha3';
2
+ import { NetworkType } from "../network_type.js";
3
+ import { Address } from "../address.js";
4
+ const { keccak_256 } = jsSha3;
5
+ const EVM_ADDRESS_BODY_REGEX = /^[a-fA-F0-9]{40}$/;
6
+ export class EvmAddress extends Address {
7
+ constructor(raw) {
8
+ super(EvmAddress.normalize(raw));
9
+ EvmAddress.assertChecksumIfMixedCase(this.raw);
10
+ }
11
+ canonical() {
12
+ return this.raw.toLowerCase();
13
+ }
14
+ toChecksum() {
15
+ const body = this.canonical().slice(2);
16
+ const hash = keccak_256(body);
17
+ let result = '0x';
18
+ for (let index = 0; index < body.length; index++) {
19
+ const nibble = parseInt(hash[index], 16);
20
+ result += nibble >= 8 ? body[index].toUpperCase() : body[index];
21
+ }
22
+ return result;
23
+ }
24
+ get networkType() {
25
+ return NetworkType.EVM;
26
+ }
27
+ static normalize(raw) {
28
+ if (typeof raw !== 'string') {
29
+ throw new Error(`Invalid EVM address: not a string`);
30
+ }
31
+ const withPrefix = raw.startsWith('0x') || raw.startsWith('0X') ? raw : `0x${raw}`;
32
+ const body = withPrefix.slice(2);
33
+ if (!EVM_ADDRESS_BODY_REGEX.test(body)) {
34
+ throw new Error(`Invalid EVM address: "${raw}"`);
35
+ }
36
+ return `0x${body}`;
37
+ }
38
+ static assertChecksumIfMixedCase(prefixed) {
39
+ const body = prefixed.slice(2);
40
+ const isAllLower = body === body.toLowerCase();
41
+ const isAllUpper = body === body.toUpperCase();
42
+ if (isAllLower || isAllUpper)
43
+ return;
44
+ const hash = keccak_256(body.toLowerCase());
45
+ for (let index = 0; index < body.length; index++) {
46
+ const nibble = parseInt(hash[index], 16);
47
+ const expectedUpper = nibble >= 8;
48
+ const actualIsUpper = body[index] >= 'A' && body[index] <= 'F';
49
+ const actualIsAlpha = actualIsUpper || (body[index] >= 'a' && body[index] <= 'f');
50
+ if (actualIsAlpha && actualIsUpper !== expectedUpper) {
51
+ throw new Error(`Invalid EVM address checksum: "${prefixed}"`);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=evm_address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm_address.js","sourceRoot":"","sources":["../../evm/evm_address.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { JsonRpcProvider, TransactionReceipt } from 'ethers';
2
+ import { Chain, CreateTransferRequest } from '../chain.base.ts';
3
+ import { Priority } from '../priority.ts';
4
+ import { EvmGasEstimate } from './evm_gas_estimate.ts';
5
+ import { NestedBalanceChanges } from '../transaction_status.ts';
6
+ import { EvmTransactionStatus } from './evm_transaction_status.ts';
7
+ import { EvmToken } from './evm_token.ts';
8
+ import { UnsignedEvmTransaction } from './unsigned_evm_transaction.ts';
9
+ export interface EvmChainInit {
10
+ chainId: number;
11
+ name: string;
12
+ blockTimeSeconds: number;
13
+ explorerBaseUrl: string;
14
+ nativeSymbol: string;
15
+ nativeDecimals?: number;
16
+ /**
17
+ * Optional. When set, used verbatim. When omitted, the env-var fallback
18
+ * chain is tried: `<NAME_UPPERCASE_UNDERSCORED>_RPC_URL`
19
+ * (e.g. `ARBITRUM_RPC_URL`), then `EVM_<chainId>_RPC_URL`, then throws.
20
+ */
21
+ rpcUrl?: string;
22
+ supportsEip1559?: boolean;
23
+ /**
24
+ * OP-stack rollups (Optimism/Base/Unichain/WorldChain/Boba/Sonic and
25
+ * similar) charge an additional L1 data fee returned as `l1Fee` on the
26
+ * raw receipt JSON. Ethers v6 strips `l1Fee`/`l1GasUsed`/`l1GasPrice`
27
+ * from its parsed `TransactionReceipt` shape (whitelist-based), so
28
+ * reading it requires a raw `eth_getTransactionReceipt` call. Flag
29
+ * defaults to `false`; enable on chains that carry the L1 fee.
30
+ */
31
+ hasL1Fee?: boolean;
32
+ /**
33
+ * Default gas limit for a native (non-ERC20) transfer. Mirrors Python default 21_000
34
+ * (impl/evm/base.py:479). Scroll overrides to 360_000 etc.
35
+ *
36
+ * **Declarative-only in v0**: stored on the chain instance and readable by
37
+ * consumers, but NOT consumed by `createTransferUnsignedTransaction` yet —
38
+ * gas fields on the returned `UnsignedEvmTransaction` are populated by the
39
+ * caller. Wired into the builder in the follow-up architectural PR (Phase 3
40
+ * of Sinan parity).
41
+ */
42
+ nativeTransferGasLimit?: number;
43
+ /**
44
+ * Multiplier applied to the eth_gasPrice / effective gas price when building
45
+ * a native transfer. Mirrors Python default 1.4 (impl/evm/base.py:480).
46
+ * Scroll overrides to 50.0.
47
+ *
48
+ * **Declarative-only in v0** — see `nativeTransferGasLimit` note above.
49
+ */
50
+ nativeTransferGasMultiplier?: number;
51
+ }
52
+ export declare class EvmChain extends Chain {
53
+ readonly rpcUrl: string | undefined;
54
+ readonly supportsEip1559: boolean;
55
+ readonly hasL1Fee: boolean;
56
+ /**
57
+ * Default gas limit for native transfers. Matches Python's public attribute
58
+ * at `impl/evm/base.py:495` — v0 does not consume it inside the TS SDK
59
+ * (see `createTransferUnsignedTransaction`) but exposes it so consumers
60
+ * building their own transfer paths get identical numbers to Python. Wired
61
+ * into the SDK-owned transfer builder in a follow-up branch.
62
+ */
63
+ readonly nativeTransferGasLimit: number;
64
+ /**
65
+ * Legacy `eth_gasPrice` multiplier for native transfers on non-1559 chains.
66
+ * Matches Python's public attribute at `impl/evm/base.py:496`. Same
67
+ * "declarative for consumers, unused internally in v0" note as
68
+ * `nativeTransferGasLimit`.
69
+ */
70
+ readonly nativeTransferGasMultiplier: number;
71
+ private readonly _nativeToken;
72
+ private _provider;
73
+ private _resolvedRpcUrl;
74
+ constructor(init: EvmChainInit);
75
+ get nativeToken(): EvmToken;
76
+ getErc20Token(symbol: string, contractAddress: string, decimals: number): EvmToken;
77
+ getProvider(): JsonRpcProvider;
78
+ /**
79
+ * Suggest gas fees for a priority tier. Mirrors Python's `_resolve_gas_pricing`
80
+ * dispatch (impl/evm/base.py:807-833):
81
+ *
82
+ * - legacy chains (`supportsEip1559 === false`): scale `eth_gasPrice` by
83
+ * the priority tier's legacy multiplier.
84
+ * - 1559 chains: sample eth_feeHistory across the last 10 blocks at the
85
+ * tier's reward percentile, sort, pick the p90 across blocks. On empty
86
+ * rewards, use 2 gwei. On RPC failure, bubble as `ChainError(RpcError)`
87
+ * (Python bubbles too — no defensive fallback).
88
+ */
89
+ suggestGas(priority: Priority): Promise<EvmGasEstimate>;
90
+ private readRpcUrl;
91
+ private rpcHost;
92
+ getWalletExplorerUrl(address: string): string;
93
+ getTokenExplorerUrl(tokenIdentifier?: string): string;
94
+ getTransactionExplorerUrl(txHash: string): string;
95
+ validateAddress(raw: string): boolean;
96
+ validateTokenIdentifier(raw: string | undefined): boolean;
97
+ getBalance(owner: string, tokenIdentifier?: string): Promise<bigint>;
98
+ createTransferUnsignedTransaction(req: CreateTransferRequest): Promise<UnsignedEvmTransaction>;
99
+ getChainTipHeight(): Promise<number>;
100
+ getTransactionStatus(txHash: string): Promise<EvmTransactionStatus>;
101
+ decodeBalanceChanges(args: {
102
+ from: string;
103
+ to: string | null;
104
+ value: bigint;
105
+ gasCost: bigint;
106
+ receipt: TransactionReceipt;
107
+ }): Promise<NestedBalanceChanges>;
108
+ private resolveErc20TokenDefensive;
109
+ /**
110
+ * STRICT decimals resolver for the transfer builder — throws
111
+ * `ChainError(RpcError)` on any failure to reach the contract.
112
+ * Used exclusively when converting `amountHr: Decimal` →
113
+ * `amountMr: bigint`, where a defensive fallback to `decimals=0`
114
+ * would silently sign a transaction for a wildly wrong amount
115
+ * (e.g. `1.5 USDC` → `1n` minor units instead of `1_500_000n`).
116
+ * The receipt-decoder still uses the defensive variant, since a
117
+ * placeholder token there is a display concern, not a money one.
118
+ */
119
+ private resolveErc20DecimalsStrict;
120
+ private rpcError;
121
+ }
122
+ export declare function decodeRevertData(data: string | undefined): string | undefined;
123
+ //# sourceMappingURL=evm_chain.d.ts.map