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 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/core/lifecycle/engine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssetService } from '../assets/service';\nimport type { ResolvedSelection } from '../config/types';\nimport type { PooledDriver } from '../container/pool';\nimport type { BroadcastResult, BuildContext, SequenceSource } from '../driver/types';\nimport {\n ChainError,\n ProviderError,\n SigningError,\n StateError,\n TimeoutError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n withContext,\n type CryptoAioError,\n} from '../errors/error';\nimport type { EventBus } from '../events/bus';\nimport type { Logger } from '../events/logger';\nimport {\n intentHash,\n toStoredIntent,\n type StoredIntent,\n type TransferIntent,\n} from '../model/intent';\nimport type { FeeOverride, FeeSpeed } from '../model/fee';\nimport { mutuallyExclusive, type OrderingData } from '../model/ordering';\nimport type { AttemptRef, UnsignedTx } from '../model/transaction';\nimport { reservedInputs, seqnoHolder } from '../ordering/reservations';\nimport {\n sequenceKey,\n type LeaseHandle,\n type SequenceCoordinator,\n} from '../ordering/sequence';\nimport { sanitizeError } from '../secret/redact';\nimport type { OrchestratedResult, SigningOrchestrator } from '../signing/orchestrator';\nimport type {\n SignatureBundle,\n SignerTicket,\n SigningContext,\n SigningPurpose,\n SigningRequest,\n} from '../signing/types';\nimport type { ResolvedWallet } from '../signing/wallet';\nimport {\n isTerminal,\n type AttemptPurpose,\n type AttemptRecord,\n type ClearableField,\n type ExecutionContext,\n type Fence,\n type OperationPatch,\n type OperationRecord,\n type OperationState,\n type Stores,\n} from '../store/types';\nimport { randomId } from '../util/bytes';\nimport { abortReason, type Clock } from '../util/clock';\nimport { canonicalJson, sha256Hex } from '../util/json';\nimport {\n CHAIN_EVIDENCE_STATES,\n CONFLICTABLE_STATES,\n LEASED_ORDERINGS,\n LIVE_STATES,\n NODE_REFUSED_STATES,\n PRE_SIGNING_STATES,\n REBUILDABLE_STATES,\n RESUMABLE_STATES,\n assertBuiltOrdering,\n awaitsBroadcast,\n cancelBase,\n errorCode,\n isDefinitive,\n isRefusal,\n mayBeLive,\n pendingAfterSend,\n rehydrateError,\n sameFeeSpec,\n serializeError,\n withRequestedFee,\n type ResolvedLifecycle,\n type RestorePoint,\n} from './engine-rules';\nimport { normalizeIntent, validateFee } from './intent';\nimport {\n writeObservation,\n type ObservationDeps,\n type ObservationPatch,\n} from './observations';\nimport * as reconcile from './reconcile';\n\n/** What read-only lifecycle work (monitoring, waiting) needs: no wallet required. */\nexport interface ReadTarget {\n readonly selection: ResolvedSelection;\n readonly pooled: PooledDriver;\n}\n\nexport interface OperationTarget extends ReadTarget {\n readonly wallet: ResolvedWallet;\n readonly assets: AssetService;\n}\n\nexport interface TransferOptions {\n readonly idempotencyKey?: string;\n readonly signal?: AbortSignal;\n}\n\nexport {\n LIFECYCLE_DEFAULTS,\n PRE_SIGNING_STATES,\n errorCode,\n rehydrateError,\n serializeError,\n withLifecycleDefaults,\n type ResolvedLifecycle,\n} from './engine-rules';\n\nexport interface EngineDeps {\n readonly namespace: string;\n readonly stores: Stores;\n readonly events: EventBus;\n readonly clock: Clock;\n readonly log: Logger;\n readonly orchestrator: SigningOrchestrator;\n readonly sequences: SequenceCoordinator;\n readonly lifecycle: () => ResolvedLifecycle;\n}\n\nexport class OperationEngine {\n constructor(protected readonly deps: EngineDeps) {}\n\n get namespace(): string {\n return this.deps.namespace;\n }\n\n /** Builds and persists the unsigned transaction; runs the policy hook. Idempotent per key. */\n async prepare(\n target: OperationTarget,\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<OperationRecord> {\n const { record, stored } = await this.open(target, intent, options);\n let current = record;\n if (current.state === 'created' || current.state === 'prepared') {\n // The policy check and its failure transition run under the address lease too,\n // and a repeat of a `prepared` Operation (e.g. after a lost ack) is authorized again.\n current = await this.withAddressLease(\n target,\n record,\n async (lease) => {\n let fresh = await this.require(record.id);\n if (fresh.state === 'created') {\n fresh = await this.prepareStage(target, fresh, stored, lease, options.signal);\n }\n if (fresh.state === 'prepared') {\n await this.authorizeOrFail(target, fresh, lease, options.signal);\n }\n return fresh;\n },\n options.signal,\n );\n }\n return this.settle(current);\n }\n\n /**\n * Idempotent transfer: prepare → sign → persist the Attempt (write-ahead) → broadcast.\n * A repeat resumes where the Operation stopped and never signs an Attempt twice.\n */\n async transfer(\n target: OperationTarget,\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<OperationRecord> {\n if (target.wallet.watchOnly) {\n throw new SigningError(\n 'SIGNER_UNAVAILABLE',\n `wallet '${target.wallet.name}' is watch-only; use prepareTransfer and submitSignatures`,\n );\n }\n const { record, stored } = await this.open(target, intent, options);\n return this.drive(target, record, stored, options.signal);\n }\n\n /**\n * Adds externally produced signatures (cold, offline, MPC); completes and broadcasts once\n * every request is signed. Under the address lease, and the `beforeSign` policy is\n * asked again first (defence in depth): a veto fails the Operation, releases its nonce and\n * cancels its signer tickets, as a veto before signing does.\n */\n async submitSignatures(\n target: OperationTarget,\n operationId: string,\n signatures: readonly SignatureBundle[],\n ): Promise<OperationRecord> {\n let vetoed: readonly SignerTicket[] = [];\n try {\n const listed = await this.require(operationId);\n const done = await this.withOperationLease(target, listed, async (lease) => {\n const op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n if (op.state !== 'prepared' && op.state !== 'awaiting-signature') {\n throw new StateError(\n 'INVALID_TRANSITION',\n `cannot submit signatures in state '${op.state}'`,\n { context: { operationId } },\n );\n }\n const unsigned = op.unsigned as UnsignedTx;\n const requests = unsigned.signingRequests;\n const merged = this.deps.orchestrator.accept(\n requests,\n signatures,\n this.usablePartials(op, requests),\n );\n const ctx = this.signingContext(target, op, unsigned, 'original');\n try {\n await this.signingDeadline(op, lease, undefined, () =>\n this.deps.orchestrator.authorize(ctx),\n );\n } catch (error) {\n if (isCryptoAioError(error, 'POLICY_REJECTED')) {\n await this.failAfterPrepare(target, op, error, lease);\n vetoed = op.signerTickets ?? [];\n }\n throw error;\n }\n if (merged.length < requests.length) {\n await lease?.renew();\n return this.update(op, {\n state: 'awaiting-signature',\n partialSignatures: merged,\n });\n }\n const signed = await this.appendSigned(\n target,\n op,\n unsigned,\n merged,\n 'original',\n undefined,\n lease,\n );\n return awaitsBroadcast(signed)\n ? this.broadcastActive(target, signed, undefined, lease)\n : signed;\n });\n return this.settle(done);\n } finally {\n // Only after a veto's terminal write landed, and after the lease is dropped.\n await this.cancelTickets(target, operationId, vetoed);\n }\n }\n\n /**\n * Resends the SAME stored raw bytes of the active Attempt (never builds or signs), under\n * the address lease. A refused replacement or cancel gives the active role back\n * to the Attempt it superseded (`resendActive`).\n */\n async rebroadcast(\n target: OperationTarget,\n operationId: string,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n const listed = await this.require(operationId);\n return this.withAddressLease(\n target,\n listed,\n async (lease) => {\n const op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n if (\n isTerminal(op.state) ||\n PRE_SIGNING_STATES.has(op.state) ||\n !op.activeAttemptId\n ) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `nothing to rebroadcast in state '${op.state}'`,\n { context: { operationId } },\n );\n }\n return this.resendActive(target, op, signal, lease);\n },\n signal,\n );\n }\n\n /**\n * Only before any signed bytes exist. Under the address lease: re-reads the\n * Operation, renews the lease (a lost lease fails before any write), marks it\n * `abandoned` and releases its reservation. Pending signer tickets are cancelled after\n * the lease is dropped, even when the release failed.\n */\n async abandon(target: OperationTarget, operationId: string): Promise<OperationRecord> {\n let tickets: readonly SignerTicket[] = [];\n try {\n const listed = await this.require(operationId);\n return await this.withAddressLease(target, listed, async (lease) => {\n const op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n if (!PRE_SIGNING_STATES.has(op.state)) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `cannot abandon an operation in state '${op.state}'`,\n { context: { operationId } },\n );\n }\n await lease?.renew();\n const next = await this.update(op, {\n state: 'abandoned',\n clear: ['partialSignatures', 'signerTickets'],\n });\n tickets = op.signerTickets ?? [];\n await this.releaseReservation(op, lease);\n return next;\n });\n } finally {\n await this.cancelTickets(target, operationId, tickets);\n }\n }\n\n /** Best effort, through the signer that issued each ticket; failures log codes only. */\n protected async cancelTickets(\n target: OperationTarget,\n operationId: string,\n tickets: readonly SignerTicket[],\n ): Promise<void> {\n for (const { signerId, ticket } of tickets) {\n const issuer = target.wallet.signerById(signerId);\n if (!issuer) {\n this.deps.log.warn('signer cancelRequest failed', {\n operationId,\n signerId,\n code: 'SIGNER_UNAVAILABLE',\n });\n continue;\n }\n try {\n await issuer.signer.cancelRequest?.(ticket);\n } catch (error) {\n this.deps.log.warn('signer cancelRequest failed', {\n operationId,\n signerId,\n code: errorCode(error),\n });\n }\n }\n }\n\n /**\n * A new Attempt paying a higher fee for the same slot (same nonce or seqno,\n * or conflicting inputs). Needs the `replace-fee` capability, the driver's\n * ReplacementPolicy and a synchronous signer; `submitted` or `stalled` only. See\n * `createConflicting`.\n *\n * Idempotent per fee spec. While the active Attempt is a replacement made for the\n * same spec (the same `FeeSpeed` name, or a canonically equal `FeeOverride`), a repeat\n * signs nothing and returns it, resending its stored bytes when their broadcast was never\n * recorded or was ambiguous. A replacement for the same spec that was refused (the\n * superseded Attempt active again) is resent, never signed again; a refusal is thrown,\n * never a success. To bump again, pass another spec (e.g. a higher override).\n *\n * While the active replacement is persisted but unsent (`signed`), another fee spec\n * is refused with INVALID_TRANSITION; repeat the same spec (it is resent) or call\n * `rebroadcast` first.\n */\n async replace(\n target: OperationTarget,\n operationId: string,\n fee: FeeSpeed | FeeOverride,\n ): Promise<OperationRecord> {\n const policy = target.pooled.driver.replacement;\n const build = policy?.replace ? policy.buildReplacement?.bind(policy) : undefined;\n if (!build || !target.selection.capabilities.has('replace-fee')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${target.selection.chain.id} does not support fee replacement`,\n );\n }\n if (fee === undefined)\n throw new ValidationError('INVALID_INTENT', 'a replacement needs a fee');\n validateFee(fee);\n return this.createConflicting(\n target,\n operationId,\n 'replacement',\n fee,\n async (previous, ctx) => withRequestedFee(await build(previous, fee, ctx), fee),\n );\n }\n\n /**\n * \"Cancel\" is a conflicting transaction for the same slot (e.g. a self-transfer), not a\n * protocol primitive: the outcome is `cancelled` only when the cancel Attempt reaches\n * proven finality, and the original may still win. Capability `cancel`; `submitted` or\n * `stalled` only. It pays the driver's minimum bump over the highest-fee earlier cancel\n * (or over the active Attempt when there is none), or `fee` when given (refused below\n * that bump). See `createConflicting`.\n *\n * A repeat while a cancel is the active Attempt resends its stored bytes when their\n * broadcast was never recorded or was ambiguous, and returns it unchanged while a node\n * holds it (`pending`, `mempool`) or once it is on chain; concurrent and retried cancels\n * are idempotent. Only a cancel recorded `refused` or `dropped` is bumped by a repeat\n * (each bump climbs one step from the highest-fee cancel), so a cancel that cannot land\n * never leaves the nonce stuck. When the node's floor is more than one bump away, pass\n * `fee`: an explicit fee always builds a new cancel while none is on chain.\n *\n * While the active replacement is persisted but unsent (`signed`), a cancel is refused\n * with INVALID_TRANSITION; repeat that replacement's fee spec (it is resent) or call\n * `rebroadcast` first.\n */\n async cancel(\n target: OperationTarget,\n operationId: string,\n fee?: FeeSpeed | FeeOverride,\n ): Promise<OperationRecord> {\n const policy = target.pooled.driver.replacement;\n const build = policy?.cancel ? policy.buildCancel?.bind(policy) : undefined;\n if (!build || !target.selection.capabilities.has('cancel')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${target.selection.chain.id} does not support cancellation`,\n );\n }\n if (fee !== undefined) validateFee(fee);\n return this.createConflicting(target, operationId, 'cancel', fee, (previous, ctx) =>\n build(previous, ctx, fee),\n );\n }\n\n /**\n * Expiry and seqno chains only: once every earlier Attempt is provably dead (re-proved\n * here from finalized state, `assertAttemptsDead`), an `expired` Operation gets a fresh\n * Attempt and is live again. It is the one explicit exception to \"a terminal Operation\n * never moves\" (see `appendSigned`). Under the Operation's lease (the op lock on expiry\n * chains, the address lease on seqno chains); signed once, persisted before its\n * broadcast, and a repeat resends a persisted rebuild instead of signing another. On a\n * seqno chain it takes the wallet's next seqno (SEQUENCE_BUSY while another live\n * Operation holds it), and the Operation's `reservation` is refreshed to the rebuilt\n * Attempt's ordering in the same write as the Attempt. A refusal of the rebuilt\n * Attempt leaves the Operation `stalled`, never `expired` again: only the monitor's proof\n * can end it.\n */\n async rebuild(target: OperationTarget, operationId: string): Promise<OperationRecord> {\n const driver = target.pooled.driver;\n if (driver.ordering !== 'expiry' && driver.ordering !== 'seqno') {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${target.selection.chain.id} transactions do not expire; use replace or cancel`,\n );\n }\n const listed = await this.require(operationId);\n const done = await this.withOperationLease(target, listed, async (lease) => {\n const op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n const resumed = await this.resumeNewAttempt(target, op, 'rebuild', lease);\n if (resumed) return resumed;\n if (!REBUILDABLE_STATES.has(op.state)) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `only expired operations can be rebuilt (state '${op.state}')`,\n { context: { operationId } },\n );\n }\n await this.assertAttemptsDead(target, op);\n let ordering: OrderingData | undefined;\n if (driver.ordering === 'seqno') {\n if (!driver.sequence) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `the ${op.context.chain} driver has seqno ordering but no sequence source`,\n );\n }\n ordering = await this.nextSeqno(driver.sequence, op);\n }\n const build: BuildContext = {\n from: op.intent.from,\n keys: target.wallet.keys,\n wallet: target.wallet.options,\n ...(ordering ? { ordering } : {}),\n };\n const fee = await driver.builder.estimateFee(op.intent, build);\n const unsigned = await driver.builder.build(op.intent, fee, build);\n assertBuiltOrdering(op.id, driver.ordering, ordering, undefined, unsigned.ordering);\n const { signed } = await this.signNewAttempt(\n target,\n op,\n unsigned,\n 'rebuild',\n REBUILDABLE_STATES,\n lease,\n );\n return this.broadcastActive(target, signed, undefined, lease);\n });\n return this.settle(done);\n }\n\n get(operationId: string): Promise<OperationRecord | null> {\n return this.deps.stores.operations.get(this.deps.namespace, operationId);\n }\n\n async require(operationId: string): Promise<OperationRecord> {\n const record = await this.get(operationId);\n if (!record)\n throw new StateError('NOT_FOUND', `operation '${operationId}' not found`);\n return record;\n }\n\n /**\n * The Operation, checked to belong to this handle's chain, network and wallet\n * before anything reads its payload (e.g. `submitSignatures` with a signed payload), so\n * another wallet's Operation never reaches the driver.\n */\n async requireOwned(\n target: OperationTarget,\n operationId: string,\n ): Promise<OperationRecord> {\n const op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n return op;\n }\n\n // ---- shared building blocks ----------------------------------------------------------\n\n protected async open(\n target: OperationTarget,\n intent: TransferIntent,\n options: TransferOptions,\n ): Promise<{ record: OperationRecord; stored: StoredIntent }> {\n const key = options.idempotencyKey;\n if (key === undefined && this.deps.lifecycle().requireIdempotencyKey) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'an idempotencyKey is required (lifecycle.requireIdempotencyKey)',\n );\n }\n if (key !== undefined && (key.length === 0 || key.length > 200)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'idempotencyKey must be 1-200 characters',\n );\n }\n const { selection } = target;\n const normalized = await normalizeIntent(\n { selection, driver: target.pooled.driver, assets: target.assets },\n intent,\n target.wallet.address,\n );\n const stored = toStoredIntent(normalized);\n const hash = intentHash(selection.chain.id, selection.network.id, stored);\n const created = await this.deps.stores.operations.create({\n id: randomId('op'),\n namespace: this.deps.namespace,\n idempotencyKey: key ?? randomId('idem'),\n intentHash: hash,\n context: this.executionContext(target),\n kind: 'transfer',\n state: 'created',\n intent: stored,\n attempts: [],\n });\n if (created.created) {\n this.emitState(created.record, null);\n } else if (created.record.intentHash !== hash) {\n throw new StateError(\n 'IDEMPOTENCY_CONFLICT',\n 'this idempotency key was already used for a different transfer',\n { context: { operationId: created.record.id } },\n );\n }\n return { record: created.record, stored: created.record.intent };\n }\n\n protected executionContext(target: OperationTarget): ExecutionContext {\n const { selection, wallet } = target;\n return {\n chain: selection.chain.id,\n network: selection.network.id,\n library: selection.library,\n providers: selection.providerNames,\n indexers: selection.indexerNames,\n wallet: wallet.name,\n ...(selection.signer ? { signer: selection.signer.id } : {}),\n configHash: selection.configHash,\n };\n }\n\n /**\n * Rejects an Operation of another chain, network or sending address: its reservation\n * lives under a different sequence key, which this target's lease must never touch.\n */\n protected assertOwnedBy(target: OperationTarget, op: OperationRecord): void {\n const { selection, wallet } = target;\n if (\n op.context.chain !== selection.chain.id ||\n op.context.network !== selection.network.id ||\n op.intent.from !== wallet.address.canonical\n ) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `operation '${op.id}' belongs to another chain, network or wallet than this handle`,\n );\n }\n }\n\n /**\n * The address lease of `op`'s own sending address (keyed on the Operation, never on\n * the target's wallet, so a write for a stored Operation needs no signer). Any snapshot\n * of the Operation will do: its chain, network and sender never change. Every\n * transition of an Operation that holds a reservation runs under it, and so does the\n * release of that reservation (see `releaseReservation`).\n */\n protected withAddressLease<T>(\n target: ReadTarget,\n op: OperationRecord,\n fn: (lease: LeaseHandle | undefined) => Promise<T>,\n signal?: AbortSignal,\n options?: { readonly acquireTimeoutMs?: number },\n ): Promise<T> {\n if (!LEASED_ORDERINGS.has(target.pooled.driver.ordering)) return fn(undefined);\n return this.deps.sequences.withLease(this.sequenceKeyOf(op), fn, signal, options);\n }\n\n /**\n * Serializes one Operation's signing transitions: the wallet's address lease where the\n * ordering needs one, otherwise (expiry ordering) a short per-Operation lock, so two\n * same-key repeats can never both sign it. Its handle is passed down (renewed,\n * heartbeat) exactly like the address lease; it never guards a sequence write.\n */\n protected withOperationLease<T>(\n target: ReadTarget,\n op: OperationRecord,\n fn: (lease: LeaseHandle | undefined) => Promise<T>,\n signal?: AbortSignal,\n ): Promise<T> {\n if (LEASED_ORDERINGS.has(target.pooled.driver.ordering)) {\n return this.withAddressLease(target, op, fn, signal);\n }\n return this.deps.sequences.withLease(\n `op:${this.deps.namespace}:${op.id}`,\n fn,\n signal,\n );\n }\n\n /** The sequence key of the Operation's own chain, network and sending address. */\n protected sequenceKeyOf(op: Pick<OperationRecord, 'context' | 'intent'>): string {\n return sequenceKey(\n this.deps.namespace,\n op.context.chain,\n op.context.network,\n op.intent.from,\n );\n }\n\n protected walletOperations(op: OperationRecord): Promise<OperationRecord[]> {\n return this.deps.stores.operations.list({\n namespace: this.deps.namespace,\n chain: op.context.chain,\n network: op.context.network,\n from: op.intent.from,\n });\n }\n\n protected async prepareStage(\n target: OperationTarget,\n op: OperationRecord,\n stored: StoredIntent,\n lease: LeaseHandle | undefined,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n const driver = target.pooled.driver;\n const key = this.sequenceKeyOf(op);\n let reservation: OrderingData | undefined;\n let persisting = false;\n try {\n let excludeInputs: string[] | undefined;\n if (driver.ordering === 'nonce' || driver.ordering === 'seqno') {\n if (!driver.sequence) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `the ${op.context.chain} driver has ${driver.ordering} ordering but no sequence source`,\n );\n }\n if (driver.ordering === 'seqno') {\n reservation = await this.nextSeqno(driver.sequence, op);\n } else {\n const pending = await driver.sequence.pending(stored.from);\n // A quiet wallet (no worker pass, no recovery) is never stuck behind a leaked\n // value: the cheap check runs first, and a reclaimed value is allocated next.\n await reconcile.reclaimLeaked(\n this.reconciler(),\n op,\n lease as LeaseHandle,\n pending,\n op.id,\n );\n const nonce = await this.deps.sequences.allocate(\n lease as LeaseHandle,\n key,\n pending,\n );\n reservation = { kind: 'nonce', nonce };\n this.deps.events.emit('nonce.allocated', {\n namespace: this.deps.namespace,\n chain: op.context.chain,\n network: op.context.network,\n operationId: op.id,\n value: nonce.toString(),\n });\n }\n } else if (driver.ordering === 'inputs') {\n excludeInputs = reservedInputs(await this.walletOperations(op), op.id);\n }\n const build: BuildContext = {\n from: stored.from,\n keys: target.wallet.keys,\n wallet: target.wallet.options,\n ...(reservation ? { ordering: reservation } : {}),\n ...(excludeInputs ? { excludeInputs } : {}),\n ...(signal ? { signal } : {}),\n };\n const fee = await driver.builder.estimateFee(stored, build);\n const funds = await driver.builder.checkFunds(stored, fee, build);\n if (!funds.ok) {\n throw new ChainError(\n 'INSUFFICIENT_FUNDS',\n 'insufficient funds for this transfer',\n {\n context: { operationId: op.id },\n details: {\n required: funds.required.toString(),\n available: funds.available.toString(),\n },\n },\n );\n }\n const unsigned = await driver.builder.build(stored, fee, build);\n assertBuiltOrdering(\n op.id,\n driver.ordering,\n reservation,\n excludeInputs,\n unsigned.ordering,\n );\n await lease?.renew();\n persisting = true;\n return await this.update(op, {\n state: 'prepared',\n unsigned,\n reservation: unsigned.ordering,\n });\n } catch (error) {\n // Compensate only when no store write was attempted (a crashed process could not either).\n if (!persisting) {\n if (reservation?.kind === 'nonce' && lease) {\n await this.deps.sequences\n .release(lease, key, reservation.nonce)\n .catch((e: unknown) =>\n this.deps.log.warn('could not release a reserved nonce', {\n operationId: op.id,\n code: errorCode(e),\n }),\n );\n }\n if (isDefinitive(error)) {\n await this.update(op, { state: 'failed', error: error.toJSON() }).catch(\n (e: unknown) =>\n this.deps.log.warn('could not record a failure', {\n operationId: op.id,\n code: errorCode(e),\n }),\n );\n }\n }\n throw error;\n }\n }\n\n /**\n * `prepare()`'s policy check. Bounded like signing, by `lifecycle.signTimeoutMs` and\n * the caller's `signal` (`signingDeadline`), but with no heartbeat: a hook that outlives\n * the lease loses it, and its veto then writes nothing. Only a veto fails the\n * Operation; a timeout or an abort leaves it `prepared` for a repeat to authorize again.\n */\n protected async authorizeOrFail(\n target: OperationTarget,\n op: OperationRecord,\n lease?: LeaseHandle,\n signal?: AbortSignal,\n ): Promise<void> {\n const ctx = this.signingContext(target, op, op.unsigned as UnsignedTx, 'original');\n try {\n await this.signingDeadline(op, undefined, signal, () =>\n this.deps.orchestrator.authorize(ctx),\n );\n } catch (error) {\n if (isCryptoAioError(error, 'POLICY_REJECTED'))\n await this.failAfterPrepare(target, op, error, lease);\n throw error;\n }\n }\n\n /**\n * Takes an Operation as far as one call can, all under its lease (`withOperationLease`:\n * the address lease, or a per-Operation lock on expiry chains): `created`\n * is prepared, `prepared` is signed into the write-ahead Attempt, and a `signed` (or\n * ambiguously `submitted`) Operation resends its stored raw bytes; it is never signed\n * again. Any other state is returned as it is (`settle` rethrows a stored failure).\n */\n protected async drive(\n target: OperationTarget,\n op: OperationRecord,\n stored: StoredIntent,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n if (op.state !== 'created' && op.state !== 'prepared' && !awaitsBroadcast(op)) {\n return this.settle(op);\n }\n const current = await this.withOperationLease(\n target,\n op,\n async (lease) => {\n let fresh = await this.require(op.id);\n if (fresh.state === 'created') {\n fresh = await this.prepareStage(target, fresh, stored, lease, signal);\n }\n if (fresh.state === 'prepared') {\n fresh = await this.signStage(target, fresh, lease, signal);\n }\n if (awaitsBroadcast(fresh)) {\n fresh = await this.resendActive(target, fresh, signal, lease);\n }\n return fresh;\n },\n signal,\n );\n return this.settle(current);\n }\n\n /**\n * Runs the policy hook and the signer(s) over the stored unsigned payload, bounded by the\n * lease (`signingDeadline`). A veto or a mismatching signature fails the Operation before\n * signing. A pending result is persisted as `awaiting-signature` with every ticket;\n * a signed one becomes the write-ahead Attempt.\n */\n protected async signStage(\n target: OperationTarget,\n op: OperationRecord,\n lease?: LeaseHandle,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n const unsigned = op.unsigned as UnsignedTx;\n const ctx = this.signingContext(target, op, unsigned, 'original');\n const existing = this.usablePartials(op, unsigned.signingRequests);\n let result: OrchestratedResult;\n try {\n result = await this.signingDeadline(\n op,\n lease,\n signal,\n async () => {\n await this.deps.orchestrator.authorize(ctx);\n return this.deps.orchestrator.sign(\n target.wallet,\n unsigned.signingRequests,\n ctx,\n existing,\n );\n },\n // A pending answer after the deadline was never recorded; cancel its tickets.\n async (late) => {\n if (late.status === 'pending')\n await this.cancelTickets(target, op.id, late.tickets);\n },\n );\n } catch (error) {\n if (\n isCryptoAioError(error, 'POLICY_REJECTED') ||\n isCryptoAioError(error, 'SIGNATURE_MISMATCH')\n ) {\n await this.failAfterPrepare(target, op, error, lease);\n }\n throw error;\n }\n if (result.status === 'signed') {\n return this.appendSigned(\n target,\n op,\n unsigned,\n result.signatures,\n 'original',\n undefined,\n lease,\n );\n }\n try {\n await lease?.renew();\n return await this.update(op, {\n state: 'awaiting-signature',\n partialSignatures: result.signatures,\n ...(result.tickets.length > 0 ? { signerTickets: result.tickets } : {}),\n });\n } catch (error) {\n // A ticket that was not recorded could never be cancelled later.\n await this.cancelTickets(target, op.id, result.tickets);\n throw error;\n }\n }\n\n /**\n * Bounds a signer or policy call (they have no deadline of their own) by\n * `lifecycle.signTimeoutMs` and the caller's `signal`, and keeps the held lease alive\n * meanwhile (renewed every `leaseMs / 3`). On timeout, abort or a lost lease nothing\n * is written: the Operation keeps its state and reservation (a late signature may still\n * appear), and a repeat asks again. A lost lease is logged by code, like\n * `failAfterPrepare`. A result that arrives after the wait ended goes to `late` (a\n * pending answer's tickets are cancelled there); otherwise it is dropped.\n */\n protected async signingDeadline<T>(\n op: OperationRecord,\n lease: LeaseHandle | undefined,\n signal: AbortSignal | undefined,\n work: () => Promise<T>,\n late?: (result: T) => Promise<void>,\n ): Promise<T> {\n signal?.throwIfAborted();\n await lease?.renew();\n const done = new AbortController();\n const limits: Promise<never>[] = [\n this.deps.clock.sleep(this.deps.lifecycle().signTimeoutMs, done.signal).then(() => {\n throw new TimeoutError(\n 'TIMEOUT',\n 'the signer or policy hook did not answer within lifecycle.signTimeoutMs',\n { retryable: true, context: { operationId: op.id } },\n );\n }),\n ];\n if (lease) limits.push(this.heartbeat(op, lease, done.signal));\n if (signal) {\n limits.push(\n new Promise<never>((_resolve, reject) => {\n const onAbort = () => reject(abortReason(signal));\n signal.addEventListener('abort', onAbort, { once: true });\n done.signal.addEventListener(\n 'abort',\n () => signal.removeEventListener('abort', onAbort),\n { once: true },\n );\n }),\n );\n }\n const running = work();\n let delivered = false;\n try {\n // The limits only ever reject, so resolving means `running` answered in time.\n const result = await Promise.race([running, ...limits]);\n delivered = true;\n return result;\n } finally {\n done.abort();\n if (!delivered && late) {\n // A rejection of `running` itself already surfaced (or lost the race): ignore it.\n running\n .then(late, () => undefined)\n .catch((error: unknown) =>\n this.deps.log.warn('could not handle a late signer answer', {\n operationId: op.id,\n code: errorCode(error),\n }),\n );\n }\n }\n }\n\n /**\n * Renews `lease` every `max(1, leaseMs / 3)` ms until `stop` aborts. Rejects (after a\n * code-only log) when a renewal fails: the lease was lost to another worker.\n */\n protected async heartbeat(\n op: OperationRecord,\n lease: LeaseHandle,\n stop: AbortSignal,\n ): Promise<never> {\n const every = Math.max(1, Math.floor(this.deps.lifecycle().leaseMs / 3));\n for (;;) {\n await this.deps.clock.sleep(every, stop);\n try {\n await lease.renew();\n } catch (error) {\n if (!stop.aborted) {\n this.deps.log.warn('address lease lost while waiting for the signer', {\n operationId: op.id,\n code: errorCode(error),\n });\n }\n throw error;\n }\n }\n }\n\n /**\n * The persisted partial signatures that still verify. A corrupt entry is\n * dropped (its request is signed or submitted again) instead of making `sign()` or\n * `accept()` throw SIGNATURE_MISMATCH on every call, which would strand the Operation.\n */\n protected usablePartials(\n op: OperationRecord,\n requests: readonly SigningRequest[],\n ): SignatureBundle[] {\n const partials: readonly unknown[] = Array.isArray(op.partialSignatures)\n ? op.partialSignatures\n : [];\n const usable: SignatureBundle[] = [];\n for (const partial of partials) {\n try {\n usable.push(\n ...this.deps.orchestrator.accept(requests, [partial as SignatureBundle], []),\n );\n } catch (error) {\n this.deps.log.warn('dropped an unusable partial signature', {\n operationId: op.id,\n code: errorCode(error),\n });\n }\n }\n return usable;\n }\n\n /**\n * Assembles and persists an immutable Attempt BEFORE any broadcast (write-ahead). `lease`\n * is renewed right before the write: signing may have outlived it, and then\n * nothing is written. When the append loses its compare-and-set to a writer that took the\n * Operation to `signed` or beyond (or ended it), the stored Operation is returned\n * instead, and callers continue from its state; a still pre-signing one rethrows the\n * VERSION_CONFLICT, and an abandoned one is INVALID_TRANSITION. The `signed` Operation is\n * scheduled (`nextCheckAt: now`), like every engine transition after signing.\n *\n * A new Attempt (`supersedes` set: replace, cancel, rebuild) has a stricter lost-CAS\n * contract: the stored Operation is returned only when it shows this very Attempt;\n * otherwise the VERSION_CONFLICT is rethrown (`signNewAttempt` may retry it).\n *\n * The store does not guard transitions, so appending to a terminal Operation is refused\n * here, with one explicit exception: a `rebuild` Attempt reopens an `expired` Operation\n * (`rebuild` re-proves every earlier Attempt dead under the lease first). It is\n * the only way out of a terminal state; `update` refuses every other.\n *\n * An Attempt whose ref another Operation of the namespace holds is never appended\n * (`withRefFree`); an original one fails its Operation and keeps its nonce.\n */\n protected async appendSigned(\n target: OperationTarget,\n op: OperationRecord,\n unsigned: UnsignedTx,\n signatures: readonly SignatureBundle[],\n purpose: SigningPurpose,\n supersedes?: string,\n lease?: LeaseHandle,\n ): Promise<OperationRecord> {\n if (isTerminal(op.state) && !(purpose === 'rebuild' && op.state === 'expired')) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${op.id}' is ${op.state}; no ${purpose} attempt can be added`,\n { context: { operationId: op.id } },\n );\n }\n const signed = await target.pooled.driver.builder.assemble(unsigned, signatures);\n const attempt: AttemptRecord = {\n id: randomId('att'),\n ref: signed.ref,\n raw: signed.raw,\n ordering: unsigned.ordering,\n fee: unsigned.fee,\n unsigned,\n purpose,\n ...(supersedes !== undefined ? { supersedes } : {}),\n createdAt: this.deps.clock.now(),\n };\n let next: OperationRecord;\n try {\n // The held lease is renewed inside the ref lease, right before the write.\n next = await this.withRefFree(op, attempt.ref, lease, () =>\n this.deps.stores.operations.appendAttempt(\n this.deps.namespace,\n op.id,\n attempt,\n {\n state: 'signed',\n // Scheduled from the moment signed bytes exist, so the Operation stays\n // claimable whatever moves it next (a read-only pass never schedules).\n nextCheckAt: attempt.createdAt,\n // A rebuild takes a new slot (seqno); the reservation follows it.\n ...(purpose === 'rebuild' ? { reservation: unsigned.ordering } : {}),\n clear: [\n 'unsigned',\n 'partialSignatures',\n 'signerTickets',\n 'ambiguous',\n 'error',\n ],\n },\n op.version,\n ),\n );\n } catch (error) {\n // Another Operation holds this ref. Nothing was recorded or sent. An original\n // Attempt's Operation fails here, before any signed bytes exist on record; a\n // replacement, cancel or rebuild is dropped and its Operation keeps the active Attempt.\n if (isCryptoAioError(error) && REF_HELD.has(error)) {\n if (purpose === 'original') {\n // Its nonce, if any, is kept: identical bytes of another Operation use it.\n await this.failAfterPrepare(target, op, error, lease, { release: false });\n }\n throw error;\n }\n // Another writer changed the Operation first (e.g. appended its own Attempt).\n // These bytes were never persisted or sent, so they are dropped; the caller goes on\n // from the stored Operation instead of surfacing the conflict. Lost-CAS contract:\n // only when that writer took it to `signed` or beyond (or ended it). A stored\n // pre-signing Operation means these signatures were not recorded anywhere, so the\n // conflict is rethrown (a repeat signs again); an abandoned one cannot be signed.\n if (!isCryptoAioError(error, 'VERSION_CONFLICT')) throw error;\n const stored = await this.require(op.id);\n if (supersedes !== undefined) {\n if (stored.attempts.some((a) => a.id === attempt.id)) return stored;\n throw error;\n }\n if (stored.state === 'abandoned') {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${op.id}' was abandoned while it was being signed`,\n { context: { operationId: op.id } },\n );\n }\n if (PRE_SIGNING_STATES.has(stored.state)) throw error;\n return stored;\n }\n if (next.state !== op.state) this.emitState(next, op.state);\n return next;\n }\n\n /**\n * Runs `append` only when no other Operation of this namespace holds `ref`, live or\n * terminal (a terminal holder's bytes are already on chain): a second Operation\n * recording the same bytes would inherit their outcome, reporting success for a payment\n * that never moved. The check and the append run under a short lease on the ref, so two\n * processes sharing the lock manager cannot both pass it; it is always the innermost\n * lease, so it cannot deadlock with the address or Operation lease held around it. This\n * also needs `findByRef` to be read-your-writes consistent across those processes (no\n * read replica or eventually consistent index) and the append to finish within\n * `leaseMs`. The held `lease` is renewed inside it, right before the write. A ref lease\n * still held elsewhere after `leaseMs / 3`, a bound that keeps the wait within the held\n * lease, is `SEQUENCE_BUSY` with its own fixed text (the coordinator's text names the\n * address lease).\n */\n protected async withRefFree<T>(\n op: OperationRecord,\n ref: AttemptRef,\n lease: LeaseHandle | undefined,\n append: () => Promise<T>,\n ): Promise<T> {\n let entered = false;\n try {\n return await this.deps.sequences.withLease(\n `ref:${this.deps.namespace}:${ref.id}`,\n async () => {\n entered = true;\n const holder = await this.deps.stores.operations.findByRef(\n this.deps.namespace,\n ref.id,\n );\n if (holder && holder.id !== op.id) throw refHeld(op.id, holder.id);\n await lease?.renew();\n return append();\n },\n undefined,\n { acquireTimeoutMs: Math.max(1, Math.floor(this.deps.lifecycle().leaseMs / 3)) },\n );\n } catch (error) {\n if (!entered && isCryptoAioError(error, 'SEQUENCE_BUSY')) {\n throw new StateError(\n 'SEQUENCE_BUSY',\n 'another operation is recording the same transaction; retry',\n { retryable: true, context: { operationId: op.id } },\n );\n }\n throw error;\n }\n }\n\n protected activeAttempt(op: OperationRecord): AttemptRecord {\n const attempt = op.attempts.find((a) => a.id === op.activeAttemptId);\n if (!attempt) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${op.id}' has no active attempt`,\n { context: { operationId: op.id } },\n );\n }\n return attempt;\n }\n\n // ---- new Attempts: replace, cancel, rebuild ------------------------------------------\n\n /**\n * Replace and cancel, under the Operation's lease (the address lease; the op lock on\n * expiry chains). The new Attempt is built from the active one and must be mutually\n * exclusive with every earlier Attempt (checked before signing; for inputs, exclusion is\n * not transitive) and use the slot `assertBuiltOrdering` expects. It is signed once and\n * persisted before its broadcast (`signNewAttempt`), never re-signed: a repeat whose\n * Attempt was persisted but never, or ambiguously, sent resends its stored bytes\n * (`resumeNewAttempt`). When the node refuses the fresh Attempt, the one it superseded is\n * still live: the Operation goes back to its previous state and active Attempt\n * (`restoreAfterRefusal`) and the node's error is thrown. That refusal is never terminal.\n *\n * A repeat of an earlier request (`fee` is the requested spec): the same\n * replacement spec is answered by that replacement (`repeatReplacement`); a cancel is\n * resent, returned, or bumped when refused or dropped (`repeatCancel`). See `replace` and\n * `cancel`.\n */\n protected async createConflicting(\n target: OperationTarget,\n operationId: string,\n purpose: 'replacement' | 'cancel',\n fee: FeeSpeed | FeeOverride | undefined,\n build: (previous: UnsignedTx, ctx: BuildContext) => Promise<UnsignedTx>,\n ): Promise<OperationRecord> {\n const listed = await this.require(operationId);\n const done = await this.withOperationLease(target, listed, async (lease) => {\n let op = await this.require(operationId);\n this.assertOwnedBy(target, op);\n const active = op.attempts.find((a) => a.id === op.activeAttemptId);\n if (purpose === 'replacement') {\n const prior = this.priorReplacement(op, fee);\n const repeated =\n prior && (await this.repeatReplacement(target, op, prior, lease));\n if (repeated) return repeated;\n } else if (active?.purpose === 'cancel') {\n const repeated = await this.repeatCancel(target, op, active, fee, lease);\n if (repeated) return repeated;\n // A new, bumped cancel is built below, from the Operation as it now stands.\n op = await this.require(operationId);\n }\n if (!CONFLICTABLE_STATES.has(op.state)) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `cannot create a ${purpose} for an operation in state '${op.state}'`,\n { context: { operationId } },\n );\n }\n const previous = this.activeAttempt(op);\n if (previous.purpose === 'cancel' && purpose === 'replacement') {\n // A replacement would be built from the cancel's own transaction, yet report\n // `executed` if it won.\n throw new StateError(\n 'INVALID_TRANSITION',\n 'a cancel is in flight and cannot be replaced',\n { context: { operationId } },\n );\n }\n const driver = target.pooled.driver;\n const excludeInputs =\n driver.ordering === 'inputs'\n ? reservedInputs(await this.walletOperations(op), op.id)\n : undefined;\n // A cancel climbs from the earlier cancels of this same Attempt (`cancelBase`).\n const base = purpose === 'cancel' ? cancelBase(op, previous) : previous;\n const unsigned = await build(base.unsigned, {\n from: op.intent.from,\n keys: target.wallet.keys,\n wallet: target.wallet.options,\n ...(excludeInputs ? { excludeInputs } : {}),\n });\n if (!op.attempts.every((a) => mutuallyExclusive(unsigned.ordering, a.ordering))) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `the ${purpose} would not conflict with every earlier attempt; refusing to risk a double spend`,\n { context: { operationId } },\n );\n }\n assertBuiltOrdering(\n op.id,\n driver.ordering,\n previous.ordering,\n excludeInputs,\n unsigned.ordering,\n );\n const { signed, before } = await this.signNewAttempt(\n target,\n op,\n unsigned,\n purpose,\n CONFLICTABLE_STATES,\n lease,\n );\n try {\n return await this.broadcastActive(target, signed, undefined, lease);\n } catch (error) {\n // Only the node's own answer; an ambiguous failure may have delivered the bytes.\n // Back to the snapshot the append was made over, not the read before signing.\n if (isRefusal(error)) {\n await this.restoreAfterRefusal(\n op.id,\n signed.activeAttemptId,\n {\n state: before.state,\n activeAttemptId: previous.id,\n ...(before.error ? { error: before.error } : {}),\n ...(before.ambiguous ? { ambiguous: true } : {}),\n },\n lease,\n );\n }\n throw error;\n }\n });\n return this.settle(done);\n }\n\n /**\n * The replacement a repeat of this fee spec refers to: the active one made for it,\n * or the latest Attempt when it was made for it and, refused, gave the active role back to\n * the Attempt it superseded. `undefined`: a new request.\n */\n protected priorReplacement(\n op: OperationRecord,\n fee: FeeSpeed | FeeOverride | undefined,\n ): AttemptRecord | undefined {\n const active = op.attempts.find((a) => a.id === op.activeAttemptId);\n if (active?.purpose === 'replacement' && sameFeeSpec(active, fee)) return active;\n const last = op.attempts[op.attempts.length - 1];\n return last?.purpose === 'replacement' &&\n sameFeeSpec(last, fee) &&\n last.supersedes === op.activeAttemptId\n ? last\n : undefined;\n }\n\n /**\n * A repeat of the request `prior` was made for signs nothing. Its stored bytes are\n * resent when their broadcast was never recorded, was ambiguous, or was refused or\n * rejected: the node's current answer decides, and a refusal restores the\n * superseded Attempt and is thrown (`resendActive`), never reported as a success. A\n * `prior` that already gave the active role back is resent first and made active again\n * only once the node accepted it (`resendRestoredAway`). An active `prior` the node holds,\n * or one on chain, is returned as it is. `undefined` (a refused `prior` of an Operation\n * that moved on): the caller goes on as for a new request.\n */\n protected async repeatReplacement(\n target: OperationTarget,\n op: OperationRecord,\n prior: AttemptRecord,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord | undefined> {\n const isActive = prior.id === op.activeAttemptId;\n if (!RESUMABLE_STATES.has(op.state)) return isActive ? op : undefined;\n if (!isActive) return this.resendRestoredAway(target, op, prior, lease);\n const observation = await this.deps.stores.operations.getObservation(prior.id);\n const resend =\n awaitsBroadcast(op) ||\n observation?.lastBroadcastAt === undefined ||\n NODE_REFUSED_STATES.has(observation.state);\n return resend ? this.resendActive(target, op, undefined, lease) : op;\n }\n\n /**\n * Resends the stored bytes of a replacement that gave the active role back after a\n * refusal, while the Attempt it superseded stays active. Only once a node accepted them\n * (or they are already seen) is it made active again (`reactivate`) and the acceptance\n * recorded, so a crash in between leaves the superseded Attempt active and never an\n * unaccepted one. A refusal or rejection is thrown and changes nothing; an ambiguous\n * failure leaves the may-be-live marker (`recordAmbiguous`).\n */\n protected async resendRestoredAway(\n target: OperationTarget,\n op: OperationRecord,\n prior: AttemptRecord,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord> {\n const fanout = this.deps.lifecycle().broadcastFanout;\n // Whether the bytes may be live, read before the send, so no store failure can follow\n // a delivery here.\n const live = mayBeLive(await this.deps.stores.operations.getObservation(prior.id));\n let result: BroadcastResult;\n try {\n result = await target.pooled.driver.broadcaster.broadcast(\n { raw: prior.raw, ref: prior.ref },\n fanout > 1 ? { fanout } : {},\n );\n } catch (error) {\n throw await this.recordAmbiguous(op, prior, error);\n }\n if (result.kind === 'refused' || result.kind === 'rejected') {\n // Its own ref is looked up first; seen means the node holds it after all.\n // A failed lookup is ambiguous, as on the active resend path.\n let seen: boolean;\n try {\n seen = await this.seenOwnRef(target, op, prior, this.deps.clock.now());\n } catch (error) {\n throw this.ambiguousAfterBroadcast(op, prior, error);\n }\n if (!seen) {\n // As on the active resend path, a rejection of bytes that may be live (a node\n // once accepted them) is only a refusal.\n const rejected = result.kind === 'rejected' && !live;\n const refusedCode = result.kind === 'refused' ? result.code : 'TX_REFUSED';\n throw new ChainError(\n rejected ? 'TX_REJECTED' : refusedCode,\n `transaction ${rejected ? 'rejected' : 'refused'}: ${result.reason}`,\n { context: { operationId: op.id, attemptId: prior.id } },\n );\n }\n }\n let current: OperationRecord;\n try {\n current = await this.reactivate(op, prior, lease);\n } catch (error) {\n // The node holds the bytes, so a failure to record that is ambiguous.\n throw this.ambiguousAfterBroadcast(op, prior, error);\n }\n return this.applyBroadcastResult(\n target,\n current,\n prior,\n { kind: 'already-known' },\n lease,\n );\n }\n\n /**\n * Makes a refused new Attempt active again, only while the Attempt it superseded is still\n * the active one and nothing was appended since (compare-and-set, re-derived after a lost\n * one). Otherwise VERSION_CONFLICT (retryable).\n */\n protected async reactivate(\n op: OperationRecord,\n attempt: AttemptRecord,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord> {\n await lease?.renew();\n const next = await this.updateAfterBroadcast(op, (current) =>\n current.activeAttemptId === attempt.supersedes &&\n current.attempts.length === op.attempts.length\n ? { activeAttemptId: attempt.id }\n : undefined,\n );\n if (next.activeAttemptId !== attempt.id) {\n throw new StateError('VERSION_CONFLICT', `operation '${op.id}' kept changing`, {\n context: { operationId: op.id },\n });\n }\n return next;\n }\n\n /**\n * A cancel while a cancel is the active Attempt. Its stored bytes are resent when\n * their broadcast was never recorded or was ambiguous; it is returned unchanged while a\n * node holds it (`pending`, `mempool`) and once it is on chain (chain evidence), so\n * concurrent and retried cancels are idempotent. `undefined` asks the caller for a new,\n * bumped cancel: only when the cancel is recorded `refused`, `rejected` or\n * `dropped`, or for an explicit `fee` while it is not on chain. A refused or rejected one\n * first gives the active role back to the Attempt it superseded, so it is never\n * reported as a success.\n */\n protected async repeatCancel(\n target: OperationTarget,\n op: OperationRecord,\n active: AttemptRecord,\n fee: FeeSpeed | FeeOverride | undefined,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord | undefined> {\n const resumed = await this.resumeNewAttempt(target, op, 'cancel', lease);\n if (resumed) return resumed;\n const observation = await this.deps.stores.operations.getObservation(active.id);\n if (observation && CHAIN_EVIDENCE_STATES.has(observation.state)) return op;\n const refused = observation !== null && NODE_REFUSED_STATES.has(observation.state);\n if (!refused && observation?.state !== 'dropped' && fee === undefined) return op;\n if (refused) await this.undoRefusedResend(op.id, active, lease);\n return undefined;\n }\n\n /**\n * A repeat of a replace, cancel or rebuild whose Attempt was persisted but never sent (no\n * broadcast recorded: a crash after `appendAttempt`) or sent with an unknown outcome\n * (ambiguous): its stored bytes are resent, never signed again, so a retry creates no\n * second new Attempt. `undefined` when there is nothing to resume.\n *\n * The resend goes through `resendActive`: a refusal restores the superseded Attempt.\n */\n protected async resumeNewAttempt(\n target: OperationTarget,\n op: OperationRecord,\n purpose: Exclude<AttemptPurpose, 'original'>,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord | undefined> {\n const active = op.attempts.find((a) => a.id === op.activeAttemptId);\n if (active?.purpose !== purpose || !RESUMABLE_STATES.has(op.state)) return undefined;\n if (!awaitsBroadcast(op)) {\n const observation = await this.deps.stores.operations.getObservation(active.id);\n if (observation?.lastBroadcastAt !== undefined) return undefined;\n }\n return this.resendActive(target, op, undefined, lease);\n }\n\n /**\n * Resends the active Attempt's stored bytes (`broadcastActive`) for every resend path:\n * `rebroadcast` (and so recovery), a same-key `transfer` and a repeated replace, cancel or\n * rebuild. When the node refuses a resent replacement or cancel, the Attempt it\n * superseded becomes active again (`undoRefusedResend`) and the refusal is thrown, so it is\n * never reported as a success. A refused rebuild stays `stalled` (see `rebuild`).\n */\n protected async resendActive(\n target: OperationTarget,\n op: OperationRecord,\n signal: AbortSignal | undefined,\n lease: LeaseHandle | undefined,\n ): Promise<OperationRecord> {\n try {\n return await this.broadcastActive(target, op, signal, lease);\n } catch (error) {\n const active = op.attempts.find((a) => a.id === op.activeAttemptId);\n if (isRefusal(error) && active) await this.undoRefusedResend(op.id, active, lease);\n throw error;\n }\n }\n\n /**\n * After a resend of a replacement or cancel was refused, the Attempt it superseded\n * becomes active again. The state it was appended over is not recorded, so it is derived\n * from the superseded Attempt's observation: when that one may still be live (`pending`,\n * `mempool`, `included`), the Operation returns to `submitted`; otherwise (e.g. the\n * original was itself refused) only the active Attempt is swapped and the Operation keeps\n * its `stalled` state and stored error. Nothing for an original or a rebuild.\n */\n protected async undoRefusedResend(\n operationId: string,\n refused: AttemptRecord,\n lease: LeaseHandle | undefined,\n ): Promise<void> {\n const superseded = refused.supersedes;\n if (superseded === undefined || refused.purpose === 'rebuild') return;\n let live = false;\n try {\n const observation = await this.deps.stores.operations.getObservation(superseded);\n live = observation !== null && LIVE_STATES.has(observation.state);\n } catch (error) {\n // Undecided: swap only the active Attempt (the safe, non-terminal choice).\n this.deps.log.warn('could not read the superseded attempt', {\n operationId,\n code: errorCode(error),\n });\n }\n await this.restoreAfterRefusal(\n operationId,\n refused.id,\n live\n ? { state: 'submitted', activeAttemptId: superseded }\n : { activeAttemptId: superseded },\n lease,\n );\n }\n\n /**\n * Signs a new Attempt once and persists it (write-ahead) before any broadcast. The policy\n * hook and the signer are bounded by `lifecycle.signTimeoutMs`, with the lease renewed\n * meanwhile (`signingDeadline`). A pending answer is refused, since new Attempts need a\n * synchronous signer, and its tickets are cancelled through their issuers, as are\n * those of a pending answer that arrives after the deadline. A veto, a timeout or a bad\n * signature writes nothing.\n *\n * A lost compare-and-set (e.g. a worker's claim bumped the version) is retried with the\n * same signatures under the same lease while the re-read Operation is still `eligible`\n * with the same Attempts. Otherwise the VERSION_CONFLICT is rethrown and these bytes,\n * never persisted or sent, are dropped. Success is returned only when the stored\n * Operation shows the new Attempt (`appendSigned`): `signed`, together with `before`, the\n * snapshot the successful append was made over (what a refusal restores).\n */\n protected async signNewAttempt(\n target: OperationTarget,\n op: OperationRecord,\n unsigned: UnsignedTx,\n purpose: Exclude<AttemptPurpose, 'original'>,\n eligible: ReadonlySet<OperationState>,\n lease: LeaseHandle | undefined,\n ): Promise<{ readonly signed: OperationRecord; readonly before: OperationRecord }> {\n const supersedes = this.activeAttempt(op).id;\n const ctx = this.signingContext(target, op, unsigned, purpose);\n const result = await this.signingDeadline(\n op,\n lease,\n undefined,\n async () => {\n await this.deps.orchestrator.authorize(ctx);\n return this.deps.orchestrator.sign(target.wallet, unsigned.signingRequests, ctx);\n },\n async (late) => {\n if (late.status === 'pending')\n await this.cancelTickets(target, op.id, late.tickets);\n },\n );\n if (result.status === 'pending') {\n await this.cancelTickets(target, op.id, result.tickets);\n throw new SigningError(\n 'SIGNING_FAILED',\n `${purpose} attempts need a synchronous signer`,\n { context: { operationId: op.id } },\n );\n }\n let current = op;\n for (let tries = 1; ; tries++) {\n try {\n const signed = await this.appendSigned(\n target,\n current,\n unsigned,\n result.signatures,\n purpose,\n supersedes,\n lease,\n );\n return { signed, before: current };\n } catch (error) {\n if (!isCryptoAioError(error, 'VERSION_CONFLICT') || tries >= 5) throw error;\n current = await this.require(op.id);\n if (\n !eligible.has(current.state) ||\n current.activeAttemptId !== supersedes ||\n current.attempts.length !== op.attempts.length\n )\n throw error;\n }\n }\n }\n\n /**\n * The node refused a replacement or cancel, so the Attempt it superseded is\n * still the live one and keeps its nonce. While the refused Attempt is still the active\n * one and the Operation is not terminal (an ended Operation is left alone),\n * the superseded one becomes active again. When the Operation still shows the refusal\n * (`stalled`, or `signed` after a rejection) and `point` names a state, it also returns\n * to `point`'s state, error and ambiguity; any other state (`included`, `submitted` or\n * later) is the monitor's and is kept. The refused Attempt stays recorded and monitored.\n * The lease is renewed first. A failure is only logged: the caller gets the node's error\n * either way, and the Operation stays safely `stalled`.\n */\n protected async restoreAfterRefusal(\n operationId: string,\n refusedId: string | undefined,\n point: RestorePoint,\n lease: LeaseHandle | undefined,\n ): Promise<void> {\n const clear: ClearableField[] = [];\n if (!point.error) clear.push('error');\n if (!point.ambiguous) clear.push('ambiguous');\n const full: OperationPatch = {\n state: point.state,\n activeAttemptId: point.activeAttemptId,\n ...(point.error ? { error: point.error } : {}),\n ...(point.ambiguous ? { ambiguous: true } : {}),\n ...(clear.length > 0 ? { clear } : {}),\n };\n try {\n await lease?.renew();\n await this.updateAfterBroadcast(await this.require(operationId), (current) => {\n if (current.activeAttemptId !== refusedId || isTerminal(current.state))\n return undefined;\n return point.state !== undefined &&\n (current.state === 'stalled' || current.state === 'signed')\n ? full\n : { activeAttemptId: point.activeAttemptId };\n });\n } catch (error) {\n this.deps.log.warn('could not restore the attempt a refused one superseded', {\n operationId,\n code: errorCode(error),\n });\n }\n }\n\n /**\n * Rebuild's precondition, re-proved from finalized state (quorum proof reads), never\n * taken from stored observations: each earlier Attempt's expiry passed, or (seqno)\n * another transaction consumed its slot, per finalized state, and only then is it\n * confirmed not included at finality. In that order, as the monitor does: any inclusion\n * would lie at or below the already finalized expiry or slot, so the later read sees it.\n * Otherwise INVALID_TRANSITION; nothing is written.\n */\n protected async assertAttemptsDead(\n target: OperationTarget,\n op: OperationRecord,\n ): Promise<void> {\n const { proofs } = target.pooled.driver;\n const from = op.intent.from;\n for (const attempt of op.attempts) {\n const { ordering } = attempt;\n const unreachable =\n (await proofs.expired(ordering)) ||\n (ordering.kind === 'seqno' &&\n (await proofs.slotConsumed(ordering, from, 'finalized')));\n const dead =\n unreachable &&\n !(await proofs.includedFinal(attempt.ref, ordering, from)).included;\n if (!dead) {\n throw new StateError(\n 'INVALID_TRANSITION',\n 'an earlier attempt is not provably dead; refusing to rebuild',\n { context: { operationId: op.id, attemptId: attempt.id } },\n );\n }\n }\n }\n\n /**\n * The wallet's next seqno as a reservation. Seqno wallets are strictly serial: another\n * live Operation that may still consume the current seqno makes this SEQUENCE_BUSY.\n */\n protected async nextSeqno(\n sequence: SequenceSource,\n op: OperationRecord,\n ): Promise<OrderingData> {\n const holder = seqnoHolder(await this.walletOperations(op), op.id);\n if (holder) {\n throw new StateError(\n 'SEQUENCE_BUSY',\n 'the wallet has another operation in flight (seqno wallets are strictly serial)',\n {\n retryable: true,\n context: { operationId: op.id, blockingOperationId: holder.id },\n },\n );\n }\n return {\n kind: 'seqno',\n seqno: await sequence.pending(op.intent.from),\n validUntil: 0,\n };\n }\n\n protected get observationDeps(): ObservationDeps {\n return {\n operations: this.deps.stores.operations,\n events: this.deps.events,\n namespace: this.deps.namespace,\n };\n }\n\n /**\n * Sends the active Attempt's stored raw bytes. `lease` is the held address lease (every\n * caller holds it; leases are not reentrant): a rejection's terminal write and\n * release run under it.\n */\n protected async broadcastActive(\n target: OperationTarget,\n op: OperationRecord,\n signal?: AbortSignal,\n lease?: LeaseHandle,\n ): Promise<OperationRecord> {\n const attempt = this.activeAttempt(op);\n const fanout = this.deps.lifecycle().broadcastFanout;\n let result: BroadcastResult;\n try {\n result = await target.pooled.driver.broadcaster.broadcast(\n { raw: attempt.raw, ref: attempt.ref },\n { ...(fanout > 1 ? { fanout } : {}), ...(signal ? { signal } : {}) },\n );\n } catch (error) {\n throw await this.recordAmbiguous(op, attempt, error, signal);\n }\n return this.applyBroadcastResult(target, op, attempt, result, lease);\n }\n\n /**\n * The broadcast may have reached the network: a transport failure, an RPC error after a\n * possibly delivered attempt (`ambiguous`), or a caller abort (which the transport\n * surfaces bare). The Operation becomes `submitted` + `ambiguous` and is monitored; it is\n * never failed and keeps its reservation. A retry with the same key resends the stored\n * bytes. The observation is written first and on its own, then the transition, re-derived\n * after a lost compare-and-set; a store failure is only logged: the caller must get the\n * ambiguous error.\n * `ambiguous: true` means the outcome is unknown and the caller retries\n * with the same idempotency key; the error keeps its code and that code's retryability.\n */\n protected async recordAmbiguous(\n op: OperationRecord,\n attempt: AttemptRecord,\n error: unknown,\n signal?: AbortSignal,\n ): Promise<CryptoAioError> {\n const now = this.deps.clock.now();\n const logFailure = (storeError: unknown) =>\n this.deps.log.warn('could not record an ambiguous broadcast', {\n operationId: op.id,\n code: errorCode(storeError),\n });\n // First, and on its own: the observation is the may-be-live marker a later\n // rejection must see, whatever happens to the Operation write below. As in `accept()`,\n // this send may have delivered the bytes (`pendingAfterSend`).\n await writeObservation(this.observationDeps, attempt, op.id, (current) => ({\n lastBroadcastAt: now,\n ...pendingAfterSend(current),\n })).catch(logFailure);\n // Re-derived after a lost compare-and-set (e.g. a worker's claim mid-broadcast).\n await this.updateAfterBroadcast(op, (current) =>\n current.state === 'signed' || current.state === 'stalled'\n ? { state: 'submitted', ambiguous: true, nextCheckAt: now, clear: ['error'] }\n : undefined,\n ).catch(logFailure);\n const cause = isCryptoAioError(error)\n ? error\n : signal?.aborted\n ? new TimeoutError(\n 'TIMEOUT',\n 'the broadcast was aborted; the transaction may have reached the network',\n { cause: sanitizeError(error) },\n )\n : new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'broadcast failed; the transaction may have reached the network',\n { cause: sanitizeError(error) },\n );\n return withContext(\n cause,\n { operationId: op.id, attemptId: attempt.id },\n { ambiguous: true },\n );\n }\n\n /**\n * Accepted / already-known → `submitted` (an `included` Operation is never\n * downgraded); the acceptance is remembered on the observation (`firstSeenAt`). refused\n * and rejected → the Attempt's own ref is looked up first (seen means it was ours all\n * along). An `included` Operation, or an Attempt whose observation holds chain\n * evidence (mined, replaced or expired), is never stalled, failed or released by a later\n * answer, and a rejection of bytes a node once accepted counts only as a refusal.\n * Otherwise refused → `stalled`, keeping the nonce; rejected (proven invalid) → `failed`\n * with the nonce released, once every Attempt is rejected.\n *\n * The node's own refusal or rejection is thrown as it is; any other failure while\n * recording the answer (the bytes may have reached the network) is thrown `ambiguous`\n * with `operationId`, so a caller retries with the same key instead of paying again.\n */\n protected async applyBroadcastResult(\n target: OperationTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n result: BroadcastResult,\n lease?: LeaseHandle,\n ): Promise<OperationRecord> {\n let outcome: OperationRecord | ChainError;\n try {\n outcome = await this.recordBroadcastResult(target, op, attempt, result, lease);\n } catch (error) {\n throw this.ambiguousAfterBroadcast(op, attempt, error);\n }\n if (outcome instanceof ChainError) throw outcome;\n return outcome;\n }\n\n /** `applyBroadcastResult`'s transitions; returns (never throws) the node's own answer. */\n protected async recordBroadcastResult(\n target: OperationTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n result: BroadcastResult,\n lease?: LeaseHandle,\n ): Promise<OperationRecord | ChainError> {\n const now = this.deps.clock.now();\n const accept = async (acknowledged: boolean): Promise<OperationRecord> => {\n await writeObservation(this.observationDeps, attempt, op.id, (current) => ({\n lastBroadcastAt: now,\n ...(acknowledged ? { firstSeenAt: current?.firstSeenAt ?? now } : {}),\n ...pendingAfterSend(current),\n }));\n // Re-derived from the stored Operation after a lost compare-and-set. An\n // unscheduled one is scheduled, since a read-only pass may have moved it meanwhile.\n return this.updateAfterBroadcast(op, (current) => {\n if (isTerminal(current.state)) return undefined;\n const moves = current.state === 'signed' || current.state === 'stalled';\n if (!moves && current.ambiguous !== true && current.nextCheckAt !== undefined)\n return undefined;\n return {\n ...(moves ? { state: 'submitted' as const } : {}),\n nextCheckAt: now,\n clear: ['ambiguous', 'error'],\n };\n });\n };\n if (result.kind === 'accepted' || result.kind === 'already-known')\n return accept(true);\n // refused or rejected: first the Attempt's own ref, since a \"nonce too low\" or\n // \"already spent\" answer may be about these very bytes: seen means it was ours.\n if (await this.seenOwnRef(target, op, attempt, now)) return accept(true);\n // The monitor owns included Operations; a lagging answer never downgrades them.\n if (op.state === 'included') return op;\n const context = { operationId: op.id, attemptId: attempt.id };\n // Compare-and-set against the current observation, so chain evidence the\n // engine already holds is never overwritten, and a rejection of bytes that may be live\n // is recorded as the refusal it is.\n const saved = await writeObservation(\n this.observationDeps,\n attempt,\n op.id,\n (current): ObservationPatch => {\n if (current && CHAIN_EVIDENCE_STATES.has(current.state))\n return { lastBroadcastAt: now };\n const live = mayBeLive(current);\n const proven = result.kind === 'rejected' && !live;\n return {\n state: proven ? 'rejected' : 'refused',\n evidence: proven ? 'proven' : 'observed',\n reason: result.reason,\n lastBroadcastAt: now,\n // The `refused` state overwrites the live one, so the marker keeps a later\n // rejection seeing these bytes as possibly live (e.g. after an ambiguous send).\n ...(live ? { firstSeenAt: current?.firstSeenAt ?? now } : {}),\n };\n },\n );\n if (CHAIN_EVIDENCE_STATES.has(saved.state))\n return result.kind === 'refused' ? accept(false) : op;\n if (saved.state === 'refused') {\n const error = new ChainError(\n result.kind === 'refused' ? result.code : 'TX_REFUSED',\n `transaction refused: ${result.reason}`,\n { context },\n );\n let stalls = false;\n const next = await this.updateAfterBroadcast(op, async (current) => {\n stalls = false;\n if (isTerminal(current.state) || current.state === 'included') return undefined;\n // After a lost compare-and-set: stronger evidence may have replaced the refusal.\n if (current !== op) {\n const observation = await this.deps.stores.operations.getObservation(\n attempt.id,\n );\n if (observation?.state !== 'refused') return undefined;\n }\n stalls = true;\n return {\n state: 'stalled',\n error: error.toJSON(),\n nextCheckAt: now,\n clear: ['ambiguous'],\n };\n });\n if (stalls) {\n this.deps.events.emit('operation.stalled', {\n namespace: this.deps.namespace,\n operationId: op.id,\n code: error.code,\n });\n }\n // A new Attempt's refusal is always the answer, even when the Operation moved on\n // meanwhile (e.g. the Attempt it superseded was mined): never success for its call.\n return next.state === 'stalled' || attempt.supersedes !== undefined ? error : next;\n }\n const error = new ChainError(\n 'TX_REJECTED',\n `transaction rejected: ${result.reason}`,\n {\n context,\n },\n );\n await this.failRejected(target, op, { lease, error });\n return error;\n }\n\n /**\n * The all-rejected verdict. Once every Attempt is proven `rejected`, no valid\n * signed bytes exist for the nonce: the Operation fails and the nonce is released in the\n * same step, under the address lease, whoever reaches the verdict (the\n * broadcast path or the monitor). Under the lease it re-reads the Operation, re-checks\n * the verdict and renews the lease before the terminal compare-and-set; a lost lease or a\n * verdict that no longer holds writes nothing and returns the stored Operation. Pass the\n * held lease when already inside `withAddressLease` (it is not re-entrant).\n *\n * Without a held lease (the monitor), the lease wait is bounded by `signal` as well as\n * `acquireTimeoutMs` (the option overrides it; `0` tries once); a busy lease, or a target\n * whose wallet no longer owns the Operation (e.g. re-pointed to another key), writes\n * nothing, logs the code and returns `op`. An abort is rethrown. A worker passes its\n * claim `fence`: the terminal write carries it, and a claim taken over by another worker\n * (FENCING) writes nothing, logs the code and returns the stored Operation.\n */\n async failRejected(\n target: OperationTarget,\n op: OperationRecord,\n options: {\n readonly lease?: LeaseHandle;\n readonly error?: CryptoAioError;\n readonly signal?: AbortSignal;\n readonly acquireTimeoutMs?: number;\n readonly fence?: Fence;\n } = {},\n ): Promise<OperationRecord> {\n const { lease, error, signal, acquireTimeoutMs, fence } = options;\n try {\n this.assertOwnedBy(target, op);\n } catch (mismatch) {\n this.deps.log.warn('the resolved wallet does not own the operation', {\n operationId: op.id,\n code: errorCode(mismatch),\n });\n return op;\n }\n if (!lease && LEASED_ORDERINGS.has(target.pooled.driver.ordering)) {\n let acquired = false;\n try {\n return await this.withAddressLease(\n target,\n op,\n (held) => {\n acquired = true;\n return this.failRejected(target, op, {\n error,\n lease: held,\n ...(fence ? { fence } : {}),\n });\n },\n signal,\n acquireTimeoutMs === undefined ? undefined : { acquireTimeoutMs },\n );\n } catch (leaseError) {\n if (acquired || signal?.aborted) throw leaseError;\n this.deps.log.warn('address lease unavailable for a terminal write', {\n operationId: op.id,\n code: errorCode(leaseError),\n });\n return op;\n }\n }\n const reason =\n error ??\n new ChainError('TX_REJECTED', 'every attempt was rejected as invalid', {\n context: { operationId: op.id },\n });\n for (let tries = 0; tries < 5; tries++) {\n const current = await this.require(op.id);\n if (isTerminal(current.state) || !(await this.everyAttemptRejected(current)))\n return current;\n try {\n await lease?.renew();\n } catch (renewError) {\n this.deps.log.warn('address lease lost before a terminal write', {\n operationId: op.id,\n code: errorCode(renewError),\n });\n return current;\n }\n let failed: OperationRecord;\n try {\n failed = await this.update(\n current,\n {\n state: 'failed',\n error: reason.toJSON(),\n clear: ['ambiguous', 'nextCheckAt'],\n },\n fence,\n );\n } catch (updateError) {\n if (isCryptoAioError(updateError, 'VERSION_CONFLICT')) continue;\n if (fence && isCryptoAioError(updateError, 'FENCING')) {\n this.deps.log.debug('claim lost before a terminal write', {\n operationId: op.id,\n code: updateError.code,\n });\n return current;\n }\n throw updateError;\n }\n try {\n await this.releaseReservation(current, lease);\n } catch (releaseError) {\n this.deps.log.warn('reservation release failed', {\n operationId: op.id,\n code: errorCode(releaseError),\n });\n }\n return failed;\n }\n throw new StateError('VERSION_CONFLICT', `operation '${op.id}' kept changing`, {\n context: { operationId: op.id },\n });\n }\n\n /** Nonce reconciliation under the address lease; see `reconcileNonces` in `./reconcile`. */\n async reconcileNonces(\n target: OperationTarget,\n op: OperationRecord,\n options: { readonly signal?: AbortSignal; readonly acquireTimeoutMs?: number } = {},\n ): Promise<readonly bigint[]> {\n return reconcile.reconcileNonces(this.reconciler(), target, op, options);\n }\n\n /** The engine's steps that `./reconcile` runs, bound to this engine. */\n protected reconciler(): reconcile.Reconciler {\n return {\n deps: this.deps,\n update: (op, patch) => this.update(op, patch),\n require: (operationId) => this.require(operationId),\n sequenceKeyOf: (op) => this.sequenceKeyOf(op),\n assertOwnedBy: (target, op) => this.assertOwnedBy(target, op),\n withAddressLease: (target, op, fn, signal, options) =>\n this.withAddressLease(target, op, fn, signal, options),\n };\n }\n\n protected async everyAttemptRejected(op: OperationRecord): Promise<boolean> {\n const observations = await Promise.all(\n op.attempts.map((a) => this.deps.stores.operations.getObservation(a.id)),\n );\n return (\n observations.length > 0 &&\n observations.every((o) => o?.state === 'rejected' && o.evidence === 'proven')\n );\n }\n\n /**\n * A post-broadcast Operation write. After a lost compare-and-set the Operation is\n * re-read and `patchFor` re-derives the transition from it; `undefined` means the stored\n * state already reflects it (or it no longer applies), and the stored Operation is\n * returned.\n */\n protected async updateAfterBroadcast(\n op: OperationRecord,\n patchFor: (\n current: OperationRecord,\n ) => OperationPatch | undefined | Promise<OperationPatch | undefined>,\n ): Promise<OperationRecord> {\n let current = op;\n for (let tries = 0; tries < 5; tries++) {\n const patch = await patchFor(current);\n if (!patch) return current;\n try {\n return await this.update(current, patch);\n } catch (error) {\n if (!isCryptoAioError(error, 'VERSION_CONFLICT')) throw error;\n current = await this.require(op.id);\n }\n }\n throw new StateError('VERSION_CONFLICT', `operation '${op.id}' kept changing`, {\n context: { operationId: op.id },\n });\n }\n\n /**\n * A failure after the bytes may have reached the network is always an\n * ambiguous STATE_UNRECORDED (retryable by its catalogue entry, so no other code's\n * retryability is overridden), naming the Operation and the original code.\n */\n protected ambiguousAfterBroadcast(\n op: OperationRecord,\n attempt: AttemptRecord,\n error: unknown,\n ): CryptoAioError {\n return new StateError(\n 'STATE_UNRECORDED',\n 'the broadcast outcome could not be recorded; the transaction may have reached the network',\n {\n ambiguous: true,\n cause: sanitizeError(error),\n context: { operationId: op.id, attemptId: attempt.id },\n details: { causeCode: errorCode(error) },\n },\n );\n }\n\n /**\n * Before a refusal or rejection is believed, looks the Attempt's own ref up.\n * A failed lookup decides nothing: the Operation is scheduled for the monitor (as the\n * ambiguous path does) and the error names it.\n */\n protected async seenOwnRef(\n target: OperationTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n now: number,\n ): Promise<boolean> {\n try {\n const own = await target.pooled.driver.reader.observe(\n attempt.ref,\n attempt.ordering,\n op.intent.from,\n );\n return own.seen !== 'none';\n } catch (error) {\n await this.update(op, { nextCheckAt: now }).catch((storeError: unknown) =>\n this.deps.log.warn('could not schedule a check', {\n operationId: op.id,\n code: errorCode(storeError),\n }),\n );\n const cause = isCryptoAioError(error)\n ? error\n : new ProviderError('PROVIDER_UNAVAILABLE', 'own-transaction lookup failed', {\n cause: sanitizeError(error),\n });\n throw withContext(cause, { operationId: op.id, attemptId: attempt.id });\n }\n }\n\n /**\n * Terminal failure before any signed bytes exist (after signing, see `failRejected`):\n * mark failed, then free the nonce, both under one address lease. Callers already inside `withAddressLease` must pass their lease (it is not\n * re-entrant); a caller without one gets it acquired first (acquire → renew → CAS →\n * release, never CAS before acquire). The lease is renewed first: when it was lost (a\n * slow policy hook or signer outlived it), nothing is written, the Operation keeps its\n * state, its next repeat retries under a fresh lease, and the original `error` is\n * rethrown. Returning means the terminal write landed; a failed release after it is only\n * logged (callers rethrow their own error either way). Logs carry codes only. With\n * `release: false` (a held ref) the nonce is kept: signed bytes of another Operation\n * may use it.\n */\n protected async failAfterPrepare(\n target: OperationTarget,\n op: OperationRecord,\n error: unknown,\n lease?: LeaseHandle,\n options: { readonly release?: boolean } = {},\n ): Promise<OperationRecord> {\n if (!lease && LEASED_ORDERINGS.has(target.pooled.driver.ordering)) {\n return this.withAddressLease(target, op, (held) =>\n this.failAfterPrepare(target, op, error, held, options),\n );\n }\n try {\n await lease?.renew();\n } catch (renewError) {\n this.deps.log.warn('address lease lost before a terminal write', {\n operationId: op.id,\n code: errorCode(renewError),\n });\n throw error;\n }\n const failed = await this.update(op, {\n state: 'failed',\n // Its callers pass a veto, a signing failure or a held ref: nothing was sent.\n error: serializeError(error, 'SIGNING_FAILED'),\n clear: ['unsigned', 'partialSignatures', 'signerTickets', 'ambiguous'],\n });\n if (options.release === false) {\n // Signed bytes of another Operation may use this nonce, so it is not released\n // here; nonce reconciliation reclaims it if it is really unused.\n if (op.reservation?.kind === 'nonce') {\n this.deps.log.warn('reservation kept after a refused attempt', {\n operationId: op.id,\n code: errorCode(error),\n });\n }\n return failed;\n }\n try {\n await this.releaseReservation(op, lease);\n } catch (releaseError) {\n this.deps.log.warn('reservation release failed', {\n operationId: op.id,\n code: errorCode(releaseError),\n });\n }\n return failed;\n }\n\n /**\n * Returns the Operation's reserved nonce under the held address lease. Call at most once\n * per allocation, only after the Operation's terminal CAS made under that same lease.\n * There is no lease-less fallback: acquiring a lease only after the CAS could fail and\n * leak the nonce, so a missing lease for a nonce is a programming error.\n */\n protected async releaseReservation(\n op: OperationRecord,\n lease: LeaseHandle | undefined,\n ): Promise<void> {\n const reservation = op.reservation;\n if (reservation?.kind !== 'nonce') return;\n if (!lease) {\n throw new StateError(\n 'INVALID_TRANSITION',\n 'a nonce is released only under the address lease of its terminal write',\n { context: { operationId: op.id } },\n );\n }\n await this.deps.sequences.release(lease, this.sequenceKeyOf(op), reservation.nonce);\n }\n\n protected signingContext(\n target: OperationTarget,\n op: OperationRecord,\n unsigned: UnsignedTx,\n purpose: SigningPurpose,\n ): SigningContext {\n return {\n operationId: op.id,\n namespace: this.deps.namespace,\n chain: op.context.chain,\n network: op.context.network,\n wallet: target.wallet.name,\n ...(target.wallet.tier !== undefined ? { tier: target.wallet.tier } : {}),\n purpose,\n summary: unsigned.summary,\n fee: unsigned.fee,\n unsignedHash: sha256Hex(canonicalJson(unsigned.payload)),\n };\n }\n\n /**\n * Version-checked (and optionally fenced) state change; emits `operation.state` on\n * transitions. The store does not guard transitions, so this refuses to move a terminal\n * Operation to any other state (the version check makes `op.state` the stored state).\n */\n async update(\n op: OperationRecord,\n patch: OperationPatch,\n fence?: Fence,\n ): Promise<OperationRecord> {\n if (isTerminal(op.state) && patch.state !== undefined && patch.state !== op.state) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${op.id}' is ${op.state} and cannot become ${patch.state}`,\n { context: { operationId: op.id } },\n );\n }\n const next = await this.deps.stores.operations.update(\n this.deps.namespace,\n op.id,\n patch,\n op.version,\n fence,\n );\n if (next.state !== op.state) this.emitState(next, op.state);\n return next;\n }\n\n protected emitState(record: OperationRecord, from: OperationState | null): void {\n this.deps.events.emit('operation.state', {\n namespace: this.deps.namespace,\n operationId: record.id,\n chain: record.context.chain,\n network: record.context.network,\n from,\n to: record.state,\n ...(record.error ? { code: record.error.code } : {}),\n });\n }\n\n /** Repeats of failed or stalled Operations surface the same error as the original call. */\n protected settle(op: OperationRecord): OperationRecord {\n if ((op.state === 'failed' || op.state === 'stalled') && op.error) {\n throw rehydrateError(op.error, op.id);\n }\n return op;\n }\n}\n\n/**\n * The refusals `withRefFree` throws, recognised by identity, never by code: an input\n * conflict is a `NONCE_CONFLICT` too. They stay plain `ChainError`s, since a subclass\n * would show its own class name as the error's `name`.\n */\nconst REF_HELD = new WeakSet<object>();\n\n/**\n * The signed Attempt's ref is already held by another Operation of the namespace. A\n * `NONCE_CONFLICT` (this Operation's slot is taken), with a fixed message that holds no\n * transaction detail; the holder's id is in `details`.\n */\nfunction refHeld(operationId: string, heldBy: string): ChainError {\n const error = new ChainError(\n 'NONCE_CONFLICT',\n \"the signed transaction is identical to another operation's\",\n { context: { operationId }, details: { heldBy } },\n );\n REF_HELD.add(error);\n return error;\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import type { CodesOf } from '../errors/codes';
2
+ import type { AttemptObservation, AttemptRecord, OperationRecord, OperationState } from '../store/types';
3
+ export interface Evaluation {
4
+ readonly state: OperationState;
5
+ readonly outcome?: 'executed' | 'cancelled';
6
+ readonly error?: {
7
+ readonly code: CodesOf<'chain'>;
8
+ readonly message: string;
9
+ };
10
+ /** The Attempt whose proven result decided the Operation. */
11
+ readonly winner?: AttemptRecord;
12
+ }
13
+ /**
14
+ * Pure: derives the Operation state from its Attempts' observations.
15
+ * Every terminal verdict rests on `proven` evidence only: an executed or reverted Attempt
16
+ * proven in finalized state, or every Attempt proven dead (rejected, replaced, expired).
17
+ * Observed-only states (`dropped`, `refused`, absence, an unfinalized block) never end it.
18
+ */
19
+ export declare function evaluateOperation(op: OperationRecord, observations: ReadonlyMap<string, AttemptObservation>): Evaluation;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateOperation = evaluateOperation;
4
+ const PROVEN_DEAD = new Set(['rejected', 'replaced', 'expired']);
5
+ /**
6
+ * Pure: derives the Operation state from its Attempts' observations.
7
+ * Every terminal verdict rests on `proven` evidence only: an executed or reverted Attempt
8
+ * proven in finalized state, or every Attempt proven dead (rejected, replaced, expired).
9
+ * Observed-only states (`dropped`, `refused`, absence, an unfinalized block) never end it.
10
+ */
11
+ function evaluateOperation(op, observations) {
12
+ if (op.attempts.length === 0)
13
+ return { state: op.state };
14
+ const of = (attempt) => observations.get(attempt.id);
15
+ const provenAs = (attempt, state) => {
16
+ const o = of(attempt);
17
+ return o?.evidence === 'proven' && o.state === state;
18
+ };
19
+ const executed = op.attempts.find((a) => provenAs(a, 'final'));
20
+ if (executed) {
21
+ return {
22
+ state: 'final',
23
+ outcome: executed.purpose === 'cancel' ? 'cancelled' : 'executed',
24
+ winner: executed,
25
+ };
26
+ }
27
+ const reverted = op.attempts.find((a) => provenAs(a, 'failed'));
28
+ if (reverted) {
29
+ return {
30
+ state: 'failed',
31
+ error: {
32
+ code: 'TX_REVERTED',
33
+ message: 'the transaction was included but failed on chain',
34
+ },
35
+ winner: reverted,
36
+ };
37
+ }
38
+ const all = op.attempts.map(of);
39
+ if (all.every((o) => o?.evidence === 'proven' && PROVEN_DEAD.has(o.state))) {
40
+ if (all.some((o) => o?.state === 'expired')) {
41
+ return {
42
+ state: 'expired',
43
+ error: {
44
+ code: 'TX_EXPIRED',
45
+ message: 'the transaction expired without being included',
46
+ },
47
+ };
48
+ }
49
+ if (all.every((o) => o?.state === 'rejected')) {
50
+ return {
51
+ state: 'failed',
52
+ error: { code: 'TX_REJECTED', message: 'every attempt was rejected as invalid' },
53
+ };
54
+ }
55
+ return {
56
+ state: 'failed',
57
+ error: {
58
+ code: 'TX_REPLACED',
59
+ message: 'the ordering slot was consumed by another transaction',
60
+ },
61
+ };
62
+ }
63
+ if (all.some((o) => o?.state === 'included' || o?.state === 'failed'))
64
+ return { state: 'included' };
65
+ const visible = all.some((o) => o?.state === 'mempool');
66
+ if (op.state === 'stalled' && !visible)
67
+ return { state: 'stalled' };
68
+ if (op.state === 'signed' && !visible)
69
+ return { state: 'signed' };
70
+ return { state: 'submitted' };
71
+ }
72
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/core/lifecycle/evaluate.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CodesOf } from '../errors/codes';\nimport type {\n AttemptObservation,\n AttemptRecord,\n OperationRecord,\n OperationState,\n} from '../store/types';\n\nexport interface Evaluation {\n readonly state: OperationState;\n readonly outcome?: 'executed' | 'cancelled';\n readonly error?: { readonly code: CodesOf<'chain'>; readonly message: string };\n /** The Attempt whose proven result decided the Operation. */\n readonly winner?: AttemptRecord;\n}\n\nconst PROVEN_DEAD = new Set(['rejected', 'replaced', 'expired']);\n\n/**\n * Pure: derives the Operation state from its Attempts' observations.\n * Every terminal verdict rests on `proven` evidence only: an executed or reverted Attempt\n * proven in finalized state, or every Attempt proven dead (rejected, replaced, expired).\n * Observed-only states (`dropped`, `refused`, absence, an unfinalized block) never end it.\n */\nexport function evaluateOperation(\n op: OperationRecord,\n observations: ReadonlyMap<string, AttemptObservation>,\n): Evaluation {\n if (op.attempts.length === 0) return { state: op.state };\n const of = (attempt: AttemptRecord) => observations.get(attempt.id);\n const provenAs = (attempt: AttemptRecord, state: string) => {\n const o = of(attempt);\n return o?.evidence === 'proven' && o.state === state;\n };\n const executed = op.attempts.find((a) => provenAs(a, 'final'));\n if (executed) {\n return {\n state: 'final',\n outcome: executed.purpose === 'cancel' ? 'cancelled' : 'executed',\n winner: executed,\n };\n }\n const reverted = op.attempts.find((a) => provenAs(a, 'failed'));\n if (reverted) {\n return {\n state: 'failed',\n error: {\n code: 'TX_REVERTED',\n message: 'the transaction was included but failed on chain',\n },\n winner: reverted,\n };\n }\n const all = op.attempts.map(of);\n if (all.every((o) => o?.evidence === 'proven' && PROVEN_DEAD.has(o.state))) {\n if (all.some((o) => o?.state === 'expired')) {\n return {\n state: 'expired',\n error: {\n code: 'TX_EXPIRED',\n message: 'the transaction expired without being included',\n },\n };\n }\n if (all.every((o) => o?.state === 'rejected')) {\n return {\n state: 'failed',\n error: { code: 'TX_REJECTED', message: 'every attempt was rejected as invalid' },\n };\n }\n return {\n state: 'failed',\n error: {\n code: 'TX_REPLACED',\n message: 'the ordering slot was consumed by another transaction',\n },\n };\n }\n if (all.some((o) => o?.state === 'included' || o?.state === 'failed'))\n return { state: 'included' };\n const visible = all.some((o) => o?.state === 'mempool');\n if (op.state === 'stalled' && !visible) return { state: 'stalled' };\n if (op.state === 'signed' && !visible) return { state: 'signed' };\n return { state: 'submitted' };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Address } from '../model/address';
2
+ import { type NormalizedIntent, type TransferIntent } from '../model/intent';
3
+ import { type MappingContext } from '../blockchain/mapping';
4
+ export type HandleContext = MappingContext;
5
+ /** `fee` is a known `FeeSpeed` or a plain-data `FeeOverride`, recursively — amounts
6
+ * are `bigint` or a decimal string, like everywhere else in this API, never a JS `number` at
7
+ * any depth, and never a class instance such as `Date`. Also the engine's guard for a
8
+ * replacement fee. */
9
+ export declare function validateFee(fee: TransferIntent['fee']): void;
10
+ /** Resolves the asset, normalizes addresses and amounts, and enforces capabilities. */
11
+ export declare function normalizeIntent(ctx: HandleContext, intent: TransferIntent, from: Address): Promise<NormalizedIntent>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFee = validateFee;
4
+ exports.normalizeIntent = normalizeIntent;
5
+ const error_1 = require("../errors/error");
6
+ const amount_1 = require("../model/amount");
7
+ const fee_1 = require("../model/fee");
8
+ const intent_1 = require("../model/intent");
9
+ const mapping_1 = require("../blockchain/mapping");
10
+ /** Recursively rejects a JS `number` at any depth, and any non-plain value (a class
11
+ * instance such as `Date`) anywhere inside a `FeeOverride` — only plain data is allowed:
12
+ * strings, bigints, booleans, plain objects and arrays. An object field set to `undefined` is
13
+ * treated as omitted. */
14
+ function assertFeeData(value) {
15
+ if (typeof value === 'number') {
16
+ throw new error_1.ValidationError('INVALID_INTENT', 'fee override amounts must be a bigint or a decimal string, never a number');
17
+ }
18
+ if (value === null ||
19
+ typeof value === 'string' ||
20
+ typeof value === 'bigint' ||
21
+ typeof value === 'boolean') {
22
+ return;
23
+ }
24
+ if (Array.isArray(value)) {
25
+ for (const item of value)
26
+ assertFeeData(item);
27
+ return;
28
+ }
29
+ if (typeof value === 'object') {
30
+ const proto = Object.getPrototypeOf(value);
31
+ if (proto !== Object.prototype && proto !== null) {
32
+ throw new error_1.ValidationError('INVALID_INTENT', 'fee override must be plain data');
33
+ }
34
+ // An `undefined` field is an omitted optional field, not a non-plain value.
35
+ for (const v of Object.values(value))
36
+ if (v !== undefined)
37
+ assertFeeData(v);
38
+ return;
39
+ }
40
+ throw new error_1.ValidationError('INVALID_INTENT', 'fee override must be plain data');
41
+ }
42
+ /** `fee` is a known `FeeSpeed` or a plain-data `FeeOverride`, recursively — amounts
43
+ * are `bigint` or a decimal string, like everywhere else in this API, never a JS `number` at
44
+ * any depth, and never a class instance such as `Date`. Also the engine's guard for a
45
+ * replacement fee. */
46
+ function validateFee(fee) {
47
+ if (fee === undefined || (0, fee_1.isFeeSpeed)(fee))
48
+ return;
49
+ if (fee === null || typeof fee !== 'object' || Array.isArray(fee)) {
50
+ throw new error_1.ValidationError('INVALID_INTENT', 'fee must be a fee speed or a plain fee override object');
51
+ }
52
+ assertFeeData(fee);
53
+ }
54
+ /** Resolves the asset, normalizes addresses and amounts, and enforces capabilities. */
55
+ async function normalizeIntent(ctx, intent, from) {
56
+ const outputs = (0, intent_1.collectOutputs)(intent);
57
+ const asset = await ctx.assets.resolve(ctx.selection, ctx.driver, intent.asset);
58
+ const normalized = outputs.map((output) => {
59
+ const amount = amount_1.Amount.from(output.amount, asset);
60
+ if (amount.isZero())
61
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'transfer amounts must be greater than zero');
62
+ return { to: (0, mapping_1.toAddress)(ctx, output.to), amount };
63
+ });
64
+ const caps = ctx.selection.capabilities;
65
+ if (normalized.length > 1 && !caps.has('batch-transfer')) {
66
+ throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', `${ctx.selection.chain.id} does not support batch transfers`);
67
+ }
68
+ if (intent.memo !== undefined) {
69
+ if (typeof intent.memo !== 'string') {
70
+ throw new error_1.ValidationError('INVALID_INTENT', 'memo must be a string');
71
+ }
72
+ if (!caps.has('memo')) {
73
+ throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', `${ctx.selection.chain.id} does not support memos`);
74
+ }
75
+ }
76
+ validateFee(intent.fee);
77
+ if (intent.from !== undefined && !(0, mapping_1.toAddress)(ctx, intent.from).equals(from)) {
78
+ throw new error_1.ValidationError('INVALID_INTENT', 'intent.from must be the address of the selected wallet');
79
+ }
80
+ return {
81
+ asset,
82
+ outputs: normalized,
83
+ from,
84
+ ...(intent.memo !== undefined ? { memo: intent.memo } : {}),
85
+ fee: intent.fee ?? 'normal',
86
+ };
87
+ }
88
+ //# sourceMappingURL=intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/core/lifecycle/intent.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnsupportedCapabilityError, ValidationError } from '../errors/error';\nimport type { Address } from '../model/address';\nimport { Amount } from '../model/amount';\nimport { isFeeSpeed } from '../model/fee';\nimport {\n collectOutputs,\n type NormalizedIntent,\n type TransferIntent,\n} from '../model/intent';\nimport { toAddress, type MappingContext } from '../blockchain/mapping';\n\nexport type HandleContext = MappingContext;\n\n/** Recursively rejects a JS `number` at any depth, and any non-plain value (a class\n * instance such as `Date`) anywhere inside a `FeeOverride` — only plain data is allowed:\n * strings, bigints, booleans, plain objects and arrays. An object field set to `undefined` is\n * treated as omitted. */\nfunction assertFeeData(value: unknown): void {\n if (typeof value === 'number') {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'fee override amounts must be a bigint or a decimal string, never a number',\n );\n }\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'bigint' ||\n typeof value === 'boolean'\n ) {\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) assertFeeData(item);\n return;\n }\n if (typeof value === 'object') {\n const proto: unknown = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto !== null) {\n throw new ValidationError('INVALID_INTENT', 'fee override must be plain data');\n }\n // An `undefined` field is an omitted optional field, not a non-plain value.\n for (const v of Object.values(value)) if (v !== undefined) assertFeeData(v);\n return;\n }\n throw new ValidationError('INVALID_INTENT', 'fee override must be plain data');\n}\n\n/** `fee` is a known `FeeSpeed` or a plain-data `FeeOverride`, recursively — amounts\n * are `bigint` or a decimal string, like everywhere else in this API, never a JS `number` at\n * any depth, and never a class instance such as `Date`. Also the engine's guard for a\n * replacement fee. */\nexport function validateFee(fee: TransferIntent['fee']): void {\n if (fee === undefined || isFeeSpeed(fee)) return;\n if (fee === null || typeof fee !== 'object' || Array.isArray(fee)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'fee must be a fee speed or a plain fee override object',\n );\n }\n assertFeeData(fee);\n}\n\n/** Resolves the asset, normalizes addresses and amounts, and enforces capabilities. */\nexport async function normalizeIntent(\n ctx: HandleContext,\n intent: TransferIntent,\n from: Address,\n): Promise<NormalizedIntent> {\n const outputs = collectOutputs(intent);\n const asset = await ctx.assets.resolve(ctx.selection, ctx.driver, intent.asset);\n const normalized = outputs.map((output) => {\n const amount = Amount.from(output.amount, asset);\n if (amount.isZero())\n throw new ValidationError(\n 'INVALID_AMOUNT',\n 'transfer amounts must be greater than zero',\n );\n return { to: toAddress(ctx, output.to), amount };\n });\n const caps = ctx.selection.capabilities;\n if (normalized.length > 1 && !caps.has('batch-transfer')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${ctx.selection.chain.id} does not support batch transfers`,\n );\n }\n if (intent.memo !== undefined) {\n if (typeof intent.memo !== 'string') {\n throw new ValidationError('INVALID_INTENT', 'memo must be a string');\n }\n if (!caps.has('memo')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${ctx.selection.chain.id} does not support memos`,\n );\n }\n }\n validateFee(intent.fee);\n if (intent.from !== undefined && !toAddress(ctx, intent.from).equals(from)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'intent.from must be the address of the selected wallet',\n );\n }\n return {\n asset,\n outputs: normalized,\n from,\n ...(intent.memo !== undefined ? { memo: intent.memo } : {}),\n fee: intent.fee ?? 'normal',\n };\n}\n"]}