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.
- package/CHANGELOG.md +1143 -0
- package/dist/core/Abi.d.ts +6 -2
- package/dist/core/Abi.d.ts.map +1 -1
- package/dist/core/Abi.js +6 -3
- package/dist/core/Abi.js.map +1 -1
- package/dist/core/AbiConstructor.d.ts +2 -1
- package/dist/core/AbiConstructor.d.ts.map +1 -1
- package/dist/core/AbiConstructor.js +2 -2
- package/dist/core/AbiConstructor.js.map +1 -1
- package/dist/core/AbiError.d.ts +3 -1
- package/dist/core/AbiError.d.ts.map +1 -1
- package/dist/core/AbiError.js +2 -2
- package/dist/core/AbiError.js.map +1 -1
- package/dist/core/AbiEvent.d.ts +3 -1
- package/dist/core/AbiEvent.d.ts.map +1 -1
- package/dist/core/AbiEvent.js +2 -2
- package/dist/core/AbiEvent.js.map +1 -1
- package/dist/core/AbiFunction.d.ts +3 -1
- package/dist/core/AbiFunction.d.ts.map +1 -1
- package/dist/core/AbiFunction.js +2 -2
- package/dist/core/AbiFunction.js.map +1 -1
- package/dist/core/AbiItem.d.ts +6 -3
- package/dist/core/AbiItem.d.ts.map +1 -1
- package/dist/core/AbiItem.js +9 -7
- package/dist/core/AbiItem.js.map +1 -1
- package/dist/core/AbiParameter.d.ts +88 -0
- package/dist/core/AbiParameter.d.ts.map +1 -0
- package/dist/core/AbiParameter.js +82 -0
- package/dist/core/AbiParameter.js.map +1 -0
- package/dist/core/AbiParameters.d.ts +58 -2
- package/dist/core/AbiParameters.d.ts.map +1 -1
- package/dist/core/AbiParameters.js +60 -6
- package/dist/core/AbiParameters.js.map +1 -1
- package/dist/core/Rlp.d.ts +27 -5
- package/dist/core/Rlp.d.ts.map +1 -1
- package/dist/core/Rlp.js +40 -4
- package/dist/core/Rlp.js.map +1 -1
- package/dist/core/RpcSchema.d.ts +2 -2
- package/dist/core/internal/abiParameters.d.ts.map +1 -1
- package/dist/core/internal/abiParameters.js +21 -3
- package/dist/core/internal/abiParameters.js.map +1 -1
- package/dist/core/internal/human-readable/errors.d.ts +103 -0
- package/dist/core/internal/human-readable/errors.d.ts.map +1 -0
- package/dist/core/internal/human-readable/errors.js +142 -0
- package/dist/core/internal/human-readable/errors.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbi.d.ts +19 -0
- package/dist/core/internal/human-readable/formatAbi.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbi.js +18 -0
- package/dist/core/internal/human-readable/formatAbi.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiItem.d.ts +23 -0
- package/dist/core/internal/human-readable/formatAbiItem.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiItem.js +25 -0
- package/dist/core/internal/human-readable/formatAbiItem.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameter.d.ts +41 -0
- package/dist/core/internal/human-readable/formatAbiParameter.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameter.js +36 -0
- package/dist/core/internal/human-readable/formatAbiParameter.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameters.d.ts +26 -0
- package/dist/core/internal/human-readable/formatAbiParameters.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameters.js +19 -0
- package/dist/core/internal/human-readable/formatAbiParameters.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbi.d.ts +22 -0
- package/dist/core/internal/human-readable/parseAbi.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbi.js +22 -0
- package/dist/core/internal/human-readable/parseAbi.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiItem.d.ts +23 -0
- package/dist/core/internal/human-readable/parseAbiItem.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiItem.js +30 -0
- package/dist/core/internal/human-readable/parseAbiItem.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameter.d.ts +28 -0
- package/dist/core/internal/human-readable/parseAbiParameter.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameter.js +32 -0
- package/dist/core/internal/human-readable/parseAbiParameter.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameters.d.ts +38 -0
- package/dist/core/internal/human-readable/parseAbiParameters.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameters.js +39 -0
- package/dist/core/internal/human-readable/parseAbiParameters.js.map +1 -0
- package/dist/core/internal/human-readable/regex.d.ts +9 -0
- package/dist/core/internal/human-readable/regex.d.ts.map +1 -0
- package/dist/core/internal/human-readable/regex.js +12 -0
- package/dist/core/internal/human-readable/regex.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/cache.d.ts +22 -0
- package/dist/core/internal/human-readable/runtime/cache.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/cache.js +86 -0
- package/dist/core/internal/human-readable/runtime/cache.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/signatures.d.ts +39 -0
- package/dist/core/internal/human-readable/runtime/signatures.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/signatures.js +67 -0
- package/dist/core/internal/human-readable/runtime/signatures.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/structs.d.ts +3 -0
- package/dist/core/internal/human-readable/runtime/structs.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/structs.js +79 -0
- package/dist/core/internal/human-readable/runtime/structs.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/utils.d.ts +205 -0
- package/dist/core/internal/human-readable/runtime/utils.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/utils.js +232 -0
- package/dist/core/internal/human-readable/runtime/utils.js.map +1 -0
- package/dist/core/internal/human-readable/types/signatures.d.ts +38 -0
- package/dist/core/internal/human-readable/types/signatures.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/signatures.js +2 -0
- package/dist/core/internal/human-readable/types/signatures.js.map +1 -0
- package/dist/core/internal/human-readable/types/structs.d.ts +48 -0
- package/dist/core/internal/human-readable/types/structs.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/structs.js +2 -0
- package/dist/core/internal/human-readable/types/structs.js.map +1 -0
- package/dist/core/internal/human-readable/types/utils.d.ts +163 -0
- package/dist/core/internal/human-readable/types/utils.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/utils.js +2 -0
- package/dist/core/internal/human-readable/types/utils.js.map +1 -0
- package/dist/core/internal/human-readable/types.d.ts +29 -0
- package/dist/core/internal/human-readable/types.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types.js +2 -0
- package/dist/core/internal/human-readable/types.js.map +1 -0
- package/dist/core/internal/rpcSchemas/eth.d.ts +36 -0
- package/dist/core/internal/rpcSchemas/eth.d.ts.map +1 -1
- package/dist/erc4337/EntryPoint.d.ts +1072 -1
- package/dist/erc4337/EntryPoint.d.ts.map +1 -1
- package/dist/erc4337/EntryPoint.js +872 -0
- package/dist/erc4337/EntryPoint.js.map +1 -1
- package/dist/erc4337/RpcSchema.d.ts +2 -2
- package/dist/erc4337/RpcSchema.d.ts.map +1 -1
- package/dist/erc4337/UserOperation.d.ts +39 -10
- package/dist/erc4337/UserOperation.d.ts.map +1 -1
- package/dist/erc4337/UserOperation.js +62 -48
- package/dist/erc4337/UserOperation.js.map +1 -1
- package/dist/erc4337/UserOperationGas.d.ts +9 -5
- package/dist/erc4337/UserOperationGas.d.ts.map +1 -1
- package/dist/erc4337/UserOperationGas.js +17 -15
- package/dist/erc4337/UserOperationGas.js.map +1 -1
- package/dist/erc4337/UserOperationReceipt.d.ts +4 -4
- package/dist/erc4337/UserOperationReceipt.d.ts.map +1 -1
- package/dist/erc4337/UserOperationReceipt.js.map +1 -1
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -1
- package/dist/tempo/Channel.d.ts +8 -14
- package/dist/tempo/Channel.d.ts.map +1 -1
- package/dist/tempo/Channel.js +4 -8
- package/dist/tempo/Channel.js.map +1 -1
- package/dist/tempo/KeyAuthorization.d.ts +5 -5
- package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/KeyAuthorization.js +4 -4
- package/dist/tempo/KeyAuthorization.js.map +1 -1
- package/dist/tempo/MultisigConfig.d.ts +37 -85
- package/dist/tempo/MultisigConfig.d.ts.map +1 -1
- package/dist/tempo/MultisigConfig.js +39 -83
- package/dist/tempo/MultisigConfig.js.map +1 -1
- package/dist/tempo/PoolId.d.ts +8 -7
- package/dist/tempo/PoolId.d.ts.map +1 -1
- package/dist/tempo/PoolId.js +10 -6
- package/dist/tempo/PoolId.js.map +1 -1
- package/dist/tempo/SignatureEnvelope.d.ts +32 -30
- package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
- package/dist/tempo/SignatureEnvelope.js +56 -51
- package/dist/tempo/SignatureEnvelope.js.map +1 -1
- package/dist/tempo/Transaction.d.ts +16 -5
- package/dist/tempo/Transaction.d.ts.map +1 -1
- package/dist/tempo/Transaction.js +34 -7
- package/dist/tempo/Transaction.js.map +1 -1
- package/dist/tempo/TransactionReceipt.d.ts +3 -3
- package/dist/tempo/TransactionReceipt.d.ts.map +1 -1
- package/dist/tempo/TransactionReceipt.js +8 -1
- package/dist/tempo/TransactionReceipt.js.map +1 -1
- package/dist/tempo/TransactionRequest.d.ts +15 -2
- package/dist/tempo/TransactionRequest.d.ts.map +1 -1
- package/dist/tempo/TransactionRequest.js +65 -29
- package/dist/tempo/TransactionRequest.js.map +1 -1
- package/dist/tempo/TxEnvelopeTempo.d.ts +2 -3
- package/dist/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/dist/tempo/TxEnvelopeTempo.js +5 -6
- package/dist/tempo/TxEnvelopeTempo.js.map +1 -1
- package/dist/tempo/index.d.ts +6 -26
- package/dist/tempo/index.d.ts.map +1 -1
- package/dist/tempo/index.js +6 -26
- package/dist/tempo/index.js.map +1 -1
- package/dist/zod/Abi.d.ts +214 -0
- package/dist/zod/Abi.d.ts.map +1 -0
- package/dist/zod/Abi.js +5 -0
- package/dist/zod/Abi.js.map +1 -0
- package/dist/zod/AbiConstructor.d.ts +58 -0
- package/dist/zod/AbiConstructor.d.ts.map +1 -0
- package/dist/zod/AbiConstructor.js +18 -0
- package/dist/zod/AbiConstructor.js.map +1 -0
- package/dist/zod/AbiError.d.ts +20 -0
- package/dist/zod/AbiError.d.ts.map +1 -0
- package/dist/zod/AbiError.js +9 -0
- package/dist/zod/AbiError.js.map +1 -0
- package/dist/zod/AbiEvent.d.ts +23 -0
- package/dist/zod/AbiEvent.d.ts.map +1 -0
- package/dist/zod/AbiEvent.js +11 -0
- package/dist/zod/AbiEvent.js.map +1 -0
- package/dist/zod/AbiFallback.d.ts +16 -0
- package/dist/zod/AbiFallback.d.ts.map +1 -0
- package/dist/zod/AbiFallback.js +16 -0
- package/dist/zod/AbiFallback.js.map +1 -0
- package/dist/zod/AbiFunction.d.ts +109 -0
- package/dist/zod/AbiFunction.d.ts.map +1 -0
- package/dist/zod/AbiFunction.js +26 -0
- package/dist/zod/AbiFunction.js.map +1 -0
- package/dist/zod/AbiItem.d.ts +216 -0
- package/dist/zod/AbiItem.d.ts.map +1 -0
- package/dist/zod/AbiItem.js +26 -0
- package/dist/zod/AbiItem.js.map +1 -0
- package/dist/zod/AbiParameter.d.ts +32 -0
- package/dist/zod/AbiParameter.d.ts.map +1 -0
- package/dist/zod/AbiParameter.js +28 -0
- package/dist/zod/AbiParameter.js.map +1 -0
- package/dist/zod/AbiParameters.d.ts +30 -0
- package/dist/zod/AbiParameters.d.ts.map +1 -0
- package/dist/zod/AbiParameters.js +6 -0
- package/dist/zod/AbiParameters.js.map +1 -0
- package/dist/zod/AbiReceive.d.ts +6 -0
- package/dist/zod/AbiReceive.d.ts.map +1 -0
- package/dist/zod/AbiReceive.js +7 -0
- package/dist/zod/AbiReceive.js.map +1 -0
- package/dist/zod/RpcSchema.d.ts +6 -5
- package/dist/zod/RpcSchema.d.ts.map +1 -1
- package/dist/zod/Solidity.d.ts +15 -0
- package/dist/zod/Solidity.d.ts.map +1 -0
- package/dist/zod/Solidity.js +41 -0
- package/dist/zod/Solidity.js.map +1 -0
- package/dist/zod/TypedData.d.ts +226 -0
- package/dist/zod/TypedData.d.ts.map +1 -0
- package/dist/zod/TypedData.js +84 -0
- package/dist/zod/TypedData.js.map +1 -0
- package/dist/zod/internal/rpcSchemas/Eth.d.ts +1 -0
- package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
- package/dist/zod/internal/rpcSchemas/Eth.js +5 -0
- package/dist/zod/internal/rpcSchemas/Eth.js.map +1 -1
- package/dist/zod/tempo/AuthorizationTempo.d.ts +0 -20
- package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
- package/dist/zod/tempo/KeyAuthorization.d.ts +503 -67
- package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/zod/tempo/KeyAuthorization.js +32 -15
- package/dist/zod/tempo/KeyAuthorization.js.map +1 -1
- package/dist/zod/tempo/RpcSchemaTempo.d.ts +216 -34
- package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
- package/dist/zod/tempo/SignatureEnvelope.d.ts +0 -6
- package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
- package/dist/zod/tempo/SignatureEnvelope.js +0 -2
- package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
- package/dist/zod/tempo/Transaction.d.ts +1479 -333
- package/dist/zod/tempo/Transaction.d.ts.map +1 -1
- package/dist/zod/tempo/Transaction.js +65 -16
- package/dist/zod/tempo/Transaction.js.map +1 -1
- package/dist/zod/tempo/TransactionRequest.d.ts +410 -57
- package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
- package/dist/zod/tempo/TransactionRequest.js +81 -18
- package/dist/zod/tempo/TransactionRequest.js.map +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.d.ts +225 -18
- package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.js +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.js.map +1 -1
- package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +0 -3
- package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
- package/dist/zod/tempo/z.d.ts +0 -1
- package/dist/zod/tempo/z.d.ts.map +1 -1
- package/dist/zod/tempo/z.js +0 -1
- package/dist/zod/tempo/z.js.map +1 -1
- package/dist/zod/z.d.ts +12 -0
- package/dist/zod/z.d.ts.map +1 -1
- package/dist/zod/z.js +12 -0
- package/dist/zod/z.js.map +1 -1
- package/package.json +67 -11
- package/src/core/Abi.bench.ts +30 -0
- package/src/core/Abi.ts +13 -4
- package/src/core/AbiConstructor.ts +3 -2
- package/src/core/AbiError.ts +6 -2
- package/src/core/AbiEvent.ts +6 -2
- package/src/core/AbiFunction.ts +6 -2
- package/src/core/AbiItem.bench.ts +19 -0
- package/src/core/AbiItem.ts +20 -10
- package/src/core/AbiParameter.bench.ts +35 -0
- package/src/core/AbiParameter.ts +126 -0
- package/src/core/AbiParameters.bench.ts +22 -0
- package/src/core/AbiParameters.ts +77 -8
- package/src/core/Rlp.ts +66 -3
- package/src/core/RpcSchema.ts +2 -2
- package/src/core/_test/Abi.test.ts +4 -0
- package/src/core/_test/AbiItem.test.ts +3 -0
- package/src/core/_test/AbiParameter.test-d.ts +41 -0
- package/src/core/_test/AbiParameter.test.ts +84 -0
- package/src/core/_test/AbiParameters.decode.test.ts +88 -12
- package/src/core/_test/AbiParameters.encode.test.ts +68 -0
- package/src/core/_test/AbiParameters.test.ts +7 -0
- package/src/core/_test/Rlp.test.ts +101 -0
- package/src/core/_test/index.test.ts +1 -0
- package/src/core/internal/abiParameters.ts +21 -3
- package/src/core/internal/human-readable/_snap/formatAbi.test.ts.snap +74 -0
- package/src/core/internal/human-readable/_snap/parseAbi.test.ts.snap +2353 -0
- package/src/core/internal/human-readable/errors.test.ts +258 -0
- package/src/core/internal/human-readable/errors.ts +205 -0
- package/src/core/internal/human-readable/formatAbi.test-d.ts +144 -0
- package/src/core/internal/human-readable/formatAbi.test.ts +23 -0
- package/src/core/internal/human-readable/formatAbi.ts +37 -0
- package/src/core/internal/human-readable/formatAbiItem.test-d.ts +115 -0
- package/src/core/internal/human-readable/formatAbiItem.test.ts +102 -0
- package/src/core/internal/human-readable/formatAbiItem.ts +136 -0
- package/src/core/internal/human-readable/formatAbiParameter.test-d.ts +125 -0
- package/src/core/internal/human-readable/formatAbiParameter.test.ts +126 -0
- package/src/core/internal/human-readable/formatAbiParameter.ts +86 -0
- package/src/core/internal/human-readable/formatAbiParameters.test-d.ts +92 -0
- package/src/core/internal/human-readable/formatAbiParameters.test.ts +32 -0
- package/src/core/internal/human-readable/formatAbiParameters.ts +46 -0
- package/src/core/internal/human-readable/human-readable.bench-d.ts +58 -0
- package/src/core/internal/human-readable/integration.test.ts +68 -0
- package/src/core/internal/human-readable/parseAbi.test-d.ts +188 -0
- package/src/core/internal/human-readable/parseAbi.test.ts +82 -0
- package/src/core/internal/human-readable/parseAbi.ts +59 -0
- package/src/core/internal/human-readable/parseAbiItem.test-d.ts +183 -0
- package/src/core/internal/human-readable/parseAbiItem.test.ts +264 -0
- package/src/core/internal/human-readable/parseAbiItem.ts +91 -0
- package/src/core/internal/human-readable/parseAbiParameter.test-d.ts +68 -0
- package/src/core/internal/human-readable/parseAbiParameter.test.ts +207 -0
- package/src/core/internal/human-readable/parseAbiParameter.ts +95 -0
- package/src/core/internal/human-readable/parseAbiParameters.test-d.ts +160 -0
- package/src/core/internal/human-readable/parseAbiParameters.test.ts +80 -0
- package/src/core/internal/human-readable/parseAbiParameters.ts +123 -0
- package/src/core/internal/human-readable/regex.ts +15 -0
- package/src/core/internal/human-readable/runtime/cache.ts +96 -0
- package/src/core/internal/human-readable/runtime/signatures.test.ts +236 -0
- package/src/core/internal/human-readable/runtime/signatures.ts +106 -0
- package/src/core/internal/human-readable/runtime/structs.test.ts +210 -0
- package/src/core/internal/human-readable/runtime/structs.ts +97 -0
- package/src/core/internal/human-readable/runtime/utils.test.ts +717 -0
- package/src/core/internal/human-readable/runtime/utils.ts +344 -0
- package/src/core/internal/human-readable/types/signatures.test-d.ts +255 -0
- package/src/core/internal/human-readable/types/signatures.ts +369 -0
- package/src/core/internal/human-readable/types/structs.test-d.ts +221 -0
- package/src/core/internal/human-readable/types/structs.ts +88 -0
- package/src/core/internal/human-readable/types/utils.test-d.ts +1029 -0
- package/src/core/internal/human-readable/types/utils.ts +392 -0
- package/src/core/internal/human-readable/types.ts +69 -0
- package/src/core/internal/rpcSchemas/eth.ts +36 -0
- package/src/erc4337/EntryPoint.ts +875 -1
- package/src/erc4337/RpcSchema.ts +4 -2
- package/src/erc4337/UserOperation.ts +130 -60
- package/src/erc4337/UserOperationGas.ts +36 -28
- package/src/erc4337/UserOperationReceipt.ts +15 -7
- package/src/erc4337/_test/EntryPoint.test.ts +48 -0
- package/src/erc4337/_test/RpcSchema.test-d.ts +56 -0
- package/src/erc4337/_test/UserOperation.snap-d.ts +31 -0
- package/src/erc4337/_test/UserOperation.test.ts +221 -5
- package/src/erc4337/_test/UserOperationGas.test.ts +30 -1
- package/src/index.ts +38 -0
- package/src/tempo/Channel.test.ts +2 -23
- package/src/tempo/Channel.ts +10 -22
- package/src/tempo/KeyAuthorization.test.ts +22 -0
- package/src/tempo/KeyAuthorization.ts +9 -9
- package/src/tempo/MultisigConfig.test.ts +54 -37
- package/src/tempo/MultisigConfig.ts +59 -134
- package/src/tempo/PoolId.test.ts +7 -41
- package/src/tempo/PoolId.ts +15 -10
- package/src/tempo/SignatureEnvelope.test.ts +118 -17
- package/src/tempo/SignatureEnvelope.ts +77 -72
- package/src/tempo/Transaction.test.ts +0 -15
- package/src/tempo/Transaction.ts +63 -12
- package/src/tempo/TransactionReceipt.test.ts +76 -0
- package/src/tempo/TransactionReceipt.ts +11 -5
- package/src/tempo/TransactionRequest.test.ts +174 -1
- package/src/tempo/TransactionRequest.ts +84 -32
- package/src/tempo/TxEnvelopeTempo.test.ts +2 -2
- package/src/tempo/TxEnvelopeTempo.ts +7 -7
- package/src/tempo/e2e.test.ts +228 -50
- package/src/tempo/index.ts +6 -26
- package/src/version.ts +1 -1
- package/src/zod/Abi.ts +5 -0
- package/src/zod/AbiConstructor.ts +24 -0
- package/src/zod/AbiError.ts +9 -0
- package/src/zod/AbiEvent.ts +11 -0
- package/src/zod/AbiFallback.ts +22 -0
- package/src/zod/AbiFunction.ts +32 -0
- package/src/zod/AbiItem.ts +28 -0
- package/src/zod/AbiParameter.ts +36 -0
- package/src/zod/AbiParameters.ts +7 -0
- package/src/zod/AbiReceive.ts +7 -0
- package/src/zod/RpcSchema.ts +5 -5
- package/src/zod/Solidity.ts +83 -0
- package/src/zod/TypedData.ts +111 -0
- package/src/zod/_test/Abi.test-d.ts +46 -0
- package/src/zod/_test/Abi.test.ts +163 -0
- package/src/zod/_test/TypedData.test-d.ts +20 -0
- package/src/zod/_test/TypedData.test.ts +87 -0
- package/src/zod/_test/z.test-d.ts +6 -0
- package/src/zod/_test/z.test.ts +17 -0
- package/src/zod/internal/rpcSchemas/Eth.ts +6 -0
- package/src/zod/tempo/KeyAuthorization.ts +34 -15
- package/src/zod/tempo/SignatureEnvelope.ts +0 -2
- package/src/zod/tempo/Transaction.ts +84 -22
- package/src/zod/tempo/TransactionRequest.ts +86 -20
- package/src/zod/tempo/TxEnvelopeTempo.ts +1 -1
- package/src/zod/tempo/_test/KeyAuthorization.test.ts +53 -0
- package/src/zod/tempo/_test/SignatureEnvelope.test.ts +0 -2
- package/src/zod/tempo/_test/Transaction.test.ts +155 -0
- package/src/zod/tempo/_test/TransactionRequest.test.ts +44 -0
- package/src/zod/tempo/z.ts +0 -1
- package/src/zod/z.ts +12 -0
- package/dist/tempo/TokenId.d.ts +0 -87
- package/dist/tempo/TokenId.d.ts.map +0 -1
- package/dist/tempo/TokenId.js +0 -123
- package/dist/tempo/TokenId.js.map +0 -1
- package/dist/zod/tempo/TokenId.d.ts +0 -6
- package/dist/zod/tempo/TokenId.d.ts.map +0 -1
- package/dist/zod/tempo/TokenId.js +0 -14
- package/dist/zod/tempo/TokenId.js.map +0 -1
- package/src/CHANGELOG.md +0 -820
- package/src/tempo/TokenId.bench.ts +0 -36
- package/src/tempo/TokenId.test.ts +0 -79
- package/src/tempo/TokenId.ts +0 -141
- package/src/zod/tempo/TokenId.ts +0 -15
- package/src/zod/tempo/_test/TokenId.test-d.ts +0 -17
- package/src/zod/tempo/_test/TokenId.test.ts +0 -21
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { assertType, expect, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import { parseAbiParameter } from './parseAbiParameter.js'
|
|
4
|
+
|
|
5
|
+
test('parseAbiParameter', () => {
|
|
6
|
+
// @ts-expect-error invalid signature type
|
|
7
|
+
expect(() => parseAbiParameter('')).toThrowErrorMatchingInlineSnapshot(
|
|
8
|
+
`[HumanReadableAbi.InvalidParameterError: Invalid ABI parameter.]`,
|
|
9
|
+
)
|
|
10
|
+
// @ts-expect-error invalid signature type
|
|
11
|
+
expect(() => parseAbiParameter([])).toThrowErrorMatchingInlineSnapshot(
|
|
12
|
+
`
|
|
13
|
+
[AbiParameter.InvalidAbiParameterError: Failed to parse ABI parameter.
|
|
14
|
+
|
|
15
|
+
Details: parseAbiParameter([])
|
|
16
|
+
See: https://oxlib.sh/api/AbiParameter/from]
|
|
17
|
+
`,
|
|
18
|
+
)
|
|
19
|
+
expect(() =>
|
|
20
|
+
parseAbiParameter(['struct Foo { string name; }']),
|
|
21
|
+
).toThrowErrorMatchingInlineSnapshot(
|
|
22
|
+
`
|
|
23
|
+
[AbiParameter.InvalidAbiParameterError: Failed to parse ABI parameter.
|
|
24
|
+
|
|
25
|
+
Details: parseAbiParameter([
|
|
26
|
+
"struct Foo { string name; }"
|
|
27
|
+
])
|
|
28
|
+
See: https://oxlib.sh/api/AbiParameter/from]
|
|
29
|
+
`,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
expect(() =>
|
|
33
|
+
parseAbiParameter(['struct Foo { string memory bar; }', 'Foo indexed foo']),
|
|
34
|
+
).toThrowErrorMatchingInlineSnapshot(
|
|
35
|
+
`
|
|
36
|
+
[HumanReadableAbi.InvalidModifierError: Invalid ABI parameter.
|
|
37
|
+
|
|
38
|
+
Modifier "memory" not allowed in "struct" type.
|
|
39
|
+
|
|
40
|
+
Details: string memory bar]
|
|
41
|
+
`,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
expect([parseAbiParameter('address from')]).toMatchInlineSnapshot(`
|
|
45
|
+
[
|
|
46
|
+
{
|
|
47
|
+
"name": "from",
|
|
48
|
+
"type": "address",
|
|
49
|
+
},
|
|
50
|
+
]
|
|
51
|
+
`)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test.each([
|
|
55
|
+
{ signature: 'string', expected: { type: 'string' } },
|
|
56
|
+
{ signature: 'string foo', expected: { name: 'foo', type: 'string' } },
|
|
57
|
+
{
|
|
58
|
+
signature: 'string indexed foo',
|
|
59
|
+
expected: { name: 'foo', type: 'string', indexed: true },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
signature: 'string calldata foo',
|
|
63
|
+
expected: { name: 'foo', type: 'string' },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
signature: '(string)',
|
|
67
|
+
expected: { type: 'tuple', components: [{ type: 'string' }] },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
signature: '(string foo)',
|
|
71
|
+
expected: { type: 'tuple', components: [{ name: 'foo', type: 'string' }] },
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
signature: '(string bar) foo',
|
|
75
|
+
expected: {
|
|
76
|
+
type: 'tuple',
|
|
77
|
+
name: 'foo',
|
|
78
|
+
components: [{ name: 'bar', type: 'string' }],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
signature: '(string bar, string baz) foo',
|
|
83
|
+
expected: {
|
|
84
|
+
type: 'tuple',
|
|
85
|
+
name: 'foo',
|
|
86
|
+
components: [
|
|
87
|
+
{ name: 'bar', type: 'string' },
|
|
88
|
+
{ name: 'baz', type: 'string' },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{ signature: 'string[]', expected: { type: 'string[]' } },
|
|
93
|
+
])('parseAbiParameter($signature)', ({ signature, expected }) => {
|
|
94
|
+
expect(parseAbiParameter(signature)).toEqual(expected)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
test.each([
|
|
98
|
+
{
|
|
99
|
+
signatures: ['struct Foo { string bar; }', 'Foo'],
|
|
100
|
+
expected: { type: 'tuple', components: [{ name: 'bar', type: 'string' }] },
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
signatures: ['struct Foo { string bar; }', 'Foo foo'],
|
|
104
|
+
expected: {
|
|
105
|
+
type: 'tuple',
|
|
106
|
+
name: 'foo',
|
|
107
|
+
components: [{ name: 'bar', type: 'string' }],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
signatures: ['struct Foo { string bar; }', 'Foo indexed foo'],
|
|
112
|
+
expected: {
|
|
113
|
+
type: 'tuple',
|
|
114
|
+
name: 'foo',
|
|
115
|
+
indexed: true,
|
|
116
|
+
components: [{ name: 'bar', type: 'string' }],
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
])('parseAbiParameter($signatures)', ({ signatures, expected }) => {
|
|
120
|
+
expect(parseAbiParameter(signatures)).toEqual(expected)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
test('nested tuple', () => {
|
|
124
|
+
const result = parseAbiParameter('((((string baz) bar)[1] foo) boo)')
|
|
125
|
+
expect(result).toMatchInlineSnapshot(`
|
|
126
|
+
{
|
|
127
|
+
"components": [
|
|
128
|
+
{
|
|
129
|
+
"components": [
|
|
130
|
+
{
|
|
131
|
+
"components": [
|
|
132
|
+
{
|
|
133
|
+
"components": [
|
|
134
|
+
{
|
|
135
|
+
"name": "baz",
|
|
136
|
+
"type": "string",
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
"name": "bar",
|
|
140
|
+
"type": "tuple",
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
"name": "foo",
|
|
144
|
+
"type": "tuple[1]",
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
"name": "boo",
|
|
148
|
+
"type": "tuple",
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
"type": "tuple",
|
|
152
|
+
}
|
|
153
|
+
`)
|
|
154
|
+
assertType<{
|
|
155
|
+
type: 'tuple'
|
|
156
|
+
components: readonly [
|
|
157
|
+
{
|
|
158
|
+
type: 'tuple'
|
|
159
|
+
components: readonly [
|
|
160
|
+
{
|
|
161
|
+
type: 'tuple[1]'
|
|
162
|
+
components: readonly [
|
|
163
|
+
{
|
|
164
|
+
type: 'tuple'
|
|
165
|
+
components: readonly [
|
|
166
|
+
{
|
|
167
|
+
type: 'string'
|
|
168
|
+
name: 'baz'
|
|
169
|
+
},
|
|
170
|
+
]
|
|
171
|
+
name: 'bar'
|
|
172
|
+
},
|
|
173
|
+
]
|
|
174
|
+
name: 'foo'
|
|
175
|
+
},
|
|
176
|
+
]
|
|
177
|
+
name: 'boo'
|
|
178
|
+
},
|
|
179
|
+
]
|
|
180
|
+
}>(result)
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
test('struct name collision', () => {
|
|
184
|
+
const result1 = parseAbiParameter(['struct Foo { string bar; }', 'Foo'])
|
|
185
|
+
expect(result1).toEqual({
|
|
186
|
+
type: 'tuple',
|
|
187
|
+
components: [{ name: 'bar', type: 'string' }],
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
const result2 = parseAbiParameter(['struct Foo { address bar; }', 'Foo'])
|
|
191
|
+
expect(result2).toEqual({
|
|
192
|
+
type: 'tuple',
|
|
193
|
+
components: [{ name: 'bar', type: 'address' }],
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
const result3 = parseAbiParameter([
|
|
197
|
+
'struct Foo { uint256 amount; address token; }',
|
|
198
|
+
'Foo',
|
|
199
|
+
])
|
|
200
|
+
expect(result3).toEqual({
|
|
201
|
+
type: 'tuple',
|
|
202
|
+
components: [
|
|
203
|
+
{ name: 'amount', type: 'uint256' },
|
|
204
|
+
{ name: 'token', type: 'address' },
|
|
205
|
+
],
|
|
206
|
+
})
|
|
207
|
+
})
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { AbiParameter } from 'abitype'
|
|
2
|
+
import type { Narrow } from 'abitype'
|
|
3
|
+
import type { Error, Filter } from './types.js'
|
|
4
|
+
import { InvalidAbiParameterError } from './errors.js'
|
|
5
|
+
import { isStructSignature, modifiers } from './runtime/signatures.js'
|
|
6
|
+
import { parseStructs } from './runtime/structs.js'
|
|
7
|
+
import { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'
|
|
8
|
+
import type { IsStructSignature, Modifier } from './types/signatures.js'
|
|
9
|
+
import type { ParseStructs } from './types/structs.js'
|
|
10
|
+
import type { ParseAbiParameter as ParseAbiParameter_ } from './types/utils.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Parses human-readable ABI parameter into `AbiParameter`.
|
|
14
|
+
*
|
|
15
|
+
* @param param - Human-readable ABI parameter
|
|
16
|
+
* @returns Parsed `AbiParameter`.
|
|
17
|
+
*/
|
|
18
|
+
export type ParseAbiParameter<
|
|
19
|
+
param extends string | readonly string[] | readonly unknown[],
|
|
20
|
+
> =
|
|
21
|
+
| (param extends string
|
|
22
|
+
? param extends ''
|
|
23
|
+
? never
|
|
24
|
+
: string extends param
|
|
25
|
+
? AbiParameter
|
|
26
|
+
: ParseAbiParameter_<param, { modifier: Modifier }>
|
|
27
|
+
: never)
|
|
28
|
+
| (param extends readonly string[]
|
|
29
|
+
? string[] extends param
|
|
30
|
+
? AbiParameter // Return generic AbiParameter item since type was no inferrable
|
|
31
|
+
: ParseStructs<param> extends infer structs
|
|
32
|
+
? {
|
|
33
|
+
[key in keyof param]: param[key] extends string
|
|
34
|
+
? IsStructSignature<param[key]> extends true
|
|
35
|
+
? never
|
|
36
|
+
: ParseAbiParameter_<
|
|
37
|
+
param[key],
|
|
38
|
+
{ modifier: Modifier; structs: structs }
|
|
39
|
+
>
|
|
40
|
+
: never
|
|
41
|
+
} extends infer mapped extends readonly unknown[]
|
|
42
|
+
? Filter<mapped, never>[0] extends infer result
|
|
43
|
+
? result extends undefined
|
|
44
|
+
? never
|
|
45
|
+
: result
|
|
46
|
+
: never
|
|
47
|
+
: never
|
|
48
|
+
: never
|
|
49
|
+
: never)
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Parses human-readable ABI parameter into `AbiParameter`.
|
|
53
|
+
*
|
|
54
|
+
* @param param - Human-readable ABI parameter
|
|
55
|
+
* @returns Parsed `AbiParameter`.
|
|
56
|
+
*/
|
|
57
|
+
export function parseAbiParameter<
|
|
58
|
+
param extends string | readonly string[] | readonly unknown[],
|
|
59
|
+
>(
|
|
60
|
+
param: Narrow<param> &
|
|
61
|
+
(
|
|
62
|
+
| (param extends string
|
|
63
|
+
? param extends ''
|
|
64
|
+
? Error<'Empty string is not allowed.'>
|
|
65
|
+
: unknown
|
|
66
|
+
: never)
|
|
67
|
+
| (param extends readonly string[]
|
|
68
|
+
? param extends readonly [] // empty array
|
|
69
|
+
? Error<'At least one parameter required.'>
|
|
70
|
+
: string[] extends param
|
|
71
|
+
? unknown
|
|
72
|
+
: unknown // TODO: Validate param string
|
|
73
|
+
: never)
|
|
74
|
+
),
|
|
75
|
+
): ParseAbiParameter<param> {
|
|
76
|
+
let abiParameter: AbiParameter | undefined
|
|
77
|
+
if (typeof param === 'string')
|
|
78
|
+
abiParameter = parseAbiParameter_(param, {
|
|
79
|
+
modifiers,
|
|
80
|
+
}) as ParseAbiParameter<param>
|
|
81
|
+
else {
|
|
82
|
+
const structs = parseStructs(param as readonly string[])
|
|
83
|
+
const length = param.length as number
|
|
84
|
+
for (let i = 0; i < length; i++) {
|
|
85
|
+
const signature = (param as readonly string[])[i]!
|
|
86
|
+
if (isStructSignature(signature)) continue
|
|
87
|
+
abiParameter = parseAbiParameter_(signature, { modifiers, structs })
|
|
88
|
+
break
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!abiParameter) throw new InvalidAbiParameterError({ param })
|
|
93
|
+
|
|
94
|
+
return abiParameter as ParseAbiParameter<param>
|
|
95
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type { AbiParameter } from 'abitype'
|
|
4
|
+
import type { ParseAbiParameters } from './parseAbiParameters.js'
|
|
5
|
+
import { parseAbiParameters } from './parseAbiParameters.js'
|
|
6
|
+
|
|
7
|
+
test('ParseAbiParameters', () => {
|
|
8
|
+
expectTypeOf<ParseAbiParameters<''>>().toEqualTypeOf<never>()
|
|
9
|
+
expectTypeOf<ParseAbiParameters<[]>>().toEqualTypeOf<never>()
|
|
10
|
+
expectTypeOf<
|
|
11
|
+
ParseAbiParameters<['struct Foo { string name; }']>
|
|
12
|
+
>().toEqualTypeOf<never>()
|
|
13
|
+
|
|
14
|
+
// string
|
|
15
|
+
expectTypeOf<
|
|
16
|
+
ParseAbiParameters<'address from, address to, uint256 amount'>
|
|
17
|
+
>().toEqualTypeOf<
|
|
18
|
+
readonly [
|
|
19
|
+
{
|
|
20
|
+
readonly type: 'address'
|
|
21
|
+
readonly name: 'from'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
readonly type: 'address'
|
|
25
|
+
readonly name: 'to'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
readonly type: 'uint256'
|
|
29
|
+
readonly name: 'amount'
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
>()
|
|
33
|
+
expectTypeOf<
|
|
34
|
+
ParseAbiParameters<'address indexed from, address indexed to, uint256 indexed amount'>
|
|
35
|
+
>().toEqualTypeOf<
|
|
36
|
+
readonly [
|
|
37
|
+
{
|
|
38
|
+
readonly type: 'address'
|
|
39
|
+
readonly name: 'from'
|
|
40
|
+
readonly indexed: true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
readonly type: 'address'
|
|
44
|
+
readonly name: 'to'
|
|
45
|
+
readonly indexed: true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
readonly type: 'uint256'
|
|
49
|
+
readonly name: 'amount'
|
|
50
|
+
readonly indexed: true
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
>()
|
|
54
|
+
expectTypeOf<
|
|
55
|
+
ParseAbiParameters<'address calldata foo, address memory bar, uint256 storage baz'>
|
|
56
|
+
>().toEqualTypeOf<
|
|
57
|
+
readonly [
|
|
58
|
+
{
|
|
59
|
+
readonly type: 'address'
|
|
60
|
+
readonly name: 'foo'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
readonly type: 'address'
|
|
64
|
+
readonly name: 'bar'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
readonly type: 'uint256'
|
|
68
|
+
readonly name: 'baz'
|
|
69
|
+
},
|
|
70
|
+
]
|
|
71
|
+
>()
|
|
72
|
+
|
|
73
|
+
// Array
|
|
74
|
+
expectTypeOf<
|
|
75
|
+
ParseAbiParameters<['Foo, bytes32', 'struct Foo { string name; }']>
|
|
76
|
+
>().toEqualTypeOf<
|
|
77
|
+
readonly [
|
|
78
|
+
{
|
|
79
|
+
readonly type: 'tuple'
|
|
80
|
+
readonly components: readonly [
|
|
81
|
+
{
|
|
82
|
+
readonly name: 'name'
|
|
83
|
+
readonly type: 'string'
|
|
84
|
+
},
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{ readonly type: 'bytes32' },
|
|
88
|
+
]
|
|
89
|
+
>()
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
test('parseAbiParameters', () => {
|
|
93
|
+
// @ts-expect-error empty array not allowed
|
|
94
|
+
expectTypeOf(parseAbiParameters([])).toEqualTypeOf<never>()
|
|
95
|
+
expectTypeOf(
|
|
96
|
+
parseAbiParameters(['struct Foo { string name; }']),
|
|
97
|
+
).toEqualTypeOf<never>()
|
|
98
|
+
|
|
99
|
+
expectTypeOf(parseAbiParameters('(string)')).toEqualTypeOf<
|
|
100
|
+
readonly [
|
|
101
|
+
{
|
|
102
|
+
readonly type: 'tuple'
|
|
103
|
+
readonly components: readonly [{ readonly type: 'string' }]
|
|
104
|
+
},
|
|
105
|
+
]
|
|
106
|
+
>()
|
|
107
|
+
|
|
108
|
+
const param: string = 'address, string'
|
|
109
|
+
expectTypeOf(parseAbiParameters(param)).toEqualTypeOf<
|
|
110
|
+
readonly AbiParameter[]
|
|
111
|
+
>()
|
|
112
|
+
|
|
113
|
+
expectTypeOf(parseAbiParameters(['(uint256 a),(uint256 b)'])).toEqualTypeOf<
|
|
114
|
+
readonly [
|
|
115
|
+
{
|
|
116
|
+
readonly type: 'tuple'
|
|
117
|
+
readonly components: readonly [
|
|
118
|
+
{
|
|
119
|
+
readonly type: 'uint256'
|
|
120
|
+
readonly name: 'a'
|
|
121
|
+
},
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
readonly type: 'tuple'
|
|
126
|
+
readonly components: readonly [
|
|
127
|
+
{
|
|
128
|
+
readonly type: 'uint256'
|
|
129
|
+
readonly name: 'b'
|
|
130
|
+
},
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
]
|
|
134
|
+
>()
|
|
135
|
+
|
|
136
|
+
expectTypeOf(
|
|
137
|
+
parseAbiParameters(['(uint256 a)', '(uint256 b)']),
|
|
138
|
+
).toEqualTypeOf<
|
|
139
|
+
readonly [
|
|
140
|
+
{
|
|
141
|
+
readonly type: 'tuple'
|
|
142
|
+
readonly components: readonly [
|
|
143
|
+
{
|
|
144
|
+
readonly type: 'uint256'
|
|
145
|
+
readonly name: 'a'
|
|
146
|
+
},
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
readonly type: 'tuple'
|
|
151
|
+
readonly components: readonly [
|
|
152
|
+
{
|
|
153
|
+
readonly type: 'uint256'
|
|
154
|
+
readonly name: 'b'
|
|
155
|
+
},
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
]
|
|
159
|
+
>()
|
|
160
|
+
})
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { expect, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import { parseAbiParameters } from './parseAbiParameters.js'
|
|
4
|
+
|
|
5
|
+
test('parseAbiParameters', () => {
|
|
6
|
+
// @ts-expect-error invalid signature type
|
|
7
|
+
expect(() => parseAbiParameters('')).toThrowErrorMatchingInlineSnapshot(
|
|
8
|
+
`
|
|
9
|
+
[AbiParameters.InvalidAbiParametersError: Failed to parse ABI parameters.
|
|
10
|
+
|
|
11
|
+
Details: parseAbiParameters("")
|
|
12
|
+
See: https://oxlib.sh/api/AbiParameters/from]
|
|
13
|
+
`,
|
|
14
|
+
)
|
|
15
|
+
// @ts-expect-error invalid signature type
|
|
16
|
+
expect(() => parseAbiParameters([])).toThrowErrorMatchingInlineSnapshot(
|
|
17
|
+
`
|
|
18
|
+
[AbiParameters.InvalidAbiParametersError: Failed to parse ABI parameters.
|
|
19
|
+
|
|
20
|
+
Details: parseAbiParameters([])
|
|
21
|
+
See: https://oxlib.sh/api/AbiParameters/from]
|
|
22
|
+
`,
|
|
23
|
+
)
|
|
24
|
+
expect(() =>
|
|
25
|
+
parseAbiParameters(['struct Foo { string name; }']),
|
|
26
|
+
).toThrowErrorMatchingInlineSnapshot(
|
|
27
|
+
`
|
|
28
|
+
[AbiParameters.InvalidAbiParametersError: Failed to parse ABI parameters.
|
|
29
|
+
|
|
30
|
+
Details: parseAbiParameters([
|
|
31
|
+
"struct Foo { string name; }"
|
|
32
|
+
])
|
|
33
|
+
See: https://oxlib.sh/api/AbiParameters/from]
|
|
34
|
+
`,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
expect(parseAbiParameters('address from')).toMatchInlineSnapshot(`
|
|
38
|
+
[
|
|
39
|
+
{
|
|
40
|
+
"name": "from",
|
|
41
|
+
"type": "address",
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
`)
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test.each([
|
|
48
|
+
{
|
|
49
|
+
signatures: 'string, string',
|
|
50
|
+
expected: [{ type: 'string' }, { type: 'string' }],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
signatures: 'string foo, string bar',
|
|
54
|
+
expected: [
|
|
55
|
+
{ type: 'string', name: 'foo' },
|
|
56
|
+
{ type: 'string', name: 'bar' },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
])('parseAbiParameters($signatures)', ({ signatures, expected }) => {
|
|
60
|
+
expect(parseAbiParameters(signatures)).toEqual(expected)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test.each([
|
|
64
|
+
{
|
|
65
|
+
signatures: ['struct Foo { string bar; }', 'Foo, string'],
|
|
66
|
+
expected: [
|
|
67
|
+
{ type: 'tuple', components: [{ name: 'bar', type: 'string' }] },
|
|
68
|
+
{ type: 'string' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
signatures: ['string foo, string bar'],
|
|
73
|
+
expected: [
|
|
74
|
+
{ name: 'foo', type: 'string' },
|
|
75
|
+
{ name: 'bar', type: 'string' },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
])('parseAbiParameters($signatures)', ({ signatures, expected }) => {
|
|
79
|
+
expect(parseAbiParameters(signatures)).toEqual(expected)
|
|
80
|
+
})
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { AbiParameter } from 'abitype'
|
|
2
|
+
import type { Narrow } from 'abitype'
|
|
3
|
+
import type { Error, Filter } from './types.js'
|
|
4
|
+
import { InvalidAbiParametersError } from './errors.js'
|
|
5
|
+
import { isStructSignature, modifiers } from './runtime/signatures.js'
|
|
6
|
+
import { parseStructs } from './runtime/structs.js'
|
|
7
|
+
import { splitParameters } from './runtime/utils.js'
|
|
8
|
+
import { parseAbiParameter as parseAbiParameter_ } from './runtime/utils.js'
|
|
9
|
+
import type { IsStructSignature, Modifier } from './types/signatures.js'
|
|
10
|
+
import type { ParseStructs } from './types/structs.js'
|
|
11
|
+
import type { SplitParameters } from './types/utils.js'
|
|
12
|
+
import type { ParseAbiParameters as ParseAbiParameters_ } from './types/utils.js'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parses human-readable ABI parameters into `AbiParameter`s.
|
|
16
|
+
*
|
|
17
|
+
* @param params - Human-readable ABI parameters
|
|
18
|
+
* @returns Parsed `AbiParameter`s.
|
|
19
|
+
*/
|
|
20
|
+
export type ParseAbiParameters<
|
|
21
|
+
params extends string | readonly string[] | readonly unknown[],
|
|
22
|
+
> =
|
|
23
|
+
| (params extends string
|
|
24
|
+
? params extends ''
|
|
25
|
+
? never
|
|
26
|
+
: string extends params
|
|
27
|
+
? readonly AbiParameter[]
|
|
28
|
+
: ParseAbiParameters_<SplitParameters<params>, { modifier: Modifier }>
|
|
29
|
+
: never)
|
|
30
|
+
| (params extends readonly string[]
|
|
31
|
+
? string[] extends params
|
|
32
|
+
? AbiParameter // Return generic AbiParameter item since type was no inferrable
|
|
33
|
+
: ParseStructs<params> extends infer structs
|
|
34
|
+
? {
|
|
35
|
+
[key in keyof params]: params[key] extends string
|
|
36
|
+
? IsStructSignature<params[key]> extends true
|
|
37
|
+
? never
|
|
38
|
+
: ParseAbiParameters_<
|
|
39
|
+
SplitParameters<params[key]>,
|
|
40
|
+
{ modifier: Modifier; structs: structs }
|
|
41
|
+
>
|
|
42
|
+
: never
|
|
43
|
+
} extends infer mapped extends readonly unknown[]
|
|
44
|
+
? Filter<mapped, never> extends readonly [...infer content]
|
|
45
|
+
? content['length'] extends 0
|
|
46
|
+
? never
|
|
47
|
+
: DeepFlatten<content>
|
|
48
|
+
: never
|
|
49
|
+
: never
|
|
50
|
+
: never
|
|
51
|
+
: never)
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Flatten all members of `T`.
|
|
55
|
+
*
|
|
56
|
+
* @param T - List of items to flatten
|
|
57
|
+
* @param Acc - The accumulator used while recursing
|
|
58
|
+
* @returns The flattened array
|
|
59
|
+
*/
|
|
60
|
+
type DeepFlatten<
|
|
61
|
+
T extends readonly unknown[],
|
|
62
|
+
Acc extends readonly unknown[] = readonly [],
|
|
63
|
+
> = T extends readonly [infer head, ...infer tail]
|
|
64
|
+
? tail extends undefined
|
|
65
|
+
? never
|
|
66
|
+
: head extends readonly unknown[]
|
|
67
|
+
? DeepFlatten<tail, readonly [...Acc, ...DeepFlatten<head>]>
|
|
68
|
+
: DeepFlatten<tail, readonly [...Acc, head]>
|
|
69
|
+
: Acc
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Parses human-readable ABI parameters into `AbiParameter`s.
|
|
73
|
+
*
|
|
74
|
+
* @param params - Human-readable ABI parameters
|
|
75
|
+
* @returns Parsed `AbiParameter`s.
|
|
76
|
+
*/
|
|
77
|
+
export function parseAbiParameters<
|
|
78
|
+
params extends string | readonly string[] | readonly unknown[],
|
|
79
|
+
>(
|
|
80
|
+
params: Narrow<params> &
|
|
81
|
+
(
|
|
82
|
+
| (params extends string
|
|
83
|
+
? params extends ''
|
|
84
|
+
? Error<'Empty string is not allowed.'>
|
|
85
|
+
: unknown
|
|
86
|
+
: never)
|
|
87
|
+
| (params extends readonly string[]
|
|
88
|
+
? params extends readonly [] // empty array
|
|
89
|
+
? Error<'At least one parameter required.'>
|
|
90
|
+
: string[] extends params
|
|
91
|
+
? unknown
|
|
92
|
+
: unknown // TODO: Validate param string
|
|
93
|
+
: never)
|
|
94
|
+
),
|
|
95
|
+
): ParseAbiParameters<params> {
|
|
96
|
+
const abiParameters: AbiParameter[] = []
|
|
97
|
+
if (typeof params === 'string') {
|
|
98
|
+
const parameters = splitParameters(params)
|
|
99
|
+
const length = parameters.length
|
|
100
|
+
for (let i = 0; i < length; i++) {
|
|
101
|
+
abiParameters.push(parseAbiParameter_(parameters[i]!, { modifiers }))
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
const structs = parseStructs(params as readonly string[])
|
|
105
|
+
const length = params.length as number
|
|
106
|
+
for (let i = 0; i < length; i++) {
|
|
107
|
+
const signature = (params as readonly string[])[i]!
|
|
108
|
+
if (isStructSignature(signature)) continue
|
|
109
|
+
const parameters = splitParameters(signature)
|
|
110
|
+
const length = parameters.length
|
|
111
|
+
for (let k = 0; k < length; k++) {
|
|
112
|
+
abiParameters.push(
|
|
113
|
+
parseAbiParameter_(parameters[k]!, { modifiers, structs }),
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (abiParameters.length === 0)
|
|
120
|
+
throw new InvalidAbiParametersError({ params })
|
|
121
|
+
|
|
122
|
+
return abiParameters as ParseAbiParameters<params>
|
|
123
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** @internal */
|
|
2
|
+
export function execTyped<type>(regex: RegExp, string: string) {
|
|
3
|
+
const match = regex.exec(string)
|
|
4
|
+
return match?.groups as type | undefined
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const integerRegex =
|
|
12
|
+
/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/
|
|
13
|
+
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const isTupleRegex = /^\(.+?\).*?$/
|