@depup/viem 2.56.0-depup.0 → 2.56.9-depup.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 (640) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +4 -4
  3. package/_cjs/account-abstraction/actions/bundler/getUserOperation.js +3 -3
  4. package/_cjs/account-abstraction/actions/bundler/getUserOperation.js.map +1 -1
  5. package/_cjs/actions/index.js +5 -3
  6. package/_cjs/actions/index.js.map +1 -1
  7. package/_cjs/actions/public/getStorageValues.js +17 -0
  8. package/_cjs/actions/public/getStorageValues.js.map +1 -0
  9. package/_cjs/actions/public/simulateBlocks.js +2 -0
  10. package/_cjs/actions/public/simulateBlocks.js.map +1 -1
  11. package/_cjs/actions/public/simulateCalls.js +6 -1
  12. package/_cjs/actions/public/simulateCalls.js.map +1 -1
  13. package/_cjs/actions/wallet/sendTransaction.js +9 -1
  14. package/_cjs/actions/wallet/sendTransaction.js.map +1 -1
  15. package/_cjs/actions/wallet/sendTransactionSync.js +9 -1
  16. package/_cjs/actions/wallet/sendTransactionSync.js.map +1 -1
  17. package/_cjs/chains/definitions/arc.js +19 -1
  18. package/_cjs/chains/definitions/arc.js.map +1 -1
  19. package/_cjs/chains/definitions/eCanna.js +23 -0
  20. package/_cjs/chains/definitions/eCanna.js.map +1 -0
  21. package/_cjs/chains/definitions/eCannaTestnet.js +24 -0
  22. package/_cjs/chains/definitions/eCannaTestnet.js.map +1 -0
  23. package/_cjs/chains/definitions/hyveChain.js +29 -0
  24. package/_cjs/chains/definitions/hyveChain.js.map +1 -0
  25. package/_cjs/chains/definitions/rabbitChainTestnet.js +24 -0
  26. package/_cjs/chains/definitions/rabbitChainTestnet.js.map +1 -0
  27. package/_cjs/chains/definitions/robinhood.js +5 -1
  28. package/_cjs/chains/definitions/robinhood.js.map +1 -1
  29. package/_cjs/chains/definitions/tempo.js +8 -0
  30. package/_cjs/chains/definitions/tempo.js.map +1 -1
  31. package/_cjs/chains/definitions/tempoModerato.js +8 -0
  32. package/_cjs/chains/definitions/tempoModerato.js.map +1 -1
  33. package/_cjs/chains/definitions/whitechainSepolia.js +25 -1
  34. package/_cjs/chains/definitions/whitechainSepolia.js.map +1 -1
  35. package/_cjs/chains/definitions/xgrTestnet.js +26 -0
  36. package/_cjs/chains/definitions/xgrTestnet.js.map +1 -0
  37. package/_cjs/chains/definitions/zagros.js +33 -0
  38. package/_cjs/chains/definitions/zagros.js.map +1 -0
  39. package/_cjs/chains/index.js +24 -12
  40. package/_cjs/chains/index.js.map +1 -1
  41. package/_cjs/clients/decorators/public.js +2 -0
  42. package/_cjs/clients/decorators/public.js.map +1 -1
  43. package/_cjs/errors/version.js +1 -1
  44. package/_cjs/index.js.map +1 -1
  45. package/_cjs/linea/actions/estimateGas.js +10 -2
  46. package/_cjs/linea/actions/estimateGas.js.map +1 -1
  47. package/_cjs/op-stack/chains.js +3 -1
  48. package/_cjs/op-stack/chains.js.map +1 -1
  49. package/_cjs/tempo/Abis.js +1221 -54
  50. package/_cjs/tempo/Abis.js.map +1 -1
  51. package/_cjs/tempo/Account.js +77 -81
  52. package/_cjs/tempo/Account.js.map +1 -1
  53. package/_cjs/tempo/Addresses.js +3 -1
  54. package/_cjs/tempo/Addresses.js.map +1 -1
  55. package/_cjs/tempo/Client.js +10 -2
  56. package/_cjs/tempo/Client.js.map +1 -1
  57. package/_cjs/tempo/Decorator.js +14 -1
  58. package/_cjs/tempo/Decorator.js.map +1 -1
  59. package/_cjs/tempo/Formatters.js +29 -9
  60. package/_cjs/tempo/Formatters.js.map +1 -1
  61. package/_cjs/tempo/Multisig.js +1000 -0
  62. package/_cjs/tempo/Multisig.js.map +1 -0
  63. package/_cjs/tempo/Selectors.js +9 -7
  64. package/_cjs/tempo/Selectors.js.map +1 -1
  65. package/_cjs/tempo/{Storage.js → Store.js} +34 -9
  66. package/_cjs/tempo/Store.js.map +1 -0
  67. package/_cjs/tempo/Transaction.js +19 -31
  68. package/_cjs/tempo/Transaction.js.map +1 -1
  69. package/_cjs/tempo/Transport.js +51 -5
  70. package/_cjs/tempo/Transport.js.map +1 -1
  71. package/_cjs/tempo/Zone.js.map +1 -1
  72. package/_cjs/tempo/actions/accessKey.js +103 -8
  73. package/_cjs/tempo/actions/accessKey.js.map +1 -1
  74. package/_cjs/tempo/actions/amm.js +6 -0
  75. package/_cjs/tempo/actions/amm.js.map +1 -1
  76. package/_cjs/tempo/actions/channel.js +12 -0
  77. package/_cjs/tempo/actions/channel.js.map +1 -1
  78. package/_cjs/tempo/actions/dex.js +10 -0
  79. package/_cjs/tempo/actions/dex.js.map +1 -1
  80. package/_cjs/tempo/actions/earn/deployment.js +37 -7
  81. package/_cjs/tempo/actions/earn/deployment.js.map +1 -1
  82. package/_cjs/tempo/actions/earn.js +17 -0
  83. package/_cjs/tempo/actions/earn.js.map +1 -1
  84. package/_cjs/tempo/actions/fee.js +4 -0
  85. package/_cjs/tempo/actions/fee.js.map +1 -1
  86. package/_cjs/tempo/actions/index.js +2 -1
  87. package/_cjs/tempo/actions/index.js.map +1 -1
  88. package/_cjs/tempo/actions/multisig.js +86 -28
  89. package/_cjs/tempo/actions/multisig.js.map +1 -1
  90. package/_cjs/tempo/actions/policy.js +8 -0
  91. package/_cjs/tempo/actions/policy.js.map +1 -1
  92. package/_cjs/tempo/actions/propAmm.js +349 -0
  93. package/_cjs/tempo/actions/propAmm.js.map +1 -0
  94. package/_cjs/tempo/actions/receivePolicy.js +6 -0
  95. package/_cjs/tempo/actions/receivePolicy.js.map +1 -1
  96. package/_cjs/tempo/actions/reward.js +4 -0
  97. package/_cjs/tempo/actions/reward.js.map +1 -1
  98. package/_cjs/tempo/actions/token.js +32 -0
  99. package/_cjs/tempo/actions/token.js.map +1 -1
  100. package/_cjs/tempo/actions/virtualAddress.js +2 -0
  101. package/_cjs/tempo/actions/virtualAddress.js.map +1 -1
  102. package/_cjs/tempo/actions/zone.js +7 -5
  103. package/_cjs/tempo/actions/zone.js.map +1 -1
  104. package/_cjs/tempo/chainConfig.js +152 -69
  105. package/_cjs/tempo/chainConfig.js.map +1 -1
  106. package/_cjs/tempo/index.js +5 -2
  107. package/_cjs/tempo/index.js.map +1 -1
  108. package/_cjs/tempo/internal/utils.js +2 -1
  109. package/_cjs/tempo/internal/utils.js.map +1 -1
  110. package/_cjs/tempo/multisig/Config.js +84 -0
  111. package/_cjs/tempo/multisig/Config.js.map +1 -0
  112. package/_cjs/tempo/multisig/Operation.js +163 -0
  113. package/_cjs/tempo/multisig/Operation.js.map +1 -0
  114. package/_cjs/tempo/multisig/Signature.js +11 -0
  115. package/_cjs/tempo/multisig/Signature.js.map +1 -0
  116. package/_cjs/tokens/definitions/cirbtc.js +1 -0
  117. package/_cjs/tokens/definitions/cirbtc.js.map +1 -1
  118. package/_cjs/tokens/definitions/eurc.js +2 -0
  119. package/_cjs/tokens/definitions/eurc.js.map +1 -1
  120. package/_cjs/tokens/definitions/usdc.js +2 -0
  121. package/_cjs/tokens/definitions/usdc.js.map +1 -1
  122. package/_cjs/utils/buildRequest.js +2 -0
  123. package/_cjs/utils/buildRequest.js.map +1 -1
  124. package/_cjs/utils/encoding/fromHex.js +1 -1
  125. package/_cjs/utils/encoding/fromHex.js.map +1 -1
  126. package/_cjs/utils/formatters/formatter.js.map +1 -1
  127. package/_cjs/utils/hash/isHash.js +1 -2
  128. package/_cjs/utils/hash/isHash.js.map +1 -1
  129. package/_cjs/utils/siwe/createSiweMessage.js +1 -1
  130. package/_cjs/utils/siwe/createSiweMessage.js.map +1 -1
  131. package/_cjs/utils/siwe/parseSiweMessage.js +1 -1
  132. package/_cjs/utils/siwe/parseSiweMessage.js.map +1 -1
  133. package/_esm/account-abstraction/actions/bundler/getUserOperation.js +3 -3
  134. package/_esm/account-abstraction/actions/bundler/getUserOperation.js.map +1 -1
  135. package/_esm/actions/index.js +1 -0
  136. package/_esm/actions/index.js.map +1 -1
  137. package/_esm/actions/public/getStorageValues.js +39 -0
  138. package/_esm/actions/public/getStorageValues.js.map +1 -0
  139. package/_esm/actions/public/simulateBlocks.js +4 -0
  140. package/_esm/actions/public/simulateBlocks.js.map +1 -1
  141. package/_esm/actions/public/simulateCalls.js +7 -1
  142. package/_esm/actions/public/simulateCalls.js.map +1 -1
  143. package/_esm/actions/wallet/sendTransaction.js +9 -1
  144. package/_esm/actions/wallet/sendTransaction.js.map +1 -1
  145. package/_esm/actions/wallet/sendTransactionSync.js +9 -1
  146. package/_esm/actions/wallet/sendTransactionSync.js.map +1 -1
  147. package/_esm/chains/definitions/arc.js +19 -1
  148. package/_esm/chains/definitions/arc.js.map +1 -1
  149. package/_esm/chains/definitions/eCanna.js +20 -0
  150. package/_esm/chains/definitions/eCanna.js.map +1 -0
  151. package/_esm/chains/definitions/eCannaTestnet.js +21 -0
  152. package/_esm/chains/definitions/eCannaTestnet.js.map +1 -0
  153. package/_esm/chains/definitions/hyveChain.js +26 -0
  154. package/_esm/chains/definitions/hyveChain.js.map +1 -0
  155. package/_esm/chains/definitions/rabbitChainTestnet.js +21 -0
  156. package/_esm/chains/definitions/rabbitChainTestnet.js.map +1 -0
  157. package/_esm/chains/definitions/robinhood.js +5 -1
  158. package/_esm/chains/definitions/robinhood.js.map +1 -1
  159. package/_esm/chains/definitions/tempo.js +8 -0
  160. package/_esm/chains/definitions/tempo.js.map +1 -1
  161. package/_esm/chains/definitions/tempoModerato.js +8 -0
  162. package/_esm/chains/definitions/tempoModerato.js.map +1 -1
  163. package/_esm/chains/definitions/whitechainSepolia.js +25 -1
  164. package/_esm/chains/definitions/whitechainSepolia.js.map +1 -1
  165. package/_esm/chains/definitions/xgrTestnet.js +23 -0
  166. package/_esm/chains/definitions/xgrTestnet.js.map +1 -0
  167. package/_esm/chains/definitions/zagros.js +30 -0
  168. package/_esm/chains/definitions/zagros.js.map +1 -0
  169. package/_esm/chains/index.js +6 -0
  170. package/_esm/chains/index.js.map +1 -1
  171. package/_esm/clients/decorators/public.js +2 -0
  172. package/_esm/clients/decorators/public.js.map +1 -1
  173. package/_esm/errors/version.js +1 -1
  174. package/_esm/index.js.map +1 -1
  175. package/_esm/linea/actions/estimateGas.js +10 -2
  176. package/_esm/linea/actions/estimateGas.js.map +1 -1
  177. package/_esm/op-stack/chains.js +1 -0
  178. package/_esm/op-stack/chains.js.map +1 -1
  179. package/_esm/tempo/Abis.js +1224 -56
  180. package/_esm/tempo/Abis.js.map +1 -1
  181. package/_esm/tempo/Account.js +77 -81
  182. package/_esm/tempo/Account.js.map +1 -1
  183. package/_esm/tempo/Addresses.js +4 -0
  184. package/_esm/tempo/Addresses.js.map +1 -1
  185. package/_esm/tempo/Client.js +22 -3
  186. package/_esm/tempo/Client.js.map +1 -1
  187. package/_esm/tempo/Decorator.js +14 -1
  188. package/_esm/tempo/Decorator.js.map +1 -1
  189. package/_esm/tempo/Formatters.js +32 -11
  190. package/_esm/tempo/Formatters.js.map +1 -1
  191. package/_esm/tempo/Multisig.js +1030 -0
  192. package/_esm/tempo/Multisig.js.map +1 -0
  193. package/_esm/tempo/Selectors.js +8 -6
  194. package/_esm/tempo/Selectors.js.map +1 -1
  195. package/_esm/tempo/{Storage.js → Store.js} +37 -26
  196. package/_esm/tempo/Store.js.map +1 -0
  197. package/_esm/tempo/Transaction.js +20 -32
  198. package/_esm/tempo/Transaction.js.map +1 -1
  199. package/_esm/tempo/Transport.js +71 -6
  200. package/_esm/tempo/Transport.js.map +1 -1
  201. package/_esm/tempo/Zone.js +1 -2
  202. package/_esm/tempo/Zone.js.map +1 -1
  203. package/_esm/tempo/actions/accessKey.js +105 -20
  204. package/_esm/tempo/actions/accessKey.js.map +1 -1
  205. package/_esm/tempo/actions/amm.js +6 -0
  206. package/_esm/tempo/actions/amm.js.map +1 -1
  207. package/_esm/tempo/actions/channel.js +12 -0
  208. package/_esm/tempo/actions/channel.js.map +1 -1
  209. package/_esm/tempo/actions/dex.js +10 -0
  210. package/_esm/tempo/actions/dex.js.map +1 -1
  211. package/_esm/tempo/actions/earn/deployment.js +37 -8
  212. package/_esm/tempo/actions/earn/deployment.js.map +1 -1
  213. package/_esm/tempo/actions/earn.js +17 -0
  214. package/_esm/tempo/actions/earn.js.map +1 -1
  215. package/_esm/tempo/actions/fee.js +4 -0
  216. package/_esm/tempo/actions/fee.js.map +1 -1
  217. package/_esm/tempo/actions/index.js +1 -0
  218. package/_esm/tempo/actions/index.js.map +1 -1
  219. package/_esm/tempo/actions/multisig.js +129 -63
  220. package/_esm/tempo/actions/multisig.js.map +1 -1
  221. package/_esm/tempo/actions/policy.js +8 -0
  222. package/_esm/tempo/actions/policy.js.map +1 -1
  223. package/_esm/tempo/actions/propAmm.js +539 -0
  224. package/_esm/tempo/actions/propAmm.js.map +1 -0
  225. package/_esm/tempo/actions/receivePolicy.js +6 -0
  226. package/_esm/tempo/actions/receivePolicy.js.map +1 -1
  227. package/_esm/tempo/actions/reward.js +4 -0
  228. package/_esm/tempo/actions/reward.js.map +1 -1
  229. package/_esm/tempo/actions/token.js +32 -0
  230. package/_esm/tempo/actions/token.js.map +1 -1
  231. package/_esm/tempo/actions/virtualAddress.js +2 -0
  232. package/_esm/tempo/actions/virtualAddress.js.map +1 -1
  233. package/_esm/tempo/actions/zone.js +8 -6
  234. package/_esm/tempo/actions/zone.js.map +1 -1
  235. package/_esm/tempo/chainConfig.js +160 -86
  236. package/_esm/tempo/chainConfig.js.map +1 -1
  237. package/_esm/tempo/index.js +5 -3
  238. package/_esm/tempo/index.js.map +1 -1
  239. package/_esm/tempo/internal/utils.js +2 -1
  240. package/_esm/tempo/internal/utils.js.map +1 -1
  241. package/_esm/tempo/multisig/Config.js +89 -0
  242. package/_esm/tempo/multisig/Config.js.map +1 -0
  243. package/_esm/tempo/multisig/Operation.js +170 -0
  244. package/_esm/tempo/multisig/Operation.js.map +1 -0
  245. package/_esm/tempo/multisig/Signature.js +9 -0
  246. package/_esm/tempo/multisig/Signature.js.map +1 -0
  247. package/_esm/tokens/definitions/cirbtc.js +1 -0
  248. package/_esm/tokens/definitions/cirbtc.js.map +1 -1
  249. package/_esm/tokens/definitions/eurc.js +2 -0
  250. package/_esm/tokens/definitions/eurc.js.map +1 -1
  251. package/_esm/tokens/definitions/usdc.js +2 -0
  252. package/_esm/tokens/definitions/usdc.js.map +1 -1
  253. package/_esm/utils/buildRequest.js +7 -0
  254. package/_esm/utils/buildRequest.js.map +1 -1
  255. package/_esm/utils/encoding/fromHex.js +1 -1
  256. package/_esm/utils/encoding/fromHex.js.map +1 -1
  257. package/_esm/utils/formatters/formatter.js +1 -0
  258. package/_esm/utils/formatters/formatter.js.map +1 -1
  259. package/_esm/utils/hash/isHash.js +1 -2
  260. package/_esm/utils/hash/isHash.js.map +1 -1
  261. package/_esm/utils/siwe/createSiweMessage.js +1 -1
  262. package/_esm/utils/siwe/createSiweMessage.js.map +1 -1
  263. package/_esm/utils/siwe/parseSiweMessage.js +1 -1
  264. package/_esm/utils/siwe/parseSiweMessage.js.map +1 -1
  265. package/_types/account-abstraction/actions/bundler/getUserOperation.d.ts +9 -9
  266. package/_types/account-abstraction/actions/bundler/getUserOperation.d.ts.map +1 -1
  267. package/_types/account-abstraction/types/userOperation.d.ts +6 -3
  268. package/_types/account-abstraction/types/userOperation.d.ts.map +1 -1
  269. package/_types/actions/index.d.ts +1 -0
  270. package/_types/actions/index.d.ts.map +1 -1
  271. package/_types/actions/public/getStorageValues.d.ts +59 -0
  272. package/_types/actions/public/getStorageValues.d.ts.map +1 -0
  273. package/_types/actions/public/simulateBlocks.d.ts +8 -0
  274. package/_types/actions/public/simulateBlocks.d.ts.map +1 -1
  275. package/_types/actions/public/simulateCalls.d.ts.map +1 -1
  276. package/_types/actions/wallet/sendTransaction.d.ts.map +1 -1
  277. package/_types/actions/wallet/sendTransactionSync.d.ts.map +1 -1
  278. package/_types/celo/chainConfig.d.ts +6 -840
  279. package/_types/celo/chainConfig.d.ts.map +1 -1
  280. package/_types/celo/formatters.d.ts +4 -421
  281. package/_types/celo/formatters.d.ts.map +1 -1
  282. package/_types/chains/definitions/abstract.d.ts +4 -371
  283. package/_types/chains/definitions/abstract.d.ts.map +1 -1
  284. package/_types/chains/definitions/abstractTestnet.d.ts +4 -371
  285. package/_types/chains/definitions/abstractTestnet.d.ts.map +1 -1
  286. package/_types/chains/definitions/ancient8.d.ts +3 -226
  287. package/_types/chains/definitions/ancient8.d.ts.map +1 -1
  288. package/_types/chains/definitions/ancient8Sepolia.d.ts +3 -226
  289. package/_types/chains/definitions/ancient8Sepolia.d.ts.map +1 -1
  290. package/_types/chains/definitions/arc.d.ts +13 -21
  291. package/_types/chains/definitions/arc.d.ts.map +1 -1
  292. package/_types/chains/definitions/base.d.ts +6 -452
  293. package/_types/chains/definitions/base.d.ts.map +1 -1
  294. package/_types/chains/definitions/baseGoerli.d.ts +3 -226
  295. package/_types/chains/definitions/baseGoerli.d.ts.map +1 -1
  296. package/_types/chains/definitions/baseSepolia.d.ts +6 -452
  297. package/_types/chains/definitions/baseSepolia.d.ts.map +1 -1
  298. package/_types/chains/definitions/battlechain.d.ts +4 -371
  299. package/_types/chains/definitions/battlechain.d.ts.map +1 -1
  300. package/_types/chains/definitions/battlechainTestnet.d.ts +4 -371
  301. package/_types/chains/definitions/battlechainTestnet.d.ts.map +1 -1
  302. package/_types/chains/definitions/blast.d.ts +3 -226
  303. package/_types/chains/definitions/blast.d.ts.map +1 -1
  304. package/_types/chains/definitions/bob.d.ts +3 -226
  305. package/_types/chains/definitions/bob.d.ts.map +1 -1
  306. package/_types/chains/definitions/bobSepolia.d.ts +3 -226
  307. package/_types/chains/definitions/bobSepolia.d.ts.map +1 -1
  308. package/_types/chains/definitions/celo.d.ts +6 -840
  309. package/_types/chains/definitions/celo.d.ts.map +1 -1
  310. package/_types/chains/definitions/celoAlfajores.d.ts +6 -840
  311. package/_types/chains/definitions/celoAlfajores.d.ts.map +1 -1
  312. package/_types/chains/definitions/celoSepolia.d.ts +6 -840
  313. package/_types/chains/definitions/celoSepolia.d.ts.map +1 -1
  314. package/_types/chains/definitions/codex.d.ts +3 -226
  315. package/_types/chains/definitions/codex.d.ts.map +1 -1
  316. package/_types/chains/definitions/codexTestnet.d.ts +3 -226
  317. package/_types/chains/definitions/codexTestnet.d.ts.map +1 -1
  318. package/_types/chains/definitions/dchain.d.ts +3 -226
  319. package/_types/chains/definitions/dchain.d.ts.map +1 -1
  320. package/_types/chains/definitions/dchainTestnet.d.ts +3 -226
  321. package/_types/chains/definitions/dchainTestnet.d.ts.map +1 -1
  322. package/_types/chains/definitions/eCanna.d.ts +51 -0
  323. package/_types/chains/definitions/eCanna.d.ts.map +1 -0
  324. package/_types/chains/definitions/eCannaTestnet.d.ts +51 -0
  325. package/_types/chains/definitions/eCannaTestnet.d.ts.map +1 -0
  326. package/_types/chains/definitions/elysiumTestnet.d.ts +3 -226
  327. package/_types/chains/definitions/elysiumTestnet.d.ts.map +1 -1
  328. package/_types/chains/definitions/fraxtal.d.ts +3 -226
  329. package/_types/chains/definitions/fraxtal.d.ts.map +1 -1
  330. package/_types/chains/definitions/fraxtalTestnet.d.ts +3 -226
  331. package/_types/chains/definitions/fraxtalTestnet.d.ts.map +1 -1
  332. package/_types/chains/definitions/funkiMainnet.d.ts +3 -226
  333. package/_types/chains/definitions/funkiMainnet.d.ts.map +1 -1
  334. package/_types/chains/definitions/funkiSepolia.d.ts +3 -226
  335. package/_types/chains/definitions/funkiSepolia.d.ts.map +1 -1
  336. package/_types/chains/definitions/garnet.d.ts +3 -226
  337. package/_types/chains/definitions/garnet.d.ts.map +1 -1
  338. package/_types/chains/definitions/giwaSepolia.d.ts +6 -452
  339. package/_types/chains/definitions/giwaSepolia.d.ts.map +1 -1
  340. package/_types/chains/definitions/hyveChain.d.ts +49 -0
  341. package/_types/chains/definitions/hyveChain.d.ts.map +1 -0
  342. package/_types/chains/definitions/ink.d.ts +3 -226
  343. package/_types/chains/definitions/ink.d.ts.map +1 -1
  344. package/_types/chains/definitions/inkSepolia.d.ts +3 -226
  345. package/_types/chains/definitions/inkSepolia.d.ts.map +1 -1
  346. package/_types/chains/definitions/lisk.d.ts +3 -226
  347. package/_types/chains/definitions/lisk.d.ts.map +1 -1
  348. package/_types/chains/definitions/liskSepolia.d.ts +3 -226
  349. package/_types/chains/definitions/liskSepolia.d.ts.map +1 -1
  350. package/_types/chains/definitions/megaeth.d.ts +3 -226
  351. package/_types/chains/definitions/megaeth.d.ts.map +1 -1
  352. package/_types/chains/definitions/metalL2.d.ts +3 -226
  353. package/_types/chains/definitions/metalL2.d.ts.map +1 -1
  354. package/_types/chains/definitions/mode.d.ts +3 -226
  355. package/_types/chains/definitions/mode.d.ts.map +1 -1
  356. package/_types/chains/definitions/modeTestnet.d.ts +3 -226
  357. package/_types/chains/definitions/modeTestnet.d.ts.map +1 -1
  358. package/_types/chains/definitions/optimism.d.ts +3 -226
  359. package/_types/chains/definitions/optimism.d.ts.map +1 -1
  360. package/_types/chains/definitions/optimismGoerli.d.ts +3 -226
  361. package/_types/chains/definitions/optimismGoerli.d.ts.map +1 -1
  362. package/_types/chains/definitions/optimismSepolia.d.ts +3 -226
  363. package/_types/chains/definitions/optimismSepolia.d.ts.map +1 -1
  364. package/_types/chains/definitions/pgn.d.ts +3 -226
  365. package/_types/chains/definitions/pgn.d.ts.map +1 -1
  366. package/_types/chains/definitions/pgnTestnet.d.ts +3 -226
  367. package/_types/chains/definitions/pgnTestnet.d.ts.map +1 -1
  368. package/_types/chains/definitions/playfiAlbireo.d.ts +4 -371
  369. package/_types/chains/definitions/playfiAlbireo.d.ts.map +1 -1
  370. package/_types/chains/definitions/pyrope.d.ts +3 -226
  371. package/_types/chains/definitions/pyrope.d.ts.map +1 -1
  372. package/_types/chains/definitions/rabbitChainTestnet.d.ts +51 -0
  373. package/_types/chains/definitions/rabbitChainTestnet.d.ts.map +1 -0
  374. package/_types/chains/definitions/redstone.d.ts +3 -226
  375. package/_types/chains/definitions/redstone.d.ts.map +1 -1
  376. package/_types/chains/definitions/robinhood.d.ts +2 -1
  377. package/_types/chains/definitions/robinhood.d.ts.map +1 -1
  378. package/_types/chains/definitions/rss3.d.ts +3 -226
  379. package/_types/chains/definitions/rss3.d.ts.map +1 -1
  380. package/_types/chains/definitions/rss3Sepolia.d.ts +3 -226
  381. package/_types/chains/definitions/rss3Sepolia.d.ts.map +1 -1
  382. package/_types/chains/definitions/shape.d.ts +3 -226
  383. package/_types/chains/definitions/shape.d.ts.map +1 -1
  384. package/_types/chains/definitions/shapeSepolia.d.ts +3 -226
  385. package/_types/chains/definitions/shapeSepolia.d.ts.map +1 -1
  386. package/_types/chains/definitions/snax.d.ts +3 -226
  387. package/_types/chains/definitions/snax.d.ts.map +1 -1
  388. package/_types/chains/definitions/snaxTestnet.d.ts +3 -226
  389. package/_types/chains/definitions/snaxTestnet.d.ts.map +1 -1
  390. package/_types/chains/definitions/soneium.d.ts +3 -226
  391. package/_types/chains/definitions/soneium.d.ts.map +1 -1
  392. package/_types/chains/definitions/soneiumMinato.d.ts +3 -226
  393. package/_types/chains/definitions/soneiumMinato.d.ts.map +1 -1
  394. package/_types/chains/definitions/sophon.d.ts +4 -371
  395. package/_types/chains/definitions/sophon.d.ts.map +1 -1
  396. package/_types/chains/definitions/sophonTestnet.d.ts +4 -371
  397. package/_types/chains/definitions/sophonTestnet.d.ts.map +1 -1
  398. package/_types/chains/definitions/superseed.d.ts +3 -226
  399. package/_types/chains/definitions/superseed.d.ts.map +1 -1
  400. package/_types/chains/definitions/superseedSepolia.d.ts +3 -226
  401. package/_types/chains/definitions/superseedSepolia.d.ts.map +1 -1
  402. package/_types/chains/definitions/swellchain.d.ts +3 -226
  403. package/_types/chains/definitions/swellchain.d.ts.map +1 -1
  404. package/_types/chains/definitions/swellchainTestnet.d.ts +3 -226
  405. package/_types/chains/definitions/swellchainTestnet.d.ts.map +1 -1
  406. package/_types/chains/definitions/tempo.d.ts +30 -949
  407. package/_types/chains/definitions/tempo.d.ts.map +1 -1
  408. package/_types/chains/definitions/tempoDevnet.d.ts +14 -940
  409. package/_types/chains/definitions/tempoDevnet.d.ts.map +1 -1
  410. package/_types/chains/definitions/tempoLocalnet.d.ts +14 -940
  411. package/_types/chains/definitions/tempoLocalnet.d.ts.map +1 -1
  412. package/_types/chains/definitions/tempoModerato.d.ts +30 -949
  413. package/_types/chains/definitions/tempoModerato.d.ts.map +1 -1
  414. package/_types/chains/definitions/treasure.d.ts +4 -371
  415. package/_types/chains/definitions/treasure.d.ts.map +1 -1
  416. package/_types/chains/definitions/treasureTopaz.d.ts +4 -371
  417. package/_types/chains/definitions/treasureTopaz.d.ts.map +1 -1
  418. package/_types/chains/definitions/unichain.d.ts +3 -226
  419. package/_types/chains/definitions/unichain.d.ts.map +1 -1
  420. package/_types/chains/definitions/unichainSepolia.d.ts +3 -226
  421. package/_types/chains/definitions/unichainSepolia.d.ts.map +1 -1
  422. package/_types/chains/definitions/whitechainSepolia.d.ts +58 -4
  423. package/_types/chains/definitions/whitechainSepolia.d.ts.map +1 -1
  424. package/_types/chains/definitions/worldchain.d.ts +3 -226
  425. package/_types/chains/definitions/worldchain.d.ts.map +1 -1
  426. package/_types/chains/definitions/worldchainSepolia.d.ts +3 -226
  427. package/_types/chains/definitions/worldchainSepolia.d.ts.map +1 -1
  428. package/_types/chains/definitions/xgrTestnet.d.ts +51 -0
  429. package/_types/chains/definitions/xgrTestnet.d.ts.map +1 -0
  430. package/_types/chains/definitions/zagros.d.ts +50 -0
  431. package/_types/chains/definitions/zagros.d.ts.map +1 -0
  432. package/_types/chains/definitions/zircuit.d.ts +3 -226
  433. package/_types/chains/definitions/zircuit.d.ts.map +1 -1
  434. package/_types/chains/definitions/zircuitGarfieldTestnet.d.ts +3 -226
  435. package/_types/chains/definitions/zircuitGarfieldTestnet.d.ts.map +1 -1
  436. package/_types/chains/definitions/zksync.d.ts +4 -371
  437. package/_types/chains/definitions/zksync.d.ts.map +1 -1
  438. package/_types/chains/definitions/zksyncInMemoryNode.d.ts +4 -371
  439. package/_types/chains/definitions/zksyncInMemoryNode.d.ts.map +1 -1
  440. package/_types/chains/definitions/zksyncLocalCustomHyperchain.d.ts +4 -371
  441. package/_types/chains/definitions/zksyncLocalCustomHyperchain.d.ts.map +1 -1
  442. package/_types/chains/definitions/zksyncLocalHyperchain.d.ts +4 -371
  443. package/_types/chains/definitions/zksyncLocalHyperchain.d.ts.map +1 -1
  444. package/_types/chains/definitions/zksyncLocalNode.d.ts +4 -371
  445. package/_types/chains/definitions/zksyncLocalNode.d.ts.map +1 -1
  446. package/_types/chains/definitions/zksyncSepoliaTestnet.d.ts +4 -371
  447. package/_types/chains/definitions/zksyncSepoliaTestnet.d.ts.map +1 -1
  448. package/_types/chains/definitions/zora.d.ts +3 -226
  449. package/_types/chains/definitions/zora.d.ts.map +1 -1
  450. package/_types/chains/definitions/zoraSepolia.d.ts +3 -226
  451. package/_types/chains/definitions/zoraSepolia.d.ts.map +1 -1
  452. package/_types/chains/definitions/zoraTestnet.d.ts +3 -226
  453. package/_types/chains/definitions/zoraTestnet.d.ts.map +1 -1
  454. package/_types/chains/index.d.ts +6 -0
  455. package/_types/chains/index.d.ts.map +1 -1
  456. package/_types/clients/decorators/public.d.ts +11 -0
  457. package/_types/clients/decorators/public.d.ts.map +1 -1
  458. package/_types/errors/version.d.ts +1 -1
  459. package/_types/index.d.ts +1 -0
  460. package/_types/index.d.ts.map +1 -1
  461. package/_types/linea/actions/estimateGas.d.ts.map +1 -1
  462. package/_types/linea/types/rpc.d.ts +2 -2
  463. package/_types/linea/types/rpc.d.ts.map +1 -1
  464. package/_types/op-stack/chainConfig.d.ts +3 -226
  465. package/_types/op-stack/chainConfig.d.ts.map +1 -1
  466. package/_types/op-stack/chains.d.ts +1 -0
  467. package/_types/op-stack/chains.d.ts.map +1 -1
  468. package/_types/op-stack/formatters.d.ts +5 -228
  469. package/_types/op-stack/formatters.d.ts.map +1 -1
  470. package/_types/tempo/Abis.d.ts +14795 -9731
  471. package/_types/tempo/Abis.d.ts.map +1 -1
  472. package/_types/tempo/Account.d.ts +54 -21
  473. package/_types/tempo/Account.d.ts.map +1 -1
  474. package/_types/tempo/Addresses.d.ts +4 -0
  475. package/_types/tempo/Addresses.d.ts.map +1 -1
  476. package/_types/tempo/Client.d.ts +23 -1
  477. package/_types/tempo/Client.d.ts.map +1 -1
  478. package/_types/tempo/Decorator.d.ts +235 -6
  479. package/_types/tempo/Decorator.d.ts.map +1 -1
  480. package/_types/tempo/Formatters.d.ts.map +1 -1
  481. package/_types/tempo/Multisig.d.ts +37 -0
  482. package/_types/tempo/Multisig.d.ts.map +1 -0
  483. package/_types/tempo/Selectors.d.ts +8 -6
  484. package/_types/tempo/Selectors.d.ts.map +1 -1
  485. package/_types/tempo/Store.d.ts +62 -0
  486. package/_types/tempo/Store.d.ts.map +1 -0
  487. package/_types/tempo/Transaction.d.ts +24 -34
  488. package/_types/tempo/Transaction.d.ts.map +1 -1
  489. package/_types/tempo/Transport.d.ts +37 -5
  490. package/_types/tempo/Transport.d.ts.map +1 -1
  491. package/_types/tempo/Zone.d.ts +35 -6799
  492. package/_types/tempo/Zone.d.ts.map +1 -1
  493. package/_types/tempo/actions/accessKey.d.ts +38 -8
  494. package/_types/tempo/actions/accessKey.d.ts.map +1 -1
  495. package/_types/tempo/actions/amm.d.ts.map +1 -1
  496. package/_types/tempo/actions/channel.d.ts.map +1 -1
  497. package/_types/tempo/actions/dex.d.ts.map +1 -1
  498. package/_types/tempo/actions/earn/deployment.d.ts +5 -6
  499. package/_types/tempo/actions/earn/deployment.d.ts.map +1 -1
  500. package/_types/tempo/actions/earn.d.ts +621 -1
  501. package/_types/tempo/actions/earn.d.ts.map +1 -1
  502. package/_types/tempo/actions/fee.d.ts.map +1 -1
  503. package/_types/tempo/actions/index.d.ts +1 -0
  504. package/_types/tempo/actions/index.d.ts.map +1 -1
  505. package/_types/tempo/actions/multisig.d.ts +139 -136
  506. package/_types/tempo/actions/multisig.d.ts.map +1 -1
  507. package/_types/tempo/actions/policy.d.ts.map +1 -1
  508. package/_types/tempo/actions/propAmm.d.ts +2228 -0
  509. package/_types/tempo/actions/propAmm.d.ts.map +1 -0
  510. package/_types/tempo/actions/receivePolicy.d.ts.map +1 -1
  511. package/_types/tempo/actions/reward.d.ts.map +1 -1
  512. package/_types/tempo/actions/token.d.ts.map +1 -1
  513. package/_types/tempo/actions/virtualAddress.d.ts.map +1 -1
  514. package/_types/tempo/actions/zone.d.ts +4 -4
  515. package/_types/tempo/actions/zone.d.ts.map +1 -1
  516. package/_types/tempo/chainConfig.d.ts +8 -473
  517. package/_types/tempo/chainConfig.d.ts.map +1 -1
  518. package/_types/tempo/index.d.ts +8 -3
  519. package/_types/tempo/index.d.ts.map +1 -1
  520. package/_types/tempo/internal/types.d.ts +1 -1
  521. package/_types/tempo/internal/types.d.ts.map +1 -1
  522. package/_types/tempo/internal/utils.d.ts +1 -0
  523. package/_types/tempo/internal/utils.d.ts.map +1 -1
  524. package/_types/tempo/multisig/Config.d.ts +42 -0
  525. package/_types/tempo/multisig/Config.d.ts.map +1 -0
  526. package/_types/tempo/multisig/Operation.d.ts +32 -0
  527. package/_types/tempo/multisig/Operation.d.ts.map +1 -0
  528. package/_types/tempo/multisig/Signature.d.ts +4 -0
  529. package/_types/tempo/multisig/Signature.d.ts.map +1 -0
  530. package/_types/tokens/definitions/cirbtc.d.ts +1 -0
  531. package/_types/tokens/definitions/cirbtc.d.ts.map +1 -1
  532. package/_types/tokens/definitions/eurc.d.ts +2 -0
  533. package/_types/tokens/definitions/eurc.d.ts.map +1 -1
  534. package/_types/tokens/definitions/usdc.d.ts +2 -0
  535. package/_types/tokens/definitions/usdc.d.ts.map +1 -1
  536. package/_types/tokens/sets.d.ts +7 -0
  537. package/_types/tokens/sets.d.ts.map +1 -1
  538. package/_types/types/chain.d.ts +10 -0
  539. package/_types/types/chain.d.ts.map +1 -1
  540. package/_types/types/eip1193.d.ts +20 -0
  541. package/_types/types/eip1193.d.ts.map +1 -1
  542. package/_types/utils/buildRequest.d.ts.map +1 -1
  543. package/_types/utils/formatters/block.d.ts +1 -1
  544. package/_types/utils/formatters/formatter.d.ts +1 -2
  545. package/_types/utils/formatters/formatter.d.ts.map +1 -1
  546. package/_types/utils/formatters/transaction.d.ts +1 -1
  547. package/_types/utils/formatters/transactionReceipt.d.ts +1 -1
  548. package/_types/utils/formatters/transactionRequest.d.ts +1 -1
  549. package/_types/utils/hash/isHash.d.ts +1 -2
  550. package/_types/utils/hash/isHash.d.ts.map +1 -1
  551. package/_types/zksync/chainConfig.d.ts +4 -371
  552. package/_types/zksync/chainConfig.d.ts.map +1 -1
  553. package/_types/zksync/formatters.d.ts +6 -374
  554. package/_types/zksync/formatters.d.ts.map +1 -1
  555. package/account-abstraction/actions/bundler/getUserOperation.ts +9 -9
  556. package/account-abstraction/types/userOperation.ts +6 -3
  557. package/actions/index.ts +6 -0
  558. package/actions/public/getStorageValues.ts +93 -0
  559. package/actions/public/simulateBlocks.ts +13 -0
  560. package/actions/public/simulateCalls.ts +8 -1
  561. package/actions/wallet/sendTransaction.ts +9 -1
  562. package/actions/wallet/sendTransactionSync.ts +9 -1
  563. package/chains/definitions/arc.ts +19 -1
  564. package/chains/definitions/eCanna.ts +20 -0
  565. package/chains/definitions/eCannaTestnet.ts +21 -0
  566. package/chains/definitions/hyveChain.ts +26 -0
  567. package/chains/definitions/rabbitChainTestnet.ts +21 -0
  568. package/chains/definitions/robinhood.ts +5 -1
  569. package/chains/definitions/tempo.ts +8 -0
  570. package/chains/definitions/tempoModerato.ts +8 -0
  571. package/chains/definitions/whitechainSepolia.ts +26 -1
  572. package/chains/definitions/xgrTestnet.ts +23 -0
  573. package/chains/definitions/zagros.ts +30 -0
  574. package/chains/index.ts +6 -0
  575. package/changes.json +4 -4
  576. package/clients/decorators/public.ts +18 -0
  577. package/errors/version.ts +1 -1
  578. package/index.ts +5 -0
  579. package/linea/actions/estimateGas.ts +11 -1
  580. package/linea/types/rpc.ts +2 -1
  581. package/op-stack/chains.ts +1 -0
  582. package/package.json +8 -8
  583. package/tempo/Abis.ts +1237 -65
  584. package/tempo/Account.ts +156 -136
  585. package/tempo/Addresses.ts +5 -0
  586. package/tempo/Client.ts +46 -3
  587. package/tempo/Decorator.ts +279 -11
  588. package/tempo/Formatters.ts +39 -21
  589. package/tempo/Multisig.ts +1377 -0
  590. package/tempo/Selectors.ts +12 -7
  591. package/tempo/Store.ts +170 -0
  592. package/tempo/Transaction.ts +58 -68
  593. package/tempo/Transport.ts +125 -10
  594. package/tempo/Zone.ts +30 -4
  595. package/tempo/actions/accessKey.ts +211 -23
  596. package/tempo/actions/amm.ts +7 -0
  597. package/tempo/actions/channel.ts +12 -0
  598. package/tempo/actions/dex.ts +10 -0
  599. package/tempo/actions/earn/deployment.ts +40 -12
  600. package/tempo/actions/earn.ts +19 -0
  601. package/tempo/actions/fee.ts +4 -0
  602. package/tempo/actions/index.ts +1 -0
  603. package/tempo/actions/multisig.ts +192 -94
  604. package/tempo/actions/policy.ts +8 -0
  605. package/tempo/actions/propAmm.ts +998 -0
  606. package/tempo/actions/receivePolicy.ts +6 -0
  607. package/tempo/actions/reward.ts +5 -0
  608. package/tempo/actions/token.ts +33 -0
  609. package/tempo/actions/virtualAddress.ts +2 -0
  610. package/tempo/actions/zone.ts +10 -8
  611. package/tempo/chainConfig.ts +220 -100
  612. package/tempo/index.ts +9 -1
  613. package/tempo/internal/types.ts +3 -2
  614. package/tempo/internal/utils.ts +2 -0
  615. package/tempo/multisig/Config.ts +141 -0
  616. package/tempo/multisig/Operation.ts +211 -0
  617. package/tempo/multisig/Signature.ts +11 -0
  618. package/tokens/definitions/cirbtc.ts +1 -0
  619. package/tokens/definitions/eurc.ts +2 -0
  620. package/tokens/definitions/usdc.ts +2 -0
  621. package/types/chain.ts +14 -0
  622. package/types/eip1193.ts +20 -0
  623. package/utils/buildRequest.ts +6 -0
  624. package/utils/encoding/fromHex.ts +1 -1
  625. package/utils/formatters/formatter.ts +4 -4
  626. package/utils/hash/isHash.ts +2 -3
  627. package/utils/siwe/createSiweMessage.ts +1 -1
  628. package/utils/siwe/parseSiweMessage.ts +1 -1
  629. package/_cjs/tempo/Storage.js.map +0 -1
  630. package/_cjs/tempo/internal/multisig.js +0 -56
  631. package/_cjs/tempo/internal/multisig.js.map +0 -1
  632. package/_esm/tempo/Storage.js.map +0 -1
  633. package/_esm/tempo/internal/multisig.js +0 -56
  634. package/_esm/tempo/internal/multisig.js.map +0 -1
  635. package/_types/tempo/Storage.d.ts +0 -42
  636. package/_types/tempo/Storage.d.ts.map +0 -1
  637. package/_types/tempo/internal/multisig.d.ts +0 -13
  638. package/_types/tempo/internal/multisig.d.ts.map +0 -1
  639. package/tempo/Storage.ts +0 -115
  640. package/tempo/internal/multisig.ts +0 -72
