ox 0.0.1 → 0.1.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/Abi/package.json +6 -0
- package/Abi.ts +163 -0
- package/AbiConstructor/package.json +6 -0
- package/AbiConstructor.ts +413 -0
- package/AbiError/package.json +6 -0
- package/AbiError.ts +719 -0
- package/AbiEvent/package.json +6 -0
- package/AbiEvent.ts +1284 -0
- package/AbiFunction/package.json +6 -0
- package/AbiFunction.ts +813 -0
- package/AbiItem/package.json +6 -0
- package/AbiItem.ts +779 -0
- package/AbiParameters/package.json +6 -0
- package/AbiParameters.ts +712 -0
- package/AccessList/package.json +6 -0
- package/AccessList.ts +124 -0
- package/AccountProof/package.json +6 -0
- package/AccountProof.ts +35 -0
- package/Address/package.json +6 -0
- package/Address.ts +359 -0
- package/AesGcm/package.json +6 -0
- package/AesGcm.ts +220 -0
- package/Authorization/package.json +6 -0
- package/Authorization.ts +639 -0
- package/Base58/package.json +6 -0
- package/Base58.ts +180 -0
- package/Base64/package.json +6 -0
- package/Base64.ts +333 -0
- package/Blobs/package.json +6 -0
- package/Blobs.ts +982 -0
- package/Block/package.json +6 -0
- package/Block.ts +317 -0
- package/Bloom/package.json +6 -0
- package/Bloom.ts +80 -0
- package/Bls/package.json +6 -0
- package/Bls.ts +496 -0
- package/BlsPoint/package.json +6 -0
- package/BlsPoint.ts +232 -0
- package/Bytes/package.json +6 -0
- package/Bytes.ts +963 -0
- package/CHANGELOG.md +7 -0
- package/Caches/package.json +6 -0
- package/Caches.ts +21 -0
- package/ContractAddress/package.json +6 -0
- package/ContractAddress.ts +181 -0
- package/Ens/package.json +6 -0
- package/Ens.ts +116 -0
- package/Errors/package.json +6 -0
- package/Errors.ts +95 -0
- package/Fee/package.json +6 -0
- package/Fee.ts +57 -0
- package/Filter/package.json +6 -0
- package/Filter.ts +144 -0
- package/Hash/package.json +6 -0
- package/Hash.ts +210 -0
- package/HdKey/package.json +6 -0
- package/HdKey.ts +175 -0
- package/Hex/package.json +6 -0
- package/Hex.ts +1040 -0
- package/Json/package.json +6 -0
- package/Json.ts +84 -0
- package/Kzg/package.json +6 -0
- package/Kzg.ts +51 -0
- package/LICENSE +21 -0
- package/Log/package.json +6 -0
- package/Log.ts +248 -0
- package/Mnemonic/package.json +6 -0
- package/Mnemonic.ts +249 -0
- package/P256/package.json +6 -0
- package/P256.ts +230 -0
- package/PersonalMessage/package.json +6 -0
- package/PersonalMessage.ts +70 -0
- package/Provider/package.json +6 -0
- package/Provider.ts +354 -0
- package/PublicKey/package.json +6 -0
- package/PublicKey.ts +545 -0
- package/README.md +75 -26
- package/Rlp/package.json +6 -0
- package/Rlp.ts +390 -0
- package/RpcRequest/package.json +6 -0
- package/RpcRequest.ts +192 -0
- package/RpcResponse/package.json +6 -0
- package/RpcResponse.ts +389 -0
- package/RpcSchema/package.json +6 -0
- package/RpcSchema.ts +273 -0
- package/RpcTransport/package.json +6 -0
- package/RpcTransport.ts +198 -0
- package/Secp256k1/package.json +6 -0
- package/Secp256k1.ts +304 -0
- package/Signature/package.json +6 -0
- package/Signature.ts +909 -0
- package/Siwe/package.json +6 -0
- package/Siwe.ts +516 -0
- package/Solidity/package.json +6 -0
- package/Solidity.ts +109 -0
- package/Transaction/package.json +6 -0
- package/Transaction.ts +429 -0
- package/TransactionEnvelope/package.json +6 -0
- package/TransactionEnvelope.ts +205 -0
- package/TransactionEnvelopeEip1559/package.json +6 -0
- package/TransactionEnvelopeEip1559.ts +656 -0
- package/TransactionEnvelopeEip2930/package.json +6 -0
- package/TransactionEnvelopeEip2930.ts +624 -0
- package/TransactionEnvelopeEip4844/package.json +6 -0
- package/TransactionEnvelopeEip4844.ts +764 -0
- package/TransactionEnvelopeEip7702/package.json +6 -0
- package/TransactionEnvelopeEip7702.ts +639 -0
- package/TransactionEnvelopeLegacy/package.json +6 -0
- package/TransactionEnvelopeLegacy.ts +674 -0
- package/TransactionReceipt/package.json +6 -0
- package/TransactionReceipt.ts +341 -0
- package/TransactionRequest/package.json +6 -0
- package/TransactionRequest.ts +151 -0
- package/TypedData/package.json +6 -0
- package/TypedData.ts +931 -0
- package/ValidatorData/package.json +6 -0
- package/ValidatorData.ts +87 -0
- package/Value/package.json +6 -0
- package/Value.ts +242 -0
- package/WebAuthnP256/package.json +6 -0
- package/WebAuthnP256.ts +803 -0
- package/WebCryptoP256/package.json +6 -0
- package/WebCryptoP256.ts +190 -0
- package/Withdrawal/package.json +6 -0
- package/Withdrawal.ts +95 -0
- package/_cjs/Abi.js +17 -0
- package/_cjs/Abi.js.map +1 -0
- package/_cjs/AbiConstructor.js +42 -0
- package/_cjs/AbiConstructor.js.map +1 -0
- package/_cjs/AbiError.js +98 -0
- package/_cjs/AbiError.js.map +1 -0
- package/_cjs/AbiEvent.js +338 -0
- package/_cjs/AbiEvent.js.map +1 -0
- package/_cjs/AbiFunction.js +85 -0
- package/_cjs/AbiFunction.js.map +1 -0
- package/_cjs/AbiItem.js +180 -0
- package/_cjs/AbiItem.js.map +1 -0
- package/_cjs/AbiParameters.js +229 -0
- package/_cjs/AbiParameters.js.map +1 -0
- package/_cjs/AccessList.js +51 -0
- package/_cjs/AccessList.js.map +1 -0
- package/_cjs/AccountProof.js +3 -0
- package/_cjs/AccountProof.js.map +1 -0
- package/_cjs/Address.js +121 -0
- package/_cjs/Address.js.map +1 -0
- package/_cjs/AesGcm.js +55 -0
- package/_cjs/AesGcm.js.map +1 -0
- package/_cjs/Authorization.js +99 -0
- package/_cjs/Authorization.js.map +1 -0
- package/_cjs/Base58.js +52 -0
- package/_cjs/Base58.js.map +1 -0
- package/_cjs/Base64.js +76 -0
- package/_cjs/Base64.js.map +1 -0
- package/_cjs/Blobs.js +255 -0
- package/_cjs/Blobs.js.map +1 -0
- package/_cjs/Block.js +87 -0
- package/_cjs/Block.js.map +1 -0
- package/_cjs/Bloom.js +23 -0
- package/_cjs/Bloom.js.map +1 -0
- package/_cjs/Bls.js +79 -0
- package/_cjs/Bls.js.map +1 -0
- package/_cjs/BlsPoint.js +32 -0
- package/_cjs/BlsPoint.js.map +1 -0
- package/_cjs/Bytes.js +279 -0
- package/_cjs/Bytes.js.map +1 -0
- package/_cjs/Caches.js +14 -0
- package/_cjs/Caches.js.map +1 -0
- package/_cjs/ContractAddress.js +39 -0
- package/_cjs/ContractAddress.js.map +1 -0
- package/_cjs/Ens.js +37 -0
- package/_cjs/Ens.js.map +1 -0
- package/_cjs/Errors.js +99 -0
- package/_cjs/Errors.js.map +1 -0
- package/_cjs/Fee.js +3 -0
- package/_cjs/Fee.js.map +1 -0
- package/_cjs/Filter.js +43 -0
- package/_cjs/Filter.js.map +1 -0
- package/_cjs/Hash.js +40 -0
- package/_cjs/Hash.js.map +1 -0
- package/_cjs/HdKey.js +30 -0
- package/_cjs/HdKey.js.map +1 -0
- package/_cjs/Hex.js +324 -0
- package/_cjs/Hex.js.map +1 -0
- package/_cjs/Json.js +25 -0
- package/_cjs/Json.js.map +1 -0
- package/_cjs/Kzg.js +14 -0
- package/_cjs/Kzg.js.map +1 -0
- package/_cjs/Log.js +35 -0
- package/_cjs/Log.js.map +1 -0
- package/_cjs/Mnemonic.js +56 -0
- package/_cjs/Mnemonic.js.map +1 -0
- package/_cjs/P256.js +52 -0
- package/_cjs/P256.js.map +1 -0
- package/_cjs/PersonalMessage.js +16 -0
- package/_cjs/PersonalMessage.js.map +1 -0
- package/_cjs/Provider.js +90 -0
- package/_cjs/Provider.js.map +1 -0
- package/_cjs/PublicKey.js +192 -0
- package/_cjs/PublicKey.js.map +1 -0
- package/_cjs/Rlp.js +179 -0
- package/_cjs/Rlp.js.map +1 -0
- package/_cjs/RpcRequest.js +27 -0
- package/_cjs/RpcRequest.js.map +1 -0
- package/_cjs/RpcResponse.js +368 -0
- package/_cjs/RpcResponse.js.map +1 -0
- package/_cjs/RpcSchema.js +7 -0
- package/_cjs/RpcSchema.js.map +1 -0
- package/_cjs/RpcTransport.js +95 -0
- package/_cjs/RpcTransport.js.map +1 -0
- package/_cjs/Secp256k1.js +57 -0
- package/_cjs/Secp256k1.js.map +1 -0
- package/_cjs/Signature.js +305 -0
- package/_cjs/Signature.js.map +1 -0
- package/_cjs/Siwe.js +231 -0
- package/_cjs/Siwe.js.map +1 -0
- package/_cjs/Solidity.js +104 -0
- package/_cjs/Solidity.js.map +1 -0
- package/_cjs/Transaction.js +106 -0
- package/_cjs/Transaction.js.map +1 -0
- package/_cjs/TransactionEnvelope.js +80 -0
- package/_cjs/TransactionEnvelope.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip1559.js +182 -0
- package/_cjs/TransactionEnvelopeEip1559.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip2930.js +166 -0
- package/_cjs/TransactionEnvelopeEip2930.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip4844.js +224 -0
- package/_cjs/TransactionEnvelopeEip4844.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip7702.js +156 -0
- package/_cjs/TransactionEnvelopeEip7702.js.map +1 -0
- package/_cjs/TransactionEnvelopeLegacy.js +221 -0
- package/_cjs/TransactionEnvelopeLegacy.js.map +1 -0
- package/_cjs/TransactionReceipt.js +76 -0
- package/_cjs/TransactionReceipt.js.map +1 -0
- package/_cjs/TransactionRequest.js +51 -0
- package/_cjs/TransactionRequest.js.map +1 -0
- package/_cjs/TypedData.js +318 -0
- package/_cjs/TypedData.js.map +1 -0
- package/_cjs/ValidatorData.js +16 -0
- package/_cjs/ValidatorData.js.map +1 -0
- package/_cjs/Value.js +96 -0
- package/_cjs/Value.js.map +1 -0
- package/_cjs/WebAuthnP256.js +245 -0
- package/_cjs/WebAuthnP256.js.map +1 -0
- package/_cjs/WebCryptoP256.js +46 -0
- package/_cjs/WebCryptoP256.js.map +1 -0
- package/_cjs/Withdrawal.js +24 -0
- package/_cjs/Withdrawal.js.map +1 -0
- package/_cjs/index.js +66 -0
- package/_cjs/index.js.map +1 -0
- package/_cjs/internal/abi.js +11 -0
- package/_cjs/internal/abi.js.map +1 -0
- package/_cjs/internal/abiConstructor.js +3 -0
- package/_cjs/internal/abiConstructor.js.map +1 -0
- package/_cjs/internal/abiError.js +3 -0
- package/_cjs/internal/abiError.js.map +1 -0
- package/_cjs/internal/abiEvent.js +3 -0
- package/_cjs/internal/abiEvent.js.map +1 -0
- package/_cjs/internal/abiFunction.js +3 -0
- package/_cjs/internal/abiFunction.js.map +1 -0
- package/_cjs/internal/abiItem.js +110 -0
- package/_cjs/internal/abiItem.js.map +1 -0
- package/_cjs/internal/abiParameters.js +376 -0
- package/_cjs/internal/abiParameters.js.map +1 -0
- package/_cjs/internal/base58.js +89 -0
- package/_cjs/internal/base58.js.map +1 -0
- package/_cjs/internal/bytes.js +88 -0
- package/_cjs/internal/bytes.js.map +1 -0
- package/_cjs/internal/cursor.js +210 -0
- package/_cjs/internal/cursor.js.map +1 -0
- package/_cjs/internal/ens.js +43 -0
- package/_cjs/internal/ens.js.map +1 -0
- package/_cjs/internal/errors.js +28 -0
- package/_cjs/internal/errors.js.map +1 -0
- package/_cjs/internal/hdKey.js +19 -0
- package/_cjs/internal/hdKey.js.map +1 -0
- package/_cjs/internal/hex.js +66 -0
- package/_cjs/internal/hex.js.map +1 -0
- package/_cjs/internal/lru.js +34 -0
- package/_cjs/internal/lru.js.map +1 -0
- package/_cjs/internal/mnemonic/wordlists.js +24 -0
- package/_cjs/internal/mnemonic/wordlists.js.map +1 -0
- package/_cjs/internal/promise.js +49 -0
- package/_cjs/internal/promise.js.map +1 -0
- package/_cjs/internal/register.js +3 -0
- package/_cjs/internal/register.js.map +1 -0
- package/_cjs/internal/rpcSchema.js +3 -0
- package/_cjs/internal/rpcSchema.js.map +1 -0
- package/_cjs/internal/rpcSchemas/eth.js +3 -0
- package/_cjs/internal/rpcSchemas/eth.js.map +1 -0
- package/_cjs/internal/rpcSchemas/wallet.js +3 -0
- package/_cjs/internal/rpcSchemas/wallet.js.map +1 -0
- package/_cjs/internal/rpcTransport.js +19 -0
- package/_cjs/internal/rpcTransport.js.map +1 -0
- package/_cjs/internal/types.js +3 -0
- package/_cjs/internal/types.js.map +1 -0
- package/_cjs/internal/uid.js +17 -0
- package/_cjs/internal/uid.js.map +1 -0
- package/_cjs/internal/webauthn.js +28 -0
- package/_cjs/internal/webauthn.js.map +1 -0
- package/_cjs/package.json +1 -0
- package/_cjs/trusted-setups/Paths.js +6 -0
- package/_cjs/trusted-setups/Paths.js.map +1 -0
- package/_cjs/trusted-setups/index.js +5 -0
- package/_cjs/trusted-setups/index.js.map +1 -0
- package/_cjs/trusted-setups/internal/paths.js +11 -0
- package/_cjs/trusted-setups/internal/paths.js.map +1 -0
- package/_cjs/version.js +5 -0
- package/_cjs/version.js.map +1 -0
- package/_cjs/window/index.js +3 -0
- package/_cjs/window/index.js.map +1 -0
- package/_esm/Abi.js +19 -0
- package/_esm/Abi.js.map +1 -0
- package/_esm/AbiConstructor.js +102 -0
- package/_esm/AbiConstructor.js.map +1 -0
- package/_esm/AbiError.js +364 -0
- package/_esm/AbiError.js.map +1 -0
- package/_esm/AbiEvent.js +1038 -0
- package/_esm/AbiEvent.js.map +1 -0
- package/_esm/AbiFunction.js +549 -0
- package/_esm/AbiFunction.js.map +1 -0
- package/_esm/AbiItem.js +574 -0
- package/_esm/AbiItem.js.map +1 -0
- package/_esm/AbiParameters.js +543 -0
- package/_esm/AbiParameters.js.map +1 -0
- package/_esm/AccessList.js +105 -0
- package/_esm/AccessList.js.map +1 -0
- package/_esm/AccountProof.js +2 -0
- package/_esm/AccountProof.js.map +1 -0
- package/_esm/Address.js +268 -0
- package/_esm/Address.js.map +1 -0
- package/_esm/AesGcm.js +124 -0
- package/_esm/AesGcm.js.map +1 -0
- package/_esm/Authorization.js +441 -0
- package/_esm/Authorization.js.map +1 -0
- package/_esm/Base58.js +142 -0
- package/_esm/Base58.js.map +1 -0
- package/_esm/Base64.js +236 -0
- package/_esm/Base64.js.map +1 -0
- package/_esm/Blobs.js +624 -0
- package/_esm/Blobs.js.map +1 -0
- package/_esm/Block.js +177 -0
- package/_esm/Block.js.map +1 -0
- package/_esm/Bloom.js +57 -0
- package/_esm/Bloom.js.map +1 -0
- package/_esm/Bls.js +141 -0
- package/_esm/Bls.js.map +1 -0
- package/_esm/BlsPoint.js +59 -0
- package/_esm/BlsPoint.js.map +1 -0
- package/_esm/Bytes.js +719 -0
- package/_esm/Bytes.js.map +1 -0
- package/_esm/Caches.js +19 -0
- package/_esm/Caches.js.map +1 -0
- package/_esm/ContractAddress.js +110 -0
- package/_esm/ContractAddress.js.map +1 -0
- package/_esm/Ens.js +84 -0
- package/_esm/Ens.js.map +1 -0
- package/_esm/Errors.js +105 -0
- package/_esm/Errors.js.map +1 -0
- package/_esm/Fee.js +2 -0
- package/_esm/Fee.js.map +1 -0
- package/_esm/Filter.js +100 -0
- package/_esm/Filter.js.map +1 -0
- package/_esm/Hash.js +126 -0
- package/_esm/Hash.js.map +1 -0
- package/_esm/HdKey.js +107 -0
- package/_esm/HdKey.js.map +1 -0
- package/_esm/Hex.js +763 -0
- package/_esm/Hex.js.map +1 -0
- package/_esm/Json.js +62 -0
- package/_esm/Json.js.map +1 -0
- package/_esm/Kzg.js +30 -0
- package/_esm/Kzg.js.map +1 -0
- package/_esm/Log.js +181 -0
- package/_esm/Log.js.map +1 -0
- package/_esm/Mnemonic.js +154 -0
- package/_esm/Mnemonic.js.map +1 -0
- package/_esm/P256.js +131 -0
- package/_esm/P256.js.map +1 -0
- package/_esm/PersonalMessage.js +46 -0
- package/_esm/PersonalMessage.js.map +1 -0
- package/_esm/Provider.js +122 -0
- package/_esm/Provider.js.map +1 -0
- package/_esm/PublicKey.js +395 -0
- package/_esm/PublicKey.js.map +1 -0
- package/_esm/Rlp.js +267 -0
- package/_esm/Rlp.js.map +1 -0
- package/_esm/RpcRequest.js +131 -0
- package/_esm/RpcRequest.js.map +1 -0
- package/_esm/RpcResponse.js +457 -0
- package/_esm/RpcResponse.js.map +1 -0
- package/_esm/RpcSchema.js +46 -0
- package/_esm/RpcSchema.js.map +1 -0
- package/_esm/RpcTransport.js +110 -0
- package/_esm/RpcTransport.js.map +1 -0
- package/_esm/Secp256k1.js +173 -0
- package/_esm/Secp256k1.js.map +1 -0
- package/_esm/Signature.js +696 -0
- package/_esm/Signature.js.map +1 -0
- package/_esm/Siwe.js +374 -0
- package/_esm/Siwe.js.map +1 -0
- package/_esm/Solidity.js +104 -0
- package/_esm/Solidity.js.map +1 -0
- package/_esm/Transaction.js +176 -0
- package/_esm/Transaction.js.map +1 -0
- package/_esm/TransactionEnvelope.js +139 -0
- package/_esm/TransactionEnvelope.js.map +1 -0
- package/_esm/TransactionEnvelopeEip1559.js +455 -0
- package/_esm/TransactionEnvelopeEip1559.js.map +1 -0
- package/_esm/TransactionEnvelopeEip2930.js +439 -0
- package/_esm/TransactionEnvelopeEip2930.js.map +1 -0
- package/_esm/TransactionEnvelopeEip4844.js +542 -0
- package/_esm/TransactionEnvelopeEip4844.js.map +1 -0
- package/_esm/TransactionEnvelopeEip7702.js +442 -0
- package/_esm/TransactionEnvelopeEip7702.js.map +1 -0
- package/_esm/TransactionEnvelopeLegacy.js +495 -0
- package/_esm/TransactionEnvelopeLegacy.js.map +1 -0
- package/_esm/TransactionReceipt.js +229 -0
- package/_esm/TransactionReceipt.js.map +1 -0
- package/_esm/TransactionRequest.js +89 -0
- package/_esm/TransactionRequest.js.map +1 -0
- package/_esm/TypedData.js +635 -0
- package/_esm/TypedData.js.map +1 -0
- package/_esm/ValidatorData.js +52 -0
- package/_esm/ValidatorData.js.map +1 -0
- package/_esm/Value.js +196 -0
- package/_esm/Value.js.map +1 -0
- package/_esm/WebAuthnP256.js +471 -0
- package/_esm/WebAuthnP256.js.map +1 -0
- package/_esm/WebCryptoP256.js +116 -0
- package/_esm/WebCryptoP256.js.map +1 -0
- package/_esm/Withdrawal.js +72 -0
- package/_esm/Withdrawal.js.map +1 -0
- package/_esm/index.js +3366 -0
- package/_esm/index.js.map +1 -0
- package/_esm/internal/abi.js +9 -0
- package/_esm/internal/abi.js.map +1 -0
- package/_esm/internal/abiConstructor.js +2 -0
- package/_esm/internal/abiConstructor.js.map +1 -0
- package/_esm/internal/abiError.js +2 -0
- package/_esm/internal/abiError.js.map +1 -0
- package/_esm/internal/abiEvent.js +2 -0
- package/_esm/internal/abiEvent.js.map +1 -0
- package/_esm/internal/abiFunction.js +2 -0
- package/_esm/internal/abiFunction.js.map +1 -0
- package/_esm/internal/abiItem.js +122 -0
- package/_esm/internal/abiItem.js.map +1 -0
- package/_esm/internal/abiParameters.js +419 -0
- package/_esm/internal/abiParameters.js.map +1 -0
- package/_esm/internal/base58.js +91 -0
- package/_esm/internal/base58.js.map +1 -0
- package/_esm/internal/bytes.js +86 -0
- package/_esm/internal/bytes.js.map +1 -0
- package/_esm/internal/cursor.js +207 -0
- package/_esm/internal/cursor.js.map +1 -0
- package/_esm/internal/ens.js +47 -0
- package/_esm/internal/ens.js.map +1 -0
- package/_esm/internal/errors.js +26 -0
- package/_esm/internal/errors.js.map +1 -0
- package/_esm/internal/hdKey.js +17 -0
- package/_esm/internal/hdKey.js.map +1 -0
- package/_esm/internal/hex.js +64 -0
- package/_esm/internal/hex.js.map +1 -0
- package/_esm/internal/lru.js +36 -0
- package/_esm/internal/lru.js.map +1 -0
- package/_esm/internal/mnemonic/wordlists.js +11 -0
- package/_esm/internal/mnemonic/wordlists.js.map +1 -0
- package/_esm/internal/promise.js +52 -0
- package/_esm/internal/promise.js.map +1 -0
- package/_esm/internal/register.js +2 -0
- package/_esm/internal/register.js.map +1 -0
- package/_esm/internal/rpcSchema.js +2 -0
- package/_esm/internal/rpcSchema.js.map +1 -0
- package/_esm/internal/rpcSchemas/eth.js +2 -0
- package/_esm/internal/rpcSchemas/eth.js.map +1 -0
- package/_esm/internal/rpcSchemas/wallet.js +2 -0
- package/_esm/internal/rpcSchemas/wallet.js.map +1 -0
- package/_esm/internal/rpcTransport.js +20 -0
- package/_esm/internal/rpcTransport.js.map +1 -0
- package/_esm/internal/types.js +2 -0
- package/_esm/internal/types.js.map +1 -0
- package/_esm/internal/uid.js +15 -0
- package/_esm/internal/uid.js.map +1 -0
- package/_esm/internal/webauthn.js +35 -0
- package/_esm/internal/webauthn.js.map +1 -0
- package/_esm/package.json +1 -0
- package/_esm/trusted-setups/Paths.js +3 -0
- package/_esm/trusted-setups/Paths.js.map +1 -0
- package/_esm/trusted-setups/index.js +2 -0
- package/_esm/trusted-setups/index.js.map +1 -0
- package/_esm/trusted-setups/internal/paths.js +12 -0
- package/_esm/trusted-setups/internal/paths.js.map +1 -0
- package/_esm/version.js +3 -0
- package/_esm/version.js.map +1 -0
- package/_esm/window/index.js +2 -0
- package/_esm/window/index.js.map +1 -0
- package/_test/Abi.test-d/package.json +6 -0
- package/_test/AbiConstructor.test-d/package.json +6 -0
- package/_test/AbiError.test-d/package.json +6 -0
- package/_test/AbiEvent.snap-d/package.json +6 -0
- package/_test/AbiEvent.snap-d.ts +329 -0
- package/_test/AbiFunction.snap-d/package.json +6 -0
- package/_test/AbiFunction.snap-d.ts +262 -0
- package/_test/AbiItem.snap-d/package.json +6 -0
- package/_test/AbiItem.snap-d.ts +131 -0
- package/_test/AbiParameters.bench/package.json +6 -0
- package/_test/AbiParameters.snap-d/package.json +6 -0
- package/_test/AbiParameters.snap-d.ts +66 -0
- package/_test/Address.bench/package.json +6 -0
- package/_test/Base58.bench/package.json +6 -0
- package/_test/Hex.bench/package.json +6 -0
- package/_test/Hex.test-d/package.json +6 -0
- package/_test/PublicKey.test-d/package.json +6 -0
- package/_test/Rlp.bench/package.json +6 -0
- package/_test/Rlp.test-d/package.json +6 -0
- package/_test/Signature.snap-d/package.json +6 -0
- package/_test/Signature.snap-d.ts +96 -0
- package/_test/TransactionEnvelopeEip1559.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip2930.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip4844.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip7702.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeLegacy.test-d/package.json +6 -0
- package/_test/TypedData.test-d/package.json +6 -0
- package/_types/Abi.d.ts +137 -0
- package/_types/Abi.d.ts.map +1 -0
- package/_types/AbiConstructor.d.ts +305 -0
- package/_types/AbiConstructor.d.ts.map +1 -0
- package/_types/AbiError.d.ts +522 -0
- package/_types/AbiError.d.ts.map +1 -0
- package/_types/AbiEvent.d.ts +892 -0
- package/_types/AbiEvent.d.ts.map +1 -0
- package/_types/AbiFunction.d.ts +602 -0
- package/_types/AbiFunction.d.ts.map +1 -0
- package/_types/AbiItem.d.ts +544 -0
- package/_types/AbiItem.d.ts.map +1 -0
- package/_types/AbiParameters.d.ts +466 -0
- package/_types/AbiParameters.d.ts.map +1 -0
- package/_types/AccessList.d.ts +83 -0
- package/_types/AccessList.d.ts.map +1 -0
- package/_types/AccountProof.d.ts +32 -0
- package/_types/AccountProof.d.ts.map +1 -0
- package/_types/Address.d.ts +244 -0
- package/_types/Address.d.ts.map +1 -0
- package/_types/AesGcm.d.ts +116 -0
- package/_types/AesGcm.d.ts.map +1 -0
- package/_types/Authorization.d.ts +461 -0
- package/_types/Authorization.d.ts.map +1 -0
- package/_types/Base58.d.ts +131 -0
- package/_types/Base58.d.ts.map +1 -0
- package/_types/Base64.d.ts +244 -0
- package/_types/Base64.d.ts.map +1 -0
- package/_types/Blobs.d.ts +556 -0
- package/_types/Blobs.d.ts.map +1 -0
- package/_types/Block.d.ts +190 -0
- package/_types/Block.d.ts.map +1 -0
- package/_types/Bloom.d.ts +54 -0
- package/_types/Bloom.d.ts.map +1 -0
- package/_types/Bls.d.ts +365 -0
- package/_types/Bls.d.ts.map +1 -0
- package/_types/BlsPoint.d.ts +187 -0
- package/_types/BlsPoint.d.ts.map +1 -0
- package/_types/Bytes.d.ts +674 -0
- package/_types/Bytes.d.ts.map +1 -0
- package/_types/Caches.d.ts +13 -0
- package/_types/Caches.d.ts.map +1 -0
- package/_types/ContractAddress.d.ts +115 -0
- package/_types/ContractAddress.d.ts.map +1 -0
- package/_types/Ens.d.ts +72 -0
- package/_types/Ens.d.ts.map +1 -0
- package/_types/Errors.d.ts +33 -0
- package/_types/Errors.d.ts.map +1 -0
- package/_types/Fee.d.ts +41 -0
- package/_types/Fee.d.ts.map +1 -0
- package/_types/Filter.d.ts +100 -0
- package/_types/Filter.d.ts.map +1 -0
- package/_types/Hash.d.ts +135 -0
- package/_types/Hash.d.ts.map +1 -0
- package/_types/HdKey.d.ts +146 -0
- package/_types/HdKey.d.ts.map +1 -0
- package/_types/Hex.d.ts +711 -0
- package/_types/Hex.d.ts.map +1 -0
- package/_types/Json.d.ts +53 -0
- package/_types/Json.d.ts.map +1 -0
- package/_types/Kzg.d.ts +42 -0
- package/_types/Kzg.d.ts.map +1 -0
- package/_types/Log.d.ts +194 -0
- package/_types/Log.d.ts.map +1 -0
- package/_types/Mnemonic.d.ts +176 -0
- package/_types/Mnemonic.d.ts.map +1 -0
- package/_types/P256.d.ts +207 -0
- package/_types/P256.d.ts.map +1 -0
- package/_types/PersonalMessage.d.ts +49 -0
- package/_types/PersonalMessage.d.ts.map +1 -0
- package/_types/Provider.d.ts +268 -0
- package/_types/Provider.d.ts.map +1 -0
- package/_types/PublicKey.d.ts +327 -0
- package/_types/PublicKey.d.ts.map +1 -0
- package/_types/Rlp.d.ts +153 -0
- package/_types/Rlp.d.ts.map +1 -0
- package/_types/RpcRequest.d.ts +144 -0
- package/_types/RpcRequest.d.ts.map +1 -0
- package/_types/RpcResponse.d.ts +266 -0
- package/_types/RpcResponse.d.ts.map +1 -0
- package/_types/RpcSchema.d.ts +248 -0
- package/_types/RpcSchema.d.ts.map +1 -0
- package/_types/RpcTransport.d.ts +65 -0
- package/_types/RpcTransport.d.ts.map +1 -0
- package/_types/Secp256k1.d.ts +277 -0
- package/_types/Secp256k1.d.ts.map +1 -0
- package/_types/Signature.d.ts +601 -0
- package/_types/Signature.d.ts.map +1 -0
- package/_types/Siwe.d.ts +249 -0
- package/_types/Siwe.d.ts.map +1 -0
- package/_types/Solidity.d.ts +100 -0
- package/_types/Solidity.d.ts.map +1 -0
- package/_types/Transaction.d.ts +235 -0
- package/_types/Transaction.d.ts.map +1 -0
- package/_types/TransactionEnvelope.d.ts +141 -0
- package/_types/TransactionEnvelope.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip1559.d.ts +367 -0
- package/_types/TransactionEnvelopeEip1559.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip2930.d.ts +364 -0
- package/_types/TransactionEnvelopeEip2930.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip4844.d.ts +419 -0
- package/_types/TransactionEnvelopeEip4844.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip7702.d.ts +377 -0
- package/_types/TransactionEnvelopeEip7702.d.ts.map +1 -0
- package/_types/TransactionEnvelopeLegacy.d.ts +358 -0
- package/_types/TransactionEnvelopeLegacy.d.ts.map +1 -0
- package/_types/TransactionReceipt.d.ts +271 -0
- package/_types/TransactionReceipt.d.ts.map +1 -0
- package/_types/TransactionRequest.d.ts +92 -0
- package/_types/TransactionRequest.d.ts.map +1 -0
- package/_types/TypedData.d.ts +496 -0
- package/_types/TypedData.d.ts.map +1 -0
- package/_types/ValidatorData.d.ts +64 -0
- package/_types/ValidatorData.d.ts.map +1 -0
- package/_types/Value.d.ts +159 -0
- package/_types/Value.d.ts.map +1 -0
- package/_types/WebAuthnP256.d.ts +445 -0
- package/_types/WebAuthnP256.d.ts.map +1 -0
- package/_types/WebCryptoP256.d.ts +119 -0
- package/_types/WebCryptoP256.d.ts.map +1 -0
- package/_types/Withdrawal.d.ts +74 -0
- package/_types/Withdrawal.d.ts.map +1 -0
- package/_types/index.d.ts +3367 -0
- package/_types/index.d.ts.map +1 -0
- package/_types/internal/abi.d.ts +4 -0
- package/_types/internal/abi.d.ts.map +1 -0
- package/_types/internal/abiConstructor.d.ts +11 -0
- package/_types/internal/abiConstructor.d.ts.map +1 -0
- package/_types/internal/abiError.d.ts +11 -0
- package/_types/internal/abiError.d.ts.map +1 -0
- package/_types/internal/abiEvent.d.ts +60 -0
- package/_types/internal/abiEvent.d.ts.map +1 -0
- package/_types/internal/abiFunction.d.ts +11 -0
- package/_types/internal/abiFunction.d.ts.map +1 -0
- package/_types/internal/abiItem.d.ts +100 -0
- package/_types/internal/abiItem.d.ts.map +1 -0
- package/_types/internal/abiParameters.d.ts +169 -0
- package/_types/internal/abiParameters.d.ts.map +1 -0
- package/_types/internal/base58.d.ts +17 -0
- package/_types/internal/base58.d.ts.map +1 -0
- package/_types/internal/bytes.d.ts +52 -0
- package/_types/internal/bytes.d.ts.map +1 -0
- package/_types/internal/cursor.d.ts +70 -0
- package/_types/internal/cursor.d.ts.map +1 -0
- package/_types/internal/ens.d.ts +23 -0
- package/_types/internal/ens.d.ts.map +1 -0
- package/_types/internal/errors.d.ts +7 -0
- package/_types/internal/errors.d.ts.map +1 -0
- package/_types/internal/hdKey.d.ts +10 -0
- package/_types/internal/hdKey.d.ts.map +1 -0
- package/_types/internal/hex.d.ts +39 -0
- package/_types/internal/hex.d.ts.map +1 -0
- package/_types/internal/lru.d.ts +13 -0
- package/_types/internal/lru.d.ts.map +1 -0
- package/_types/internal/mnemonic/wordlists.d.ts +11 -0
- package/_types/internal/mnemonic/wordlists.d.ts.map +1 -0
- package/_types/internal/promise.d.ts +27 -0
- package/_types/internal/promise.d.ts.map +1 -0
- package/_types/internal/register.d.ts +13 -0
- package/_types/internal/register.d.ts.map +1 -0
- package/_types/internal/rpcSchema.d.ts +12 -0
- package/_types/internal/rpcSchema.d.ts.map +1 -0
- package/_types/internal/rpcSchemas/eth.d.ts +718 -0
- package/_types/internal/rpcSchemas/eth.d.ts.map +1 -0
- package/_types/internal/rpcSchemas/wallet.d.ts +416 -0
- package/_types/internal/rpcSchemas/wallet.d.ts.map +1 -0
- package/_types/internal/rpcTransport.d.ts +38 -0
- package/_types/internal/rpcTransport.d.ts.map +1 -0
- package/_types/internal/types.d.ts +284 -0
- package/_types/internal/types.d.ts.map +1 -0
- package/_types/internal/uid.d.ts +3 -0
- package/_types/internal/uid.d.ts.map +1 -0
- package/_types/internal/webauthn.d.ts +127 -0
- package/_types/internal/webauthn.d.ts.map +1 -0
- package/_types/trusted-setups/Paths.d.ts +2 -0
- package/_types/trusted-setups/Paths.d.ts.map +1 -0
- package/_types/trusted-setups/index.d.ts +2 -0
- package/_types/trusted-setups/index.d.ts.map +1 -0
- package/_types/trusted-setups/internal/paths.d.ts +3 -0
- package/_types/trusted-setups/internal/paths.d.ts.map +1 -0
- package/_types/version.d.ts +3 -0
- package/_types/version.d.ts.map +1 -0
- package/_types/window/index.d.ts +7 -0
- package/_types/window/index.d.ts.map +1 -0
- package/index.ts +3427 -0
- package/internal/abi.ts +11 -0
- package/internal/abiConstructor.ts +32 -0
- package/internal/abiError.ts +30 -0
- package/internal/abiEvent.ts +154 -0
- package/internal/abiFunction.ts +32 -0
- package/internal/abiItem.ts +593 -0
- package/internal/abiParameters.ts +741 -0
- package/internal/base58.ts +106 -0
- package/internal/bytes.ts +152 -0
- package/internal/cursor.ts +252 -0
- package/internal/ens.ts +64 -0
- package/internal/errors.ts +26 -0
- package/internal/hdKey.ts +25 -0
- package/internal/hex.ts +123 -0
- package/internal/lru.ts +34 -0
- package/internal/mnemonic/wordlists.ts +10 -0
- package/internal/promise.ts +66 -0
- package/internal/register.ts +15 -0
- package/internal/rpcSchema.ts +20 -0
- package/internal/rpcSchemas/eth.ts +727 -0
- package/internal/rpcSchemas/wallet.ts +428 -0
- package/internal/rpcTransport.ts +74 -0
- package/internal/types.ts +414 -0
- package/internal/uid.ts +15 -0
- package/internal/webauthn.ts +198 -0
- package/package.json +500 -20
- package/trusted-setups/Paths/package.json +6 -0
- package/trusted-setups/Paths.ts +3 -0
- package/trusted-setups/index.ts +1 -0
- package/trusted-setups/internal/paths.ts +13 -0
- package/trusted-setups/internal/setups/mainnet.json +8265 -0
- package/trusted-setups/internal/setups/mainnet.txt +4163 -0
- package/trusted-setups/package.json +6 -0
- package/tsdoc.json +4 -0
- package/version/package.json +6 -0
- package/version.ts +2 -0
- package/window/index.ts +7 -0
- package/window/package.json +6 -0
- package/cl/ansiesc.js +0 -25
- package/cl/deps.js +0 -7
- package/cl/editor.js +0 -141
- package/cl/index.html +0 -19
- package/cl/ox.js +0 -44
- package/cl/socket.io.js +0 -1922
- package/cl/style.css +0 -37
- package/srv/deps.js +0 -88
- package/srv/httpSrv.js +0 -82
- package/srv/ox.js +0 -44
- package/srv/remoteXtermReq.js +0 -70
package/AbiFunction.ts
ADDED
|
@@ -0,0 +1,813 @@
|
|
|
1
|
+
import * as abitype from 'abitype'
|
|
2
|
+
import type * as Abi from './Abi.js'
|
|
3
|
+
import * as AbiItem from './AbiItem.js'
|
|
4
|
+
import * as AbiParameters from './AbiParameters.js'
|
|
5
|
+
import type * as Errors from './Errors.js'
|
|
6
|
+
import * as Hex from './Hex.js'
|
|
7
|
+
import type * as internal from './internal/abiFunction.js'
|
|
8
|
+
import type * as AbiItem_internal from './internal/abiItem.js'
|
|
9
|
+
import type * as AbiParameters_internal from './internal/abiParameters.js'
|
|
10
|
+
import type { IsNarrowable } from './internal/types.js'
|
|
11
|
+
|
|
12
|
+
/** Root type for an {@link ox#AbiItem.AbiItem} with a `function` type. */
|
|
13
|
+
export type AbiFunction = abitype.AbiFunction & {
|
|
14
|
+
hash?: Hex.Hex | undefined
|
|
15
|
+
overloads?: readonly AbiFunction[] | undefined
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Extracts an {@link ox#AbiFunction.AbiFunction} item from an {@link ox#Abi.Abi}, given a name.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts twoslash
|
|
23
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
24
|
+
*
|
|
25
|
+
* const abi = Abi.from([
|
|
26
|
+
* 'function foo(string)',
|
|
27
|
+
* 'function bar(uint256)',
|
|
28
|
+
* ])
|
|
29
|
+
*
|
|
30
|
+
* type Foo = AbiFunction.FromAbi<typeof abi, 'foo'>
|
|
31
|
+
* // ^?
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
*
|
|
35
|
+
*
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
*
|
|
39
|
+
*
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export type FromAbi<
|
|
43
|
+
abi extends Abi.Abi,
|
|
44
|
+
name extends ExtractNames<abi>,
|
|
45
|
+
> = abitype.ExtractAbiFunction<abi, name>
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Extracts the names of all {@link ox#AbiFunction.AbiFunction} items in an {@link ox#Abi.Abi}.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts twoslash
|
|
52
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
53
|
+
*
|
|
54
|
+
* const abi = Abi.from([
|
|
55
|
+
* 'function foo(string)',
|
|
56
|
+
* 'function bar(uint256)',
|
|
57
|
+
* ])
|
|
58
|
+
*
|
|
59
|
+
* type names = AbiFunction.Name<typeof abi>
|
|
60
|
+
* // ^?
|
|
61
|
+
*
|
|
62
|
+
*
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =
|
|
66
|
+
abi extends Abi.Abi ? ExtractNames<abi> : string
|
|
67
|
+
|
|
68
|
+
export type ExtractNames<
|
|
69
|
+
abi extends Abi.Abi,
|
|
70
|
+
abiStateMutability extends
|
|
71
|
+
abitype.AbiStateMutability = abitype.AbiStateMutability,
|
|
72
|
+
> = abitype.ExtractAbiFunctionNames<abi, abiStateMutability>
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* ABI-decodes function arguments according to the ABI Item's input types (`inputs`).
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts twoslash
|
|
79
|
+
* import { AbiFunction } from 'ox'
|
|
80
|
+
*
|
|
81
|
+
* const approve = AbiFunction.from('function approve(address, uint256)')
|
|
82
|
+
*
|
|
83
|
+
* const data = AbiFunction.encodeData(
|
|
84
|
+
* approve,
|
|
85
|
+
* ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]
|
|
86
|
+
* )
|
|
87
|
+
* // '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'
|
|
88
|
+
*
|
|
89
|
+
* const input = AbiFunction.decodeData(approve, data) // [!code focus]
|
|
90
|
+
* // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @param abiFunction - The ABI Item to decode.
|
|
94
|
+
* @param data - The data to decode.
|
|
95
|
+
*/
|
|
96
|
+
export function decodeData<const abiItem extends AbiFunction>(
|
|
97
|
+
abiFunction: abiItem | AbiFunction,
|
|
98
|
+
data: Hex.Hex,
|
|
99
|
+
): decodeData.ReturnType<abiItem> {
|
|
100
|
+
const { overloads } = abiFunction
|
|
101
|
+
|
|
102
|
+
if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })
|
|
103
|
+
if (abiFunction.inputs.length === 0) return undefined
|
|
104
|
+
|
|
105
|
+
const item = overloads
|
|
106
|
+
? fromAbi([abiFunction, ...overloads], data as never)
|
|
107
|
+
: abiFunction
|
|
108
|
+
|
|
109
|
+
if (Hex.size(data) <= 4) return undefined
|
|
110
|
+
return AbiParameters.decode(item.inputs, Hex.slice(data, 4))
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export declare namespace decodeData {
|
|
114
|
+
type ReturnType<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<
|
|
115
|
+
abiFunction,
|
|
116
|
+
AbiFunction
|
|
117
|
+
> extends true
|
|
118
|
+
? abiFunction['inputs'] extends readonly []
|
|
119
|
+
? undefined
|
|
120
|
+
:
|
|
121
|
+
| AbiParameters_internal.ToPrimitiveTypes<abiFunction['inputs']>
|
|
122
|
+
| (abiFunction['overloads'] extends readonly AbiFunction[]
|
|
123
|
+
? AbiParameters_internal.ToPrimitiveTypes<
|
|
124
|
+
abiFunction['overloads'][number]['inputs']
|
|
125
|
+
>
|
|
126
|
+
: never)
|
|
127
|
+
: unknown
|
|
128
|
+
|
|
129
|
+
type ErrorType =
|
|
130
|
+
| fromAbi.ErrorType
|
|
131
|
+
| AbiParameters.decode.ErrorType
|
|
132
|
+
| Hex.size.ErrorType
|
|
133
|
+
| Hex.slice.ErrorType
|
|
134
|
+
| Errors.GlobalErrorType
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* ABI-decodes a function's result according to the ABI Item's output types (`outputs`).
|
|
139
|
+
*
|
|
140
|
+
* :::tip
|
|
141
|
+
*
|
|
142
|
+
* This function is typically used to decode contract function return values (e.g. the response of an `eth_call` or the `input` property of a Transaction).
|
|
143
|
+
*
|
|
144
|
+
* See the [End-to-end Example](#end-to-end).
|
|
145
|
+
*
|
|
146
|
+
* :::
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts twoslash
|
|
150
|
+
* import { AbiFunction } from 'ox'
|
|
151
|
+
*
|
|
152
|
+
* const data = '0x000000000000000000000000000000000000000000000000000000000000002a'
|
|
153
|
+
*
|
|
154
|
+
* const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')
|
|
155
|
+
*
|
|
156
|
+
* const output = AbiFunction.decodeResult(totalSupply, data)
|
|
157
|
+
* // @log: 42n
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:
|
|
162
|
+
*
|
|
163
|
+
* ```ts twoslash
|
|
164
|
+
* // @noErrors
|
|
165
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
166
|
+
*
|
|
167
|
+
* const data = '0x000000000000000000000000000000000000000000000000000000000000002a'
|
|
168
|
+
*
|
|
169
|
+
* const erc20Abi = Abi.from([...]) // [!code hl]
|
|
170
|
+
* const totalSupply = AbiFunction.fromAbi(erc20Abi, 'totalSupply') // [!code hl]
|
|
171
|
+
*
|
|
172
|
+
* const output = AbiFunction.decodeResult(totalSupply, data)
|
|
173
|
+
* // @log: 42n
|
|
174
|
+
* ```
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ### End-to-end
|
|
178
|
+
*
|
|
179
|
+
* Below is an end-to-end example of using `AbiFunction.decodeResult` to decode the result of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).
|
|
180
|
+
*
|
|
181
|
+
* ```ts twoslash
|
|
182
|
+
* import 'ox/window'
|
|
183
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
184
|
+
*
|
|
185
|
+
* // 1. Extract the Function from the Contract's ABI.
|
|
186
|
+
* const abi = Abi.from([
|
|
187
|
+
* // ...
|
|
188
|
+
* {
|
|
189
|
+
* name: 'balanceOf',
|
|
190
|
+
* type: 'function',
|
|
191
|
+
* inputs: [{ name: 'account', type: 'address' }],
|
|
192
|
+
* outputs: [{ name: 'balance', type: 'uint256' }],
|
|
193
|
+
* stateMutability: 'view',
|
|
194
|
+
* },
|
|
195
|
+
* // ...
|
|
196
|
+
* ])
|
|
197
|
+
* const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')
|
|
198
|
+
*
|
|
199
|
+
* // 2. Encode the Function Input.
|
|
200
|
+
* const data = AbiFunction.encodeData(
|
|
201
|
+
* balanceOf,
|
|
202
|
+
* ['0xd2135CfB216b74109775236E36d4b433F1DF507B']
|
|
203
|
+
* )
|
|
204
|
+
*
|
|
205
|
+
* // 3. Perform the Contract Call.
|
|
206
|
+
* const response = await window.ethereum!.request({
|
|
207
|
+
* method: 'eth_call',
|
|
208
|
+
* params: [
|
|
209
|
+
* {
|
|
210
|
+
* data,
|
|
211
|
+
* to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',
|
|
212
|
+
* },
|
|
213
|
+
* ],
|
|
214
|
+
* })
|
|
215
|
+
*
|
|
216
|
+
* // 4. Decode the Function Output. // [!code focus]
|
|
217
|
+
* const balance = AbiFunction.decodeResult(balanceOf, response) // [!code focus]
|
|
218
|
+
* // @log: 42n
|
|
219
|
+
* ```
|
|
220
|
+
*
|
|
221
|
+
* :::note
|
|
222
|
+
*
|
|
223
|
+
* For simplicity, the above example uses `window.ethereum.request`, but you can use any
|
|
224
|
+
* type of JSON-RPC interface.
|
|
225
|
+
*
|
|
226
|
+
* :::
|
|
227
|
+
*
|
|
228
|
+
* @param abiFunction - ABI Function to decode
|
|
229
|
+
* @param data - ABI-encoded function output
|
|
230
|
+
* @param options - Decoding options
|
|
231
|
+
* @returns Decoded function output
|
|
232
|
+
*/
|
|
233
|
+
export function decodeResult<
|
|
234
|
+
const abiFunction extends AbiFunction,
|
|
235
|
+
as extends 'Object' | 'Array' = 'Array',
|
|
236
|
+
>(
|
|
237
|
+
abiFunction: abiFunction | AbiFunction,
|
|
238
|
+
data: Hex.Hex,
|
|
239
|
+
options: decodeResult.Options<as> = {},
|
|
240
|
+
): decodeResult.ReturnType<abiFunction, as> {
|
|
241
|
+
const values = AbiParameters.decode(abiFunction.outputs, data, options)
|
|
242
|
+
if (values && Object.keys(values).length === 0) return undefined
|
|
243
|
+
if (values && Object.keys(values).length === 1) {
|
|
244
|
+
if (Array.isArray(values)) return values[0]
|
|
245
|
+
return Object.values(values)[0]
|
|
246
|
+
}
|
|
247
|
+
return values
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export declare namespace decodeResult {
|
|
251
|
+
type Options<as extends 'Object' | 'Array'> = {
|
|
252
|
+
/**
|
|
253
|
+
* Whether the decoded values should be returned as an `Object` or `Array`.
|
|
254
|
+
*
|
|
255
|
+
* @default "Array"
|
|
256
|
+
*/
|
|
257
|
+
as?: as | 'Array' | 'Object' | undefined
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
type ReturnType<
|
|
261
|
+
abiFunction extends AbiFunction = AbiFunction,
|
|
262
|
+
as extends 'Object' | 'Array' = 'Array',
|
|
263
|
+
> = IsNarrowable<abiFunction, AbiFunction> extends true
|
|
264
|
+
? abiFunction['outputs'] extends readonly []
|
|
265
|
+
? undefined
|
|
266
|
+
: abiFunction['outputs'] extends readonly [
|
|
267
|
+
infer type extends abitype.AbiParameter,
|
|
268
|
+
]
|
|
269
|
+
? abitype.AbiParameterToPrimitiveType<type>
|
|
270
|
+
: AbiParameters.decode.ReturnType<
|
|
271
|
+
abiFunction['outputs'],
|
|
272
|
+
as
|
|
273
|
+
> extends infer types
|
|
274
|
+
? types extends readonly []
|
|
275
|
+
? undefined
|
|
276
|
+
: types extends readonly [infer type]
|
|
277
|
+
? type
|
|
278
|
+
: types
|
|
279
|
+
: never
|
|
280
|
+
: unknown
|
|
281
|
+
|
|
282
|
+
type ErrorType = AbiParameters.decode.ErrorType | Errors.GlobalErrorType
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* ABI-encodes function arguments (`inputs`), prefixed with the 4 byte function selector.
|
|
287
|
+
*
|
|
288
|
+
* :::tip
|
|
289
|
+
*
|
|
290
|
+
* This function is typically used to encode a contract function and its arguments for contract calls (e.g. `data` parameter of an `eth_call` or `eth_sendTransaction`).
|
|
291
|
+
*
|
|
292
|
+
* See the [End-to-end Example](#end-to-end).
|
|
293
|
+
*
|
|
294
|
+
* :::
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```ts twoslash
|
|
298
|
+
* import { AbiFunction } from 'ox'
|
|
299
|
+
*
|
|
300
|
+
* const approve = AbiFunction.from('function approve(address, uint256)')
|
|
301
|
+
*
|
|
302
|
+
* const data = AbiFunction.encodeData( // [!code focus]
|
|
303
|
+
* approve, // [!code focus]
|
|
304
|
+
* ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n] // [!code focus]
|
|
305
|
+
* ) // [!code focus]
|
|
306
|
+
* // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:
|
|
311
|
+
*
|
|
312
|
+
* ```ts twoslash
|
|
313
|
+
* // @noErrors
|
|
314
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
315
|
+
*
|
|
316
|
+
* const erc20Abi = Abi.from([...]) // [!code hl]
|
|
317
|
+
* const approve = AbiFunction.fromAbi(erc20Abi, 'approve') // [!code hl]
|
|
318
|
+
*
|
|
319
|
+
* const data = AbiFunction.encodeData(
|
|
320
|
+
* approve,
|
|
321
|
+
* ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]
|
|
322
|
+
* )
|
|
323
|
+
* // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'
|
|
324
|
+
* ```
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ### End-to-end
|
|
328
|
+
*
|
|
329
|
+
* Below is an end-to-end example of using `AbiFunction.encodeData` to encode the input of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).
|
|
330
|
+
*
|
|
331
|
+
* ```ts twoslash
|
|
332
|
+
* import 'ox/window'
|
|
333
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
334
|
+
*
|
|
335
|
+
* // 1. Extract the Function from the Contract's ABI.
|
|
336
|
+
* const abi = Abi.from([
|
|
337
|
+
* // ...
|
|
338
|
+
* {
|
|
339
|
+
* name: 'balanceOf',
|
|
340
|
+
* type: 'function',
|
|
341
|
+
* inputs: [{ name: 'account', type: 'address' }],
|
|
342
|
+
* outputs: [{ name: 'balance', type: 'uint256' }],
|
|
343
|
+
* stateMutability: 'view',
|
|
344
|
+
* },
|
|
345
|
+
* // ...
|
|
346
|
+
* ])
|
|
347
|
+
* const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')
|
|
348
|
+
*
|
|
349
|
+
* // 2. Encode the Function Input. // [!code focus]
|
|
350
|
+
* const data = AbiFunction.encodeData( // [!code focus]
|
|
351
|
+
* balanceOf, // [!code focus]
|
|
352
|
+
* ['0xd2135CfB216b74109775236E36d4b433F1DF507B'] // [!code focus]
|
|
353
|
+
* ) // [!code focus]
|
|
354
|
+
*
|
|
355
|
+
* // 3. Perform the Contract Call.
|
|
356
|
+
* const response = await window.ethereum!.request({
|
|
357
|
+
* method: 'eth_call',
|
|
358
|
+
* params: [
|
|
359
|
+
* {
|
|
360
|
+
* data,
|
|
361
|
+
* to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',
|
|
362
|
+
* },
|
|
363
|
+
* ],
|
|
364
|
+
* })
|
|
365
|
+
*
|
|
366
|
+
* // 4. Decode the Function Output.
|
|
367
|
+
* const balance = AbiFunction.decodeResult(balanceOf, response)
|
|
368
|
+
* ```
|
|
369
|
+
*
|
|
370
|
+
* :::note
|
|
371
|
+
*
|
|
372
|
+
* For simplicity, the above example uses `window.ethereum.request`, but you can use any
|
|
373
|
+
* type of JSON-RPC interface.
|
|
374
|
+
*
|
|
375
|
+
* :::
|
|
376
|
+
*
|
|
377
|
+
* @param abiFunction - ABI Function to encode
|
|
378
|
+
* @param args - Function arguments
|
|
379
|
+
* @returns ABI-encoded function name and arguments
|
|
380
|
+
*/
|
|
381
|
+
export function encodeData<const abiFunction extends AbiFunction>(
|
|
382
|
+
abiFunction: abiFunction | AbiFunction,
|
|
383
|
+
...args: encodeData.Args<abiFunction>
|
|
384
|
+
): Hex.Hex {
|
|
385
|
+
const { overloads } = abiFunction
|
|
386
|
+
|
|
387
|
+
const item = overloads
|
|
388
|
+
? (fromAbi([abiFunction as AbiFunction, ...overloads], abiFunction.name, {
|
|
389
|
+
args: (args as any)[0],
|
|
390
|
+
}) as AbiFunction)
|
|
391
|
+
: abiFunction
|
|
392
|
+
|
|
393
|
+
const selector = getSelector(item)
|
|
394
|
+
|
|
395
|
+
const data =
|
|
396
|
+
args.length > 0
|
|
397
|
+
? AbiParameters.encode(item.inputs, (args as any)[0])
|
|
398
|
+
: undefined
|
|
399
|
+
|
|
400
|
+
return data ? Hex.concat(selector, data) : selector
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export declare namespace encodeData {
|
|
404
|
+
type Args<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<
|
|
405
|
+
abiFunction,
|
|
406
|
+
AbiFunction
|
|
407
|
+
> extends true
|
|
408
|
+
?
|
|
409
|
+
| (abitype.AbiParametersToPrimitiveTypes<
|
|
410
|
+
abiFunction['inputs']
|
|
411
|
+
> extends readonly []
|
|
412
|
+
? []
|
|
413
|
+
: [abitype.AbiParametersToPrimitiveTypes<abiFunction['inputs']>])
|
|
414
|
+
| (abiFunction['overloads'] extends readonly AbiFunction[]
|
|
415
|
+
? [
|
|
416
|
+
abitype.AbiParametersToPrimitiveTypes<
|
|
417
|
+
abiFunction['overloads'][number]['inputs']
|
|
418
|
+
>,
|
|
419
|
+
]
|
|
420
|
+
: [])
|
|
421
|
+
: readonly unknown[]
|
|
422
|
+
|
|
423
|
+
type ErrorType = Errors.GlobalErrorType
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
encodeData.parseError = (error: unknown) =>
|
|
427
|
+
/* v8 ignore next */
|
|
428
|
+
error as encodeData.ErrorType
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* ABI-encodes a function's result (`outputs`).
|
|
432
|
+
*
|
|
433
|
+
* @example
|
|
434
|
+
* ```ts twoslash
|
|
435
|
+
* import { AbiFunction } from 'ox'
|
|
436
|
+
*
|
|
437
|
+
* const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')
|
|
438
|
+
* const output = AbiFunction.decodeResult(totalSupply, '0x000000000000000000000000000000000000000000000000000000000000002a')
|
|
439
|
+
* // 42n
|
|
440
|
+
*
|
|
441
|
+
* const data = AbiFunction.encodeResult(totalSupply, 42n) // [!code focus]
|
|
442
|
+
* // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'
|
|
443
|
+
* ```
|
|
444
|
+
*
|
|
445
|
+
* @param abiFunction - The ABI item to encode the function output for.
|
|
446
|
+
* @param output - The function output to encode.
|
|
447
|
+
* @param options - Encoding options.
|
|
448
|
+
* @returns The encoded function output.
|
|
449
|
+
*/
|
|
450
|
+
export function encodeResult<
|
|
451
|
+
const abiFunction extends AbiFunction,
|
|
452
|
+
as extends 'Object' | 'Array' = 'Array',
|
|
453
|
+
>(
|
|
454
|
+
abiFunction: abiFunction | AbiFunction,
|
|
455
|
+
output: encodeResult.Output<abiFunction, as>,
|
|
456
|
+
options: encodeResult.Options<as> = {},
|
|
457
|
+
): Hex.Hex {
|
|
458
|
+
const { as = 'Array' } = options
|
|
459
|
+
|
|
460
|
+
const values = (() => {
|
|
461
|
+
if (abiFunction.outputs.length === 1) return [output]
|
|
462
|
+
if (Array.isArray(output)) return output
|
|
463
|
+
if (as === 'Object') return Object.values(output as any)
|
|
464
|
+
return [output]
|
|
465
|
+
})()
|
|
466
|
+
|
|
467
|
+
return AbiParameters.encode(abiFunction.outputs, values)
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export declare namespace encodeResult {
|
|
471
|
+
type Output<
|
|
472
|
+
abiFunction extends AbiFunction = AbiFunction,
|
|
473
|
+
as extends 'Object' | 'Array' = 'Array',
|
|
474
|
+
> = abiFunction['outputs'] extends readonly []
|
|
475
|
+
? never
|
|
476
|
+
: abiFunction['outputs']['length'] extends 1
|
|
477
|
+
? AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>[0]
|
|
478
|
+
: as extends 'Object'
|
|
479
|
+
? AbiParameters_internal.ToObject<abiFunction['outputs']>
|
|
480
|
+
: AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>
|
|
481
|
+
|
|
482
|
+
type Options<as extends 'Object' | 'Array'> = {
|
|
483
|
+
as?: as | 'Object' | 'Array' | undefined
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
type ErrorType = AbiParameters.encode.ErrorType | Errors.GlobalErrorType
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.
|
|
491
|
+
*
|
|
492
|
+
* @example
|
|
493
|
+
* ```ts twoslash
|
|
494
|
+
* import { AbiFunction } from 'ox'
|
|
495
|
+
*
|
|
496
|
+
* const formatted = AbiFunction.format({
|
|
497
|
+
* type: 'function',
|
|
498
|
+
* name: 'approve',
|
|
499
|
+
* stateMutability: 'nonpayable',
|
|
500
|
+
* inputs: [
|
|
501
|
+
* {
|
|
502
|
+
* name: 'spender',
|
|
503
|
+
* type: 'address',
|
|
504
|
+
* },
|
|
505
|
+
* {
|
|
506
|
+
* name: 'amount',
|
|
507
|
+
* type: 'uint256',
|
|
508
|
+
* },
|
|
509
|
+
* ],
|
|
510
|
+
* outputs: [{ type: 'bool' }],
|
|
511
|
+
* })
|
|
512
|
+
*
|
|
513
|
+
* formatted
|
|
514
|
+
* // ^?
|
|
515
|
+
*
|
|
516
|
+
*
|
|
517
|
+
* ```
|
|
518
|
+
*
|
|
519
|
+
* @param abiFunction - The ABI Function to format.
|
|
520
|
+
* @returns The formatted ABI Function.
|
|
521
|
+
*/
|
|
522
|
+
export function format<const abiFunction extends AbiFunction>(
|
|
523
|
+
abiFunction: abiFunction | AbiFunction,
|
|
524
|
+
): abitype.FormatAbiItem<abiFunction> {
|
|
525
|
+
return abitype.formatAbiItem(abiFunction) as never
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
export declare namespace format {
|
|
529
|
+
type ErrorType = Errors.GlobalErrorType
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
format.parseError = (error: unknown) =>
|
|
533
|
+
/* v8 ignore next */
|
|
534
|
+
error as format.ErrorType
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.
|
|
538
|
+
*
|
|
539
|
+
* @example
|
|
540
|
+
* ### JSON ABIs
|
|
541
|
+
*
|
|
542
|
+
* ```ts twoslash
|
|
543
|
+
* import { AbiFunction } from 'ox'
|
|
544
|
+
*
|
|
545
|
+
* const approve = AbiFunction.from({
|
|
546
|
+
* type: 'function',
|
|
547
|
+
* name: 'approve',
|
|
548
|
+
* stateMutability: 'nonpayable',
|
|
549
|
+
* inputs: [
|
|
550
|
+
* {
|
|
551
|
+
* name: 'spender',
|
|
552
|
+
* type: 'address',
|
|
553
|
+
* },
|
|
554
|
+
* {
|
|
555
|
+
* name: 'amount',
|
|
556
|
+
* type: 'uint256',
|
|
557
|
+
* },
|
|
558
|
+
* ],
|
|
559
|
+
* outputs: [{ type: 'bool' }],
|
|
560
|
+
* })
|
|
561
|
+
*
|
|
562
|
+
* approve
|
|
563
|
+
* //^?
|
|
564
|
+
*
|
|
565
|
+
*
|
|
566
|
+
*
|
|
567
|
+
*
|
|
568
|
+
*
|
|
569
|
+
*
|
|
570
|
+
*
|
|
571
|
+
*
|
|
572
|
+
*
|
|
573
|
+
*
|
|
574
|
+
*
|
|
575
|
+
*
|
|
576
|
+
* ```
|
|
577
|
+
*
|
|
578
|
+
* @example
|
|
579
|
+
* ### Human Readable ABIs
|
|
580
|
+
*
|
|
581
|
+
* A Human Readable ABI can be parsed into a typed ABI object:
|
|
582
|
+
*
|
|
583
|
+
* ```ts twoslash
|
|
584
|
+
* import { AbiFunction } from 'ox'
|
|
585
|
+
*
|
|
586
|
+
* const approve = AbiFunction.from(
|
|
587
|
+
* 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]
|
|
588
|
+
* )
|
|
589
|
+
*
|
|
590
|
+
* approve
|
|
591
|
+
* //^?
|
|
592
|
+
*
|
|
593
|
+
*
|
|
594
|
+
*
|
|
595
|
+
*
|
|
596
|
+
*
|
|
597
|
+
*
|
|
598
|
+
*
|
|
599
|
+
*
|
|
600
|
+
*
|
|
601
|
+
*
|
|
602
|
+
*
|
|
603
|
+
*
|
|
604
|
+
*
|
|
605
|
+
* ```
|
|
606
|
+
*
|
|
607
|
+
* @example
|
|
608
|
+
* It is possible to specify `struct`s along with your definitions:
|
|
609
|
+
*
|
|
610
|
+
* ```ts twoslash
|
|
611
|
+
* import { AbiFunction } from 'ox'
|
|
612
|
+
*
|
|
613
|
+
* const approve = AbiFunction.from([
|
|
614
|
+
* 'struct Foo { address spender; uint256 amount; }', // [!code hl]
|
|
615
|
+
* 'function approve(Foo foo) returns (bool)',
|
|
616
|
+
* ])
|
|
617
|
+
*
|
|
618
|
+
* approve
|
|
619
|
+
* //^?
|
|
620
|
+
*
|
|
621
|
+
*
|
|
622
|
+
*
|
|
623
|
+
*
|
|
624
|
+
*
|
|
625
|
+
*
|
|
626
|
+
*
|
|
627
|
+
*
|
|
628
|
+
*
|
|
629
|
+
*
|
|
630
|
+
*
|
|
631
|
+
*
|
|
632
|
+
* ```
|
|
633
|
+
*
|
|
634
|
+
*
|
|
635
|
+
*
|
|
636
|
+
* @param abiFunction - The ABI Function to parse.
|
|
637
|
+
* @returns Typed ABI Function.
|
|
638
|
+
*/
|
|
639
|
+
export function from<
|
|
640
|
+
const abiFunction extends AbiFunction | string | readonly string[],
|
|
641
|
+
>(
|
|
642
|
+
abiFunction: (abiFunction | AbiFunction | string | readonly string[]) &
|
|
643
|
+
(
|
|
644
|
+
| (abiFunction extends string ? internal.Signature<abiFunction> : never)
|
|
645
|
+
| (abiFunction extends readonly string[]
|
|
646
|
+
? internal.Signatures<abiFunction>
|
|
647
|
+
: never)
|
|
648
|
+
| AbiFunction
|
|
649
|
+
),
|
|
650
|
+
options: from.Options = {},
|
|
651
|
+
): from.ReturnType<abiFunction> {
|
|
652
|
+
return AbiItem.from(abiFunction as AbiFunction, options) as never
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
export declare namespace from {
|
|
656
|
+
type Options = {
|
|
657
|
+
/**
|
|
658
|
+
* Whether or not to prepare the extracted function (optimization for encoding performance).
|
|
659
|
+
* When `true`, the `hash` property is computed and included in the returned value.
|
|
660
|
+
*
|
|
661
|
+
* @default true
|
|
662
|
+
*/
|
|
663
|
+
prepare?: boolean | undefined
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
type ReturnType<
|
|
667
|
+
abiFunction extends AbiFunction | string | readonly string[],
|
|
668
|
+
> = AbiItem.from.ReturnType<abiFunction>
|
|
669
|
+
|
|
670
|
+
type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
from.parseError = (error: unknown) =>
|
|
674
|
+
/* v8 ignore next */
|
|
675
|
+
error as from.ErrorType
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.
|
|
679
|
+
*
|
|
680
|
+
* @example
|
|
681
|
+
* ### Extracting by Name
|
|
682
|
+
*
|
|
683
|
+
* ABI Functions can be extracted by their name using the `name` option:
|
|
684
|
+
*
|
|
685
|
+
* ```ts twoslash
|
|
686
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
687
|
+
*
|
|
688
|
+
* const abi = Abi.from([
|
|
689
|
+
* 'function foo()',
|
|
690
|
+
* 'event Transfer(address owner, address to, uint256 tokenId)',
|
|
691
|
+
* 'function bar(string a) returns (uint256 x)',
|
|
692
|
+
* ])
|
|
693
|
+
*
|
|
694
|
+
* const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]
|
|
695
|
+
* // ^?
|
|
696
|
+
*
|
|
697
|
+
*
|
|
698
|
+
*
|
|
699
|
+
*
|
|
700
|
+
*
|
|
701
|
+
*
|
|
702
|
+
* ```
|
|
703
|
+
*
|
|
704
|
+
* @example
|
|
705
|
+
* ### Extracting by Selector
|
|
706
|
+
*
|
|
707
|
+
* ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.
|
|
708
|
+
*
|
|
709
|
+
* ```ts twoslash
|
|
710
|
+
* import { Abi, AbiFunction } from 'ox'
|
|
711
|
+
*
|
|
712
|
+
* const abi = Abi.from([
|
|
713
|
+
* 'function foo()',
|
|
714
|
+
* 'event Transfer(address owner, address to, uint256 tokenId)',
|
|
715
|
+
* 'function bar(string a) returns (uint256 x)',
|
|
716
|
+
* ])
|
|
717
|
+
* const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]
|
|
718
|
+
* // ^?
|
|
719
|
+
*
|
|
720
|
+
*
|
|
721
|
+
*
|
|
722
|
+
*
|
|
723
|
+
*
|
|
724
|
+
*
|
|
725
|
+
*
|
|
726
|
+
*
|
|
727
|
+
*
|
|
728
|
+
* ```
|
|
729
|
+
*
|
|
730
|
+
* :::note
|
|
731
|
+
*
|
|
732
|
+
* Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or
|
|
733
|
+
* from a Transaction `input`.
|
|
734
|
+
*
|
|
735
|
+
* :::
|
|
736
|
+
*
|
|
737
|
+
* @param abi - The ABI to extract from.
|
|
738
|
+
* @param name - The name (or selector) of the ABI item to extract.
|
|
739
|
+
* @param options - Extraction options.
|
|
740
|
+
* @returns The ABI item.
|
|
741
|
+
*/
|
|
742
|
+
export function fromAbi<
|
|
743
|
+
const abi extends Abi.Abi | readonly unknown[],
|
|
744
|
+
name extends Name<abi>,
|
|
745
|
+
const args extends
|
|
746
|
+
| AbiItem_internal.ExtractArgs<abi, name>
|
|
747
|
+
| undefined = undefined,
|
|
748
|
+
//
|
|
749
|
+
allNames = Name<abi>,
|
|
750
|
+
>(
|
|
751
|
+
abi: abi | Abi.Abi | readonly unknown[],
|
|
752
|
+
name: Hex.Hex | (name extends allNames ? name : never),
|
|
753
|
+
options?: AbiItem.fromAbi.Options<
|
|
754
|
+
abi,
|
|
755
|
+
name,
|
|
756
|
+
args,
|
|
757
|
+
AbiItem_internal.ExtractArgs<abi, name>
|
|
758
|
+
>,
|
|
759
|
+
): AbiItem.fromAbi.ReturnType<abi, name, args, AbiFunction> {
|
|
760
|
+
const item = AbiItem.fromAbi(abi, name, options as any)
|
|
761
|
+
if (item.type !== 'function')
|
|
762
|
+
throw new AbiItem.NotFoundError({ name, type: 'function' })
|
|
763
|
+
return item as never
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
export declare namespace fromAbi {
|
|
767
|
+
type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
fromAbi.parseError = (error: unknown) =>
|
|
771
|
+
/* v8 ignore next */
|
|
772
|
+
error as fromAbi.ErrorType
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.
|
|
776
|
+
*
|
|
777
|
+
* Useful for computing function selectors for calldata.
|
|
778
|
+
*
|
|
779
|
+
* @example
|
|
780
|
+
* ```ts twoslash
|
|
781
|
+
* import { AbiFunction } from 'ox'
|
|
782
|
+
*
|
|
783
|
+
* const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')
|
|
784
|
+
* // @log: '0x6352211e'
|
|
785
|
+
* ```
|
|
786
|
+
*
|
|
787
|
+
* @example
|
|
788
|
+
* ```ts twoslash
|
|
789
|
+
* import { AbiFunction } from 'ox'
|
|
790
|
+
*
|
|
791
|
+
* const selector = AbiFunction.getSelector({
|
|
792
|
+
* inputs: [{ type: 'uint256' }],
|
|
793
|
+
* name: 'ownerOf',
|
|
794
|
+
* outputs: [],
|
|
795
|
+
* stateMutability: 'view',
|
|
796
|
+
* type: 'function'
|
|
797
|
+
* })
|
|
798
|
+
* // @log: '0x6352211e'
|
|
799
|
+
* ```
|
|
800
|
+
*
|
|
801
|
+
* @param abiItem - The ABI item to compute the selector for.
|
|
802
|
+
* @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.
|
|
803
|
+
*/
|
|
804
|
+
export function getSelector(abiItem: string | AbiFunction): Hex.Hex {
|
|
805
|
+
return AbiItem.getSelector(abiItem)
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
export declare namespace getSelector {
|
|
809
|
+
type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
/* v8 ignore next */
|
|
813
|
+
getSelector.parseError = (error: unknown) => error as getSelector.ErrorType
|