crypto-aio 0.0.3 → 0.1.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 (691) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +144 -14
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +326 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +170 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +135 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +79 -0
  82. package/dist/adapters/evm/fees.js +234 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +11 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +60 -0
  88. package/dist/adapters/evm/network.js +131 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +36 -0
  91. package/dist/adapters/evm/plugin.js +102 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +358 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +65 -0
  103. package/dist/adapters/evm/reader.js +292 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +7 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +255 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +23 -0
  115. package/dist/adapters/evm/web3-client.js +159 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +545 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +68 -0
  133. package/dist/adapters/solana/fees.js +205 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/network.d.ts +24 -0
  148. package/dist/adapters/solana/network.js +95 -0
  149. package/dist/adapters/solana/network.js.map +1 -0
  150. package/dist/adapters/solana/plugin.d.ts +18 -0
  151. package/dist/adapters/solana/plugin.js +41 -0
  152. package/dist/adapters/solana/plugin.js.map +1 -0
  153. package/dist/adapters/solana/presets.d.ts +2 -0
  154. package/dist/adapters/solana/presets.js +77 -0
  155. package/dist/adapters/solana/presets.js.map +1 -0
  156. package/dist/adapters/solana/programs.d.ts +44 -0
  157. package/dist/adapters/solana/programs.js +159 -0
  158. package/dist/adapters/solana/programs.js.map +1 -0
  159. package/dist/adapters/solana/proofs.d.ts +56 -0
  160. package/dist/adapters/solana/proofs.js +540 -0
  161. package/dist/adapters/solana/proofs.js.map +1 -0
  162. package/dist/adapters/solana/reader.d.ts +82 -0
  163. package/dist/adapters/solana/reader.js +326 -0
  164. package/dist/adapters/solana/reader.js.map +1 -0
  165. package/dist/adapters/solana/rpc.d.ts +102 -0
  166. package/dist/adapters/solana/rpc.js +301 -0
  167. package/dist/adapters/solana/rpc.js.map +1 -0
  168. package/dist/adapters/solana/tokens.d.ts +7 -0
  169. package/dist/adapters/solana/tokens.js +19 -0
  170. package/dist/adapters/solana/tokens.js.map +1 -0
  171. package/dist/adapters/solana/types.d.ts +121 -0
  172. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  173. package/dist/adapters/solana/types.js.map +1 -0
  174. package/dist/adapters/solana/web3.d.ts +5 -0
  175. package/dist/adapters/solana/web3.js +83 -0
  176. package/dist/adapters/solana/web3.js.map +1 -0
  177. package/dist/adapters/solana/wire.d.ts +62 -0
  178. package/dist/adapters/solana/wire.js +168 -0
  179. package/dist/adapters/solana/wire.js.map +1 -0
  180. package/dist/adapters/ton/address.d.ts +43 -0
  181. package/dist/adapters/ton/address.js +168 -0
  182. package/dist/adapters/ton/address.js.map +1 -0
  183. package/dist/adapters/ton/api.d.ts +344 -0
  184. package/dist/adapters/ton/api.js +942 -0
  185. package/dist/adapters/ton/api.js.map +1 -0
  186. package/dist/adapters/ton/builder.d.ts +18 -0
  187. package/dist/adapters/ton/builder.js +701 -0
  188. package/dist/adapters/ton/builder.js.map +1 -0
  189. package/dist/adapters/ton/chains.d.ts +16 -0
  190. package/dist/adapters/ton/chains.js +39 -0
  191. package/dist/adapters/ton/chains.js.map +1 -0
  192. package/dist/adapters/ton/decode.d.ts +43 -0
  193. package/dist/adapters/ton/decode.js +219 -0
  194. package/dist/adapters/ton/decode.js.map +1 -0
  195. package/dist/adapters/ton/driver.d.ts +10 -0
  196. package/dist/adapters/ton/driver.js +117 -0
  197. package/dist/adapters/ton/driver.js.map +1 -0
  198. package/dist/adapters/ton/errors.d.ts +36 -0
  199. package/dist/adapters/ton/errors.js +89 -0
  200. package/dist/adapters/ton/errors.js.map +1 -0
  201. package/dist/adapters/ton/fees.d.ts +28 -0
  202. package/dist/adapters/ton/fees.js +121 -0
  203. package/dist/adapters/ton/fees.js.map +1 -0
  204. package/dist/adapters/ton/index.d.ts +16 -0
  205. package/dist/adapters/ton/index.js +9 -0
  206. package/dist/adapters/ton/index.js.map +1 -0
  207. package/dist/adapters/ton/messages.d.ts +157 -0
  208. package/dist/adapters/ton/messages.js +397 -0
  209. package/dist/adapters/ton/messages.js.map +1 -0
  210. package/dist/adapters/ton/native-client.d.ts +10 -0
  211. package/dist/adapters/ton/native-client.js +47 -0
  212. package/dist/adapters/ton/native-client.js.map +1 -0
  213. package/dist/adapters/ton/network.d.ts +58 -0
  214. package/dist/adapters/ton/network.js +207 -0
  215. package/dist/adapters/ton/network.js.map +1 -0
  216. package/dist/adapters/ton/plugin.d.ts +24 -0
  217. package/dist/adapters/ton/plugin.js +57 -0
  218. package/dist/adapters/ton/plugin.js.map +1 -0
  219. package/dist/adapters/ton/presets.d.ts +6 -0
  220. package/dist/adapters/ton/presets.js +94 -0
  221. package/dist/adapters/ton/presets.js.map +1 -0
  222. package/dist/adapters/ton/proofs.d.ts +66 -0
  223. package/dist/adapters/ton/proofs.js +813 -0
  224. package/dist/adapters/ton/proofs.js.map +1 -0
  225. package/dist/adapters/ton/reader.d.ts +194 -0
  226. package/dist/adapters/ton/reader.js +781 -0
  227. package/dist/adapters/ton/reader.js.map +1 -0
  228. package/dist/adapters/ton/tokens.d.ts +10 -0
  229. package/dist/adapters/ton/tokens.js +27 -0
  230. package/dist/adapters/ton/tokens.js.map +1 -0
  231. package/dist/adapters/ton/trace.d.ts +48 -0
  232. package/dist/adapters/ton/trace.js +277 -0
  233. package/dist/adapters/ton/trace.js.map +1 -0
  234. package/dist/adapters/ton/types.d.ts +105 -0
  235. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  236. package/dist/adapters/ton/types.js.map +1 -0
  237. package/dist/adapters/ton/wallets.d.ts +86 -0
  238. package/dist/adapters/ton/wallets.js +373 -0
  239. package/dist/adapters/ton/wallets.js.map +1 -0
  240. package/dist/adapters/tron/abi.d.ts +39 -0
  241. package/dist/adapters/tron/abi.js +110 -0
  242. package/dist/adapters/tron/abi.js.map +1 -0
  243. package/dist/adapters/tron/address.d.ts +20 -0
  244. package/dist/adapters/tron/address.js +110 -0
  245. package/dist/adapters/tron/address.js.map +1 -0
  246. package/dist/adapters/tron/builder.d.ts +12 -0
  247. package/dist/adapters/tron/builder.js +553 -0
  248. package/dist/adapters/tron/builder.js.map +1 -0
  249. package/dist/adapters/tron/chains.d.ts +12 -0
  250. package/dist/adapters/tron/chains.js +35 -0
  251. package/dist/adapters/tron/chains.js.map +1 -0
  252. package/dist/adapters/tron/codec.d.ts +10 -0
  253. package/dist/adapters/tron/codec.js +322 -0
  254. package/dist/adapters/tron/codec.js.map +1 -0
  255. package/dist/adapters/tron/decode.d.ts +50 -0
  256. package/dist/adapters/tron/decode.js +280 -0
  257. package/dist/adapters/tron/decode.js.map +1 -0
  258. package/dist/adapters/tron/driver.d.ts +12 -0
  259. package/dist/adapters/tron/driver.js +106 -0
  260. package/dist/adapters/tron/driver.js.map +1 -0
  261. package/dist/adapters/tron/errors.d.ts +74 -0
  262. package/dist/adapters/tron/errors.js +261 -0
  263. package/dist/adapters/tron/errors.js.map +1 -0
  264. package/dist/adapters/tron/fees.d.ts +49 -0
  265. package/dist/adapters/tron/fees.js +166 -0
  266. package/dist/adapters/tron/fees.js.map +1 -0
  267. package/dist/adapters/tron/http.d.ts +173 -0
  268. package/dist/adapters/tron/http.js +729 -0
  269. package/dist/adapters/tron/http.js.map +1 -0
  270. package/dist/adapters/tron/index.d.ts +16 -0
  271. package/dist/adapters/tron/index.js +15 -0
  272. package/dist/adapters/tron/index.js.map +1 -0
  273. package/dist/adapters/tron/network.d.ts +44 -0
  274. package/dist/adapters/tron/network.js +163 -0
  275. package/dist/adapters/tron/network.js.map +1 -0
  276. package/dist/adapters/tron/plugin.d.ts +17 -0
  277. package/dist/adapters/tron/plugin.js +39 -0
  278. package/dist/adapters/tron/plugin.js.map +1 -0
  279. package/dist/adapters/tron/presets.d.ts +5 -0
  280. package/dist/adapters/tron/presets.js +68 -0
  281. package/dist/adapters/tron/presets.js.map +1 -0
  282. package/dist/adapters/tron/proofs.d.ts +80 -0
  283. package/dist/adapters/tron/proofs.js +370 -0
  284. package/dist/adapters/tron/proofs.js.map +1 -0
  285. package/dist/adapters/tron/protobuf.d.ts +36 -0
  286. package/dist/adapters/tron/protobuf.js +90 -0
  287. package/dist/adapters/tron/protobuf.js.map +1 -0
  288. package/dist/adapters/tron/reader.d.ts +47 -0
  289. package/dist/adapters/tron/reader.js +203 -0
  290. package/dist/adapters/tron/reader.js.map +1 -0
  291. package/dist/adapters/tron/tokens.d.ts +7 -0
  292. package/dist/adapters/tron/tokens.js +14 -0
  293. package/dist/adapters/tron/tokens.js.map +1 -0
  294. package/dist/adapters/tron/types.d.ts +166 -0
  295. package/dist/adapters/tron/types.js +3 -0
  296. package/dist/adapters/tron/types.js.map +1 -0
  297. package/dist/adapters/utxo/address.d.ts +51 -0
  298. package/dist/adapters/utxo/address.js +341 -0
  299. package/dist/adapters/utxo/address.js.map +1 -0
  300. package/dist/adapters/utxo/builder.d.ts +35 -0
  301. package/dist/adapters/utxo/builder.js +380 -0
  302. package/dist/adapters/utxo/builder.js.map +1 -0
  303. package/dist/adapters/utxo/chains.d.ts +17 -0
  304. package/dist/adapters/utxo/chains.js +99 -0
  305. package/dist/adapters/utxo/chains.js.map +1 -0
  306. package/dist/adapters/utxo/codec.d.ts +120 -0
  307. package/dist/adapters/utxo/codec.js +408 -0
  308. package/dist/adapters/utxo/codec.js.map +1 -0
  309. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  310. package/dist/adapters/utxo/coinselect.js +131 -0
  311. package/dist/adapters/utxo/coinselect.js.map +1 -0
  312. package/dist/adapters/utxo/context.d.ts +57 -0
  313. package/dist/adapters/utxo/context.js +118 -0
  314. package/dist/adapters/utxo/context.js.map +1 -0
  315. package/dist/adapters/utxo/decode.d.ts +14 -0
  316. package/dist/adapters/utxo/decode.js +85 -0
  317. package/dist/adapters/utxo/decode.js.map +1 -0
  318. package/dist/adapters/utxo/driver.d.ts +16 -0
  319. package/dist/adapters/utxo/driver.js +74 -0
  320. package/dist/adapters/utxo/driver.js.map +1 -0
  321. package/dist/adapters/utxo/ecc.d.ts +9 -0
  322. package/dist/adapters/utxo/ecc.js +26 -0
  323. package/dist/adapters/utxo/ecc.js.map +1 -0
  324. package/dist/adapters/utxo/errors.d.ts +52 -0
  325. package/dist/adapters/utxo/errors.js +191 -0
  326. package/dist/adapters/utxo/errors.js.map +1 -0
  327. package/dist/adapters/utxo/esplora.d.ts +79 -0
  328. package/dist/adapters/utxo/esplora.js +451 -0
  329. package/dist/adapters/utxo/esplora.js.map +1 -0
  330. package/dist/adapters/utxo/fees.d.ts +41 -0
  331. package/dist/adapters/utxo/fees.js +125 -0
  332. package/dist/adapters/utxo/fees.js.map +1 -0
  333. package/dist/adapters/utxo/index.d.ts +17 -0
  334. package/dist/adapters/utxo/index.js +8 -0
  335. package/dist/adapters/utxo/index.js.map +1 -0
  336. package/dist/adapters/utxo/network.d.ts +50 -0
  337. package/dist/adapters/utxo/network.js +165 -0
  338. package/dist/adapters/utxo/network.js.map +1 -0
  339. package/dist/adapters/utxo/plugin.d.ts +17 -0
  340. package/dist/adapters/utxo/plugin.js +41 -0
  341. package/dist/adapters/utxo/plugin.js.map +1 -0
  342. package/dist/adapters/utxo/presets.d.ts +12 -0
  343. package/dist/adapters/utxo/presets.js +47 -0
  344. package/dist/adapters/utxo/presets.js.map +1 -0
  345. package/dist/adapters/utxo/preview.d.ts +3 -0
  346. package/dist/adapters/utxo/preview.js +65 -0
  347. package/dist/adapters/utxo/preview.js.map +1 -0
  348. package/dist/adapters/utxo/proofs.d.ts +57 -0
  349. package/dist/adapters/utxo/proofs.js +331 -0
  350. package/dist/adapters/utxo/proofs.js.map +1 -0
  351. package/dist/adapters/utxo/rawtx.d.ts +59 -0
  352. package/dist/adapters/utxo/rawtx.js +234 -0
  353. package/dist/adapters/utxo/rawtx.js.map +1 -0
  354. package/dist/adapters/utxo/reader.d.ts +36 -0
  355. package/dist/adapters/utxo/reader.js +265 -0
  356. package/dist/adapters/utxo/reader.js.map +1 -0
  357. package/dist/adapters/utxo/sdk.d.ts +18 -0
  358. package/dist/adapters/utxo/sdk.js +17 -0
  359. package/dist/adapters/utxo/sdk.js.map +1 -0
  360. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  361. package/dist/adapters/utxo/signed-psbt.js +428 -0
  362. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  363. package/dist/adapters/utxo/spend.d.ts +59 -0
  364. package/dist/adapters/utxo/spend.js +230 -0
  365. package/dist/adapters/utxo/spend.js.map +1 -0
  366. package/dist/adapters/utxo/types.d.ts +167 -0
  367. package/dist/adapters/utxo/types.js +3 -0
  368. package/dist/adapters/utxo/types.js.map +1 -0
  369. package/dist/core/assets/service.d.ts +18 -0
  370. package/dist/core/assets/service.js +69 -0
  371. package/dist/core/assets/service.js.map +1 -0
  372. package/dist/core/blockchain/default-ref.d.ts +4 -0
  373. package/dist/core/blockchain/default-ref.js +16 -0
  374. package/dist/core/blockchain/default-ref.js.map +1 -0
  375. package/dist/core/blockchain/handle.d.ts +200 -0
  376. package/dist/core/blockchain/handle.js +579 -0
  377. package/dist/core/blockchain/handle.js.map +1 -0
  378. package/dist/core/blockchain/internal.d.ts +19 -0
  379. package/dist/core/blockchain/internal.js +16 -0
  380. package/dist/core/blockchain/internal.js.map +1 -0
  381. package/dist/core/blockchain/mapping.d.ts +22 -0
  382. package/dist/core/blockchain/mapping.js +136 -0
  383. package/dist/core/blockchain/mapping.js.map +1 -0
  384. package/dist/core/config/env.d.ts +8 -0
  385. package/dist/core/config/env.js +60 -0
  386. package/dist/core/config/env.js.map +1 -0
  387. package/dist/core/config/merge.d.ts +26 -0
  388. package/dist/core/config/merge.js +144 -0
  389. package/dist/core/config/merge.js.map +1 -0
  390. package/dist/core/config/resolve.d.ts +12 -0
  391. package/dist/core/config/resolve.js +251 -0
  392. package/dist/core/config/resolve.js.map +1 -0
  393. package/dist/core/config/types.d.ts +165 -0
  394. package/dist/core/config/types.js +3 -0
  395. package/dist/core/config/types.js.map +1 -0
  396. package/dist/core/container/builtins.d.ts +4 -0
  397. package/dist/core/container/builtins.js +13 -0
  398. package/dist/core/container/builtins.js.map +1 -0
  399. package/dist/core/container/container.d.ts +69 -0
  400. package/dist/core/container/container.js +466 -0
  401. package/dist/core/container/container.js.map +1 -0
  402. package/dist/core/container/default.d.ts +15 -0
  403. package/dist/core/container/default.js +70 -0
  404. package/dist/core/container/default.js.map +1 -0
  405. package/dist/core/container/internals.d.ts +54 -0
  406. package/dist/core/container/internals.js +21 -0
  407. package/dist/core/container/internals.js.map +1 -0
  408. package/dist/core/container/pool.d.ts +27 -0
  409. package/dist/core/container/pool.js +77 -0
  410. package/dist/core/container/pool.js.map +1 -0
  411. package/dist/core/driver/types.d.ts +346 -0
  412. package/dist/core/driver/types.js +3 -0
  413. package/dist/core/driver/types.js.map +1 -0
  414. package/dist/core/errors/codes.d.ts +153 -0
  415. package/dist/core/errors/codes.js +49 -0
  416. package/dist/core/errors/codes.js.map +1 -0
  417. package/dist/core/errors/error.d.ts +66 -0
  418. package/dist/core/errors/error.js +129 -0
  419. package/dist/core/errors/error.js.map +1 -0
  420. package/dist/core/events/bus.d.ts +12 -0
  421. package/dist/core/events/bus.js +46 -0
  422. package/dist/core/events/bus.js.map +1 -0
  423. package/dist/core/events/logger.d.ts +13 -0
  424. package/dist/core/events/logger.js +42 -0
  425. package/dist/core/events/logger.js.map +1 -0
  426. package/dist/core/events/types.d.ts +131 -0
  427. package/dist/core/events/types.js +3 -0
  428. package/dist/core/events/types.js.map +1 -0
  429. package/dist/core/lifecycle/engine-rules.d.ts +107 -0
  430. package/dist/core/lifecycle/engine-rules.js +257 -0
  431. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  432. package/dist/core/lifecycle/engine.d.ts +500 -0
  433. package/dist/core/lifecycle/engine.js +1732 -0
  434. package/dist/core/lifecycle/engine.js.map +1 -0
  435. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  436. package/dist/core/lifecycle/evaluate.js +72 -0
  437. package/dist/core/lifecycle/evaluate.js.map +1 -0
  438. package/dist/core/lifecycle/intent.d.ts +11 -0
  439. package/dist/core/lifecycle/intent.js +88 -0
  440. package/dist/core/lifecycle/intent.js.map +1 -0
  441. package/dist/core/lifecycle/monitor.d.ts +138 -0
  442. package/dist/core/lifecycle/monitor.js +606 -0
  443. package/dist/core/lifecycle/monitor.js.map +1 -0
  444. package/dist/core/lifecycle/observations.d.ts +17 -0
  445. package/dist/core/lifecycle/observations.js +59 -0
  446. package/dist/core/lifecycle/observations.js.map +1 -0
  447. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  448. package/dist/core/lifecycle/reconcile.js +112 -0
  449. package/dist/core/lifecycle/reconcile.js.map +1 -0
  450. package/dist/core/lifecycle/views.d.ts +49 -0
  451. package/dist/core/lifecycle/views.js +57 -0
  452. package/dist/core/lifecycle/views.js.map +1 -0
  453. package/dist/core/lifecycle/workers.d.ts +82 -0
  454. package/dist/core/lifecycle/workers.js +329 -0
  455. package/dist/core/lifecycle/workers.js.map +1 -0
  456. package/dist/core/model/address.d.ts +32 -0
  457. package/dist/core/model/address.js +43 -0
  458. package/dist/core/model/address.js.map +1 -0
  459. package/dist/core/model/amount.d.ts +25 -0
  460. package/dist/core/model/amount.js +102 -0
  461. package/dist/core/model/amount.js.map +1 -0
  462. package/dist/core/model/asset.d.ts +28 -0
  463. package/dist/core/model/asset.js +47 -0
  464. package/dist/core/model/asset.js.map +1 -0
  465. package/dist/core/model/capability.d.ts +3 -0
  466. package/dist/core/model/capability.js +18 -0
  467. package/dist/core/model/capability.js.map +1 -0
  468. package/dist/core/model/chain.d.ts +63 -0
  469. package/dist/core/model/chain.js +8 -0
  470. package/dist/core/model/chain.js.map +1 -0
  471. package/dist/core/model/fee.d.ts +36 -0
  472. package/dist/core/model/fee.js +17 -0
  473. package/dist/core/model/fee.js.map +1 -0
  474. package/dist/core/model/ids.d.ts +37 -0
  475. package/dist/core/model/ids.js +13 -0
  476. package/dist/core/model/ids.js.map +1 -0
  477. package/dist/core/model/intent.d.ts +63 -0
  478. package/dist/core/model/intent.js +81 -0
  479. package/dist/core/model/intent.js.map +1 -0
  480. package/dist/core/model/ordering.d.ts +20 -0
  481. package/dist/core/model/ordering.js +29 -0
  482. package/dist/core/model/ordering.js.map +1 -0
  483. package/dist/core/model/transaction.d.ts +116 -0
  484. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  485. package/dist/core/model/transaction.js.map +1 -0
  486. package/dist/core/observe/scanner.d.ts +135 -0
  487. package/dist/core/observe/scanner.js +355 -0
  488. package/dist/core/observe/scanner.js.map +1 -0
  489. package/dist/core/ordering/reservations.d.ts +16 -0
  490. package/dist/core/ordering/reservations.js +53 -0
  491. package/dist/core/ordering/reservations.js.map +1 -0
  492. package/dist/core/ordering/sequence.d.ts +61 -0
  493. package/dist/core/ordering/sequence.js +155 -0
  494. package/dist/core/ordering/sequence.js.map +1 -0
  495. package/dist/core/registry/adapters.d.ts +10 -0
  496. package/dist/core/registry/adapters.js +56 -0
  497. package/dist/core/registry/adapters.js.map +1 -0
  498. package/dist/core/registry/assets.d.ts +18 -0
  499. package/dist/core/registry/assets.js +90 -0
  500. package/dist/core/registry/assets.js.map +1 -0
  501. package/dist/core/registry/chains.d.ts +10 -0
  502. package/dist/core/registry/chains.js +80 -0
  503. package/dist/core/registry/chains.js.map +1 -0
  504. package/dist/core/registry/plugin.d.ts +41 -0
  505. package/dist/core/registry/plugin.js +109 -0
  506. package/dist/core/registry/plugin.js.map +1 -0
  507. package/dist/core/registry/providers.d.ts +31 -0
  508. package/dist/core/registry/providers.js +43 -0
  509. package/dist/core/registry/providers.js.map +1 -0
  510. package/dist/core/registry/schemes.d.ts +30 -0
  511. package/dist/core/registry/schemes.js +84 -0
  512. package/dist/core/registry/schemes.js.map +1 -0
  513. package/dist/core/secret/fragments.d.ts +33 -0
  514. package/dist/core/secret/fragments.js +110 -0
  515. package/dist/core/secret/fragments.js.map +1 -0
  516. package/dist/core/secret/redact.d.ts +10 -0
  517. package/dist/core/secret/redact.js +110 -0
  518. package/dist/core/secret/redact.js.map +1 -0
  519. package/dist/core/secret/secret.d.ts +14 -0
  520. package/dist/core/secret/secret.js +42 -0
  521. package/dist/core/secret/secret.js.map +1 -0
  522. package/dist/core/signing/callback.d.ts +10 -0
  523. package/dist/core/signing/callback.js +22 -0
  524. package/dist/core/signing/callback.js.map +1 -0
  525. package/dist/core/signing/guard.d.ts +18 -0
  526. package/dist/core/signing/guard.js +72 -0
  527. package/dist/core/signing/guard.js.map +1 -0
  528. package/dist/core/signing/hd.d.ts +36 -0
  529. package/dist/core/signing/hd.js +167 -0
  530. package/dist/core/signing/hd.js.map +1 -0
  531. package/dist/core/signing/local.d.ts +48 -0
  532. package/dist/core/signing/local.js +190 -0
  533. package/dist/core/signing/local.js.map +1 -0
  534. package/dist/core/signing/orchestrator.d.ts +40 -0
  535. package/dist/core/signing/orchestrator.js +300 -0
  536. package/dist/core/signing/orchestrator.js.map +1 -0
  537. package/dist/core/signing/types.d.ts +64 -0
  538. package/dist/core/signing/types.js +3 -0
  539. package/dist/core/signing/types.js.map +1 -0
  540. package/dist/core/signing/wallet.d.ts +48 -0
  541. package/dist/core/signing/wallet.js +153 -0
  542. package/dist/core/signing/wallet.js.map +1 -0
  543. package/dist/core/store/clone.d.ts +25 -0
  544. package/dist/core/store/clone.js +71 -0
  545. package/dist/core/store/clone.js.map +1 -0
  546. package/dist/core/store/memory.d.ts +38 -0
  547. package/dist/core/store/memory.js +325 -0
  548. package/dist/core/store/memory.js.map +1 -0
  549. package/dist/core/store/types.d.ts +246 -0
  550. package/dist/core/store/types.js +117 -0
  551. package/dist/core/store/types.js.map +1 -0
  552. package/dist/core/transport/backoff.d.ts +8 -0
  553. package/dist/core/transport/backoff.js +27 -0
  554. package/dist/core/transport/backoff.js.map +1 -0
  555. package/dist/core/transport/circuit.d.ts +25 -0
  556. package/dist/core/transport/circuit.js +61 -0
  557. package/dist/core/transport/circuit.js.map +1 -0
  558. package/dist/core/transport/http-transport.d.ts +30 -0
  559. package/dist/core/transport/http-transport.js +1695 -0
  560. package/dist/core/transport/http-transport.js.map +1 -0
  561. package/dist/core/transport/rate-limit.d.ts +27 -0
  562. package/dist/core/transport/rate-limit.js +78 -0
  563. package/dist/core/transport/rate-limit.js.map +1 -0
  564. package/dist/core/transport/stale-view.d.ts +11 -0
  565. package/dist/core/transport/stale-view.js +17 -0
  566. package/dist/core/transport/stale-view.js.map +1 -0
  567. package/dist/core/transport/types.d.ts +144 -0
  568. package/dist/core/transport/types.js +6 -0
  569. package/dist/core/transport/types.js.map +1 -0
  570. package/dist/core/util/bytes.d.ts +9 -0
  571. package/dist/core/util/bytes.js +40 -0
  572. package/dist/core/util/bytes.js.map +1 -0
  573. package/dist/core/util/clock.d.ts +6 -0
  574. package/dist/core/util/clock.js +26 -0
  575. package/dist/core/util/clock.js.map +1 -0
  576. package/dist/core/util/freeze.d.ts +8 -0
  577. package/dist/core/util/freeze.js +31 -0
  578. package/dist/core/util/freeze.js.map +1 -0
  579. package/dist/core/util/json.d.ts +29 -0
  580. package/dist/core/util/json.js +165 -0
  581. package/dist/core/util/json.js.map +1 -0
  582. package/dist/core/util/names.d.ts +21 -0
  583. package/dist/core/util/names.js +46 -0
  584. package/dist/core/util/names.js.map +1 -0
  585. package/dist/index.d.ts +64 -14
  586. package/dist/index.js +105 -49
  587. package/dist/index.js.map +1 -1
  588. package/dist/native.d.ts +21 -0
  589. package/dist/native.js +44 -0
  590. package/dist/native.js.map +1 -0
  591. package/dist/testing/contracts/api.d.ts +12 -0
  592. package/dist/testing/contracts/api.js +58 -0
  593. package/dist/testing/contracts/api.js.map +1 -0
  594. package/dist/testing/contracts/cursors.d.ts +6 -0
  595. package/dist/testing/contracts/cursors.js +43 -0
  596. package/dist/testing/contracts/cursors.js.map +1 -0
  597. package/dist/testing/contracts/locks.d.ts +10 -0
  598. package/dist/testing/contracts/locks.js +63 -0
  599. package/dist/testing/contracts/locks.js.map +1 -0
  600. package/dist/testing/contracts/operations.d.ts +21 -0
  601. package/dist/testing/contracts/operations.js +718 -0
  602. package/dist/testing/contracts/operations.js.map +1 -0
  603. package/dist/testing/contracts/sequences.d.ts +6 -0
  604. package/dist/testing/contracts/sequences.js +68 -0
  605. package/dist/testing/contracts/sequences.js.map +1 -0
  606. package/dist/testing/env.d.ts +63 -0
  607. package/dist/testing/env.js +105 -0
  608. package/dist/testing/env.js.map +1 -0
  609. package/dist/testing/fake-chain.d.ts +118 -0
  610. package/dist/testing/fake-chain.js +536 -0
  611. package/dist/testing/fake-chain.js.map +1 -0
  612. package/dist/testing/fake-clock.d.ts +15 -0
  613. package/dist/testing/fake-clock.js +86 -0
  614. package/dist/testing/fake-clock.js.map +1 -0
  615. package/dist/testing/fake-driver.d.ts +15 -0
  616. package/dist/testing/fake-driver.js +458 -0
  617. package/dist/testing/fake-driver.js.map +1 -0
  618. package/dist/testing/fake-fetch.d.ts +32 -0
  619. package/dist/testing/fake-fetch.js +81 -0
  620. package/dist/testing/fake-fetch.js.map +1 -0
  621. package/dist/testing/fake-plugin.d.ts +30 -0
  622. package/dist/testing/fake-plugin.js +66 -0
  623. package/dist/testing/fake-plugin.js.map +1 -0
  624. package/dist/testing/faulty-store.d.ts +36 -0
  625. package/dist/testing/faulty-store.js +66 -0
  626. package/dist/testing/faulty-store.js.map +1 -0
  627. package/dist/testing/generation.d.ts +60 -0
  628. package/dist/testing/generation.js +252 -0
  629. package/dist/testing/generation.js.map +1 -0
  630. package/dist/testing/index.d.ts +28 -0
  631. package/dist/testing/index.js +51 -0
  632. package/dist/testing/index.js.map +1 -0
  633. package/package.json +188 -45
  634. package/dist/libs/eth/account.d.ts +0 -9
  635. package/dist/libs/eth/account.js +0 -58
  636. package/dist/libs/eth/account.js.map +0 -1
  637. package/dist/libs/eth/contract.d.ts +0 -7
  638. package/dist/libs/eth/contract.js +0 -42
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -24
  641. package/dist/libs/eth/index.js +0 -72
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -7
  644. package/dist/libs/eth/transact.js +0 -26
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -2
  647. package/dist/libs/index.js +0 -19
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/libs/trx/account.d.ts +0 -9
  650. package/dist/libs/trx/account.js +0 -55
  651. package/dist/libs/trx/account.js.map +0 -1
  652. package/dist/libs/trx/contract.d.ts +0 -7
  653. package/dist/libs/trx/contract.js +0 -27
  654. package/dist/libs/trx/contract.js.map +0 -1
  655. package/dist/libs/trx/index.d.ts +0 -22
  656. package/dist/libs/trx/index.js +0 -64
  657. package/dist/libs/trx/index.js.map +0 -1
  658. package/dist/libs/trx/transact.d.ts +0 -7
  659. package/dist/libs/trx/transact.js +0 -26
  660. package/dist/libs/trx/transact.js.map +0 -1
  661. package/dist/tool/common.d.ts +0 -28
  662. package/dist/tool/common.js +0 -33
  663. package/dist/tool/common.js.map +0 -1
  664. package/dist/tool/eth-tools.d.ts +0 -3
  665. package/dist/tool/eth-tools.js +0 -33
  666. package/dist/tool/eth-tools.js.map +0 -1
  667. package/dist/tool/index.d.ts +0 -5
  668. package/dist/tool/index.js +0 -22
  669. package/dist/tool/index.js.map +0 -1
  670. package/dist/tool/logging.d.ts +0 -3
  671. package/dist/tool/logging.js +0 -11
  672. package/dist/tool/logging.js.map +0 -1
  673. package/dist/tool/options.d.ts +0 -6
  674. package/dist/tool/options.js +0 -41
  675. package/dist/tool/options.js.map +0 -1
  676. package/dist/tool/trx-tools.d.ts +0 -3
  677. package/dist/tool/trx-tools.js +0 -20
  678. package/dist/tool/trx-tools.js.map +0 -1
  679. package/dist/type/account.d.ts +0 -9
  680. package/dist/type/account.js.map +0 -1
  681. package/dist/type/common.d.ts +0 -18
  682. package/dist/type/common.js.map +0 -1
  683. package/dist/type/contract.d.ts +0 -10
  684. package/dist/type/contract.js.map +0 -1
  685. package/dist/type/index.d.ts +0 -5
  686. package/dist/type/index.js +0 -22
  687. package/dist/type/index.js.map +0 -1
  688. package/dist/type/lib-types.d.ts +0 -9
  689. package/dist/type/lib-types.js.map +0 -1
  690. package/dist/type/transact.d.ts +0 -7
  691. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_INPUTS = exports.MAX_OUTPUTS = void 0;
