ox 1.0.0-beta.8 → 1.0.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 (413) hide show
  1. package/CHANGELOG.md +1143 -0
  2. package/dist/core/Abi.d.ts +6 -2
  3. package/dist/core/Abi.d.ts.map +1 -1
  4. package/dist/core/Abi.js +6 -3
  5. package/dist/core/Abi.js.map +1 -1
  6. package/dist/core/AbiConstructor.d.ts +2 -1
  7. package/dist/core/AbiConstructor.d.ts.map +1 -1
  8. package/dist/core/AbiConstructor.js +2 -2
  9. package/dist/core/AbiConstructor.js.map +1 -1
  10. package/dist/core/AbiError.d.ts +3 -1
  11. package/dist/core/AbiError.d.ts.map +1 -1
  12. package/dist/core/AbiError.js +2 -2
  13. package/dist/core/AbiError.js.map +1 -1
  14. package/dist/core/AbiEvent.d.ts +3 -1
  15. package/dist/core/AbiEvent.d.ts.map +1 -1
  16. package/dist/core/AbiEvent.js +2 -2
  17. package/dist/core/AbiEvent.js.map +1 -1
  18. package/dist/core/AbiFunction.d.ts +3 -1
  19. package/dist/core/AbiFunction.d.ts.map +1 -1
  20. package/dist/core/AbiFunction.js +2 -2
  21. package/dist/core/AbiFunction.js.map +1 -1
  22. package/dist/core/AbiItem.d.ts +6 -3
  23. package/dist/core/AbiItem.d.ts.map +1 -1
  24. package/dist/core/AbiItem.js +9 -7
  25. package/dist/core/AbiItem.js.map +1 -1
  26. package/dist/core/AbiParameter.d.ts +88 -0
  27. package/dist/core/AbiParameter.d.ts.map +1 -0
  28. package/dist/core/AbiParameter.js +82 -0
  29. package/dist/core/AbiParameter.js.map +1 -0
  30. package/dist/core/AbiParameters.d.ts +58 -2
  31. package/dist/core/AbiParameters.d.ts.map +1 -1
  32. package/dist/core/AbiParameters.js +60 -6
  33. package/dist/core/AbiParameters.js.map +1 -1
  34. package/dist/core/Rlp.d.ts +27 -5
  35. package/dist/core/Rlp.d.ts.map +1 -1
  36. package/dist/core/Rlp.js +40 -4
  37. package/dist/core/Rlp.js.map +1 -1
  38. package/dist/core/RpcSchema.d.ts +2 -2
  39. package/dist/core/internal/abiParameters.d.ts.map +1 -1
  40. package/dist/core/internal/abiParameters.js +21 -3
  41. package/dist/core/internal/abiParameters.js.map +1 -1
  42. package/dist/core/internal/human-readable/errors.d.ts +103 -0
  43. package/dist/core/internal/human-readable/errors.d.ts.map +1 -0
  44. package/dist/core/internal/human-readable/errors.js +142 -0
  45. package/dist/core/internal/human-readable/errors.js.map +1 -0
  46. package/dist/core/internal/human-readable/formatAbi.d.ts +19 -0
  47. package/dist/core/internal/human-readable/formatAbi.d.ts.map +1 -0
  48. package/dist/core/internal/human-readable/formatAbi.js +18 -0
  49. package/dist/core/internal/human-readable/formatAbi.js.map +1 -0
  50. package/dist/core/internal/human-readable/formatAbiItem.d.ts +23 -0
  51. package/dist/core/internal/human-readable/formatAbiItem.d.ts.map +1 -0
  52. package/dist/core/internal/human-readable/formatAbiItem.js +25 -0
  53. package/dist/core/internal/human-readable/formatAbiItem.js.map +1 -0
  54. package/dist/core/internal/human-readable/formatAbiParameter.d.ts +41 -0
  55. package/dist/core/internal/human-readable/formatAbiParameter.d.ts.map +1 -0
  56. package/dist/core/internal/human-readable/formatAbiParameter.js +36 -0
  57. package/dist/core/internal/human-readable/formatAbiParameter.js.map +1 -0
  58. package/dist/core/internal/human-readable/formatAbiParameters.d.ts +26 -0
  59. package/dist/core/internal/human-readable/formatAbiParameters.d.ts.map +1 -0
  60. package/dist/core/internal/human-readable/formatAbiParameters.js +19 -0
  61. package/dist/core/internal/human-readable/formatAbiParameters.js.map +1 -0
  62. package/dist/core/internal/human-readable/parseAbi.d.ts +22 -0
  63. package/dist/core/internal/human-readable/parseAbi.d.ts.map +1 -0
  64. package/dist/core/internal/human-readable/parseAbi.js +22 -0
  65. package/dist/core/internal/human-readable/parseAbi.js.map +1 -0
  66. package/dist/core/internal/human-readable/parseAbiItem.d.ts +23 -0
  67. package/dist/core/internal/human-readable/parseAbiItem.d.ts.map +1 -0
  68. package/dist/core/internal/human-readable/parseAbiItem.js +30 -0
  69. package/dist/core/internal/human-readable/parseAbiItem.js.map +1 -0
  70. package/dist/core/internal/human-readable/parseAbiParameter.d.ts +28 -0
  71. package/dist/core/internal/human-readable/parseAbiParameter.d.ts.map +1 -0
  72. package/dist/core/internal/human-readable/parseAbiParameter.js +32 -0
  73. package/dist/core/internal/human-readable/parseAbiParameter.js.map +1 -0
  74. package/dist/core/internal/human-readable/parseAbiParameters.d.ts +38 -0
  75. package/dist/core/internal/human-readable/parseAbiParameters.d.ts.map +1 -0
  76. package/dist/core/internal/human-readable/parseAbiParameters.js +39 -0
  77. package/dist/core/internal/human-readable/parseAbiParameters.js.map +1 -0
  78. package/dist/core/internal/human-readable/regex.d.ts +9 -0
  79. package/dist/core/internal/human-readable/regex.d.ts.map +1 -0
  80. package/dist/core/internal/human-readable/regex.js +12 -0
  81. package/dist/core/internal/human-readable/regex.js.map +1 -0
  82. package/dist/core/internal/human-readable/runtime/cache.d.ts +22 -0
  83. package/dist/core/internal/human-readable/runtime/cache.d.ts.map +1 -0
  84. package/dist/core/internal/human-readable/runtime/cache.js +86 -0
  85. package/dist/core/internal/human-readable/runtime/cache.js.map +1 -0
  86. package/dist/core/internal/human-readable/runtime/signatures.d.ts +39 -0
  87. package/dist/core/internal/human-readable/runtime/signatures.d.ts.map +1 -0
  88. package/dist/core/internal/human-readable/runtime/signatures.js +67 -0
  89. package/dist/core/internal/human-readable/runtime/signatures.js.map +1 -0
  90. package/dist/core/internal/human-readable/runtime/structs.d.ts +3 -0
  91. package/dist/core/internal/human-readable/runtime/structs.d.ts.map +1 -0
  92. package/dist/core/internal/human-readable/runtime/structs.js +79 -0
  93. package/dist/core/internal/human-readable/runtime/structs.js.map +1 -0
  94. package/dist/core/internal/human-readable/runtime/utils.d.ts +205 -0
  95. package/dist/core/internal/human-readable/runtime/utils.d.ts.map +1 -0
  96. package/dist/core/internal/human-readable/runtime/utils.js +232 -0
  97. package/dist/core/internal/human-readable/runtime/utils.js.map +1 -0
  98. package/dist/core/internal/human-readable/types/signatures.d.ts +38 -0
  99. package/dist/core/internal/human-readable/types/signatures.d.ts.map +1 -0
  100. package/dist/core/internal/human-readable/types/signatures.js +2 -0
  101. package/dist/core/internal/human-readable/types/signatures.js.map +1 -0
  102. package/dist/core/internal/human-readable/types/structs.d.ts +48 -0
  103. package/dist/core/internal/human-readable/types/structs.d.ts.map +1 -0
  104. package/dist/core/internal/human-readable/types/structs.js +2 -0
  105. package/dist/core/internal/human-readable/types/structs.js.map +1 -0
  106. package/dist/core/internal/human-readable/types/utils.d.ts +163 -0
  107. package/dist/core/internal/human-readable/types/utils.d.ts.map +1 -0
  108. package/dist/core/internal/human-readable/types/utils.js +2 -0
  109. package/dist/core/internal/human-readable/types/utils.js.map +1 -0
  110. package/dist/core/internal/human-readable/types.d.ts +29 -0
  111. package/dist/core/internal/human-readable/types.d.ts.map +1 -0
  112. package/dist/core/internal/human-readable/types.js +2 -0
  113. package/dist/core/internal/human-readable/types.js.map +1 -0
  114. package/dist/core/internal/rpcSchemas/eth.d.ts +36 -0
  115. package/dist/core/internal/rpcSchemas/eth.d.ts.map +1 -1
  116. package/dist/erc4337/EntryPoint.d.ts +1072 -1
  117. package/dist/erc4337/EntryPoint.d.ts.map +1 -1
  118. package/dist/erc4337/EntryPoint.js +872 -0
  119. package/dist/erc4337/EntryPoint.js.map +1 -1
  120. package/dist/erc4337/RpcSchema.d.ts +2 -2
  121. package/dist/erc4337/RpcSchema.d.ts.map +1 -1
  122. package/dist/erc4337/UserOperation.d.ts +39 -10
  123. package/dist/erc4337/UserOperation.d.ts.map +1 -1
  124. package/dist/erc4337/UserOperation.js +62 -48
  125. package/dist/erc4337/UserOperation.js.map +1 -1
  126. package/dist/erc4337/UserOperationGas.d.ts +9 -5
  127. package/dist/erc4337/UserOperationGas.d.ts.map +1 -1
  128. package/dist/erc4337/UserOperationGas.js +17 -15
  129. package/dist/erc4337/UserOperationGas.js.map +1 -1
  130. package/dist/erc4337/UserOperationReceipt.d.ts +4 -4
  131. package/dist/erc4337/UserOperationReceipt.d.ts.map +1 -1
  132. package/dist/erc4337/UserOperationReceipt.js.map +1 -1
  133. package/dist/index.d.ts +37 -0
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +37 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/tempo/Channel.d.ts +8 -14
  138. package/dist/tempo/Channel.d.ts.map +1 -1
  139. package/dist/tempo/Channel.js +4 -8
  140. package/dist/tempo/Channel.js.map +1 -1
  141. package/dist/tempo/KeyAuthorization.d.ts +5 -5
  142. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  143. package/dist/tempo/KeyAuthorization.js +4 -4
  144. package/dist/tempo/KeyAuthorization.js.map +1 -1
  145. package/dist/tempo/MultisigConfig.d.ts +37 -85
  146. package/dist/tempo/MultisigConfig.d.ts.map +1 -1
  147. package/dist/tempo/MultisigConfig.js +39 -83
  148. package/dist/tempo/MultisigConfig.js.map +1 -1
  149. package/dist/tempo/PoolId.d.ts +8 -7
  150. package/dist/tempo/PoolId.d.ts.map +1 -1
  151. package/dist/tempo/PoolId.js +10 -6
  152. package/dist/tempo/PoolId.js.map +1 -1
  153. package/dist/tempo/SignatureEnvelope.d.ts +32 -30
  154. package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
  155. package/dist/tempo/SignatureEnvelope.js +56 -51
  156. package/dist/tempo/SignatureEnvelope.js.map +1 -1
  157. package/dist/tempo/Transaction.d.ts +16 -5
  158. package/dist/tempo/Transaction.d.ts.map +1 -1
  159. package/dist/tempo/Transaction.js +34 -7
  160. package/dist/tempo/Transaction.js.map +1 -1
  161. package/dist/tempo/TransactionReceipt.d.ts +3 -3
  162. package/dist/tempo/TransactionReceipt.d.ts.map +1 -1
  163. package/dist/tempo/TransactionReceipt.js +8 -1
  164. package/dist/tempo/TransactionReceipt.js.map +1 -1
  165. package/dist/tempo/TransactionRequest.d.ts +15 -2
  166. package/dist/tempo/TransactionRequest.d.ts.map +1 -1
  167. package/dist/tempo/TransactionRequest.js +65 -29
  168. package/dist/tempo/TransactionRequest.js.map +1 -1
  169. package/dist/tempo/TxEnvelopeTempo.d.ts +2 -3
  170. package/dist/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  171. package/dist/tempo/TxEnvelopeTempo.js +5 -6
  172. package/dist/tempo/TxEnvelopeTempo.js.map +1 -1
  173. package/dist/tempo/index.d.ts +6 -26
  174. package/dist/tempo/index.d.ts.map +1 -1
  175. package/dist/tempo/index.js +6 -26
  176. package/dist/tempo/index.js.map +1 -1
  177. package/dist/zod/Abi.d.ts +214 -0
  178. package/dist/zod/Abi.d.ts.map +1 -0
  179. package/dist/zod/Abi.js +5 -0
  180. package/dist/zod/Abi.js.map +1 -0
  181. package/dist/zod/AbiConstructor.d.ts +58 -0
  182. package/dist/zod/AbiConstructor.d.ts.map +1 -0
  183. package/dist/zod/AbiConstructor.js +18 -0
  184. package/dist/zod/AbiConstructor.js.map +1 -0
  185. package/dist/zod/AbiError.d.ts +20 -0
  186. package/dist/zod/AbiError.d.ts.map +1 -0
  187. package/dist/zod/AbiError.js +9 -0
  188. package/dist/zod/AbiError.js.map +1 -0
  189. package/dist/zod/AbiEvent.d.ts +23 -0
  190. package/dist/zod/AbiEvent.d.ts.map +1 -0
  191. package/dist/zod/AbiEvent.js +11 -0
  192. package/dist/zod/AbiEvent.js.map +1 -0
  193. package/dist/zod/AbiFallback.d.ts +16 -0
  194. package/dist/zod/AbiFallback.d.ts.map +1 -0
  195. package/dist/zod/AbiFallback.js +16 -0
  196. package/dist/zod/AbiFallback.js.map +1 -0
  197. package/dist/zod/AbiFunction.d.ts +109 -0
  198. package/dist/zod/AbiFunction.d.ts.map +1 -0
  199. package/dist/zod/AbiFunction.js +26 -0
  200. package/dist/zod/AbiFunction.js.map +1 -0
  201. package/dist/zod/AbiItem.d.ts +216 -0
  202. package/dist/zod/AbiItem.d.ts.map +1 -0
  203. package/dist/zod/AbiItem.js +26 -0
  204. package/dist/zod/AbiItem.js.map +1 -0
  205. package/dist/zod/AbiParameter.d.ts +32 -0
  206. package/dist/zod/AbiParameter.d.ts.map +1 -0
  207. package/dist/zod/AbiParameter.js +28 -0
  208. package/dist/zod/AbiParameter.js.map +1 -0
  209. package/dist/zod/AbiParameters.d.ts +30 -0
  210. package/dist/zod/AbiParameters.d.ts.map +1 -0
  211. package/dist/zod/AbiParameters.js +6 -0
  212. package/dist/zod/AbiParameters.js.map +1 -0
  213. package/dist/zod/AbiReceive.d.ts +6 -0
  214. package/dist/zod/AbiReceive.d.ts.map +1 -0
  215. package/dist/zod/AbiReceive.js +7 -0
  216. package/dist/zod/AbiReceive.js.map +1 -0
  217. package/dist/zod/RpcSchema.d.ts +6 -5
  218. package/dist/zod/RpcSchema.d.ts.map +1 -1
  219. package/dist/zod/Solidity.d.ts +15 -0
  220. package/dist/zod/Solidity.d.ts.map +1 -0
  221. package/dist/zod/Solidity.js +41 -0
  222. package/dist/zod/Solidity.js.map +1 -0
  223. package/dist/zod/TypedData.d.ts +226 -0
  224. package/dist/zod/TypedData.d.ts.map +1 -0
  225. package/dist/zod/TypedData.js +84 -0
  226. package/dist/zod/TypedData.js.map +1 -0
  227. package/dist/zod/internal/rpcSchemas/Eth.d.ts +1 -0
  228. package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
  229. package/dist/zod/internal/rpcSchemas/Eth.js +5 -0
  230. package/dist/zod/internal/rpcSchemas/Eth.js.map +1 -1
  231. package/dist/zod/tempo/AuthorizationTempo.d.ts +0 -20
  232. package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
  233. package/dist/zod/tempo/KeyAuthorization.d.ts +503 -67
  234. package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
  235. package/dist/zod/tempo/KeyAuthorization.js +32 -15
  236. package/dist/zod/tempo/KeyAuthorization.js.map +1 -1
  237. package/dist/zod/tempo/RpcSchemaTempo.d.ts +216 -34
  238. package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
  239. package/dist/zod/tempo/SignatureEnvelope.d.ts +0 -6
  240. package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
  241. package/dist/zod/tempo/SignatureEnvelope.js +0 -2
  242. package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
  243. package/dist/zod/tempo/Transaction.d.ts +1479 -333
  244. package/dist/zod/tempo/Transaction.d.ts.map +1 -1
  245. package/dist/zod/tempo/Transaction.js +65 -16
  246. package/dist/zod/tempo/Transaction.js.map +1 -1
  247. package/dist/zod/tempo/TransactionRequest.d.ts +410 -57
  248. package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
  249. package/dist/zod/tempo/TransactionRequest.js +81 -18
  250. package/dist/zod/tempo/TransactionRequest.js.map +1 -1
  251. package/dist/zod/tempo/TxEnvelopeTempo.d.ts +225 -18
  252. package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  253. package/dist/zod/tempo/TxEnvelopeTempo.js +1 -1
  254. package/dist/zod/tempo/TxEnvelopeTempo.js.map +1 -1
  255. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +0 -3
  256. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
  257. package/dist/zod/tempo/z.d.ts +0 -1
  258. package/dist/zod/tempo/z.d.ts.map +1 -1
  259. package/dist/zod/tempo/z.js +0 -1
  260. package/dist/zod/tempo/z.js.map +1 -1
  261. package/dist/zod/z.d.ts +12 -0
  262. package/dist/zod/z.d.ts.map +1 -1
  263. package/dist/zod/z.js +12 -0
  264. package/dist/zod/z.js.map +1 -1
  265. package/package.json +67 -11
  266. package/src/core/Abi.bench.ts +30 -0
  267. package/src/core/Abi.ts +13 -4
  268. package/src/core/AbiConstructor.ts +3 -2
  269. package/src/core/AbiError.ts +6 -2
  270. package/src/core/AbiEvent.ts +6 -2
  271. package/src/core/AbiFunction.ts +6 -2
  272. package/src/core/AbiItem.bench.ts +19 -0
  273. package/src/core/AbiItem.ts +20 -10
  274. package/src/core/AbiParameter.bench.ts +35 -0
  275. package/src/core/AbiParameter.ts +126 -0
  276. package/src/core/AbiParameters.bench.ts +22 -0
  277. package/src/core/AbiParameters.ts +77 -8
  278. package/src/core/Rlp.ts +66 -3
  279. package/src/core/RpcSchema.ts +2 -2
  280. package/src/core/_test/Abi.test.ts +4 -0
  281. package/src/core/_test/AbiItem.test.ts +3 -0
  282. package/src/core/_test/AbiParameter.test-d.ts +41 -0
  283. package/src/core/_test/AbiParameter.test.ts +84 -0
  284. package/src/core/_test/AbiParameters.decode.test.ts +88 -12
  285. package/src/core/_test/AbiParameters.encode.test.ts +68 -0
  286. package/src/core/_test/AbiParameters.test.ts +7 -0
  287. package/src/core/_test/Rlp.test.ts +101 -0
  288. package/src/core/_test/index.test.ts +1 -0
  289. package/src/core/internal/abiParameters.ts +21 -3
  290. package/src/core/internal/human-readable/_snap/formatAbi.test.ts.snap +74 -0
  291. package/src/core/internal/human-readable/_snap/parseAbi.test.ts.snap +2353 -0
  292. package/src/core/internal/human-readable/errors.test.ts +258 -0
  293. package/src/core/internal/human-readable/errors.ts +205 -0
  294. package/src/core/internal/human-readable/formatAbi.test-d.ts +144 -0
  295. package/src/core/internal/human-readable/formatAbi.test.ts +23 -0
  296. package/src/core/internal/human-readable/formatAbi.ts +37 -0
  297. package/src/core/internal/human-readable/formatAbiItem.test-d.ts +115 -0
  298. package/src/core/internal/human-readable/formatAbiItem.test.ts +102 -0
  299. package/src/core/internal/human-readable/formatAbiItem.ts +136 -0
  300. package/src/core/internal/human-readable/formatAbiParameter.test-d.ts +125 -0
  301. package/src/core/internal/human-readable/formatAbiParameter.test.ts +126 -0
  302. package/src/core/internal/human-readable/formatAbiParameter.ts +86 -0
  303. package/src/core/internal/human-readable/formatAbiParameters.test-d.ts +92 -0
  304. package/src/core/internal/human-readable/formatAbiParameters.test.ts +32 -0
  305. package/src/core/internal/human-readable/formatAbiParameters.ts +46 -0
  306. package/src/core/internal/human-readable/human-readable.bench-d.ts +58 -0
  307. package/src/core/internal/human-readable/integration.test.ts +68 -0
  308. package/src/core/internal/human-readable/parseAbi.test-d.ts +188 -0
  309. package/src/core/internal/human-readable/parseAbi.test.ts +82 -0
  310. package/src/core/internal/human-readable/parseAbi.ts +59 -0
  311. package/src/core/internal/human-readable/parseAbiItem.test-d.ts +183 -0
  312. package/src/core/internal/human-readable/parseAbiItem.test.ts +264 -0
  313. package/src/core/internal/human-readable/parseAbiItem.ts +91 -0
  314. package/src/core/internal/human-readable/parseAbiParameter.test-d.ts +68 -0
  315. package/src/core/internal/human-readable/parseAbiParameter.test.ts +207 -0
  316. package/src/core/internal/human-readable/parseAbiParameter.ts +95 -0
  317. package/src/core/internal/human-readable/parseAbiParameters.test-d.ts +160 -0
  318. package/src/core/internal/human-readable/parseAbiParameters.test.ts +80 -0
  319. package/src/core/internal/human-readable/parseAbiParameters.ts +123 -0
  320. package/src/core/internal/human-readable/regex.ts +15 -0
  321. package/src/core/internal/human-readable/runtime/cache.ts +96 -0
  322. package/src/core/internal/human-readable/runtime/signatures.test.ts +236 -0
  323. package/src/core/internal/human-readable/runtime/signatures.ts +106 -0
  324. package/src/core/internal/human-readable/runtime/structs.test.ts +210 -0
  325. package/src/core/internal/human-readable/runtime/structs.ts +97 -0
  326. package/src/core/internal/human-readable/runtime/utils.test.ts +717 -0
  327. package/src/core/internal/human-readable/runtime/utils.ts +344 -0
  328. package/src/core/internal/human-readable/types/signatures.test-d.ts +255 -0
  329. package/src/core/internal/human-readable/types/signatures.ts +369 -0
  330. package/src/core/internal/human-readable/types/structs.test-d.ts +221 -0
  331. package/src/core/internal/human-readable/types/structs.ts +88 -0
  332. package/src/core/internal/human-readable/types/utils.test-d.ts +1029 -0
  333. package/src/core/internal/human-readable/types/utils.ts +392 -0
  334. package/src/core/internal/human-readable/types.ts +69 -0
  335. package/src/core/internal/rpcSchemas/eth.ts +36 -0
  336. package/src/erc4337/EntryPoint.ts +875 -1
  337. package/src/erc4337/RpcSchema.ts +4 -2
  338. package/src/erc4337/UserOperation.ts +130 -60
  339. package/src/erc4337/UserOperationGas.ts +36 -28
  340. package/src/erc4337/UserOperationReceipt.ts +15 -7
  341. package/src/erc4337/_test/EntryPoint.test.ts +48 -0
  342. package/src/erc4337/_test/RpcSchema.test-d.ts +56 -0
  343. package/src/erc4337/_test/UserOperation.snap-d.ts +31 -0
  344. package/src/erc4337/_test/UserOperation.test.ts +221 -5
  345. package/src/erc4337/_test/UserOperationGas.test.ts +30 -1
  346. package/src/index.ts +38 -0
  347. package/src/tempo/Channel.test.ts +2 -23
  348. package/src/tempo/Channel.ts +10 -22
  349. package/src/tempo/KeyAuthorization.test.ts +22 -0
  350. package/src/tempo/KeyAuthorization.ts +9 -9
  351. package/src/tempo/MultisigConfig.test.ts +54 -37
  352. package/src/tempo/MultisigConfig.ts +59 -134
  353. package/src/tempo/PoolId.test.ts +7 -41
  354. package/src/tempo/PoolId.ts +15 -10
  355. package/src/tempo/SignatureEnvelope.test.ts +118 -17
  356. package/src/tempo/SignatureEnvelope.ts +77 -72
  357. package/src/tempo/Transaction.test.ts +0 -15
  358. package/src/tempo/Transaction.ts +63 -12
  359. package/src/tempo/TransactionReceipt.test.ts +76 -0
  360. package/src/tempo/TransactionReceipt.ts +11 -5
  361. package/src/tempo/TransactionRequest.test.ts +174 -1
  362. package/src/tempo/TransactionRequest.ts +84 -32
  363. package/src/tempo/TxEnvelopeTempo.test.ts +2 -2
  364. package/src/tempo/TxEnvelopeTempo.ts +7 -7
  365. package/src/tempo/e2e.test.ts +228 -50
  366. package/src/tempo/index.ts +6 -26
  367. package/src/version.ts +1 -1
  368. package/src/zod/Abi.ts +5 -0
  369. package/src/zod/AbiConstructor.ts +24 -0
  370. package/src/zod/AbiError.ts +9 -0
  371. package/src/zod/AbiEvent.ts +11 -0
  372. package/src/zod/AbiFallback.ts +22 -0
  373. package/src/zod/AbiFunction.ts +32 -0
  374. package/src/zod/AbiItem.ts +28 -0
  375. package/src/zod/AbiParameter.ts +36 -0
  376. package/src/zod/AbiParameters.ts +7 -0
  377. package/src/zod/AbiReceive.ts +7 -0
  378. package/src/zod/RpcSchema.ts +5 -5
  379. package/src/zod/Solidity.ts +83 -0
  380. package/src/zod/TypedData.ts +111 -0
  381. package/src/zod/_test/Abi.test-d.ts +46 -0
  382. package/src/zod/_test/Abi.test.ts +163 -0
  383. package/src/zod/_test/TypedData.test-d.ts +20 -0
  384. package/src/zod/_test/TypedData.test.ts +87 -0
  385. package/src/zod/_test/z.test-d.ts +6 -0
  386. package/src/zod/_test/z.test.ts +17 -0
  387. package/src/zod/internal/rpcSchemas/Eth.ts +6 -0
  388. package/src/zod/tempo/KeyAuthorization.ts +34 -15
  389. package/src/zod/tempo/SignatureEnvelope.ts +0 -2
  390. package/src/zod/tempo/Transaction.ts +84 -22
  391. package/src/zod/tempo/TransactionRequest.ts +86 -20
  392. package/src/zod/tempo/TxEnvelopeTempo.ts +1 -1
  393. package/src/zod/tempo/_test/KeyAuthorization.test.ts +53 -0
  394. package/src/zod/tempo/_test/SignatureEnvelope.test.ts +0 -2
  395. package/src/zod/tempo/_test/Transaction.test.ts +155 -0
  396. package/src/zod/tempo/_test/TransactionRequest.test.ts +44 -0
  397. package/src/zod/tempo/z.ts +0 -1
  398. package/src/zod/z.ts +12 -0
  399. package/dist/tempo/TokenId.d.ts +0 -87
  400. package/dist/tempo/TokenId.d.ts.map +0 -1
  401. package/dist/tempo/TokenId.js +0 -123
  402. package/dist/tempo/TokenId.js.map +0 -1
  403. package/dist/zod/tempo/TokenId.d.ts +0 -6
  404. package/dist/zod/tempo/TokenId.d.ts.map +0 -1
  405. package/dist/zod/tempo/TokenId.js +0 -14
  406. package/dist/zod/tempo/TokenId.js.map +0 -1
  407. package/src/CHANGELOG.md +0 -820
  408. package/src/tempo/TokenId.bench.ts +0 -36
  409. package/src/tempo/TokenId.test.ts +0 -79
  410. package/src/tempo/TokenId.ts +0 -141
  411. package/src/zod/tempo/TokenId.ts +0 -15
  412. package/src/zod/tempo/_test/TokenId.test-d.ts +0 -17
  413. package/src/zod/tempo/_test/TokenId.test.ts +0 -21
