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
|
@@ -3,6 +3,8 @@ import * as Address from './Address.js'
|
|
|
3
3
|
import * as Bytes from './Bytes.js'
|
|
4
4
|
import * as Errors from './Errors.js'
|
|
5
5
|
import * as Hex from './Hex.js'
|
|
6
|
+
import * as formatAbiParameters from './internal/human-readable/formatAbiParameters.js'
|
|
7
|
+
import * as parseAbiParameters from './internal/human-readable/parseAbiParameters.js'
|
|
6
8
|
import * as internal from './internal/abiParameters.js'
|
|
7
9
|
import * as Cursor from './internal/cursor.js'
|
|
8
10
|
import * as Solidity from './Solidity.js'
|
|
@@ -13,6 +15,16 @@ export type AbiParameters = readonly abitype.AbiParameter[]
|
|
|
13
15
|
/** A parameter on an {@link ox#AbiParameters.AbiParameters}. */
|
|
14
16
|
export type Parameter = abitype.AbiParameter
|
|
15
17
|
|
|
18
|
+
export {
|
|
19
|
+
InvalidAbiParametersError,
|
|
20
|
+
InvalidAbiTypeParameterError,
|
|
21
|
+
InvalidFunctionModifierError,
|
|
22
|
+
InvalidModifierError,
|
|
23
|
+
InvalidParameterError,
|
|
24
|
+
SolidityProtectedKeywordError,
|
|
25
|
+
} from './internal/human-readable/errors.js'
|
|
26
|
+
export { InvalidParenthesisError } from './internal/human-readable/errors.js'
|
|
27
|
+
|
|
16
28
|
/** A packed ABI type. */
|
|
17
29
|
export type PackedAbiType =
|
|
18
30
|
| abitype.SolidityAddress
|
|
@@ -97,7 +109,9 @@ export function decode(
|
|
|
97
109
|
for (let i = 0; i < parameters.length; ++i) {
|
|
98
110
|
const param = parameters[i] as Parameter
|
|
99
111
|
try {
|
|
100
|
-
|
|
112
|
+
// Zero-width types (e.g. `uint256[0]`, empty tuples) at the end of the
|
|
113
|
+
// data consume no bytes, so the cursor may already be exhausted.
|
|
114
|
+
if (consumed < bytes.length) cursor.setPosition(consumed)
|
|
101
115
|
const [data_, consumed_] = internal.decodeParameter(cursor, param, {
|
|
102
116
|
checksumAddress,
|
|
103
117
|
staticPosition: 0,
|
|
@@ -386,11 +400,18 @@ export function format<
|
|
|
386
400
|
Parameter | abitype.AbiEventParameter,
|
|
387
401
|
...(readonly (Parameter | abitype.AbiEventParameter)[]),
|
|
388
402
|
],
|
|
389
|
-
):
|
|
390
|
-
return
|
|
403
|
+
): format.ReturnType<parameters> {
|
|
404
|
+
return formatAbiParameters.formatAbiParameters(parameters)
|
|
391
405
|
}
|
|
392
406
|
|
|
393
407
|
export declare namespace format {
|
|
408
|
+
type ReturnType<
|
|
409
|
+
parameters extends readonly [
|
|
410
|
+
Parameter | abitype.AbiEventParameter,
|
|
411
|
+
...(readonly (Parameter | abitype.AbiEventParameter)[]),
|
|
412
|
+
] = readonly [Parameter, ...(readonly Parameter[])],
|
|
413
|
+
> = formatAbiParameters.FormatAbiParameters<parameters>
|
|
414
|
+
|
|
394
415
|
type ErrorType = Errors.GlobalErrorType
|
|
395
416
|
}
|
|
396
417
|
|
|
@@ -416,6 +437,22 @@ export declare namespace format {
|
|
|
416
437
|
*
|
|
417
438
|
* parameters
|
|
418
439
|
* //^?
|
|
440
|
+
* //
|
|
441
|
+
* //
|
|
442
|
+
* //
|
|
443
|
+
* //
|
|
444
|
+
* //
|
|
445
|
+
* //
|
|
446
|
+
* //
|
|
447
|
+
* //
|
|
448
|
+
* //
|
|
449
|
+
* //
|
|
450
|
+
* //
|
|
451
|
+
* //
|
|
452
|
+
* //
|
|
453
|
+
* //
|
|
454
|
+
* //
|
|
455
|
+
* //
|
|
419
456
|
* ```
|
|
420
457
|
*
|
|
421
458
|
* @example
|
|
@@ -432,6 +469,22 @@ export declare namespace format {
|
|
|
432
469
|
*
|
|
433
470
|
* parameters
|
|
434
471
|
* //^?
|
|
472
|
+
* //
|
|
473
|
+
* //
|
|
474
|
+
* //
|
|
475
|
+
* //
|
|
476
|
+
* //
|
|
477
|
+
* //
|
|
478
|
+
* //
|
|
479
|
+
* //
|
|
480
|
+
* //
|
|
481
|
+
* //
|
|
482
|
+
* //
|
|
483
|
+
* //
|
|
484
|
+
* //
|
|
485
|
+
* //
|
|
486
|
+
* //
|
|
487
|
+
* //
|
|
435
488
|
* ```
|
|
436
489
|
*
|
|
437
490
|
* @example
|
|
@@ -447,6 +500,22 @@ export declare namespace format {
|
|
|
447
500
|
*
|
|
448
501
|
* parameters
|
|
449
502
|
* //^?
|
|
503
|
+
* //
|
|
504
|
+
* //
|
|
505
|
+
* //
|
|
506
|
+
* //
|
|
507
|
+
* //
|
|
508
|
+
* //
|
|
509
|
+
* //
|
|
510
|
+
* //
|
|
511
|
+
* //
|
|
512
|
+
* //
|
|
513
|
+
* //
|
|
514
|
+
* //
|
|
515
|
+
* //
|
|
516
|
+
* //
|
|
517
|
+
* //
|
|
518
|
+
* //
|
|
450
519
|
* ```
|
|
451
520
|
*
|
|
452
521
|
*
|
|
@@ -460,9 +529,9 @@ export function from<
|
|
|
460
529
|
parameters: parameters | AbiParameters | string | readonly string[],
|
|
461
530
|
): from.ReturnType<parameters> {
|
|
462
531
|
if (Array.isArray(parameters) && typeof parameters[0] === 'string')
|
|
463
|
-
return
|
|
532
|
+
return parseAbiParameters.parseAbiParameters(parameters) as never
|
|
464
533
|
if (typeof parameters === 'string')
|
|
465
|
-
return
|
|
534
|
+
return parseAbiParameters.parseAbiParameters(parameters) as never
|
|
466
535
|
return parameters as never
|
|
467
536
|
}
|
|
468
537
|
|
|
@@ -470,9 +539,9 @@ export declare namespace from {
|
|
|
470
539
|
type ReturnType<
|
|
471
540
|
parameters extends AbiParameters | string | readonly string[],
|
|
472
541
|
> = parameters extends string
|
|
473
|
-
?
|
|
542
|
+
? parseAbiParameters.ParseAbiParameters<parameters>
|
|
474
543
|
: parameters extends readonly string[]
|
|
475
|
-
?
|
|
544
|
+
? parseAbiParameters.ParseAbiParameters<parameters>
|
|
476
545
|
: parameters
|
|
477
546
|
|
|
478
547
|
type ErrorType = Errors.GlobalErrorType
|
|
@@ -519,7 +588,7 @@ export class DataSizeTooSmallError extends Errors.BaseError {
|
|
|
519
588
|
}) {
|
|
520
589
|
super(`Data size of ${size} bytes is too small for given parameters.`, {
|
|
521
590
|
metaMessages: [
|
|
522
|
-
`Params: (${
|
|
591
|
+
`Params: (${formatAbiParameters.formatAbiParameters(parameters as readonly [Parameter])})`,
|
|
523
592
|
`Data: ${data} (${size} bytes)`,
|
|
524
593
|
],
|
|
525
594
|
})
|
package/src/core/Rlp.ts
CHANGED
|
@@ -5,6 +5,9 @@ import * as internal_bytes from './internal/bytes.js'
|
|
|
5
5
|
import * as Cursor from './internal/cursor.js'
|
|
6
6
|
import type { ExactPartial, RecursiveArray } from './internal/types.js'
|
|
7
7
|
|
|
8
|
+
/** Maximum nesting depth permitted when decoding an RLP value. */
|
|
9
|
+
const depthLimit = 1_024
|
|
10
|
+
|
|
8
11
|
/**
|
|
9
12
|
* Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.
|
|
10
13
|
*
|
|
@@ -68,6 +71,12 @@ export function to<
|
|
|
68
71
|
})
|
|
69
72
|
const result = decodeRlpCursor(cursor, to_)
|
|
70
73
|
|
|
74
|
+
// RLP payloads encode exactly one item (Yellow Paper, Appendix B).
|
|
75
|
+
if (cursor.position < cursor.bytes.length)
|
|
76
|
+
throw new TrailingBytesError({
|
|
77
|
+
count: cursor.bytes.length - cursor.position,
|
|
78
|
+
})
|
|
79
|
+
|
|
71
80
|
return result as to.ReturnType<to>
|
|
72
81
|
}
|
|
73
82
|
|
|
@@ -82,6 +91,7 @@ export declare namespace to {
|
|
|
82
91
|
| decodeRlpCursor.ErrorType
|
|
83
92
|
| Cursor.create.ErrorType
|
|
84
93
|
| Hex.InvalidLengthError
|
|
94
|
+
| TrailingBytesError
|
|
85
95
|
| Errors.GlobalErrorType
|
|
86
96
|
}
|
|
87
97
|
|
|
@@ -91,7 +101,11 @@ export declare namespace to {
|
|
|
91
101
|
export function decodeRlpCursor<to extends 'Hex' | 'Bytes' = 'Hex'>(
|
|
92
102
|
cursor: Cursor.Cursor,
|
|
93
103
|
to: to | 'Hex' | 'Bytes' | undefined = 'Hex',
|
|
104
|
+
depth = 0,
|
|
94
105
|
): decodeRlpCursor.ReturnType<to> {
|
|
106
|
+
if (depth >= depthLimit)
|
|
107
|
+
throw new DepthLimitExceededError({ limit: depthLimit })
|
|
108
|
+
|
|
95
109
|
if (cursor.bytes.length === 0)
|
|
96
110
|
return (
|
|
97
111
|
to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes
|
|
@@ -111,7 +125,12 @@ export function decodeRlpCursor<to extends 'Hex' | 'Bytes' = 'Hex'>(
|
|
|
111
125
|
|
|
112
126
|
// list
|
|
113
127
|
const length = readLength(cursor, prefix, 0xc0)
|
|
114
|
-
return readList(
|
|
128
|
+
return readList(
|
|
129
|
+
cursor,
|
|
130
|
+
length,
|
|
131
|
+
to,
|
|
132
|
+
depth + 1,
|
|
133
|
+
) as {} as decodeRlpCursor.ReturnType<to>
|
|
115
134
|
}
|
|
116
135
|
|
|
117
136
|
/** @internal */
|
|
@@ -121,6 +140,7 @@ export declare namespace decodeRlpCursor {
|
|
|
121
140
|
| Hex.fromBytes.ErrorType
|
|
122
141
|
| readLength.ErrorType
|
|
123
142
|
| readList.ErrorType
|
|
143
|
+
| DepthLimitExceededError
|
|
124
144
|
| Errors.GlobalErrorType
|
|
125
145
|
}
|
|
126
146
|
|
|
@@ -149,17 +169,27 @@ export function readList<to extends 'Hex' | 'Bytes'>(
|
|
|
149
169
|
cursor: Cursor.Cursor,
|
|
150
170
|
length: number,
|
|
151
171
|
to: to | 'Hex' | 'Bytes',
|
|
172
|
+
depth = 0,
|
|
152
173
|
) {
|
|
153
174
|
const position = cursor.position
|
|
154
175
|
const value: decodeRlpCursor.ReturnType<to>[] = []
|
|
155
176
|
while (cursor.position - position < length)
|
|
156
|
-
value.push(decodeRlpCursor(cursor, to))
|
|
177
|
+
value.push(decodeRlpCursor(cursor, to, depth))
|
|
178
|
+
// Items must consume exactly the declared list length.
|
|
179
|
+
if (cursor.position - position !== length)
|
|
180
|
+
throw new ListBoundaryExceededError({
|
|
181
|
+
consumed: cursor.position - position,
|
|
182
|
+
declared: length,
|
|
183
|
+
})
|
|
157
184
|
return value
|
|
158
185
|
}
|
|
159
186
|
|
|
160
187
|
/** @internal */
|
|
161
188
|
export declare namespace readList {
|
|
162
|
-
type ErrorType =
|
|
189
|
+
type ErrorType =
|
|
190
|
+
| DepthLimitExceededError
|
|
191
|
+
| ListBoundaryExceededError
|
|
192
|
+
| Errors.GlobalErrorType
|
|
163
193
|
}
|
|
164
194
|
|
|
165
195
|
/**
|
|
@@ -643,3 +673,36 @@ function writeBigEndian(
|
|
|
643
673
|
function invalidNibble(hex: Hex.Hex): Errors.BaseError {
|
|
644
674
|
return new Errors.BaseError(`Invalid hex string \`${hex}\`.`)
|
|
645
675
|
}
|
|
676
|
+
|
|
677
|
+
/** Thrown when an RLP value nests deeper than the decode depth limit. */
|
|
678
|
+
export class DepthLimitExceededError extends Errors.BaseError {
|
|
679
|
+
override readonly name = 'Rlp.DepthLimitExceededError'
|
|
680
|
+
|
|
681
|
+
constructor({ limit }: { limit: number }) {
|
|
682
|
+
super(`RLP depth limit of \`${limit}\` exceeded.`)
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/** Thrown when RLP list items overrun the list's declared length. */
|
|
687
|
+
export class ListBoundaryExceededError extends Errors.BaseError {
|
|
688
|
+
override readonly name = 'Rlp.ListBoundaryExceededError'
|
|
689
|
+
|
|
690
|
+
constructor({ consumed, declared }: { consumed: number; declared: number }) {
|
|
691
|
+
super(
|
|
692
|
+
`RLP list items consumed \`${consumed}\` bytes but the list declared a length of \`${declared}\`.`,
|
|
693
|
+
)
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/** Thrown when an RLP payload contains bytes after the decoded item. */
|
|
698
|
+
export class TrailingBytesError extends Errors.BaseError {
|
|
699
|
+
override readonly name = 'Rlp.TrailingBytesError'
|
|
700
|
+
|
|
701
|
+
constructor({ count }: { count: number }) {
|
|
702
|
+
super(
|
|
703
|
+
`RLP payload encodes a single item, but \`${count}\` trailing ${
|
|
704
|
+
count === 1 ? 'byte remains' : 'bytes remain'
|
|
705
|
+
}.`,
|
|
706
|
+
)
|
|
707
|
+
}
|
|
708
|
+
}
|
package/src/core/RpcSchema.ts
CHANGED
|
@@ -289,7 +289,7 @@ export type FromViem<schema extends readonly ViemSchemaItem[]> = {
|
|
|
289
289
|
* Each method's name comes from its key. Both `params` and `ReturnType` are
|
|
290
290
|
* derived from the Zod schema's input (wire) type, since raw JSON-RPC clients
|
|
291
291
|
* send and receive wire values. Decode wire results to their native
|
|
292
|
-
* representation explicitly via
|
|
292
|
+
* representation explicitly via `zod.RpcSchema.decodeReturns`.
|
|
293
293
|
*
|
|
294
294
|
* @example
|
|
295
295
|
* ```ts twoslash
|
|
@@ -331,7 +331,7 @@ export type Schema = Generic | FromZod.Namespace
|
|
|
331
331
|
|
|
332
332
|
/**
|
|
333
333
|
* Resolves a {@link ox#RpcSchema.Schema} input to an Ox {@link ox#RpcSchema.Generic}.
|
|
334
|
-
* A Zod namespace is converted via {@link ox#RpcSchema.FromZod}; a `Generic` is
|
|
334
|
+
* A Zod namespace is converted via {@link ox#RpcSchema.(FromZod:type)}; a `Generic` is
|
|
335
335
|
* passed through; otherwise falls back to {@link ox#RpcSchema.Default}.
|
|
336
336
|
*/
|
|
337
337
|
export type ToGeneric<schema extends Schema | undefined> =
|
|
@@ -117,6 +117,10 @@ describe('from', () => {
|
|
|
117
117
|
test('exports', () => {
|
|
118
118
|
expect(Object.keys(Abi)).toMatchInlineSnapshot(`
|
|
119
119
|
[
|
|
120
|
+
"InvalidSignatureError",
|
|
121
|
+
"InvalidStructSignatureError",
|
|
122
|
+
"UnknownSignatureError",
|
|
123
|
+
"CircularReferenceError",
|
|
120
124
|
"format",
|
|
121
125
|
"from",
|
|
122
126
|
]
|
|
@@ -2107,6 +2107,9 @@ describe('getSignatureHash', () => {
|
|
|
2107
2107
|
test('exports', () => {
|
|
2108
2108
|
expect(Object.keys(AbiItem)).toMatchInlineSnapshot(`
|
|
2109
2109
|
[
|
|
2110
|
+
"InvalidAbiItemError",
|
|
2111
|
+
"UnknownSolidityTypeError",
|
|
2112
|
+
"UnknownTypeError",
|
|
2110
2113
|
"format",
|
|
2111
2114
|
"from",
|
|
2112
2115
|
"fromAbi",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AbiParameter } from 'ox'
|
|
2
|
+
import { describe, expectTypeOf, test } from 'vp/test'
|
|
3
|
+
|
|
4
|
+
describe('AbiParameter.format', () => {
|
|
5
|
+
test('infers parameter', () => {
|
|
6
|
+
const formatted = AbiParameter.format(value)
|
|
7
|
+
expectTypeOf(formatted).toEqualTypeOf<'address spender'>()
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('not narrowable', () => {
|
|
11
|
+
const formatted = AbiParameter.format({} as AbiParameter.AbiParameter)
|
|
12
|
+
expectTypeOf(formatted).toEqualTypeOf<string>()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const value = {
|
|
16
|
+
name: 'spender',
|
|
17
|
+
type: 'address',
|
|
18
|
+
} as const
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
describe('AbiParameter.from', () => {
|
|
22
|
+
test('infers parameter', () => {
|
|
23
|
+
const parameter = AbiParameter.from(value)
|
|
24
|
+
expectTypeOf(parameter).toEqualTypeOf(value)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test('from signature', () => {
|
|
28
|
+
const parameter = AbiParameter.from('address spender')
|
|
29
|
+
expectTypeOf(parameter).toEqualTypeOf(value)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('not narrowable', () => {
|
|
33
|
+
const parameter = AbiParameter.from({} as AbiParameter.AbiParameter)
|
|
34
|
+
expectTypeOf(parameter).toEqualTypeOf<AbiParameter.AbiParameter>()
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
const value = {
|
|
38
|
+
name: 'spender',
|
|
39
|
+
type: 'address',
|
|
40
|
+
} as const
|
|
41
|
+
})
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { AbiParameter } from 'ox'
|
|
2
|
+
import { describe, expect, test } from 'vp/test'
|
|
3
|
+
|
|
4
|
+
describe('from', () => {
|
|
5
|
+
test('json parameter', () => {
|
|
6
|
+
expect(AbiParameter.from({ name: 'spender', type: 'address' }))
|
|
7
|
+
.toMatchInlineSnapshot(`
|
|
8
|
+
{
|
|
9
|
+
"name": "spender",
|
|
10
|
+
"type": "address",
|
|
11
|
+
}
|
|
12
|
+
`)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test('human-readable parameter', () => {
|
|
16
|
+
expect(AbiParameter.from('address spender')).toMatchInlineSnapshot(`
|
|
17
|
+
{
|
|
18
|
+
"name": "spender",
|
|
19
|
+
"type": "address",
|
|
20
|
+
}
|
|
21
|
+
`)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('human-readable parameter with structs', () => {
|
|
25
|
+
expect(
|
|
26
|
+
AbiParameter.from([
|
|
27
|
+
'struct Foo { address spender; uint256 amount; }',
|
|
28
|
+
'Foo foo',
|
|
29
|
+
]),
|
|
30
|
+
).toMatchInlineSnapshot(`
|
|
31
|
+
{
|
|
32
|
+
"components": [
|
|
33
|
+
{
|
|
34
|
+
"name": "spender",
|
|
35
|
+
"type": "address",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "amount",
|
|
39
|
+
"type": "uint256",
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
"name": "foo",
|
|
43
|
+
"type": "tuple",
|
|
44
|
+
}
|
|
45
|
+
`)
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe('format', () => {
|
|
50
|
+
test('parameter', () => {
|
|
51
|
+
expect(
|
|
52
|
+
AbiParameter.format({ name: 'spender', type: 'address' }),
|
|
53
|
+
).toMatchInlineSnapshot(`"address spender"`)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test('tuple parameter', () => {
|
|
57
|
+
expect(
|
|
58
|
+
AbiParameter.format({
|
|
59
|
+
components: [
|
|
60
|
+
{ name: 'spender', type: 'address' },
|
|
61
|
+
{ name: 'amount', type: 'uint256' },
|
|
62
|
+
],
|
|
63
|
+
name: 'foo',
|
|
64
|
+
type: 'tuple',
|
|
65
|
+
}),
|
|
66
|
+
).toMatchInlineSnapshot(`"(address spender, uint256 amount) foo"`)
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
test('exports', () => {
|
|
71
|
+
expect(Object.keys(AbiParameter)).toMatchInlineSnapshot(`
|
|
72
|
+
[
|
|
73
|
+
"InvalidAbiParameterError",
|
|
74
|
+
"InvalidAbiTypeParameterError",
|
|
75
|
+
"InvalidFunctionModifierError",
|
|
76
|
+
"InvalidModifierError",
|
|
77
|
+
"InvalidParameterError",
|
|
78
|
+
"SolidityProtectedKeywordError",
|
|
79
|
+
"InvalidParenthesisError",
|
|
80
|
+
"format",
|
|
81
|
+
"from",
|
|
82
|
+
]
|
|
83
|
+
`)
|
|
84
|
+
})
|
|
@@ -1601,22 +1601,12 @@ test('zst', () => {
|
|
|
1601
1601
|
expect(() =>
|
|
1602
1602
|
AbiParameters.decode([{ type: 'uint256[0][4294967295]' }], payload),
|
|
1603
1603
|
).toThrowErrorMatchingInlineSnapshot(
|
|
1604
|
-
`
|
|
1605
|
-
[AbiParameters.DataSizeTooSmallError: Data size of 64 bytes is too small for given parameters.
|
|
1606
|
-
|
|
1607
|
-
Params: (uint256[0][4294967295])
|
|
1608
|
-
Data: 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000FFFFFFFF (64 bytes)]
|
|
1609
|
-
`,
|
|
1604
|
+
'[Cursor.RecursiveReadLimitExceededError: Recursive read limit of `8192` exceeded (recursive read count: `8193`).]',
|
|
1610
1605
|
)
|
|
1611
1606
|
expect(() =>
|
|
1612
1607
|
AbiParameters.decode([{ type: 'uint32[0][4294967295]' }], payload),
|
|
1613
1608
|
).toThrowErrorMatchingInlineSnapshot(
|
|
1614
|
-
`
|
|
1615
|
-
[AbiParameters.DataSizeTooSmallError: Data size of 64 bytes is too small for given parameters.
|
|
1616
|
-
|
|
1617
|
-
Params: (uint32[0][4294967295])
|
|
1618
|
-
Data: 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000FFFFFFFF (64 bytes)]
|
|
1619
|
-
`,
|
|
1609
|
+
'[Cursor.RecursiveReadLimitExceededError: Recursive read limit of `8192` exceeded (recursive read count: `8193`).]',
|
|
1620
1610
|
)
|
|
1621
1611
|
expect(() =>
|
|
1622
1612
|
AbiParameters.decode(
|
|
@@ -1798,3 +1788,89 @@ test('recursive 2', () => {
|
|
|
1798
1788
|
'[Cursor.RecursiveReadLimitExceededError: Recursive read limit of `8192` exceeded (recursive read count: `8193`).]',
|
|
1799
1789
|
)
|
|
1800
1790
|
})
|
|
1791
|
+
|
|
1792
|
+
describe('zero-width types', () => {
|
|
1793
|
+
test('zero-length fixed array', () => {
|
|
1794
|
+
expect(
|
|
1795
|
+
AbiParameters.decode(
|
|
1796
|
+
[{ type: 'uint256[0]' }, { type: 'uint256' }],
|
|
1797
|
+
'0x0000000000000000000000000000000000000000000000000000000000000003',
|
|
1798
|
+
),
|
|
1799
|
+
).toEqual([[], 3n])
|
|
1800
|
+
})
|
|
1801
|
+
|
|
1802
|
+
test('trailing empty tuple', () => {
|
|
1803
|
+
expect(
|
|
1804
|
+
AbiParameters.decode(
|
|
1805
|
+
[{ type: 'uint256' }, { type: 'tuple', components: [] }],
|
|
1806
|
+
'0x0000000000000000000000000000000000000000000000000000000000000005',
|
|
1807
|
+
),
|
|
1808
|
+
).toEqual([5n, []])
|
|
1809
|
+
})
|
|
1810
|
+
|
|
1811
|
+
test('zero-length fixed array of dynamic type', () => {
|
|
1812
|
+
expect(
|
|
1813
|
+
AbiParameters.decode(
|
|
1814
|
+
[{ type: 'string[0]' }, { type: 'uint256' }],
|
|
1815
|
+
'0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003',
|
|
1816
|
+
),
|
|
1817
|
+
).toEqual([[], 3n])
|
|
1818
|
+
})
|
|
1819
|
+
|
|
1820
|
+
test('standalone zero-length fixed array of dynamic type', () => {
|
|
1821
|
+
// The head is a single offset word pointing at an empty tail.
|
|
1822
|
+
expect(
|
|
1823
|
+
AbiParameters.decode(
|
|
1824
|
+
[{ type: 'string[0]' }],
|
|
1825
|
+
'0x0000000000000000000000000000000000000000000000000000000000000020',
|
|
1826
|
+
),
|
|
1827
|
+
).toEqual([[]])
|
|
1828
|
+
expect(
|
|
1829
|
+
AbiParameters.decode(
|
|
1830
|
+
[{ type: 'bytes[0]' }],
|
|
1831
|
+
'0x0000000000000000000000000000000000000000000000000000000000000020',
|
|
1832
|
+
),
|
|
1833
|
+
).toEqual([[]])
|
|
1834
|
+
})
|
|
1835
|
+
|
|
1836
|
+
test('round-trip', () => {
|
|
1837
|
+
const cases = [
|
|
1838
|
+
{
|
|
1839
|
+
parameters: [{ type: 'uint256[0]' }, { type: 'uint256' }],
|
|
1840
|
+
values: [[], 3n],
|
|
1841
|
+
},
|
|
1842
|
+
{
|
|
1843
|
+
parameters: [{ type: 'uint256' }, { type: 'tuple', components: [] }],
|
|
1844
|
+
values: [5n, []],
|
|
1845
|
+
},
|
|
1846
|
+
{
|
|
1847
|
+
parameters: [{ type: 'string[0]' }, { type: 'uint256' }],
|
|
1848
|
+
values: [[], 3n],
|
|
1849
|
+
},
|
|
1850
|
+
{
|
|
1851
|
+
parameters: [{ type: 'uint256[0]' }, { type: 'string' }],
|
|
1852
|
+
values: [[], 'hello'],
|
|
1853
|
+
},
|
|
1854
|
+
{
|
|
1855
|
+
parameters: [{ type: 'uint256[0][2]' }, { type: 'uint256' }],
|
|
1856
|
+
values: [[[], []], 9n],
|
|
1857
|
+
},
|
|
1858
|
+
{
|
|
1859
|
+
parameters: [{ type: 'string[0]' }],
|
|
1860
|
+
values: [[]],
|
|
1861
|
+
},
|
|
1862
|
+
{
|
|
1863
|
+
parameters: [{ type: 'tuple', components: [{ type: 'string[0]' }] }],
|
|
1864
|
+
values: [[[]]],
|
|
1865
|
+
},
|
|
1866
|
+
] as const
|
|
1867
|
+
for (const { parameters, values } of cases) {
|
|
1868
|
+
expect(
|
|
1869
|
+
AbiParameters.decode(
|
|
1870
|
+
parameters,
|
|
1871
|
+
AbiParameters.encode(parameters, values as never),
|
|
1872
|
+
),
|
|
1873
|
+
).toEqual(values)
|
|
1874
|
+
}
|
|
1875
|
+
})
|
|
1876
|
+
})
|
|
@@ -1963,3 +1963,71 @@ test('https://github.com/wevm/viem/issues/1960', () => {
|
|
|
1963
1963
|
`[BaseError: Invalid boolean value: "true" (type: string). Expected: \`true\` or \`false\`.]`,
|
|
1964
1964
|
)
|
|
1965
1965
|
})
|
|
1966
|
+
|
|
1967
|
+
describe('zero-width types', () => {
|
|
1968
|
+
// Per the ABI spec, `enc(T[0])` and `enc(())` are zero-length: a zero-length
|
|
1969
|
+
// fixed array or empty tuple contributes no bytes. Expected values verified
|
|
1970
|
+
// against ethers `AbiCoder.defaultAbiCoder()`.
|
|
1971
|
+
test('zero-length fixed array', () => {
|
|
1972
|
+
expect(
|
|
1973
|
+
AbiParameters.encode(
|
|
1974
|
+
[{ type: 'uint256[0]' }, { type: 'uint256' }],
|
|
1975
|
+
[[], 3n],
|
|
1976
|
+
),
|
|
1977
|
+
).toBe('0x0000000000000000000000000000000000000000000000000000000000000003')
|
|
1978
|
+
})
|
|
1979
|
+
|
|
1980
|
+
test('empty tuple', () => {
|
|
1981
|
+
expect(
|
|
1982
|
+
AbiParameters.encode(
|
|
1983
|
+
[{ type: 'uint256' }, { type: 'tuple', components: [] }],
|
|
1984
|
+
[5n, []],
|
|
1985
|
+
),
|
|
1986
|
+
).toBe('0x0000000000000000000000000000000000000000000000000000000000000005')
|
|
1987
|
+
})
|
|
1988
|
+
|
|
1989
|
+
test('empty tuple only', () => {
|
|
1990
|
+
expect(
|
|
1991
|
+
AbiParameters.encode([{ type: 'tuple', components: [] }], [[]]),
|
|
1992
|
+
).toBe('0x')
|
|
1993
|
+
})
|
|
1994
|
+
|
|
1995
|
+
test('nested zero-length fixed arrays', () => {
|
|
1996
|
+
expect(
|
|
1997
|
+
AbiParameters.encode(
|
|
1998
|
+
[{ type: 'uint256[0][2]' }, { type: 'uint256' }],
|
|
1999
|
+
[[[], []], 9n],
|
|
2000
|
+
),
|
|
2001
|
+
).toBe('0x0000000000000000000000000000000000000000000000000000000000000009')
|
|
2002
|
+
expect(
|
|
2003
|
+
AbiParameters.encode(
|
|
2004
|
+
[{ type: 'uint256[2][0]' }, { type: 'uint256' }],
|
|
2005
|
+
[[], 9n],
|
|
2006
|
+
),
|
|
2007
|
+
).toBe('0x0000000000000000000000000000000000000000000000000000000000000009')
|
|
2008
|
+
})
|
|
2009
|
+
|
|
2010
|
+
test('offsets skip zero-width parameters', () => {
|
|
2011
|
+
expect(
|
|
2012
|
+
AbiParameters.encode(
|
|
2013
|
+
[{ type: 'uint256[0]' }, { type: 'string' }],
|
|
2014
|
+
[[], 'hello'],
|
|
2015
|
+
),
|
|
2016
|
+
).toBe(
|
|
2017
|
+
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000568656c6c6f000000000000000000000000000000000000000000000000000000',
|
|
2018
|
+
)
|
|
2019
|
+
})
|
|
2020
|
+
|
|
2021
|
+
// `T[0]` of a dynamic `T` is dynamic per the ABI spec: 32-byte offset
|
|
2022
|
+
// pointing at a zero-length tail.
|
|
2023
|
+
test('zero-length fixed array of dynamic type', () => {
|
|
2024
|
+
expect(
|
|
2025
|
+
AbiParameters.encode(
|
|
2026
|
+
[{ type: 'string[0]' }, { type: 'uint256' }],
|
|
2027
|
+
[[], 3n],
|
|
2028
|
+
),
|
|
2029
|
+
).toBe(
|
|
2030
|
+
'0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003',
|
|
2031
|
+
)
|
|
2032
|
+
})
|
|
2033
|
+
})
|
|
@@ -360,6 +360,13 @@ describe('format', () => {
|
|
|
360
360
|
test('exports', () => {
|
|
361
361
|
expect(Object.keys(AbiParameters)).toMatchInlineSnapshot(`
|
|
362
362
|
[
|
|
363
|
+
"InvalidAbiParametersError",
|
|
364
|
+
"InvalidAbiTypeParameterError",
|
|
365
|
+
"InvalidFunctionModifierError",
|
|
366
|
+
"InvalidModifierError",
|
|
367
|
+
"InvalidParameterError",
|
|
368
|
+
"SolidityProtectedKeywordError",
|
|
369
|
+
"InvalidParenthesisError",
|
|
363
370
|
"decode",
|
|
364
371
|
"encode",
|
|
365
372
|
"encodePacked",
|