<!--
Sitemap:
- [API Reference](/api/)
- [API Reference](/ercs/)
- [Error Handling](/error-handling)
- [Imports & Bundle Size](/imports)
- [Installation](/installation)
- [Platform Compatibility](/platform-compatibility): Platforms compatible with Ox
- [API Reference](/tempo/)
- [API Reference](/webauthn/)
- [Abi](/api/Abi/)
- [AbiConstructor](/api/AbiConstructor/)
- [AbiError](/api/AbiError/)
- [AbiEvent](/api/AbiEvent/)
- [AbiFunction](/api/AbiFunction/)
- [AbiItem](/api/AbiItem/)
- [AbiParameters](/api/AbiParameters/)
- [AccessList](/api/AccessList/)
- [AccountProof](/api/AccountProof/)
- [Address](/api/Address/)
- [AesGcm](/api/AesGcm/)
- [Authorization](/api/Authorization/)
- [Base32](/api/Base32/)
- [Base58](/api/Base58/)
- [Base64](/api/Base64/)
- [Bech32m](/api/Bech32m/)
- [BinaryStateTree](/api/BinaryStateTree/)
- [BlobCells](/api/BlobCells/)
- [Blobs](/api/Blobs/)
- [Block](/api/Block/)
- [BlockOverrides](/api/BlockOverrides/)
- [Bloom](/api/Bloom/)
- [Bls](/api/Bls/)
- [BlsPoint](/api/BlsPoint/)
- [Bytes](/api/Bytes/)
- [Cbor](/api/Cbor/)
- [CompactSize](/api/CompactSize/)
- [ContractAddress](/api/ContractAddress/)
- [CoseKey](/api/CoseKey/)
- [Ed25519](/api/Ed25519/)
- [Ens](/api/Ens/)
- [Fee](/api/Fee/)
- [Filter](/api/Filter/)
- [Hash](/api/Hash/)
- [HdKey](/api/HdKey/)
- [Hex](/api/Hex/)
- [Json](/api/Json/)
- [Keystore](/api/Keystore/)
- [Kzg](/api/Kzg/)
- [Log](/api/Log/)
- [Mnemonic](/api/Mnemonic/)
- [P256](/api/P256/)
- [PersonalMessage](/api/PersonalMessage/)
- [Provider](/api/Provider/)
- [PublicKey](/api/PublicKey/)
- [Rlp](/api/Rlp/)
- [RpcRequest](/api/RpcRequest/)
- [RpcResponse](/api/RpcResponse/)
- [RpcTransport](/api/RpcTransport/)
- [Secp256k1](/api/Secp256k1/)
- [Signature](/api/Signature/)
- [Siwe](/api/Siwe/)
- [StateOverrides](/api/StateOverrides/)
- [TransactionEnvelope](/api/TransactionEnvelope/)
- [TxEnvelopeEip1559](/api/TxEnvelopeEip1559/)
- [TxEnvelopeEip2930](/api/TxEnvelopeEip2930/)
- [TxEnvelopeEip4844](/api/TxEnvelopeEip4844/)
- [TxEnvelopeEip7702](/api/TxEnvelopeEip7702/)
- [TxEnvelopeLegacy](/api/TxEnvelopeLegacy/)
- [TypedData](/api/TypedData/)
- [ValidatorData](/api/ValidatorData/)
- [Value](/api/Value/)
- [WebAuthnP256](/api/WebAuthnP256/)
- [WebCryptoP256](/api/WebCryptoP256/)
- [Withdrawal](/api/Withdrawal/)
- [X25519](/api/X25519/)
- [Application Binary Interface (ABI)](/guides/abi)
- [Bytes & Hex](/guides/bytes-hex)
- [ECDSA & Signers](/guides/ecdsa)
- [EIP-1193 Providers](/guides/eip-1193)
- [AES-GCM Encryption](/guides/encryption)
- [JSON-RPC](/guides/json-rpc)
- [Mnemonics](/guides/mnemonics)
- [Recursive Length Prefix (RLP)](/guides/rlp)
- [Signed & Typed Data](/guides/signed-data)
- [Sign-In With Ethereum (SIWE)](/guides/siwe)
- [Transaction Envelopes](/guides/transaction-envelopes)
- [WebAuthn Signers](/guides/webauthn)
- [Abi.format](/api/Abi/format)
- [Abi.from](/api/Abi/from)
- [Abi Types](/api/Abi/types)
- [AbiConstructor.decode](/api/AbiConstructor/decode)
- [AbiConstructor.encode](/api/AbiConstructor/encode)
- [AbiConstructor Errors](/api/AbiConstructor/errors)
- [AbiConstructor.format](/api/AbiConstructor/format)
- [AbiConstructor.from](/api/AbiConstructor/from)
- [AbiConstructor.fromAbi](/api/AbiConstructor/fromAbi)
- [AbiConstructor Types](/api/AbiConstructor/types)
- [AbiError.decode](/api/AbiError/decode)
- [AbiError.encode](/api/AbiError/encode)
- [AbiError.extract](/api/AbiError/extract)
- [AbiError.format](/api/AbiError/format)
- [AbiError.from](/api/AbiError/from)
- [AbiError.fromAbi](/api/AbiError/fromAbi)
- [AbiError.getSelector](/api/AbiError/getSelector)
- [AbiError Types](/api/AbiError/types)
- [AbiEvent.assertArgs](/api/AbiEvent/assertArgs)
- [AbiEvent.decode](/api/AbiEvent/decode)
- [AbiEvent.decodeLog](/api/AbiEvent/decodeLog)
- [AbiEvent.encode](/api/AbiEvent/encode)
- [AbiEvent Errors](/api/AbiEvent/errors)
- [AbiEvent.extractLogs](/api/AbiEvent/extractLogs)
- [AbiEvent.format](/api/AbiEvent/format)
- [AbiEvent.from](/api/AbiEvent/from)
- [AbiEvent.fromAbi](/api/AbiEvent/fromAbi)
- [AbiEvent.getSelector](/api/AbiEvent/getSelector)
- [AbiEvent Types](/api/AbiEvent/types)
- [AbiFunction.decodeData](/api/AbiFunction/decodeData)
- [AbiFunction.decodeResult](/api/AbiFunction/decodeResult)
- [AbiFunction.encodeData](/api/AbiFunction/encodeData)
- [AbiFunction.encodeResult](/api/AbiFunction/encodeResult)
- [AbiFunction.format](/api/AbiFunction/format)
- [AbiFunction.from](/api/AbiFunction/from)
- [AbiFunction.fromAbi](/api/AbiFunction/fromAbi)
- [AbiFunction.getSelector](/api/AbiFunction/getSelector)
- [AbiFunction Types](/api/AbiFunction/types)
- [AbiItem Errors](/api/AbiItem/errors)
- [AbiItem.format](/api/AbiItem/format)
- [AbiItem.from](/api/AbiItem/from)
- [AbiItem.fromAbi](/api/AbiItem/fromAbi)
- [AbiItem.getSelector](/api/AbiItem/getSelector)
- [AbiItem.getSignature](/api/AbiItem/getSignature)
- [AbiItem.getSignatureHash](/api/AbiItem/getSignatureHash)
- [AbiItem Types](/api/AbiItem/types)
- [AbiParameters.decode](/api/AbiParameters/decode)
- [AbiParameters.encode](/api/AbiParameters/encode)
- [AbiParameters.encodePacked](/api/AbiParameters/encodePacked)
- [AbiParameters Errors](/api/AbiParameters/errors)
- [AbiParameters.format](/api/AbiParameters/format)
- [AbiParameters.from](/api/AbiParameters/from)
- [AbiParameters Types](/api/AbiParameters/types)
- [AccessList Errors](/api/AccessList/errors)
- [AccessList.fromTupleList](/api/AccessList/fromTupleList)
- [AccessList.toTupleList](/api/AccessList/toTupleList)
- [AccessList Types](/api/AccessList/types)
- [AccountProof.fromRpc](/api/AccountProof/fromRpc)
- [AccountProof.toRpc](/api/AccountProof/toRpc)
- [AccountProof Types](/api/AccountProof/types)
- [Address.assert](/api/Address/assert)
- [Address.checksum](/api/Address/checksum)
- [Address Errors](/api/Address/errors)
- [Address.from](/api/Address/from)
- [Address.fromPublicKey](/api/Address/fromPublicKey)
- [Address.isEqual](/api/Address/isEqual)
- [Address Types](/api/Address/types)
- [Address.validate](/api/Address/validate)
- [AesGcm.decrypt](/api/AesGcm/decrypt)
- [AesGcm.encrypt](/api/AesGcm/encrypt)
- [AesGcm.getKey](/api/AesGcm/getKey)
- [AesGcm.randomSalt](/api/AesGcm/randomSalt)
- [Authorization.from](/api/Authorization/from)
- [Authorization.fromRpc](/api/Authorization/fromRpc)
- [Authorization.fromRpcList](/api/Authorization/fromRpcList)
- [Authorization.fromTuple](/api/Authorization/fromTuple)
- [Authorization.fromTupleList](/api/Authorization/fromTupleList)
- [Authorization.getSignPayload](/api/Authorization/getSignPayload)
- [Authorization.hash](/api/Authorization/hash)
- [Authorization.toRpc](/api/Authorization/toRpc)
- [Authorization.toRpcList](/api/Authorization/toRpcList)
- [Authorization.toTuple](/api/Authorization/toTuple)
- [Authorization.toTupleList](/api/Authorization/toTupleList)
- [Authorization Types](/api/Authorization/types)
- [Base32 Errors](/api/Base32/errors)
- [Base32.fromBytes](/api/Base32/fromBytes)
- [Base32.fromHex](/api/Base32/fromHex)
- [Base32.toBytes](/api/Base32/toBytes)
- [Base32.toHex](/api/Base32/toHex)
- [Base58 Errors](/api/Base58/errors)
- [Base58.fromBytes](/api/Base58/fromBytes)
- [Base58.fromHex](/api/Base58/fromHex)
- [Base58.fromString](/api/Base58/fromString)
- [Base58.toBytes](/api/Base58/toBytes)
- [Base58.toHex](/api/Base58/toHex)
- [Base58.toString](/api/Base58/toString)
- [Base64 Errors](/api/Base64/errors)
- [Base64.fromBytes](/api/Base64/fromBytes)
- [Base64.fromHex](/api/Base64/fromHex)
- [Base64.fromString](/api/Base64/fromString)
- [Base64.toBytes](/api/Base64/toBytes)
- [Base64.toHex](/api/Base64/toHex)
- [Base64.toString](/api/Base64/toString)
- [Bech32m.decode](/api/Bech32m/decode)
- [Bech32m.encode](/api/Bech32m/encode)
- [Bech32m Errors](/api/Bech32m/errors)
- [Bech32m Types](/api/Bech32m/types)
- [BinaryStateTree.create](/api/BinaryStateTree/create)
- [BinaryStateTree.insert](/api/BinaryStateTree/insert)
- [BinaryStateTree.merkelize](/api/BinaryStateTree/merkelize)
- [BinaryStateTree Types](/api/BinaryStateTree/types)
- [BlobCells Errors](/api/BlobCells/errors)
- [BlobCells.fromBlob](/api/BlobCells/fromBlob)
- [BlobCells.recover](/api/BlobCells/recover)
- [BlobCells.toDataColumns](/api/BlobCells/toDataColumns)
- [BlobCells Types](/api/BlobCells/types)
- [BlobCells.verify](/api/BlobCells/verify)
- [Blobs.commitmentsToVersionedHashes](/api/Blobs/commitmentsToVersionedHashes)
- [Blobs.commitmentToVersionedHash](/api/Blobs/commitmentToVersionedHash)
- [Blobs Errors](/api/Blobs/errors)
- [Blobs.from](/api/Blobs/from)
- [Blobs.to](/api/Blobs/to)
- [Blobs.toBytes](/api/Blobs/toBytes)
- [Blobs.toCellProofs](/api/Blobs/toCellProofs)
- [Blobs.toCommitments](/api/Blobs/toCommitments)
- [Blobs.toHex](/api/Blobs/toHex)
- [Blobs.toVersionedHashes](/api/Blobs/toVersionedHashes)
- [Blobs Types](/api/Blobs/types)
- [Block.fromRpc](/api/Block/fromRpc)
- [Block.toRpc](/api/Block/toRpc)
- [Block Types](/api/Block/types)
- [BlockOverrides.fromRpc](/api/BlockOverrides/fromRpc)
- [BlockOverrides.toRpc](/api/BlockOverrides/toRpc)
- [BlockOverrides Types](/api/BlockOverrides/types)
- [Bloom.contains](/api/Bloom/contains)
- [Bloom.containsHash](/api/Bloom/containsHash)
- [Bloom.containsPrepared](/api/Bloom/containsPrepared)
- [Bloom Errors](/api/Bloom/errors)
- [Bloom.prepare](/api/Bloom/prepare)
- [Bloom Types](/api/Bloom/types)
- [Bloom.validate](/api/Bloom/validate)
- [Bls.aggregate](/api/Bls/aggregate)
- [Bls.createKeyPair](/api/Bls/createKeyPair)
- [Bls.getPublicKey](/api/Bls/getPublicKey)
- [Bls.randomPrivateKey](/api/Bls/randomPrivateKey)
- [Bls.sign](/api/Bls/sign)
- [Bls Types](/api/Bls/types)
- [Bls.verify](/api/Bls/verify)
- [BlsPoint.fromBytes](/api/BlsPoint/fromBytes)
- [BlsPoint.fromHex](/api/BlsPoint/fromHex)
- [BlsPoint.toBytes](/api/BlsPoint/toBytes)
- [BlsPoint.toHex](/api/BlsPoint/toHex)
- [BlsPoint Types](/api/BlsPoint/types)
- [Bytes.assert](/api/Bytes/assert)
- [Bytes.concat](/api/Bytes/concat)
- [Bytes Errors](/api/Bytes/errors)
- [Bytes.from](/api/Bytes/from)
- [Bytes.fromArray](/api/Bytes/fromArray)
- [Bytes.fromBoolean](/api/Bytes/fromBoolean)
- [Bytes.fromHex](/api/Bytes/fromHex)
- [Bytes.fromNumber](/api/Bytes/fromNumber)
- [Bytes.fromString](/api/Bytes/fromString)
- [Bytes.isEqual](/api/Bytes/isEqual)
- [Bytes.padLeft](/api/Bytes/padLeft)
- [Bytes.padRight](/api/Bytes/padRight)
- [Bytes.random](/api/Bytes/random)
- [Bytes.size](/api/Bytes/size)
- [Bytes.slice](/api/Bytes/slice)
- [Bytes.toBigInt](/api/Bytes/toBigInt)
- [Bytes.toBoolean](/api/Bytes/toBoolean)
- [Bytes.toHex](/api/Bytes/toHex)
- [Bytes.toNumber](/api/Bytes/toNumber)
- [Bytes.toString](/api/Bytes/toString)
- [Bytes.trimLeft](/api/Bytes/trimLeft)
- [Bytes.trimRight](/api/Bytes/trimRight)
- [Bytes Types](/api/Bytes/types)
- [Bytes.validate](/api/Bytes/validate)
- [Cbor.decode](/api/Cbor/decode)
- [Cbor.encode](/api/Cbor/encode)
- [Cbor Errors](/api/Cbor/errors)
- [CompactSize Errors](/api/CompactSize/errors)
- [CompactSize.fromBytes](/api/CompactSize/fromBytes)
- [CompactSize.fromHex](/api/CompactSize/fromHex)
- [CompactSize.toBytes](/api/CompactSize/toBytes)
- [CompactSize.toHex](/api/CompactSize/toHex)
- [ContractAddress.from](/api/ContractAddress/from)
- [ContractAddress.fromCreate](/api/ContractAddress/fromCreate)
- [ContractAddress.fromCreate2](/api/ContractAddress/fromCreate2)
- [CoseKey Errors](/api/CoseKey/errors)
- [CoseKey.fromPublicKey](/api/CoseKey/fromPublicKey)
- [CoseKey.toPublicKey](/api/CoseKey/toPublicKey)
- [Ed25519.createKeyPair](/api/Ed25519/createKeyPair)
- [Ed25519.getPublicKey](/api/Ed25519/getPublicKey)
- [Ed25519.randomPrivateKey](/api/Ed25519/randomPrivateKey)
- [Ed25519.sign](/api/Ed25519/sign)
- [Ed25519.toX25519PrivateKey](/api/Ed25519/toX25519PrivateKey)
- [Ed25519.toX25519PublicKey](/api/Ed25519/toX25519PublicKey)
- [Ed25519.verify](/api/Ed25519/verify)
- [Ens Errors](/api/Ens/errors)
- [Ens.labelhash](/api/Ens/labelhash)
- [Ens.namehash](/api/Ens/namehash)
- [Ens.normalize](/api/Ens/normalize)
- [Ens.toCoinType](/api/Ens/toCoinType)
- [Fee.effectiveGasPrice](/api/Fee/effectiveGasPrice)
- [Fee.estimateMaxFeePerGas](/api/Fee/estimateMaxFeePerGas)
- [Fee.fromHistoryRpc](/api/Fee/fromHistoryRpc)
- [Fee.toHistoryRpc](/api/Fee/toHistoryRpc)
- [Fee Types](/api/Fee/types)
- [Filter.fromRpc](/api/Filter/fromRpc)
- [Filter.toRpc](/api/Filter/toRpc)
- [Filter Types](/api/Filter/types)
- [Hash.hmac256](/api/Hash/hmac256)
- [Hash.keccak256](/api/Hash/keccak256)
- [Hash.ripemd160](/api/Hash/ripemd160)
- [Hash.sha256](/api/Hash/sha256)
- [Hash.validate](/api/Hash/validate)
- [HdKey.fromExtendedKey](/api/HdKey/fromExtendedKey)
- [HdKey.fromJson](/api/HdKey/fromJson)
- [HdKey.fromSeed](/api/HdKey/fromSeed)
- [HdKey.path](/api/HdKey/path)
- [HdKey Types](/api/HdKey/types)
- [Hex.assert](/api/Hex/assert)
- [Hex.concat](/api/Hex/concat)
- [Hex Errors](/api/Hex/errors)
- [Hex.from](/api/Hex/from)
- [Hex.fromBoolean](/api/Hex/fromBoolean)
- [Hex.fromBytes](/api/Hex/fromBytes)
- [Hex.fromNumber](/api/Hex/fromNumber)
- [Hex.fromString](/api/Hex/fromString)
- [Hex.isEqual](/api/Hex/isEqual)
- [Hex.padLeft](/api/Hex/padLeft)
- [Hex.padRight](/api/Hex/padRight)
- [Hex.random](/api/Hex/random)
- [Hex.size](/api/Hex/size)
- [Hex.slice](/api/Hex/slice)
- [Hex.toBigInt](/api/Hex/toBigInt)
- [Hex.toBoolean](/api/Hex/toBoolean)
- [Hex.toBytes](/api/Hex/toBytes)
- [Hex.toNumber](/api/Hex/toNumber)
- [Hex.toString](/api/Hex/toString)
- [Hex.trimLeft](/api/Hex/trimLeft)
- [Hex.trimRight](/api/Hex/trimRight)
- [Hex Types](/api/Hex/types)
- [Hex.validate](/api/Hex/validate)
- [Json.canonicalize](/api/Json/canonicalize)
- [Json.parse](/api/Json/parse)
- [Json.stringify](/api/Json/stringify)
- [Keystore.decrypt](/api/Keystore/decrypt)
- [Keystore.encrypt](/api/Keystore/encrypt)
- [Keystore.pbkdf2](/api/Keystore/pbkdf2)
- [Keystore.pbkdf2Async](/api/Keystore/pbkdf2Async)
- [Keystore.scrypt](/api/Keystore/scrypt)
- [Keystore.scryptAsync](/api/Keystore/scryptAsync)
- [Keystore.toKey](/api/Keystore/toKey)
- [Keystore.toKeyAsync](/api/Keystore/toKeyAsync)
- [Keystore Types](/api/Keystore/types)
- [Kzg.from](/api/Kzg/from)
- [Kzg Types](/api/Kzg/types)
- [Log.fromRpc](/api/Log/fromRpc)
- [Log.toRpc](/api/Log/toRpc)
- [Log Types](/api/Log/types)
- [Mnemonic.path](/api/Mnemonic/path)
- [Mnemonic.random](/api/Mnemonic/random)
- [Mnemonic.toHdKey](/api/Mnemonic/toHdKey)
- [Mnemonic.toPrivateKey](/api/Mnemonic/toPrivateKey)
- [Mnemonic.toSeed](/api/Mnemonic/toSeed)
- [Mnemonic.validate](/api/Mnemonic/validate)
- [P256.createKeyPair](/api/P256/createKeyPair)
- [P256.getPublicKey](/api/P256/getPublicKey)
- [P256.getSharedSecret](/api/P256/getSharedSecret)
- [P256.randomPrivateKey](/api/P256/randomPrivateKey)
- [P256.recoverPublicKey](/api/P256/recoverPublicKey)
- [P256.sign](/api/P256/sign)
- [P256.verify](/api/P256/verify)
- [PersonalMessage.encode](/api/PersonalMessage/encode)
- [PersonalMessage.getSignPayload](/api/PersonalMessage/getSignPayload)
- [Provider.createEmitter](/api/Provider/createEmitter)
- [Provider Errors](/api/Provider/errors)
- [Provider.from](/api/Provider/from)
- [Provider.parseError](/api/Provider/parseError)
- [Provider Types](/api/Provider/types)
- [PublicKey.assert](/api/PublicKey/assert)
- [PublicKey.compress](/api/PublicKey/compress)
- [PublicKey Errors](/api/PublicKey/errors)
- [PublicKey.from](/api/PublicKey/from)
- [PublicKey.fromBytes](/api/PublicKey/fromBytes)
- [PublicKey.fromHex](/api/PublicKey/fromHex)
- [PublicKey.toBytes](/api/PublicKey/toBytes)
- [PublicKey.toHex](/api/PublicKey/toHex)
- [PublicKey Types](/api/PublicKey/types)
- [PublicKey.validate](/api/PublicKey/validate)
- [Rlp.from](/api/Rlp/from)
- [Rlp.fromBytes](/api/Rlp/fromBytes)
- [Rlp.fromHex](/api/Rlp/fromHex)
- [Rlp.toBytes](/api/Rlp/toBytes)
- [Rlp.toHex](/api/Rlp/toHex)
- [RpcRequest.createStore](/api/RpcRequest/createStore)
- [RpcRequest.from](/api/RpcRequest/from)
- [RpcRequest Types](/api/RpcRequest/types)
- [RpcResponse Errors](/api/RpcResponse/errors)
- [RpcResponse.from](/api/RpcResponse/from)
- [RpcResponse.parse](/api/RpcResponse/parse)
- [RpcResponse.parseError](/api/RpcResponse/parseError)
- [RpcResponse Types](/api/RpcResponse/types)
- [RpcTransport Errors](/api/RpcTransport/errors)
- [RpcTransport.fromHttp](/api/RpcTransport/fromHttp)
- [RpcTransport Types](/api/RpcTransport/types)
- [Secp256k1.createKeyPair](/api/Secp256k1/createKeyPair)
- [Secp256k1.getPublicKey](/api/Secp256k1/getPublicKey)
- [Secp256k1.getSharedSecret](/api/Secp256k1/getSharedSecret)
- [Secp256k1.randomPrivateKey](/api/Secp256k1/randomPrivateKey)
- [Secp256k1.recoverAddress](/api/Secp256k1/recoverAddress)
- [Secp256k1.recoverPublicKey](/api/Secp256k1/recoverPublicKey)
- [Secp256k1.sign](/api/Secp256k1/sign)
- [Secp256k1.verify](/api/Secp256k1/verify)
- [Signature.assert](/api/Signature/assert)
- [Signature Errors](/api/Signature/errors)
- [Signature.extract](/api/Signature/extract)
- [Signature.from](/api/Signature/from)
- [Signature.fromBytes](/api/Signature/fromBytes)
- [Signature.fromCompactBytes](/api/Signature/fromCompactBytes)
- [Signature.fromDerBytes](/api/Signature/fromDerBytes)
- [Signature.fromDerHex](/api/Signature/fromDerHex)
- [Signature.fromHex](/api/Signature/fromHex)
- [Signature.fromLegacy](/api/Signature/fromLegacy)
- [Signature.fromRecoveredBytes](/api/Signature/fromRecoveredBytes)
- [Signature.fromRpc](/api/Signature/fromRpc)
- [Signature.fromTuple](/api/Signature/fromTuple)
- [Signature.toBytes](/api/Signature/toBytes)
- [Signature.toCompactBytes](/api/Signature/toCompactBytes)
- [Signature.toDerBytes](/api/Signature/toDerBytes)
- [Signature.toDerHex](/api/Signature/toDerHex)
- [Signature.toHex](/api/Signature/toHex)
- [Signature.toLegacy](/api/Signature/toLegacy)
- [Signature.toRecoveredBytes](/api/Signature/toRecoveredBytes)
- [Signature.toRpc](/api/Signature/toRpc)
- [Signature.toTuple](/api/Signature/toTuple)
- [Signature Types](/api/Signature/types)
- [Signature.validate](/api/Signature/validate)
- [Signature.vToYParity](/api/Signature/vToYParity)
- [Signature.yParityToV](/api/Signature/yParityToV)
- [Siwe.createMessage](/api/Siwe/createMessage)
- [Siwe Errors](/api/Siwe/errors)
- [Siwe.generateNonce](/api/Siwe/generateNonce)
- [Siwe.isUri](/api/Siwe/isUri)
- [Siwe.parseMessage](/api/Siwe/parseMessage)
- [Siwe Types](/api/Siwe/types)
- [Siwe.validateMessage](/api/Siwe/validateMessage)
- [StateOverrides.fromRpc](/api/StateOverrides/fromRpc)
- [StateOverrides.toRpc](/api/StateOverrides/toRpc)
- [StateOverrides Types](/api/StateOverrides/types)
- [TransactionEnvelope.assert](/api/TransactionEnvelope/assert)
- [TransactionEnvelope.deserialize](/api/TransactionEnvelope/deserialize)
- [TransactionEnvelope Errors](/api/TransactionEnvelope/errors)
- [TransactionEnvelope.from](/api/TransactionEnvelope/from)
- [TransactionEnvelope.getSerializedType](/api/TransactionEnvelope/getSerializedType)
- [TransactionEnvelope.getSignPayload](/api/TransactionEnvelope/getSignPayload)
- [TransactionEnvelope.getType](/api/TransactionEnvelope/getType)
- [TransactionEnvelope.hash](/api/TransactionEnvelope/hash)
- [TransactionEnvelope.serialize](/api/TransactionEnvelope/serialize)
- [TransactionEnvelope.toRpc](/api/TransactionEnvelope/toRpc)
- [TransactionEnvelope.toTransactionRequest](/api/TransactionEnvelope/toTransactionRequest)
- [TransactionEnvelope Types](/api/TransactionEnvelope/types)
- [TransactionEnvelope.validate](/api/TransactionEnvelope/validate)
- [TxEnvelopeEip1559.assert](/api/TxEnvelopeEip1559/assert)
- [TxEnvelopeEip1559.deserialize](/api/TxEnvelopeEip1559/deserialize)
- [TxEnvelopeEip1559.from](/api/TxEnvelopeEip1559/from)
- [TxEnvelopeEip1559.getSignPayload](/api/TxEnvelopeEip1559/getSignPayload)
- [TxEnvelopeEip1559.hash](/api/TxEnvelopeEip1559/hash)
- [TxEnvelopeEip1559.serialize](/api/TxEnvelopeEip1559/serialize)
- [TxEnvelopeEip1559.toRpc](/api/TxEnvelopeEip1559/toRpc)
- [TxEnvelopeEip1559 Types](/api/TxEnvelopeEip1559/types)
- [TxEnvelopeEip1559.validate](/api/TxEnvelopeEip1559/validate)
- [TxEnvelopeEip2930.assert](/api/TxEnvelopeEip2930/assert)
- [TxEnvelopeEip2930.deserialize](/api/TxEnvelopeEip2930/deserialize)
- [TxEnvelopeEip2930.from](/api/TxEnvelopeEip2930/from)
- [TxEnvelopeEip2930.getSignPayload](/api/TxEnvelopeEip2930/getSignPayload)
- [TxEnvelopeEip2930.hash](/api/TxEnvelopeEip2930/hash)
- [TxEnvelopeEip2930.serialize](/api/TxEnvelopeEip2930/serialize)
- [TxEnvelopeEip2930.toRpc](/api/TxEnvelopeEip2930/toRpc)
- [TxEnvelopeEip2930 Types](/api/TxEnvelopeEip2930/types)
- [TxEnvelopeEip2930.validate](/api/TxEnvelopeEip2930/validate)
- [TxEnvelopeEip4844.assert](/api/TxEnvelopeEip4844/assert)
- [TxEnvelopeEip4844.deserialize](/api/TxEnvelopeEip4844/deserialize)
- [TxEnvelopeEip4844 Errors](/api/TxEnvelopeEip4844/errors)
- [TxEnvelopeEip4844.from](/api/TxEnvelopeEip4844/from)
- [TxEnvelopeEip4844.getSignPayload](/api/TxEnvelopeEip4844/getSignPayload)
- [TxEnvelopeEip4844.hash](/api/TxEnvelopeEip4844/hash)
- [TxEnvelopeEip4844.serialize](/api/TxEnvelopeEip4844/serialize)
- [TxEnvelopeEip4844.toRpc](/api/TxEnvelopeEip4844/toRpc)
- [TxEnvelopeEip4844 Types](/api/TxEnvelopeEip4844/types)
- [TxEnvelopeEip4844.validate](/api/TxEnvelopeEip4844/validate)
- [TxEnvelopeEip7702.assert](/api/TxEnvelopeEip7702/assert)
- [TxEnvelopeEip7702.deserialize](/api/TxEnvelopeEip7702/deserialize)
- [TxEnvelopeEip7702.from](/api/TxEnvelopeEip7702/from)
- [TxEnvelopeEip7702.getSignPayload](/api/TxEnvelopeEip7702/getSignPayload)
- [TxEnvelopeEip7702.hash](/api/TxEnvelopeEip7702/hash)
- [TxEnvelopeEip7702.serialize](/api/TxEnvelopeEip7702/serialize)
- [TxEnvelopeEip7702.toRpc](/api/TxEnvelopeEip7702/toRpc)
- [TxEnvelopeEip7702 Types](/api/TxEnvelopeEip7702/types)
- [TxEnvelopeEip7702.validate](/api/TxEnvelopeEip7702/validate)
- [TxEnvelopeLegacy.assert](/api/TxEnvelopeLegacy/assert)
- [TxEnvelopeLegacy.deserialize](/api/TxEnvelopeLegacy/deserialize)
- [TxEnvelopeLegacy.from](/api/TxEnvelopeLegacy/from)
- [TxEnvelopeLegacy.getSignPayload](/api/TxEnvelopeLegacy/getSignPayload)
- [TxEnvelopeLegacy.hash](/api/TxEnvelopeLegacy/hash)
- [TxEnvelopeLegacy.serialize](/api/TxEnvelopeLegacy/serialize)
- [TxEnvelopeLegacy.toRpc](/api/TxEnvelopeLegacy/toRpc)
- [TxEnvelopeLegacy Types](/api/TxEnvelopeLegacy/types)
- [TxEnvelopeLegacy.validate](/api/TxEnvelopeLegacy/validate)
- [TypedData.assert](/api/TypedData/assert)
- [TypedData.domainSeparator](/api/TypedData/domainSeparator)
- [TypedData.encode](/api/TypedData/encode)
- [TypedData.encodeType](/api/TypedData/encodeType)
- [TypedData Errors](/api/TypedData/errors)
- [TypedData.extractEip712DomainTypes](/api/TypedData/extractEip712DomainTypes)
- [TypedData.getSignPayload](/api/TypedData/getSignPayload)
- [TypedData.hashDomain](/api/TypedData/hashDomain)
- [TypedData.hashStruct](/api/TypedData/hashStruct)
- [TypedData.serialize](/api/TypedData/serialize)
- [TypedData Types](/api/TypedData/types)
- [TypedData.validate](/api/TypedData/validate)
- [ValidatorData.encode](/api/ValidatorData/encode)
- [ValidatorData.getSignPayload](/api/ValidatorData/getSignPayload)
- [Value Errors](/api/Value/errors)
- [Value.format](/api/Value/format)
- [Value.formatEther](/api/Value/formatEther)
- [Value.formatGwei](/api/Value/formatGwei)
- [Value.from](/api/Value/from)
- [Value.fromEther](/api/Value/fromEther)
- [Value.fromGwei](/api/Value/fromGwei)
- [WebAuthnP256.createCredential](/api/WebAuthnP256/createCredential)
- [WebAuthnP256.sign](/api/WebAuthnP256/sign)
- [WebAuthnP256 Types](/api/WebAuthnP256/types)
- [WebAuthnP256.verify](/api/WebAuthnP256/verify)
- [WebCryptoP256.createKeyPair](/api/WebCryptoP256/createKeyPair)
- [WebCryptoP256.createKeyPairECDH](/api/WebCryptoP256/createKeyPairECDH)
- [WebCryptoP256 Errors](/api/WebCryptoP256/errors)
- [WebCryptoP256.getSharedSecret](/api/WebCryptoP256/getSharedSecret)
- [WebCryptoP256.sign](/api/WebCryptoP256/sign)
- [WebCryptoP256.verify](/api/WebCryptoP256/verify)
- [Withdrawal.fromRpc](/api/Withdrawal/fromRpc)
- [Withdrawal.toRpc](/api/Withdrawal/toRpc)
- [Withdrawal Types](/api/Withdrawal/types)
- [X25519.createKeyPair](/api/X25519/createKeyPair)
- [X25519.getPublicKey](/api/X25519/getPublicKey)
- [X25519.getSharedSecret](/api/X25519/getSharedSecret)
- [X25519.randomPrivateKey](/api/X25519/randomPrivateKey)
- [EntryPoint](/ercs/erc4337/EntryPoint/)
- [RpcSchema](/ercs/erc4337/RpcSchema/)
- [UserOperation](/ercs/erc4337/UserOperation/)
- [UserOperationGas](/ercs/erc4337/UserOperationGas/)
- [UserOperationReceipt](/ercs/erc4337/UserOperationReceipt/)
- [SignatureErc6492](/ercs/erc6492/SignatureErc6492/)
- [Calls](/ercs/erc7821/Calls/)
- [Execute](/ercs/erc7821/Execute/)
- [SignatureErc8010](/ercs/erc8010/SignatureErc8010/)
- [Attribution](/ercs/erc8021/Attribution/)
- [AuthorizationTempo](/tempo/reference/AuthorizationTempo/)
- [KeyAuthorization](/tempo/reference/KeyAuthorization/)
- [Period](/tempo/reference/Period/)
- [PoolId](/tempo/reference/PoolId/)
- [RpcSchemaTempo](/tempo/reference/RpcSchemaTempo/)
- [SignatureEnvelope](/tempo/reference/SignatureEnvelope/)
- [Tick](/tempo/reference/Tick/)
- [TokenId](/tempo/reference/TokenId/)
- [TokenRole](/tempo/reference/TokenRole/)
- [Transaction](/tempo/reference/Transaction/)
- [TransactionReceipt](/tempo/reference/TransactionReceipt/)
- [TransactionRequest](/tempo/reference/TransactionRequest/)
- [TxEnvelopeTempo](/tempo/reference/TxEnvelopeTempo/)
- [VirtualAddress](/tempo/reference/VirtualAddress/)
- [VirtualMaster](/tempo/reference/VirtualMaster/)
- [ZoneId](/tempo/reference/ZoneId/)
- [ZoneRpcAuthentication](/tempo/reference/ZoneRpcAuthentication/)
- [Authentication](/webauthn/webauthn/Authentication/)
- [Authenticator](/webauthn/webauthn/Authenticator/)
- [Credential_2](/webauthn/webauthn/Credential/)
- [Registration](/webauthn/webauthn/Registration/)
- [EntryPoint Types](/ercs/erc4337/EntryPoint/types)
- [RpcSchema.from](/ercs/erc4337/RpcSchema/from)
- [RpcSchema Types](/ercs/erc4337/RpcSchema/types)
- [UserOperation.from](/ercs/erc4337/UserOperation/from)
- [UserOperation.fromPacked](/ercs/erc4337/UserOperation/fromPacked)
- [UserOperation.fromRpc](/ercs/erc4337/UserOperation/fromRpc)
- [UserOperation.getSignPayload](/ercs/erc4337/UserOperation/getSignPayload)
- [UserOperation.hash](/ercs/erc4337/UserOperation/hash)
- [UserOperation.toInitCode](/ercs/erc4337/UserOperation/toInitCode)
- [UserOperation.toPacked](/ercs/erc4337/UserOperation/toPacked)
- [UserOperation.toRpc](/ercs/erc4337/UserOperation/toRpc)
- [UserOperation.toTypedData](/ercs/erc4337/UserOperation/toTypedData)
- [UserOperation Types](/ercs/erc4337/UserOperation/types)
- [UserOperationGas.fromRpc](/ercs/erc4337/UserOperationGas/fromRpc)
- [UserOperationGas.toRpc](/ercs/erc4337/UserOperationGas/toRpc)
- [UserOperationGas Types](/ercs/erc4337/UserOperationGas/types)
- [UserOperationReceipt.fromRpc](/ercs/erc4337/UserOperationReceipt/fromRpc)
- [UserOperationReceipt.toRpc](/ercs/erc4337/UserOperationReceipt/toRpc)
- [UserOperationReceipt Types](/ercs/erc4337/UserOperationReceipt/types)
- [SignatureErc6492.assert](/ercs/erc6492/SignatureErc6492/assert)
- [SignatureErc6492 Errors](/ercs/erc6492/SignatureErc6492/errors)
- [SignatureErc6492.from](/ercs/erc6492/SignatureErc6492/from)
- [SignatureErc6492 Types](/ercs/erc6492/SignatureErc6492/types)
- [SignatureErc6492.unwrap](/ercs/erc6492/SignatureErc6492/unwrap)
- [SignatureErc6492.validate](/ercs/erc6492/SignatureErc6492/validate)
- [SignatureErc6492.wrap](/ercs/erc6492/SignatureErc6492/wrap)
- [Calls.decode](/ercs/erc7821/Calls/decode)
- [Calls.encode](/ercs/erc7821/Calls/encode)
- [Calls.getAbiParameters](/ercs/erc7821/Calls/getAbiParameters)
- [Calls Types](/ercs/erc7821/Calls/types)
- [Execute.decodeBatchOfBatchesData](/ercs/erc7821/Execute/decodeBatchOfBatchesData)
- [Execute.decodeData](/ercs/erc7821/Execute/decodeData)
- [Execute.encodeBatchOfBatchesData](/ercs/erc7821/Execute/encodeBatchOfBatchesData)
- [Execute.encodeData](/ercs/erc7821/Execute/encodeData)
- [Execute Types](/ercs/erc7821/Execute/types)
- [SignatureErc8010.assert](/ercs/erc8010/SignatureErc8010/assert)
- [SignatureErc8010 Errors](/ercs/erc8010/SignatureErc8010/errors)
- [SignatureErc8010.from](/ercs/erc8010/SignatureErc8010/from)
- [SignatureErc8010 Types](/ercs/erc8010/SignatureErc8010/types)
- [SignatureErc8010.unwrap](/ercs/erc8010/SignatureErc8010/unwrap)
- [SignatureErc8010.validate](/ercs/erc8010/SignatureErc8010/validate)
- [SignatureErc8010.wrap](/ercs/erc8010/SignatureErc8010/wrap)
- [Attribution.fromData](/ercs/erc8021/Attribution/fromData)
- [Attribution.getSchemaId](/ercs/erc8021/Attribution/getSchemaId)
- [Attribution.toDataSuffix](/ercs/erc8021/Attribution/toDataSuffix)
- [Attribution Types](/ercs/erc8021/Attribution/types)
- [AuthorizationTempo.from](/tempo/reference/AuthorizationTempo/from)
- [AuthorizationTempo.fromRpc](/tempo/reference/AuthorizationTempo/fromRpc)
- [AuthorizationTempo.fromRpcList](/tempo/reference/AuthorizationTempo/fromRpcList)
- [AuthorizationTempo.fromTuple](/tempo/reference/AuthorizationTempo/fromTuple)
- [AuthorizationTempo.fromTupleList](/tempo/reference/AuthorizationTempo/fromTupleList)
- [AuthorizationTempo.getSignPayload](/tempo/reference/AuthorizationTempo/getSignPayload)
- [AuthorizationTempo.hash](/tempo/reference/AuthorizationTempo/hash)
- [AuthorizationTempo.toRpc](/tempo/reference/AuthorizationTempo/toRpc)
- [AuthorizationTempo.toRpcList](/tempo/reference/AuthorizationTempo/toRpcList)
- [AuthorizationTempo.toTuple](/tempo/reference/AuthorizationTempo/toTuple)
- [AuthorizationTempo.toTupleList](/tempo/reference/AuthorizationTempo/toTupleList)
- [AuthorizationTempo Types](/tempo/reference/AuthorizationTempo/types)
- [KeyAuthorization.deserialize](/tempo/reference/KeyAuthorization/deserialize)
- [KeyAuthorization.from](/tempo/reference/KeyAuthorization/from)
- [KeyAuthorization.fromRpc](/tempo/reference/KeyAuthorization/fromRpc)
- [KeyAuthorization.fromTuple](/tempo/reference/KeyAuthorization/fromTuple)
- [KeyAuthorization.getSignPayload](/tempo/reference/KeyAuthorization/getSignPayload)
- [KeyAuthorization.hash](/tempo/reference/KeyAuthorization/hash)
- [KeyAuthorization.serialize](/tempo/reference/KeyAuthorization/serialize)
- [KeyAuthorization.toRpc](/tempo/reference/KeyAuthorization/toRpc)
- [KeyAuthorization.toTuple](/tempo/reference/KeyAuthorization/toTuple)
- [KeyAuthorization Types](/tempo/reference/KeyAuthorization/types)
- [Period.days](/tempo/reference/Period/days)
- [Period.hours](/tempo/reference/Period/hours)
- [Period.minutes](/tempo/reference/Period/minutes)
- [Period.months](/tempo/reference/Period/months)
- [Period.seconds](/tempo/reference/Period/seconds)
- [Period.weeks](/tempo/reference/Period/weeks)
- [Period.years](/tempo/reference/Period/years)
- [PoolId.from](/tempo/reference/PoolId/from)
- [RpcSchemaTempo Types](/tempo/reference/RpcSchemaTempo/types)
- [SignatureEnvelope.assert](/tempo/reference/SignatureEnvelope/assert)
- [SignatureEnvelope.deserialize](/tempo/reference/SignatureEnvelope/deserialize)
- [SignatureEnvelope Errors](/tempo/reference/SignatureEnvelope/errors)
- [SignatureEnvelope.extractAddress](/tempo/reference/SignatureEnvelope/extractAddress)
- [SignatureEnvelope.extractPublicKey](/tempo/reference/SignatureEnvelope/extractPublicKey)
- [SignatureEnvelope.from](/tempo/reference/SignatureEnvelope/from)
- [SignatureEnvelope.fromRpc](/tempo/reference/SignatureEnvelope/fromRpc)
- [SignatureEnvelope.getType](/tempo/reference/SignatureEnvelope/getType)
- [SignatureEnvelope.serialize](/tempo/reference/SignatureEnvelope/serialize)
- [SignatureEnvelope.toRpc](/tempo/reference/SignatureEnvelope/toRpc)
- [SignatureEnvelope Types](/tempo/reference/SignatureEnvelope/types)
- [SignatureEnvelope.validate](/tempo/reference/SignatureEnvelope/validate)
- [SignatureEnvelope.verify](/tempo/reference/SignatureEnvelope/verify)
- [Tick Errors](/tempo/reference/Tick/errors)
- [Tick.fromPrice](/tempo/reference/Tick/fromPrice)
- [Tick.toPrice](/tempo/reference/Tick/toPrice)
- [Tick Types](/tempo/reference/Tick/types)
- [TokenId.compute](/tempo/reference/TokenId/compute)
- [TokenId.from](/tempo/reference/TokenId/from)
- [TokenId.fromAddress](/tempo/reference/TokenId/fromAddress)
- [TokenId.toAddress](/tempo/reference/TokenId/toAddress)
- [TokenId Types](/tempo/reference/TokenId/types)
- [TokenRole.serialize](/tempo/reference/TokenRole/serialize)
- [TokenRole Types](/tempo/reference/TokenRole/types)
- [Transaction.fromRpc](/tempo/reference/Transaction/fromRpc)
- [Transaction.toRpc](/tempo/reference/Transaction/toRpc)
- [Transaction Types](/tempo/reference/Transaction/types)
- [TransactionReceipt.fromRpc](/tempo/reference/TransactionReceipt/fromRpc)
- [TransactionReceipt.toRpc](/tempo/reference/TransactionReceipt/toRpc)
- [TransactionReceipt Types](/tempo/reference/TransactionReceipt/types)
- [TransactionRequest Errors](/tempo/reference/TransactionRequest/errors)
- [TransactionRequest.fromRpc](/tempo/reference/TransactionRequest/fromRpc)
- [TransactionRequest.toEnvelope](/tempo/reference/TransactionRequest/toEnvelope)
- [TransactionRequest.toRpc](/tempo/reference/TransactionRequest/toRpc)
- [TransactionRequest Types](/tempo/reference/TransactionRequest/types)
- [TxEnvelopeTempo.assert](/tempo/reference/TxEnvelopeTempo/assert)
- [TxEnvelopeTempo.deserialize](/tempo/reference/TxEnvelopeTempo/deserialize)
- [TxEnvelopeTempo.encodeForSigning](/tempo/reference/TxEnvelopeTempo/encodeForSigning)
- [TxEnvelopeTempo Errors](/tempo/reference/TxEnvelopeTempo/errors)
- [TxEnvelopeTempo.from](/tempo/reference/TxEnvelopeTempo/from)
- [TxEnvelopeTempo.getFeePayerSignPayload](/tempo/reference/TxEnvelopeTempo/getFeePayerSignPayload)
- [TxEnvelopeTempo.getSignPayload](/tempo/reference/TxEnvelopeTempo/getSignPayload)
- [TxEnvelopeTempo.hash](/tempo/reference/TxEnvelopeTempo/hash)
- [TxEnvelopeTempo.serialize](/tempo/reference/TxEnvelopeTempo/serialize)
- [TxEnvelopeTempo.toTransactionRequest](/tempo/reference/TxEnvelopeTempo/toTransactionRequest)
- [TxEnvelopeTempo Types](/tempo/reference/TxEnvelopeTempo/types)
- [TxEnvelopeTempo.validate](/tempo/reference/TxEnvelopeTempo/validate)
- [VirtualAddress Errors](/tempo/reference/VirtualAddress/errors)
- [VirtualAddress.from](/tempo/reference/VirtualAddress/from)
- [VirtualAddress.isVirtual](/tempo/reference/VirtualAddress/isVirtual)
- [VirtualAddress.parse](/tempo/reference/VirtualAddress/parse)
- [VirtualAddress Types](/tempo/reference/VirtualAddress/types)
- [VirtualAddress.validate](/tempo/reference/VirtualAddress/validate)
- [VirtualMaster.getMasterId](/tempo/reference/VirtualMaster/getMasterId)
- [VirtualMaster.getRegistrationHash](/tempo/reference/VirtualMaster/getRegistrationHash)
- [VirtualMaster.mineSalt](/tempo/reference/VirtualMaster/mineSalt)
- [VirtualMaster.mineSaltAsync](/tempo/reference/VirtualMaster/mineSaltAsync)
- [VirtualMaster Types](/tempo/reference/VirtualMaster/types)
- [VirtualMaster.validateSalt](/tempo/reference/VirtualMaster/validateSalt)
- [ZoneId.fromChainId](/tempo/reference/ZoneId/fromChainId)
- [ZoneId.toChainId](/tempo/reference/ZoneId/toChainId)
- [ZoneRpcAuthentication.deserialize](/tempo/reference/ZoneRpcAuthentication/deserialize)
- [ZoneRpcAuthentication Errors](/tempo/reference/ZoneRpcAuthentication/errors)
- [ZoneRpcAuthentication.from](/tempo/reference/ZoneRpcAuthentication/from)
- [ZoneRpcAuthentication.getFields](/tempo/reference/ZoneRpcAuthentication/getFields)
- [ZoneRpcAuthentication.getSignPayload](/tempo/reference/ZoneRpcAuthentication/getSignPayload)
- [ZoneRpcAuthentication.hash](/tempo/reference/ZoneRpcAuthentication/hash)
- [ZoneRpcAuthentication.serialize](/tempo/reference/ZoneRpcAuthentication/serialize)
- [ZoneRpcAuthentication Types](/tempo/reference/ZoneRpcAuthentication/types)
- [Authentication.deserializeOptions](/webauthn/webauthn/Authentication/deserializeOptions)
- [Authentication.deserializeResponse](/webauthn/webauthn/Authentication/deserializeResponse)
- [Authentication Errors](/webauthn/webauthn/Authentication/errors)
- [Authentication.getOptions](/webauthn/webauthn/Authentication/getOptions)
- [Authentication.getSignPayload](/webauthn/webauthn/Authentication/getSignPayload)
- [Authentication.serializeOptions](/webauthn/webauthn/Authentication/serializeOptions)
- [Authentication.serializeResponse](/webauthn/webauthn/Authentication/serializeResponse)
- [Authentication.sign](/webauthn/webauthn/Authentication/sign)
- [Authentication Types](/webauthn/webauthn/Authentication/types)
- [Authentication.verify](/webauthn/webauthn/Authentication/verify)
- [Authenticator.getAttestationObject](/webauthn/webauthn/Authenticator/getAttestationObject)
- [Authenticator.getAuthenticatorData](/webauthn/webauthn/Authenticator/getAuthenticatorData)
- [Authenticator.getClientDataJSON](/webauthn/webauthn/Authenticator/getClientDataJSON)
- [Authenticator.getSignCount](/webauthn/webauthn/Authenticator/getSignCount)
- [Credential_2.deserialize](/webauthn/webauthn/Credential/deserialize)
- [Credential_2.serialize](/webauthn/webauthn/Credential/serialize)
- [Credential Types](/webauthn/webauthn/Credential/types)
- [Registration.create](/webauthn/webauthn/Registration/create)
- [Registration.deserializeOptions](/webauthn/webauthn/Registration/deserializeOptions)
- [Registration.deserializeResponse](/webauthn/webauthn/Registration/deserializeResponse)
- [Registration Errors](/webauthn/webauthn/Registration/errors)
- [Registration.getOptions](/webauthn/webauthn/Registration/getOptions)
- [Registration.serializeOptions](/webauthn/webauthn/Registration/serializeOptions)
- [Registration.serializeResponse](/webauthn/webauthn/Registration/serializeResponse)
- [Registration Types](/webauthn/webauthn/Registration/types)
- [Registration.verify](/webauthn/webauthn/Registration/verify)
-->