@@ -181,6 +181,12 @@ export const eth_getProof = from({
181
181
  returns: z_AccountProof.AccountProof,
182
182
  })
183
183
 
184
+ export const eth_getRawTransactionByHash = from({
185
+ method: 'eth_getRawTransactionByHash',
186
+ params: z.tuple([z_Hex.Hex]),
187
+ returns: z.nullable(z_Hex.Hex),
188
+ })
189
+
184
190
  export const eth_getStorageAt = from({
185
191
  method: 'eth_getStorageAt',
186
192
  params: z.tuple([z_Address.Address, z_Hex.Hex, BlockNumberOrTagOrIdentifier]),
@@ -12,31 +12,34 @@ import * as z_SignatureEnvelope from './SignatureEnvelope.js'
12
12
  /** RPC token spending limit schema. */
13
13
  export const RpcTokenLimit = z.object({
14
14
  limit: z_Hex.Hex,
15
- period: z.optional(z_Hex.Hex),
15
+ period: z.optional(z.nullable(z_Hex.Hex)),
16
16
  token: z_Address.Address,
17
17
  })
18
18
 
19
19
  /** RPC selector rule schema. */
20
20
  export const RpcSelectorRule = z.object({
21
- recipients: z.optional(z.readonly(z.array(z_Address.Address))),
21
+ recipients: z.optional(z.nullable(z.readonly(z.array(z_Address.Address)))),
22
22
  selector: z_Hex.Hex,
23
23
  })
24
24
 
25
25
  /** RPC call scope schema. */
26
26
  export const RpcCallScope = z.object({
27
- selectorRules: z.optional(z.readonly(z.array(RpcSelectorRule))),
27
+ selectorRules: z.optional(z.nullable(z.readonly(z.array(RpcSelectorRule)))),
28
28
  target: z_Address.Address,
29
29
  })
30
30
 
31
31
  /** RPC key authorization schema. */
32
32
  export const Rpc = z.object({
33
- allowedCalls: z.optional(z.readonly(z.array(RpcCallScope))),
33
+ account: z.optional(z.nullable(z_Address.Address)),
34
+ allowedCalls: z.optional(z.nullable(z.readonly(z.array(RpcCallScope)))),
34
35
  chainId: z_Hex.Hex,
35
36
  expiry: z.optional(z.nullable(z_Hex.Hex)),
37
+ isAdmin: z.optional(z.nullable(z.boolean())),
36
38
  keyId: z_Address.Address,
37
39
  keyType: z_SignatureEnvelope.Type,
38
- limits: z.optional(z.readonly(z.array(RpcTokenLimit))),
40
+ limits: z.optional(z.nullable(z.readonly(z.array(RpcTokenLimit)))),
39
41
  signature: z_SignatureEnvelope.Rpc,
42
+ witness: z.optional(z.nullable(z_Hex.Hex)),
40
43
  })
41
44
 
42
45
  /** Token spending limit schema. */
@@ -60,8 +63,7 @@ export const Scope = z.object({
60
63
  selector: z.optional(z.union([z_Hex.Hex, z.string()])),
61
64
  })
62
65
 
63
- /** Decoded key authorization schema. */
64
- export const Domain = z.object({
66
+ const domainShape = {
65
67
  address: z_Address.Address,
66
68
  chainId: z.bigint(),
67
69
  expiry: z.optional(z.number()),
@@ -69,18 +71,35 @@ export const Domain = z.object({
69
71
  scopes: z.optional(z.readonly(z.array(Scope))),
70
72
  signature: z_SignatureEnvelope.Domain,
71
73
  type: z_SignatureEnvelope.Type,
72
- })
74
+ witness: z.optional(z_Hex.Hex),
75
+ }
73
76
 
74
- /** Encode-only decoded key authorization schema accepting numberish `toRpc` inputs. */
75
- export const DomainToRpc = z.object({
76
- address: z_Address.Address,
77
+ /** Decoded key authorization schema (TIP-1049 admin fields are paired: both or neither). */
78
+ export const Domain = z.union([
79
+ z.object({
80
+ ...domainShape,
81
+ account: z_Address.Address,
82
+ isAdmin: z.boolean(),
83
+ }),
84
+ z.object(domainShape),
85
+ ])
86
+
87
+ const domainToRpcShape = {
88
+ ...domainShape,
77
89
  chainId: uintBigintNumberish(),
78
90
  expiry: z.optional(uintNumberNumberish()),
79
91
  limits: z.optional(z.readonly(z.array(TokenLimitToRpc))),
80
- scopes: z.optional(z.readonly(z.array(Scope))),
81
- signature: z_SignatureEnvelope.Domain,
82
- type: z_SignatureEnvelope.Type,
83
- })
92
+ }
93
+
94
+ /** Encode-only decoded key authorization schema accepting numberish `toRpc` inputs. */
95
+ export const DomainToRpc = z.union([
96
+ z.object({
97
+ ...domainToRpcShape,
98
+ account: z_Address.Address,
99
+ isAdmin: z.boolean(),
100
+ }),
101
+ z.object(domainToRpcShape),
102
+ ])
84
103
 
85
104
  /** Codec decoding an RPC key authorization into a signed key authorization. */
86
105
  export const KeyAuthorization = z.codec(Rpc, Domain, {
@@ -83,7 +83,6 @@ export const KeychainRpc = z.object({
83
83
  /** RPC native multisig signature envelope schema. */
84
84
  export const MultisigRpc = z.object({
85
85
  account: z_Address.Address,
86
- configId: z_Hex.Hex,
87
86
  init: z.optional(z_MultisigConfig.Config),
88
87
  // Owner approvals are raw serialized signatures (node `Vec<Bytes>`).
89
88
  signatures: z.readonly(z.array(z_Hex.Hex)),
@@ -140,7 +139,6 @@ export const Keychain = z.object({
140
139
  /** Native multisig signature envelope schema. */
141
140
  export const Multisig = z.object({
142
141
  account: z_Address.Address,
143
- genesisConfigId: z_Hex.Hex,
144
142
  init: z.optional(z_MultisigConfig.Config),
145
143
  // `signatures` is recursive; type the getter concretely to break the cycle.
146
144
  signatures: z.lazy(
@@ -22,12 +22,16 @@ const FeePayerSignature = z.object({
22
22
  yParity: z_Number.Number,
23
23
  })
24
24
 
25
+ /** Nullable RPC call field schema (the node serializes absent fields as `null`). */
26
+ const NullableHex = z.optional(z.union([z_Hex.Hex, z.null()]))
27
+
25
28
  /** Tempo transaction call schema (decodes the RPC `input` field to `data`). */
26
29
  const Call = z.codec(
27
30
  z.object({
28
- input: z.optional(z_Hex.Hex),
29
- to: z.optional(z_Hex.Hex),
30
- value: z.optional(z_Hex.Hex),
31
+ data: NullableHex,
32
+ input: NullableHex,
33
+ to: NullableHex,
34
+ value: NullableHex,
31
35
  }),
32
36
  z.object({
33
37
  data: z.optional(z_Hex.Hex),
@@ -36,9 +40,9 @@ const Call = z.codec(
36
40
  }),
37
41
  {
38
42
  decode: (value) => ({
39
- data: value.input,
40
- to: value.to,
41
- value: value.value === '0x' ? undefined : value.value,
43
+ data: value.input ?? value.data ?? undefined,
44
+ to: value.to ?? undefined,
45
+ value: !value.value || value.value === '0x' ? undefined : value.value,
42
46
  }),
43
47
  encode: (value) => ({
44
48
  input: value.data,
@@ -51,9 +55,10 @@ const Call = z.codec(
51
55
  /** Encode-only tempo transaction call schema accepting numberish `toRpc` inputs. */
52
56
  const CallToRpc = z.codec(
53
57
  z.object({
54
- input: z.optional(z_Hex.Hex),
55
- to: z.optional(z_Hex.Hex),
56
- value: z.optional(z_Hex.Hex),
58
+ data: NullableHex,
59
+ input: NullableHex,
60
+ to: NullableHex,
61
+ value: NullableHex,
57
62
  }),
58
63
  z.object({
59
64
  data: z.optional(z_Hex.Hex),
@@ -62,9 +67,9 @@ const CallToRpc = z.codec(
62
67
  }),
63
68
  {
64
69
  decode: (value) => ({
65
- data: value.input,
66
- to: value.to,
67
- value: value.value === '0x' ? undefined : value.value,
70
+ data: value.input ?? value.data ?? undefined,
71
+ to: value.to ?? undefined,
72
+ value: !value.value || value.value === '0x' ? undefined : value.value,
68
73
  }),
69
74
  encode: (value) => ({
70
75
  input: value.data,
@@ -74,21 +79,78 @@ const CallToRpc = z.codec(
74
79
  },
75
80
  )
76
81
 
82
+ /** Optional fields the node serializes as `null` when absent. */
83
+ const nullableFields = [
84
+ 'feePayer',
85
+ 'feePayerSignature',
86
+ 'gasPrice',
87
+ 'keyAuthorization',
88
+ 'nonceKey',
89
+ 'validAfter',
90
+ 'validBefore',
91
+ ] as const
92
+
93
+ /**
94
+ * Wraps a tempo transaction object schema in a wire-shape codec: scrubs
95
+ * node-null optionals and maps the `aaAuthorizationList` RPC field to
96
+ * `authorizationList` (and back on encode).
97
+ */
98
+ function wire<schema extends z.ZodMiniType>(schema: schema) {
99
+ return z.codec(z.looseObject({ type: z.literal('0x76') }), schema, {
100
+ decode: (rpc) => {
101
+ const { aaAuthorizationList, ...rest } = rpc as Record<string, unknown>
102
+ for (const key of nullableFields) if (rest[key] === null) delete rest[key]
103
+ if (Array.isArray(aaAuthorizationList) && aaAuthorizationList.length > 0)
104
+ rest.authorizationList = aaAuthorizationList
105
+ return rest as never
106
+ },
107
+ encode: (rpc) => {
108
+ const { authorizationList, ...rest } = rpc as Record<string, unknown>
109
+ return {
110
+ ...rest,
111
+ ...(authorizationList
112
+ ? { aaAuthorizationList: authorizationList }
113
+ : {}),
114
+ } as never
115
+ },
116
+ })
117
+ }
118
+
77
119
  /** Tempo transaction schema (type `0x76`). */
78
- export const Tempo = z.object(
79
- fields(z_Uint.Uint, z_Number.Number, Call, z_AuthorizationTempo.ListSigned),
120
+ export const Tempo = wire(
121
+ z.object(
122
+ fields(z_Uint.Uint, z_Number.Number, Call, z_AuthorizationTempo.ListSigned),
123
+ ),
80
124
  )
81
125
 
82
126
  /** Encode-only tempo transaction schema accepting numberish `toRpc` inputs. */
83
- export const TempoToRpc = z.object(
84
- fields(
85
- z_Uint.UintToRpc,
86
- z_Number.NumberToRpc,
87
- CallToRpc,
88
- z_AuthorizationTempo.ListSignedToRpc,
127
+ export const TempoToRpc = wire(
128
+ z.object(
129
+ fields(
130
+ z_Uint.UintToRpc,
131
+ z_Number.NumberToRpc,
132
+ CallToRpc,
133
+ z_AuthorizationTempo.ListSignedToRpc,
134
+ ),
89
135
  ),
90
136
  )
91
137
 
138
+ /** Pending tempo transaction schema (type `0x76`, not yet included in a block). */
139
+ export const PendingTempo = wire(
140
+ z.object({
141
+ ...fields(
142
+ z_Uint.Uint,
143
+ z_Number.Number,
144
+ Call,
145
+ z_AuthorizationTempo.ListSigned,
146
+ ),
147
+ blockHash: z.null(),
148
+ blockNumber: z.null(),
149
+ blockTimestamp: z.optional(z.null()),
150
+ transactionIndex: z.null(),
151
+ }),
152
+ )
153
+
92
154
  function fields<
93
155
  uint extends z.ZodMiniType,
94
156
  num extends z.ZodMiniType,
@@ -132,5 +194,5 @@ export const TransactionToRpc = z.union([
132
194
  z_Transaction.TransactionToRpc,
133
195
  ])
134
196
 
135
- /** Pending tempo transaction schema. */
136
- export const Pending = z_Transaction.Pending
197
+ /** Pending tempo transaction schema (union of tempo + standard transaction types). */
198
+ export const Pending = z.union([PendingTempo, z_Transaction.Pending])
@@ -14,7 +14,6 @@ import * as z from 'zod/mini'
14
14
  import * as z_AuthorizationTempo from './AuthorizationTempo.js'
15
15
  import * as z_KeyAuthorization from './KeyAuthorization.js'
16
16
  import * as z_SignatureEnvelope from './SignatureEnvelope.js'
17
- import * as z_TokenId from './TokenId.js'
18
17
 
19
18
  const fromRpcType = { '0x76': 'tempo' } as const
20
19
  const toRpcType = { tempo: '0x76' } as const
@@ -57,6 +56,16 @@ const CallToRpc = z.object({
57
56
  value: z.optional(uintBigintNumberish()),
58
57
  })
59
58
 
59
+ const Capabilities = z.record(z.string(), z.unknown())
60
+
61
+ const MultisigInit = z.object({
62
+ salt: z_Hex.Hex,
63
+ threshold: z.number(),
64
+ owners: z.readonly(
65
+ z.array(z.object({ owner: z_Address.Address, weight: z.number() })),
66
+ ),
67
+ })
68
+
60
69
  /** RPC tempo transaction request schema. */
61
70
  export const Rpc = z.object({
62
71
  accessList: z.optional(z_AccessList.AccessList),
@@ -64,6 +73,7 @@ export const Rpc = z.object({
64
73
  blobVersionedHashes: z.optional(z.readonly(z.array(z_Hex.Hex))),
65
74
  blobs: z.optional(z.readonly(z.array(z_Hex.Hex))),
66
75
  calls: z.optional(z.readonly(z.array(CallRpc))),
76
+ capabilities: z.optional(Capabilities),
67
77
  chainId: z.optional(z_Hex.Hex),
68
78
  data: z.optional(z_Hex.Hex),
69
79
  feePayer: z.optional(z.boolean()),
@@ -75,10 +85,13 @@ export const Rpc = z.object({
75
85
  input: z.optional(z_Hex.Hex),
76
86
  keyAuthorization: z.optional(z_KeyAuthorization.Rpc),
77
87
  keyData: z.optional(z_Hex.Hex),
88
+ keyId: z.optional(z_Address.Address),
78
89
  keyType: z.optional(KeyType),
79
90
  maxFeePerBlobGas: z.optional(z_Hex.Hex),
80
91
  maxFeePerGas: z.optional(z_Hex.Hex),
81
92
  maxPriorityFeePerGas: z.optional(z_Hex.Hex),
93
+ multisigInit: z.optional(MultisigInit),
94
+ multisigSignatureCount: z.optional(z.number()),
82
95
  nonce: z.optional(z_Hex.Hex),
83
96
  nonceKey: z.optional(z_Hex.Hex),
84
97
  r: z.optional(z_Hex.Hex),
@@ -114,21 +127,25 @@ export const Domain = z.object({
114
127
  blobVersionedHashes: z.optional(z.readonly(z.array(z_Hex.Hex))),
115
128
  blobs: z.optional(z.readonly(z.array(z_Hex.Hex))),
116
129
  calls: z.optional(z.readonly(z.array(Call))),
130
+ capabilities: z.optional(Capabilities),
117
131
  chainId: z.optional(z.number()),
118
132
  data: z.optional(z_Hex.Hex),
119
133
  feePayer: z.optional(z.boolean()),
120
134
  feePayerSignature: z.optional(z.union([SignatureDecoded, z.null()])),
121
- feeToken: z.optional(z.union([z_Address.Address, z.bigint()])),
135
+ feeToken: z.optional(z_Address.Address),
122
136
  from: z.optional(z_Address.Address),
123
137
  gas: z.optional(z.bigint()),
124
138
  gasPrice: z.optional(z.bigint()),
125
139
  input: z.optional(z_Hex.Hex),
126
140
  keyAuthorization: z.optional(z_KeyAuthorization.Domain),
127
141
  keyData: z.optional(z_Hex.Hex),
142
+ keyId: z.optional(z_Address.Address),
128
143
  keyType: z.optional(KeyType),
129
144
  maxFeePerBlobGas: z.optional(z.bigint()),
130
145
  maxFeePerGas: z.optional(z.bigint()),
131
146
  maxPriorityFeePerGas: z.optional(z.bigint()),
147
+ multisigInit: z.optional(MultisigInit),
148
+ multisigSignatureCount: z.optional(z.number()),
132
149
  nonce: z.optional(z.bigint()),
133
150
  nonceKey: z.optional(z.union([z.bigint(), z.literal('random')])),
134
151
  r: z.optional(z_Hex.Hex),
@@ -150,21 +167,25 @@ export const DomainToRpc = z.object({
150
167
  blobVersionedHashes: z.optional(z.readonly(z.array(z_Hex.Hex))),
151
168
  blobs: z.optional(z.readonly(z.array(z_Hex.Hex))),
152
169
  calls: z.optional(z.readonly(z.array(CallToRpc))),
170
+ capabilities: z.optional(Capabilities),
153
171
  chainId: z.optional(uintNumberNumberish()),
154
172
  data: z.optional(z_Hex.Hex),
155
173
  feePayer: z.optional(z.boolean()),
156
174
  feePayerSignature: z.optional(z.union([SignatureDecoded, z.null()])),
157
- feeToken: z.optional(z.union([z_Address.Address, z.bigint()])),
175
+ feeToken: z.optional(z_Address.Address),
158
176
  from: z.optional(z_Address.Address),
159
177
  gas: z.optional(uintBigintNumberish()),
160
178
  gasPrice: z.optional(uintBigintNumberish()),
161
179
  input: z.optional(z_Hex.Hex),
162
180
  keyAuthorization: z.optional(z_KeyAuthorization.DomainToRpc),
163
181
  keyData: z.optional(z_Hex.Hex),
182
+ keyId: z.optional(z_Address.Address),
164
183
  keyType: z.optional(KeyType),
165
184
  maxFeePerBlobGas: z.optional(uintBigintNumberish()),
166
185
  maxFeePerGas: z.optional(uintBigintNumberish()),
167
186
  maxPriorityFeePerGas: z.optional(uintBigintNumberish()),
187
+ multisigInit: z.optional(MultisigInit),
188
+ multisigSignatureCount: z.optional(z.number()),
168
189
  nonce: z.optional(uintBigintNumberish()),
169
190
  nonceKey: z.optional(z.union([uintBigintNumberish(), z.literal('random')])),
170
191
  r: z.optional(z_Hex.Hex),
@@ -232,6 +253,17 @@ function fromRpc(
232
253
  z_KeyAuthorization.KeyAuthorization,
233
254
  request.keyAuthorization as never,
234
255
  ) as never
256
+ if (typeof request.capabilities !== 'undefined')
257
+ request_.capabilities = request.capabilities
258
+ if (typeof request.feePayer !== 'undefined')
259
+ request_.feePayer = request.feePayer
260
+ if (typeof request.keyData !== 'undefined') request_.keyData = request.keyData
261
+ if (typeof request.keyId !== 'undefined') request_.keyId = request.keyId
262
+ if (typeof request.keyType !== 'undefined') request_.keyType = request.keyType
263
+ if (typeof request.multisigInit !== 'undefined')
264
+ request_.multisigInit = request.multisigInit
265
+ if (typeof request.multisigSignatureCount !== 'undefined')
266
+ request_.multisigSignatureCount = request.multisigSignatureCount
235
267
  if (typeof request.validBefore !== 'undefined')
236
268
  request_.validBefore = core_Hex.toNumber(request.validBefore)
237
269
  if (typeof request.validAfter !== 'undefined')
@@ -251,6 +283,22 @@ function toRpc(
251
283
  authorizationList: undefined,
252
284
  } as never) as core_TransactionRequest.Rpc
253
285
 
286
+ const tempo =
287
+ typeof request.calls !== 'undefined' ||
288
+ typeof request.capabilities !== 'undefined' ||
289
+ typeof request.feePayer !== 'undefined' ||
290
+ typeof request.feeToken !== 'undefined' ||
291
+ typeof request.keyAuthorization !== 'undefined' ||
292
+ typeof request.keyData !== 'undefined' ||
293
+ typeof request.keyId !== 'undefined' ||
294
+ typeof request.keyType !== 'undefined' ||
295
+ typeof request.multisigInit !== 'undefined' ||
296
+ typeof request.multisigSignatureCount !== 'undefined' ||
297
+ typeof request.nonceKey !== 'undefined' ||
298
+ typeof request.validBefore !== 'undefined' ||
299
+ typeof request.validAfter !== 'undefined' ||
300
+ request.type === 'tempo'
301
+
254
302
  if (request.authorizationList)
255
303
  request_rpc.authorizationList = z.encode(
256
304
  z_AuthorizationTempo.ListSignedToRpc,
@@ -269,24 +317,41 @@ function toRpc(
269
317
  value: call.value ? encodeNumberish(call.value) : '0x',
270
318
  data: call.data ?? '0x',
271
319
  }))
272
- else if (request.to || request.data || request.value)
320
+ else if (request.to || request.data || request.value || tempo)
273
321
  request_rpc.calls = [
274
322
  {
275
- to: request.to ?? undefined,
323
+ to:
324
+ request.to ||
325
+ (tempo && (!request.data || request.data === '0x')
326
+ ? '0x0000000000000000000000000000000000000000'
327
+ : undefined),
276
328
  value: request.value ? encodeNumberish(request.value) : '0x',
277
329
  data: request.data ?? '0x',
278
330
  },
279
331
  ]
280
- if (typeof request.feeToken !== 'undefined')
281
- request_rpc.feeToken =
282
- typeof request.feeToken === 'bigint'
283
- ? z.encode(z_TokenId.address, request.feeToken)
284
- : request.feeToken
332
+ if (
333
+ typeof request.feeToken !== 'undefined' &&
334
+ !(request.feePayer === true && !request.feePayerSignature)
335
+ )
336
+ request_rpc.feeToken = request.feeToken
285
337
  if (request.keyAuthorization)
286
338
  request_rpc.keyAuthorization = z.encode(
287
339
  z_KeyAuthorization.KeyAuthorizationToRpc,
288
340
  request.keyAuthorization as never,
289
341
  ) as never
342
+ if (typeof request.capabilities !== 'undefined')
343
+ request_rpc.capabilities = request.capabilities
344
+ if (typeof request.feePayer !== 'undefined')
345
+ request_rpc.feePayer = request.feePayer
346
+ if (typeof request.keyData !== 'undefined')
347
+ request_rpc.keyData = shimKeyData(request.keyData)
348
+ if (typeof request.keyId !== 'undefined') request_rpc.keyId = request.keyId
349
+ if (typeof request.keyType !== 'undefined')
350
+ request_rpc.keyType = request.keyType
351
+ if (typeof request.multisigInit !== 'undefined')
352
+ request_rpc.multisigInit = request.multisigInit
353
+ if (typeof request.multisigSignatureCount !== 'undefined')
354
+ request_rpc.multisigSignatureCount = request.multisigSignatureCount
290
355
  if (typeof request.validBefore !== 'undefined')
291
356
  request_rpc.validBefore = encodeNumberish(request.validBefore)
292
357
  if (typeof request.validAfter !== 'undefined')
@@ -300,16 +365,7 @@ function toRpc(
300
365
  })()
301
366
  if (nonceKey) request_rpc.nonceKey = nonceKey
302
367
 
303
- if (
304
- typeof request.calls !== 'undefined' ||
305
- typeof request.feePayer !== 'undefined' ||
306
- typeof request.feeToken !== 'undefined' ||
307
- typeof request.keyAuthorization !== 'undefined' ||
308
- typeof request.nonceKey !== 'undefined' ||
309
- typeof request.validBefore !== 'undefined' ||
310
- typeof request.validAfter !== 'undefined' ||
311
- request.type === 'tempo'
312
- ) {
368
+ if (tempo) {
313
369
  request_rpc.type = toRpcType.tempo
314
370
  delete request_rpc.data
315
371
  delete request_rpc.input
@@ -320,6 +376,16 @@ function toRpc(
320
376
  return request_rpc
321
377
  }
322
378
 
379
+ /**
380
+ * Shims key data longer than 4 bytes into a 2-byte big-endian length hint
381
+ * (the node's gas estimator only accepts 1, 2, or 4-byte key data).
382
+ */
383
+ function shimKeyData(data: core_Hex.Hex): core_Hex.Hex {
384
+ const byteLength = core_Hex.size(data)
385
+ if (byteLength <= 4) return data
386
+ return core_Hex.fromNumber(byteLength, { size: 2 })
387
+ }
388
+
323
389
  /** Decodes an RPC signature into a recovered signature. */
324
390
  function signatureFromRpc(signature: {
325
391
  r: core_Hex.Hex
@@ -31,7 +31,7 @@ const baseFields = {
31
31
  calls: z.readonly(z.array(Call)),
32
32
  chainId: z.number(),
33
33
  feePayerSignature: z.optional(z.union([FeePayerSignature, z.null()])),
34
- feeToken: z.optional(z.union([z_Address.Address, z.bigint()])),
34
+ feeToken: z.optional(z_Address.Address),
35
35
  from: z.optional(z_Address.Address),
36
36
  gas: z.optional(z.bigint()),
37
37
  keyAuthorization: z.optional(z_KeyAuthorization.Domain),
@@ -26,6 +26,59 @@ describe('KeyAuthorization', () => {
26
26
  )
27
27
  })
28
28
 
29
+ test('decodes node-null optional fields', () => {
30
+ const withNulls = {
31
+ ...rpc,
32
+ allowedCalls: null,
33
+ expiry: null,
34
+ limits: null,
35
+ } as const
36
+ expect(z.decode(z_KeyAuthorization.KeyAuthorization, withNulls)).toEqual(
37
+ core_KeyAuthorization.fromRpc(withNulls),
38
+ )
39
+ })
40
+
41
+ test('decodes nested node-null optional fields', () => {
42
+ const withNestedNulls = {
43
+ ...rpc,
44
+ allowedCalls: [
45
+ {
46
+ selectorRules: [{ recipients: null, selector: '0xa9059cbb' }],
47
+ target: '0x20c0000000000000000000000000000000000001',
48
+ },
49
+ {
50
+ selectorRules: null,
51
+ target: '0x20c0000000000000000000000000000000000002',
52
+ },
53
+ ],
54
+ limits: [
55
+ {
56
+ limit: '0x989680',
57
+ period: null,
58
+ token: '0x20c0000000000000000000000000000000000001',
59
+ },
60
+ ],
61
+ } as const
62
+ expect(
63
+ z.decode(z_KeyAuthorization.KeyAuthorization, withNestedNulls),
64
+ ).toEqual(core_KeyAuthorization.fromRpc(withNestedNulls))
65
+ })
66
+
67
+ test('decodes witness and admin fields', () => {
68
+ const withAdmin = {
69
+ ...rpc,
70
+ account: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
71
+ isAdmin: true,
72
+ witness:
73
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
74
+ } as const
75
+ const decoded = z.decode(z_KeyAuthorization.KeyAuthorization, withAdmin)
76
+ expect(decoded).toEqual(core_KeyAuthorization.fromRpc(withAdmin))
77
+ expect(z.encode(z_KeyAuthorization.KeyAuthorization, decoded)).toEqual(
78
+ core_KeyAuthorization.toRpc(decoded),
79
+ )
80
+ })
81
+
29
82
  test('decodes nested allowedCalls into scopes', () => {
30
83
  const withScopes = {
31
84
  ...rpc,
@@ -21,8 +21,6 @@ const p256 = {
21
21
 
22
22
  const multisig = {
23
23
  account: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
24
- configId:
25
- '0x0000000000000000000000000000000000000000000000000000000000000000',
26
24
  signatures: [
27
25
  core_SignatureEnvelope.serialize(core_SignatureEnvelope.fromRpc(secp256k1)),
28
26
  ],