@@ -0,0 +1,1000 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRequest = handleRequest;
4
+ const Address_ = require("ox/Address");
5
+ const Hash = require("ox/Hash");
6
+ const Hex = require("ox/Hex");
7
+ const RpcResponse = require("ox/RpcResponse");
8
+ const tempo_1 = require("ox/tempo");
9
+ const getBlockNumber_js_1 = require("../actions/public/getBlockNumber.js");
10
+ const createClient_js_1 = require("../clients/createClient.js");
11
+ const custom_js_1 = require("../clients/transports/custom.js");
12
+ const decodeFunctionData_js_1 = require("../utils/abi/decodeFunctionData.js");
13
+ const isAddressEqual_js_1 = require("../utils/address/isAddressEqual.js");
14
+ const Abis = require("./Abis.js");
15
+ const Addresses = require("./Addresses.js");
16
+ const multisig_js_1 = require("./actions/multisig.js");
17
+ const ConfigStore = require("./multisig/Config.js");
18
+ const OperationStore = require("./multisig/Operation.js");
19
+ const Transaction = require("./Transaction.js");
20
+ const submissionTtl = 30_000;
21
+ const pollingInterval = 100;
22
+ function handleRequest(next, parameters) {
23
+ if (!parameters.store.compareAndSet)
24
+ throw new RpcResponse.InvalidParamsError({
25
+ message: 'Multisig coordination requires a store with atomic `compareAndSet`.',
26
+ });
27
+ return async (request, requestOptions_) => {
28
+ const requestOptions = await resolveRequestOptions({
29
+ request,
30
+ requestOptions: requestOptions_,
31
+ store: parameters.store,
32
+ });
33
+ const client = (0, createClient_js_1.createClient)({
34
+ transport: (0, custom_js_1.custom)({
35
+ request: ({ method, params }, options) => next({ method, params }, { ...requestOptions, ...options }),
36
+ }),
37
+ });
38
+ if (request.method === 'multisig_getConfig') {
39
+ const value = request.params?.[0];
40
+ const address = value && typeof value === 'object' && 'address' in value
41
+ ? value.address
42
+ : undefined;
43
+ if (typeof address !== 'string' ||
44
+ !Address_.validate(address) ||
45
+ Hex.toBigInt(address) === 0n)
46
+ throw new RpcResponse.InvalidParamsError({
47
+ message: 'Expected a multisig account address.',
48
+ });
49
+ const blockNumber = await (0, getBlockNumber_js_1.getBlockNumber)(client, { cacheTime: 0 });
50
+ const commitment = await (0, multisig_js_1.getConfigCommitment)(client, {
51
+ account: address,
52
+ blockNumber,
53
+ });
54
+ const config = await ConfigStore.read(parameters.store, {
55
+ address,
56
+ commitment,
57
+ });
58
+ if (!config)
59
+ return null;
60
+ return tempo_1.MultisigConfig.toRpc(config);
61
+ }
62
+ if (request.method === 'multisig_getOperation') {
63
+ const hash = request.params?.[0];
64
+ if (typeof hash !== 'string' || !Hash.validate(hash))
65
+ throw new RpcResponse.InvalidParamsError({
66
+ message: 'Expected a multisig operation hash.',
67
+ });
68
+ const operation = await OperationStore.read(parameters.store, hash);
69
+ return operation ? tempo_1.MultisigOperation.toRpc(operation) : null;
70
+ }
71
+ if (request.method === 'multisig_approveKeyAuthorization')
72
+ return await approveKeyAuthorization({
73
+ client,
74
+ request,
75
+ store: parameters.store,
76
+ });
77
+ if (request.method === 'eth_getTransactionByHash' ||
78
+ request.method === 'eth_getTransactionReceipt') {
79
+ const hash = request.params?.[0];
80
+ if (typeof hash !== 'string' || !Hash.validate(hash))
81
+ return await next(request, requestOptions);
82
+ const operation = await OperationStore.read(parameters.store, hash);
83
+ if (!operation || operation.type !== 'transaction')
84
+ return await next(request, requestOptions);
85
+ if (request.method === 'eth_getTransactionReceipt') {
86
+ if (operation.status === 'pending')
87
+ return null;
88
+ const transactionHash = await getSubmittedTransactionHash(parameters.store, operation);
89
+ if (!transactionHash)
90
+ return null;
91
+ const receipt = await next({
92
+ ...request,
93
+ params: [transactionHash],
94
+ }, requestOptions);
95
+ if (!receipt || typeof receipt !== 'object')
96
+ return receipt;
97
+ const success = operation.status === 'submitting'
98
+ ? await completeSubmission(parameters.store, operation, transactionHash)
99
+ : operation;
100
+ return {
101
+ ...receipt,
102
+ multisig: tempo_1.MultisigOperation.toRpc(success),
103
+ };
104
+ }
105
+ if (operation.status === 'pending')
106
+ return await toTransaction(client, operation);
107
+ const transactionHash = await getSubmittedTransactionHash(parameters.store, operation);
108
+ if (!transactionHash)
109
+ return await toTransaction(client, operation);
110
+ const transaction = await next({
111
+ ...request,
112
+ params: [transactionHash],
113
+ }, requestOptions);
114
+ if (!transaction || typeof transaction !== 'object')
115
+ return await toTransaction(client, operation);
116
+ const success = operation.status === 'submitting'
117
+ ? await completeSubmission(parameters.store, operation, transactionHash)
118
+ : operation;
119
+ return {
120
+ ...transaction,
121
+ multisig: tempo_1.MultisigOperation.toRpc(success),
122
+ };
123
+ }
124
+ if (request.method !== 'eth_sendRawTransaction' &&
125
+ request.method !== 'eth_sendRawTransactionSync' &&
126
+ request.method !== 'multisig_approveRawTransaction' &&
127
+ request.method !== 'multisig_approveRawTransactionSync')
128
+ return await next(request, requestOptions);
129
+ const standard = request.method === 'eth_sendRawTransaction' ||
130
+ request.method === 'eth_sendRawTransactionSync';
131
+ const serialized = request.params?.[0];
132
+ if (!isSerializedTempoTransaction(serialized)) {
133
+ if (standard)
134
+ return await next(request, requestOptions);
135
+ throw new RpcResponse.InvalidParamsError({
136
+ message: 'Expected a serialized Tempo multisig transaction.',
137
+ });
138
+ }
139
+ return await submit({
140
+ client,
141
+ method: request.method,
142
+ next,
143
+ request,
144
+ requestOptions,
145
+ serialized,
146
+ store: parameters.store,
147
+ });
148
+ };
149
+ }
150
+ async function submit(options) {
151
+ const transaction = (() => {
152
+ try {
153
+ return deserialize(options.serialized);
154
+ }
155
+ catch (error) {
156
+ if (options.method !== 'eth_sendRawTransaction' &&
157
+ options.method !== 'eth_sendRawTransactionSync')
158
+ throw error;
159
+ return undefined;
160
+ }
161
+ })();
162
+ const signature = transaction?.signature;
163
+ if (!transaction || signature?.type !== 'multisig') {
164
+ if (options.method === 'eth_sendRawTransaction' ||
165
+ options.method === 'eth_sendRawTransactionSync')
166
+ return await options.next(options.request, options.requestOptions);
167
+ throw new RpcResponse.InvalidParamsError({
168
+ message: 'Expected a multisig transaction signature.',
169
+ });
170
+ }
171
+ const { signature: _, ...unsigned } = transaction;
172
+ const envelope = tempo_1.TxEnvelopeTempo.from(unsigned);
173
+ const serializedUnsigned = serializeUnsigned(envelope, options.serialized.startsWith(tempo_1.TxEnvelopeTempo.feePayerMagic));
174
+ const blockNumber = await (0, getBlockNumber_js_1.getBlockNumber)(options.client, { cacheTime: 0 });
175
+ const config = tempo_1.MultisigConfig.from(signature.config);
176
+ const configCommitment = await validateConfig({
177
+ account: signature.account,
178
+ blockNumber,
179
+ client: options.client,
180
+ config,
181
+ });
182
+ const operationHash = tempo_1.MultisigOperation.getHash({
183
+ account: signature.account,
184
+ config,
185
+ transaction: serializedUnsigned,
186
+ type: 'transaction',
187
+ });
188
+ const incoming = signature.signatures.map((signature) => tempo_1.SignatureEnvelope.serialize(signature));
189
+ if (incoming.length === 0)
190
+ throw new RpcResponse.InvalidParamsError({
191
+ message: 'A multisig approval envelope must include a signature.',
192
+ });
193
+ const now = Date.now();
194
+ const expiredSubmissionIds = new Set();
195
+ const operation = await OperationStore.update(options.store, operationHash, async (existing) => {
196
+ if (existing && existing.type !== 'transaction')
197
+ throw new OperationStore.InvalidStoreValueError();
198
+ if (existing?.status === 'success')
199
+ return existing;
200
+ if (existing?.status === 'submitting' && existing.expiresAt > now)
201
+ return existing;
202
+ if (existing?.status === 'submitting')
203
+ expiredSubmissionIds.add(existing.submissionId);
204
+ const existingApprovals = existing
205
+ ? await selectApprovals({
206
+ account: signature.account,
207
+ config,
208
+ hash: operationHash,
209
+ approvals: existing.approvals,
210
+ })
211
+ : undefined;
212
+ const approvals = await selectApprovals({
213
+ account: signature.account,
214
+ config,
215
+ hash: operationHash,
216
+ approvals: [...(existingApprovals?.approvals ?? []), ...incoming],
217
+ });
218
+ return tempo_1.MultisigOperation.from({
219
+ account: signature.account,
220
+ approvals: approvals.approvals,
221
+ config,
222
+ createdAt: existing?.createdAt ?? now,
223
+ hash: operationHash,
224
+ signatureCount: approvals.signatureCount,
225
+ status: 'pending',
226
+ threshold: approvals.threshold,
227
+ transaction: mergeTransaction(existing?.transaction, serializedUnsigned),
228
+ type: 'transaction',
229
+ updatedAt: now,
230
+ weight: approvals.weight,
231
+ });
232
+ });
233
+ for (const submissionId of expiredSubmissionIds) {
234
+ if (operation.status === 'submitting' &&
235
+ operation.submissionId?.toLowerCase() === submissionId.toLowerCase())
236
+ continue;
237
+ await removeSettledSubmission(options.store, operationHash, submissionId);
238
+ }
239
+ await ConfigStore.write(options.store, {
240
+ address: signature.account,
241
+ commitment: configCommitment,
242
+ config,
243
+ });
244
+ await cacheNextConfigs({
245
+ account: signature.account,
246
+ config,
247
+ store: options.store,
248
+ transaction,
249
+ });
250
+ if (operation.type !== 'transaction')
251
+ throw new OperationStore.InvalidStoreValueError();
252
+ if (operation.status === 'success')
253
+ return await submittedResult(options, operation);
254
+ if (operation.status === 'submitting' && operation.expiresAt > Date.now())
255
+ return await submittingResult(options, operation);
256
+ if (operation.weight < operation.threshold)
257
+ return pendingResult(options.method, operation);
258
+ const submissionId = Hex.random(32);
259
+ const timeout = options.request.params?.[1];
260
+ const synchronous = options.method === 'eth_sendRawTransactionSync' ||
261
+ options.method === 'multisig_approveRawTransactionSync';
262
+ const leaseTtl = synchronous &&
263
+ typeof timeout === 'number' &&
264
+ Number.isSafeInteger(timeout) &&
265
+ timeout >= 0
266
+ ? timeout + submissionTtl
267
+ : submissionTtl;
268
+ const claim = await OperationStore.update(options.store, operationHash, (current) => {
269
+ if (!current || current.type !== 'transaction')
270
+ throw new OperationStore.InvalidStoreValueError();
271
+ if (current.status === 'success')
272
+ return current;
273
+ if (current.status === 'submitting' && current.expiresAt > Date.now())
274
+ return current;
275
+ if (current.weight < current.threshold)
276
+ return current;
277
+ const now = Date.now();
278
+ return tempo_1.MultisigOperation.from({
279
+ ...current,
280
+ expiresAt: Math.min(now + leaseTtl, Number.MAX_SAFE_INTEGER),
281
+ status: 'submitting',
282
+ submissionId,
283
+ updatedAt: now,
284
+ });
285
+ });
286
+ if (claim.type !== 'transaction')
287
+ throw new OperationStore.InvalidStoreValueError();
288
+ if (claim.status === 'success')
289
+ return await submittedResult(options, claim);
290
+ if (claim.status === 'pending')
291
+ return pendingResult(options.method, claim);
292
+ if (claim.submissionId !== submissionId)
293
+ return await submittingResult(options, claim);
294
+ const { final, transactionHash: initialTransactionHash } = await (async () => {
295
+ try {
296
+ const blockNumber = await (0, getBlockNumber_js_1.getBlockNumber)(options.client, {
297
+ cacheTime: 0,
298
+ });
299
+ await validateConfig({
300
+ account: claim.account,
301
+ blockNumber,
302
+ client: options.client,
303
+ config: claim.config,
304
+ });
305
+ const finalApprovals = await selectApprovals({
306
+ account: claim.account,
307
+ config: claim.config,
308
+ hash: claim.hash,
309
+ approvals: claim.approvals,
310
+ });
311
+ const final = tempo_1.MultisigOperation.serializeTransaction(claim, {
312
+ approvals: finalApprovals.selectedApprovals,
313
+ });
314
+ const transactionHash = tempo_1.TxEnvelopeTempo.hash(tempo_1.TxEnvelopeTempo.deserialize(final));
315
+ await OperationStore.writeSubmission(options.store, operationHash, submissionId, final);
316
+ return { final, transactionHash };
317
+ }
318
+ catch (error) {
319
+ await releaseSubmission(options.store, operationHash, submissionId);
320
+ throw error;
321
+ }
322
+ })();
323
+ let transactionHash = initialTransactionHash;
324
+ let result;
325
+ const stopLease = maintainSubmissionLease(options.store, operationHash, submissionId, leaseTtl);
326
+ let leaseStopped = false;
327
+ const stopLeaseOnce = async () => {
328
+ if (leaseStopped)
329
+ return;
330
+ leaseStopped = true;
331
+ await stopLease();
332
+ };
333
+ try {
334
+ try {
335
+ result = await options.next({
336
+ method: options.method === 'eth_sendRawTransaction' ||
337
+ options.method === 'multisig_approveRawTransaction'
338
+ ? 'eth_sendRawTransaction'
339
+ : 'eth_sendRawTransactionSync',
340
+ params: [final, ...(options.request.params?.slice(1) ?? [])],
341
+ }, options.requestOptions);
342
+ const returnedHash = getTransactionHash(result);
343
+ if (returnedHash.toLowerCase() !== transactionHash.toLowerCase())
344
+ transactionHash = returnedHash;
345
+ }
346
+ catch (error) {
347
+ const submittedHash = await OperationStore.readSubmission(options.store, claim, submissionId);
348
+ const transaction = await (async () => {
349
+ if (!submittedHash)
350
+ return null;
351
+ try {
352
+ return await options.next({
353
+ method: 'eth_getTransactionByHash',
354
+ params: [submittedHash],
355
+ });
356
+ }
357
+ catch {
358
+ return null;
359
+ }
360
+ })();
361
+ await stopLeaseOnce();
362
+ if (!submittedHash || !transaction) {
363
+ await releaseSubmission(options.store, operationHash, submissionId);
364
+ throw error;
365
+ }
366
+ transactionHash = submittedHash;
367
+ }
368
+ }
369
+ finally {
370
+ await stopLeaseOnce();
371
+ }
372
+ const success = await OperationStore.update(options.store, operationHash, (current) => {
373
+ if (!current || current.type !== 'transaction')
374
+ throw new OperationStore.InvalidStoreValueError();
375
+ if (current.status === 'success') {
376
+ if (current.transactionHash?.toLowerCase() !==
377
+ transactionHash.toLowerCase())
378
+ throw new OperationStore.InvalidStoreValueError();
379
+ return current;
380
+ }
381
+ if (current.status !== 'submitting' ||
382
+ current.submissionId !== submissionId)
383
+ throw new OperationStore.InvalidStoreValueError();
384
+ const { expiresAt: _, submissionId: __, ...operation } = current;
385
+ return tempo_1.MultisigOperation.from({
386
+ ...operation,
387
+ status: 'success',
388
+ transactionHash,
389
+ updatedAt: Date.now(),
390
+ });
391
+ });
392
+ if (success.type !== 'transaction' || success.status !== 'success')
393
+ throw new OperationStore.InvalidStoreValueError();
394
+ await removeSettledSubmission(options.store, operationHash, submissionId);
395
+ if (options.method === 'eth_sendRawTransactionSync' &&
396
+ result &&
397
+ typeof result === 'object')
398
+ return { ...result, multisig: tempo_1.MultisigOperation.toRpc(success) };
399
+ return await submittedResult(options, success);
400
+ }
401
+ async function approveKeyAuthorization(options) {
402
+ const value = options.request.params?.[0];
403
+ if (!value || typeof value !== 'object')
404
+ throw new RpcResponse.InvalidParamsError({
405
+ message: 'Expected a multisig key authorization approval.',
406
+ });
407
+ const approval = await (async () => {
408
+ if ('keyAuthorization' in value) {
409
+ const authorization = (() => {
410
+ try {
411
+ return tempo_1.KeyAuthorization.fromRpc(value.keyAuthorization);
412
+ }
413
+ catch {
414
+ throw new RpcResponse.InvalidParamsError({
415
+ message: 'Invalid multisig key authorization.',
416
+ });
417
+ }
418
+ })();
419
+ const signature = authorization.signature;
420
+ if (signature?.type !== 'multisig')
421
+ throw new RpcResponse.InvalidParamsError({
422
+ message: 'Expected a multisig key authorization signature.',
423
+ });
424
+ if (!authorization.account ||
425
+ !(0, isAddressEqual_js_1.isAddressEqual)(authorization.account, signature.account))
426
+ throw new RpcResponse.InvalidParamsError({
427
+ message: 'Multisig key authorization account does not match its signature.',
428
+ });
429
+ const { signature: _, ...unsigned } = authorization;
430
+ const keyAuthorization = tempo_1.KeyAuthorization.serialize(tempo_1.KeyAuthorization.from(unsigned));
431
+ const config = tempo_1.MultisigConfig.from(signature.config);
432
+ const hash = tempo_1.MultisigOperation.getHash({
433
+ account: signature.account,
434
+ config,
435
+ keyAuthorization,
436
+ type: 'keyAuthorization',
437
+ });
438
+ return {
439
+ account: signature.account,
440
+ approvals: signature.signatures.map((signature) => tempo_1.SignatureEnvelope.serialize(signature)),
441
+ config,
442
+ hash,
443
+ keyAuthorization,
444
+ };
445
+ }
446
+ if ('hash' in value && 'signature' in value) {
447
+ if (typeof value.hash !== 'string' || !Hash.validate(value.hash))
448
+ throw new RpcResponse.InvalidParamsError({
449
+ message: 'Expected a multisig operation hash.',
450
+ });
451
+ const operation = await OperationStore.read(options.store, value.hash);
452
+ if (!operation || operation.type !== 'keyAuthorization')
453
+ throw new RpcResponse.InvalidParamsError({
454
+ message: 'Multisig key authorization operation was not found.',
455
+ });
456
+ if (operation.status === 'success')
457
+ return { operation };
458
+ const signature = (() => {
459
+ try {
460
+ return tempo_1.SignatureEnvelope.serialize(tempo_1.SignatureEnvelope.from(value.signature));
461
+ }
462
+ catch {
463
+ throw new RpcResponse.InvalidParamsError({
464
+ message: 'Invalid multisig owner signature.',
465
+ });
466
+ }
467
+ })();
468
+ return {
469
+ account: operation.account,
470
+ approvals: [signature],
471
+ config: operation.config,
472
+ hash: operation.hash,
473
+ keyAuthorization: operation.keyAuthorization,
474
+ };
475
+ }
476
+ throw new RpcResponse.InvalidParamsError({
477
+ message: 'Expected a multisig key authorization approval.',
478
+ });
479
+ })();
480
+ if ('operation' in approval)
481
+ return tempo_1.MultisigOperation.toRpc(approval.operation);
482
+ if (approval.approvals.length === 0)
483
+ throw new RpcResponse.InvalidParamsError({
484
+ message: 'A multisig approval envelope must include a signature.',
485
+ });
486
+ const blockNumber = await (0, getBlockNumber_js_1.getBlockNumber)(options.client, { cacheTime: 0 });
487
+ const commitment = await validateConfig({
488
+ account: approval.account,
489
+ blockNumber,
490
+ client: options.client,
491
+ config: approval.config,
492
+ });
493
+ const now = Date.now();
494
+ const operation = await OperationStore.update(options.store, approval.hash, async (existing) => {
495
+ if (existing && existing.type !== 'keyAuthorization')
496
+ throw new OperationStore.InvalidStoreValueError();
497
+ if (existing?.status === 'success')
498
+ return existing;
499
+ if (existing &&
500
+ (existing.account.toLowerCase() !== approval.account.toLowerCase() ||
501
+ tempo_1.MultisigConfig.getCommitment(existing.config).toLowerCase() !==
502
+ tempo_1.MultisigConfig.getCommitment(approval.config).toLowerCase() ||
503
+ existing.keyAuthorization.toLowerCase() !==
504
+ approval.keyAuthorization.toLowerCase()))
505
+ throw new OperationStore.InvalidStoreValueError();
506
+ const existingApprovals = existing
507
+ ? await selectApprovals({
508
+ account: approval.account,
509
+ approvals: existing.approvals,
510
+ config: approval.config,
511
+ hash: approval.hash,
512
+ })
513
+ : undefined;
514
+ const approvals = await selectApprovals({
515
+ account: approval.account,
516
+ approvals: [
517
+ ...(existingApprovals?.approvals ?? []),
518
+ ...approval.approvals,
519
+ ],
520
+ config: approval.config,
521
+ hash: approval.hash,
522
+ });
523
+ if (existing &&
524
+ approvals.approvals.length === existing.approvals.length &&
525
+ approvals.approvals.every((approval, index) => approval === existing.approvals[index]))
526
+ return existing;
527
+ const pending = {
528
+ account: approval.account,
529
+ approvals: approvals.approvals,
530
+ config: approval.config,
531
+ createdAt: existing?.createdAt ?? now,
532
+ hash: approval.hash,
533
+ keyAuthorization: approval.keyAuthorization,
534
+ signatureCount: approvals.signatureCount,
535
+ threshold: approvals.threshold,
536
+ type: 'keyAuthorization',
537
+ updatedAt: now,
538
+ weight: approvals.weight,
539
+ };
540
+ if (approvals.weight < approvals.threshold)
541
+ return tempo_1.MultisigOperation.from({ ...pending, status: 'pending' });
542
+ return tempo_1.MultisigOperation.from({
543
+ ...pending,
544
+ keyAuthorization: tempo_1.MultisigOperation.serializeKeyAuthorization(approval.keyAuthorization, {
545
+ account: approval.account,
546
+ approvals: approvals.selectedApprovals,
547
+ config: approval.config,
548
+ }),
549
+ status: 'success',
550
+ });
551
+ });
552
+ await ConfigStore.write(options.store, {
553
+ address: approval.account,
554
+ commitment,
555
+ config: approval.config,
556
+ });
557
+ if (operation.type !== 'keyAuthorization')
558
+ throw new OperationStore.InvalidStoreValueError();
559
+ return tempo_1.MultisigOperation.toRpc(operation);
560
+ }
561
+ function deserialize(serialized) {
562
+ try {
563
+ return Transaction.deserialize(serialized);
564
+ }
565
+ catch {
566
+ throw new RpcResponse.InvalidParamsError({
567
+ message: 'Invalid serialized Tempo transaction.',
568
+ });
569
+ }
570
+ }
571
+ function assertConfig(options) {
572
+ const { account, commitment, config } = options;
573
+ if (config.version === 0n &&
574
+ tempo_1.MultisigConfig.getAddress(config, {
575
+ factory: Addresses.nativeMultisigFactory,
576
+ }).toLowerCase() !== account.toLowerCase())
577
+ throw new RpcResponse.InvalidParamsError({
578
+ message: 'Initial multisig config does not match the multisig account.',
579
+ });
580
+ if (config.version === 0n && Hex.toBigInt(commitment) === 0n)
581
+ return;
582
+ if (commitment.toLowerCase() !==
583
+ tempo_1.MultisigConfig.getCommitment(config).toLowerCase())
584
+ throw new RpcResponse.InvalidParamsError({
585
+ message: `Multisig config does not match account ${account}.`,
586
+ });
587
+ }
588
+ async function validateConfig(options) {
589
+ const { account, blockNumber, client, config } = options;
590
+ const commitment = await (0, multisig_js_1.getConfigCommitment)(client, {
591
+ account,
592
+ blockNumber,
593
+ });
594
+ assertConfig({ account, commitment, config });
595
+ return commitment;
596
+ }
597
+ async function cacheNextConfigs(options) {
598
+ let currentConfig = options.config;
599
+ for (const call of options.transaction.calls) {
600
+ if (!call.to ||
601
+ !(0, isAddressEqual_js_1.isAddressEqual)(call.to, Addresses.nativeMultisig) ||
602
+ !call.data)
603
+ continue;
604
+ const decoded = (() => {
605
+ try {
606
+ return (0, decodeFunctionData_js_1.decodeFunctionData)({ abi: Abis.nativeMultisig, data: call.data });
607
+ }
608
+ catch {
609
+ return undefined;
610
+ }
611
+ })();
612
+ if (decoded?.functionName !== 'updateConfig')
613
+ continue;
614
+ const [current, threshold, owners] = decoded.args;
615
+ const suppliedConfig = (() => {
616
+ try {
617
+ return tempo_1.MultisigConfig.from(current);
618
+ }
619
+ catch {
620
+ return undefined;
621
+ }
622
+ })();
623
+ if (!suppliedConfig ||
624
+ tempo_1.MultisigConfig.getCommitment(suppliedConfig).toLowerCase() !==
625
+ tempo_1.MultisigConfig.getCommitment(currentConfig).toLowerCase())
626
+ continue;
627
+ const config = (() => {
628
+ try {
629
+ return tempo_1.MultisigConfig.from({
630
+ owners,
631
+ salt: suppliedConfig.salt,
632
+ threshold,
633
+ version: suppliedConfig.version + 1n,
634
+ });
635
+ }
636
+ catch {
637
+ return undefined;
638
+ }
639
+ })();
640
+ if (!config)
641
+ continue;
642
+ await ConfigStore.write(options.store, {
643
+ address: options.account,
644
+ commitment: tempo_1.MultisigConfig.getCommitment(config),
645
+ config,
646
+ });
647
+ currentConfig = config;
648
+ }
649
+ }
650
+ async function selectApprovals(options) {
651
+ try {
652
+ return await tempo_1.MultisigOperation.selectApprovals(options);
653
+ }
654
+ catch (error) {
655
+ if (error instanceof tempo_1.MultisigOperation.InvalidApprovalError)
656
+ throw new RpcResponse.InvalidParamsError({ message: error.shortMessage });
657
+ throw error;
658
+ }
659
+ }
660
+ async function submittedResult(options, operation) {
661
+ if (options.method === 'eth_sendRawTransaction' ||
662
+ options.method === 'multisig_approveRawTransaction')
663
+ return operation.hash;
664
+ if (options.method === 'multisig_approveRawTransactionSync')
665
+ return tempo_1.MultisigOperation.toRpc(operation);
666
+ const timeout = options.request.params?.[1];
667
+ const deadline = Date.now() +
668
+ (typeof timeout === 'number' && timeout >= 0 ? timeout : submissionTtl);
669
+ while (true) {
670
+ const receipt = await options.next({
671
+ method: 'eth_getTransactionReceipt',
672
+ params: [operation.transactionHash],
673
+ }, options.requestOptions);
674
+ if (receipt && typeof receipt === 'object')
675
+ return { ...receipt, multisig: tempo_1.MultisigOperation.toRpc(operation) };
676
+ if (Date.now() >= deadline)
677
+ throw new Error('Timed out while waiting for the multisig transaction.');
678
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
679
+ }
680
+ }
681
+ async function submittingResult(options, operation) {
682
+ if (options.method === 'eth_sendRawTransaction' ||
683
+ options.method === 'multisig_approveRawTransaction')
684
+ return operation.hash;
685
+ const timeout = options.request.params?.[1];
686
+ const deadline = Date.now() +
687
+ (typeof timeout === 'number' && timeout >= 0 ? timeout : submissionTtl);
688
+ while (true) {
689
+ const current = await OperationStore.read(options.store, operation.hash);
690
+ if (!current || current.type !== 'transaction')
691
+ throw new OperationStore.InvalidStoreValueError();
692
+ if (current.status === 'success')
693
+ return await submittedResult(options, current);
694
+ if (current.status === 'pending' || current.expiresAt <= Date.now())
695
+ return await submit(options);
696
+ if (Date.now() >= deadline)
697
+ return pendingResult(options.method, current);
698
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
699
+ }
700
+ }
701
+ function pendingResult(method, operation) {
702
+ if (method === 'eth_sendRawTransaction' ||
703
+ method === 'multisig_approveRawTransaction')
704
+ return operation.hash;
705
+ if (method === 'multisig_approveRawTransactionSync')
706
+ return tempo_1.MultisigOperation.toRpc(operation);
707
+ return {
708
+ blockHash: null,
709
+ blockNumber: null,
710
+ contractAddress: null,
711
+ cumulativeGasUsed: null,
712
+ effectiveGasPrice: null,
713
+ from: operation.account,
714
+ gasUsed: null,
715
+ logs: [],
716
+ logsBloom: null,
717
+ multisig: tempo_1.MultisigOperation.toRpc(operation),
718
+ status: 'pending',
719
+ to: null,
720
+ transactionHash: operation.hash,
721
+ transactionIndex: null,
722
+ type: '0x76',
723
+ };
724
+ }
725
+ async function completeSubmission(store, operation, transactionHash) {
726
+ if (operation.status !== 'submitting' || !operation.submissionId)
727
+ throw new OperationStore.InvalidStoreValueError();
728
+ const success = await OperationStore.update(store, operation.hash, (current) => {
729
+ if (!current || current.type !== 'transaction')
730
+ throw new OperationStore.InvalidStoreValueError();
731
+ if (current.status === 'success') {
732
+ if (current.transactionHash?.toLowerCase() !==
733
+ transactionHash.toLowerCase())
734
+ throw new OperationStore.InvalidStoreValueError();
735
+ return current;
736
+ }
737
+ if (current.status !== 'submitting' ||
738
+ current.submissionId !== operation.submissionId)
739
+ throw new OperationStore.InvalidStoreValueError();
740
+ const { expiresAt: _, submissionId: __, transactionHash: ___, ...value } = current;
741
+ return tempo_1.MultisigOperation.from({
742
+ ...value,
743
+ status: 'success',
744
+ transactionHash,
745
+ updatedAt: Date.now(),
746
+ });
747
+ });
748
+ await removeSettledSubmission(store, operation.hash, operation.submissionId);
749
+ return success;
750
+ }
751
+ async function releaseSubmission(store, hash, submissionId) {
752
+ await OperationStore.update(store, hash, (current) => {
753
+ if (!current || current.type !== 'transaction')
754
+ throw new OperationStore.InvalidStoreValueError();
755
+ if (current.status !== 'submitting' ||
756
+ current.submissionId !== submissionId)
757
+ return current;
758
+ const { expiresAt: _, submissionId: __, ...operation } = current;
759
+ return tempo_1.MultisigOperation.from({
760
+ ...operation,
761
+ status: 'pending',
762
+ updatedAt: Date.now(),
763
+ });
764
+ });
765
+ await OperationStore.removeSubmission(store, hash, submissionId);
766
+ }
767
+ async function removeSettledSubmission(store, hash, submissionId) {
768
+ try {
769
+ await OperationStore.removeSubmission(store, hash, submissionId);
770
+ }
771
+ catch { }
772
+ }
773
+ function mergeTransaction(existing, incoming) {
774
+ if (!existing)
775
+ return incoming;
776
+ const existingTransaction = tempo_1.TxEnvelopeTempo.deserialize(existing);
777
+ const incomingTransaction = tempo_1.TxEnvelopeTempo.deserialize(incoming);
778
+ if (!('feePayerSignature' in incomingTransaction))
779
+ return existing;
780
+ if (incomingTransaction.feePayerSignature !== null)
781
+ return incoming;
782
+ if (!('feePayerSignature' in existingTransaction))
783
+ return incoming;
784
+ return existing;
785
+ }
786
+ async function toTransaction(client, operation) {
787
+ const approvals = await (async () => {
788
+ if (operation.status !== 'pending')
789
+ return await tempo_1.MultisigOperation.selectApprovals({
790
+ account: operation.account,
791
+ approvals: operation.approvals,
792
+ config: operation.config,
793
+ hash: operation.hash,
794
+ });
795
+ const blockNumber = await (0, getBlockNumber_js_1.getBlockNumber)(client, { cacheTime: 0 });
796
+ await validateConfig({
797
+ account: operation.account,
798
+ blockNumber,
799
+ client,
800
+ config: operation.config,
801
+ });
802
+ return await selectApprovals({
803
+ account: operation.account,
804
+ approvals: operation.approvals,
805
+ config: operation.config,
806
+ hash: operation.hash,
807
+ });
808
+ })();
809
+ const current = operation.status === 'pending'
810
+ ? tempo_1.MultisigOperation.from({
811
+ ...operation,
812
+ approvals: approvals.approvals,
813
+ signatureCount: approvals.signatureCount,
814
+ threshold: approvals.threshold,
815
+ weight: approvals.weight,
816
+ })
817
+ : operation;
818
+ const serialized = tempo_1.MultisigOperation.serializeTransaction(current, {
819
+ approvals: approvals.selectedApprovals,
820
+ });
821
+ const transaction = deserialize(serialized);
822
+ return {
823
+ ...tempo_1.Transaction.toRpc({
824
+ ...transaction,
825
+ blockHash: null,
826
+ blockNumber: null,
827
+ from: operation.account,
828
+ hash: operation.hash,
829
+ transactionIndex: null,
830
+ }, { pending: true }),
831
+ multisig: tempo_1.MultisigOperation.toRpc(current),
832
+ };
833
+ }
834
+ async function getSubmittedTransactionHash(store, operation) {
835
+ if (operation.status === 'success')
836
+ return operation.transactionHash;
837
+ if (operation.status !== 'submitting' || !operation.submissionId)
838
+ throw new OperationStore.InvalidStoreValueError();
839
+ return await OperationStore.readSubmission(store, operation, operation.submissionId);
840
+ }
841
+ function maintainSubmissionLease(store, hash, submissionId, leaseTtl) {
842
+ let active = true;
843
+ let error;
844
+ let renewal = Promise.resolve();
845
+ const timer = setInterval(() => {
846
+ renewal = renewal.then(async () => {
847
+ if (!active || error)
848
+ return;
849
+ try {
850
+ const operation = await OperationStore.update(store, hash, (current) => {
851
+ if (!current || current.type !== 'transaction')
852
+ throw new OperationStore.InvalidStoreValueError();
853
+ if (current.status !== 'submitting' ||
854
+ current.submissionId !== submissionId)
855
+ return current;
856
+ return tempo_1.MultisigOperation.from({
857
+ ...current,
858
+ expiresAt: Math.min(Date.now() + leaseTtl, Number.MAX_SAFE_INTEGER),
859
+ updatedAt: Date.now(),
860
+ });
861
+ });
862
+ if (operation.type !== 'transaction' ||
863
+ operation.status !== 'submitting' ||
864
+ operation.submissionId !== submissionId)
865
+ throw new OperationStore.InvalidStoreValueError();
866
+ }
867
+ catch (cause) {
868
+ error = cause;
869
+ }
870
+ });
871
+ }, submissionTtl / 2);
872
+ return async () => {
873
+ active = false;
874
+ clearInterval(timer);
875
+ await renewal;
876
+ if (error)
877
+ throw error;
878
+ };
879
+ }
880
+ function serializeUnsigned(envelope, feePayer) {
881
+ return tempo_1.TxEnvelopeTempo.serialize(envelope, feePayer
882
+ ? envelope.from
883
+ ? { format: 'feePayer', sender: envelope.from }
884
+ : { format: 'feePayer' }
885
+ : {});
886
+ }
887
+ function getTransactionHash(result) {
888
+ if (typeof result === 'string' && Hash.validate(result))
889
+ return result;
890
+ if (result &&
891
+ typeof result === 'object' &&
892
+ 'transactionHash' in result &&
893
+ typeof result.transactionHash === 'string' &&
894
+ Hash.validate(result.transactionHash))
895
+ return result.transactionHash;
896
+ throw new Error('Expected transaction hash in multisig broadcast result.');
897
+ }
898
+ async function resolveRequestOptions(options) {
899
+ const { request, requestOptions, store } = options;
900
+ const chainId_explicit = requestOptions?.chainId;
901
+ if (chainId_explicit !== undefined &&
902
+ (!Number.isSafeInteger(chainId_explicit) || chainId_explicit <= 0))
903
+ throw new RpcResponse.InvalidParamsError({
904
+ message: 'Expected a valid chain ID.',
905
+ });
906
+ const chainId_request = await resolveRequestChainId(request, store);
907
+ if (chainId_explicit !== undefined &&
908
+ chainId_request !== undefined &&
909
+ chainId_explicit !== chainId_request)
910
+ throw new RpcResponse.InvalidParamsError({
911
+ message: 'Conflicting chain ids.',
912
+ });
913
+ const chainId = chainId_explicit ?? chainId_request;
914
+ if (chainId === undefined)
915
+ return requestOptions;
916
+ return { ...requestOptions, chainId };
917
+ }
918
+ async function resolveRequestChainId(request, store) {
919
+ const value = request.params?.[0];
920
+ const chainId_body = value && typeof value === 'object' && 'chainId' in value
921
+ ? parseChainId(value.chainId)
922
+ : undefined;
923
+ const chainId_multisig = await (async () => {
924
+ if (request.method === 'eth_sendRawTransaction' ||
925
+ request.method === 'eth_sendRawTransactionSync' ||
926
+ request.method === 'multisig_approveRawTransaction' ||
927
+ request.method === 'multisig_approveRawTransactionSync') {
928
+ if (!isSerializedTempoTransaction(value))
929
+ return undefined;
930
+ try {
931
+ return parseChainId(Transaction.deserialize(value).chainId);
932
+ }
933
+ catch {
934
+ return undefined;
935
+ }
936
+ }
937
+ if (request.method === 'multisig_approveKeyAuthorization' &&
938
+ value &&
939
+ typeof value === 'object' &&
940
+ 'keyAuthorization' in value) {
941
+ try {
942
+ return parseChainId(tempo_1.KeyAuthorization.fromRpc(value.keyAuthorization).chainId);
943
+ }
944
+ catch {
945
+ return undefined;
946
+ }
947
+ }
948
+ const hash = (() => {
949
+ if (request.method === 'eth_getTransactionByHash' ||
950
+ request.method === 'eth_getTransactionReceipt')
951
+ return value;
952
+ if (request.method === 'multisig_approveKeyAuthorization' &&
953
+ value &&
954
+ typeof value === 'object' &&
955
+ 'hash' in value)
956
+ return value.hash;
957
+ return undefined;
958
+ })();
959
+ if (typeof hash !== 'string' || !Hash.validate(hash))
960
+ return undefined;
961
+ const operation = await OperationStore.read(store, hash);
962
+ if (!operation)
963
+ return undefined;
964
+ if (operation.type === 'transaction')
965
+ return parseChainId(Transaction.deserialize(operation.transaction).chainId);
966
+ return parseChainId(tempo_1.KeyAuthorization.deserialize(operation.keyAuthorization).chainId);
967
+ })();
968
+ if (chainId_body !== undefined &&
969
+ chainId_multisig !== undefined &&
970
+ chainId_body !== chainId_multisig)
971
+ throw new RpcResponse.InvalidParamsError({
972
+ message: 'Conflicting chain ids.',
973
+ });
974
+ return chainId_body ?? chainId_multisig;
975
+ }
976
+ function parseChainId(value) {
977
+ const chainId = (() => {
978
+ if (typeof value === 'number')
979
+ return value;
980
+ if (typeof value === 'bigint')
981
+ return Number(value);
982
+ if (typeof value === 'string' && Hex.validate(value)) {
983
+ try {
984
+ return Hex.toNumber(value);
985
+ }
986
+ catch {
987
+ return undefined;
988
+ }
989
+ }
990
+ return undefined;
991
+ })();
992
+ if (chainId === undefined || !Number.isSafeInteger(chainId) || chainId <= 0)
993
+ return undefined;
994
+ return chainId;
995
+ }
996
+ function isSerializedTempoTransaction(value) {
997
+ return (typeof value === 'string' &&
998
+ (value.startsWith('0x76') || value.startsWith('0x78')));
999
+ }
1000
+ //# sourceMappingURL=Multisig.js.map