# Application Binary Interface (ABI)

## Overview

The **Application Binary Interface (ABI)** is the standardized protocol for interacting with smart contracts in the Ethereum ecosystem. It defines how data is encoded and decoded for **Consumer (e.g. Application, Wallet, Server, etc) ↔ Contract** communication, as well as **Contract → Contract** communication.

## Encoding and Decoding ABI Parameters

To start, let's take a look at how we can encode and decode primitive ABI types and parameters using Ox. While encoding and decoding ABI parameters might not be directly useful in isolation, they form the foundation of interacting with smart contracts, as listed in the [Applications](#applications) section below.

### Encoding

Encoding ABI parameters is the process of converting input data into a bytecode format that can be understood by the Ethereum Virtual Machine (EVM).

You can encode ABI parameters using Ox's [`AbiParameters.encode`](/api/AbiParameters/encode) function.

Let's take a trivial example that encodes `address` and `uint32[]` parameters:

```ts twoslash
import { AbiParameters } from 'ox';

const encoded = AbiParameters.encode(
  [{ type: 'address' }, { type: 'uint32[]' }], 
  ['0xcb98643b8786950F0461f3B0edf99D88F274574D', [1, 2, 3]]
)

console.log(encoded)
// @log: '0x000000000000000000000000cb98643b8786950f0461f3b0edf99d88f274574d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003'
```