4
+ exports.avalancheBuilder = avalancheBuilder;
5
+ exports.avalancheBroadcaster = avalancheBroadcaster;
6
+ /**
7
+ * The Avalanche builder and broadcaster (a UTXO chain: the `inputs` ordering).
8
+ * - `build` spends only plain, unlocked AVAX outputs the wallet signs alone and that no
9
+ * other live Operation holds (`ctx.excludeInputs`), largest first; change goes back to
10
+ * the sending address; the spent outputs are the `inputs` ordering. The fee is `exact`
11
+ * once built, and never above `options.maxFee`.
12
+ * - One signing request: the SHA-256 of the unsigned bytes, signed with the wallet's
13
+ * secp256k1 key; every input's credential carries that signature. The id is known only
14
+ * after signing (it hashes the credentials).
15
+ * - There is no replacement or cancel: AvalancheGo's mempool keeps the first of two
16
+ * conflicting transactions, and an accepted one is final.
17
+ * - Broadcast answers are classified by `errors.ts`; an ambiguous transport failure is
18
+ * rethrown unclassified: the bytes may have reached a node, so the core monitors the
19
+ * broadcast as possibly sent.
20
+ */
21
+ const sha256_1 = require("@noble/hashes/sha256");
22
+ const error_1 = require("../../core/errors/error");
23
+ const asset_1 = require("../../core/model/asset");
24
+ const bytes_1 = require("../../core/util/bytes");
25
+ const address_1 = require("./address");
26
+ const codec_1 = require("./codec");
27
+ const errors_1 = require("./errors");
28
+ const fees_1 = require("./fees");
29
+ const reader_1 = require("./reader");
30
+ const sdk_1 = require("./sdk");
31
+ /** At most this many outputs per transfer (and one more for change). */
32
+ exports.MAX_OUTPUTS = 127;
33
+ /** At most this many inputs: well inside 64 KiB and the P-Chain's gas capacity. */
34
+ exports.MAX_INPUTS = 128;
35
+ const REQUEST_ID = 'tx';
36
+ const speedOf = (fee) => typeof fee === 'string' ? fee : 'custom';
37
+ const sumOf = (values) => values.reduce((s, v) => s + v, 0n);
38
+ function draft(from, speed, fee, details, bound) {
39
+ return {
40
+ kind: 'avalanche',
41
+ speed,
42
+ charges: [{ asset: 'native', amount: fee, label: 'network' }],
43
+ bound,
44
+ payer: from,
45
+ details: { ...details },
46
+ };
47
+ }
48
+ function detailsOf(plan, built) {
49
+ return plan.model === 'static'
50
+ ? {
51
+ model: 'static',
52
+ txFee: plan.txFee,
53
+ inputs: built.inputs.length,
54
+ outputs: built.outputs,
55
+ change: built.change,
56
+ }
57
+ : {
58
+ model: 'dynamic',
59
+ gasPrice: plan.price,
60
+ ...(built.gas !== undefined ? { gas: built.gas } : {}),
61
+ inputs: built.inputs.length,
62
+ outputs: built.outputs,
63
+ change: built.change,
64
+ };
65
+ }
66
+ /** The wallet's key, which must own the sending address: nothing is built for others. */
67
+ function keyOf(from, keys) {
68
+ const key = keys.find((k) => k.scheme === 'secp256k1-ecdsa');
69
+ if (!key) {
70
+ throw new error_1.ValidationError('INVALID_INTENT', 'building an Avalanche transaction needs the wallet public key');
71
+ }
72
+ if (!(0, bytes_1.equalBytes)((0, address_1.addressBytesOf)(key.publicKey), from)) {
73
+ throw new error_1.ValidationError('INVALID_INTENT', "the wallet's key does not own the sending address");
74
+ }
75
+ return key;
76
+ }
77
+ /** The intent's memo as bytes; only the X-Chain carries one (Durango refuses it on P). */
78
+ function memoOf(ctx, memo) {
79
+ if (memo === undefined)
80
+ return new Uint8Array();
81
+ if (ctx.config.vm === 'pvm' || !ctx.config.capabilities.has('memo')) {
82
+ throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', 'P-Chain transactions carry no memo');
83
+ }
84
+ const bytes = (0, bytes_1.utf8ToBytes)(memo);
85
+ if (bytes.length > codec_1.MAX_MEMO_BYTES) {
86
+ throw new error_1.ValidationError('INVALID_INTENT', 'a memo has at most 256 bytes');
87
+ }
88
+ return bytes;
89
+ }
90
+ function plannedOutputs(ctx, outputs) {
91
+ if (outputs.length === 0) {
92
+ throw new error_1.ValidationError('INVALID_INTENT', 'at least one output is required');
93
+ }
94
+ if (outputs.length > exports.MAX_OUTPUTS) {
95
+ throw new error_1.ValidationError('INVALID_INTENT', `a transfer pays at most ${exports.MAX_OUTPUTS} outputs`);
96
+ }
97
+ return outputs.map((output) => {
98
+ if (output.amount < 1n) {
99
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'an output must pay at least 1 nAVAX');
100
+ }
101
+ return { to: (0, address_1.decodeAddress)(output.to, ctx.config), amount: output.amount };
102
+ });
103
+ }
104
+ function avalancheBuilder(ctx) {
105
+ const { config, clock } = ctx;
106
+ const native = (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, 'native');
107
+ const feeCache = {};
108
+ const model = config.vm === 'avm' ? 'static' : 'dynamic';
109
+ const plan = async (intent, build) => {
110
+ (0, reader_1.assertNative)(intent.asset);
111
+ const memo = memoOf(ctx, intent.memo);
112
+ const from = (0, address_1.decodeAddress)(intent.from, config);
113
+ const outputs = plannedOutputs(ctx, intent.outputs);
114
+ const candidates = await (0, reader_1.spendable)(ctx, intent.from, build.excludeInputs, build.signal);
115
+ return { memo, from, outputs, candidates };
116
+ };
117
+ const minIssuanceTime = () => BigInt(Math.floor(clock.now() / 1000));
118
+ /** Builds with the first `MAX_INPUTS` candidates, which must cover the transfer. */
119
+ /**
120
+ * Builds with the first `MAX_INPUTS` of `utxos`. When they do not cover the transfer but
121
+ * every output of the wallet would, the wallet holds enough in too many small outputs: an
122
+ * `INVALID_INTENT` that says so, not `INSUFFICIENT_FUNDS`.
123
+ */
124
+ const buildWith = (planned, fee, utxos) => {
125
+ try {
126
+ return (0, codec_1.buildBaseTx)({
127
+ config,
128
+ from: planned.from,
129
+ utxos: utxos.slice(0, exports.MAX_INPUTS),
130
+ outputs: planned.outputs,
131
+ memo: planned.memo,
132
+ minIssuanceTime: minIssuanceTime(),
133
+ fee,
134
+ });
135
+ }
136
+ catch (error) {
137
+ const needed = sumOf(planned.outputs.map((o) => o.amount));
138
+ if ((0, error_1.isCryptoAioError)(error, 'INSUFFICIENT_FUNDS') &&
139
+ utxos.length > exports.MAX_INPUTS &&
140
+ sumOf(utxos.map((u) => u.amount)) > needed) {
141
+ throw new error_1.ValidationError('INVALID_INTENT', `this transfer needs more than ${exports.MAX_INPUTS} inputs; consolidate the wallet's small outputs first`);
142
+ }
143
+ throw error;
144
+ }
145
+ };
146
+ /** The plan a stored estimate fixed, with today's fee state (capacity) and weights. */
147
+ const planOfStored = async (fee, signal) => {
148
+ if (fee.kind !== 'avalanche') {
149
+ throw new error_1.ValidationError('INVALID_INTENT', 'the fee is not an Avalanche estimate');
150
+ }
151
+ const stored = (0, fees_1.storedPlan)(fee.details, model);
152
+ if (stored.txFee !== undefined)
153
+ return { model: 'static', txFee: stored.txFee };
154
+ const current = await (0, fees_1.feePlanOf)(ctx, 'slow', feeCache, signal);
155
+ if (current.model !== 'dynamic')
156
+ throw new Error('unreachable: P-Chain plan');
157
+ if (stored.gasPrice > config.maxGasPrice) {
158
+ throw new error_1.ValidationError('INVALID_INTENT', 'the gas price exceeds the configured maximum (options.maxGasPrice)');
159
+ }
160
+ return { ...current, price: stored.gasPrice };
161
+ };
162
+ return {
163
+ async estimateFee(intent, build) {
164
+ const planned = await plan(intent, build);
165
+ const fee = await (0, fees_1.feePlanOf)(ctx, intent.fee, feeCache, build.signal);
166
+ const paid = sumOf(planned.outputs.map((o) => o.amount));
167
+ const available = sumOf(planned.candidates.map((u) => u.amount));
168
+ let built;
169
+ if (planned.candidates.length > 0 && available > paid) {
170
+ try {
171
+ built = buildWith(planned, fee, planned.candidates);
172
+ }
173
+ catch (error) {
174
+ if (!(0, error_1.isCryptoAioError)(error, 'INSUFFICIENT_FUNDS') &&
175
+ !(0, error_1.isCryptoAioError)(error, 'INVALID_INTENT')) {
176
+ throw error;
177
+ }
178
+ built = buildWith(planned, fee, [
179
+ (0, codec_1.syntheticUtxo)(planned.from, paid + config.maxFee, config),
180
+ ]);
181
+ }
182
+ }
183
+ else {
184
+ // Not enough to pay: name the fee of a one-input transfer.
185
+ built = buildWith(planned, fee, [
186
+ (0, codec_1.syntheticUtxo)(planned.from, paid + config.maxFee, config),
187
+ ]);
188
+ }
189
+ return draft(intent.from, speedOf(intent.fee), built.fee, detailsOf(fee, built), 'expected');
190
+ },
191
+ async checkFunds(intent, fee, build) {
192
+ (0, reader_1.assertNative)(intent.asset);
193
+ const candidates = await (0, reader_1.spendable)(ctx, intent.from, build.excludeInputs, build.signal);
194
+ const available = sumOf(candidates.map((u) => u.amount));
195
+ const required = sumOf(intent.outputs.map((o) => o.amount)) +
196
+ sumOf(fee.charges.map((c) => c.amount));
197
+ return available >= required
198
+ ? { ok: true }
199
+ : { ok: false, asset: 'native', required, available };
200
+ },
201
+ async build(intent, fee, build) {
202
+ const planned = await plan(intent, build);
203
+ const key = keyOf(planned.from, build.keys);
204
+ const feePlan = await planOfStored(fee, build.signal);
205
+ const built = buildWith(planned, feePlan, planned.candidates);
206
+ return {
207
+ payload: { encoding: 'hex', data: (0, bytes_1.toHex)(built.bytes) },
208
+ signingRequests: [
209
+ {
210
+ id: REQUEST_ID,
211
+ scheme: 'secp256k1-ecdsa',
212
+ payload: (0, sha256_1.sha256)(built.bytes),
213
+ payloadKind: 'digest',
214
+ publicKey: key.publicKey,
215
+ ...(key.keyRef ? { keyRef: key.keyRef } : {}),
216
+ },
217
+ ],
218
+ ordering: { kind: 'inputs', inputs: built.inputs },
219
+ fee: draft(intent.from, fee.speed, built.fee, detailsOf(feePlan, built), 'exact'),
220
+ summary: {
221
+ asset: native,
222
+ outputs: intent.outputs.map((o) => ({ to: o.to, amount: o.amount.toString() })),
223
+ ...(intent.memo !== undefined ? { memo: intent.memo } : {}),
224
+ },
225
+ };
226
+ },
227
+ async assemble(unsigned, signatures) {
228
+ const bundle = signatures.find((s) => s.requestId === REQUEST_ID);
229
+ if (!bundle || bundle.bytes.length !== 64) {
230
+ throw new error_1.SigningError('SIGNING_FAILED', 'the transaction signature is missing');
231
+ }
232
+ if (bundle.recovery !== 0 && bundle.recovery !== 1) {
233
+ throw new error_1.SigningError('SIGNING_FAILED', 'an Avalanche signature needs its recovery id (0 or 1)');
234
+ }
235
+ const signed = (0, codec_1.assembleSigned)((0, bytes_1.fromHex)(unsigned.payload.data), (0, codec_1.credentialSignature)(bundle.bytes, bundle.recovery), config);
236
+ const id = (0, codec_1.parseSignedTx)(signed, config).id;
237
+ return {
238
+ raw: { encoding: 'hex', data: (0, bytes_1.toHex)(signed) },
239
+ ref: { id, idKind: 'txid', canonical: true },
240
+ };
241
+ },
242
+ signaturesFrom(unsigned, signed) {
243
+ if (signed.encoding !== 'hex' || !/^(?:[0-9a-fA-F]{2})+$/.test(signed.data)) {
244
+ throw new error_1.ValidationError('INVALID_INTENT', 'a signed Avalanche transaction is expected, as hex');
245
+ }
246
+ let parsed;
247
+ try {
248
+ parsed = (0, codec_1.parseSignedTx)((0, bytes_1.fromHex)(signed.data), config);
249
+ }
250
+ catch {
251
+ throw new error_1.ValidationError('INVALID_INTENT', 'not a signed transaction of this chain');
252
+ }
253
+ if (!(0, bytes_1.equalBytes)(parsed.unsignedBytes, (0, bytes_1.fromHex)(unsigned.payload.data))) {
254
+ throw new error_1.ValidationError('INVALID_INTENT', 'the signed transaction is not the prepared one');
255
+ }
256
+ const first = parsed.signed
257
+ .getCredentials()
258
+ .find((c) => c._type === sdk_1.TYPES.credential)
259
+ ?.getSignatures()[0];
260
+ if (first === undefined)
261
+ return [];
262
+ const bytes = (0, bytes_1.fromHex)(first.replace(/^0x/, ''));
263
+ return [
264
+ {
265
+ requestId: REQUEST_ID,
266
+ bytes: bytes.subarray(0, 64),
267
+ recovery: bytes[64],
268
+ },
269
+ ];
270
+ },
271
+ };
272
+ }
273
+ /**
274
+ * Twice the mempool's largest transaction, as hex characters. The cap runs before the
275
+ * regex and the parser read the input, so an oversized payload costs nothing.
276
+ */
277
+ const MAX_TX_HEX = 4 * codec_1.MAX_TX_BYTES;
278
+ function avalancheBroadcaster(ctx) {
279
+ const { config } = ctx;
280
+ return {
281
+ async broadcast(signed, options = {}) {
282
+ const { encoding, data } = signed.raw;
283
+ if (encoding !== 'hex' ||
284
+ data.length > MAX_TX_HEX ||
285
+ !/^(?:[0-9a-fA-F]{2})+$/.test(data)) {
286
+ throw new error_1.ValidationError('INVALID_INTENT', 'a raw Avalanche transaction is hex (signed bytes, no checksum)');
287
+ }
288
+ const bytes = (0, bytes_1.fromHex)(data);
289
+ let parsed;
290
+ try {
291
+ parsed = (0, codec_1.parseSignedTx)(bytes, config);
292
+ }
293
+ catch {
294
+ throw new error_1.ValidationError('INVALID_INTENT', 'not a signed transaction of this chain');
295
+ }
296
+ const base = parsed.tx.baseTx;
297
+ if (base &&
298
+ (base.NetworkId.value() !== config.networkId ||
299
+ base.BlockchainId.toString() !== config.blockchainId)) {
300
+ throw new error_1.ValidationError('INVALID_INTENT', 'the transaction is for another network or chain');
301
+ }
302
+ // A bare broadcast has no ref (`signed.ref.id` is empty), so the bytes' own id is
303
+ // what the node's answer is checked against; an Attempt's ref must be that id.
304
+ if (signed.ref.id !== '' && signed.ref.id !== parsed.id) {
305
+ throw new error_1.ValidationError('INVALID_INTENT', 'the transaction bytes do not have the Attempt id');
306
+ }
307
+ try {
308
+ const id = await ctx.node.issueTx(bytes, {
309
+ purpose: 'broadcast',
310
+ retry: 'ambiguous-on-failure',
311
+ ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),
312
+ ...(options.signal ? { signal: options.signal } : {}),
313
+ });
314
+ if (id !== parsed.id) {
315
+ // The node accepted something under another id: the outcome is unknown.
316
+ throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the node answered another id', {
317
+ ambiguous: true,
318
+ });
319
+ }
320
+ return { kind: 'accepted' };
321
+ }
322
+ catch (error) {
323
+ // A definitive JSON-RPC error is AvalancheGo's answer; anything else, an
324
+ // ambiguous error included, is rethrown. A node's text is a claim, so it only
325
+ // ever makes a refusal (errors.ts).
326
+ if ((0, error_1.isCryptoAioError)(error, 'RPC_ERROR') &&
327
+ !error.ambiguous &&
328
+ typeof error.details?.rpcMessage === 'string') {
329
+ return (0, errors_1.classifyIssueError)(error.details.rpcMessage);
330
+ }
331
+ throw error;
332
+ }
333
+ },
334
+ };
335
+ }
336
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The Avalanche builder and broadcaster (a UTXO chain: the `inputs` ordering).\n * - `build` spends only plain, unlocked AVAX outputs the wallet signs alone and that no\n * other live Operation holds (`ctx.excludeInputs`), largest first; change goes back to\n * the sending address; the spent outputs are the `inputs` ordering. The fee is `exact`\n * once built, and never above `options.maxFee`.\n * - One signing request: the SHA-256 of the unsigned bytes, signed with the wallet's\n * secp256k1 key; every input's credential carries that signature. The id is known only\n * after signing (it hashes the credentials).\n * - There is no replacement or cancel: AvalancheGo's mempool keeps the first of two\n * conflicting transactions, and an accepted one is final.\n * - Broadcast answers are classified by `errors.ts`; an ambiguous transport failure is\n * rethrown unclassified: the bytes may have reached a node, so the core monitors the\n * broadcast as possibly sent.\n */\nimport { sha256 } from '@noble/hashes/sha256';\nimport type {\n BroadcastResult,\n Broadcaster,\n BuildContext,\n TxBuilder,\n WalletKey,\n} from '../../core/driver/types';\nimport {\n ProviderError,\n SigningError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n} from '../../core/errors/error';\nimport { assetId } from '../../core/model/asset';\nimport type { FeeEstimateDraft, FeeOverride, FeeSpeed } from '../../core/model/fee';\nimport type { DriverIntent } from '../../core/model/intent';\nimport type { RawTx, SignedTx, UnsignedTx } from '../../core/model/transaction';\nimport type { SignatureBundle } from '../../core/signing/types';\nimport { equalBytes, fromHex, toHex, utf8ToBytes } from '../../core/util/bytes';\nimport { addressBytesOf, decodeAddress } from './address';\nimport {\n MAX_MEMO_BYTES,\n MAX_TX_BYTES,\n assembleSigned,\n buildBaseTx,\n credentialSignature,\n parseSignedTx,\n syntheticUtxo,\n type BuiltTx,\n type FeePlan,\n type ParsedUtxo,\n type PlannedOutput,\n} from './codec';\nimport type { AvalancheContext } from './context';\nimport { classifyIssueError } from './errors';\nimport { feePlanOf, storedPlan, type FeeConfigCache } from './fees';\nimport { assertNative, spendable } from './reader';\nimport { TYPES } from './sdk';\nimport type { AvalancheFeeDetails } from './types';\n\n/** At most this many outputs per transfer (and one more for change). */\nexport const MAX_OUTPUTS = 127;\n/** At most this many inputs: well inside 64 KiB and the P-Chain's gas capacity. */\nexport const MAX_INPUTS = 128;\nconst REQUEST_ID = 'tx';\n\nconst speedOf = (fee: FeeSpeed | FeeOverride): FeeSpeed | 'custom' =>\n typeof fee === 'string' ? fee : 'custom';\n\nconst sumOf = (values: readonly bigint[]): bigint => values.reduce((s, v) => s + v, 0n);\n\nfunction draft(\n from: string,\n speed: FeeSpeed | 'custom',\n fee: bigint,\n details: AvalancheFeeDetails,\n bound: 'exact' | 'expected',\n): FeeEstimateDraft {\n return {\n kind: 'avalanche',\n speed,\n charges: [{ asset: 'native', amount: fee, label: 'network' }],\n bound,\n payer: from,\n details: { ...details },\n };\n}\n\nfunction detailsOf(plan: FeePlan, built: BuiltTx): AvalancheFeeDetails {\n return plan.model === 'static'\n ? {\n model: 'static',\n txFee: plan.txFee,\n inputs: built.inputs.length,\n outputs: built.outputs,\n change: built.change,\n }\n : {\n model: 'dynamic',\n gasPrice: plan.price,\n ...(built.gas !== undefined ? { gas: built.gas } : {}),\n inputs: built.inputs.length,\n outputs: built.outputs,\n change: built.change,\n };\n}\n\n/** The wallet's key, which must own the sending address: nothing is built for others. */\nfunction keyOf(from: Uint8Array, keys: readonly WalletKey[]): WalletKey {\n const key = keys.find((k) => k.scheme === 'secp256k1-ecdsa');\n if (!key) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'building an Avalanche transaction needs the wallet public key',\n );\n }\n if (!equalBytes(addressBytesOf(key.publicKey), from)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n \"the wallet's key does not own the sending address\",\n );\n }\n return key;\n}\n\n/** The intent's memo as bytes; only the X-Chain carries one (Durango refuses it on P). */\nfunction memoOf(ctx: AvalancheContext, memo: string | undefined): Uint8Array {\n if (memo === undefined) return new Uint8Array();\n if (ctx.config.vm === 'pvm' || !ctx.config.capabilities.has('memo')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n 'P-Chain transactions carry no memo',\n );\n }\n const bytes = utf8ToBytes(memo);\n if (bytes.length > MAX_MEMO_BYTES) {\n throw new ValidationError('INVALID_INTENT', 'a memo has at most 256 bytes');\n }\n return bytes;\n}\n\nfunction plannedOutputs(\n ctx: AvalancheContext,\n outputs: DriverIntent['outputs'],\n): PlannedOutput[] {\n if (outputs.length === 0) {\n throw new ValidationError('INVALID_INTENT', 'at least one output is required');\n }\n if (outputs.length > MAX_OUTPUTS) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `a transfer pays at most ${MAX_OUTPUTS} outputs`,\n );\n }\n return outputs.map((output) => {\n if (output.amount < 1n) {\n throw new ValidationError('INVALID_AMOUNT', 'an output must pay at least 1 nAVAX');\n }\n return { to: decodeAddress(output.to, ctx.config), amount: output.amount };\n });\n}\n\nexport interface AvalancheBuilder extends TxBuilder {\n signaturesFrom(unsigned: UnsignedTx, signed: RawTx): readonly SignatureBundle[];\n}\n\nexport function avalancheBuilder(ctx: AvalancheContext): AvalancheBuilder {\n const { config, clock } = ctx;\n const native = assetId(ctx.chain.id, ctx.network.id, 'native');\n const feeCache: FeeConfigCache = {};\n const model = config.vm === 'avm' ? 'static' : 'dynamic';\n\n const plan = async (intent: DriverIntent, build: BuildContext) => {\n assertNative(intent.asset);\n const memo = memoOf(ctx, intent.memo);\n const from = decodeAddress(intent.from, config);\n const outputs = plannedOutputs(ctx, intent.outputs);\n const candidates = await spendable(\n ctx,\n intent.from,\n build.excludeInputs,\n build.signal,\n );\n return { memo, from, outputs, candidates };\n };\n\n const minIssuanceTime = (): bigint => BigInt(Math.floor(clock.now() / 1000));\n\n /** Builds with the first `MAX_INPUTS` candidates, which must cover the transfer. */\n /**\n * Builds with the first `MAX_INPUTS` of `utxos`. When they do not cover the transfer but\n * every output of the wallet would, the wallet holds enough in too many small outputs: an\n * `INVALID_INTENT` that says so, not `INSUFFICIENT_FUNDS`.\n */\n const buildWith = (\n planned: Awaited<ReturnType<typeof plan>>,\n fee: FeePlan,\n utxos: readonly ParsedUtxo[],\n ): BuiltTx => {\n try {\n return buildBaseTx({\n config,\n from: planned.from,\n utxos: utxos.slice(0, MAX_INPUTS),\n outputs: planned.outputs,\n memo: planned.memo,\n minIssuanceTime: minIssuanceTime(),\n fee,\n });\n } catch (error) {\n const needed = sumOf(planned.outputs.map((o) => o.amount));\n if (\n isCryptoAioError(error, 'INSUFFICIENT_FUNDS') &&\n utxos.length > MAX_INPUTS &&\n sumOf(utxos.map((u) => u.amount)) > needed\n ) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `this transfer needs more than ${MAX_INPUTS} inputs; consolidate the wallet's small outputs first`,\n );\n }\n throw error;\n }\n };\n\n /** The plan a stored estimate fixed, with today's fee state (capacity) and weights. */\n const planOfStored = async (\n fee: FeeEstimateDraft,\n signal?: AbortSignal,\n ): Promise<FeePlan> => {\n if (fee.kind !== 'avalanche') {\n throw new ValidationError('INVALID_INTENT', 'the fee is not an Avalanche estimate');\n }\n const stored = storedPlan(fee.details, model);\n if (stored.txFee !== undefined) return { model: 'static', txFee: stored.txFee };\n const current = await feePlanOf(ctx, 'slow', feeCache, signal);\n if (current.model !== 'dynamic') throw new Error('unreachable: P-Chain plan');\n if ((stored.gasPrice as bigint) > config.maxGasPrice) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the gas price exceeds the configured maximum (options.maxGasPrice)',\n );\n }\n return { ...current, price: stored.gasPrice as bigint };\n };\n\n return {\n async estimateFee(intent, build) {\n const planned = await plan(intent, build);\n const fee = await feePlanOf(ctx, intent.fee, feeCache, build.signal);\n const paid = sumOf(planned.outputs.map((o) => o.amount));\n const available = sumOf(planned.candidates.map((u) => u.amount));\n let built: BuiltTx;\n if (planned.candidates.length > 0 && available > paid) {\n try {\n built = buildWith(planned, fee, planned.candidates);\n } catch (error) {\n if (\n !isCryptoAioError(error, 'INSUFFICIENT_FUNDS') &&\n !isCryptoAioError(error, 'INVALID_INTENT')\n ) {\n throw error;\n }\n built = buildWith(planned, fee, [\n syntheticUtxo(planned.from, paid + config.maxFee, config),\n ]);\n }\n } else {\n // Not enough to pay: name the fee of a one-input transfer.\n built = buildWith(planned, fee, [\n syntheticUtxo(planned.from, paid + config.maxFee, config),\n ]);\n }\n return draft(\n intent.from,\n speedOf(intent.fee),\n built.fee,\n detailsOf(fee, built),\n 'expected',\n );\n },\n\n async checkFunds(intent, fee, build) {\n assertNative(intent.asset);\n const candidates = await spendable(\n ctx,\n intent.from,\n build.excludeInputs,\n build.signal,\n );\n const available = sumOf(candidates.map((u) => u.amount));\n const required =\n sumOf(intent.outputs.map((o) => o.amount)) +\n sumOf(fee.charges.map((c) => c.amount));\n return available >= required\n ? { ok: true }\n : { ok: false, asset: 'native', required, available };\n },\n\n async build(intent, fee, build) {\n const planned = await plan(intent, build);\n const key = keyOf(planned.from, build.keys);\n const feePlan = await planOfStored(fee, build.signal);\n const built = buildWith(planned, feePlan, planned.candidates);\n return {\n payload: { encoding: 'hex', data: toHex(built.bytes) },\n signingRequests: [\n {\n id: REQUEST_ID,\n scheme: 'secp256k1-ecdsa',\n payload: sha256(built.bytes),\n payloadKind: 'digest',\n publicKey: key.publicKey,\n ...(key.keyRef ? { keyRef: key.keyRef } : {}),\n },\n ],\n ordering: { kind: 'inputs', inputs: built.inputs },\n fee: draft(intent.from, fee.speed, built.fee, detailsOf(feePlan, built), 'exact'),\n summary: {\n asset: native,\n outputs: intent.outputs.map((o) => ({ to: o.to, amount: o.amount.toString() })),\n ...(intent.memo !== undefined ? { memo: intent.memo } : {}),\n },\n };\n },\n\n async assemble(unsigned, signatures) {\n const bundle = signatures.find((s) => s.requestId === REQUEST_ID);\n if (!bundle || bundle.bytes.length !== 64) {\n throw new SigningError('SIGNING_FAILED', 'the transaction signature is missing');\n }\n if (bundle.recovery !== 0 && bundle.recovery !== 1) {\n throw new SigningError(\n 'SIGNING_FAILED',\n 'an Avalanche signature needs its recovery id (0 or 1)',\n );\n }\n const signed = assembleSigned(\n fromHex(unsigned.payload.data),\n credentialSignature(bundle.bytes, bundle.recovery),\n config,\n );\n const id = parseSignedTx(signed, config).id;\n return {\n raw: { encoding: 'hex', data: toHex(signed) },\n ref: { id, idKind: 'txid', canonical: true },\n };\n },\n\n signaturesFrom(unsigned, signed) {\n if (signed.encoding !== 'hex' || !/^(?:[0-9a-fA-F]{2})+$/.test(signed.data)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a signed Avalanche transaction is expected, as hex',\n );\n }\n let parsed: ReturnType<typeof parseSignedTx>;\n try {\n parsed = parseSignedTx(fromHex(signed.data), config);\n } catch {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'not a signed transaction of this chain',\n );\n }\n if (!equalBytes(parsed.unsignedBytes, fromHex(unsigned.payload.data))) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the signed transaction is not the prepared one',\n );\n }\n const first = parsed.signed\n .getCredentials()\n .find((c) => c._type === TYPES.credential)\n ?.getSignatures()[0];\n if (first === undefined) return [];\n const bytes = fromHex(first.replace(/^0x/, ''));\n return [\n {\n requestId: REQUEST_ID,\n bytes: bytes.subarray(0, 64),\n recovery: bytes[64] as number,\n },\n ];\n },\n };\n}\n\n/**\n * Twice the mempool's largest transaction, as hex characters. The cap runs before the\n * regex and the parser read the input, so an oversized payload costs nothing.\n */\nconst MAX_TX_HEX = 4 * MAX_TX_BYTES;\n\nexport function avalancheBroadcaster(ctx: AvalancheContext): Broadcaster {\n const { config } = ctx;\n return {\n async broadcast(signed: SignedTx, options = {}): Promise<BroadcastResult> {\n const { encoding, data } = signed.raw;\n if (\n encoding !== 'hex' ||\n data.length > MAX_TX_HEX ||\n !/^(?:[0-9a-fA-F]{2})+$/.test(data)\n ) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a raw Avalanche transaction is hex (signed bytes, no checksum)',\n );\n }\n const bytes = fromHex(data);\n let parsed: ReturnType<typeof parseSignedTx>;\n try {\n parsed = parseSignedTx(bytes, config);\n } catch {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'not a signed transaction of this chain',\n );\n }\n const base = parsed.tx.baseTx;\n if (\n base &&\n (base.NetworkId.value() !== config.networkId ||\n base.BlockchainId.toString() !== config.blockchainId)\n ) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the transaction is for another network or chain',\n );\n }\n // A bare broadcast has no ref (`signed.ref.id` is empty), so the bytes' own id is\n // what the node's answer is checked against; an Attempt's ref must be that id.\n if (signed.ref.id !== '' && signed.ref.id !== parsed.id) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the transaction bytes do not have the Attempt id',\n );\n }\n try {\n const id = await ctx.node.issueTx(bytes, {\n purpose: 'broadcast',\n retry: 'ambiguous-on-failure',\n ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n if (id !== parsed.id) {\n // The node accepted something under another id: the outcome is unknown.\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the node answered another id',\n {\n ambiguous: true,\n },\n );\n }\n return { kind: 'accepted' };\n } catch (error) {\n // A definitive JSON-RPC error is AvalancheGo's answer; anything else, an\n // ambiguous error included, is rethrown. A node's text is a claim, so it only\n // ever makes a refusal (errors.ts).\n if (\n isCryptoAioError(error, 'RPC_ERROR') &&\n !error.ambiguous &&\n typeof error.details?.rpcMessage === 'string'\n ) {\n return classifyIssueError(error.details.rpcMessage);\n }\n throw error;\n }\n },\n };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function cb58Encode(bytes: Uint8Array): string;
2
+ /** The bytes of a CB58 string, or `undefined` when it is not one (bad text or checksum). */
3
+ export declare function cb58Decode(text: string): Uint8Array | undefined;
4
+ /** Whether `text` is a CB58 id of 32 bytes (a transaction, block, asset or chain id). */
5
+ export declare function isId(text: unknown): text is string;
6
+ /** The CB58 id of `bytes`: their SHA-256 (transaction and block ids). */
7
+ export declare function idOf(bytes: Uint8Array): string;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cb58Encode = cb58Encode;
4
+ exports.cb58Decode = cb58Decode;
5
+ exports.isId = isId;
6
+ exports.idOf = idOf;
7
+ /**
8
+ * Avalanche's CB58 encoding (base58 of the bytes followed by the last 4 bytes of their
9
+ * SHA-256), the form of every transaction, block, asset and blockchain id. SDK-free.
10
+ * Decoding checks the checksum; avalanchejs's own decoder does not.
11
+ */
12
+ const sha256_1 = require("@noble/hashes/sha256");
13
+ const base_1 = require("@scure/base");
14
+ const bytes_1 = require("../../core/util/bytes");
15
+ /** An id is 32 bytes: 36 with the checksum, at most 50 base58 characters. */
16
+ const ID_TEXT = /^[1-9A-HJ-NP-Za-km-z]{32,50}$/;
17
+ function cb58Encode(bytes) {
18
+ const out = new Uint8Array(bytes.length + 4);
19
+ out.set(bytes, 0);
20
+ out.set((0, sha256_1.sha256)(bytes).subarray(-4), bytes.length);
21
+ return base_1.base58.encode(out);
22
+ }
23
+ /** The bytes of a CB58 string, or `undefined` when it is not one (bad text or checksum). */
24
+ function cb58Decode(text) {
25
+ let raw;
26
+ try {
27
+ raw = base_1.base58.decode(text);
28
+ }
29
+ catch {
30
+ return undefined;
31
+ }
32
+ if (raw.length < 4)
33
+ return undefined;
34
+ const body = raw.subarray(0, -4);
35
+ return (0, bytes_1.equalBytes)((0, sha256_1.sha256)(body).subarray(-4), raw.subarray(-4))
36
+ ? Uint8Array.from(body)
37
+ : undefined;
38
+ }
39
+ /** Whether `text` is a CB58 id of 32 bytes (a transaction, block, asset or chain id). */
40
+ function isId(text) {
41
+ if (typeof text !== 'string' || !ID_TEXT.test(text))
42
+ return false;
43
+ return cb58Decode(text)?.length === 32;
44
+ }
45
+ /** The CB58 id of `bytes`: their SHA-256 (transaction and block ids). */
46
+ function idOf(bytes) {
47
+ return cb58Encode((0, sha256_1.sha256)(bytes));
48
+ }
49
+ //# sourceMappingURL=cb58.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cb58.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/cb58.ts"],"names":[],"mappings":";;AAYA,gCAKC;AAGD,gCAYC;AAGD,oBAGC;AAGD,oBAEC;AA3CD;;;;GAIG;AACH,iDAA8C;AAC9C,sCAAqC;AACrC,iDAAmD;AAEnD,6EAA6E;AAC7E,MAAM,OAAO,GAAG,+BAA+B,CAAC;AAEhD,SAAgB,UAAU,CAAC,KAAiB;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClB,GAAG,CAAC,GAAG,CAAC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,aAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,4FAA4F;AAC5F,SAAgB,UAAU,CAAC,IAAY;IACrC,IAAI,GAAe,CAAC;IACpB,IAAI,CAAC;QACH,GAAG,GAAG,aAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,IAAA,kBAAU,EAAC,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,yFAAyF;AACzF,SAAgB,IAAI,CAAC,IAAa;IAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,SAAgB,IAAI,CAAC,KAAiB;IACpC,OAAO,UAAU,CAAC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/**\n * Avalanche's CB58 encoding (base58 of the bytes followed by the last 4 bytes of their\n * SHA-256), the form of every transaction, block, asset and blockchain id. SDK-free.\n * Decoding checks the checksum; avalanchejs's own decoder does not.\n */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { base58 } from '@scure/base';\nimport { equalBytes } from '../../core/util/bytes';\n\n/** An id is 32 bytes: 36 with the checksum, at most 50 base58 characters. */\nconst ID_TEXT = /^[1-9A-HJ-NP-Za-km-z]{32,50}$/;\n\nexport function cb58Encode(bytes: Uint8Array): string {\n const out = new Uint8Array(bytes.length + 4);\n out.set(bytes, 0);\n out.set(sha256(bytes).subarray(-4), bytes.length);\n return base58.encode(out);\n}\n\n/** The bytes of a CB58 string, or `undefined` when it is not one (bad text or checksum). */\nexport function cb58Decode(text: string): Uint8Array | undefined {\n let raw: Uint8Array;\n try {\n raw = base58.decode(text);\n } catch {\n return undefined;\n }\n if (raw.length < 4) return undefined;\n const body = raw.subarray(0, -4);\n return equalBytes(sha256(body).subarray(-4), raw.subarray(-4))\n ? Uint8Array.from(body)\n : undefined;\n}\n\n/** Whether `text` is a CB58 id of 32 bytes (a transaction, block, asset or chain id). */\nexport function isId(text: unknown): text is string {\n if (typeof text !== 'string' || !ID_TEXT.test(text)) return false;\n return cb58Decode(text)?.length === 32;\n}\n\n/** The CB58 id of `bytes`: their SHA-256 (transaction and block ids). */\nexport function idOf(bytes: Uint8Array): string {\n return cb58Encode(sha256(bytes));\n}\n"]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The built-in Avalanche X-Chain and P-Chain (the primary network's UTXO chains) on mainnet
3
+ * and Fuji. The C-Chain is the EVM chain `avalanche`. Values verified on 2026-10-01 against
4
+ * the public API (`api.avax.network`, `api.avax-test.network`) and the Avalanche Data API:
5
+ * - `identity`: the id of the chain's block at height 0, which the identity probe reads
6
+ * (for the X-Chain, the block that linearized it in the Cortina upgrade).
7
+ * - `params.networkId` (1, 5) and `hrp` (`avax`, `fuji`): the address and transaction
8
+ * network; `blockchainId`: the chain's own id, written into every transaction;
9
+ * `avaxAssetId`: AVAX's asset id on the network.
10
+ * - AVAX has 9 decimals on these chains (nAVAX), unlike the C-Chain's 18.
11
+ * - `finality: 1 confirmation`: Snowman consensus never reverts an accepted block, so a
12
+ * transaction in an accepted block is final; `defaultConfirmations: 1`.
13
+ * Library policy: `reorgWindow: 8` (accepted blocks never roll back; the window only
14
+ * catches an inconsistent provider) and `maxLagBlocks` (2 on the X-Chain, whose blocks are
15
+ * minutes apart, 6 on the P-Chain, seconds apart). Since Durango the P-Chain refuses a
16
+ * memo, so its networks remove the `memo` capability.
17
+ */
18
+ import type { ChainInfo } from '../../core/model/chain';
19
+ export declare const AVALANCHE_X_CHAIN: ChainInfo;
20
+ export declare const AVALANCHE_P_CHAIN: ChainInfo;
21
+ export declare const AVALANCHE_CHAINS: readonly ChainInfo[];
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AVALANCHE_CHAINS = exports.AVALANCHE_P_CHAIN = exports.AVALANCHE_X_CHAIN = void 0;
4
+ const freeze_1 = require("../../core/util/freeze");
5
+ const NETWORKS = [
6
+ {
7
+ id: 'mainnet',
8
+ testnet: false,
9
+ networkId: 1,
10
+ hrp: 'avax',
11
+ avaxAssetId: 'FvwEAhmxKfeiG8SnEvq42hc6whRyY3EFYAvebMqDNDGCgxN5Z',
12
+ x: {
13
+ blockchainId: '2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM',
14
+ genesis: 'V8kYdATLoVjUBazVjEHy1dWurk2PcnhERSWnwmcNwirdsBb1S',
15
+ },
16
+ p: {
17
+ blockchainId: '11111111111111111111111111111111LpoYY',
18
+ genesis: '2FUFPVPxbTpKNn39moGSzsmGroYES4NZRdw3mJgNvMkMiMHJ9e',
19
+ },
20
+ },
21
+ {
22
+ id: 'fuji',
23
+ testnet: true,
24
+ networkId: 5,
25
+ hrp: 'fuji',
26
+ avaxAssetId: 'U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK',
27
+ x: {
28
+ blockchainId: '2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm',
29
+ genesis: '2tCdy3dRsf6rYG7jtBNSyANQ6StrAEYpCDMLBQyGRLF8wG5KPK',
30
+ },
31
+ p: {
32
+ blockchainId: '11111111111111111111111111111111LpoYY',
33
+ genesis: '99BWrAqUMvTp9nXKXyjPsCqjGwDqVFqssTRQbu58af57Cf9VG',
34
+ },
35
+ },
36
+ ];
37
+ function network(spec, vm) {
38
+ const own = vm === 'avm' ? spec.x : spec.p;
39
+ return {
40
+ id: spec.id,
41
+ identity: own.genesis,
42
+ testnet: spec.testnet,
43
+ feeModel: vm === 'avm' ? 'avalanche-static' : 'avalanche-dynamic',
44
+ finality: { kind: 'confirmations', confirmations: 1 },
45
+ defaultConfirmations: 1,
46
+ reorgWindow: 8,
47
+ maxLagBlocks: vm === 'avm' ? 2 : 6,
48
+ ...(vm === 'pvm' ? { capabilities: { remove: ['memo'] } } : {}),
49
+ params: {
50
+ vm,
51
+ alias: vm === 'avm' ? 'X' : 'P',
52
+ networkId: spec.networkId,
53
+ hrp: spec.hrp,
54
+ blockchainId: own.blockchainId,
55
+ avaxAssetId: spec.avaxAssetId,
56
+ },
57
+ };
58
+ }
59
+ function chain(id, vm) {
60
+ return {
61
+ id,
62
+ family: 'avalanche',
63
+ model: 'utxo',
64
+ ordering: 'inputs',
65
+ schemes: ['secp256k1-ecdsa'],
66
+ nativeAsset: { symbol: 'AVAX', decimals: 9, name: 'Avalanche' },
67
+ defaultNetwork: 'mainnet',
68
+ // Avalanche wallets export `xpub` on every network: no SLIP-0132 network class.
69
+ xpubNetworkClass: false,
70
+ networks: Object.fromEntries(NETWORKS.map((spec) => [spec.id, network(spec, vm)])),
71
+ };
72
+ }
73
+ exports.AVALANCHE_X_CHAIN = (0, freeze_1.deepFreeze)(chain('avalanche-x', 'avm'));
74
+ exports.AVALANCHE_P_CHAIN = (0, freeze_1.deepFreeze)(chain('avalanche-p', 'pvm'));
75
+ exports.AVALANCHE_CHAINS = (0, freeze_1.deepFreeze)([
76
+ exports.AVALANCHE_X_CHAIN,
77
+ exports.AVALANCHE_P_CHAIN,
78
+ ]);
79
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/adapters/avalanche/chains.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The built-in Avalanche X-Chain and P-Chain (the primary network's UTXO chains) on mainnet\n * and Fuji. The C-Chain is the EVM chain `avalanche`. Values verified on 2026-10-01 against\n * the public API (`api.avax.network`, `api.avax-test.network`) and the Avalanche Data API:\n * - `identity`: the id of the chain's block at height 0, which the identity probe reads\n * (for the X-Chain, the block that linearized it in the Cortina upgrade).\n * - `params.networkId` (1, 5) and `hrp` (`avax`, `fuji`): the address and transaction\n * network; `blockchainId`: the chain's own id, written into every transaction;\n * `avaxAssetId`: AVAX's asset id on the network.\n * - AVAX has 9 decimals on these chains (nAVAX), unlike the C-Chain's 18.\n * - `finality: 1 confirmation`: Snowman consensus never reverts an accepted block, so a\n * transaction in an accepted block is final; `defaultConfirmations: 1`.\n * Library policy: `reorgWindow: 8` (accepted blocks never roll back; the window only\n * catches an inconsistent provider) and `maxLagBlocks` (2 on the X-Chain, whose blocks are\n * minutes apart, 6 on the P-Chain, seconds apart). Since Durango the P-Chain refuses a\n * memo, so its networks remove the `memo` capability.\n */\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { deepFreeze } from '../../core/util/freeze';\nimport type { AvalancheVm } from './types';\n\ninterface NetworkSpec {\n readonly id: 'mainnet' | 'fuji';\n readonly testnet: boolean;\n readonly networkId: number;\n readonly hrp: string;\n readonly avaxAssetId: string;\n readonly x: { readonly blockchainId: string; readonly genesis: string };\n readonly p: { readonly blockchainId: string; readonly genesis: string };\n}\n\nconst NETWORKS: readonly NetworkSpec[] = [\n {\n id: 'mainnet',\n testnet: false,\n networkId: 1,\n hrp: 'avax',\n avaxAssetId: 'FvwEAhmxKfeiG8SnEvq42hc6whRyY3EFYAvebMqDNDGCgxN5Z',\n x: {\n blockchainId: '2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM',\n genesis: 'V8kYdATLoVjUBazVjEHy1dWurk2PcnhERSWnwmcNwirdsBb1S',\n },\n p: {\n blockchainId: '11111111111111111111111111111111LpoYY',\n genesis: '2FUFPVPxbTpKNn39moGSzsmGroYES4NZRdw3mJgNvMkMiMHJ9e',\n },\n },\n {\n id: 'fuji',\n testnet: true,\n networkId: 5,\n hrp: 'fuji',\n avaxAssetId: 'U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK',\n x: {\n blockchainId: '2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm',\n genesis: '2tCdy3dRsf6rYG7jtBNSyANQ6StrAEYpCDMLBQyGRLF8wG5KPK',\n },\n p: {\n blockchainId: '11111111111111111111111111111111LpoYY',\n genesis: '99BWrAqUMvTp9nXKXyjPsCqjGwDqVFqssTRQbu58af57Cf9VG',\n },\n },\n];\n\nfunction network(spec: NetworkSpec, vm: AvalancheVm): NetworkInfo {\n const own = vm === 'avm' ? spec.x : spec.p;\n return {\n id: spec.id,\n identity: own.genesis,\n testnet: spec.testnet,\n feeModel: vm === 'avm' ? 'avalanche-static' : 'avalanche-dynamic',\n finality: { kind: 'confirmations', confirmations: 1 },\n defaultConfirmations: 1,\n reorgWindow: 8,\n maxLagBlocks: vm === 'avm' ? 2 : 6,\n ...(vm === 'pvm' ? { capabilities: { remove: ['memo'] } } : {}),\n params: {\n vm,\n alias: vm === 'avm' ? 'X' : 'P',\n networkId: spec.networkId,\n hrp: spec.hrp,\n blockchainId: own.blockchainId,\n avaxAssetId: spec.avaxAssetId,\n },\n };\n}\n\nfunction chain(id: string, vm: AvalancheVm): ChainInfo {\n return {\n id,\n family: 'avalanche',\n model: 'utxo',\n ordering: 'inputs',\n schemes: ['secp256k1-ecdsa'],\n nativeAsset: { symbol: 'AVAX', decimals: 9, name: 'Avalanche' },\n defaultNetwork: 'mainnet',\n // Avalanche wallets export `xpub` on every network: no SLIP-0132 network class.\n xpubNetworkClass: false,\n networks: Object.fromEntries(NETWORKS.map((spec) => [spec.id, network(spec, vm)])),\n };\n}\n\nexport const AVALANCHE_X_CHAIN: ChainInfo = deepFreeze(chain('avalanche-x', 'avm'));\nexport const AVALANCHE_P_CHAIN: ChainInfo = deepFreeze(chain('avalanche-p', 'pvm'));\n\nexport const AVALANCHE_CHAINS: readonly ChainInfo[] = deepFreeze([\n AVALANCHE_X_CHAIN,\n AVALANCHE_P_CHAIN,\n]);\n"]}