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
@@ -0,0 +1,1029 @@
1
+ import { assertType, expectTypeOf, test } from 'vp/test'
2
+
3
+ import type {
4
+ ParseAbiParameter,
5
+ ParseAbiParameters,
6
+ ParseSignature,
7
+ SplitParameters,
8
+ _ParseFunctionParametersAndStateMutability,
9
+ _ParseTuple,
10
+ _SplitNameOrModifier,
11
+ _UnwrapNameOrModifier,
12
+ _ValidateAbiParameter,
13
+ } from './utils.js'
14
+
15
+ type OptionsWithModifier = { modifier: 'calldata'; structs: unknown }
16
+ type OptionsWithIndexed = { modifier: 'indexed'; structs: unknown }
17
+ type OptionsWithStructs = {
18
+ structs: {
19
+ Foo: [{ type: 'address'; name: 'bar' }]
20
+ }
21
+ }
22
+
23
+ test('ParseSignature', () => {
24
+ type Structs = {
25
+ Baz: [{ type: 'address'; name: 'baz' }]
26
+ }
27
+
28
+ // Error
29
+ assertType<ParseSignature<'error Foo()'>>({
30
+ type: 'error',
31
+ name: 'Foo',
32
+ inputs: [],
33
+ })
34
+ assertType<ParseSignature<'error Foo(string)'>>({
35
+ type: 'error',
36
+ name: 'Foo',
37
+ inputs: [{ type: 'string' }],
38
+ })
39
+ assertType<ParseSignature<'error Foo(string bar)'>>({
40
+ type: 'error',
41
+ name: 'Foo',
42
+ inputs: [{ type: 'string', name: 'bar' }],
43
+ })
44
+ assertType<ParseSignature<'error Foo(Baz bar)', Structs>>({
45
+ type: 'error',
46
+ name: 'Foo',
47
+ inputs: [
48
+ {
49
+ type: 'tuple',
50
+ name: 'bar',
51
+ components: [{ type: 'address', name: 'baz' }],
52
+ },
53
+ ],
54
+ })
55
+
56
+ // Events
57
+ assertType<ParseSignature<'event Foo()'>>({
58
+ type: 'event',
59
+ name: 'Foo',
60
+ inputs: [],
61
+ })
62
+ assertType<ParseSignature<'event Foo(string)'>>({
63
+ type: 'event',
64
+ name: 'Foo',
65
+ inputs: [{ type: 'string' }],
66
+ })
67
+ assertType<ParseSignature<'event Foo(string bar)'>>({
68
+ type: 'event',
69
+ name: 'Foo',
70
+ inputs: [{ type: 'string', name: 'bar' }],
71
+ })
72
+ assertType<ParseSignature<'event Foo(string indexed bar)'>>({
73
+ type: 'event',
74
+ name: 'Foo',
75
+ inputs: [{ type: 'string', indexed: true, name: 'bar' }],
76
+ })
77
+ assertType<ParseSignature<'event Foo(Baz bar)', Structs>>({
78
+ type: 'event',
79
+ name: 'Foo',
80
+ inputs: [
81
+ {
82
+ type: 'tuple',
83
+ name: 'bar',
84
+ components: [{ type: 'address', name: 'baz' }],
85
+ },
86
+ ],
87
+ })
88
+ assertType<ParseSignature<'event Foo((string) indexed bar)'>>({
89
+ type: 'event',
90
+ name: 'Foo',
91
+ inputs: [
92
+ {
93
+ type: 'tuple',
94
+ indexed: true,
95
+ name: 'bar',
96
+ components: [{ type: 'string' }],
97
+ },
98
+ ],
99
+ })
100
+
101
+ // Constructor
102
+ assertType<ParseSignature<'constructor()'>>({
103
+ type: 'constructor',
104
+ stateMutability: 'nonpayable',
105
+ inputs: [],
106
+ })
107
+ assertType<ParseSignature<'constructor() payable'>>({
108
+ type: 'constructor',
109
+ stateMutability: 'payable',
110
+ inputs: [],
111
+ })
112
+ assertType<ParseSignature<'constructor(string)'>>({
113
+ type: 'constructor',
114
+ stateMutability: 'nonpayable',
115
+ inputs: [{ type: 'string' }],
116
+ })
117
+ assertType<ParseSignature<'constructor(string) payable'>>({
118
+ type: 'constructor',
119
+ stateMutability: 'payable',
120
+ inputs: [{ type: 'string' }],
121
+ })
122
+ assertType<ParseSignature<'constructor(string foo)'>>({
123
+ type: 'constructor',
124
+ stateMutability: 'nonpayable',
125
+ inputs: [{ type: 'string', name: 'foo' }],
126
+ })
127
+ assertType<ParseSignature<'constructor(string foo)'>>({
128
+ type: 'constructor',
129
+ stateMutability: 'nonpayable',
130
+ inputs: [{ type: 'string', name: 'foo' }],
131
+ })
132
+ assertType<ParseSignature<'constructor((string) foo)'>>({
133
+ type: 'constructor',
134
+ stateMutability: 'nonpayable',
135
+ inputs: [{ type: 'tuple', name: 'foo', components: [{ type: 'string' }] }],
136
+ })
137
+
138
+ // Fallback
139
+ assertType<ParseSignature<'fallback() external'>>({
140
+ type: 'fallback',
141
+ stateMutability: 'nonpayable',
142
+ })
143
+ assertType<ParseSignature<'fallback() external payable'>>({
144
+ type: 'fallback',
145
+ stateMutability: 'payable',
146
+ })
147
+
148
+ // Receive
149
+ assertType<ParseSignature<'receive() external payable'>>({
150
+ type: 'receive',
151
+ stateMutability: 'payable',
152
+ })
153
+
154
+ // Functions
155
+ assertType<ParseSignature<'function foo()'>>({
156
+ type: 'function',
157
+ name: 'foo',
158
+ stateMutability: 'nonpayable',
159
+ inputs: [],
160
+ outputs: [],
161
+ })
162
+
163
+ // inputs
164
+ assertType<ParseSignature<'function foo(string)'>>({
165
+ type: 'function',
166
+ name: 'foo',
167
+ stateMutability: 'nonpayable',
168
+ inputs: [{ type: 'string' }],
169
+ outputs: [],
170
+ })
171
+ assertType<ParseSignature<'function foo(string bar)'>>({
172
+ type: 'function',
173
+ name: 'foo',
174
+ stateMutability: 'nonpayable',
175
+ inputs: [{ type: 'string', name: 'bar' }],
176
+ outputs: [],
177
+ })
178
+ assertType<ParseSignature<'function foo(Baz bar)', Structs>>({
179
+ type: 'function',
180
+ name: 'foo',
181
+ stateMutability: 'nonpayable',
182
+ inputs: [
183
+ {
184
+ type: 'tuple',
185
+ name: 'bar',
186
+ components: [{ type: 'address', name: 'baz' }],
187
+ },
188
+ ],
189
+ outputs: [],
190
+ })
191
+ assertType<ParseSignature<'function foo(string bar) view'>>({
192
+ type: 'function',
193
+ name: 'foo',
194
+ stateMutability: 'view',
195
+ inputs: [{ type: 'string', name: 'bar' }],
196
+ outputs: [],
197
+ })
198
+ assertType<ParseSignature<'function foo(string bar) public payable'>>({
199
+ type: 'function',
200
+ name: 'foo',
201
+ stateMutability: 'payable',
202
+ inputs: [{ type: 'string', name: 'bar' }],
203
+ outputs: [],
204
+ })
205
+ assertType<ParseSignature<'function foo(string calldata)'>>({
206
+ type: 'function',
207
+ name: 'foo',
208
+ stateMutability: 'nonpayable',
209
+ inputs: [{ type: 'string' }],
210
+ outputs: [],
211
+ })
212
+ assertType<ParseSignature<'function foo(address payable to) external'>>({
213
+ name: 'foo',
214
+ type: 'function',
215
+ stateMutability: 'nonpayable',
216
+ inputs: [{ type: 'address', name: 'to' }],
217
+ outputs: [],
218
+ })
219
+
220
+ assertType<ParseSignature<'function foo(string indexed)'>>({
221
+ name: 'foo',
222
+ type: 'function',
223
+ stateMutability: 'nonpayable',
224
+ inputs: [
225
+ {
226
+ type: 'string',
227
+ name: ['Error: "indexed" is a protected Solidity keyword.'],
228
+ },
229
+ ],
230
+ outputs: [],
231
+ })
232
+ assertType<ParseSignature<'function foo(string indexed bar)'>>({
233
+ name: 'foo',
234
+ type: 'function',
235
+ stateMutability: 'nonpayable',
236
+ inputs: [
237
+ {
238
+ type: 'string',
239
+ name: ['Error: Identifier "indexed bar" cannot contain whitespace.'],
240
+ },
241
+ ],
242
+ outputs: [],
243
+ })
244
+
245
+ // outputs
246
+ assertType<ParseSignature<'function foo() returns (string)'>>({
247
+ type: 'function',
248
+ name: 'foo',
249
+ stateMutability: 'nonpayable',
250
+ inputs: [],
251
+ outputs: [{ type: 'string' }],
252
+ })
253
+ assertType<ParseSignature<'function foo() returns (string bar)'>>({
254
+ type: 'function',
255
+ name: 'foo',
256
+ stateMutability: 'nonpayable',
257
+ inputs: [],
258
+ outputs: [{ type: 'string', name: 'bar' }],
259
+ })
260
+ assertType<ParseSignature<'function foo() returns (Baz bar)', Structs>>({
261
+ type: 'function',
262
+ name: 'foo',
263
+ stateMutability: 'nonpayable',
264
+ inputs: [],
265
+ outputs: [
266
+ {
267
+ type: 'tuple',
268
+ name: 'bar',
269
+ components: [{ type: 'address', name: 'baz' }],
270
+ },
271
+ ],
272
+ })
273
+ assertType<ParseSignature<'function foo() view returns (string bar)'>>({
274
+ type: 'function',
275
+ name: 'foo',
276
+ stateMutability: 'view',
277
+ inputs: [],
278
+ outputs: [{ type: 'string', name: 'bar' }],
279
+ })
280
+ assertType<
281
+ ParseSignature<'function foo() public payable returns (string bar)'>
282
+ >({
283
+ type: 'function',
284
+ name: 'foo',
285
+ stateMutability: 'payable',
286
+ inputs: [],
287
+ outputs: [{ type: 'string', name: 'bar' }],
288
+ })
289
+ assertType<
290
+ ParseSignature<'function foo() public payable returns(string bar)'>
291
+ >({
292
+ type: 'function',
293
+ name: 'foo',
294
+ stateMutability: 'payable',
295
+ inputs: [],
296
+ outputs: [{ type: 'string', name: 'bar' }],
297
+ })
298
+
299
+ // inputs and outputs
300
+ assertType<ParseSignature<'function foo(string) returns (string)'>>({
301
+ type: 'function',
302
+ name: 'foo',
303
+ stateMutability: 'nonpayable',
304
+ inputs: [{ type: 'string' }],
305
+ outputs: [{ type: 'string' }],
306
+ })
307
+ assertType<ParseSignature<'function foo(string bar) returns (string bar)'>>({
308
+ type: 'function',
309
+ name: 'foo',
310
+ stateMutability: 'nonpayable',
311
+ inputs: [{ type: 'string', name: 'bar' }],
312
+ outputs: [{ type: 'string', name: 'bar' }],
313
+ })
314
+ assertType<
315
+ ParseSignature<'function foo(string foo) public payable returns(string bar)'>
316
+ >({
317
+ type: 'function',
318
+ name: 'foo',
319
+ stateMutability: 'payable',
320
+ inputs: [{ type: 'string', name: 'foo' }],
321
+ outputs: [{ type: 'string', name: 'bar' }],
322
+ })
323
+ assertType<
324
+ ParseSignature<'function foo(Baz bar) returns (Baz bar)', Structs>
325
+ >({
326
+ type: 'function',
327
+ name: 'foo',
328
+ stateMutability: 'nonpayable',
329
+ inputs: [
330
+ {
331
+ type: 'tuple',
332
+ name: 'bar',
333
+ components: [{ type: 'address', name: 'baz' }],
334
+ },
335
+ ],
336
+ outputs: [
337
+ {
338
+ type: 'tuple',
339
+ name: 'bar',
340
+ components: [{ type: 'address', name: 'baz' }],
341
+ },
342
+ ],
343
+ })
344
+ assertType<
345
+ ParseSignature<'function foo(string bar) view returns (string bar)'>
346
+ >({
347
+ type: 'function',
348
+ name: 'foo',
349
+ stateMutability: 'view',
350
+ inputs: [{ type: 'string', name: 'bar' }],
351
+ outputs: [{ type: 'string', name: 'bar' }],
352
+ })
353
+ assertType<
354
+ ParseSignature<'function foo(string bar) public payable returns (string bar)'>
355
+ >({
356
+ type: 'function',
357
+ name: 'foo',
358
+ stateMutability: 'payable',
359
+ inputs: [{ type: 'string', name: 'bar' }],
360
+ outputs: [{ type: 'string', name: 'bar' }],
361
+ })
362
+
363
+ assertType<
364
+ ParseSignature<'function foo(((string)) calldata) returns (string, (string))'>
365
+ >({
366
+ type: 'function',
367
+ name: 'foo',
368
+ stateMutability: 'nonpayable',
369
+ inputs: [
370
+ {
371
+ type: 'tuple',
372
+ components: [{ type: 'tuple', components: [{ type: 'string' }] }],
373
+ },
374
+ ],
375
+ outputs: [
376
+ {
377
+ type: 'string',
378
+ },
379
+ {
380
+ type: 'tuple',
381
+ components: [{ type: 'string' }],
382
+ },
383
+ ],
384
+ })
385
+ })
386
+
387
+ test('ParseAbiParameters', () => {
388
+ expectTypeOf<ParseAbiParameters<[]>>().toEqualTypeOf<readonly []>()
389
+ expectTypeOf<ParseAbiParameters<['']>>().toEqualTypeOf<readonly []>()
390
+ expectTypeOf<ParseAbiParameters<['string']>>().toEqualTypeOf<
391
+ readonly [{ readonly type: 'string' }]
392
+ >()
393
+ expectTypeOf<
394
+ ParseAbiParameters<['string', 'string']> extends readonly [
395
+ { readonly type: 'string' },
396
+ { readonly type: 'string' },
397
+ ]
398
+ ? true
399
+ : false
400
+ >().toEqualTypeOf<true>()
401
+ })
402
+
403
+ test('ParseAbiParameter', () => {
404
+ // `${Type} ${Modifier} ${Name}` format
405
+ assertType<ParseAbiParameter<'string calldata foo', OptionsWithModifier>>({
406
+ type: 'string',
407
+ name: 'foo',
408
+ })
409
+ assertType<ParseAbiParameter<'string indexed foo', OptionsWithIndexed>>({
410
+ type: 'string',
411
+ indexed: true,
412
+ name: 'foo',
413
+ })
414
+ assertType<
415
+ ParseAbiParameter<
416
+ 'Foo calldata foo',
417
+ OptionsWithModifier & OptionsWithStructs
418
+ >
419
+ >({
420
+ type: 'tuple',
421
+ name: 'foo',
422
+ components: [{ type: 'address', name: 'bar' }],
423
+ })
424
+ assertType<
425
+ ParseAbiParameter<
426
+ 'Foo indexed foo',
427
+ OptionsWithIndexed & OptionsWithStructs
428
+ >
429
+ >({
430
+ type: 'tuple',
431
+ indexed: true,
432
+ name: 'foo',
433
+ components: [{ type: 'address', name: 'bar' }],
434
+ })
435
+ assertType<
436
+ ParseAbiParameter<
437
+ 'Foo[][1] indexed foo',
438
+ OptionsWithIndexed & OptionsWithStructs
439
+ >
440
+ >({
441
+ name: 'foo',
442
+ type: 'tuple[][1]',
443
+ indexed: true,
444
+ components: [{ type: 'address', name: 'bar' }],
445
+ })
446
+ assertType<
447
+ ParseAbiParameter<
448
+ 'Foo[][1] calldata foo',
449
+ OptionsWithModifier & OptionsWithStructs
450
+ >
451
+ >({
452
+ name: 'foo',
453
+ type: 'tuple[][1]',
454
+ components: [{ type: 'address', name: 'bar' }],
455
+ })
456
+
457
+ // `${Type} ${NameOrModifier}` format
458
+ assertType<ParseAbiParameter<'string foo'>>({
459
+ type: 'string',
460
+ name: 'foo',
461
+ })
462
+ assertType<ParseAbiParameter<'string indexed'>>({
463
+ type: 'string',
464
+ name: ['Error: "indexed" is a protected Solidity keyword.'],
465
+ })
466
+ assertType<ParseAbiParameter<'string calldata', OptionsWithModifier>>({
467
+ type: 'string',
468
+ })
469
+ assertType<ParseAbiParameter<'string indexed', OptionsWithIndexed>>({
470
+ type: 'string',
471
+ indexed: true,
472
+ })
473
+ assertType<
474
+ ParseAbiParameter<'Foo calldata', OptionsWithModifier & OptionsWithStructs>
475
+ >({
476
+ type: 'tuple',
477
+ components: [{ type: 'address', name: 'bar' }],
478
+ })
479
+ assertType<
480
+ ParseAbiParameter<'Foo indexed', OptionsWithIndexed & OptionsWithStructs>
481
+ >({
482
+ type: 'tuple',
483
+ indexed: true,
484
+ components: [{ type: 'address', name: 'bar' }],
485
+ })
486
+ assertType<ParseAbiParameter<'Foo[][1] foo', OptionsWithStructs>>({
487
+ name: 'foo',
488
+ type: 'tuple[][1]',
489
+ components: [{ type: 'address', name: 'bar' }],
490
+ })
491
+ assertType<ParseAbiParameter<'(address bar)[1] foo', OptionsWithStructs>>({
492
+ name: 'foo',
493
+ type: 'tuple[1]',
494
+ components: [{ type: 'address', name: 'bar' }],
495
+ })
496
+
497
+ // `${Type}` format
498
+ assertType<ParseAbiParameter<'string'>>({
499
+ type: 'string',
500
+ })
501
+ assertType<ParseAbiParameter<'Foo', OptionsWithStructs>>({
502
+ type: 'tuple',
503
+ components: [{ type: 'address', name: 'bar' }],
504
+ })
505
+ assertType<ParseAbiParameter<'Foo[][1]', OptionsWithStructs>>({
506
+ type: 'tuple[][1]',
507
+ components: [{ type: 'address', name: 'bar' }],
508
+ })
509
+
510
+ // tuple format
511
+ assertType<ParseAbiParameter<'(string)'>>({
512
+ type: 'tuple',
513
+ components: [{ type: 'string' }],
514
+ })
515
+ assertType<ParseAbiParameter<'(string, string)'>>({
516
+ type: 'tuple',
517
+ components: [{ type: 'string' }, { type: 'string' }],
518
+ })
519
+ assertType<ParseAbiParameter<'(string, (string))'>>({
520
+ type: 'tuple',
521
+ components: [
522
+ { type: 'string' },
523
+ { type: 'tuple', components: [{ type: 'string' }] },
524
+ ],
525
+ })
526
+
527
+ assertType<ParseAbiParameter<'((((string baz) bar)[1] foo) boo)'>>({
528
+ type: 'tuple',
529
+ components: [
530
+ {
531
+ type: 'tuple',
532
+ components: [
533
+ {
534
+ type: 'tuple[1]',
535
+ components: [
536
+ {
537
+ type: 'tuple',
538
+ components: [
539
+ {
540
+ type: 'string',
541
+ name: 'baz',
542
+ },
543
+ ],
544
+ name: 'bar',
545
+ },
546
+ ],
547
+ name: 'foo',
548
+ },
549
+ ],
550
+ name: 'boo',
551
+ },
552
+ ],
553
+ })
554
+
555
+ assertType<ParseAbiParameter<'address alias'>>({
556
+ type: 'address',
557
+ name: ['Error: "alias" is a protected Solidity keyword.'],
558
+ })
559
+ // assertType<ParseAbiParameter<'Foo foo'>>({
560
+ // type: ['Error: Type "Foo" is not a valid ABI type.'],
561
+ // name: 'foo',
562
+ // })
563
+
564
+ assertType<ParseAbiParameter<'int'>>({ type: 'int256' })
565
+ assertType<ParseAbiParameter<'uint'>>({ type: 'uint256' })
566
+ assertType<ParseAbiParameter<'uint[]'>>({ type: 'uint256[]' })
567
+ assertType<ParseAbiParameter<'uint[10][]'>>({ type: 'uint256[10][]' })
568
+ })
569
+
570
+ test('SplitParameters', () => {
571
+ expectTypeOf<SplitParameters<''>>().toEqualTypeOf<[]>()
572
+ expectTypeOf<SplitParameters<'string'>>().toEqualTypeOf<['string']>()
573
+ expectTypeOf<SplitParameters<'string, string'>>().toEqualTypeOf<
574
+ ['string', 'string']
575
+ >()
576
+ expectTypeOf<SplitParameters<'string indexed foo'>>().toEqualTypeOf<
577
+ ['string indexed foo']
578
+ >()
579
+ expectTypeOf<SplitParameters<'string foo, string bar'>>().toEqualTypeOf<
580
+ ['string foo', 'string bar']
581
+ >()
582
+ expectTypeOf<
583
+ SplitParameters<'address owner, (bool loading, (string[][] names) cats)[] dog, uint tokenId'>
584
+ >().toEqualTypeOf<
585
+ [
586
+ 'address owner',
587
+ '(bool loading, (string[][] names) cats)[] dog',
588
+ 'uint tokenId',
589
+ ]
590
+ >()
591
+
592
+ expectTypeOf<SplitParameters<'((string)'>>().toEqualTypeOf<
593
+ [
594
+ 'Error: Unbalanced parentheses. "((string)" has too many opening parentheses.',
595
+ ]
596
+ >()
597
+ expectTypeOf<SplitParameters<'((((string))'>>().toEqualTypeOf<
598
+ [
599
+ 'Error: Unbalanced parentheses. "((((string))" has too many opening parentheses.',
600
+ ]
601
+ >()
602
+ expectTypeOf<SplitParameters<'(string))'>>().toEqualTypeOf<
603
+ [
604
+ 'Error: Unbalanced parentheses. "(string)" has too many closing parentheses.',
605
+ ]
606
+ >()
607
+ expectTypeOf<SplitParameters<'(string))))'>>().toEqualTypeOf<
608
+ [
609
+ 'Error: Unbalanced parentheses. "(string)" has too many closing parentheses.',
610
+ ]
611
+ >()
612
+ })
613
+
614
+ test('_ValidateAbiParameter', () => {
615
+ expectTypeOf<_ValidateAbiParameter<{ type: 'string' }>>().toEqualTypeOf<{
616
+ type: 'string'
617
+ }>()
618
+ expectTypeOf<
619
+ _ValidateAbiParameter<{ type: 'string'; name: 'foo' }>
620
+ >().toEqualTypeOf<{
621
+ type: 'string'
622
+ name: 'foo'
623
+ }>()
624
+
625
+ expectTypeOf<_ValidateAbiParameter<{ type: 'int' }>>().toEqualTypeOf<{
626
+ readonly type: 'int256'
627
+ }>()
628
+ expectTypeOf<_ValidateAbiParameter<{ type: 'uint' }>>().toEqualTypeOf<{
629
+ readonly type: 'uint256'
630
+ }>()
631
+ expectTypeOf<_ValidateAbiParameter<{ type: 'uint[]' }>>().toEqualTypeOf<{
632
+ readonly type: 'uint256[]'
633
+ }>()
634
+ expectTypeOf<_ValidateAbiParameter<{ type: 'uint[10][]' }>>().toEqualTypeOf<{
635
+ readonly type: 'uint256[10][]'
636
+ }>()
637
+
638
+ // expectTypeOf<
639
+ // _ValidateAbiParameter<{ type: 'string'; name: 'f0!' }>
640
+ // >().toEqualTypeOf<{
641
+ // type: 'string'
642
+ // readonly name: ['Error: "f0!" contains invalid character.']
643
+ // }>()
644
+ // expectTypeOf<
645
+ // _ValidateAbiParameter<{ type: 'string'; name: 'alias' }>
646
+ // >().toEqualTypeOf<{
647
+ // type: 'string'
648
+ // readonly name: ['Error: "alias" is a protected Solidity keyword.']
649
+ // }>()
650
+ // expectTypeOf<
651
+ // _ValidateAbiParameter<{ type: 'Bar'; name: 'foo' }>
652
+ // >().toEqualTypeOf<{
653
+ // readonly type: ['Error: Type "Bar" is not a valid ABI type.']
654
+ // name: 'foo'
655
+ // }>()
656
+ })
657
+
658
+ test('_ParseFunctionParametersAndStateMutability', () => {
659
+ expectTypeOf<
660
+ _ParseFunctionParametersAndStateMutability<'function foo()'>
661
+ >().toEqualTypeOf<{
662
+ Inputs: ''
663
+ StateMutability: 'nonpayable'
664
+ }>()
665
+
666
+ expectTypeOf<
667
+ _ParseFunctionParametersAndStateMutability<'function foo(string bar)'>
668
+ >().toEqualTypeOf<{
669
+ Inputs: 'string bar'
670
+ StateMutability: 'nonpayable'
671
+ }>()
672
+
673
+ expectTypeOf<
674
+ _ParseFunctionParametersAndStateMutability<'function foo() view'>
675
+ >().toEqualTypeOf<{
676
+ Inputs: ''
677
+ StateMutability: 'view'
678
+ }>()
679
+
680
+ expectTypeOf<
681
+ _ParseFunctionParametersAndStateMutability<'function foo(string bar) view'>
682
+ >().toEqualTypeOf<{
683
+ Inputs: 'string bar'
684
+ StateMutability: 'view'
685
+ }>()
686
+
687
+ expectTypeOf<
688
+ _ParseFunctionParametersAndStateMutability<'function foo(string bar, uint256) external view'>
689
+ >().toEqualTypeOf<{
690
+ Inputs: 'string bar, uint256'
691
+ StateMutability: 'view'
692
+ }>()
693
+
694
+ expectTypeOf<
695
+ _ParseFunctionParametersAndStateMutability<'function stepChanges((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle) stateChanges, uint256 action, bool revetOnInvalidMoves) pure returns ((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle))'>
696
+ >().toEqualTypeOf<{
697
+ Inputs: '(uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle) stateChanges, uint256 action, bool revetOnInvalidMoves'
698
+ StateMutability: 'pure'
699
+ }>()
700
+ })
701
+
702
+ test('_ParseTuple', () => {
703
+ // basic tuples
704
+ assertType<_ParseTuple<'(string)'>>({
705
+ type: 'tuple',
706
+ components: [{ type: 'string' }],
707
+ })
708
+ assertType<_ParseTuple<'(string, string)'>>({
709
+ type: 'tuple',
710
+ components: [{ type: 'string' }, { type: 'string' }],
711
+ })
712
+ assertType<_ParseTuple<'((string, string), string)'>>({
713
+ type: 'tuple',
714
+ components: [
715
+ { type: 'tuple', components: [{ type: 'string' }, { type: 'string' }] },
716
+ { type: 'string' },
717
+ ],
718
+ })
719
+ assertType<_ParseTuple<'((string))'>>({
720
+ type: 'tuple',
721
+ components: [{ type: 'tuple', components: [{ type: 'string' }] }],
722
+ })
723
+ assertType<_ParseTuple<'(((string)))'>>({
724
+ type: 'tuple',
725
+ components: [
726
+ {
727
+ type: 'tuple',
728
+ components: [{ type: 'tuple', components: [{ type: 'string' }] }],
729
+ },
730
+ ],
731
+ })
732
+ assertType<_ParseTuple<'(string calldata)'>>({
733
+ type: 'tuple',
734
+ components: [
735
+ {
736
+ type: 'string',
737
+ name: ['Error: "calldata" is a protected Solidity keyword.'],
738
+ },
739
+ ],
740
+ })
741
+ assertType<_ParseTuple<'(Foo)', OptionsWithStructs>>({
742
+ type: 'tuple',
743
+ components: [
744
+ { type: 'tuple', components: [{ type: 'address', name: 'bar' }] },
745
+ ],
746
+ })
747
+
748
+ // named tuple params
749
+ assertType<_ParseTuple<'(string foo)'>>({
750
+ type: 'tuple',
751
+ components: [{ type: 'string', name: 'foo' }],
752
+ })
753
+ assertType<_ParseTuple<'(string bar) foo'>>({
754
+ name: 'foo',
755
+ type: 'tuple',
756
+ components: [{ type: 'string', name: 'bar' }],
757
+ })
758
+ assertType<_ParseTuple<'((string bar) foo)'>>({
759
+ type: 'tuple',
760
+ components: [
761
+ {
762
+ type: 'tuple',
763
+ name: 'foo',
764
+ components: [{ type: 'string', name: 'bar' }],
765
+ },
766
+ ],
767
+ })
768
+ assertType<_ParseTuple<'(Foo) foo', OptionsWithStructs>>({
769
+ type: 'tuple',
770
+ name: 'foo',
771
+ components: [
772
+ { type: 'tuple', components: [{ type: 'address', name: 'bar' }] },
773
+ ],
774
+ })
775
+ assertType<_ParseTuple<'((string)) calldata', OptionsWithModifier>>({
776
+ type: 'tuple',
777
+ components: [{ type: 'tuple', components: [{ type: 'string' }] }],
778
+ })
779
+
780
+ // mixed basic and named tuple params
781
+ assertType<_ParseTuple<'(string, string foo)'>>({
782
+ type: 'tuple',
783
+ components: [{ type: 'string' }, { type: 'string', name: 'foo' }],
784
+ })
785
+ assertType<_ParseTuple<'(string, string bar) foo'>>({
786
+ name: 'foo',
787
+ type: 'tuple',
788
+ components: [{ type: 'string' }, { type: 'string', name: 'bar' }],
789
+ })
790
+ assertType<
791
+ _ParseTuple<'(string baz, string bar) indexed foo', OptionsWithIndexed>
792
+ >({
793
+ name: 'foo',
794
+ type: 'tuple',
795
+ components: [
796
+ { type: 'string', name: 'baz' },
797
+ { type: 'string', name: 'bar' },
798
+ ],
799
+ indexed: true,
800
+ })
801
+
802
+ // inline tuples of tuples
803
+ assertType<_ParseTuple<'(string)[]'>>({
804
+ type: 'tuple[]',
805
+ components: [{ type: 'string' }],
806
+ })
807
+ assertType<_ParseTuple<'(string, string)[]'>>({
808
+ type: 'tuple[]',
809
+ components: [{ type: 'string' }, { type: 'string' }],
810
+ })
811
+ assertType<_ParseTuple<'((string))[]'>>({
812
+ type: 'tuple[]',
813
+ components: [{ type: 'tuple', components: [{ type: 'string' }] }],
814
+ })
815
+ assertType<_ParseTuple<'((string)[])[]'>>({
816
+ type: 'tuple[]',
817
+ components: [
818
+ {
819
+ type: 'tuple[]',
820
+ components: [{ type: 'string' }],
821
+ },
822
+ ],
823
+ })
824
+
825
+ // inline tuples of tuples with name and/or modifier attached
826
+ assertType<_ParseTuple<'(string)[] foo'>>({
827
+ type: 'tuple[]',
828
+ name: 'foo',
829
+ components: [{ type: 'string' }],
830
+ })
831
+ assertType<_ParseTuple<'(string, string bar)[] foo'>>({
832
+ type: 'tuple[]',
833
+ name: 'foo',
834
+ components: [{ type: 'string' }, { type: 'string', name: 'bar' }],
835
+ })
836
+ assertType<_ParseTuple<'((string baz) bar)[] foo'>>({
837
+ type: 'tuple[]',
838
+ name: 'foo',
839
+ components: [
840
+ {
841
+ type: 'tuple',
842
+ name: 'bar',
843
+ components: [{ type: 'string', name: 'baz' }],
844
+ },
845
+ ],
846
+ })
847
+ assertType<
848
+ _ParseTuple<
849
+ '((string)[])[] indexed foo',
850
+ OptionsWithIndexed & OptionsWithStructs
851
+ >
852
+ >({
853
+ type: 'tuple[]',
854
+ name: 'foo',
855
+ indexed: true,
856
+ components: [
857
+ {
858
+ type: 'tuple[]',
859
+ components: [{ type: 'string' }],
860
+ },
861
+ ],
862
+ })
863
+ assertType<_ParseTuple<'((string) foo)[]'>>({
864
+ type: 'tuple[]',
865
+ components: [
866
+ { type: 'tuple', name: 'foo', components: [{ type: 'string' }] },
867
+ ],
868
+ })
869
+ assertType<_ParseTuple<'(string) indexed bar', OptionsWithIndexed>>({
870
+ type: 'tuple',
871
+ name: 'bar',
872
+ indexed: true,
873
+ components: [{ type: 'string' }],
874
+ })
875
+
876
+ assertType<_ParseTuple<'((((string))) bar)'>>({
877
+ type: 'tuple',
878
+ components: [
879
+ {
880
+ name: 'bar',
881
+ type: 'tuple',
882
+ components: [
883
+ {
884
+ type: 'tuple',
885
+ components: [
886
+ {
887
+ type: 'tuple',
888
+ components: [{ type: 'string' }],
889
+ },
890
+ ],
891
+ },
892
+ ],
893
+ },
894
+ ],
895
+ })
896
+ assertType<_ParseTuple<'(((string) baz) bar) foo'>>({
897
+ type: 'tuple',
898
+ name: 'foo',
899
+ components: [
900
+ {
901
+ name: 'bar',
902
+ type: 'tuple',
903
+ components: [
904
+ {
905
+ name: 'baz',
906
+ type: 'tuple',
907
+ components: [{ type: 'string' }],
908
+ },
909
+ ],
910
+ },
911
+ ],
912
+ })
913
+ assertType<_ParseTuple<'((((string) baz)) bar) foo'>>({
914
+ type: 'tuple',
915
+ name: 'foo',
916
+ components: [
917
+ {
918
+ name: 'bar',
919
+ type: 'tuple',
920
+ components: [
921
+ {
922
+ type: 'tuple',
923
+ components: [
924
+ {
925
+ name: 'baz',
926
+ type: 'tuple',
927
+ components: [{ type: 'string' }],
928
+ },
929
+ ],
930
+ },
931
+ ],
932
+ },
933
+ ],
934
+ })
935
+
936
+ // Modifiers not converted inside tuples
937
+ assertType<_ParseTuple<'(string indexed)[] foo', OptionsWithIndexed>>({
938
+ type: 'tuple[]',
939
+ name: 'foo',
940
+ components: [
941
+ {
942
+ type: 'string',
943
+ name: ['Error: "indexed" is a protected Solidity keyword.'],
944
+ },
945
+ ],
946
+ })
947
+
948
+ assertType<_ParseTuple<'((((string baz) bar)[1] foo) boo)'>>({
949
+ type: 'tuple',
950
+ components: [
951
+ {
952
+ type: 'tuple',
953
+ components: [
954
+ {
955
+ type: 'tuple[1]',
956
+ components: [
957
+ {
958
+ type: 'tuple',
959
+ components: [
960
+ {
961
+ type: 'string',
962
+ name: 'baz',
963
+ },
964
+ ],
965
+ name: 'bar',
966
+ },
967
+ ],
968
+ name: 'foo',
969
+ },
970
+ ],
971
+ name: 'boo',
972
+ },
973
+ ],
974
+ })
975
+ assertType<_ParseTuple<'(((string baz) bar)[1] foo) boo'>>({
976
+ type: 'tuple',
977
+ components: [
978
+ {
979
+ type: 'tuple[1]',
980
+ components: [
981
+ {
982
+ type: 'tuple',
983
+ components: [
984
+ {
985
+ type: 'string',
986
+ name: 'baz',
987
+ },
988
+ ],
989
+ name: 'bar',
990
+ },
991
+ ],
992
+ name: 'foo',
993
+ },
994
+ ],
995
+ name: 'boo',
996
+ })
997
+ })
998
+
999
+ test('_SplitNameOrModifier', () => {
1000
+ expectTypeOf<_SplitNameOrModifier<'foo'>>().toEqualTypeOf<{
1001
+ readonly name: 'foo'
1002
+ }>()
1003
+ expectTypeOf<
1004
+ _SplitNameOrModifier<'indexed foo', { modifier: 'indexed' }>
1005
+ >().toEqualTypeOf<{
1006
+ readonly name: 'foo'
1007
+ readonly indexed: true
1008
+ }>()
1009
+ expectTypeOf<
1010
+ _SplitNameOrModifier<'calldata foo', { modifier: 'calldata' }>
1011
+ >().toEqualTypeOf<{
1012
+ readonly name: 'foo'
1013
+ }>()
1014
+ })
1015
+
1016
+ test('_UnwrapNameOrModifier', () => {
1017
+ expectTypeOf<_UnwrapNameOrModifier<'bar) foo'>>().toEqualTypeOf<{
1018
+ End: 'bar'
1019
+ nameOrModifier: 'foo'
1020
+ }>()
1021
+ expectTypeOf<_UnwrapNameOrModifier<'baz) bar) foo'>>().toEqualTypeOf<{
1022
+ End: 'baz) bar'
1023
+ nameOrModifier: 'foo'
1024
+ }>()
1025
+ expectTypeOf<_UnwrapNameOrModifier<'string) calldata foo'>>().toEqualTypeOf<{
1026
+ End: 'string'
1027
+ nameOrModifier: 'calldata foo'
1028
+ }>()
1029
+ })