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,92 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type { AbiParameter } from 'abitype'
|
|
4
|
+
|
|
5
|
+
import type { FormatAbiParameters } from './formatAbiParameters.js'
|
|
6
|
+
import { formatAbiParameters } from './formatAbiParameters.js'
|
|
7
|
+
|
|
8
|
+
test('FormatAbiParameters', () => {
|
|
9
|
+
// @ts-expect-error must have at least one parameter
|
|
10
|
+
expectTypeOf<FormatAbiParameters<[]>>().toEqualTypeOf<never>()
|
|
11
|
+
|
|
12
|
+
// string
|
|
13
|
+
expectTypeOf<
|
|
14
|
+
FormatAbiParameters<
|
|
15
|
+
[
|
|
16
|
+
{
|
|
17
|
+
readonly type: 'address'
|
|
18
|
+
readonly name: 'from'
|
|
19
|
+
},
|
|
20
|
+
]
|
|
21
|
+
>
|
|
22
|
+
>().toEqualTypeOf<'address from'>()
|
|
23
|
+
expectTypeOf<
|
|
24
|
+
FormatAbiParameters<
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
readonly type: 'address'
|
|
28
|
+
readonly name: 'from'
|
|
29
|
+
readonly indexed: true
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
>
|
|
33
|
+
>().toEqualTypeOf<'address indexed from'>()
|
|
34
|
+
|
|
35
|
+
// Array
|
|
36
|
+
expectTypeOf<
|
|
37
|
+
FormatAbiParameters<
|
|
38
|
+
[
|
|
39
|
+
{
|
|
40
|
+
readonly type: 'tuple'
|
|
41
|
+
readonly components: readonly [
|
|
42
|
+
{
|
|
43
|
+
readonly name: 'name'
|
|
44
|
+
readonly type: 'string'
|
|
45
|
+
},
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
]
|
|
49
|
+
>
|
|
50
|
+
>().toEqualTypeOf<'(string name)'>()
|
|
51
|
+
|
|
52
|
+
expectTypeOf<
|
|
53
|
+
FormatAbiParameters<
|
|
54
|
+
[
|
|
55
|
+
{
|
|
56
|
+
readonly type: 'tuple'
|
|
57
|
+
readonly components: readonly [
|
|
58
|
+
{
|
|
59
|
+
readonly type: 'string'
|
|
60
|
+
readonly name: 'bar'
|
|
61
|
+
},
|
|
62
|
+
]
|
|
63
|
+
readonly name: 'foo'
|
|
64
|
+
},
|
|
65
|
+
]
|
|
66
|
+
>
|
|
67
|
+
>().toEqualTypeOf<'(string bar) foo'>()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
test('formatAbiParameter', () => {
|
|
71
|
+
expectTypeOf(
|
|
72
|
+
formatAbiParameters([
|
|
73
|
+
{
|
|
74
|
+
type: 'tuple',
|
|
75
|
+
components: [{ type: 'string' }],
|
|
76
|
+
},
|
|
77
|
+
]),
|
|
78
|
+
).toEqualTypeOf<'(string)'>()
|
|
79
|
+
|
|
80
|
+
const param = { type: 'address' }
|
|
81
|
+
const param2: AbiParameter = param
|
|
82
|
+
|
|
83
|
+
expectTypeOf(formatAbiParameters([param])).toEqualTypeOf<string>()
|
|
84
|
+
|
|
85
|
+
expectTypeOf(
|
|
86
|
+
formatAbiParameters([param, param]),
|
|
87
|
+
).toEqualTypeOf<`${string}, ${string}`>()
|
|
88
|
+
|
|
89
|
+
expectTypeOf(
|
|
90
|
+
formatAbiParameters([param2, param2]),
|
|
91
|
+
).toEqualTypeOf<`${string}, ${string}`>()
|
|
92
|
+
})
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { expect, expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import { formatAbiParameters } from './formatAbiParameters.js'
|
|
4
|
+
|
|
5
|
+
test('default', () => {
|
|
6
|
+
const result = formatAbiParameters([
|
|
7
|
+
{ type: 'address', name: 'foo' },
|
|
8
|
+
{ type: 'uint256', name: 'bar' },
|
|
9
|
+
])
|
|
10
|
+
expect(result).toEqual('address foo, uint256 bar')
|
|
11
|
+
expectTypeOf(result).toEqualTypeOf<'address foo, uint256 bar'>()
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test('tuple', () => {
|
|
15
|
+
const result = formatAbiParameters([
|
|
16
|
+
{
|
|
17
|
+
type: 'tuple',
|
|
18
|
+
components: [
|
|
19
|
+
{ type: 'string', name: 'bar' },
|
|
20
|
+
{ type: 'string', name: 'baz' },
|
|
21
|
+
],
|
|
22
|
+
name: 'foo',
|
|
23
|
+
},
|
|
24
|
+
{ type: 'uint256', name: 'bar' },
|
|
25
|
+
])
|
|
26
|
+
expect(result).toMatchInlineSnapshot(
|
|
27
|
+
'"(string bar, string baz) foo, uint256 bar"',
|
|
28
|
+
)
|
|
29
|
+
expectTypeOf(
|
|
30
|
+
result,
|
|
31
|
+
).toEqualTypeOf<'(string bar, string baz) foo, uint256 bar'>()
|
|
32
|
+
})
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AbiEventParameter, AbiParameter } from 'abitype'
|
|
2
|
+
import type { Join } from './types.js'
|
|
3
|
+
import {
|
|
4
|
+
type FormatAbiParameter,
|
|
5
|
+
formatAbiParameter,
|
|
6
|
+
} from './formatAbiParameter.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Formats `AbiParameter`s to human-readable ABI parameter.
|
|
10
|
+
*
|
|
11
|
+
* @param abiParameters - ABI parameters
|
|
12
|
+
* @returns Human-readable ABI parameters
|
|
13
|
+
*/
|
|
14
|
+
export type FormatAbiParameters<
|
|
15
|
+
abiParameters extends readonly [
|
|
16
|
+
AbiParameter | AbiEventParameter,
|
|
17
|
+
...(readonly (AbiParameter | AbiEventParameter)[]),
|
|
18
|
+
],
|
|
19
|
+
> = Join<
|
|
20
|
+
{
|
|
21
|
+
[key in keyof abiParameters]: FormatAbiParameter<abiParameters[key]>
|
|
22
|
+
},
|
|
23
|
+
', '
|
|
24
|
+
>
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Formats `AbiParameter`s to human-readable ABI parameters.
|
|
28
|
+
*
|
|
29
|
+
* @param abiParameters - ABI parameters
|
|
30
|
+
* @returns Human-readable ABI parameters
|
|
31
|
+
*/
|
|
32
|
+
export function formatAbiParameters<
|
|
33
|
+
const abiParameters extends readonly [
|
|
34
|
+
AbiParameter | AbiEventParameter,
|
|
35
|
+
...(readonly (AbiParameter | AbiEventParameter)[]),
|
|
36
|
+
],
|
|
37
|
+
>(abiParameters: abiParameters): FormatAbiParameters<abiParameters> {
|
|
38
|
+
let params = ''
|
|
39
|
+
const length = abiParameters.length
|
|
40
|
+
for (let i = 0; i < length; i++) {
|
|
41
|
+
const abiParameter = abiParameters[i]!
|
|
42
|
+
params += formatAbiParameter(abiParameter)
|
|
43
|
+
if (i !== length - 1) params += ', '
|
|
44
|
+
}
|
|
45
|
+
return params as FormatAbiParameters<abiParameters>
|
|
46
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { attest } from '@ark/attest'
|
|
2
|
+
import { Abi, AbiItem, AbiParameter, AbiParameters } from 'ox'
|
|
3
|
+
import { describe, test } from 'vp/test'
|
|
4
|
+
import type { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
|
|
5
|
+
|
|
6
|
+
describe('human-readable ABI type instantiations', () => {
|
|
7
|
+
test('Abi.from.ReturnType: erc20-sized ABI', () => {
|
|
8
|
+
type Result = Abi.from.ReturnType<
|
|
9
|
+
[
|
|
10
|
+
'function name() view returns (string)',
|
|
11
|
+
'function symbol() view returns (string)',
|
|
12
|
+
'function decimals() view returns (uint8)',
|
|
13
|
+
'function totalSupply() view returns (uint256)',
|
|
14
|
+
'function balanceOf(address owner) view returns (uint256)',
|
|
15
|
+
'function transfer(address to, uint256 amount) returns (bool)',
|
|
16
|
+
'function transferFrom(address from, address to, uint256 amount) returns (bool)',
|
|
17
|
+
'function approve(address spender, uint256 amount) returns (bool)',
|
|
18
|
+
'function allowance(address owner, address spender) view returns (uint256)',
|
|
19
|
+
'event Transfer(address indexed from, address indexed to, uint256 amount)',
|
|
20
|
+
'event Approval(address indexed owner, address indexed spender, uint256 amount)',
|
|
21
|
+
]
|
|
22
|
+
>
|
|
23
|
+
attest.instantiations([45_000, 'instantiations'])
|
|
24
|
+
attest<Result>({} as Result)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test('Abi.from.ReturnType: seaport human-readable ABI', () => {
|
|
28
|
+
type Result = Abi.from.ReturnType<typeof seaportHumanReadableAbi>
|
|
29
|
+
attest.instantiations([5_000_000, 'instantiations'])
|
|
30
|
+
attest<Result>({} as Result)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test('AbiItem.from.ReturnType: struct item', () => {
|
|
34
|
+
type Result = AbiItem.from.ReturnType<
|
|
35
|
+
[
|
|
36
|
+
'struct Foo { address spender; uint256 amount; }',
|
|
37
|
+
'function approve(Foo foo) returns (bool)',
|
|
38
|
+
]
|
|
39
|
+
>
|
|
40
|
+
attest.instantiations([15_000, 'instantiations'])
|
|
41
|
+
attest<Result>({} as Result)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('AbiParameters.from.ReturnType: nested tuple parameters', () => {
|
|
45
|
+
type Result =
|
|
46
|
+
AbiParameters.from.ReturnType<'(uint8 a, uint8[] b, (uint8 x, uint8 y)[] c) s, (uint x, uint y) t, uint256 a'>
|
|
47
|
+
attest.instantiations([20_000, 'instantiations'])
|
|
48
|
+
attest<Result>({} as Result)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('AbiParameter.from.ReturnType: struct parameter', () => {
|
|
52
|
+
type Result = AbiParameter.from.ReturnType<
|
|
53
|
+
['struct Foo { address spender; uint256 amount; }', 'Foo foo']
|
|
54
|
+
>
|
|
55
|
+
attest.instantiations([10_000, 'instantiations'])
|
|
56
|
+
attest<Result>({} as Result)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { expect, test } from 'vp/test'
|
|
2
|
+
import { formatAbiItem } from './formatAbiItem.js'
|
|
3
|
+
import { parseAbiItem } from './parseAbiItem.js'
|
|
4
|
+
|
|
5
|
+
test.each([
|
|
6
|
+
{
|
|
7
|
+
type: 'fallback',
|
|
8
|
+
stateMutability: 'payable',
|
|
9
|
+
} as const,
|
|
10
|
+
{
|
|
11
|
+
type: 'fallback',
|
|
12
|
+
stateMutability: 'nonpayable',
|
|
13
|
+
} as const,
|
|
14
|
+
{
|
|
15
|
+
type: 'receive',
|
|
16
|
+
stateMutability: 'payable',
|
|
17
|
+
} as const,
|
|
18
|
+
{
|
|
19
|
+
type: 'function',
|
|
20
|
+
name: 'foo',
|
|
21
|
+
inputs: [{ type: 'string' }],
|
|
22
|
+
outputs: [],
|
|
23
|
+
stateMutability: 'nonpayable',
|
|
24
|
+
} as const,
|
|
25
|
+
{
|
|
26
|
+
type: 'event',
|
|
27
|
+
name: 'Foo',
|
|
28
|
+
inputs: [
|
|
29
|
+
{ type: 'address', name: 'from', indexed: true },
|
|
30
|
+
{ type: 'address', name: 'to', indexed: true },
|
|
31
|
+
{ type: 'uint256', name: 'amount' },
|
|
32
|
+
],
|
|
33
|
+
} as const,
|
|
34
|
+
{
|
|
35
|
+
type: 'constructor',
|
|
36
|
+
stateMutability: 'nonpayable',
|
|
37
|
+
inputs: [{ type: 'string' }],
|
|
38
|
+
} as const,
|
|
39
|
+
{
|
|
40
|
+
type: 'constructor',
|
|
41
|
+
stateMutability: 'payable',
|
|
42
|
+
inputs: [{ type: 'string' }],
|
|
43
|
+
} as const,
|
|
44
|
+
{
|
|
45
|
+
type: 'function',
|
|
46
|
+
name: 'initWormhole',
|
|
47
|
+
inputs: [
|
|
48
|
+
{
|
|
49
|
+
type: 'tuple[]',
|
|
50
|
+
name: 'configs',
|
|
51
|
+
components: [
|
|
52
|
+
{
|
|
53
|
+
type: 'uint256',
|
|
54
|
+
name: 'chainId',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'uint16',
|
|
58
|
+
name: 'wormholeChainId',
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
outputs: [],
|
|
64
|
+
stateMutability: 'nonpayable',
|
|
65
|
+
} as const,
|
|
66
|
+
])('use of parseAbiItem - formatAbiItem should be reversible', (abiItem) => {
|
|
67
|
+
expect(parseAbiItem(formatAbiItem(abiItem))).toEqual(abiItem)
|
|
68
|
+
})
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type { Abi } from 'abitype'
|
|
4
|
+
|
|
5
|
+
import { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
|
|
6
|
+
import type { IsAbi } from 'abitype'
|
|
7
|
+
import type { ParseAbi } from './parseAbi.js'
|
|
8
|
+
import { parseAbi } from './parseAbi.js'
|
|
9
|
+
|
|
10
|
+
test('ParseAbi', () => {
|
|
11
|
+
type SeaportAbi = ParseAbi<typeof seaportHumanReadableAbi>
|
|
12
|
+
expectTypeOf<IsAbi<SeaportAbi>>().toEqualTypeOf<true>()
|
|
13
|
+
|
|
14
|
+
expectTypeOf<ParseAbi<[]>>().toEqualTypeOf<never>()
|
|
15
|
+
expectTypeOf<
|
|
16
|
+
ParseAbi<['struct Foo { string name; }']>
|
|
17
|
+
>().toEqualTypeOf<never>()
|
|
18
|
+
|
|
19
|
+
expectTypeOf<
|
|
20
|
+
ParseAbi<
|
|
21
|
+
[
|
|
22
|
+
'function foo()',
|
|
23
|
+
'function bar(Foo, bytes32)',
|
|
24
|
+
'struct Foo { string name; }',
|
|
25
|
+
]
|
|
26
|
+
>
|
|
27
|
+
>().toEqualTypeOf<
|
|
28
|
+
readonly [
|
|
29
|
+
{
|
|
30
|
+
readonly name: 'foo'
|
|
31
|
+
readonly type: 'function'
|
|
32
|
+
readonly stateMutability: 'nonpayable'
|
|
33
|
+
readonly inputs: readonly []
|
|
34
|
+
readonly outputs: readonly []
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
readonly name: 'bar'
|
|
38
|
+
readonly type: 'function'
|
|
39
|
+
readonly stateMutability: 'nonpayable'
|
|
40
|
+
readonly inputs: readonly [
|
|
41
|
+
{
|
|
42
|
+
readonly type: 'tuple'
|
|
43
|
+
readonly components: readonly [
|
|
44
|
+
{
|
|
45
|
+
readonly name: 'name'
|
|
46
|
+
readonly type: 'string'
|
|
47
|
+
},
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
readonly type: 'bytes32'
|
|
52
|
+
},
|
|
53
|
+
]
|
|
54
|
+
readonly outputs: readonly []
|
|
55
|
+
},
|
|
56
|
+
]
|
|
57
|
+
>()
|
|
58
|
+
|
|
59
|
+
expectTypeOf<
|
|
60
|
+
ParseAbi<
|
|
61
|
+
[
|
|
62
|
+
'function balanceOf(address owner) view returns (uint256)',
|
|
63
|
+
'event Transfer(address indexed from, address indexed to, uint256 amount)',
|
|
64
|
+
]
|
|
65
|
+
>
|
|
66
|
+
>().toEqualTypeOf<
|
|
67
|
+
readonly [
|
|
68
|
+
{
|
|
69
|
+
readonly name: 'balanceOf'
|
|
70
|
+
readonly type: 'function'
|
|
71
|
+
readonly stateMutability: 'view'
|
|
72
|
+
readonly inputs: readonly [
|
|
73
|
+
{
|
|
74
|
+
readonly name: 'owner'
|
|
75
|
+
readonly type: 'address'
|
|
76
|
+
},
|
|
77
|
+
]
|
|
78
|
+
readonly outputs: readonly [
|
|
79
|
+
{
|
|
80
|
+
readonly type: 'uint256'
|
|
81
|
+
},
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
readonly name: 'Transfer'
|
|
86
|
+
readonly type: 'event'
|
|
87
|
+
readonly inputs: readonly [
|
|
88
|
+
{
|
|
89
|
+
readonly name: 'from'
|
|
90
|
+
readonly type: 'address'
|
|
91
|
+
readonly indexed: true
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
readonly name: 'to'
|
|
95
|
+
readonly type: 'address'
|
|
96
|
+
readonly indexed: true
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
readonly name: 'amount'
|
|
100
|
+
readonly type: 'uint256'
|
|
101
|
+
},
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
]
|
|
105
|
+
>()
|
|
106
|
+
|
|
107
|
+
expectTypeOf<ParseAbi<['function foo ()']>>().toEqualTypeOf<never>()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
test('parseAbi', () => {
|
|
111
|
+
// @ts-expect-error empty array not allowed
|
|
112
|
+
expectTypeOf(parseAbi([])).toEqualTypeOf<never>()
|
|
113
|
+
expectTypeOf(parseAbi(['struct Foo { string name; }'])).toEqualTypeOf<never>()
|
|
114
|
+
|
|
115
|
+
// Array
|
|
116
|
+
const res2 = parseAbi([
|
|
117
|
+
'function bar(Foo, bytes32)',
|
|
118
|
+
'struct Foo { string name; }',
|
|
119
|
+
])
|
|
120
|
+
expectTypeOf<typeof res2>().toEqualTypeOf<
|
|
121
|
+
readonly [
|
|
122
|
+
{
|
|
123
|
+
readonly name: 'bar'
|
|
124
|
+
readonly type: 'function'
|
|
125
|
+
readonly stateMutability: 'nonpayable'
|
|
126
|
+
readonly inputs: readonly [
|
|
127
|
+
{
|
|
128
|
+
readonly type: 'tuple'
|
|
129
|
+
readonly components: readonly [
|
|
130
|
+
{
|
|
131
|
+
readonly name: 'name'
|
|
132
|
+
readonly type: 'string'
|
|
133
|
+
},
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
readonly type: 'bytes32'
|
|
138
|
+
},
|
|
139
|
+
]
|
|
140
|
+
readonly outputs: readonly []
|
|
141
|
+
},
|
|
142
|
+
]
|
|
143
|
+
>()
|
|
144
|
+
|
|
145
|
+
const abi2 = [
|
|
146
|
+
'function foo()',
|
|
147
|
+
'function bar(Foo, bytes32)',
|
|
148
|
+
'struct Foo { string name; }',
|
|
149
|
+
]
|
|
150
|
+
expectTypeOf(parseAbi(abi2)).toEqualTypeOf<Abi>()
|
|
151
|
+
|
|
152
|
+
// @ts-expect-error invalid signature
|
|
153
|
+
expectTypeOf(parseAbi(['function foo ()'])).toEqualTypeOf<never>()
|
|
154
|
+
|
|
155
|
+
const param: string[] = abi2
|
|
156
|
+
expectTypeOf(parseAbi(param)).toEqualTypeOf<Abi>()
|
|
157
|
+
|
|
158
|
+
const getOrderType = parseAbi(seaportHumanReadableAbi)[10]
|
|
159
|
+
expectTypeOf<typeof getOrderType>().toEqualTypeOf<{
|
|
160
|
+
readonly name: 'getOrderStatus'
|
|
161
|
+
readonly type: 'function'
|
|
162
|
+
readonly stateMutability: 'view'
|
|
163
|
+
readonly inputs: readonly [
|
|
164
|
+
{
|
|
165
|
+
readonly type: 'bytes32'
|
|
166
|
+
readonly name: 'orderHash'
|
|
167
|
+
},
|
|
168
|
+
]
|
|
169
|
+
readonly outputs: readonly [
|
|
170
|
+
{
|
|
171
|
+
readonly type: 'bool'
|
|
172
|
+
readonly name: 'isValidated'
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
readonly type: 'bool'
|
|
176
|
+
readonly name: 'isCancelled'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
readonly type: 'uint256'
|
|
180
|
+
readonly name: 'totalFilled'
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
readonly type: 'uint256'
|
|
184
|
+
readonly name: 'totalSize'
|
|
185
|
+
},
|
|
186
|
+
]
|
|
187
|
+
}>()
|
|
188
|
+
})
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { expect, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
|
|
4
|
+
import { parseAbi } from './parseAbi.js'
|
|
5
|
+
|
|
6
|
+
const customSolidityErrorsHumanReadableAbi = [
|
|
7
|
+
'constructor()',
|
|
8
|
+
'error ApprovalCallerNotOwnerNorApproved()',
|
|
9
|
+
'error ApprovalQueryForNonexistentToken()',
|
|
10
|
+
] as const
|
|
11
|
+
|
|
12
|
+
test('parseAbi', () => {
|
|
13
|
+
const result = parseAbi(seaportHumanReadableAbi)
|
|
14
|
+
expect(result).toMatchSnapshot()
|
|
15
|
+
|
|
16
|
+
expect(parseAbi(customSolidityErrorsHumanReadableAbi)).toMatchInlineSnapshot(`
|
|
17
|
+
[
|
|
18
|
+
{
|
|
19
|
+
"inputs": [],
|
|
20
|
+
"stateMutability": "nonpayable",
|
|
21
|
+
"type": "constructor",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"inputs": [],
|
|
25
|
+
"name": "ApprovalCallerNotOwnerNorApproved",
|
|
26
|
+
"type": "error",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"inputs": [],
|
|
30
|
+
"name": "ApprovalQueryForNonexistentToken",
|
|
31
|
+
"type": "error",
|
|
32
|
+
},
|
|
33
|
+
]
|
|
34
|
+
`)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
test('busts cache', () => {
|
|
38
|
+
const result1 = parseAbi([
|
|
39
|
+
'function balanceOf(Baz baz)',
|
|
40
|
+
'struct Baz {uint amount; string role;}',
|
|
41
|
+
])
|
|
42
|
+
expect(result1[0].inputs).toMatchInlineSnapshot(`
|
|
43
|
+
[
|
|
44
|
+
{
|
|
45
|
+
"components": [
|
|
46
|
+
{
|
|
47
|
+
"name": "amount",
|
|
48
|
+
"type": "uint256",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "role",
|
|
52
|
+
"type": "string",
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
"name": "baz",
|
|
56
|
+
"type": "tuple",
|
|
57
|
+
},
|
|
58
|
+
]
|
|
59
|
+
`)
|
|
60
|
+
const result2 = parseAbi([
|
|
61
|
+
'function balanceOf(Baz baz)',
|
|
62
|
+
'struct Baz {uint price; string role;}',
|
|
63
|
+
])
|
|
64
|
+
expect(result2[0].inputs).toMatchInlineSnapshot(`
|
|
65
|
+
[
|
|
66
|
+
{
|
|
67
|
+
"components": [
|
|
68
|
+
{
|
|
69
|
+
"name": "price",
|
|
70
|
+
"type": "uint256",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "role",
|
|
74
|
+
"type": "string",
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
"name": "baz",
|
|
78
|
+
"type": "tuple",
|
|
79
|
+
},
|
|
80
|
+
]
|
|
81
|
+
`)
|
|
82
|
+
})
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Abi } from 'abitype'
|
|
2
|
+
import type { Error, Filter } from './types.js'
|
|
3
|
+
import { isStructSignature } from './runtime/signatures.js'
|
|
4
|
+
import { parseStructs } from './runtime/structs.js'
|
|
5
|
+
import { parseSignature } from './runtime/utils.js'
|
|
6
|
+
import type { Signatures } from './types/signatures.js'
|
|
7
|
+
import type { ParseStructs } from './types/structs.js'
|
|
8
|
+
import type { ParseSignature } from './types/utils.js'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Parses human-readable ABI into JSON `Abi`.
|
|
12
|
+
*
|
|
13
|
+
* @param signatures - Human-readable ABI
|
|
14
|
+
* @returns Parsed `Abi`.
|
|
15
|
+
*/
|
|
16
|
+
export type ParseAbi<signatures extends readonly string[]> =
|
|
17
|
+
string[] extends signatures
|
|
18
|
+
? Abi // If `T` was not able to be inferred (e.g. just `string[]`), return `Abi`
|
|
19
|
+
: signatures extends readonly string[]
|
|
20
|
+
? signatures extends Signatures<signatures> // Validate signatures
|
|
21
|
+
? ParseStructs<signatures> extends infer structs
|
|
22
|
+
? {
|
|
23
|
+
[key in keyof signatures]: signatures[key] extends string
|
|
24
|
+
? ParseSignature<signatures[key], structs>
|
|
25
|
+
: never
|
|
26
|
+
} extends infer mapped extends readonly unknown[]
|
|
27
|
+
? Filter<mapped, never> extends infer result
|
|
28
|
+
? result extends readonly []
|
|
29
|
+
? never
|
|
30
|
+
: result
|
|
31
|
+
: never
|
|
32
|
+
: never
|
|
33
|
+
: never
|
|
34
|
+
: never
|
|
35
|
+
: never
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Parses human-readable ABI into JSON `Abi`.
|
|
39
|
+
*
|
|
40
|
+
* @param signatures - Human-Readable ABI
|
|
41
|
+
* @returns Parsed `Abi`.
|
|
42
|
+
*/
|
|
43
|
+
export function parseAbi<const signatures extends readonly string[]>(
|
|
44
|
+
signatures: signatures['length'] extends 0
|
|
45
|
+
? Error<'At least one signature required'>
|
|
46
|
+
: Signatures<signatures> extends signatures
|
|
47
|
+
? signatures
|
|
48
|
+
: Signatures<signatures>,
|
|
49
|
+
): ParseAbi<signatures> {
|
|
50
|
+
const structs = parseStructs(signatures as readonly string[])
|
|
51
|
+
const abi = []
|
|
52
|
+
const length = signatures.length as number
|
|
53
|
+
for (let i = 0; i < length; i++) {
|
|
54
|
+
const signature = (signatures as readonly string[])[i]!
|
|
55
|
+
if (isStructSignature(signature)) continue
|
|
56
|
+
abi.push(parseSignature(signature, structs))
|
|
57
|
+
}
|
|
58
|
+
return abi as unknown as ParseAbi<signatures>
|
|
59
|
+
}
|