crypto-aio 0.0.2 → 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 (672) 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/lib-types.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/adapters/ton/types.js +3 -0
  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/core/model/transaction.js +3 -0
  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 -44
  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 -2
  638. package/dist/libs/eth/contract.js +0 -7
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -20
  641. package/dist/libs/eth/index.js +0 -62
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -2
  644. package/dist/libs/eth/transact.js +0 -7
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -1
  647. package/dist/libs/index.js +0 -18
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/tool/common.d.ts +0 -28
  650. package/dist/tool/common.js +0 -33
  651. package/dist/tool/common.js.map +0 -1
  652. package/dist/tool/eth-tools.d.ts +0 -3
  653. package/dist/tool/eth-tools.js +0 -33
  654. package/dist/tool/eth-tools.js.map +0 -1
  655. package/dist/tool/index.d.ts +0 -4
  656. package/dist/tool/index.js +0 -21
  657. package/dist/tool/index.js.map +0 -1
  658. package/dist/tool/logging.d.ts +0 -3
  659. package/dist/tool/logging.js +0 -11
  660. package/dist/tool/logging.js.map +0 -1
  661. package/dist/tool/options.d.ts +0 -4
  662. package/dist/tool/options.js +0 -28
  663. package/dist/tool/options.js.map +0 -1
  664. package/dist/type/account.d.ts +0 -9
  665. package/dist/type/account.js.map +0 -1
  666. package/dist/type/common.d.ts +0 -18
  667. package/dist/type/common.js.map +0 -1
  668. package/dist/type/index.d.ts +0 -3
  669. package/dist/type/index.js +0 -20
  670. package/dist/type/index.js.map +0 -1
  671. package/dist/type/lib-types.d.ts +0 -7
  672. package/dist/type/lib-types.js.map +0 -1
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compactSize = exports.hash160 = void 0;
4
+ exports.outputScript = outputScript;
5
+ exports.isXOnlyPoint = isXOnlyPoint;
6
+ exports.decodeAddress = decodeAddress;
7
+ exports.addressFromScript = addressFromScript;
8
+ exports.taprootTweak = taprootTweak;
9
+ exports.walletAddress = walletAddress;
10
+ exports.walletTypeOf = walletTypeOf;
11
+ exports.dustThreshold = dustThreshold;
12
+ /**
13
+ * Bitcoin addresses and output scripts, SDK-free (`@scure/base`, `@noble/*`), so the codec
14
+ * is an implementation independent of bitcoinjs-lib, which the tests cross-check it
15
+ * against. Decoding is strict: at most 90 characters, refused before any decoding, one
16
+ * network's HRP and base58 version bytes,
17
+ * bech32 only for witness v0 and bech32m only for v1 (BIP350), exact program lengths, no
18
+ * mixed case, and a taproot output key must be a valid x coordinate. Every failure is
19
+ * `ValidationError('INVALID_ADDRESS')` with a message that names no address.
20
+ */
21
+ const secp256k1_1 = require("@noble/curves/secp256k1");
22
+ const ripemd160_1 = require("@noble/hashes/ripemd160");
23
+ const sha256_1 = require("@noble/hashes/sha256");
24
+ const base_1 = require("@scure/base");
25
+ const error_1 = require("../../core/errors/error");
26
+ const bytes_1 = require("../../core/util/bytes");
27
+ const base58check = (0, base_1.createBase58check)(sha256_1.sha256);
28
+ /**
29
+ * BIP173's bech32 limit, and more than any base58 address needs. `@scure/base`'s base58
30
+ * decoding is quadratic, so an untrusted string is capped before any decoding: a
31
+ * 10,000-character recipient once blocked the event loop for over a minute.
32
+ */
33
+ const ADDRESS_MAX = 90;
34
+ const BECH32_CHARS = /^[qpzry9x8gf2tvdw0s3jn54khce6mua7l]+$/;
35
+ /** The program length each output script's push byte encodes. */
36
+ const PROGRAM_LENGTH = Object.freeze({
37
+ p2pkh: 20,
38
+ p2sh: 20,
39
+ p2wpkh: 20,
40
+ p2wsh: 32,
41
+ p2tr: 32,
42
+ });
43
+ const invalid = (reason) => {
44
+ throw new error_1.ValidationError('INVALID_ADDRESS', `invalid Bitcoin address: ${reason}`);
45
+ };
46
+ const hash160 = (data) => (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(data));
47
+ exports.hash160 = hash160;
48
+ /** The standard output script of each type; the program must have that type's length. */
49
+ function outputScript(type, program) {
50
+ if (program.length !== PROGRAM_LENGTH[type]) {
51
+ invalid('the output program has the wrong length');
52
+ }
53
+ switch (type) {
54
+ case 'p2pkh':
55
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0x76, 0xa9, 0x14), program, Uint8Array.of(0x88, 0xac));
56
+ case 'p2sh':
57
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0xa9, 0x14), program, Uint8Array.of(0x87));
58
+ case 'p2wpkh':
59
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0x00, 0x14), program);
60
+ case 'p2wsh':
61
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0x00, 0x20), program);
62
+ case 'p2tr':
63
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0x51, 0x20), program);
64
+ }
65
+ }
66
+ /** Whether 32 bytes are the x coordinate of a curve point (BIP340 `lift_x`). */
67
+ function isXOnlyPoint(bytes) {
68
+ if (bytes.length !== 32)
69
+ return false;
70
+ try {
71
+ secp256k1_1.schnorr.utils.lift_x(secp256k1_1.schnorr.utils.bytesToNumberBE(bytes));
72
+ return true;
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ /**
79
+ * Whether an address starting with this network's `<hrp>1` has the shape of bech32: one case,
80
+ * and only bech32 characters after the separator. A custom network's base58 address can
81
+ * start with `<hrp>1` too; it is not bech32-shaped, so it takes the base58 path.
82
+ */
83
+ function isBech32Shaped(address, hrp) {
84
+ const lower = address.toLowerCase();
85
+ if (!lower.startsWith(`${hrp}1`))
86
+ return false;
87
+ if (address !== lower && address !== address.toUpperCase())
88
+ return false;
89
+ return BECH32_CHARS.test(lower.slice(hrp.length + 1));
90
+ }
91
+ /** Decodes a bech32-shaped address, already lowercased (BIP173 allows either case). */
92
+ function decodeSegwit(lower, params) {
93
+ let decoded;
94
+ let variant;
95
+ try {
96
+ decoded = base_1.bech32.decode(lower, ADDRESS_MAX);
97
+ variant = 'bech32';
98
+ }
99
+ catch {
100
+ try {
101
+ decoded = base_1.bech32m.decode(lower, ADDRESS_MAX);
102
+ variant = 'bech32m';
103
+ }
104
+ catch {
105
+ invalid('bad checksum or encoding');
106
+ }
107
+ }
108
+ const { prefix, words } = decoded;
109
+ if (prefix !== params.bech32)
110
+ invalid('it belongs to another network');
111
+ const version = words[0];
112
+ if (version === undefined || version > 16)
113
+ invalid('bad witness version');
114
+ let program = new Uint8Array();
115
+ try {
116
+ program = base_1.bech32.fromWords(words.slice(1));
117
+ }
118
+ catch {
119
+ invalid('bad witness program padding');
120
+ }
121
+ if (version === 0) {
122
+ if (variant !== 'bech32')
123
+ invalid('witness v0 must use bech32');
124
+ if (program.length === 20)
125
+ return {
126
+ type: 'p2wpkh',
127
+ canonical: lower,
128
+ script: outputScript('p2wpkh', program),
129
+ };
130
+ if (program.length === 32)
131
+ return { type: 'p2wsh', canonical: lower, script: outputScript('p2wsh', program) };
132
+ return invalid('bad witness v0 program length');
133
+ }
134
+ if (variant !== 'bech32m')
135
+ invalid('witness v1+ must use bech32m');
136
+ if (version === 1 && program.length === 32) {
137
+ if (!isXOnlyPoint(program))
138
+ invalid('taproot output key is not on the curve');
139
+ return { type: 'p2tr', canonical: lower, script: outputScript('p2tr', program) };
140
+ }
141
+ return invalid('unsupported witness version or program');
142
+ }
143
+ /** Decodes an address of this network; throws `INVALID_ADDRESS`. */
144
+ function decodeAddress(address, params) {
145
+ if (typeof address !== 'string' || address.length === 0)
146
+ invalid('empty');
147
+ if (address.length > ADDRESS_MAX)
148
+ invalid('too long');
149
+ if (!/^[0-9A-Za-z]+$/.test(address))
150
+ invalid('unexpected characters');
151
+ if (isBech32Shaped(address, params.bech32)) {
152
+ return decodeSegwit(address.toLowerCase(), params);
153
+ }
154
+ let payload = new Uint8Array();
155
+ try {
156
+ payload = base58check.decode(address);
157
+ }
158
+ catch {
159
+ // A segwit address of another network, or a mixed-case one, lands here too.
160
+ invalid('bad checksum or encoding');
161
+ }
162
+ if (payload.length !== 21)
163
+ invalid('bad payload length');
164
+ const version = payload[0];
165
+ const hash = payload.slice(1);
166
+ if (version === params.pubKeyHash)
167
+ return { type: 'p2pkh', canonical: address, script: outputScript('p2pkh', hash) };
168
+ if (version === params.scriptHash)
169
+ return { type: 'p2sh', canonical: address, script: outputScript('p2sh', hash) };
170
+ return invalid('it belongs to another network');
171
+ }
172
+ /**
173
+ * The address an output script pays on this network: the inverse of `outputScript` for the
174
+ * five standard types, as `decodeAddress` returns it. Any other script (a bare key or
175
+ * multisig, a data carrier, a future witness version or program length) has no address, and
176
+ * neither has a taproot key off the curve, which `decodeAddress` refuses.
177
+ */
178
+ function addressFromScript(script, params) {
179
+ const [b0, b1, b2] = script;
180
+ const n = script.length;
181
+ let type;
182
+ let program;
183
+ if (n === 25 &&
184
+ b0 === 0x76 &&
185
+ b1 === 0xa9 &&
186
+ b2 === 0x14 &&
187
+ script[23] === 0x88 &&
188
+ script[24] === 0xac) {
189
+ type = 'p2pkh';
190
+ program = script.slice(3, 23);
191
+ }
192
+ else if (n === 23 && b0 === 0xa9 && b1 === 0x14 && script[22] === 0x87) {
193
+ type = 'p2sh';
194
+ program = script.slice(2, 22);
195
+ }
196
+ else if (n === 22 && b0 === 0x00 && b1 === 0x14) {
197
+ type = 'p2wpkh';
198
+ program = script.slice(2);
199
+ }
200
+ else if (n === 34 && b0 === 0x00 && b1 === 0x20) {
201
+ type = 'p2wsh';
202
+ program = script.slice(2);
203
+ }
204
+ else if (n === 34 && b0 === 0x51 && b1 === 0x20 && isXOnlyPoint(script.slice(2))) {
205
+ type = 'p2tr';
206
+ program = script.slice(2);
207
+ }
208
+ else {
209
+ return undefined;
210
+ }
211
+ const canonical = type === 'p2pkh' || type === 'p2sh'
212
+ ? base58check.encode((0, bytes_1.concatBytes)(Uint8Array.of(type === 'p2pkh' ? params.pubKeyHash : params.scriptHash), program))
213
+ : type === 'p2tr'
214
+ ? base_1.bech32m.encode(params.bech32, [1, ...base_1.bech32m.toWords(program)])
215
+ : base_1.bech32.encode(params.bech32, [0, ...base_1.bech32.toWords(program)]);
216
+ return { type, canonical, script: outputScript(type, program) };
217
+ }
218
+ /**
219
+ * Accepts only a 33-byte compressed key on the curve; a 32-byte x-only key only for
220
+ * `p2tr` (a Schnorr-only signer's key). Never a private key, never an uncompressed key.
221
+ */
222
+ function compressedKey(publicKey, type) {
223
+ if (publicKey.length === 32 && type === 'p2tr') {
224
+ if (!isXOnlyPoint(publicKey))
225
+ invalid('the x-only public key is not on the curve');
226
+ return (0, bytes_1.concatBytes)(Uint8Array.of(0x02), publicKey);
227
+ }
228
+ if (publicKey.length !== 33 || (publicKey[0] !== 0x02 && publicKey[0] !== 0x03)) {
229
+ invalid('a public key must be 33-byte compressed');
230
+ }
231
+ try {
232
+ secp256k1_1.secp256k1.ProjectivePoint.fromHex(publicKey).assertValidity();
233
+ }
234
+ catch {
235
+ invalid('the public key is not on the curve');
236
+ }
237
+ return publicKey;
238
+ }
239
+ /** BIP341/BIP86 key-path tweak of an internal key with no script tree. */
240
+ function taprootTweak(internalKey) {
241
+ if (!isXOnlyPoint(internalKey))
242
+ invalid('the taproot internal key is not an x-only point');
243
+ const point = secp256k1_1.schnorr.utils.lift_x(secp256k1_1.schnorr.utils.bytesToNumberBE(internalKey));
244
+ const tweak = secp256k1_1.schnorr.utils.taggedHash('TapTweak', internalKey);
245
+ const t = secp256k1_1.schnorr.utils.bytesToNumberBE(tweak);
246
+ if (t >= secp256k1_1.secp256k1.CURVE.n)
247
+ invalid('the taproot tweak is out of range');
248
+ const output = point.add(secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(t));
249
+ if (output.equals(secp256k1_1.secp256k1.ProjectivePoint.ZERO))
250
+ invalid('the taproot output key is infinity');
251
+ return { tweak, outputKey: output.toRawBytes(true).slice(1) };
252
+ }
253
+ /** The wallet address of `type` for this public key. */
254
+ function walletAddress(publicKey, type, params) {
255
+ const key = compressedKey(publicKey, type);
256
+ switch (type) {
257
+ case 'p2wpkh': {
258
+ const program = (0, exports.hash160)(key);
259
+ return {
260
+ address: base_1.bech32.encode(params.bech32, [0, ...base_1.bech32.toWords(program)]),
261
+ type,
262
+ script: outputScript('p2wpkh', program),
263
+ publicKey: key,
264
+ };
265
+ }
266
+ case 'p2sh-p2wpkh': {
267
+ const redeemScript = outputScript('p2wpkh', (0, exports.hash160)(key));
268
+ const hash = (0, exports.hash160)(redeemScript);
269
+ return {
270
+ address: base58check.encode((0, bytes_1.concatBytes)(Uint8Array.of(params.scriptHash), hash)),
271
+ type,
272
+ script: outputScript('p2sh', hash),
273
+ publicKey: key,
274
+ redeemScript,
275
+ };
276
+ }
277
+ case 'p2pkh': {
278
+ const hash = (0, exports.hash160)(key);
279
+ return {
280
+ address: base58check.encode((0, bytes_1.concatBytes)(Uint8Array.of(params.pubKeyHash), hash)),
281
+ type,
282
+ script: outputScript('p2pkh', hash),
283
+ publicKey: key,
284
+ };
285
+ }
286
+ case 'p2tr': {
287
+ const internalKey = key.slice(1);
288
+ const { tweak, outputKey } = taprootTweak(internalKey);
289
+ return {
290
+ address: base_1.bech32m.encode(params.bech32, [1, ...base_1.bech32m.toWords(outputKey)]),
291
+ type,
292
+ script: outputScript('p2tr', outputKey),
293
+ publicKey: internalKey,
294
+ tweak,
295
+ outputKey,
296
+ };
297
+ }
298
+ }
299
+ }
300
+ /** The wallet address type a sending address implies (a p2sh wallet is p2sh-p2wpkh). */
301
+ function walletTypeOf(decoded) {
302
+ switch (decoded.type) {
303
+ case 'p2wpkh':
304
+ return 'p2wpkh';
305
+ case 'p2sh':
306
+ return 'p2sh-p2wpkh';
307
+ case 'p2pkh':
308
+ return 'p2pkh';
309
+ case 'p2tr':
310
+ return 'p2tr';
311
+ case 'p2wsh':
312
+ throw new error_1.ValidationError('INVALID_INTENT', 'p2wsh (script) wallets cannot send; use p2wpkh, p2sh-p2wpkh, p2pkh or p2tr');
313
+ }
314
+ }
315
+ const OP_RETURN = 0x6a;
316
+ /** Bitcoin Core's `MAX_SCRIPT_SIZE`: a longer script can never be spent. */
317
+ const MAX_SCRIPT_SIZE = 10_000;
318
+ /** The byte length of Bitcoin's CompactSize encoding of `n` (a count or a length). */
319
+ const compactSize = (n) => n < 0xfd ? 1 : n <= 0xffff ? 3 : n <= 0xffffffff ? 5 : 9;
320
+ exports.compactSize = compactSize;
321
+ /**
322
+ * Bitcoin Core's `GetDustThreshold` (policy.cpp) at `dustRelayFee` sat/kvB, rounded up.
323
+ * An unspendable script (`IsUnspendable`: OP_RETURN first, or over `MAX_SCRIPT_SIZE`) has
324
+ * no dust threshold.
325
+ */
326
+ function dustThreshold(script, dustRelayFee) {
327
+ if (script[0] === OP_RETURN || script.length > MAX_SCRIPT_SIZE)
328
+ return 0n;
329
+ const size = BigInt(8 + (0, exports.compactSize)(script.length) + script.length);
330
+ return ((size + (isWitnessProgram(script) ? 67n : 148n)) * dustRelayFee + 999n) / 1000n;
331
+ }
332
+ /** Bitcoin Core's `IsWitnessProgram`: a version opcode, then one push of 2 to 40 bytes. */
333
+ function isWitnessProgram(script) {
334
+ const version = script[0];
335
+ if (script.length < 4 || script.length > 42 || version === undefined)
336
+ return false;
337
+ if (version !== 0x00 && (version < 0x51 || version > 0x60))
338
+ return false;
339
+ return script[1] === script.length - 2;
340
+ }
341
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/adapters/utxo/address.ts"],"names":[],"mappings":";;;AAkDA,oCAoBC;AAGD,oCAQC;AA4DD,sCAsBC;AAQD,8CA6CC;AAuBD,oCAcC;AAgBD,sCAiDC;AAGD,oCAgBC;AAeD,sCAIC;AApWD;;;;;;;;GAQG;AACH,uDAA6D;AAC7D,uDAAoD;AACpD,iDAA8C;AAC9C,sCAAiE;AACjE,mDAA0D;AAC1D,iDAAoD;AAYpD,MAAM,WAAW,GAAG,IAAA,wBAAiB,EAAC,eAAM,CAAC,CAAC;AAC9C;;;;GAIG;AACH,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,YAAY,GAAG,uCAAuC,CAAC;AAC7D,iEAAiE;AACjE,MAAM,cAAc,GAA6C,MAAM,CAAC,MAAM,CAAC;IAC7E,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;CACT,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,MAAc,EAAS,EAAE;IACxC,MAAM,IAAI,uBAAe,CAAC,iBAAiB,EAAE,4BAA4B,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAc,EAAE,CAAC,IAAA,qBAAS,EAAC,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,CAAC;AAApE,QAAA,OAAO,WAA6D;AAEjF,yFAAyF;AACzF,SAAgB,YAAY,CAAC,IAAoB,EAAE,OAAmB;IACpE,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACrD,CAAC;IACD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAA,mBAAW,EAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC/B,OAAO,EACP,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAC1B,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,KAAK,QAAQ;YACX,OAAO,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,KAAK,OAAO;YACV,OAAO,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,KAAK,MAAM;YACT,OAAO,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAgB,YAAY,CAAC,KAAiB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC;QACH,mBAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE;QAAE,OAAO,KAAK,CAAC;IACzE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,KAAa,EAAE,MAAqB;IACxD,IAAI,OAAwD,CAAC;IAC7D,IAAI,OAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,GAAG,aAAM,CAAC,MAAM,CAAC,KAA8B,EAAE,WAAW,CAAC,CAAC;QACrE,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,GAAG,cAAO,CAAC,MAAM,CAAC,KAA8B,EAAE,WAAW,CAAC,CAAC;YACtE,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAA8C,CAAC;IACzE,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1E,IAAI,OAAO,GAAe,IAAI,UAAU,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,GAAG,aAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,IAAI,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YACvB,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;aACxC,CAAC;QACJ,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YACvB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACrF,OAAO,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACnE,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,OAAO,CAAC,wCAAwC,CAAC,CAAC;AAC3D,CAAC;AAED,oEAAoE;AACpE,SAAgB,aAAa,CAAC,OAAe,EAAE,MAAqB;IAClE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtE,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,GAAe,IAAI,UAAU,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,KAAK,MAAM,CAAC,UAAU;QAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;IACpF,IAAI,OAAO,KAAK,MAAM,CAAC,UAAU;QAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;IAClF,OAAO,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,MAAkB,EAClB,MAAqB;IAErB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,IAAI,IAAoB,CAAC;IACzB,IAAI,OAAmB,CAAC;IACxB,IACE,CAAC,KAAK,EAAE;QACR,EAAE,KAAK,IAAI;QACX,EAAE,KAAK,IAAI;QACX,EAAE,KAAK,IAAI;QACX,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI;QACnB,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EACnB,CAAC;QACD,IAAI,GAAG,OAAO,CAAC;QACf,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACzE,IAAI,GAAG,MAAM,CAAC;QACd,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,GAAG,QAAQ,CAAC;QAChB,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,GAAG,OAAO,CAAC;QACf,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,IAAI,GAAG,MAAM,CAAC;QACd,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GACb,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM;QACjC,CAAC,CAAC,WAAW,CAAC,MAAM,CAChB,IAAA,mBAAW,EACT,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACvE,OAAO,CACR,CACF;QACH,CAAC,CAAC,IAAI,KAAK,MAAM;YACf,CAAC,CAAC,cAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,cAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,aAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,aAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,SAAqB,EAAE,IAAqB;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACnF,OAAO,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC;QACH,qBAAS,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,0EAA0E;AAC1E,SAAgB,YAAY,CAAC,WAAuB;IAIlD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAC5B,OAAO,CAAC,iDAAiD,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,mBAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,mBAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,mBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,qBAAS,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,IAAI,CAAC;QAC/C,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAeD,wDAAwD;AACxD,SAAgB,aAAa,CAC3B,SAAqB,EACrB,IAAqB,EACrB,MAAqB;IAErB,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,aAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,aAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtE,IAAI;gBACJ,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACvC,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC,YAAY,CAAC,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;gBAChF,IAAI;gBACJ,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;gBAClC,SAAS,EAAE,GAAG;gBACd,YAAY;aACb,CAAC;QACJ,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,IAAA,mBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;gBAChF,IAAI;gBACJ,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;gBACnC,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,cAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,cAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC1E,IAAI;gBACJ,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC;gBACvC,SAAS,EAAE,WAAW;gBACtB,KAAK;gBACL,SAAS;aACV,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,SAAgB,YAAY,CAAC,OAAuB;IAClD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,IAAI,uBAAe,CACvB,gBAAgB,EAChB,4EAA4E,CAC7E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,4EAA4E;AAC5E,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,sFAAsF;AAC/E,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAC/C,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAD9C,QAAA,WAAW,eACmC;AAE3D;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAkB,EAAE,YAAoB;IACpE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,eAAe;QAAE,OAAO,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;AAC1F,CAAC;AAED,2FAA2F;AAC3F,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzE,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,CAAC","sourcesContent":["/**\n * Bitcoin addresses and output scripts, SDK-free (`@scure/base`, `@noble/*`), so the codec\n * is an implementation independent of bitcoinjs-lib, which the tests cross-check it\n * against. Decoding is strict: at most 90 characters, refused before any decoding, one\n * network's HRP and base58 version bytes,\n * bech32 only for witness v0 and bech32m only for v1 (BIP350), exact program lengths, no\n * mixed case, and a taproot output key must be a valid x coordinate. Every failure is\n * `ValidationError('INVALID_ADDRESS')` with a message that names no address.\n */\nimport { schnorr, secp256k1 } from '@noble/curves/secp256k1';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { bech32, bech32m, createBase58check } from '@scure/base';\nimport { ValidationError } from '../../core/errors/error';\nimport { concatBytes } from '../../core/util/bytes';\nimport type { AddressParams, UtxoAddressType, UtxoOutputType } from './types';\n\nexport type { AddressParams } from './types';\n\nexport interface DecodedAddress {\n readonly type: UtxoOutputType;\n /** Lowercase bech32, or the base58 string as given. */\n readonly canonical: string;\n readonly script: Uint8Array;\n}\n\nconst base58check = createBase58check(sha256);\n/**\n * BIP173's bech32 limit, and more than any base58 address needs. `@scure/base`'s base58\n * decoding is quadratic, so an untrusted string is capped before any decoding: a\n * 10,000-character recipient once blocked the event loop for over a minute.\n */\nconst ADDRESS_MAX = 90;\nconst BECH32_CHARS = /^[qpzry9x8gf2tvdw0s3jn54khce6mua7l]+$/;\n/** The program length each output script's push byte encodes. */\nconst PROGRAM_LENGTH: Readonly<Record<UtxoOutputType, number>> = Object.freeze({\n p2pkh: 20,\n p2sh: 20,\n p2wpkh: 20,\n p2wsh: 32,\n p2tr: 32,\n});\n\nconst invalid = (reason: string): never => {\n throw new ValidationError('INVALID_ADDRESS', `invalid Bitcoin address: ${reason}`);\n};\n\nexport const hash160 = (data: Uint8Array): Uint8Array => ripemd160(sha256(data));\n\n/** The standard output script of each type; the program must have that type's length. */\nexport function outputScript(type: UtxoOutputType, program: Uint8Array): Uint8Array {\n if (program.length !== PROGRAM_LENGTH[type]) {\n invalid('the output program has the wrong length');\n }\n switch (type) {\n case 'p2pkh':\n return concatBytes(\n Uint8Array.of(0x76, 0xa9, 0x14),\n program,\n Uint8Array.of(0x88, 0xac),\n );\n case 'p2sh':\n return concatBytes(Uint8Array.of(0xa9, 0x14), program, Uint8Array.of(0x87));\n case 'p2wpkh':\n return concatBytes(Uint8Array.of(0x00, 0x14), program);\n case 'p2wsh':\n return concatBytes(Uint8Array.of(0x00, 0x20), program);\n case 'p2tr':\n return concatBytes(Uint8Array.of(0x51, 0x20), program);\n }\n}\n\n/** Whether 32 bytes are the x coordinate of a curve point (BIP340 `lift_x`). */\nexport function isXOnlyPoint(bytes: Uint8Array): boolean {\n if (bytes.length !== 32) return false;\n try {\n schnorr.utils.lift_x(schnorr.utils.bytesToNumberBE(bytes));\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Whether an address starting with this network's `<hrp>1` has the shape of bech32: one case,\n * and only bech32 characters after the separator. A custom network's base58 address can\n * start with `<hrp>1` too; it is not bech32-shaped, so it takes the base58 path.\n */\nfunction isBech32Shaped(address: string, hrp: string): boolean {\n const lower = address.toLowerCase();\n if (!lower.startsWith(`${hrp}1`)) return false;\n if (address !== lower && address !== address.toUpperCase()) return false;\n return BECH32_CHARS.test(lower.slice(hrp.length + 1));\n}\n\n/** Decodes a bech32-shaped address, already lowercased (BIP173 allows either case). */\nfunction decodeSegwit(lower: string, params: AddressParams): DecodedAddress {\n let decoded: { prefix: string; words: number[] } | undefined;\n let variant: 'bech32' | 'bech32m' | undefined;\n try {\n decoded = bech32.decode(lower as `${string}1${string}`, ADDRESS_MAX);\n variant = 'bech32';\n } catch {\n try {\n decoded = bech32m.decode(lower as `${string}1${string}`, ADDRESS_MAX);\n variant = 'bech32m';\n } catch {\n invalid('bad checksum or encoding');\n }\n }\n const { prefix, words } = decoded as { prefix: string; words: number[] };\n if (prefix !== params.bech32) invalid('it belongs to another network');\n const version = words[0];\n if (version === undefined || version > 16) invalid('bad witness version');\n let program: Uint8Array = new Uint8Array();\n try {\n program = bech32.fromWords(words.slice(1));\n } catch {\n invalid('bad witness program padding');\n }\n if (version === 0) {\n if (variant !== 'bech32') invalid('witness v0 must use bech32');\n if (program.length === 20)\n return {\n type: 'p2wpkh',\n canonical: lower,\n script: outputScript('p2wpkh', program),\n };\n if (program.length === 32)\n return { type: 'p2wsh', canonical: lower, script: outputScript('p2wsh', program) };\n return invalid('bad witness v0 program length');\n }\n if (variant !== 'bech32m') invalid('witness v1+ must use bech32m');\n if (version === 1 && program.length === 32) {\n if (!isXOnlyPoint(program)) invalid('taproot output key is not on the curve');\n return { type: 'p2tr', canonical: lower, script: outputScript('p2tr', program) };\n }\n return invalid('unsupported witness version or program');\n}\n\n/** Decodes an address of this network; throws `INVALID_ADDRESS`. */\nexport function decodeAddress(address: string, params: AddressParams): DecodedAddress {\n if (typeof address !== 'string' || address.length === 0) invalid('empty');\n if (address.length > ADDRESS_MAX) invalid('too long');\n if (!/^[0-9A-Za-z]+$/.test(address)) invalid('unexpected characters');\n if (isBech32Shaped(address, params.bech32)) {\n return decodeSegwit(address.toLowerCase(), params);\n }\n let payload: Uint8Array = new Uint8Array();\n try {\n payload = base58check.decode(address);\n } catch {\n // A segwit address of another network, or a mixed-case one, lands here too.\n invalid('bad checksum or encoding');\n }\n if (payload.length !== 21) invalid('bad payload length');\n const version = payload[0];\n const hash = payload.slice(1);\n if (version === params.pubKeyHash)\n return { type: 'p2pkh', canonical: address, script: outputScript('p2pkh', hash) };\n if (version === params.scriptHash)\n return { type: 'p2sh', canonical: address, script: outputScript('p2sh', hash) };\n return invalid('it belongs to another network');\n}\n\n/**\n * The address an output script pays on this network: the inverse of `outputScript` for the\n * five standard types, as `decodeAddress` returns it. Any other script (a bare key or\n * multisig, a data carrier, a future witness version or program length) has no address, and\n * neither has a taproot key off the curve, which `decodeAddress` refuses.\n */\nexport function addressFromScript(\n script: Uint8Array,\n params: AddressParams,\n): DecodedAddress | undefined {\n const [b0, b1, b2] = script;\n const n = script.length;\n let type: UtxoOutputType;\n let program: Uint8Array;\n if (\n n === 25 &&\n b0 === 0x76 &&\n b1 === 0xa9 &&\n b2 === 0x14 &&\n script[23] === 0x88 &&\n script[24] === 0xac\n ) {\n type = 'p2pkh';\n program = script.slice(3, 23);\n } else if (n === 23 && b0 === 0xa9 && b1 === 0x14 && script[22] === 0x87) {\n type = 'p2sh';\n program = script.slice(2, 22);\n } else if (n === 22 && b0 === 0x00 && b1 === 0x14) {\n type = 'p2wpkh';\n program = script.slice(2);\n } else if (n === 34 && b0 === 0x00 && b1 === 0x20) {\n type = 'p2wsh';\n program = script.slice(2);\n } else if (n === 34 && b0 === 0x51 && b1 === 0x20 && isXOnlyPoint(script.slice(2))) {\n type = 'p2tr';\n program = script.slice(2);\n } else {\n return undefined;\n }\n const canonical =\n type === 'p2pkh' || type === 'p2sh'\n ? base58check.encode(\n concatBytes(\n Uint8Array.of(type === 'p2pkh' ? params.pubKeyHash : params.scriptHash),\n program,\n ),\n )\n : type === 'p2tr'\n ? bech32m.encode(params.bech32, [1, ...bech32m.toWords(program)])\n : bech32.encode(params.bech32, [0, ...bech32.toWords(program)]);\n return { type, canonical, script: outputScript(type, program) };\n}\n\n/**\n * Accepts only a 33-byte compressed key on the curve; a 32-byte x-only key only for\n * `p2tr` (a Schnorr-only signer's key). Never a private key, never an uncompressed key.\n */\nfunction compressedKey(publicKey: Uint8Array, type: UtxoAddressType): Uint8Array {\n if (publicKey.length === 32 && type === 'p2tr') {\n if (!isXOnlyPoint(publicKey)) invalid('the x-only public key is not on the curve');\n return concatBytes(Uint8Array.of(0x02), publicKey);\n }\n if (publicKey.length !== 33 || (publicKey[0] !== 0x02 && publicKey[0] !== 0x03)) {\n invalid('a public key must be 33-byte compressed');\n }\n try {\n secp256k1.ProjectivePoint.fromHex(publicKey).assertValidity();\n } catch {\n invalid('the public key is not on the curve');\n }\n return publicKey;\n}\n\n/** BIP341/BIP86 key-path tweak of an internal key with no script tree. */\nexport function taprootTweak(internalKey: Uint8Array): {\n readonly tweak: Uint8Array;\n readonly outputKey: Uint8Array;\n} {\n if (!isXOnlyPoint(internalKey))\n invalid('the taproot internal key is not an x-only point');\n const point = schnorr.utils.lift_x(schnorr.utils.bytesToNumberBE(internalKey));\n const tweak = schnorr.utils.taggedHash('TapTweak', internalKey);\n const t = schnorr.utils.bytesToNumberBE(tweak);\n if (t >= secp256k1.CURVE.n) invalid('the taproot tweak is out of range');\n const output = point.add(secp256k1.ProjectivePoint.BASE.multiply(t));\n if (output.equals(secp256k1.ProjectivePoint.ZERO))\n invalid('the taproot output key is infinity');\n return { tweak, outputKey: output.toRawBytes(true).slice(1) };\n}\n\nexport interface WalletAddress {\n readonly address: string;\n readonly type: UtxoAddressType;\n readonly script: Uint8Array;\n /** The key the wallet signs with: compressed (ECDSA) or x-only internal key (p2tr). */\n readonly publicKey: Uint8Array;\n /** p2sh-p2wpkh: the redeem script pushed in the scriptSig. */\n readonly redeemScript?: Uint8Array;\n /** p2tr: the BIP341 tweak and the tweaked output key the signature verifies against. */\n readonly tweak?: Uint8Array;\n readonly outputKey?: Uint8Array;\n}\n\n/** The wallet address of `type` for this public key. */\nexport function walletAddress(\n publicKey: Uint8Array,\n type: UtxoAddressType,\n params: AddressParams,\n): WalletAddress {\n const key = compressedKey(publicKey, type);\n switch (type) {\n case 'p2wpkh': {\n const program = hash160(key);\n return {\n address: bech32.encode(params.bech32, [0, ...bech32.toWords(program)]),\n type,\n script: outputScript('p2wpkh', program),\n publicKey: key,\n };\n }\n case 'p2sh-p2wpkh': {\n const redeemScript = outputScript('p2wpkh', hash160(key));\n const hash = hash160(redeemScript);\n return {\n address: base58check.encode(concatBytes(Uint8Array.of(params.scriptHash), hash)),\n type,\n script: outputScript('p2sh', hash),\n publicKey: key,\n redeemScript,\n };\n }\n case 'p2pkh': {\n const hash = hash160(key);\n return {\n address: base58check.encode(concatBytes(Uint8Array.of(params.pubKeyHash), hash)),\n type,\n script: outputScript('p2pkh', hash),\n publicKey: key,\n };\n }\n case 'p2tr': {\n const internalKey = key.slice(1);\n const { tweak, outputKey } = taprootTweak(internalKey);\n return {\n address: bech32m.encode(params.bech32, [1, ...bech32m.toWords(outputKey)]),\n type,\n script: outputScript('p2tr', outputKey),\n publicKey: internalKey,\n tweak,\n outputKey,\n };\n }\n }\n}\n\n/** The wallet address type a sending address implies (a p2sh wallet is p2sh-p2wpkh). */\nexport function walletTypeOf(decoded: DecodedAddress): UtxoAddressType {\n switch (decoded.type) {\n case 'p2wpkh':\n return 'p2wpkh';\n case 'p2sh':\n return 'p2sh-p2wpkh';\n case 'p2pkh':\n return 'p2pkh';\n case 'p2tr':\n return 'p2tr';\n case 'p2wsh':\n throw new ValidationError(\n 'INVALID_INTENT',\n 'p2wsh (script) wallets cannot send; use p2wpkh, p2sh-p2wpkh, p2pkh or p2tr',\n );\n }\n}\n\nconst OP_RETURN = 0x6a;\n/** Bitcoin Core's `MAX_SCRIPT_SIZE`: a longer script can never be spent. */\nconst MAX_SCRIPT_SIZE = 10_000;\n\n/** The byte length of Bitcoin's CompactSize encoding of `n` (a count or a length). */\nexport const compactSize = (n: number): number =>\n n < 0xfd ? 1 : n <= 0xffff ? 3 : n <= 0xffffffff ? 5 : 9;\n\n/**\n * Bitcoin Core's `GetDustThreshold` (policy.cpp) at `dustRelayFee` sat/kvB, rounded up.\n * An unspendable script (`IsUnspendable`: OP_RETURN first, or over `MAX_SCRIPT_SIZE`) has\n * no dust threshold.\n */\nexport function dustThreshold(script: Uint8Array, dustRelayFee: bigint): bigint {\n if (script[0] === OP_RETURN || script.length > MAX_SCRIPT_SIZE) return 0n;\n const size = BigInt(8 + compactSize(script.length) + script.length);\n return ((size + (isWitnessProgram(script) ? 67n : 148n)) * dustRelayFee + 999n) / 1000n;\n}\n\n/** Bitcoin Core's `IsWitnessProgram`: a version opcode, then one push of 2 to 40 bytes. */\nfunction isWitnessProgram(script: Uint8Array): boolean {\n const version = script[0];\n if (script.length < 4 || script.length > 42 || version === undefined) return false;\n if (version !== 0x00 && (version < 0x51 || version > 0x60)) return false;\n return script[1] === script.length - 2;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The UTXO builder, broadcaster and RBF replacement policy.
3
+ *
4
+ * - `build` spends only outputs not held by another live Operation (`ctx.excludeInputs`),
5
+ * pays change to the wallet's change address, and records the spent outpoints as the
6
+ * `inputs` ordering. The fee is `exact` once built; the absurd-fee guard runs first.
7
+ * - Every input a build, a replacement or a cancel spends is authenticated against its
8
+ * previous transaction first: the indexer's value and script count only when the
9
+ * bytes that hash to the outpoint's txid say the same. A lied value could burn the
10
+ * difference as fee, or make our own signed bytes invalid for good and stall the
11
+ * Operation with its inputs held.
12
+ * - Replacements and cancels keep EVERY input of the Attempt they replace (and may add
13
+ * confirmed ones), so each new Attempt conflicts with every earlier one (exclusion is
14
+ * not transitive). Neither ever raises a fee on its own: a fee below the
15
+ * replacement floor is `FEE_TOO_LOW`.
16
+ * - A cancel pays everything back to the sending address itself.
17
+ * - Broadcast answers are classified by `errors.ts`; an ambiguous transport failure is
18
+ * rethrown unclassified. A node's rejection is a claim: it stands only when its reason
19
+ * holds for the bytes that were sent, checked here; else `refused`. A terminal
20
+ * `rejected` frees the inputs, so a lying endpoint that relayed our valid bytes would
21
+ * let the caller's retry spend other coins, and both transactions could confirm.
22
+ */
23
+ import type { Broadcaster, ReplacementPolicy, TxBuilder } from '../../core/driver/types';
24
+ import type { RawTx, UnsignedTx } from '../../core/model/transaction';
25
+ import type { SignatureBundle } from '../../core/signing/types';
26
+ import { type UtxoContext } from './context';
27
+ import type { Network } from './sdk';
28
+ /** At most this many previous transactions are read at once for one build. */
29
+ export declare const PREVIOUS_TX_READS = 4;
30
+ export interface UtxoBuilder extends TxBuilder {
31
+ signaturesFrom(unsigned: UnsignedTx, signed: RawTx): readonly SignatureBundle[];
32
+ }
33
+ export declare function utxoBuilder(ctx: UtxoContext, network: Network): UtxoBuilder;
34
+ export declare function utxoBroadcaster(ctx: UtxoContext): Broadcaster;
35
+ export declare function utxoReplacement(ctx: UtxoContext, network: Network): ReplacementPolicy;