:::note
**Tip:** You can also provide Human Readable parameters with [`AbiParameters.from`](/api/AbiParameters/from#human-readable-parameters):

```ts twoslash
import { AbiParameters } from 'ox';

const encoded = AbiParameters.encode(
  AbiParameters.from(['address', 'uint32[]']), 
  ['0xcb98643b8786950F0461f3B0edf99D88F274574D', [1, 2, 3]]
)
```

:::

The `encoded` variable now contains the ABI-encoded representation of the values we passed with the `address` and `uint32[]` parameters. We won't go into detail on how the encoding works, but you can read more about it [here](https://docs.soliditylang.org/en/latest/abi-spec.html#argument-encoding).

### Decoding

Decoding is the process of converting ABI-encoded data back into its values.

You can decode ABI parameters using Ox's [`AbiParameters.decode`](/api/AbiParameters/decode) function.

Let's take a look at how we can decode the parameters we encoded above:

```ts twoslash
import { AbiParameters } from 'ox';

const encoded = AbiParameters.encode(
  [{ type: 'address' }, { type: 'uint32[]' }], 
  ['0xcb98643b8786950F0461f3B0edf99D88F274574D', [1, 2, 3]]
)

const decoded = AbiParameters.decode( // [!code focus]
  [{ type: 'address' }, { type: 'uint32[]' }], // [!code focus]
  encoded // [!code focus]
) // [!code focus]

console.log(decoded) // [!code focus]
// @log: ['0xcb98643b8786950f0461f3b0edf99d88f274574d', [1, 2, 3]]
```

:::note
**Tip:** You can also provide Human Readable parameters with [`AbiParameters.from`](/api/AbiParameters/from#human-readable-parameters):

```ts twoslash
import { AbiParameters } from 'ox';

const encoded = AbiParameters.decode(
  AbiParameters.from(['address', 'uint32[]']), 
  '0x...'
)
```

:::

Now that we are aware of how to encode and decode primitive types & values, let's take a look at how ABI coding is applied in real-world scenarios.

## Contract Function Calls

When calling a function on a smart contract, an ABI is used to encode the function signature and its parameters into a bytecode format that can be understood by the Ethereum Virtual Machine (EVM). It is equally important for decoding the response (or revert reason) from the contract, hence allowing for two-way communication.

### Read-only Functions

A [Pure Function](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) or [View Function](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) (commonly known as a "contract read" function) does not modify the state of the blockchain. These functions have a `stateMutability` of `pure` or `view`.

They can only read the state of the contract, and cannot make any changes to it. Since pure/view functions do not change the state of the contract, they do not require any gas to be executed. This means that they can be called without the need for a transaction (via an `eth_call` JSON-RPC method).

Let's take a look at how we can encode a [read-only `balanceOf` function call](https://eips.ethereum.org/EIPS/eip-20#balanceOf) on an ERC20 contract, and then call it using `eth_call`.

::::steps

#### Define the `balanceOf` Function

First, we will define the `balanceOf` function using Ox's [`AbiFunction.from`](/api/AbiFunction/from) function:

```ts twoslash
import { AbiFunction } from 'ox'; 

const balanceOf = AbiFunction.from(
  'function balanceOf(address) returns (uint256)'
)
```

:::note

If you're using a JSON ABI, you can also extract the Function using [`AbiFunction.fromAbi`](/api/AbiFunction/fromAbi):

```ts twoslash
// @noErrors
const erc20Abi = [...] // [!code focus]
const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf') // [!code focus]
```

:::

#### Encode the Function Call

Next, we will encode the function call using [`AbiFunction.encodeData`](/api/AbiFunction/encodeData):

In this example, we will encode arguments to get the balance of the `0xcb98643b8786950f0461f3b0edf99d88f274574d` address.

```ts twoslash
import { AbiFunction, Value } from 'ox'; 

const balanceOf = AbiFunction.from('function balanceOf(address) returns (uint256)')

const data = AbiFunction.encodeData( // [!code focus]
  balanceOf, // [!code focus]
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d'] // [!code focus]
) // [!code focus]
```

#### Perform the Call

Now, we can perform the call using `eth_call` via a [JSON-RPC Transport](/api/RpcTransport) or [EIP-1193 Provider](/api/Provider). This will invoke the `balanceOf` function on the ERC20 contract.

For this example, we will use a [`RpcTransport.fromHttp`](/api/RpcTransport/fromHttp) to instantiate a HTTP JSON-RPC Transport.

```ts twoslash
import { AbiFunction, RpcTransport, TransactionRequest, Value } from 'ox'

const balanceOf = AbiFunction.from('function balanceOf(address) returns (uint256)')

const data = AbiFunction.encodeData(
  balanceOf,
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d']
)

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')

const result = await transport.request({ // [!code focus]
  method: 'eth_call', // [!code focus]
  params: [{ // [!code focus]
    data, // [!code focus]
    to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // [!code focus]
  }], // [!code focus]
}) // [!code focus]
```

#### Decode the Result

Now, we can decode the result using [`AbiFunction.decodeResult`](/api/AbiFunction/decodeResult):

```ts twoslash
import { AbiFunction, RpcTransport, TransactionRequest, Value } from 'ox'

const balanceOf = AbiFunction.from('function balanceOf(address) returns (uint256)')

const data = AbiFunction.encodeData(
  balanceOf,
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d']
)

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')

const result = await transport.request({ 
  method: 'eth_call', 
  params: [{ 
    data, 
    to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', 
  }], 
}) 

const balance = AbiFunction.decodeResult(balanceOf, result) // [!code focus]
```

::::

### State-Modifying Functions

A **State-Modifying Function** (commonly known as a "contract write" function) modifies the state of the blockchain.
These functions have a `stateMutability` of `nonpayable` or `payable`.

These types of functions require gas to be executed, and hence a transaction is needed to be broadcast in order to change the state (via an `eth_sendTransaction` JSON-RPC method).

Let's take a look at how we can encode a [state-modifying `approve` function call](https://eips.ethereum.org/EIPS/eip-20#approve) on an ERC20 contract, and then broadcast it to the network.

::::steps

#### Define the `approve` Function

First, we will define the `approve` function using Ox's [`AbiFunction.from`](/api/AbiFunction/from) function:

```ts twoslash
import { AbiFunction } from 'ox'; 

const approve = AbiFunction.from('function approve(address, uint256) returns (bool)')
```

:::note

If you're using a JSON ABI, you can also extract the Function using [`AbiFunction.fromAbi`](/api/AbiFunction/fromAbi):

```ts twoslash
// @noErrors
const erc20Abi = [...] // [!code focus]
const approve = AbiFunction.fromAbi(abi, 'approve') // [!code focus]
```

:::

#### Encode the Function Call

Next, we will encode the function call using [`AbiFunction.encodeData`](/api/AbiFunction/encodeData):

In this example, we will encode arguments to approve 100 USDC to be spent by the `0xcb98643b8786950f0461f3b0edf99d88f274574d`.

```ts twoslash
import { AbiFunction, Value } from 'ox'; 

const approve = AbiFunction.from('function approve(address, uint256) returns (bool)')

const data = AbiFunction.encodeData( // [!code focus]
  approve, // [!code focus]
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d', Value.from('100', 18)] // [!code focus]
) // [!code focus]
```

#### Broadcast the Transaction

Now, we can broadcast the `data` to the network using `eth_sendTransaction` via a [JSON-RPC Transport](/api/RpcTransport) or [EIP-1193 Provider](/api/Provider). This will invoke the `approve` function on the USDC contract.

```ts twoslash
import { AbiFunction, RpcTransport, Value } from 'ox'

const approve = AbiFunction.from('function approve(address, uint256) returns (bool)')

const data = AbiFunction.encodeData(
  approve,
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d', Value.fromEther('100')]
)

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com') // [!code focus]

const hash = await transport.request({ // [!code focus]
  method: 'eth_sendTransaction', // [!code focus]
  params: [{ // [!code focus]
    data, // [!code focus]
    to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // [!code focus]
  }], // [!code focus]
}) // [!code focus]
```

#### Bonus: Simulate

We can also "simulate" a Transaction by using `eth_call` instead of `eth_sendTransaction`. Using an `eth_call` means we can also retrieve the result of the function call and decode it with [`AbiFunction.decodeResult`](/api/AbiFunction/decodeResult):

```ts twoslash
// @noErrors
import { AbiFunction, RpcTransport, Value } from 'ox'

const approve = AbiFunction.from('function approve(address, uint256) returns (bool)')

const data = AbiFunction.encodeData(
  approve,
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d', Value.fromEther('100')]
)

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com') 
// ---cut---
const hash = await transport.request({ // [!code --]
  method: 'eth_sendTransaction', // [!code --]
const result = await transport.request({ // [!code ++]
  method: 'eth_call', // [!code ++]
  params: [{
    data,
    to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  }],
}) 

const success = AbiFunction.decodeResult(approve, result) // [!code ++]
```

#### Bonus: Estimate Gas

We can also estimate the gas required to execute a Transaction by using `eth_estimateGas` instead of `eth_sendTransaction`:

```ts twoslash
// @noErrors
import { AbiFunction, RpcTransport, Value } from 'ox'

const approve = AbiFunction.from('function approve(address, uint256) returns (bool)')

const data = AbiFunction.encodeData(
  approve,
  ['0xcb98643b8786950f0461f3b0edf99d88f274574d', Value.fromEther('100')]
)

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com') 
// ---cut---
const hash = await transport.request({ // [!code --]
  method: 'eth_sendTransaction', // [!code --]
const gas = await transport.request({ // [!code ++]
  method: 'eth_estimateGas', // [!code ++]
  params: [{
    data,
    to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  }],
}) 
```

::::

## Contract Event Filtering

ABIs can also be used to filter contract events by a topic (hashed event signature), and optional indexed parameters. This is useful for applications that need to extract or listen for specific events – such as ERC20 transfers or L2 messages – on Ethereum. We can also ABI-decode extracted event to retrieve the event name and arguments.

Let's take an example of how we can filter for ERC20 `Transfer` events, and decode the event arguments.

::::steps

#### Define the `Transfer` Event

First, we will define the `Transfer` event using Ox's [`AbiEvent.from`](/api/AbiEvent/from) function:

```ts twoslash
import { AbiEvent } from 'ox';

const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)'
)
```

:::note

If you're using a JSON ABI, you can also extract the Event using [`AbiEvent.fromAbi`](/api/AbiEvent/fromAbi):

```ts twoslash
// @noErrors
const erc20Abi = [...] // [!code focus]
const transfer = AbiEvent.fromAbi(abi, 'Transfer') // [!code focus]
```

:::

#### Encode to Event Topics

Next, we will encode the event filter using [`AbiEvent.encode`](/api/AbiEvent/encode). We will filter for transfers from `0x9f1fdab6458c5fc642fa0f4c5af7473c46837357`.

```ts twoslash
import { AbiEvent } from 'ox';

const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)',
)

const { topics } = AbiEvent.encode(transfer, { // [!code focus]
  from: '0x9f1fdab6458c5fc642fa0f4c5af7473c46837357', // [!code focus]
}) // [!code focus]
```

#### Filter Events

Now, we can filter events using `eth_getLogs` via a [JSON-RPC Transport](/api/RpcTransport) or [EIP-1193 Provider](/api/Provider).

For this example, we will use a [`RpcTransport.fromHttp`](/api/RpcTransport/fromHttp) to instantiate a HTTP JSON-RPC Transport.

```ts twoslash
import { AbiEvent, RpcTransport } from 'ox';

const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)',
)

const { topics } = AbiEvent.encode(transfer, {
  from: '0x9f1fdab6458c5fc642fa0f4c5af7473c46837357',
})

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com') // [!code focus]

const logs = await transport.request({ // [!code focus]
  method: 'eth_getLogs', // [!code focus]
  params: [{ topics }], // [!code focus]
}) // [!code focus]
```

#### Decode Logs

We can decode the logs using [`AbiEvent.decode`](/api/AbiEvent/decode):

```ts twoslash
import { AbiEvent, RpcTransport } from 'ox';

const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)',
)

const { topics } = AbiEvent.encode(transfer, {
  from: '0x9f1fdab6458c5fc642fa0f4c5af7473c46837357',
})

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')

const logs = await transport.request({
  method: 'eth_getLogs',
  params: [{ topics }],
})

const decoded = logs.map(log => AbiEvent.decode(transfer, log)) // [!code focus]
// @log: [
// @log:   {
// @log:     from: '0x9f1fdab6458c5fc642fa0f4c5af7473c46837357', 
// @log:     to: '0xcb98643b8786950f0461f3b0edf99d88f274574d', 
// @log:     value: 1n,
// @log:   },
// @log:   ...
// @log: ]
```

::::

## Contract Deployment

When deploying a smart contract, an ABI can be used to encode constructor arguments to pass to the transaction calldata, along with the deployment bytecode.

Let's take a look at how we can deploy a contract with arguments using Ox.

::::steps

#### Define the Constructor

First, we will define the constructor using Ox's [`AbiConstructor.from`](/api/AbiConstructor/from) function:

```ts twoslash
import { AbiConstructor } from 'ox';

const bytecode = '0x...'

const constructor = AbiConstructor.from('constructor(address)')
```

:::note

If you're using a JSON ABI, you can also extract the Constructor using [`AbiConstructor.fromAbi`](/api/AbiConstructor/fromAbi):

```ts twoslash
// @noErrors
const erc20Abi = [...] // [!code focus]
const constructor = AbiConstructor.fromAbi(abi) // [!code focus]
```

:::

#### Encode the Constructor

Next, we will encode the constructor arguments using [`AbiConstructor.encode`](/api/AbiConstructor/encode):

```ts twoslash
import { AbiConstructor } from 'ox';

const bytecode = '0x...'

const constructor = AbiConstructor.from('constructor(address)')

const data = AbiConstructor.encode(constructor, {
  bytecode,
  args: ['0x9f1fdab6458c5fc642fa0f4c5af7473c46837357'],
})
```

#### Broadcast the Transaction

We can now broadcast the deploy transaction to the network using `eth_sendTransaction` via a [JSON-RPC Transport](/api/RpcTransport) or [EIP-1193 Provider](/api/Provider).

```ts twoslash
import { AbiConstructor, RpcTransport } from 'ox';

const bytecode = '0x...'

const constructor = AbiConstructor.from('constructor(address)')

const data = AbiConstructor.encode(constructor, {
  bytecode,
  args: ['0x9f1fdab6458c5fc642fa0f4c5af7473c46837357'],
})

const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com') // [!code focus]

const hash = await transport.request({ // [!code focus]
  method: 'eth_sendTransaction', // [!code focus]
  params: [{ data }], // [!code focus]
}) // [!code focus]
```

:::note
**Note:** Deploy Transactions do not contain a `to` address.
:::

::::

## Related Modules

| Module                                | Description                                                                                                                              |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| [Abi](/api/Abi)                       | Utilities & types for working with [Application Binary Interfaces (ABIs)](https://docs.soliditylang.org/en/latest/abi-spec.html)         |
| [AbiConstructor](/api/AbiConstructor) | Utilities & types for working with [Constructors](https://docs.soliditylang.org/en/latest/abi-spec.html#json) on ABIs.                   |
| [AbiError](/api/AbiError)             | Utilities & types for working with [Errors](https://docs.soliditylang.org/en/latest/abi-spec.html#json) on ABIs.                         |
| [AbiEvent](/api/AbiEvent)             | Utilities & types for working with [Events](https://docs.soliditylang.org/en/latest/abi-spec.html#json) on ABIs.                         |
| [AbiFunction](/api/AbiFunction)       | Utilities & types for working with [Functions](https://docs.soliditylang.org/en/latest/abi-spec.html#json) on ABIs.                      |
| [AbiItem](/api/AbiItem)               | Utilities & types for working with [ABI Items](https://docs.soliditylang.org/en/latest/abi-spec.html#json)                               |
| [AbiParameters](/api/AbiParameters)   | Utilities & types for encoding, decoding, and working with [ABI Parameters](https://docs.soliditylang.org/en/latest/abi-spec.html#types) |
