voltaire-effect 0.2.23 → 0.2.25
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/dist/KZGService-B7PJerOb.d.ts +146 -0
- package/dist/ProviderService-BZ5pqDrD.d.ts +319 -0
- package/dist/{X25519Test-DGsk1V9o.d.ts → X25519Test-D5Q-5fL9.d.ts} +4 -143
- package/dist/crypto/index.d.ts +5 -6
- package/dist/crypto/index.js +227 -201
- package/dist/{index-IgkEHjBe.d.ts → index-BCOuszKZ.d.ts} +17634 -11962
- package/dist/index.d.ts +3195 -976
- package/dist/index.js +6994 -4679
- package/dist/native/index.d.ts +25 -16
- package/dist/native/index.js +7020 -4705
- package/dist/primitives/index.d.ts +14 -8
- package/dist/primitives/index.js +4060 -2539
- package/dist/services/index.d.ts +9054 -30
- package/dist/services/index.js +1592 -1331
- package/package.json +2 -2
- package/src/crypto/ERC6492/ERC6492.test.ts +32 -14
- package/src/crypto/ERC6492/verifySignature.ts +4 -5
- package/src/crypto/Keccak256/Keccak256.test.ts +42 -1
- package/src/crypto/Keccak256/hashSync.ts +53 -0
- package/src/crypto/Keccak256/index.ts +2 -0
- package/src/index.ts +7 -2
- package/src/primitives/Abi/decode.test.ts +38 -0
- package/src/primitives/Abi/decode.ts +67 -0
- package/src/primitives/Abi/decodeData.test.ts +37 -0
- package/src/primitives/Abi/decodeData.ts +77 -0
- package/src/primitives/Abi/decodeLog.test.ts +32 -0
- package/src/primitives/Abi/decodeLog.ts +81 -0
- package/src/primitives/Abi/decodeWrappedError.test.ts +41 -0
- package/src/primitives/Abi/decodeWrappedError.ts +68 -0
- package/src/primitives/Abi/encode.test.ts +43 -0
- package/src/primitives/Abi/encode.ts +67 -0
- package/src/primitives/Abi/encodePacked.test.ts +35 -0
- package/src/primitives/Abi/encodePacked.ts +62 -0
- package/src/primitives/Abi/encodeWrappedError.test.ts +21 -0
- package/src/primitives/Abi/encodeWrappedError.ts +64 -0
- package/src/primitives/Abi/findSelectorCollisions.test.ts +50 -0
- package/src/primitives/Abi/findSelectorCollisions.ts +83 -0
- package/src/primitives/Abi/index.ts +33 -7
- package/src/primitives/Abi/parseLogs.test.ts +37 -0
- package/src/primitives/Abi/parseLogs.ts +62 -0
- package/src/primitives/AccessList/AccessList.test.ts +229 -0
- package/src/primitives/AccessList/AccessListTypeSchema.ts +16 -0
- package/src/primitives/AccessList/addressCount.ts +21 -0
- package/src/primitives/AccessList/assertValid.ts +37 -0
- package/src/primitives/AccessList/create.ts +19 -0
- package/src/primitives/AccessList/deduplicate.ts +23 -0
- package/src/primitives/AccessList/from.ts +39 -0
- package/src/primitives/AccessList/fromBytes.ts +36 -0
- package/src/primitives/AccessList/gasCost.ts +22 -0
- package/src/primitives/AccessList/gasSavings.ts +26 -0
- package/src/primitives/AccessList/hasSavings.ts +23 -0
- package/src/primitives/AccessList/includesAddress.ts +25 -0
- package/src/primitives/AccessList/includesStorageKey.ts +28 -0
- package/src/primitives/AccessList/index.ts +99 -19
- package/src/primitives/AccessList/is.ts +23 -0
- package/src/primitives/AccessList/isEmpty.ts +23 -0
- package/src/primitives/AccessList/isItem.ts +22 -0
- package/src/primitives/AccessList/keysFor.ts +29 -0
- package/src/primitives/AccessList/merge.ts +24 -0
- package/src/primitives/AccessList/storageKeyCount.ts +21 -0
- package/src/primitives/AccessList/toBytes.ts +23 -0
- package/src/primitives/AccessList/withAddress.ts +27 -0
- package/src/primitives/AccessList/withStorageKey.ts +30 -0
- package/src/primitives/Address/Address.test.ts +146 -0
- package/src/primitives/Address/assert.ts +51 -0
- package/src/primitives/Address/calculateCreate2Address.ts +33 -0
- package/src/primitives/Address/calculateCreateAddress.ts +30 -0
- package/src/primitives/Address/deduplicateAddresses.ts +20 -0
- package/src/primitives/Address/from.ts +41 -0
- package/src/primitives/Address/fromAbiEncoded.ts +35 -0
- package/src/primitives/Address/fromBase64.ts +25 -0
- package/src/primitives/Address/fromBytes.ts +25 -0
- package/src/primitives/Address/fromHex.ts +31 -0
- package/src/primitives/Address/fromNumber.ts +25 -0
- package/src/primitives/Address/fromPrivateKey.ts +25 -0
- package/src/primitives/Address/fromPublicKey.ts +56 -0
- package/src/primitives/Address/index.ts +99 -35
- package/src/primitives/Address/is.ts +20 -0
- package/src/primitives/Address/isAddress.ts +22 -0
- package/src/primitives/Address/sortAddresses.ts +19 -0
- package/src/primitives/Address/toChecksummed.ts +32 -0
- package/src/primitives/Address/toHex.ts +18 -0
- package/src/primitives/Address/zero.ts +18 -0
- package/src/primitives/Base64/Base64.test.ts +75 -0
- package/src/primitives/Base64/convert.ts +37 -0
- package/src/primitives/Base64/decode.ts +59 -0
- package/src/primitives/Base64/encode.ts +42 -0
- package/src/primitives/Base64/from.ts +39 -0
- package/src/primitives/Base64/index.ts +81 -1
- package/src/primitives/Base64/size.ts +16 -0
- package/src/primitives/Base64/validation.ts +16 -0
- package/src/primitives/Blob/Blob.test.ts +292 -0
- package/src/primitives/Blob/calculateGas.ts +30 -0
- package/src/primitives/Blob/estimateBlobCount.ts +30 -0
- package/src/primitives/Blob/from.ts +38 -0
- package/src/primitives/Blob/fromData.ts +36 -0
- package/src/primitives/Blob/index.ts +99 -12
- package/src/primitives/Blob/isValidVersion.ts +27 -0
- package/src/primitives/Blob/joinData.ts +43 -0
- package/src/primitives/Blob/splitData.ts +36 -0
- package/src/primitives/Blob/toCommitment.ts +43 -0
- package/src/primitives/Blob/toProof.ts +50 -0
- package/src/primitives/Blob/toVersionedHash.ts +35 -0
- package/src/primitives/Blob/verify.ts +49 -0
- package/src/primitives/Blob/verifyBatch.ts +119 -0
- package/src/primitives/BloomFilter/BloomFilter.test.ts +138 -0
- package/src/primitives/BloomFilter/add.ts +23 -0
- package/src/primitives/BloomFilter/combine.ts +21 -0
- package/src/primitives/BloomFilter/contains.ts +26 -0
- package/src/primitives/BloomFilter/create.ts +35 -0
- package/src/primitives/BloomFilter/density.ts +22 -0
- package/src/primitives/BloomFilter/expectedFalsePositiveRate.ts +25 -0
- package/src/primitives/BloomFilter/fromHex.ts +37 -0
- package/src/primitives/BloomFilter/hash.ts +43 -0
- package/src/primitives/BloomFilter/index.ts +59 -37
- package/src/primitives/BloomFilter/isEmpty.ts +22 -0
- package/src/primitives/BloomFilter/merge.ts +24 -0
- package/src/primitives/BloomFilter/toHex.ts +22 -0
- package/src/primitives/Bytecode/analyze.ts +58 -0
- package/src/primitives/Bytecode/detectFusions.ts +10 -0
- package/src/primitives/Bytecode/equals.ts +10 -0
- package/src/primitives/Bytecode/extractRuntime.ts +12 -0
- package/src/primitives/Bytecode/format.ts +16 -0
- package/src/primitives/Bytecode/from.ts +16 -0
- package/src/primitives/Bytecode/fromHex.ts +14 -0
- package/src/primitives/Bytecode/getBlock.ts +12 -0
- package/src/primitives/Bytecode/getNextPc.ts +12 -0
- package/src/primitives/Bytecode/getPushSize.ts +8 -0
- package/src/primitives/Bytecode/hasMetadata.ts +10 -0
- package/src/primitives/Bytecode/hash.ts +9 -0
- package/src/primitives/Bytecode/index.ts +103 -13
- package/src/primitives/Bytecode/isPush.ts +8 -0
- package/src/primitives/Bytecode/isTerminator.ts +8 -0
- package/src/primitives/Bytecode/isValidJumpDest.ts +12 -0
- package/src/primitives/Bytecode/parseInstructions.ts +10 -0
- package/src/primitives/Bytecode/prettyPrint.ts +12 -0
- package/src/primitives/Bytecode/scan.ts +20 -0
- package/src/primitives/Bytecode/size.ts +9 -0
- package/src/primitives/Bytecode/stripMetadata.ts +10 -0
- package/src/primitives/Bytecode/toAbi.ts +10 -0
- package/src/primitives/Bytecode/toHex.ts +10 -0
- package/src/primitives/Bytecode/types.ts +23 -0
- package/src/primitives/Bytecode/validate.ts +9 -0
- package/src/primitives/ContractSignature/ContractSignature.test.ts +1 -13
- package/src/primitives/ContractSignature/verifySignature.ts +88 -62
- package/src/primitives/Ens/Ens.test.ts +71 -0
- package/src/primitives/Ens/convert.ts +13 -0
- package/src/primitives/Ens/from.ts +32 -0
- package/src/primitives/Ens/hash.ts +46 -0
- package/src/primitives/Ens/index.ts +86 -4
- package/src/primitives/Ens/normalize.ts +45 -0
- package/src/primitives/Ens/validation.ts +38 -0
- package/src/primitives/EventLog/accessors.ts +32 -0
- package/src/primitives/EventLog/clone.ts +17 -0
- package/src/primitives/EventLog/create.ts +46 -0
- package/src/primitives/EventLog/filtering.ts +48 -0
- package/src/primitives/EventLog/index.ts +96 -6
- package/src/primitives/EventLog/status.ts +17 -0
- package/src/primitives/EventLog/toRpc.ts +49 -0
- package/src/primitives/Hardfork/HardforkSchema.ts +3 -3
- package/src/primitives/Hardfork/allIds.ts +13 -0
- package/src/primitives/Hardfork/allNames.ts +13 -0
- package/src/primitives/Hardfork/compare.ts +17 -0
- package/src/primitives/Hardfork/comparisons.ts +45 -0
- package/src/primitives/Hardfork/equals.ts +17 -0
- package/src/primitives/Hardfork/features.ts +61 -0
- package/src/primitives/Hardfork/fromString.ts +16 -0
- package/src/primitives/Hardfork/index.ts +128 -18
- package/src/primitives/Hardfork/isValidName.ts +14 -0
- package/src/primitives/Hardfork/minMax.ts +23 -0
- package/src/primitives/Hardfork/range.ts +19 -0
- package/src/primitives/Hardfork/toString.ts +16 -0
- package/src/primitives/Hash/Hash.test.ts +104 -0
- package/src/primitives/Hash/from.ts +47 -0
- package/src/primitives/Hash/fromBytes.ts +46 -0
- package/src/primitives/Hash/fromHex.ts +44 -0
- package/src/primitives/Hash/index.ts +45 -8
- package/src/primitives/Hash/isHash.ts +31 -0
- package/src/primitives/Hash/toHex.ts +29 -0
- package/src/primitives/Hex/Hex.test.ts +327 -153
- package/src/primitives/Hex/assertSize.ts +41 -0
- package/src/primitives/Hex/concat.ts +37 -0
- package/src/primitives/Hex/from.ts +38 -0
- package/src/primitives/Hex/fromBigInt.ts +40 -0
- package/src/primitives/Hex/fromBoolean.ts +29 -0
- package/src/primitives/Hex/fromNumber.ts +41 -0
- package/src/primitives/Hex/fromString.ts +28 -0
- package/src/primitives/Hex/index.ts +68 -37
- package/src/primitives/Hex/pad.ts +40 -0
- package/src/primitives/Hex/padRight.ts +39 -0
- package/src/primitives/Hex/size.ts +29 -0
- package/src/primitives/Hex/slice.ts +42 -0
- package/src/primitives/Hex/toBigInt.ts +27 -0
- package/src/primitives/Hex/toBoolean.ts +38 -0
- package/src/primitives/Hex/toNumber.ts +37 -0
- package/src/primitives/Hex/toStringHex.ts +39 -0
- package/src/primitives/Hex/trim.ts +27 -0
- package/src/primitives/Hex/validate.ts +37 -0
- package/src/primitives/Hex/xor.ts +39 -0
- package/src/primitives/Opcode/OpcodeSchema.ts +1 -1
- package/src/primitives/Opcode/disassemble.ts +15 -0
- package/src/primitives/Opcode/dupPosition.ts +15 -0
- package/src/primitives/Opcode/format.ts +15 -0
- package/src/primitives/Opcode/getters.ts +54 -0
- package/src/primitives/Opcode/index.ts +301 -11
- package/src/primitives/Opcode/info.ts +18 -0
- package/src/primitives/Opcode/jumpDests.ts +15 -0
- package/src/primitives/Opcode/logTopics.ts +15 -0
- package/src/primitives/Opcode/name.ts +15 -0
- package/src/primitives/Opcode/parse.ts +15 -0
- package/src/primitives/Opcode/predicates.ts +72 -0
- package/src/primitives/Opcode/pushBytes.ts +15 -0
- package/src/primitives/Opcode/pushOpcode.ts +15 -0
- package/src/primitives/Opcode/swapPosition.ts +15 -0
- package/src/primitives/Rlp/decodeBatch.ts +46 -0
- package/src/primitives/Rlp/decodeObject.ts +46 -0
- package/src/primitives/Rlp/decodeValue.ts +51 -0
- package/src/primitives/Rlp/encodeBatch.ts +50 -0
- package/src/primitives/Rlp/encodeObject.ts +48 -0
- package/src/primitives/Rlp/encodeVariadic.ts +49 -0
- package/src/primitives/Rlp/equals.ts +22 -0
- package/src/primitives/Rlp/from.ts +44 -0
- package/src/primitives/Rlp/fromJSON.ts +45 -0
- package/src/primitives/Rlp/getEncodedLength.ts +47 -0
- package/src/primitives/Rlp/getLength.ts +44 -0
- package/src/primitives/Rlp/index.ts +67 -14
- package/src/primitives/Rlp/isBytesData.ts +21 -0
- package/src/primitives/Rlp/isCanonical.ts +32 -0
- package/src/primitives/Rlp/isData.ts +21 -0
- package/src/primitives/Rlp/isList.ts +46 -0
- package/src/primitives/Rlp/isListData.ts +21 -0
- package/src/primitives/Rlp/isString.ts +46 -0
- package/src/primitives/Rlp/toJSON.ts +20 -0
- package/src/primitives/Rlp/toRaw.ts +31 -0
- package/src/primitives/Signature/Signature.test.ts +217 -0
- package/src/primitives/Signature/from.ts +38 -0
- package/src/primitives/Signature/fromBytes.ts +31 -0
- package/src/primitives/Signature/fromCompact.ts +33 -0
- package/src/primitives/Signature/fromDER.ts +35 -0
- package/src/primitives/Signature/fromEd25519.ts +24 -0
- package/src/primitives/Signature/fromHex.ts +29 -0
- package/src/primitives/Signature/fromP256.ts +25 -0
- package/src/primitives/Signature/fromRpc.ts +38 -0
- package/src/primitives/Signature/fromSecp256k1.ts +29 -0
- package/src/primitives/Signature/fromTuple.ts +33 -0
- package/src/primitives/Signature/getR.ts +24 -0
- package/src/primitives/Signature/getS.ts +24 -0
- package/src/primitives/Signature/getV.ts +24 -0
- package/src/primitives/Signature/index.ts +61 -11
- package/src/primitives/Signature/toDER.ts +24 -0
- package/src/primitives/Signature/toHex.ts +24 -0
- package/src/primitives/Signature/toRpc.ts +35 -0
- package/src/primitives/Signature/toTuple.ts +29 -0
- package/src/primitives/Signature/verify.ts +31 -0
- package/src/primitives/Siwe/create.ts +56 -0
- package/src/primitives/Siwe/hash.ts +27 -0
- package/src/primitives/Siwe/index.ts +57 -21
- package/src/primitives/Siwe/parse.ts +24 -0
- package/src/primitives/Siwe/verify.ts +47 -0
- package/src/primitives/Transaction/Transaction.test.ts +309 -0
- package/src/primitives/Transaction/index.ts +467 -2
- package/src/primitives/Uint/Uint.test.ts +200 -0
- package/src/primitives/Uint/dividedBy.ts +34 -0
- package/src/primitives/Uint/from.ts +35 -0
- package/src/primitives/Uint/fromAbiEncoded.ts +29 -0
- package/src/primitives/Uint/fromBigInt.ts +30 -0
- package/src/primitives/Uint/fromBytes.ts +32 -0
- package/src/primitives/Uint/fromHex.ts +32 -0
- package/src/primitives/Uint/fromNumber.ts +30 -0
- package/src/primitives/Uint/index.ts +90 -45
- package/src/primitives/Uint/isUint256.ts +25 -0
- package/src/primitives/Uint/isValid.ts +25 -0
- package/src/primitives/Uint/modulo.ts +34 -0
- package/src/primitives/Uint/toHex.ts +31 -0
- package/src/primitives/Uint/tryFrom.ts +30 -0
- package/src/services/Contract/Contract.test.ts +46 -41
- package/src/services/Contract/Contract.ts +25 -29
- package/src/services/Contract/ContractTypes.ts +6 -3
- package/src/services/Contract/estimateGas.test.ts +21 -9
- package/src/services/Contract/estimateGas.ts +21 -23
- package/src/services/Debug/Debug.ts +1 -1
- package/src/services/Debug/DebugService.ts +1 -1
- package/src/services/FeeEstimator/DefaultFeeEstimator.ts +10 -6
- package/src/services/FeeEstimator/FeeEstimator.test.ts +68 -62
- package/src/services/Multicall/BalanceResolver.ts +1 -1
- package/src/services/Multicall/GetBalance.ts +1 -1
- package/src/services/Multicall/Multicall.ts +1 -1
- package/src/services/NonceManager/DefaultNonceManager.ts +4 -7
- package/src/services/NonceManager/NonceManager.test.ts +20 -33
- package/src/services/Provider/Provider.test.ts +155 -349
- package/src/services/Provider/Provider.ts +14 -1180
- package/src/services/Provider/ProviderService.ts +14 -1199
- package/src/services/Provider/actions/multicall.test.ts +29 -39
- package/src/services/Provider/actions/multicall.ts +2 -2
- package/src/services/Provider/actions/readContract.test.ts +45 -50
- package/src/services/Provider/actions/readContract.ts +2 -6
- package/src/services/Provider/actions/simulateContract.test.ts +55 -232
- package/src/services/Provider/actions/simulateContract.ts +2 -3
- package/src/services/Provider/ens/getEnsAddress.ts +11 -14
- package/src/services/Provider/ens/getEnsName.ts +15 -18
- package/src/services/Provider/ens/getEnsResolver.ts +11 -14
- package/src/services/Provider/ens/getEnsText.ts +15 -18
- package/src/services/Provider/functions/backfillBlocks.ts +97 -0
- package/src/services/Provider/functions/call.ts +45 -0
- package/src/services/Provider/functions/createAccessList.ts +61 -0
- package/src/services/Provider/functions/createBlockFilter.ts +41 -0
- package/src/services/Provider/functions/createEventFilter.ts +43 -0
- package/src/services/Provider/functions/createPendingTransactionFilter.ts +41 -0
- package/src/services/Provider/functions/estimateGas.ts +52 -0
- package/src/services/Provider/functions/getAccounts.ts +40 -0
- package/src/services/Provider/functions/getBalance.ts +50 -0
- package/src/services/Provider/functions/getBlobBaseFee.ts +46 -0
- package/src/services/Provider/functions/getBlock.ts +95 -0
- package/src/services/Provider/functions/getBlockNumber.ts +51 -0
- package/src/services/Provider/functions/getBlockReceipts.ts +78 -0
- package/src/services/Provider/functions/getBlockTransactionCount.ts +86 -0
- package/src/services/Provider/functions/getChainId.ts +46 -0
- package/src/services/Provider/functions/getCode.ts +43 -0
- package/src/services/Provider/functions/getCoinbase.ts +40 -0
- package/src/services/Provider/functions/getFeeHistory.ts +85 -0
- package/src/services/Provider/functions/getFilterChanges.ts +42 -0
- package/src/services/Provider/functions/getFilterLogs.ts +44 -0
- package/src/services/Provider/functions/getGasPrice.ts +46 -0
- package/src/services/Provider/functions/getHashrate.ts +46 -0
- package/src/services/Provider/functions/getLogs.ts +45 -0
- package/src/services/Provider/functions/getMaxPriorityFeePerGas.ts +46 -0
- package/src/services/Provider/functions/getMining.ts +40 -0
- package/src/services/Provider/functions/getProof.ts +52 -0
- package/src/services/Provider/functions/getProtocolVersion.ts +40 -0
- package/src/services/Provider/functions/getStorageAt.ts +52 -0
- package/src/services/Provider/functions/getSyncing.ts +56 -0
- package/src/services/Provider/functions/getTransaction.ts +57 -0
- package/src/services/Provider/functions/getTransactionByBlockHashAndIndex.ts +73 -0
- package/src/services/Provider/functions/getTransactionByBlockNumberAndIndex.ts +86 -0
- package/src/services/Provider/functions/getTransactionConfirmations.ts +70 -0
- package/src/services/Provider/functions/getTransactionCount.ts +50 -0
- package/src/services/Provider/functions/getTransactionReceipt.ts +57 -0
- package/src/services/Provider/functions/getUncle.ts +97 -0
- package/src/services/Provider/functions/getUncleCount.ts +86 -0
- package/src/services/Provider/functions/index.ts +73 -0
- package/src/services/Provider/functions/netVersion.ts +40 -0
- package/src/services/Provider/functions/sendRawTransaction.ts +40 -0
- package/src/services/Provider/functions/sendTransaction.ts +48 -0
- package/src/services/Provider/functions/sign.ts +50 -0
- package/src/services/Provider/functions/signTransaction.ts +52 -0
- package/src/services/Provider/functions/simulateV1.ts +95 -0
- package/src/services/Provider/functions/simulateV2.ts +51 -0
- package/src/services/Provider/functions/subscribe.ts +49 -0
- package/src/services/Provider/functions/uninstallFilter.ts +40 -0
- package/src/services/Provider/functions/unsubscribe.ts +41 -0
- package/src/services/Provider/functions/waitForTransactionReceipt.ts +168 -0
- package/src/services/Provider/functions/watchBlocks.ts +98 -0
- package/src/services/Provider/index.ts +29 -178
- package/src/services/Provider/types.ts +780 -0
- package/src/services/Provider/utils.ts +204 -0
- package/src/services/RawProvider/ForkProviderTransport.ts +2 -3
- package/src/services/RawProvider/HttpProviderTransport.ts +3 -3
- package/src/services/RawProvider/InMemoryProviderTransport.ts +3 -3
- package/src/services/RawProvider/WebSocketProviderTransport.ts +3 -3
- package/src/services/Signer/Signer.test.ts +211 -187
- package/src/services/Signer/Signer.ts +26 -16
- package/src/services/Signer/actions/deployContract.test.ts +125 -105
- package/src/services/Signer/actions/deployContract.ts +3 -2
- package/src/services/Signer/actions/prepareAuthorization.test.ts +47 -48
- package/src/services/Signer/actions/prepareAuthorization.ts +3 -3
- package/src/services/Signer/actions/signAuthorization.test.ts +39 -45
- package/src/services/Signer/actions/signAuthorization.ts +3 -3
- package/src/services/Signer/actions/writeContract.test.ts +41 -57
- package/src/services/Transport/FallbackTransport.ts +3 -3
- package/src/services/Transport/HttpTransport.ts +3 -3
- package/src/services/Transport/config.ts +7 -7
- package/src/services/Transport/index.ts +3 -4
- package/src/services/errors.test.ts +3 -8
- package/src/services/index.ts +8 -90
- package/src/services/presets/index.ts +9 -10
- package/src/services/presets/presets.test.ts +14 -29
- package/src/standards/ERC165.test.ts +19 -20
- package/src/standards/ERC165.ts +9 -11
- package/src/type-exports.test.ts +37 -0
- package/dist/AccountService-BetXokad.d.ts +0 -1717
- package/dist/RpcResolver-BpvqybjD.d.ts +0 -6439
- package/src/services/Provider/Account.ts +0 -33
- package/src/services/Provider/AccountService.ts +0 -84
- package/src/services/Provider/Blocks.ts +0 -32
- package/src/services/Provider/BlocksService.ts +0 -73
- package/src/services/Provider/Events.ts +0 -33
- package/src/services/Provider/EventsService.ts +0 -71
- package/src/services/Provider/Network.ts +0 -41
- package/src/services/Provider/NetworkService.ts +0 -114
- package/src/services/Provider/Simulation.ts +0 -34
- package/src/services/Provider/SimulationService.ts +0 -161
- package/src/services/Provider/Streaming.ts +0 -30
- package/src/services/Provider/StreamingService.ts +0 -58
- package/src/services/Provider/Transaction.ts +0 -39
- package/src/services/Provider/TransactionService.ts +0 -83
- package/src/services/Provider/filters.ts +0 -91
- package/src/services/Provider/getBlobBaseFee.ts +0 -170
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module isValidJumpDest
|
|
3
|
+
* @description Check if offset is a valid jump destination (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { isValidJumpDest as _isValidJumpDest } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const isValidJumpDest = (
|
|
10
|
+
code: BrandedBytecode,
|
|
11
|
+
offset: number,
|
|
12
|
+
): boolean => _isValidJumpDest(code, offset);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module parseInstructions
|
|
3
|
+
* @description Parse bytecode into instructions (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { parseInstructions as _parseInstructions } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode, Instruction } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const parseInstructions = (code: BrandedBytecode): Instruction[] =>
|
|
10
|
+
_parseInstructions(code);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module prettyPrint
|
|
3
|
+
* @description Pretty print bytecode disassembly (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { prettyPrint as _prettyPrint } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode, PrettyPrintOptions } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const prettyPrint = (
|
|
10
|
+
bytecode: BrandedBytecode,
|
|
11
|
+
options?: PrettyPrintOptions,
|
|
12
|
+
): string => _prettyPrint(bytecode, options);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module scan
|
|
3
|
+
* @description Iterator over bytecode instructions (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { scan as _scan } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode, ScanOptions } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const scan = (
|
|
10
|
+
bytecode: BrandedBytecode,
|
|
11
|
+
options?: ScanOptions,
|
|
12
|
+
): Generator<{
|
|
13
|
+
pc: number;
|
|
14
|
+
opcode: number;
|
|
15
|
+
type: "push" | "regular";
|
|
16
|
+
size: number;
|
|
17
|
+
value?: bigint;
|
|
18
|
+
gas?: number;
|
|
19
|
+
stackEffect?: { pop: number; push: number };
|
|
20
|
+
}> => _scan(bytecode, options);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module size
|
|
3
|
+
* @description Get bytecode size (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { size as _size } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const size = (code: BrandedBytecode): number => _size(code);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module stripMetadata
|
|
3
|
+
* @description Strip CBOR metadata from bytecode (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { stripMetadata as _stripMetadata } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const stripMetadata = (code: BrandedBytecode): BrandedBytecode =>
|
|
10
|
+
_stripMetadata(code);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module toAbi
|
|
3
|
+
* @description Extract ABI from bytecode (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { toAbi as _toAbi } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode, BrandedAbi } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const toAbi = (bytecode: BrandedBytecode): BrandedAbi =>
|
|
10
|
+
_toAbi(bytecode);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module toHex
|
|
3
|
+
* @description Convert bytecode to hex string (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { toHex as _toHex } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const toHex = (code: BrandedBytecode, prefix?: boolean): string =>
|
|
10
|
+
_toHex(code, prefix);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module types
|
|
3
|
+
* @description Bytecode type re-exports
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export type {
|
|
8
|
+
Analysis,
|
|
9
|
+
BasicBlock,
|
|
10
|
+
BlockAnalysisOptions,
|
|
11
|
+
GasAnalysis,
|
|
12
|
+
GasAnalysisOptions,
|
|
13
|
+
Instruction,
|
|
14
|
+
PrettyPrintOptions,
|
|
15
|
+
ScanOptions,
|
|
16
|
+
StackAnalysis,
|
|
17
|
+
StackAnalysisOptions,
|
|
18
|
+
BrandedAbi,
|
|
19
|
+
} from "@tevm/voltaire/Bytecode";
|
|
20
|
+
|
|
21
|
+
// Use loose type to avoid brand symbol issues
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
export type BrandedBytecode = any;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module validate
|
|
3
|
+
* @description Validate bytecode structure (pure)
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { validate as _validate } from "@tevm/voltaire/Bytecode";
|
|
7
|
+
import type { BrandedBytecode } from "./types.js";
|
|
8
|
+
|
|
9
|
+
export const validate = (code: BrandedBytecode): boolean => _validate(code);
|
|
@@ -44,19 +44,7 @@ describe("checkReturnData", () => {
|
|
|
44
44
|
|
|
45
45
|
describe("verifySignature", () => {
|
|
46
46
|
const mockProvider = {
|
|
47
|
-
|
|
48
|
-
getLogs: vi.fn(),
|
|
49
|
-
getBlockNumber: vi.fn(),
|
|
50
|
-
getBalance: vi.fn(),
|
|
51
|
-
getBlock: vi.fn(),
|
|
52
|
-
getTransaction: vi.fn(),
|
|
53
|
-
getTransactionReceipt: vi.fn(),
|
|
54
|
-
getTransactionCount: vi.fn(),
|
|
55
|
-
getCode: vi.fn(),
|
|
56
|
-
getStorageAt: vi.fn(),
|
|
57
|
-
estimateGas: vi.fn(),
|
|
58
|
-
getChainId: vi.fn(),
|
|
59
|
-
getGasPrice: vi.fn(),
|
|
47
|
+
request: vi.fn(),
|
|
60
48
|
};
|
|
61
49
|
|
|
62
50
|
const _MockProviderLayer = Layer.succeed(
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from "@tevm/voltaire";
|
|
17
17
|
import * as Data from "effect/Data";
|
|
18
18
|
import * as Effect from "effect/Effect";
|
|
19
|
-
import
|
|
19
|
+
import { getCode, call } from "../../services/Provider/functions/index.js";
|
|
20
20
|
import { ProviderService } from "../../services/Provider/index.js";
|
|
21
21
|
|
|
22
22
|
type AddressType = BrandedAddress.AddressType;
|
|
@@ -122,6 +122,9 @@ const isEmptyCode = (code: unknown): code is string =>
|
|
|
122
122
|
typeof code === "string" &&
|
|
123
123
|
(code === "0x" || code === "0x0" || code === "0x00");
|
|
124
124
|
|
|
125
|
+
// EIP-1271 magic value
|
|
126
|
+
const EIP1271_MAGIC_VALUE = "0x1626ba7e";
|
|
127
|
+
|
|
125
128
|
/**
|
|
126
129
|
* Verify a signature for both EOA and contract accounts (EIP-1271).
|
|
127
130
|
*
|
|
@@ -167,44 +170,29 @@ export const verifySignature = (
|
|
|
167
170
|
ProviderService
|
|
168
171
|
> =>
|
|
169
172
|
Effect.gen(function* () {
|
|
170
|
-
const provider = yield* ProviderService;
|
|
171
|
-
const runtime = yield* Effect.runtime();
|
|
172
|
-
const runPromise = Runtime.runPromise(runtime);
|
|
173
|
-
|
|
174
173
|
const addressStr =
|
|
175
174
|
typeof address === "string" ? address : Address.toHex(address);
|
|
175
|
+
const addressHex = addressStr as `0x${string}`;
|
|
176
176
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
throw new Error(`Unsupported method: ${method}`);
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
const addressHex =
|
|
201
|
-
typeof address === "string" ? address : Address.toHex(address);
|
|
202
|
-
const code = await providerAdapter.request("eth_getCode", [
|
|
203
|
-
addressHex,
|
|
204
|
-
"latest",
|
|
205
|
-
]);
|
|
206
|
-
|
|
207
|
-
if (isEmptyCode(code)) {
|
|
177
|
+
// Get code to determine if EOA or contract
|
|
178
|
+
const code = yield* getCode(addressHex, "latest").pipe(
|
|
179
|
+
Effect.mapError(
|
|
180
|
+
(e) =>
|
|
181
|
+
new SignatureVerificationError({
|
|
182
|
+
input: {
|
|
183
|
+
address: addressStr,
|
|
184
|
+
hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
|
|
185
|
+
},
|
|
186
|
+
message: `Failed to get code: ${e.message}`,
|
|
187
|
+
cause: e,
|
|
188
|
+
}),
|
|
189
|
+
),
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
// EOA verification
|
|
193
|
+
if (isEmptyCode(code)) {
|
|
194
|
+
return yield* Effect.try({
|
|
195
|
+
try: () => {
|
|
208
196
|
const sigComponents = toSignatureComponents(signature);
|
|
209
197
|
const publicKey = Secp256k1.recoverPublicKey(
|
|
210
198
|
sigComponents,
|
|
@@ -216,39 +204,77 @@ export const verifySignature = (
|
|
|
216
204
|
const expectedAddress =
|
|
217
205
|
typeof address === "string" ? Address(address) : address;
|
|
218
206
|
return Address.equals(recoveredAddress, expectedAddress);
|
|
219
|
-
}
|
|
207
|
+
},
|
|
208
|
+
catch: (e) => {
|
|
209
|
+
if (e instanceof InvalidSignatureFormatError) {
|
|
210
|
+
return e;
|
|
211
|
+
}
|
|
212
|
+
if (
|
|
213
|
+
e instanceof Error &&
|
|
214
|
+
(e.name === "InvalidSignatureFormatError" ||
|
|
215
|
+
e.name === "InvalidSignatureError")
|
|
216
|
+
) {
|
|
217
|
+
return new InvalidSignatureFormatError({
|
|
218
|
+
message: e.message,
|
|
219
|
+
cause: e,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return new SignatureVerificationError({
|
|
223
|
+
input: {
|
|
224
|
+
address: addressStr,
|
|
225
|
+
hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
|
|
226
|
+
},
|
|
227
|
+
message:
|
|
228
|
+
e instanceof Error ? e.message : "Signature verification failed",
|
|
229
|
+
cause: e,
|
|
230
|
+
});
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
}
|
|
220
234
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
address as any,
|
|
225
|
-
hash as any,
|
|
226
|
-
signatureBytes,
|
|
227
|
-
);
|
|
228
|
-
},
|
|
235
|
+
// Contract (EIP-1271) verification
|
|
236
|
+
const signatureBytes = yield* Effect.try({
|
|
237
|
+
try: () => toSignatureBytes(signature),
|
|
229
238
|
catch: (e) => {
|
|
230
239
|
if (e instanceof InvalidSignatureFormatError) {
|
|
231
240
|
return e;
|
|
232
241
|
}
|
|
233
|
-
|
|
234
|
-
e instanceof Error
|
|
235
|
-
(e.name === "InvalidSignatureFormatError" ||
|
|
236
|
-
e.name === "InvalidSignatureError")
|
|
237
|
-
) {
|
|
238
|
-
return new InvalidSignatureFormatError({
|
|
239
|
-
message: e.message,
|
|
240
|
-
cause: e,
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
return new SignatureVerificationError({
|
|
244
|
-
input: {
|
|
245
|
-
address: addressStr,
|
|
246
|
-
hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
|
|
247
|
-
},
|
|
248
|
-
message:
|
|
249
|
-
e instanceof Error ? e.message : "Signature verification failed",
|
|
242
|
+
return new InvalidSignatureFormatError({
|
|
243
|
+
message: e instanceof Error ? e.message : "Invalid signature format",
|
|
250
244
|
cause: e,
|
|
251
245
|
});
|
|
252
246
|
},
|
|
253
247
|
});
|
|
248
|
+
|
|
249
|
+
// Build EIP-1271 isValidSignature call data
|
|
250
|
+
const hashHex =
|
|
251
|
+
hash instanceof Uint8Array
|
|
252
|
+
? `0x${Buffer.from(hash).toString("hex")}`
|
|
253
|
+
: `0x${Buffer.from(hash).toString("hex")}`;
|
|
254
|
+
const sigHex = `0x${Buffer.from(signatureBytes).toString("hex")}`;
|
|
255
|
+
|
|
256
|
+
// isValidSignature(bytes32 hash, bytes signature) selector: 0x1626ba7e
|
|
257
|
+
// ABI encode: selector + hash (32 bytes) + offset to signature (32) + signature length (32) + signature data
|
|
258
|
+
const hashPadded = hashHex.slice(2).padStart(64, "0");
|
|
259
|
+
const sigOffset = "0000000000000000000000000000000000000000000000000000000000000040"; // 64 in hex
|
|
260
|
+
const sigLength = signatureBytes.length.toString(16).padStart(64, "0");
|
|
261
|
+
const sigPadded = sigHex.slice(2).padEnd(Math.ceil(signatureBytes.length / 32) * 64, "0");
|
|
262
|
+
const callData = `0x1626ba7e${hashPadded}${sigOffset}${sigLength}${sigPadded}` as `0x${string}`;
|
|
263
|
+
|
|
264
|
+
const result = yield* call({ to: addressHex, data: callData }).pipe(
|
|
265
|
+
Effect.mapError(
|
|
266
|
+
(e) =>
|
|
267
|
+
new SignatureVerificationError({
|
|
268
|
+
input: {
|
|
269
|
+
address: addressStr,
|
|
270
|
+
hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
|
|
271
|
+
},
|
|
272
|
+
message: `EIP-1271 call failed: ${e.message}`,
|
|
273
|
+
cause: e,
|
|
274
|
+
}),
|
|
275
|
+
),
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
// Check if result matches EIP-1271 magic value
|
|
279
|
+
return result.toLowerCase().startsWith(EIP1271_MAGIC_VALUE);
|
|
254
280
|
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest";
|
|
2
|
+
import { Effect, Exit } from "effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import * as Ens from "./index.js";
|
|
5
|
+
|
|
6
|
+
describe("Ens.EnsSchema", () => {
|
|
7
|
+
it("validates ENS name", () => {
|
|
8
|
+
const name = Schema.decodeSync(Ens.EnsSchema)("vitalik.eth");
|
|
9
|
+
expect(typeof name).toBe("string");
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
describe("Ens.from", () => {
|
|
14
|
+
it("creates EnsType from string", async () => {
|
|
15
|
+
const name = await Effect.runPromise(Ens.from("vitalik.eth"));
|
|
16
|
+
expect(typeof name).toBe("string");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
describe("Ens.normalize", () => {
|
|
21
|
+
it("normalizes ENS name", async () => {
|
|
22
|
+
const normalized = await Effect.runPromise(Ens.normalize("VITALIK.ETH"));
|
|
23
|
+
expect(normalized.toLowerCase()).toBe("vitalik.eth");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe("Ens.beautify", () => {
|
|
28
|
+
it("beautifies ENS name", async () => {
|
|
29
|
+
const beautified = await Effect.runPromise(Ens.beautify("vitalik.eth"));
|
|
30
|
+
expect(typeof beautified).toBe("string");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
describe("Ens.namehash", () => {
|
|
35
|
+
it("computes namehash", async () => {
|
|
36
|
+
const hash = await Effect.runPromise(Ens.namehash("eth"));
|
|
37
|
+
expect(hash).toBeInstanceOf(Uint8Array);
|
|
38
|
+
expect(hash.length).toBe(32);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe("Ens.labelhash", () => {
|
|
43
|
+
it("computes labelhash", async () => {
|
|
44
|
+
const hash = await Effect.runPromise(Ens.labelhash("vitalik"));
|
|
45
|
+
expect(hash).toBeInstanceOf(Uint8Array);
|
|
46
|
+
expect(hash.length).toBe(32);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("Ens.validation", () => {
|
|
51
|
+
it("isValid returns true for valid names", () => {
|
|
52
|
+
expect(Ens.isValid("vitalik.eth")).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("isValid returns false for invalid names", () => {
|
|
56
|
+
expect(Ens.isValid("")).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("validate succeeds for valid names", async () => {
|
|
60
|
+
const result = await Effect.runPromiseExit(Ens.validate("vitalik.eth"));
|
|
61
|
+
expect(Exit.isSuccess(result)).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("Ens.toString", () => {
|
|
66
|
+
it("converts to string", async () => {
|
|
67
|
+
const name = await Effect.runPromise(Ens.from("vitalik.eth"));
|
|
68
|
+
const str = Ens.toString(name);
|
|
69
|
+
expect(str).toBe("vitalik.eth");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module convert
|
|
3
|
+
* @description Pure ENS conversion functions
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Ens } from "@tevm/voltaire";
|
|
7
|
+
import type { EnsType } from "./String.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Convert ENS name to string
|
|
11
|
+
*/
|
|
12
|
+
// biome-ignore lint/suspicious/noShadowRestrictedNames: intentional API name
|
|
13
|
+
export const toString = (name: EnsType): string => Ens.toString(name);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module from
|
|
3
|
+
* @description Effect-wrapped ENS constructor
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { Ens } from "@tevm/voltaire";
|
|
8
|
+
import type { EnsType } from "./String.js";
|
|
9
|
+
|
|
10
|
+
type EnsError =
|
|
11
|
+
| Ens.DisallowedCharacterError
|
|
12
|
+
| Ens.EmptyLabelError
|
|
13
|
+
| Ens.IllegalMixtureError
|
|
14
|
+
| Ens.InvalidLabelExtensionError
|
|
15
|
+
| Ens.InvalidUtf8Error
|
|
16
|
+
| Ens.WholeConfusableError;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Create ENS name from string
|
|
20
|
+
*
|
|
21
|
+
* @param name - ENS name string
|
|
22
|
+
* @returns Effect yielding EnsType or failing with EnsError
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const ens = await Effect.runPromise(Ens.from('vitalik.eth'))
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export const from = (name: string): Effect.Effect<EnsType, EnsError> =>
|
|
29
|
+
Effect.try({
|
|
30
|
+
try: () => Ens.from(name),
|
|
31
|
+
catch: (e) => e as EnsError,
|
|
32
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module hash
|
|
3
|
+
* @description Effect-wrapped ENS hash operations
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { Ens } from "@tevm/voltaire";
|
|
8
|
+
|
|
9
|
+
type EnsError =
|
|
10
|
+
| Ens.DisallowedCharacterError
|
|
11
|
+
| Ens.EmptyLabelError
|
|
12
|
+
| Ens.IllegalMixtureError
|
|
13
|
+
| Ens.InvalidLabelExtensionError
|
|
14
|
+
| Ens.InvalidUtf8Error
|
|
15
|
+
| Ens.WholeConfusableError;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Compute namehash of ENS name (32-byte hash for contracts)
|
|
19
|
+
*
|
|
20
|
+
* @param name - ENS name to hash
|
|
21
|
+
* @returns Effect yielding 32-byte hash
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const hash = await Effect.runPromise(Ens.namehash('vitalik.eth'))
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export const namehash = (name: string): Effect.Effect<Uint8Array, EnsError> =>
|
|
28
|
+
Effect.try({
|
|
29
|
+
try: () => Ens.namehash(name),
|
|
30
|
+
catch: (e) => e as EnsError,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Compute labelhash of single ENS label
|
|
35
|
+
*
|
|
36
|
+
* @param label - Single ENS label to hash
|
|
37
|
+
* @returns Effect yielding 32-byte hash
|
|
38
|
+
*/
|
|
39
|
+
export const labelhash = (label: string): Effect.Effect<Uint8Array, EnsError> =>
|
|
40
|
+
Effect.try({
|
|
41
|
+
try: () => Ens.labelhash(label),
|
|
42
|
+
catch: (e) => e as EnsError,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Re-export factories for advanced usage
|
|
46
|
+
export { Labelhash, Namehash } from "@tevm/voltaire/Ens";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* @module Ens
|
|
3
|
+
* @description Effect-based operations for Ethereum Name Service names.
|
|
4
4
|
*
|
|
5
5
|
* ## Type Declarations
|
|
6
6
|
*
|
|
@@ -12,7 +12,89 @@
|
|
|
12
12
|
* }
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* ## Schemas
|
|
16
|
+
*
|
|
17
|
+
* | Schema | Input | Output |
|
|
18
|
+
* |--------|-------|--------|
|
|
19
|
+
* | `Ens.EnsSchema` | string | EnsType |
|
|
20
|
+
*
|
|
21
|
+
* ## Constructors (Effect-wrapped)
|
|
22
|
+
*
|
|
23
|
+
* ```typescript
|
|
24
|
+
* Ens.from(name) // Effect<EnsType, EnsError>
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* ## Normalization (Effect-wrapped)
|
|
28
|
+
*
|
|
29
|
+
* ```typescript
|
|
30
|
+
* Ens.normalize(name) // Effect<EnsType, EnsError>
|
|
31
|
+
* Ens.beautify(name) // Effect<EnsType, EnsError>
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* ## Hashing (Effect-wrapped)
|
|
35
|
+
*
|
|
36
|
+
* ```typescript
|
|
37
|
+
* Ens.namehash(name) // Effect<Uint8Array, EnsError>
|
|
38
|
+
* Ens.labelhash(label) // Effect<Uint8Array, EnsError>
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Validation
|
|
42
|
+
*
|
|
43
|
+
* ```typescript
|
|
44
|
+
* Ens.isValid(name) // boolean (pure)
|
|
45
|
+
* Ens.is(value) // type guard (pure)
|
|
46
|
+
* Ens.validate(name) // Effect<void, EnsError>
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* ## Conversion (Pure)
|
|
50
|
+
*
|
|
51
|
+
* ```typescript
|
|
52
|
+
* Ens.toString(ens) // string
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import * as Ens from 'voltaire-effect/primitives/Ens'
|
|
58
|
+
* import { Effect } from 'effect'
|
|
59
|
+
*
|
|
60
|
+
* const program = Effect.gen(function* () {
|
|
61
|
+
* yield* Ens.validate('vitalik.eth')
|
|
62
|
+
* const normalized = yield* Ens.normalize('VITALIK.eth')
|
|
63
|
+
* const hash = yield* Ens.namehash(normalized)
|
|
64
|
+
* return { name: normalized, hash }
|
|
65
|
+
* })
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
16
68
|
* @since 0.0.1
|
|
17
69
|
*/
|
|
18
|
-
|
|
70
|
+
|
|
71
|
+
// Types
|
|
72
|
+
export type { EnsType } from "./String.js";
|
|
73
|
+
|
|
74
|
+
// Errors (re-export from voltaire)
|
|
75
|
+
export {
|
|
76
|
+
DisallowedCharacterError,
|
|
77
|
+
EmptyLabelError,
|
|
78
|
+
IllegalMixtureError,
|
|
79
|
+
InvalidLabelExtensionError,
|
|
80
|
+
InvalidUtf8Error,
|
|
81
|
+
WholeConfusableError,
|
|
82
|
+
} from "@tevm/voltaire/Ens";
|
|
83
|
+
|
|
84
|
+
// Schemas
|
|
85
|
+
export { EnsSchema } from "./String.js";
|
|
86
|
+
|
|
87
|
+
// Constructors (Effect-wrapped)
|
|
88
|
+
export { from } from "./from.js";
|
|
89
|
+
|
|
90
|
+
// Normalization (Effect-wrapped)
|
|
91
|
+
export { normalize, beautify } from "./normalize.js";
|
|
92
|
+
|
|
93
|
+
// Hashing (Effect-wrapped)
|
|
94
|
+
export { namehash, labelhash, Labelhash, Namehash } from "./hash.js";
|
|
95
|
+
|
|
96
|
+
// Validation
|
|
97
|
+
export { isValid, is, validate } from "./validation.js";
|
|
98
|
+
|
|
99
|
+
// Conversion (Pure)
|
|
100
|
+
export { toString } from "./convert.js";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module normalize
|
|
3
|
+
* @description Effect-wrapped ENS normalization
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { Ens } from "@tevm/voltaire";
|
|
8
|
+
import type { EnsType } from "./String.js";
|
|
9
|
+
|
|
10
|
+
type EnsError =
|
|
11
|
+
| Ens.DisallowedCharacterError
|
|
12
|
+
| Ens.EmptyLabelError
|
|
13
|
+
| Ens.IllegalMixtureError
|
|
14
|
+
| Ens.InvalidLabelExtensionError
|
|
15
|
+
| Ens.InvalidUtf8Error
|
|
16
|
+
| Ens.WholeConfusableError;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Normalize ENS name per ENSIP-15
|
|
20
|
+
*
|
|
21
|
+
* @param name - ENS name to normalize
|
|
22
|
+
* @returns Effect yielding normalized EnsType
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const normalized = await Effect.runPromise(Ens.normalize('Vitalik.ETH'))
|
|
26
|
+
* // 'vitalik.eth'
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export const normalize = (name: string): Effect.Effect<EnsType, EnsError> =>
|
|
30
|
+
Effect.try({
|
|
31
|
+
try: () => Ens.normalize(name),
|
|
32
|
+
catch: (e) => e as EnsError,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Beautify ENS name for display
|
|
37
|
+
*
|
|
38
|
+
* @param name - ENS name to beautify
|
|
39
|
+
* @returns Effect yielding beautified EnsType
|
|
40
|
+
*/
|
|
41
|
+
export const beautify = (name: string): Effect.Effect<EnsType, EnsError> =>
|
|
42
|
+
Effect.try({
|
|
43
|
+
try: () => Ens.beautify(name),
|
|
44
|
+
catch: (e) => e as EnsError,
|
|
45
|
+
});
|