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,229 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import * as S from "effect/Schema";
|
|
4
|
+
import * as AccessList from "./index.js";
|
|
5
|
+
|
|
6
|
+
const makeAddress = (byte: number): Uint8Array & { readonly __brand?: symbol } =>
|
|
7
|
+
new Uint8Array(20).fill(byte) as Uint8Array & { readonly __brand?: symbol };
|
|
8
|
+
|
|
9
|
+
const makeHash = (byte: number): Uint8Array & { readonly __brand?: symbol } =>
|
|
10
|
+
new Uint8Array(32).fill(byte) as Uint8Array & { readonly __brand?: symbol };
|
|
11
|
+
|
|
12
|
+
describe("AccessList", () => {
|
|
13
|
+
describe("create", () => {
|
|
14
|
+
it("creates empty access list", () => {
|
|
15
|
+
const list = AccessList.create();
|
|
16
|
+
expect(AccessList.isEmpty(list)).toBe(true);
|
|
17
|
+
expect(AccessList.addressCount(list)).toBe(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe("from", () => {
|
|
22
|
+
it("creates from items", async () => {
|
|
23
|
+
const addr = makeAddress(0x42);
|
|
24
|
+
const key = makeHash(0x01);
|
|
25
|
+
const list = await Effect.runPromise(
|
|
26
|
+
AccessList.from([{ address: addr, storageKeys: [key] }])
|
|
27
|
+
);
|
|
28
|
+
expect(AccessList.addressCount(list)).toBe(1);
|
|
29
|
+
expect(AccessList.storageKeyCount(list)).toBe(1);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("type guards", () => {
|
|
34
|
+
it("is() validates access list", () => {
|
|
35
|
+
const list = AccessList.create();
|
|
36
|
+
expect(AccessList.is(list)).toBe(true);
|
|
37
|
+
expect(AccessList.is([])).toBe(true);
|
|
38
|
+
expect(AccessList.is("not a list")).toBe(false);
|
|
39
|
+
expect(AccessList.is([{ invalid: true }])).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("isItem() validates items", () => {
|
|
43
|
+
const addr = makeAddress(0x42);
|
|
44
|
+
const key = makeHash(0x01);
|
|
45
|
+
expect(AccessList.isItem({ address: addr, storageKeys: [key] })).toBe(true);
|
|
46
|
+
expect(AccessList.isItem({ address: addr, storageKeys: [] })).toBe(true);
|
|
47
|
+
expect(AccessList.isItem({ address: "0x123", storageKeys: [] })).toBe(false);
|
|
48
|
+
expect(AccessList.isItem(null)).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe("queries", () => {
|
|
53
|
+
it("isEmpty", () => {
|
|
54
|
+
expect(AccessList.isEmpty(AccessList.create())).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("addressCount", () => {
|
|
58
|
+
const addr1 = makeAddress(0x01);
|
|
59
|
+
const addr2 = makeAddress(0x02);
|
|
60
|
+
let list = AccessList.create();
|
|
61
|
+
list = AccessList.withAddress(list, addr1);
|
|
62
|
+
list = AccessList.withAddress(list, addr2);
|
|
63
|
+
expect(AccessList.addressCount(list)).toBe(2);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("storageKeyCount", () => {
|
|
67
|
+
const addr = makeAddress(0x42);
|
|
68
|
+
const key1 = makeHash(0x01);
|
|
69
|
+
const key2 = makeHash(0x02);
|
|
70
|
+
let list = AccessList.create();
|
|
71
|
+
list = AccessList.withStorageKey(list, addr, key1);
|
|
72
|
+
list = AccessList.withStorageKey(list, addr, key2);
|
|
73
|
+
expect(AccessList.storageKeyCount(list)).toBe(2);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("includesAddress", () => {
|
|
77
|
+
const addr = makeAddress(0x42);
|
|
78
|
+
const other = makeAddress(0x43);
|
|
79
|
+
let list = AccessList.create();
|
|
80
|
+
list = AccessList.withAddress(list, addr);
|
|
81
|
+
expect(AccessList.includesAddress(list, addr)).toBe(true);
|
|
82
|
+
expect(AccessList.includesAddress(list, other)).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("includesStorageKey", () => {
|
|
86
|
+
const addr = makeAddress(0x42);
|
|
87
|
+
const key = makeHash(0x01);
|
|
88
|
+
const other = makeHash(0x02);
|
|
89
|
+
let list = AccessList.create();
|
|
90
|
+
list = AccessList.withStorageKey(list, addr, key);
|
|
91
|
+
expect(AccessList.includesStorageKey(list, addr, key)).toBe(true);
|
|
92
|
+
expect(AccessList.includesStorageKey(list, addr, other)).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("keysFor", () => {
|
|
96
|
+
const addr = makeAddress(0x42);
|
|
97
|
+
const key = makeHash(0x01);
|
|
98
|
+
let list = AccessList.create();
|
|
99
|
+
list = AccessList.withStorageKey(list, addr, key);
|
|
100
|
+
const keys = AccessList.keysFor(list, addr);
|
|
101
|
+
expect(keys).toBeDefined();
|
|
102
|
+
expect(keys?.length).toBe(1);
|
|
103
|
+
expect(AccessList.keysFor(list, makeAddress(0x99))).toBeUndefined();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe("gas calculations", () => {
|
|
108
|
+
it("gasCost", () => {
|
|
109
|
+
const addr = makeAddress(0x42);
|
|
110
|
+
const key = makeHash(0x01);
|
|
111
|
+
let list = AccessList.create();
|
|
112
|
+
list = AccessList.withStorageKey(list, addr, key);
|
|
113
|
+
const cost = AccessList.gasCost(list);
|
|
114
|
+
expect(cost).toBe(AccessList.ADDRESS_COST + AccessList.STORAGE_KEY_COST);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("gasSavings", () => {
|
|
118
|
+
const addr = makeAddress(0x42);
|
|
119
|
+
let list = AccessList.create();
|
|
120
|
+
list = AccessList.withAddress(list, addr);
|
|
121
|
+
const savings = AccessList.gasSavings(list);
|
|
122
|
+
expect(savings).toBe(AccessList.COLD_ACCOUNT_ACCESS_COST - AccessList.ADDRESS_COST);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("hasSavings", () => {
|
|
126
|
+
const addr = makeAddress(0x42);
|
|
127
|
+
let list = AccessList.create();
|
|
128
|
+
list = AccessList.withAddress(list, addr);
|
|
129
|
+
expect(AccessList.hasSavings(list)).toBe(true);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe("transformations", () => {
|
|
134
|
+
it("withAddress adds new address", () => {
|
|
135
|
+
const addr = makeAddress(0x42);
|
|
136
|
+
let list = AccessList.create();
|
|
137
|
+
list = AccessList.withAddress(list, addr);
|
|
138
|
+
expect(AccessList.includesAddress(list, addr)).toBe(true);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("withAddress is idempotent", () => {
|
|
142
|
+
const addr = makeAddress(0x42);
|
|
143
|
+
let list = AccessList.create();
|
|
144
|
+
list = AccessList.withAddress(list, addr);
|
|
145
|
+
const list2 = AccessList.withAddress(list, addr);
|
|
146
|
+
expect(AccessList.addressCount(list2)).toBe(1);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it("withStorageKey adds key", () => {
|
|
150
|
+
const addr = makeAddress(0x42);
|
|
151
|
+
const key = makeHash(0x01);
|
|
152
|
+
let list = AccessList.create();
|
|
153
|
+
list = AccessList.withStorageKey(list, addr, key);
|
|
154
|
+
expect(AccessList.includesStorageKey(list, addr, key)).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("deduplicate merges duplicate addresses", () => {
|
|
158
|
+
const addr = makeAddress(0x42);
|
|
159
|
+
const key1 = makeHash(0x01);
|
|
160
|
+
const key2 = makeHash(0x02);
|
|
161
|
+
const list = [
|
|
162
|
+
{ address: addr, storageKeys: [key1] },
|
|
163
|
+
{ address: addr, storageKeys: [key2, key1] },
|
|
164
|
+
] as AccessList.BrandedAccessList;
|
|
165
|
+
const deduped = AccessList.deduplicate(list);
|
|
166
|
+
expect(AccessList.addressCount(deduped)).toBe(1);
|
|
167
|
+
expect(AccessList.storageKeyCount(deduped)).toBe(2);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("merge combines lists", () => {
|
|
171
|
+
const addr1 = makeAddress(0x01);
|
|
172
|
+
const addr2 = makeAddress(0x02);
|
|
173
|
+
const list1 = AccessList.withAddress(AccessList.create(), addr1);
|
|
174
|
+
const list2 = AccessList.withAddress(AccessList.create(), addr2);
|
|
175
|
+
const merged = AccessList.merge(list1, list2);
|
|
176
|
+
expect(AccessList.addressCount(merged)).toBe(2);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("toBytes encodes to RLP", () => {
|
|
180
|
+
const list = AccessList.create();
|
|
181
|
+
const bytes = AccessList.toBytes(list);
|
|
182
|
+
expect(bytes).toBeInstanceOf(Uint8Array);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
describe("assertValid", () => {
|
|
187
|
+
it("succeeds for valid list", async () => {
|
|
188
|
+
const list = AccessList.create();
|
|
189
|
+
await Effect.runPromise(AccessList.assertValid(list));
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
describe("Rpc schema", () => {
|
|
194
|
+
it("decodes from JSON-RPC format", () => {
|
|
195
|
+
const input = [
|
|
196
|
+
{
|
|
197
|
+
address: "0x742d35Cc6634C0532925a3b844Bc9e7595f251e3",
|
|
198
|
+
storageKeys: [
|
|
199
|
+
"0x0000000000000000000000000000000000000000000000000000000000000001",
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
const list = S.decodeSync(AccessList.Rpc)(input);
|
|
204
|
+
expect(AccessList.addressCount(list)).toBe(1);
|
|
205
|
+
expect(AccessList.storageKeyCount(list)).toBe(1);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it("encodes to JSON-RPC format", () => {
|
|
209
|
+
const addr = makeAddress(0x42);
|
|
210
|
+
const key = makeHash(0x01);
|
|
211
|
+
let list = AccessList.create();
|
|
212
|
+
list = AccessList.withStorageKey(list, addr, key);
|
|
213
|
+
const json = S.encodeSync(AccessList.Rpc)(list);
|
|
214
|
+
expect(json).toHaveLength(1);
|
|
215
|
+
expect(json[0].address).toMatch(/^0x[0-9a-f]{40}$/);
|
|
216
|
+
expect(json[0].storageKeys).toHaveLength(1);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe("constants", () => {
|
|
221
|
+
it("exports gas constants", () => {
|
|
222
|
+
expect(AccessList.ADDRESS_COST).toBe(2400n);
|
|
223
|
+
expect(AccessList.STORAGE_KEY_COST).toBe(1900n);
|
|
224
|
+
expect(AccessList.COLD_ACCOUNT_ACCESS_COST).toBe(2600n);
|
|
225
|
+
expect(AccessList.COLD_STORAGE_ACCESS_COST).toBe(2100n);
|
|
226
|
+
expect(AccessList.WARM_STORAGE_ACCESS_COST).toBe(100n);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module AccessListTypeSchema
|
|
3
|
+
* @description Effect Schema declaration for BrandedAccessList type
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
import * as S from "effect/Schema";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Schema declaration for the BrandedAccessList type
|
|
11
|
+
* @since 0.1.0
|
|
12
|
+
*/
|
|
13
|
+
export const AccessListTypeSchema = S.declare<BrandedAccessList>(
|
|
14
|
+
(u): u is BrandedAccessList => AccessList.is(u),
|
|
15
|
+
{ identifier: "AccessList" },
|
|
16
|
+
);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module addressCount
|
|
3
|
+
* @description Count total addresses in access list
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Count total addresses in access list
|
|
10
|
+
*
|
|
11
|
+
* @param list - Access list to count
|
|
12
|
+
* @returns Number of addresses
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
16
|
+
*
|
|
17
|
+
* const count = AccessList.addressCount(list)
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const addressCount = (list: BrandedAccessList): number =>
|
|
21
|
+
AccessList.addressCount(list);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module assertValid
|
|
3
|
+
* @description Validate access list structure with Effect error handling
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
8
|
+
import type {
|
|
9
|
+
InvalidFormatError,
|
|
10
|
+
InvalidLengthError,
|
|
11
|
+
} from "@tevm/voltaire/errors";
|
|
12
|
+
|
|
13
|
+
type AssertValidError = InvalidFormatError | InvalidLengthError;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Validate access list structure
|
|
17
|
+
*
|
|
18
|
+
* @param list - Access list to validate
|
|
19
|
+
* @returns Effect yielding void or failing with AssertValidError
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
23
|
+
* import * as Effect from 'effect/Effect'
|
|
24
|
+
*
|
|
25
|
+
* const program = Effect.gen(function* () {
|
|
26
|
+
* yield* AccessList.assertValid(list)
|
|
27
|
+
* console.log('Valid access list')
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const assertValid = (
|
|
32
|
+
list: BrandedAccessList,
|
|
33
|
+
): Effect.Effect<void, AssertValidError> =>
|
|
34
|
+
Effect.try({
|
|
35
|
+
try: () => AccessList.assertValid(list),
|
|
36
|
+
catch: (e) => e as AssertValidError,
|
|
37
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module create
|
|
3
|
+
* @description Create empty access list
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Create empty access list
|
|
10
|
+
*
|
|
11
|
+
* @returns Empty access list
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
15
|
+
*
|
|
16
|
+
* const list = AccessList.create()
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export const create = (): BrandedAccessList => AccessList.create();
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module deduplicate
|
|
3
|
+
* @description Deduplicate access list entries
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Deduplicate access list entries
|
|
10
|
+
*
|
|
11
|
+
* Merges duplicate addresses and removes duplicate storage keys.
|
|
12
|
+
*
|
|
13
|
+
* @param list - Access list to deduplicate
|
|
14
|
+
* @returns Deduplicated access list
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
18
|
+
*
|
|
19
|
+
* const deduped = AccessList.deduplicate(list)
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const deduplicate = (list: BrandedAccessList): BrandedAccessList =>
|
|
23
|
+
AccessList.deduplicate(list);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module from
|
|
3
|
+
* @description Create AccessList from array or bytes with Effect error handling
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import {
|
|
8
|
+
AccessList,
|
|
9
|
+
type BrandedAccessList,
|
|
10
|
+
type Item,
|
|
11
|
+
} from "@tevm/voltaire/AccessList";
|
|
12
|
+
import type {
|
|
13
|
+
InvalidFormatError,
|
|
14
|
+
InvalidLengthError,
|
|
15
|
+
} from "@tevm/voltaire/errors";
|
|
16
|
+
|
|
17
|
+
type AccessListError = InvalidFormatError | InvalidLengthError;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Create AccessList from array or bytes
|
|
21
|
+
*
|
|
22
|
+
* @param value - AccessList items or RLP bytes
|
|
23
|
+
* @returns Effect yielding BrandedAccessList or failing with AccessListError
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
27
|
+
* import * as Effect from 'effect/Effect'
|
|
28
|
+
*
|
|
29
|
+
* const program = AccessList.from([{ address, storageKeys: [] }])
|
|
30
|
+
* const list = await Effect.runPromise(program)
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const from = (
|
|
34
|
+
value: readonly Item[] | Uint8Array,
|
|
35
|
+
): Effect.Effect<BrandedAccessList, AccessListError> =>
|
|
36
|
+
Effect.try({
|
|
37
|
+
try: () => AccessList.from(value),
|
|
38
|
+
catch: (e) => e as AccessListError,
|
|
39
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module fromBytes
|
|
3
|
+
* @description Decode RLP bytes to access list with Effect error handling
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
8
|
+
import type {
|
|
9
|
+
DecodingError,
|
|
10
|
+
InvalidFormatError,
|
|
11
|
+
InvalidLengthError,
|
|
12
|
+
} from "@tevm/voltaire/errors";
|
|
13
|
+
|
|
14
|
+
type FromBytesError = DecodingError | InvalidFormatError | InvalidLengthError;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Decode RLP bytes to access list
|
|
18
|
+
*
|
|
19
|
+
* @param bytes - RLP-encoded access list
|
|
20
|
+
* @returns Effect yielding BrandedAccessList or failing with FromBytesError
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
24
|
+
* import * as Effect from 'effect/Effect'
|
|
25
|
+
*
|
|
26
|
+
* const program = AccessList.fromBytes(bytes)
|
|
27
|
+
* const list = await Effect.runPromise(program)
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export const fromBytes = (
|
|
31
|
+
bytes: Uint8Array,
|
|
32
|
+
): Effect.Effect<BrandedAccessList, FromBytesError> =>
|
|
33
|
+
Effect.try({
|
|
34
|
+
try: () => AccessList.fromBytes(bytes),
|
|
35
|
+
catch: (e) => e as FromBytesError,
|
|
36
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module gasCost
|
|
3
|
+
* @description Calculate total gas cost for access list
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Calculate total gas cost for access list
|
|
10
|
+
*
|
|
11
|
+
* @param list - Access list to calculate cost for
|
|
12
|
+
* @returns Total gas cost in wei
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
16
|
+
*
|
|
17
|
+
* const cost = AccessList.gasCost(list)
|
|
18
|
+
* // cost = ADDRESS_COST + (numKeys * STORAGE_KEY_COST)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const gasCost = (list: BrandedAccessList): bigint =>
|
|
22
|
+
AccessList.gasCost(list);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module gasSavings
|
|
3
|
+
* @description Calculate gas savings from using access list
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Calculate gas savings from using access list
|
|
10
|
+
*
|
|
11
|
+
* Compares cold access costs vs access list costs.
|
|
12
|
+
*
|
|
13
|
+
* @param list - Access list to calculate savings for
|
|
14
|
+
* @returns Estimated gas savings (can be negative if not beneficial)
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
18
|
+
*
|
|
19
|
+
* const savings = AccessList.gasSavings(list)
|
|
20
|
+
* if (savings > 0n) {
|
|
21
|
+
* console.log('Access list saves gas:', savings)
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const gasSavings = (list: BrandedAccessList): bigint =>
|
|
26
|
+
AccessList.gasSavings(list);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module hasSavings
|
|
3
|
+
* @description Check if access list provides net gas savings
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Check if access list provides net gas savings
|
|
10
|
+
*
|
|
11
|
+
* @param list - Access list to check
|
|
12
|
+
* @returns true if access list saves gas overall
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
16
|
+
*
|
|
17
|
+
* if (AccessList.hasSavings(list)) {
|
|
18
|
+
* // Use the access list in transaction
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const hasSavings = (list: BrandedAccessList): boolean =>
|
|
23
|
+
AccessList.hasSavings(list);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module includesAddress
|
|
3
|
+
* @description Check if address is in access list
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
import type { AddressType } from "@tevm/voltaire/Address";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Check if address is in access list
|
|
11
|
+
*
|
|
12
|
+
* @param list - Access list to search
|
|
13
|
+
* @param address - Address to find
|
|
14
|
+
* @returns true if address is in access list
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
18
|
+
*
|
|
19
|
+
* const hasAddress = AccessList.includesAddress(list, address)
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const includesAddress = (
|
|
23
|
+
list: BrandedAccessList,
|
|
24
|
+
address: AddressType,
|
|
25
|
+
): boolean => AccessList.includesAddress(list, address);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module includesStorageKey
|
|
3
|
+
* @description Check if storage key is in access list for given address
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { AccessList, type BrandedAccessList } from "@tevm/voltaire/AccessList";
|
|
7
|
+
import type { AddressType } from "@tevm/voltaire/Address";
|
|
8
|
+
import type { HashType } from "@tevm/voltaire/Hash";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Check if storage key is in access list for given address
|
|
12
|
+
*
|
|
13
|
+
* @param list - Access list to search
|
|
14
|
+
* @param address - Address to check
|
|
15
|
+
* @param storageKey - Storage key to find
|
|
16
|
+
* @returns true if storage key is accessible
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
20
|
+
*
|
|
21
|
+
* const isAccessible = AccessList.includesStorageKey(list, address, key)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const includesStorageKey = (
|
|
25
|
+
list: BrandedAccessList,
|
|
26
|
+
address: AddressType,
|
|
27
|
+
storageKey: HashType,
|
|
28
|
+
): boolean => AccessList.includesStorageKey(list, address, storageKey);
|
|
@@ -1,32 +1,112 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module AccessList
|
|
3
|
-
* @description Effect Schemas for EIP-2930 access lists.
|
|
3
|
+
* @description Effect Schemas and functions for EIP-2930 access lists.
|
|
4
|
+
*
|
|
5
|
+
* ## Type Declarations
|
|
6
|
+
*
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import * as AccessList from 'voltaire-effect/primitives/AccessList'
|
|
9
|
+
*
|
|
10
|
+
* function buildTx(accessList: AccessList.BrandedAccessList) {
|
|
11
|
+
* // ...
|
|
12
|
+
* }
|
|
13
|
+
* ```
|
|
4
14
|
*
|
|
5
15
|
* ## Schemas
|
|
6
16
|
*
|
|
7
|
-
* | Schema | Input | Output |
|
|
8
|
-
*
|
|
9
|
-
* | `AccessList.Rpc` | JSON-RPC format | BrandedAccessList |
|
|
17
|
+
* | Schema | Input | Output | Description |
|
|
18
|
+
* |--------|-------|--------|-------------|
|
|
19
|
+
* | `AccessList.Rpc` | JSON-RPC format | BrandedAccessList | Decodes from RPC format |
|
|
10
20
|
*
|
|
11
|
-
* ##
|
|
21
|
+
* ## Constructors
|
|
12
22
|
*
|
|
13
23
|
* ```typescript
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* //
|
|
26
|
-
*
|
|
24
|
+
* AccessList.create() // BrandedAccessList (pure)
|
|
25
|
+
* AccessList.from(value) // Effect<BrandedAccessList, Error>
|
|
26
|
+
* AccessList.fromBytes(bytes) // Effect<BrandedAccessList, Error>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* ## Pure Functions
|
|
30
|
+
*
|
|
31
|
+
* ```typescript
|
|
32
|
+
* AccessList.is(value) // type guard
|
|
33
|
+
* AccessList.isItem(value) // type guard
|
|
34
|
+
* AccessList.isEmpty(list) // boolean
|
|
35
|
+
* AccessList.addressCount(list) // number
|
|
36
|
+
* AccessList.storageKeyCount(list) // number
|
|
37
|
+
* AccessList.includesAddress(list, addr) // boolean
|
|
38
|
+
* AccessList.includesStorageKey(list, addr, key) // boolean
|
|
39
|
+
* AccessList.keysFor(list, addr) // readonly HashType[] | undefined
|
|
40
|
+
* AccessList.gasCost(list) // bigint
|
|
41
|
+
* AccessList.gasSavings(list) // bigint
|
|
42
|
+
* AccessList.hasSavings(list) // boolean
|
|
43
|
+
* AccessList.deduplicate(list) // BrandedAccessList
|
|
44
|
+
* AccessList.merge(...lists) // BrandedAccessList
|
|
45
|
+
* AccessList.toBytes(list) // Uint8Array
|
|
46
|
+
* AccessList.withAddress(list, addr) // BrandedAccessList
|
|
47
|
+
* AccessList.withStorageKey(list, addr, key) // BrandedAccessList
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## Effectful Functions
|
|
51
|
+
*
|
|
52
|
+
* ```typescript
|
|
53
|
+
* AccessList.assertValid(list) // Effect<void, AssertValidError>
|
|
27
54
|
* ```
|
|
28
55
|
*
|
|
29
56
|
* @since 0.1.0
|
|
30
57
|
*/
|
|
31
58
|
|
|
32
|
-
export
|
|
59
|
+
// Re-export types from voltaire
|
|
60
|
+
export type { BrandedAccessList, Item } from "@tevm/voltaire/AccessList";
|
|
61
|
+
export { AccessListTypeSchema } from "./AccessListTypeSchema.js";
|
|
62
|
+
|
|
63
|
+
// Re-export errors from voltaire
|
|
64
|
+
export {
|
|
65
|
+
InvalidFormatError,
|
|
66
|
+
InvalidLengthError,
|
|
67
|
+
DecodingError,
|
|
68
|
+
} from "@tevm/voltaire/errors";
|
|
69
|
+
|
|
70
|
+
// Schemas
|
|
71
|
+
export { Rpc, type AccessListInput, type AccessListItemInput } from "./Rpc.js";
|
|
72
|
+
|
|
73
|
+
// Constructors
|
|
74
|
+
export { create } from "./create.js";
|
|
75
|
+
export { from } from "./from.js";
|
|
76
|
+
export { fromBytes } from "./fromBytes.js";
|
|
77
|
+
|
|
78
|
+
// Pure functions - type guards
|
|
79
|
+
export { is } from "./is.js";
|
|
80
|
+
export { isItem } from "./isItem.js";
|
|
81
|
+
|
|
82
|
+
// Pure functions - queries
|
|
83
|
+
export { isEmpty } from "./isEmpty.js";
|
|
84
|
+
export { addressCount } from "./addressCount.js";
|
|
85
|
+
export { storageKeyCount } from "./storageKeyCount.js";
|
|
86
|
+
export { includesAddress } from "./includesAddress.js";
|
|
87
|
+
export { includesStorageKey } from "./includesStorageKey.js";
|
|
88
|
+
export { keysFor } from "./keysFor.js";
|
|
89
|
+
|
|
90
|
+
// Pure functions - gas calculations
|
|
91
|
+
export { gasCost } from "./gasCost.js";
|
|
92
|
+
export { gasSavings } from "./gasSavings.js";
|
|
93
|
+
export { hasSavings } from "./hasSavings.js";
|
|
94
|
+
|
|
95
|
+
// Pure functions - transformations
|
|
96
|
+
export { deduplicate } from "./deduplicate.js";
|
|
97
|
+
export { merge } from "./merge.js";
|
|
98
|
+
export { toBytes } from "./toBytes.js";
|
|
99
|
+
export { withAddress } from "./withAddress.js";
|
|
100
|
+
export { withStorageKey } from "./withStorageKey.js";
|
|
101
|
+
|
|
102
|
+
// Effectful functions
|
|
103
|
+
export { assertValid } from "./assertValid.js";
|
|
104
|
+
|
|
105
|
+
// Re-export constants from voltaire
|
|
106
|
+
export {
|
|
107
|
+
ADDRESS_COST,
|
|
108
|
+
STORAGE_KEY_COST,
|
|
109
|
+
COLD_ACCOUNT_ACCESS_COST,
|
|
110
|
+
COLD_STORAGE_ACCESS_COST,
|
|
111
|
+
WARM_STORAGE_ACCESS_COST,
|
|
112
|
+
} from "@tevm/voltaire/AccessList";
|