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
|
@@ -101,20 +101,25 @@ const erc20Abi = S.decodeUnknownSync(fromArray)([
|
|
|
101
101
|
},
|
|
102
102
|
]) as any;
|
|
103
103
|
|
|
104
|
+
const mockCallFn = vi.fn();
|
|
105
|
+
const mockGetLogsFn = vi.fn();
|
|
106
|
+
const mockEstimateGasFn = vi.fn();
|
|
107
|
+
|
|
104
108
|
const mockProvider = {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
request: <T>(method: string, params?: unknown[]) => {
|
|
110
|
+
switch (method) {
|
|
111
|
+
case "eth_call":
|
|
112
|
+
return mockCallFn(params?.[0], params?.[1]) as Effect.Effect<T, never>;
|
|
113
|
+
case "eth_getLogs":
|
|
114
|
+
return mockGetLogsFn(params?.[0]) as Effect.Effect<T, never>;
|
|
115
|
+
case "eth_estimateGas":
|
|
116
|
+
return mockEstimateGasFn(params?.[0]) as Effect.Effect<T, never>;
|
|
117
|
+
case "eth_chainId":
|
|
118
|
+
return Effect.succeed("0x1" as T);
|
|
119
|
+
default:
|
|
120
|
+
return Effect.succeed(null as T);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
118
123
|
};
|
|
119
124
|
|
|
120
125
|
const mockSigner = {
|
|
@@ -219,7 +224,7 @@ describe("Contract", () => {
|
|
|
219
224
|
describe("read methods", () => {
|
|
220
225
|
it("calls eth_call with encoded function data", async () => {
|
|
221
226
|
const expectedBalance = 1000000000000000000n;
|
|
222
|
-
|
|
227
|
+
mockCallFn.mockReturnValue(
|
|
223
228
|
Effect.succeed(
|
|
224
229
|
"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" as HexType,
|
|
225
230
|
),
|
|
@@ -237,12 +242,12 @@ describe("Contract", () => {
|
|
|
237
242
|
program.pipe(Effect.provide(MockProviderLayer)),
|
|
238
243
|
);
|
|
239
244
|
|
|
240
|
-
expect(
|
|
245
|
+
expect(mockCallFn).toHaveBeenCalled();
|
|
241
246
|
expect(result).toBe(expectedBalance);
|
|
242
247
|
});
|
|
243
248
|
|
|
244
249
|
it("handles view function with no args", async () => {
|
|
245
|
-
|
|
250
|
+
mockCallFn.mockReturnValue(
|
|
246
251
|
Effect.succeed(
|
|
247
252
|
"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" as HexType,
|
|
248
253
|
),
|
|
@@ -258,7 +263,7 @@ describe("Contract", () => {
|
|
|
258
263
|
program.pipe(Effect.provide(MockProviderLayer)),
|
|
259
264
|
);
|
|
260
265
|
|
|
261
|
-
expect(
|
|
266
|
+
expect(mockCallFn).toHaveBeenCalled();
|
|
262
267
|
expect(typeof result).toBe("bigint");
|
|
263
268
|
});
|
|
264
269
|
|
|
@@ -268,7 +273,7 @@ describe("Contract", () => {
|
|
|
268
273
|
const reserve0 = 1000000000000000000n;
|
|
269
274
|
const reserve1 = 2000000000000000000n;
|
|
270
275
|
const blockTimestamp = 1234567890n;
|
|
271
|
-
|
|
276
|
+
mockCallFn.mockReturnValue(
|
|
272
277
|
Effect.succeed(
|
|
273
278
|
("0x" +
|
|
274
279
|
reserve0.toString(16).padStart(64, "0") +
|
|
@@ -296,7 +301,7 @@ describe("Contract", () => {
|
|
|
296
301
|
});
|
|
297
302
|
|
|
298
303
|
it("returns ContractCallError on failure", async () => {
|
|
299
|
-
|
|
304
|
+
mockCallFn.mockReturnValue(
|
|
300
305
|
Effect.fail(new Error("execution reverted")),
|
|
301
306
|
);
|
|
302
307
|
|
|
@@ -315,7 +320,7 @@ describe("Contract", () => {
|
|
|
315
320
|
});
|
|
316
321
|
|
|
317
322
|
it("returns ContractCallError for malformed return data (empty 0x)", async () => {
|
|
318
|
-
|
|
323
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x" as HexType));
|
|
319
324
|
|
|
320
325
|
const program = Effect.gen(function* () {
|
|
321
326
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -336,7 +341,7 @@ describe("Contract", () => {
|
|
|
336
341
|
});
|
|
337
342
|
|
|
338
343
|
it("returns ContractCallError for return data too short", async () => {
|
|
339
|
-
|
|
344
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
|
|
340
345
|
|
|
341
346
|
const program = Effect.gen(function* () {
|
|
342
347
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -357,7 +362,7 @@ describe("Contract", () => {
|
|
|
357
362
|
});
|
|
358
363
|
|
|
359
364
|
it("returns ContractCallError for odd-length hex", async () => {
|
|
360
|
-
|
|
365
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x123" as HexType));
|
|
361
366
|
|
|
362
367
|
const program = Effect.gen(function* () {
|
|
363
368
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -702,7 +707,7 @@ describe("Contract", () => {
|
|
|
702
707
|
|
|
703
708
|
describe("simulate methods", () => {
|
|
704
709
|
it("calls eth_call without sending transaction", async () => {
|
|
705
|
-
|
|
710
|
+
mockCallFn.mockReturnValue(
|
|
706
711
|
Effect.succeed(
|
|
707
712
|
"0x0000000000000000000000000000000000000000000000000000000000000001" as HexType,
|
|
708
713
|
),
|
|
@@ -721,13 +726,13 @@ describe("Contract", () => {
|
|
|
721
726
|
program.pipe(Effect.provide(MockProviderLayer)),
|
|
722
727
|
);
|
|
723
728
|
|
|
724
|
-
expect(
|
|
729
|
+
expect(mockCallFn).toHaveBeenCalled();
|
|
725
730
|
expect(mockSigner.sendTransaction).not.toHaveBeenCalled();
|
|
726
731
|
expect(result).toBe(true);
|
|
727
732
|
});
|
|
728
733
|
|
|
729
734
|
it("handles zero-output function (sync)", async () => {
|
|
730
|
-
|
|
735
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x" as HexType));
|
|
731
736
|
|
|
732
737
|
const program = Effect.gen(function* () {
|
|
733
738
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -739,14 +744,14 @@ describe("Contract", () => {
|
|
|
739
744
|
program.pipe(Effect.provide(MockProviderLayer)),
|
|
740
745
|
);
|
|
741
746
|
|
|
742
|
-
expect(
|
|
747
|
+
expect(mockCallFn).toHaveBeenCalled();
|
|
743
748
|
expect(result).toBeUndefined();
|
|
744
749
|
});
|
|
745
750
|
});
|
|
746
751
|
|
|
747
752
|
describe("getEvents", () => {
|
|
748
753
|
it("fetches and decodes events", async () => {
|
|
749
|
-
|
|
754
|
+
mockGetLogsFn.mockReturnValue(
|
|
750
755
|
Effect.succeed([
|
|
751
756
|
{
|
|
752
757
|
address: testAddress,
|
|
@@ -776,13 +781,13 @@ describe("Contract", () => {
|
|
|
776
781
|
program.pipe(Effect.provide(MockProviderLayer)),
|
|
777
782
|
);
|
|
778
783
|
|
|
779
|
-
expect(
|
|
784
|
+
expect(mockGetLogsFn).toHaveBeenCalled();
|
|
780
785
|
expect(result.length).toBe(1);
|
|
781
786
|
expect(result[0].eventName).toBe("Transfer");
|
|
782
787
|
});
|
|
783
788
|
|
|
784
789
|
it("applies event filters", async () => {
|
|
785
|
-
|
|
790
|
+
mockGetLogsFn.mockReturnValue(Effect.succeed([]));
|
|
786
791
|
|
|
787
792
|
const program = Effect.gen(function* () {
|
|
788
793
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -796,8 +801,8 @@ describe("Contract", () => {
|
|
|
796
801
|
|
|
797
802
|
await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
|
|
798
803
|
|
|
799
|
-
expect(
|
|
800
|
-
const callArgs =
|
|
804
|
+
expect(mockGetLogsFn).toHaveBeenCalled();
|
|
805
|
+
const callArgs = mockGetLogsFn.mock.calls[0][0];
|
|
801
806
|
expect(callArgs.address).toBe(Address.toHex(testAddress));
|
|
802
807
|
});
|
|
803
808
|
|
|
@@ -820,7 +825,7 @@ describe("Contract", () => {
|
|
|
820
825
|
});
|
|
821
826
|
|
|
822
827
|
it("handles fromBlock: 0n (genesis block)", async () => {
|
|
823
|
-
|
|
828
|
+
mockGetLogsFn.mockReturnValue(Effect.succeed([]));
|
|
824
829
|
|
|
825
830
|
const program = Effect.gen(function* () {
|
|
826
831
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -832,13 +837,13 @@ describe("Contract", () => {
|
|
|
832
837
|
|
|
833
838
|
await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
|
|
834
839
|
|
|
835
|
-
expect(
|
|
836
|
-
const callArgs =
|
|
840
|
+
expect(mockGetLogsFn).toHaveBeenCalled();
|
|
841
|
+
const callArgs = mockGetLogsFn.mock.calls[0][0];
|
|
837
842
|
expect(callArgs.fromBlock).toBe("0x0");
|
|
838
843
|
});
|
|
839
844
|
|
|
840
845
|
it("handles large block numbers", async () => {
|
|
841
|
-
|
|
846
|
+
mockGetLogsFn.mockReturnValue(Effect.succeed([]));
|
|
842
847
|
|
|
843
848
|
const largeBlockNumber = 999999999999999n;
|
|
844
849
|
const program = Effect.gen(function* () {
|
|
@@ -850,13 +855,13 @@ describe("Contract", () => {
|
|
|
850
855
|
|
|
851
856
|
await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
|
|
852
857
|
|
|
853
|
-
expect(
|
|
854
|
-
const callArgs =
|
|
858
|
+
expect(mockGetLogsFn).toHaveBeenCalled();
|
|
859
|
+
const callArgs = mockGetLogsFn.mock.calls[0][0];
|
|
855
860
|
expect(callArgs.fromBlock).toBe(`0x${largeBlockNumber.toString(16)}`);
|
|
856
861
|
});
|
|
857
862
|
|
|
858
863
|
it("returns ContractEventError for wrong topics length", async () => {
|
|
859
|
-
|
|
864
|
+
mockGetLogsFn.mockReturnValue(
|
|
860
865
|
Effect.succeed([
|
|
861
866
|
{
|
|
862
867
|
address: testAddress,
|
|
@@ -890,7 +895,7 @@ describe("Contract", () => {
|
|
|
890
895
|
});
|
|
891
896
|
|
|
892
897
|
it("returns ContractEventError for malformed topic hex", async () => {
|
|
893
|
-
|
|
898
|
+
mockGetLogsFn.mockReturnValue(
|
|
894
899
|
Effect.succeed([
|
|
895
900
|
{
|
|
896
901
|
address: testAddress,
|
|
@@ -928,7 +933,7 @@ describe("Contract", () => {
|
|
|
928
933
|
|
|
929
934
|
describe("error handling", () => {
|
|
930
935
|
it("decode error from read method is catchable with Effect.catchTag", async () => {
|
|
931
|
-
|
|
936
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
|
|
932
937
|
|
|
933
938
|
const abiWithMissingFn = [
|
|
934
939
|
{
|
|
@@ -957,7 +962,7 @@ describe("Contract", () => {
|
|
|
957
962
|
});
|
|
958
963
|
|
|
959
964
|
it("decode error from simulate method is catchable with Effect.catchTag", async () => {
|
|
960
|
-
|
|
965
|
+
mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
|
|
961
966
|
|
|
962
967
|
const abiWithMissingFn = [
|
|
963
968
|
{
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
type LogFilter as ProviderLogFilter,
|
|
39
39
|
ProviderService,
|
|
40
40
|
} from "../Provider/index.js";
|
|
41
|
+
import { call, getLogs } from "../Provider/functions/index.js";
|
|
41
42
|
import { SignerService } from "../Signer/index.js";
|
|
42
43
|
|
|
43
44
|
type AddressType = BrandedAddress.AddressType;
|
|
@@ -230,7 +231,6 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
|
|
|
230
231
|
abi: TAbi,
|
|
231
232
|
): Effect.Effect<ContractInstance<TAbi>, never, ProviderService> =>
|
|
232
233
|
Effect.gen(function* () {
|
|
233
|
-
const provider = yield* ProviderService;
|
|
234
234
|
const abiItems = abi as readonly AbiItem[];
|
|
235
235
|
const addressHex =
|
|
236
236
|
typeof address === "string"
|
|
@@ -263,23 +263,21 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
|
|
|
263
263
|
(
|
|
264
264
|
read as unknown as Record<
|
|
265
265
|
string,
|
|
266
|
-
(...args: unknown[]) => Effect.Effect<unknown, ContractCallError>
|
|
266
|
+
(...args: unknown[]) => Effect.Effect<unknown, ContractCallError, ProviderService>
|
|
267
267
|
>
|
|
268
268
|
)[fn.name] = (...args: unknown[]) =>
|
|
269
269
|
Effect.gen(function* () {
|
|
270
270
|
const data = encodeArgs(abiItems, fn.name, args);
|
|
271
|
-
const result = yield*
|
|
272
|
-
.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
),
|
|
282
|
-
);
|
|
271
|
+
const result = yield* call({ to: addressHex, data }).pipe(
|
|
272
|
+
Effect.mapError(
|
|
273
|
+
(e) =>
|
|
274
|
+
new ContractCallError(
|
|
275
|
+
{ address: addressHex, method: fn.name, args },
|
|
276
|
+
e.message,
|
|
277
|
+
{ cause: e },
|
|
278
|
+
),
|
|
279
|
+
),
|
|
280
|
+
);
|
|
283
281
|
return yield* decodeResultE(abiItems, fn.name, result as HexType, {
|
|
284
282
|
address: addressHex,
|
|
285
283
|
args,
|
|
@@ -350,12 +348,12 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
|
|
|
350
348
|
(
|
|
351
349
|
simulate as unknown as Record<
|
|
352
350
|
string,
|
|
353
|
-
(...args: unknown[]) => Effect.Effect<unknown, ContractCallError>
|
|
351
|
+
(...args: unknown[]) => Effect.Effect<unknown, ContractCallError, ProviderService>
|
|
354
352
|
>
|
|
355
353
|
)[fn.name] = (...args: unknown[]) =>
|
|
356
354
|
Effect.gen(function* () {
|
|
357
355
|
const data = encodeArgs(abiItems, fn.name, args);
|
|
358
|
-
const result = yield*
|
|
356
|
+
const result = yield* call({ to: addressHex, data }).pipe(
|
|
359
357
|
Effect.mapError(
|
|
360
358
|
(e) =>
|
|
361
359
|
new ContractCallError(
|
|
@@ -380,7 +378,7 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
|
|
|
380
378
|
const getEvents = <E extends string>(
|
|
381
379
|
eventName: E,
|
|
382
380
|
filter?: EventFilter,
|
|
383
|
-
): Effect.Effect<DecodedEvent[], ContractEventError> =>
|
|
381
|
+
): Effect.Effect<DecodedEvent[], ContractEventError, ProviderService> =>
|
|
384
382
|
Effect.gen(function* () {
|
|
385
383
|
const topic = yield* getEventTopicE(abiItems, eventName, addressHex);
|
|
386
384
|
|
|
@@ -399,18 +397,16 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
|
|
|
399
397
|
toBlock: toProviderBlockTag(filter?.toBlock),
|
|
400
398
|
};
|
|
401
399
|
|
|
402
|
-
const logs = yield*
|
|
403
|
-
.
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
),
|
|
413
|
-
);
|
|
400
|
+
const logs = yield* getLogs(logFilter).pipe(
|
|
401
|
+
Effect.mapError(
|
|
402
|
+
(e) =>
|
|
403
|
+
new ContractEventError(
|
|
404
|
+
{ address: addressHex, event: eventName, filter },
|
|
405
|
+
e.message,
|
|
406
|
+
{ cause: e },
|
|
407
|
+
),
|
|
408
|
+
),
|
|
409
|
+
);
|
|
414
410
|
|
|
415
411
|
return yield* Effect.forEach(logs, (log) =>
|
|
416
412
|
decodeEventLogE(abiItems, eventName, log, addressHex),
|
|
@@ -80,6 +80,7 @@ export type AbiItem = {
|
|
|
80
80
|
export type Abi = readonly AbiItem[];
|
|
81
81
|
|
|
82
82
|
import type * as Effect from "effect/Effect";
|
|
83
|
+
import type { ProviderService } from "../Provider/index.js";
|
|
83
84
|
import type { SignerService } from "../Signer/index.js";
|
|
84
85
|
|
|
85
86
|
/**
|
|
@@ -283,7 +284,7 @@ export interface ContractInstance<TAbi extends Abi> {
|
|
|
283
284
|
readonly getEvents: <E extends ExtractEventNames<TAbi>>(
|
|
284
285
|
eventName: E,
|
|
285
286
|
filter?: EventFilter,
|
|
286
|
-
) => Effect.Effect<DecodedEvent[], ContractEventError>;
|
|
287
|
+
) => Effect.Effect<DecodedEvent[], ContractEventError, ProviderService>;
|
|
287
288
|
}
|
|
288
289
|
|
|
289
290
|
type ExtractViewFunctions<TAbi extends Abi> = Extract<
|
|
@@ -374,7 +375,8 @@ type ContractReadMethods<TAbi extends Abi> = {
|
|
|
374
375
|
? AbiOutputToTs<O>
|
|
375
376
|
: unknown
|
|
376
377
|
: unknown,
|
|
377
|
-
ContractCallError
|
|
378
|
+
ContractCallError,
|
|
379
|
+
ProviderService
|
|
378
380
|
>;
|
|
379
381
|
};
|
|
380
382
|
|
|
@@ -407,6 +409,7 @@ type ContractSimulateMethods<TAbi extends Abi> = {
|
|
|
407
409
|
? AbiOutputToTs<O>
|
|
408
410
|
: unknown
|
|
409
411
|
: unknown,
|
|
410
|
-
ContractCallError
|
|
412
|
+
ContractCallError,
|
|
413
|
+
ProviderService
|
|
411
414
|
>;
|
|
412
415
|
};
|
|
@@ -32,8 +32,19 @@ const erc20Abi = S.decodeUnknownSync(fromArray)([
|
|
|
32
32
|
},
|
|
33
33
|
]);
|
|
34
34
|
|
|
35
|
+
const mockEstimateGasFn = vi.fn();
|
|
36
|
+
|
|
35
37
|
const mockProvider = {
|
|
36
|
-
|
|
38
|
+
request: <T>(method: string, params?: unknown[]) => {
|
|
39
|
+
switch (method) {
|
|
40
|
+
case "eth_estimateGas":
|
|
41
|
+
return mockEstimateGasFn(params?.[0]) as Effect.Effect<T, never>;
|
|
42
|
+
case "eth_chainId":
|
|
43
|
+
return Effect.succeed("0x1" as T);
|
|
44
|
+
default:
|
|
45
|
+
return Effect.succeed(null as T);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
37
48
|
};
|
|
38
49
|
|
|
39
50
|
const MockProviderLayer = Layer.succeed(ProviderService, mockProvider as any);
|
|
@@ -43,10 +54,10 @@ describe("Contract.estimateGas", () => {
|
|
|
43
54
|
vi.clearAllMocks();
|
|
44
55
|
});
|
|
45
56
|
|
|
46
|
-
it("encodes data and calls
|
|
57
|
+
it("encodes data and calls estimateGas", async () => {
|
|
47
58
|
const recipient = Address("0x1234567890123456789012345678901234567890");
|
|
48
59
|
const amount = 1000n;
|
|
49
|
-
|
|
60
|
+
mockEstimateGasFn.mockReturnValue(Effect.succeed("0xafc8")); // 45000 in hex
|
|
50
61
|
|
|
51
62
|
const program = Effect.gen(function* () {
|
|
52
63
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -61,9 +72,9 @@ describe("Contract.estimateGas", () => {
|
|
|
61
72
|
);
|
|
62
73
|
|
|
63
74
|
expect(gas).toBe(45000n);
|
|
64
|
-
expect(
|
|
75
|
+
expect(mockEstimateGasFn).toHaveBeenCalledTimes(1);
|
|
65
76
|
|
|
66
|
-
const callArgs =
|
|
77
|
+
const callArgs = mockEstimateGasFn.mock.calls[0][0];
|
|
67
78
|
const expectedData = BrandedAbi.encodeFunction(
|
|
68
79
|
erc20Abi as unknown as BrandedAbi.Abi,
|
|
69
80
|
"transfer",
|
|
@@ -76,7 +87,7 @@ describe("Contract.estimateGas", () => {
|
|
|
76
87
|
|
|
77
88
|
it("passes value for payable methods", async () => {
|
|
78
89
|
const value = 1000000000000000000n;
|
|
79
|
-
|
|
90
|
+
mockEstimateGasFn.mockReturnValue(Effect.succeed("0x5208")); // hex response from RPC
|
|
80
91
|
|
|
81
92
|
const program = Effect.gen(function* () {
|
|
82
93
|
const contract = yield* Contract(testAddress, erc20Abi);
|
|
@@ -85,7 +96,7 @@ describe("Contract.estimateGas", () => {
|
|
|
85
96
|
|
|
86
97
|
await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
|
|
87
98
|
|
|
88
|
-
const callArgs =
|
|
99
|
+
const callArgs = mockEstimateGasFn.mock.calls[0][0];
|
|
89
100
|
const expectedData = BrandedAbi.encodeFunction(
|
|
90
101
|
erc20Abi as unknown as BrandedAbi.Abi,
|
|
91
102
|
"deposit",
|
|
@@ -93,12 +104,13 @@ describe("Contract.estimateGas", () => {
|
|
|
93
104
|
);
|
|
94
105
|
|
|
95
106
|
expect(callArgs.data as HexType).toBe(expectedData as HexType);
|
|
96
|
-
|
|
107
|
+
// Value is hex-encoded for RPC
|
|
108
|
+
expect(callArgs.value).toBe(`0x${value.toString(16)}`);
|
|
97
109
|
});
|
|
98
110
|
|
|
99
111
|
it("maps provider errors to ContractCallError", async () => {
|
|
100
112
|
const recipient = Address("0x1234567890123456789012345678901234567890");
|
|
101
|
-
|
|
113
|
+
mockEstimateGasFn.mockReturnValue(
|
|
102
114
|
Effect.fail(new Error("estimate failed")),
|
|
103
115
|
);
|
|
104
116
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { Address, BrandedAbi, type BrandedAddress } from "@tevm/voltaire";
|
|
9
9
|
import * as Effect from "effect/Effect";
|
|
10
|
+
import { estimateGas as estimateGasRpc } from "../Provider/functions/index.js";
|
|
10
11
|
import { ProviderService } from "../Provider/index.js";
|
|
11
12
|
import {
|
|
12
13
|
type Abi,
|
|
@@ -91,7 +92,6 @@ export const estimateGas = <
|
|
|
91
92
|
args?: WriteMethodArgs<TAbi, TFunctionName>,
|
|
92
93
|
): Effect.Effect<bigint, ContractCallError, ProviderService> =>
|
|
93
94
|
Effect.gen(function* () {
|
|
94
|
-
const provider = yield* ProviderService;
|
|
95
95
|
const addressHex = getAddressHex(contract.address as AddressType);
|
|
96
96
|
const abiItems = contract.abi as readonly AbiItem[];
|
|
97
97
|
const functionLabel = String(methodName);
|
|
@@ -138,26 +138,24 @@ export const estimateGas = <
|
|
|
138
138
|
),
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
return yield*
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
),
|
|
162
|
-
);
|
|
141
|
+
return yield* estimateGasRpc({
|
|
142
|
+
to: addressHex,
|
|
143
|
+
data,
|
|
144
|
+
value: options?.value,
|
|
145
|
+
gas: options?.gas,
|
|
146
|
+
}).pipe(
|
|
147
|
+
Effect.mapError(
|
|
148
|
+
(e) =>
|
|
149
|
+
new ContractCallError(
|
|
150
|
+
{
|
|
151
|
+
address: addressHex,
|
|
152
|
+
method: functionLabel,
|
|
153
|
+
args: callArgs,
|
|
154
|
+
value: options?.value,
|
|
155
|
+
},
|
|
156
|
+
e.message,
|
|
157
|
+
{ cause: e },
|
|
158
|
+
),
|
|
159
|
+
),
|
|
160
|
+
);
|
|
163
161
|
});
|
|
@@ -13,7 +13,7 @@ import type {
|
|
|
13
13
|
CallRequest,
|
|
14
14
|
HashInput,
|
|
15
15
|
TransactionIndexInput,
|
|
16
|
-
} from "../Provider/
|
|
16
|
+
} from "../Provider/types.js";
|
|
17
17
|
import { TransportService } from "../Transport/TransportService.js";
|
|
18
18
|
import { DebugService } from "./DebugService.js";
|
|
19
19
|
|
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
import * as Effect from "effect/Effect";
|
|
19
19
|
import * as Layer from "effect/Layer";
|
|
20
20
|
import { ProviderService } from "../Provider/index.js";
|
|
21
|
+
import {
|
|
22
|
+
getGasPrice,
|
|
23
|
+
getBlock,
|
|
24
|
+
getMaxPriorityFeePerGas,
|
|
25
|
+
} from "../Provider/functions/index.js";
|
|
21
26
|
import {
|
|
22
27
|
FeeEstimationError,
|
|
23
28
|
FeeEstimatorService,
|
|
@@ -89,7 +94,6 @@ const makeDefaultFeeEstimator = (
|
|
|
89
94
|
Layer.effect(
|
|
90
95
|
FeeEstimatorService,
|
|
91
96
|
Effect.gen(function* () {
|
|
92
|
-
const provider = yield* ProviderService;
|
|
93
97
|
const multiplierNumerator = BigInt(
|
|
94
98
|
Math.round(baseFeeMultiplier * MULTIPLIER_PRECISION_NUMBER),
|
|
95
99
|
);
|
|
@@ -100,7 +104,7 @@ const makeDefaultFeeEstimator = (
|
|
|
100
104
|
ProviderService
|
|
101
105
|
> =>
|
|
102
106
|
Effect.gen(function* () {
|
|
103
|
-
const
|
|
107
|
+
const gasPriceValue = yield* getGasPrice().pipe(
|
|
104
108
|
Effect.mapError(
|
|
105
109
|
(e) =>
|
|
106
110
|
new FeeEstimationError({
|
|
@@ -110,7 +114,7 @@ const makeDefaultFeeEstimator = (
|
|
|
110
114
|
),
|
|
111
115
|
);
|
|
112
116
|
const validatedGasPrice = yield* ensureReasonableGasPrice(
|
|
113
|
-
|
|
117
|
+
gasPriceValue,
|
|
114
118
|
"Gas price",
|
|
115
119
|
);
|
|
116
120
|
return { gasPrice: validatedGasPrice };
|
|
@@ -123,7 +127,7 @@ const makeDefaultFeeEstimator = (
|
|
|
123
127
|
> =>
|
|
124
128
|
Effect.gen(function* () {
|
|
125
129
|
const [block, priorityFee] = yield* Effect.all([
|
|
126
|
-
|
|
130
|
+
getBlock({ blockTag: "latest" }).pipe(
|
|
127
131
|
Effect.mapError(
|
|
128
132
|
(e) =>
|
|
129
133
|
new FeeEstimationError({
|
|
@@ -132,7 +136,7 @@ const makeDefaultFeeEstimator = (
|
|
|
132
136
|
}),
|
|
133
137
|
),
|
|
134
138
|
),
|
|
135
|
-
|
|
139
|
+
getMaxPriorityFeePerGas().pipe(
|
|
136
140
|
Effect.mapError(
|
|
137
141
|
(e) =>
|
|
138
142
|
new FeeEstimationError({
|
|
@@ -185,7 +189,7 @@ const makeDefaultFeeEstimator = (
|
|
|
185
189
|
type === "legacy" ? estimateLegacy() : estimateEIP1559(),
|
|
186
190
|
|
|
187
191
|
getMaxPriorityFeePerGas: () =>
|
|
188
|
-
|
|
192
|
+
getMaxPriorityFeePerGas().pipe(
|
|
189
193
|
Effect.mapError(
|
|
190
194
|
(e) =>
|
|
191
195
|
new FeeEstimationError({
|