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/Signature.ts
ADDED
|
@@ -0,0 +1,909 @@
|
|
|
1
|
+
import { secp256k1 } from '@noble/curves/secp256k1'
|
|
2
|
+
import * as Bytes from './Bytes.js'
|
|
3
|
+
import * as Errors from './Errors.js'
|
|
4
|
+
import * as Hex from './Hex.js'
|
|
5
|
+
import * as Json from './Json.js'
|
|
6
|
+
import * as Solidity from './Solidity.js'
|
|
7
|
+
import type { Compute, ExactPartial, OneOf } from './internal/types.js'
|
|
8
|
+
|
|
9
|
+
/** Root type for an ECDSA signature. */
|
|
10
|
+
export type Signature<
|
|
11
|
+
recovered extends boolean = true,
|
|
12
|
+
bigintType = bigint,
|
|
13
|
+
numberType = number,
|
|
14
|
+
> = Compute<
|
|
15
|
+
recovered extends true
|
|
16
|
+
? {
|
|
17
|
+
r: bigintType
|
|
18
|
+
s: bigintType
|
|
19
|
+
yParity: numberType
|
|
20
|
+
}
|
|
21
|
+
: {
|
|
22
|
+
r: bigintType
|
|
23
|
+
s: bigintType
|
|
24
|
+
yParity?: numberType | undefined
|
|
25
|
+
}
|
|
26
|
+
>
|
|
27
|
+
|
|
28
|
+
/** RPC-formatted ECDSA signature. */
|
|
29
|
+
export type Rpc<recovered extends boolean = true> = Signature<
|
|
30
|
+
recovered,
|
|
31
|
+
Hex.Hex,
|
|
32
|
+
Hex.Hex
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
/** (Legacy) ECDSA signature. */
|
|
36
|
+
export type Legacy<bigintType = bigint, numberType = number> = {
|
|
37
|
+
r: bigintType
|
|
38
|
+
s: bigintType
|
|
39
|
+
v: numberType
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** RPC-formatted (Legacy) ECDSA signature. */
|
|
43
|
+
export type LegacyRpc = Legacy<Hex.Hex, Hex.Hex>
|
|
44
|
+
|
|
45
|
+
export type Tuple = readonly [yParity: Hex.Hex, r: Hex.Hex, s: Hex.Hex]
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Asserts that a Signature is valid.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts twoslash
|
|
52
|
+
* import { Signature } from 'ox'
|
|
53
|
+
*
|
|
54
|
+
* Signature.assert({
|
|
55
|
+
* r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
56
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
57
|
+
* yParity: 1,
|
|
58
|
+
* })
|
|
59
|
+
* // @error: InvalidSignatureRError:
|
|
60
|
+
* // @error: Value `-549...n` is an invalid r value.
|
|
61
|
+
* // @error: r must be a positive integer less than 2^256.
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param signature - The signature object to assert.
|
|
65
|
+
*/
|
|
66
|
+
export function assert(
|
|
67
|
+
signature: ExactPartial<Signature>,
|
|
68
|
+
options: assert.Options = {},
|
|
69
|
+
): asserts signature is Signature {
|
|
70
|
+
const { recovered } = options
|
|
71
|
+
if (typeof signature.r === 'undefined')
|
|
72
|
+
throw new MissingPropertiesError({ signature })
|
|
73
|
+
if (typeof signature.s === 'undefined')
|
|
74
|
+
throw new MissingPropertiesError({ signature })
|
|
75
|
+
if (recovered && typeof signature.yParity === 'undefined')
|
|
76
|
+
throw new MissingPropertiesError({ signature })
|
|
77
|
+
if (signature.r < 0n || signature.r > Solidity.maxUint256)
|
|
78
|
+
throw new InvalidRError({ value: signature.r })
|
|
79
|
+
if (signature.s < 0n || signature.s > Solidity.maxUint256)
|
|
80
|
+
throw new InvalidSError({ value: signature.s })
|
|
81
|
+
if (
|
|
82
|
+
typeof signature.yParity === 'number' &&
|
|
83
|
+
signature.yParity !== 0 &&
|
|
84
|
+
signature.yParity !== 1
|
|
85
|
+
)
|
|
86
|
+
throw new InvalidYParityError({ value: signature.yParity })
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export declare namespace assert {
|
|
90
|
+
type Options = {
|
|
91
|
+
/** Whether or not the signature should be recovered (contain `yParity`). */
|
|
92
|
+
recovered?: boolean
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
type ErrorType =
|
|
96
|
+
| MissingPropertiesError
|
|
97
|
+
| InvalidRError
|
|
98
|
+
| InvalidSError
|
|
99
|
+
| InvalidYParityError
|
|
100
|
+
| Errors.GlobalErrorType
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts twoslash
|
|
108
|
+
* // @noErrors
|
|
109
|
+
* import { Signature } from 'ox'
|
|
110
|
+
*
|
|
111
|
+
* Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))
|
|
112
|
+
* // @log: { r: 5231...n, s: 3522...n, yParity: 0 }
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @param signature - The serialized signature.
|
|
116
|
+
* @returns The deserialized {@link ox#Signature.Signature}.
|
|
117
|
+
*/
|
|
118
|
+
export function fromBytes(signature: Bytes.Bytes): Signature {
|
|
119
|
+
return fromHex(Hex.fromBytes(signature))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export declare namespace fromBytes {
|
|
123
|
+
type ErrorType = Errors.GlobalErrorType
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
fromBytes.parseError = (error: unknown) =>
|
|
127
|
+
/* v8 ignore next */
|
|
128
|
+
error as fromBytes.ErrorType
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts twoslash
|
|
135
|
+
* import { Signature } from 'ox'
|
|
136
|
+
*
|
|
137
|
+
* Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')
|
|
138
|
+
* // @log: { r: 5231...n, s: 3522...n, yParity: 0 }
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @param serialized - The serialized signature.
|
|
142
|
+
* @returns The deserialized {@link ox#Signature.Signature}.
|
|
143
|
+
*/
|
|
144
|
+
export function fromHex(signature: Hex.Hex): Signature {
|
|
145
|
+
if (signature.length !== 130 && signature.length !== 132)
|
|
146
|
+
throw new InvalidSerializedSizeError({ signature })
|
|
147
|
+
|
|
148
|
+
const r = BigInt(Hex.slice(signature, 0, 32))
|
|
149
|
+
const s = BigInt(Hex.slice(signature, 32, 64))
|
|
150
|
+
|
|
151
|
+
const yParity = (() => {
|
|
152
|
+
const yParity = Number(`0x${signature.slice(130)}`)
|
|
153
|
+
if (Number.isNaN(yParity)) return undefined
|
|
154
|
+
try {
|
|
155
|
+
return vToYParity(yParity)
|
|
156
|
+
} catch {
|
|
157
|
+
throw new InvalidYParityError({ value: yParity })
|
|
158
|
+
}
|
|
159
|
+
})()
|
|
160
|
+
|
|
161
|
+
if (typeof yParity === 'undefined')
|
|
162
|
+
return {
|
|
163
|
+
r,
|
|
164
|
+
s,
|
|
165
|
+
} as never
|
|
166
|
+
return {
|
|
167
|
+
r,
|
|
168
|
+
s,
|
|
169
|
+
yParity,
|
|
170
|
+
} as never
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export declare namespace fromHex {
|
|
174
|
+
type ErrorType =
|
|
175
|
+
| Hex.from.ErrorType
|
|
176
|
+
| InvalidSerializedSizeError
|
|
177
|
+
| Errors.GlobalErrorType
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
fromHex.parseError = (error: unknown) =>
|
|
181
|
+
/* v8 ignore next */
|
|
182
|
+
error as fromHex.ErrorType
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```ts twoslash
|
|
189
|
+
* // @noErrors
|
|
190
|
+
* import { Signature } from 'ox'
|
|
191
|
+
*
|
|
192
|
+
* Signature.extract({
|
|
193
|
+
* baz: 'barry',
|
|
194
|
+
* foo: 'bar',
|
|
195
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
196
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
197
|
+
* yParity: 1,
|
|
198
|
+
* zebra: 'stripes',
|
|
199
|
+
* })
|
|
200
|
+
* // @log: {
|
|
201
|
+
* // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
202
|
+
* // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
203
|
+
* // @log: yParity: 1
|
|
204
|
+
* // @log: }
|
|
205
|
+
* ```
|
|
206
|
+
*
|
|
207
|
+
* @param value - The arbitrary object to extract the signature from.
|
|
208
|
+
* @returns The extracted {@link ox#Signature.Signature}.
|
|
209
|
+
*/
|
|
210
|
+
export function extract(value: extract.Value): Signature | undefined {
|
|
211
|
+
if (typeof value.r === 'undefined') return undefined
|
|
212
|
+
if (typeof value.s === 'undefined') return undefined
|
|
213
|
+
return from(value as any)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export declare namespace extract {
|
|
217
|
+
type Value = {
|
|
218
|
+
r?: bigint | Hex.Hex | undefined
|
|
219
|
+
s?: bigint | Hex.Hex | undefined
|
|
220
|
+
yParity?: number | Hex.Hex | undefined
|
|
221
|
+
v?: number | Hex.Hex | undefined
|
|
222
|
+
}
|
|
223
|
+
type ErrorType = Errors.GlobalErrorType
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
extract.parseError = (error: unknown) =>
|
|
227
|
+
/* v8 ignore next */
|
|
228
|
+
error as extract.ErrorType
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```ts twoslash
|
|
235
|
+
* import { Signature } from 'ox'
|
|
236
|
+
*
|
|
237
|
+
* Signature.from({
|
|
238
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
239
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
240
|
+
* yParity: 1,
|
|
241
|
+
* })
|
|
242
|
+
* // @log: {
|
|
243
|
+
* // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
244
|
+
* // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
245
|
+
* // @log: yParity: 1
|
|
246
|
+
* // @log: }
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ### From Serialized
|
|
251
|
+
*
|
|
252
|
+
* ```ts twoslash
|
|
253
|
+
* import { Signature } from 'ox'
|
|
254
|
+
*
|
|
255
|
+
* Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')
|
|
256
|
+
* // @log: {
|
|
257
|
+
* // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
258
|
+
* // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
259
|
+
* // @log: yParity: 1,
|
|
260
|
+
* // @log: }
|
|
261
|
+
* ```
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* ### From Legacy
|
|
265
|
+
*
|
|
266
|
+
* ```ts twoslash
|
|
267
|
+
* import { Signature } from 'ox'
|
|
268
|
+
*
|
|
269
|
+
* Signature.from({
|
|
270
|
+
* r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,
|
|
271
|
+
* s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,
|
|
272
|
+
* v: 27,
|
|
273
|
+
* })
|
|
274
|
+
* // @log: {
|
|
275
|
+
* // @log: r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,
|
|
276
|
+
* // @log: s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,
|
|
277
|
+
* // @log: yParity: 0
|
|
278
|
+
* // @log: }
|
|
279
|
+
* ```
|
|
280
|
+
*
|
|
281
|
+
* @param signature - The signature value to instantiate.
|
|
282
|
+
* @returns The instantiated {@link ox#Signature.Signature}.
|
|
283
|
+
*/
|
|
284
|
+
export function from<
|
|
285
|
+
const signature extends
|
|
286
|
+
| OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>
|
|
287
|
+
| Hex.Hex
|
|
288
|
+
| Bytes.Bytes,
|
|
289
|
+
>(
|
|
290
|
+
signature:
|
|
291
|
+
| signature
|
|
292
|
+
| OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>
|
|
293
|
+
| Hex.Hex
|
|
294
|
+
| Bytes.Bytes,
|
|
295
|
+
): from.ReturnType<signature> {
|
|
296
|
+
const signature_ = (() => {
|
|
297
|
+
if (typeof signature === 'string') return fromHex(signature)
|
|
298
|
+
if (signature instanceof Uint8Array) return fromBytes(signature)
|
|
299
|
+
if (typeof signature.r === 'string') return fromRpc(signature)
|
|
300
|
+
if (signature.v) return fromLegacy(signature)
|
|
301
|
+
return {
|
|
302
|
+
r: signature.r,
|
|
303
|
+
s: signature.s,
|
|
304
|
+
...(typeof signature.yParity !== 'undefined'
|
|
305
|
+
? { yParity: signature.yParity }
|
|
306
|
+
: {}),
|
|
307
|
+
}
|
|
308
|
+
})()
|
|
309
|
+
assert(signature_)
|
|
310
|
+
return signature_ as never
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export declare namespace from {
|
|
314
|
+
type ReturnType<
|
|
315
|
+
signature extends
|
|
316
|
+
| OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>
|
|
317
|
+
| Hex.Hex
|
|
318
|
+
| Bytes.Bytes,
|
|
319
|
+
> = signature extends Signature<boolean> & { v?: undefined }
|
|
320
|
+
? signature
|
|
321
|
+
: Signature
|
|
322
|
+
|
|
323
|
+
type ErrorType =
|
|
324
|
+
| assert.ErrorType
|
|
325
|
+
| fromBytes.ErrorType
|
|
326
|
+
| fromHex.ErrorType
|
|
327
|
+
| vToYParity.ErrorType
|
|
328
|
+
| Errors.GlobalErrorType
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
from.parseError = (error: unknown) =>
|
|
332
|
+
/* v8 ignore next */
|
|
333
|
+
error as from.ErrorType
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Converts a DER-encoded signature to a {@link ox#Signature.Signature}.
|
|
337
|
+
*
|
|
338
|
+
* @example
|
|
339
|
+
* ```ts twoslash
|
|
340
|
+
* // @noErrors
|
|
341
|
+
* import { Signature } from 'ox'
|
|
342
|
+
*
|
|
343
|
+
* const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))
|
|
344
|
+
* // @log: {
|
|
345
|
+
* // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
346
|
+
* // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
347
|
+
* // @log: }
|
|
348
|
+
* ```
|
|
349
|
+
*
|
|
350
|
+
* @param signature - The DER-encoded signature to convert.
|
|
351
|
+
* @returns The {@link ox#Signature.Signature}.
|
|
352
|
+
*/
|
|
353
|
+
export function fromDerBytes(signature: Bytes.Bytes): Signature<false> {
|
|
354
|
+
return fromDerHex(Hex.fromBytes(signature))
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export declare namespace fromDerBytes {
|
|
358
|
+
type ErrorType = Errors.GlobalErrorType
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
fromDerBytes.parseError = (error: unknown) =>
|
|
362
|
+
/* v8 ignore next */
|
|
363
|
+
error as fromDerBytes.ErrorType
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Converts a DER-encoded signature to a {@link ox#Signature.Signature}.
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* ```ts twoslash
|
|
370
|
+
* import { Signature } from 'ox'
|
|
371
|
+
*
|
|
372
|
+
* const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')
|
|
373
|
+
* // @log: {
|
|
374
|
+
* // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
375
|
+
* // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
376
|
+
* // @log: }
|
|
377
|
+
* ```
|
|
378
|
+
*
|
|
379
|
+
* @param signature - The DER-encoded signature to convert.
|
|
380
|
+
* @returns The {@link ox#Signature.Signature}.
|
|
381
|
+
*/
|
|
382
|
+
export function fromDerHex(signature: Hex.Hex): Signature<false> {
|
|
383
|
+
const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2))
|
|
384
|
+
return { r, s }
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export declare namespace fromDerHex {
|
|
388
|
+
type ErrorType = Errors.GlobalErrorType
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
fromDerHex.parseError = (error: unknown) =>
|
|
392
|
+
/* v8 ignore next */
|
|
393
|
+
error as fromDerHex.ErrorType
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```ts twoslash
|
|
400
|
+
* import { Signature } from 'ox'
|
|
401
|
+
*
|
|
402
|
+
* const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })
|
|
403
|
+
* // @log: { r: 1n, s: 2n, yParity: 1 }
|
|
404
|
+
* ```
|
|
405
|
+
*
|
|
406
|
+
* @param signature - The {@link ox#Signature.Legacy} to convert.
|
|
407
|
+
* @returns The converted {@link ox#Signature.Signature}.
|
|
408
|
+
*/
|
|
409
|
+
export function fromLegacy(signature: Legacy): Signature {
|
|
410
|
+
return {
|
|
411
|
+
r: signature.r,
|
|
412
|
+
s: signature.s,
|
|
413
|
+
yParity: vToYParity(signature.v),
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export declare namespace fromLegacy {
|
|
418
|
+
type ErrorType = vToYParity.ErrorType | Errors.GlobalErrorType
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
fromLegacy.parseError = (error: unknown) =>
|
|
422
|
+
/* v8 ignore next */
|
|
423
|
+
error as fromLegacy.ErrorType
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```ts twoslash
|
|
430
|
+
* import { Signature } from 'ox'
|
|
431
|
+
*
|
|
432
|
+
* const signature = Signature.fromRpc({
|
|
433
|
+
* r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',
|
|
434
|
+
* s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',
|
|
435
|
+
* yParity: '0x0',
|
|
436
|
+
* })
|
|
437
|
+
* ```
|
|
438
|
+
*
|
|
439
|
+
* @param signature - The {@link ox#Signature.Rpc} to convert.
|
|
440
|
+
* @returns The converted {@link ox#Signature.Signature}.
|
|
441
|
+
*/
|
|
442
|
+
export function fromRpc(signature: {
|
|
443
|
+
r: Hex.Hex
|
|
444
|
+
s: Hex.Hex
|
|
445
|
+
yParity?: Hex.Hex | undefined
|
|
446
|
+
v?: Hex.Hex | undefined
|
|
447
|
+
}): Signature {
|
|
448
|
+
const yParity = (() => {
|
|
449
|
+
const v = signature.v ? Number(signature.v) : undefined
|
|
450
|
+
let yParity = signature.yParity ? Number(signature.yParity) : undefined
|
|
451
|
+
if (typeof v === 'number' && typeof yParity !== 'number')
|
|
452
|
+
yParity = vToYParity(v)
|
|
453
|
+
if (typeof yParity !== 'number')
|
|
454
|
+
throw new InvalidYParityError({ value: signature.yParity })
|
|
455
|
+
return yParity
|
|
456
|
+
})()
|
|
457
|
+
|
|
458
|
+
return {
|
|
459
|
+
r: BigInt(signature.r),
|
|
460
|
+
s: BigInt(signature.s),
|
|
461
|
+
yParity,
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
export declare namespace fromRpc {
|
|
466
|
+
type ErrorType = Errors.GlobalErrorType
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
fromRpc.parseError = (error: unknown) =>
|
|
470
|
+
/* v8 ignore next */
|
|
471
|
+
error as fromRpc.ErrorType
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.
|
|
475
|
+
*
|
|
476
|
+
* @example
|
|
477
|
+
* ```ts twoslash
|
|
478
|
+
* import { Signature } from 'ox'
|
|
479
|
+
*
|
|
480
|
+
* const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])
|
|
481
|
+
* // @log: {
|
|
482
|
+
* // @log: r: 123n,
|
|
483
|
+
* // @log: s: 456n,
|
|
484
|
+
* // @log: yParity: 1,
|
|
485
|
+
* // @log: }
|
|
486
|
+
* ```
|
|
487
|
+
*
|
|
488
|
+
* @param tuple - The {@link ox#Signature.Tuple} to convert.
|
|
489
|
+
* @returns The {@link ox#Signature.Signature}.
|
|
490
|
+
*/
|
|
491
|
+
export function fromTuple(tuple: Tuple): Signature {
|
|
492
|
+
const [yParity, r, s] = tuple
|
|
493
|
+
return from({
|
|
494
|
+
r: r === '0x' ? 0n : BigInt(r),
|
|
495
|
+
s: s === '0x' ? 0n : BigInt(s),
|
|
496
|
+
yParity: yParity === '0x' ? 0 : Number(yParity),
|
|
497
|
+
})
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export declare namespace fromTuple {
|
|
501
|
+
type ErrorType = from.ErrorType | Errors.GlobalErrorType
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
fromTuple.parseError = (error: unknown) =>
|
|
505
|
+
/* v8 ignore next */
|
|
506
|
+
error as fromTuple.ErrorType
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.
|
|
510
|
+
*
|
|
511
|
+
* @example
|
|
512
|
+
* ```ts twoslash
|
|
513
|
+
* import { Signature } from 'ox'
|
|
514
|
+
*
|
|
515
|
+
* const signature = Signature.toBytes({
|
|
516
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
517
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
518
|
+
* yParity: 1
|
|
519
|
+
* })
|
|
520
|
+
* // @log: Uint8Array [102, 16, 10, ...]
|
|
521
|
+
* ```
|
|
522
|
+
*
|
|
523
|
+
* @param signature - The signature to serialize.
|
|
524
|
+
* @returns The serialized signature.
|
|
525
|
+
*/
|
|
526
|
+
export function toBytes(signature: Signature<boolean>): Bytes.Bytes {
|
|
527
|
+
return Bytes.fromHex(toHex(signature))
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
export declare namespace toBytes {
|
|
531
|
+
type ErrorType =
|
|
532
|
+
| toHex.ErrorType
|
|
533
|
+
| Bytes.fromHex.ErrorType
|
|
534
|
+
| Errors.GlobalErrorType
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
toBytes.parseError = (error: unknown) =>
|
|
538
|
+
/* v8 ignore next */
|
|
539
|
+
error as toBytes.ErrorType
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.
|
|
543
|
+
*
|
|
544
|
+
* @example
|
|
545
|
+
* ```ts twoslash
|
|
546
|
+
* import { Signature } from 'ox'
|
|
547
|
+
*
|
|
548
|
+
* const signature = Signature.toHex({
|
|
549
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
550
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
551
|
+
* yParity: 1
|
|
552
|
+
* })
|
|
553
|
+
* // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'
|
|
554
|
+
* ```
|
|
555
|
+
*
|
|
556
|
+
* @param signature - The signature to serialize.
|
|
557
|
+
* @returns The serialized signature.
|
|
558
|
+
*/
|
|
559
|
+
export function toHex(signature: Signature<boolean>): Hex.Hex {
|
|
560
|
+
assert(signature)
|
|
561
|
+
|
|
562
|
+
const r = signature.r
|
|
563
|
+
const s = signature.s
|
|
564
|
+
|
|
565
|
+
const signature_ = Hex.concat(
|
|
566
|
+
Hex.fromNumber(r, { size: 32 }),
|
|
567
|
+
Hex.fromNumber(s, { size: 32 }),
|
|
568
|
+
// If the signature is recovered, add the recovery byte to the signature.
|
|
569
|
+
typeof signature.yParity === 'number'
|
|
570
|
+
? Hex.fromNumber(signature.yParity, { size: 1 })
|
|
571
|
+
: '0x',
|
|
572
|
+
)
|
|
573
|
+
|
|
574
|
+
return signature_
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
export declare namespace toHex {
|
|
578
|
+
type ErrorType =
|
|
579
|
+
| Hex.concat.ErrorType
|
|
580
|
+
| Hex.fromNumber.ErrorType
|
|
581
|
+
| Errors.GlobalErrorType
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
toHex.parseError = (error: unknown) =>
|
|
585
|
+
/* v8 ignore next */
|
|
586
|
+
error as toHex.ErrorType
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Converts a {@link ox#Signature.Signature} to DER-encoded format.
|
|
590
|
+
*
|
|
591
|
+
* @example
|
|
592
|
+
* ```ts twoslash
|
|
593
|
+
* import { Signature } from 'ox'
|
|
594
|
+
*
|
|
595
|
+
* const signature = Signature.from({
|
|
596
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
597
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
598
|
+
* })
|
|
599
|
+
*
|
|
600
|
+
* const signature_der = Signature.toDerBytes(signature)
|
|
601
|
+
* // @log: Uint8Array [132, 51, 23, ...]
|
|
602
|
+
* ```
|
|
603
|
+
*
|
|
604
|
+
* @param signature - The signature to convert.
|
|
605
|
+
* @returns The DER-encoded signature.
|
|
606
|
+
*/
|
|
607
|
+
export function toDerBytes(signature: Signature<boolean>): Bytes.Bytes {
|
|
608
|
+
const sig = new secp256k1.Signature(signature.r, signature.s)
|
|
609
|
+
return sig.toDERRawBytes()
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
export declare namespace toDerBytes {
|
|
613
|
+
type ErrorType = Errors.GlobalErrorType
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
toDerBytes.parseError = (error: unknown) =>
|
|
617
|
+
/* v8 ignore next */
|
|
618
|
+
error as toDerBytes.ErrorType
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Converts a {@link ox#Signature.Signature} to DER-encoded format.
|
|
622
|
+
*
|
|
623
|
+
* @example
|
|
624
|
+
* ```ts twoslash
|
|
625
|
+
* import { Signature } from 'ox'
|
|
626
|
+
*
|
|
627
|
+
* const signature = Signature.from({
|
|
628
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
629
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
630
|
+
* })
|
|
631
|
+
*
|
|
632
|
+
* const signature_der = Signature.toDerHex(signature)
|
|
633
|
+
* // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'
|
|
634
|
+
* ```
|
|
635
|
+
*
|
|
636
|
+
* @param signature - The signature to convert.
|
|
637
|
+
* @returns The DER-encoded signature.
|
|
638
|
+
*/
|
|
639
|
+
export function toDerHex(signature: Signature<boolean>): Hex.Hex {
|
|
640
|
+
const sig = new secp256k1.Signature(signature.r, signature.s)
|
|
641
|
+
return `0x${sig.toDERHex()}`
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
export declare namespace toDerHex {
|
|
645
|
+
type ErrorType = Errors.GlobalErrorType
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
toDerHex.parseError = (error: unknown) =>
|
|
649
|
+
/* v8 ignore next */
|
|
650
|
+
error as toDerHex.ErrorType
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.
|
|
654
|
+
*
|
|
655
|
+
* @example
|
|
656
|
+
* ```ts twoslash
|
|
657
|
+
* import { Signature } from 'ox'
|
|
658
|
+
*
|
|
659
|
+
* const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })
|
|
660
|
+
* // @log: { r: 1n, s: 2n, v: 28 }
|
|
661
|
+
* ```
|
|
662
|
+
*
|
|
663
|
+
* @param signature - The {@link ox#Signature.Signature} to convert.
|
|
664
|
+
* @returns The converted {@link ox#Signature.Legacy}.
|
|
665
|
+
*/
|
|
666
|
+
export function toLegacy(signature: Signature): Legacy {
|
|
667
|
+
return {
|
|
668
|
+
r: signature.r,
|
|
669
|
+
s: signature.s,
|
|
670
|
+
v: yParityToV(signature.yParity),
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
export declare namespace toLegacy {
|
|
675
|
+
type ErrorType = yParityToV.ErrorType | Errors.GlobalErrorType
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
toLegacy.parseError = (error: unknown) =>
|
|
679
|
+
/* v8 ignore next */
|
|
680
|
+
error as toLegacy.ErrorType
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* ```ts twoslash
|
|
687
|
+
* import { Signature } from 'ox'
|
|
688
|
+
*
|
|
689
|
+
* const signature = Signature.toRpc({
|
|
690
|
+
* r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
691
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
692
|
+
* yParity: 1
|
|
693
|
+
* })
|
|
694
|
+
* ```
|
|
695
|
+
*
|
|
696
|
+
* @param signature - The {@link ox#Signature.Signature} to convert.
|
|
697
|
+
* @returns The converted {@link ox#Signature.Rpc}.
|
|
698
|
+
*/
|
|
699
|
+
export function toRpc(signature: Signature): Rpc {
|
|
700
|
+
const { r, s, yParity } = signature
|
|
701
|
+
return {
|
|
702
|
+
r: Hex.fromNumber(r, { size: 32 }),
|
|
703
|
+
s: Hex.fromNumber(s, { size: 32 }),
|
|
704
|
+
yParity: yParity === 0 ? '0x0' : '0x1',
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
export declare namespace toRpc {
|
|
709
|
+
type ErrorType = Errors.GlobalErrorType
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
toRpc.parseError = (error: unknown) =>
|
|
713
|
+
/* v8 ignore next */
|
|
714
|
+
error as toRpc.ErrorType
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.
|
|
718
|
+
*
|
|
719
|
+
* @example
|
|
720
|
+
* ```ts twoslash
|
|
721
|
+
* import { Signature } from 'ox'
|
|
722
|
+
*
|
|
723
|
+
* const signatureTuple = Signature.toTuple({
|
|
724
|
+
* r: 123n,
|
|
725
|
+
* s: 456n,
|
|
726
|
+
* yParity: 1,
|
|
727
|
+
* })
|
|
728
|
+
* // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']
|
|
729
|
+
* ```
|
|
730
|
+
*
|
|
731
|
+
* @param signature - The {@link ox#Signature.Signature} to convert.
|
|
732
|
+
* @returns The {@link ox#Signature.Tuple}.
|
|
733
|
+
*/
|
|
734
|
+
export function toTuple(signature: Signature): Tuple {
|
|
735
|
+
const { r, s, yParity } = signature
|
|
736
|
+
|
|
737
|
+
return [
|
|
738
|
+
yParity ? '0x01' : '0x',
|
|
739
|
+
r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r!)),
|
|
740
|
+
s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s!)),
|
|
741
|
+
] as const
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
export declare namespace toTuple {
|
|
745
|
+
type ErrorType =
|
|
746
|
+
| Hex.trimLeft.ErrorType
|
|
747
|
+
| Hex.fromNumber.ErrorType
|
|
748
|
+
| Errors.GlobalErrorType
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.
|
|
753
|
+
*
|
|
754
|
+
* @example
|
|
755
|
+
* ```ts twoslash
|
|
756
|
+
* import { Signature } from 'ox'
|
|
757
|
+
*
|
|
758
|
+
* const valid = Signature.validate({
|
|
759
|
+
* r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,
|
|
760
|
+
* s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,
|
|
761
|
+
* yParity: 1,
|
|
762
|
+
* })
|
|
763
|
+
* // @log: false
|
|
764
|
+
* ```
|
|
765
|
+
*
|
|
766
|
+
* @param signature - The signature object to assert.
|
|
767
|
+
*/
|
|
768
|
+
export function validate(
|
|
769
|
+
signature: ExactPartial<Signature>,
|
|
770
|
+
options: validate.Options = {},
|
|
771
|
+
): boolean {
|
|
772
|
+
try {
|
|
773
|
+
assert(signature, options)
|
|
774
|
+
return true
|
|
775
|
+
} catch {
|
|
776
|
+
return false
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
export declare namespace validate {
|
|
781
|
+
type Options = {
|
|
782
|
+
/** Whether or not the signature should be recovered (contain `yParity`). */
|
|
783
|
+
recovered?: boolean
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
type ErrorType = Errors.GlobalErrorType
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* Converts a ECDSA `v` value to a `yParity` value.
|
|
791
|
+
*
|
|
792
|
+
* @example
|
|
793
|
+
* ```ts twoslash
|
|
794
|
+
* import { Signature } from 'ox'
|
|
795
|
+
*
|
|
796
|
+
* const yParity = Signature.vToYParity(28)
|
|
797
|
+
* // @log: 1
|
|
798
|
+
* ```
|
|
799
|
+
*
|
|
800
|
+
* @param v - The ECDSA `v` value to convert.
|
|
801
|
+
* @returns The `yParity` value.
|
|
802
|
+
*/
|
|
803
|
+
export function vToYParity(v: number): Signature['yParity'] {
|
|
804
|
+
if (v === 0 || v === 27) return 0
|
|
805
|
+
if (v === 1 || v === 28) return 1
|
|
806
|
+
if (v >= 35) return v % 2 === 0 ? 1 : 0
|
|
807
|
+
throw new InvalidVError({ value: v })
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
export declare namespace vToYParity {
|
|
811
|
+
type ErrorType = InvalidVError | Errors.GlobalErrorType
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/* v8 ignore next */
|
|
815
|
+
vToYParity.parseError = (error: unknown) => error as vToYParity.ErrorType
|
|
816
|
+
|
|
817
|
+
/**
|
|
818
|
+
* Converts a ECDSA `v` value to a `yParity` value.
|
|
819
|
+
*
|
|
820
|
+
* @example
|
|
821
|
+
* ```ts twoslash
|
|
822
|
+
* import { Signature } from 'ox'
|
|
823
|
+
*
|
|
824
|
+
* const v = Signature.yParityToV(1)
|
|
825
|
+
* // @log: 28
|
|
826
|
+
* ```
|
|
827
|
+
*
|
|
828
|
+
* @param yParity - The ECDSA `yParity` value to convert.
|
|
829
|
+
* @returns The `v` value.
|
|
830
|
+
*/
|
|
831
|
+
export function yParityToV(yParity: number): number {
|
|
832
|
+
if (yParity === 0) return 27
|
|
833
|
+
if (yParity === 1) return 28
|
|
834
|
+
throw new InvalidYParityError({ value: yParity })
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
export declare namespace yParityToV {
|
|
838
|
+
type ErrorType = InvalidVError | Errors.GlobalErrorType
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
/* v8 ignore next */
|
|
842
|
+
yParityToV.parseError = (error: unknown) => error as yParityToV.ErrorType
|
|
843
|
+
|
|
844
|
+
/** Thrown when the serialized signature is of an invalid size. */
|
|
845
|
+
export class InvalidSerializedSizeError extends Errors.BaseError {
|
|
846
|
+
override readonly name = 'Signature.InvalidSerializedSizeError'
|
|
847
|
+
|
|
848
|
+
constructor({ signature }: { signature: Hex.Hex | Bytes.Bytes }) {
|
|
849
|
+
super(`Value \`${signature}\` is an invalid signature size.`, {
|
|
850
|
+
metaMessages: [
|
|
851
|
+
'Expected: 64 bytes or 65 bytes.',
|
|
852
|
+
`Received ${Hex.size(Hex.from(signature))} bytes.`,
|
|
853
|
+
],
|
|
854
|
+
})
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */
|
|
859
|
+
export class MissingPropertiesError extends Errors.BaseError {
|
|
860
|
+
override readonly name = 'Signature.MissingPropertiesError'
|
|
861
|
+
|
|
862
|
+
constructor({ signature }: { signature: unknown }) {
|
|
863
|
+
super(
|
|
864
|
+
`Signature \`${Json.stringify(signature)}\` is missing either an \`r\`, \`s\`, or \`yParity\` property.`,
|
|
865
|
+
)
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/** Thrown when the signature has an invalid `r` value. */
|
|
870
|
+
export class InvalidRError extends Errors.BaseError {
|
|
871
|
+
override readonly name = 'Signature.InvalidRError'
|
|
872
|
+
|
|
873
|
+
constructor({ value }: { value: unknown }) {
|
|
874
|
+
super(
|
|
875
|
+
`Value \`${value}\` is an invalid r value. r must be a positive integer less than 2^256.`,
|
|
876
|
+
)
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/** Thrown when the signature has an invalid `s` value. */
|
|
881
|
+
export class InvalidSError extends Errors.BaseError {
|
|
882
|
+
override readonly name = 'Signature.InvalidSError'
|
|
883
|
+
|
|
884
|
+
constructor({ value }: { value: unknown }) {
|
|
885
|
+
super(
|
|
886
|
+
`Value \`${value}\` is an invalid s value. s must be a positive integer less than 2^256.`,
|
|
887
|
+
)
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/** Thrown when the signature has an invalid `yParity` value. */
|
|
892
|
+
export class InvalidYParityError extends Errors.BaseError {
|
|
893
|
+
override readonly name = 'Signature.InvalidYParityError'
|
|
894
|
+
|
|
895
|
+
constructor({ value }: { value: unknown }) {
|
|
896
|
+
super(
|
|
897
|
+
`Value \`${value}\` is an invalid y-parity value. Y-parity must be 0 or 1.`,
|
|
898
|
+
)
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
/** Thrown when the signature has an invalid `v` value. */
|
|
903
|
+
export class InvalidVError extends Errors.BaseError {
|
|
904
|
+
override readonly name = 'Signature.InvalidVError'
|
|
905
|
+
|
|
906
|
+
constructor({ value }: { value: number }) {
|
|
907
|
+
super(`Value \`${value}\` is an invalid v value. v must be 27, 28 or >=35.`)
|
|
908
|
+
}
|
|
909
|
+
}
|