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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get the protocol version.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getProtocolVersion
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { ProviderService } from "../ProviderService.js";
|
|
10
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Gets the Ethereum protocol version.
|
|
14
|
+
*
|
|
15
|
+
* @returns Effect yielding the protocol version as string
|
|
16
|
+
*
|
|
17
|
+
* @since 0.4.0
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { Effect } from 'effect'
|
|
22
|
+
* import { getProtocolVersion, Provider, HttpTransport } from 'voltaire-effect'
|
|
23
|
+
*
|
|
24
|
+
* const program = Effect.gen(function* () {
|
|
25
|
+
* const version = yield* getProtocolVersion()
|
|
26
|
+
* console.log('Protocol version:', version)
|
|
27
|
+
* }).pipe(
|
|
28
|
+
* Effect.provide(Provider),
|
|
29
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
30
|
+
* )
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const getProtocolVersion = (): Effect.Effect<
|
|
34
|
+
string,
|
|
35
|
+
TransportError,
|
|
36
|
+
ProviderService
|
|
37
|
+
> =>
|
|
38
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
39
|
+
svc.request<string>("eth_protocolVersion"),
|
|
40
|
+
);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get storage at a slot.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getStorageAt
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { ProviderService } from "../ProviderService.js";
|
|
10
|
+
import type { AddressInput, BlockTag, HashInput } from "../types.js";
|
|
11
|
+
import { toAddressHex, toHashHex } from "../utils.js";
|
|
12
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Gets storage at a specific slot for an address.
|
|
16
|
+
*
|
|
17
|
+
* @param address - The contract address
|
|
18
|
+
* @param slot - The storage slot to read
|
|
19
|
+
* @param blockTag - Block to query at (default: "latest")
|
|
20
|
+
* @returns Effect yielding the storage value as hex string
|
|
21
|
+
*
|
|
22
|
+
* @since 0.4.0
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { Effect } from 'effect'
|
|
27
|
+
* import { getStorageAt, Provider, HttpTransport } from 'voltaire-effect'
|
|
28
|
+
*
|
|
29
|
+
* const program = Effect.gen(function* () {
|
|
30
|
+
* const value = yield* getStorageAt(
|
|
31
|
+
* '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
32
|
+
* '0x0000000000000000000000000000000000000000000000000000000000000000'
|
|
33
|
+
* )
|
|
34
|
+
* console.log(`Storage slot 0: ${value}`)
|
|
35
|
+
* }).pipe(
|
|
36
|
+
* Effect.provide(Provider),
|
|
37
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
38
|
+
* )
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export const getStorageAt = (
|
|
42
|
+
address: AddressInput,
|
|
43
|
+
slot: HashInput,
|
|
44
|
+
blockTag: BlockTag = "latest",
|
|
45
|
+
): Effect.Effect<`0x${string}`, TransportError, ProviderService> =>
|
|
46
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
47
|
+
svc.request<`0x${string}`>("eth_getStorageAt", [
|
|
48
|
+
toAddressHex(address),
|
|
49
|
+
toHashHex(slot),
|
|
50
|
+
blockTag,
|
|
51
|
+
]),
|
|
52
|
+
);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get syncing status.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getSyncing
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { ProviderService } from "../ProviderService.js";
|
|
10
|
+
import type { SyncingStatus } from "../types.js";
|
|
11
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Gets the syncing status of the node.
|
|
15
|
+
*
|
|
16
|
+
* @returns Effect yielding false if not syncing, or an object with sync progress
|
|
17
|
+
*
|
|
18
|
+
* @since 0.4.0
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { Effect } from 'effect'
|
|
23
|
+
* import { getSyncing, Provider, HttpTransport } from 'voltaire-effect'
|
|
24
|
+
*
|
|
25
|
+
* const program = Effect.gen(function* () {
|
|
26
|
+
* const status = yield* getSyncing()
|
|
27
|
+
* if (status === false) {
|
|
28
|
+
* console.log('Node is fully synced')
|
|
29
|
+
* } else {
|
|
30
|
+
* console.log('Syncing:', status.currentBlock, '/', status.highestBlock)
|
|
31
|
+
* }
|
|
32
|
+
* }).pipe(
|
|
33
|
+
* Effect.provide(Provider),
|
|
34
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
35
|
+
* )
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export const getSyncing = (): Effect.Effect<
|
|
39
|
+
SyncingStatus,
|
|
40
|
+
TransportError,
|
|
41
|
+
ProviderService
|
|
42
|
+
> =>
|
|
43
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
44
|
+
svc.request<false | { startingBlock: string; currentBlock: string; highestBlock: string }>(
|
|
45
|
+
"eth_syncing",
|
|
46
|
+
).pipe(
|
|
47
|
+
Effect.map((result) => {
|
|
48
|
+
if (result === false) return false;
|
|
49
|
+
return {
|
|
50
|
+
startingBlock: result.startingBlock,
|
|
51
|
+
currentBlock: result.currentBlock,
|
|
52
|
+
highestBlock: result.highestBlock,
|
|
53
|
+
};
|
|
54
|
+
}),
|
|
55
|
+
),
|
|
56
|
+
);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get a transaction by hash.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransaction
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
10
|
+
import { ProviderService } from "../ProviderService.js";
|
|
11
|
+
import {
|
|
12
|
+
type HashInput,
|
|
13
|
+
ProviderNotFoundError,
|
|
14
|
+
type TransactionType,
|
|
15
|
+
} from "../types.js";
|
|
16
|
+
import { toHashHex } from "../utils.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets a transaction by its hash.
|
|
20
|
+
*
|
|
21
|
+
* @param hash - The transaction hash
|
|
22
|
+
* @returns Effect yielding the transaction
|
|
23
|
+
*
|
|
24
|
+
* @since 0.4.0
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { Effect } from 'effect'
|
|
29
|
+
* import { getTransaction, Provider, HttpTransport } from 'voltaire-effect'
|
|
30
|
+
*
|
|
31
|
+
* const program = Effect.gen(function* () {
|
|
32
|
+
* const tx = yield* getTransaction('0x...')
|
|
33
|
+
* console.log(`From: ${tx.from}`)
|
|
34
|
+
* }).pipe(
|
|
35
|
+
* Effect.provide(Provider),
|
|
36
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const getTransaction = (
|
|
41
|
+
hash: HashInput,
|
|
42
|
+
): Effect.Effect<TransactionType, TransportError | ProviderNotFoundError, ProviderService> =>
|
|
43
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
44
|
+
svc
|
|
45
|
+
.request<TransactionType | null>("eth_getTransactionByHash", [toHashHex(hash)])
|
|
46
|
+
.pipe(
|
|
47
|
+
Effect.flatMap((result) =>
|
|
48
|
+
result === null
|
|
49
|
+
? Effect.fail(
|
|
50
|
+
new ProviderNotFoundError(hash, "Transaction not found", {
|
|
51
|
+
resource: "transaction",
|
|
52
|
+
}),
|
|
53
|
+
)
|
|
54
|
+
: Effect.succeed(result),
|
|
55
|
+
),
|
|
56
|
+
),
|
|
57
|
+
);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get a transaction by block hash and index.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransactionByBlockHashAndIndex
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
10
|
+
import { ProviderService } from "../ProviderService.js";
|
|
11
|
+
import {
|
|
12
|
+
type HashInput,
|
|
13
|
+
ProviderNotFoundError,
|
|
14
|
+
type TransactionIndexInput,
|
|
15
|
+
type TransactionType,
|
|
16
|
+
} from "../types.js";
|
|
17
|
+
import { toHashHex } from "../utils.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Converts transaction index to hex string.
|
|
21
|
+
*/
|
|
22
|
+
const toIndexHex = (index: TransactionIndexInput): `0x${string}` => {
|
|
23
|
+
if (typeof index === "string") return index;
|
|
24
|
+
return `0x${BigInt(index).toString(16)}`;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Gets a transaction by block hash and transaction index.
|
|
29
|
+
*
|
|
30
|
+
* @param blockHash - The block hash
|
|
31
|
+
* @param index - The transaction index in the block
|
|
32
|
+
* @returns Effect yielding the transaction
|
|
33
|
+
*
|
|
34
|
+
* @since 0.4.0
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { Effect } from 'effect'
|
|
39
|
+
* import { getTransactionByBlockHashAndIndex, Provider, HttpTransport } from 'voltaire-effect'
|
|
40
|
+
*
|
|
41
|
+
* const program = Effect.gen(function* () {
|
|
42
|
+
* const tx = yield* getTransactionByBlockHashAndIndex('0x...blockHash', 0)
|
|
43
|
+
* console.log(`Transaction hash: ${tx.hash}`)
|
|
44
|
+
* }).pipe(
|
|
45
|
+
* Effect.provide(Provider),
|
|
46
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
47
|
+
* )
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export const getTransactionByBlockHashAndIndex = (
|
|
51
|
+
blockHash: HashInput,
|
|
52
|
+
index: TransactionIndexInput,
|
|
53
|
+
): Effect.Effect<TransactionType, TransportError | ProviderNotFoundError, ProviderService> =>
|
|
54
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
55
|
+
svc
|
|
56
|
+
.request<TransactionType | null>("eth_getTransactionByBlockHashAndIndex", [
|
|
57
|
+
toHashHex(blockHash),
|
|
58
|
+
toIndexHex(index),
|
|
59
|
+
])
|
|
60
|
+
.pipe(
|
|
61
|
+
Effect.flatMap((result) =>
|
|
62
|
+
result === null
|
|
63
|
+
? Effect.fail(
|
|
64
|
+
new ProviderNotFoundError(
|
|
65
|
+
{ blockHash, index },
|
|
66
|
+
"Transaction not found",
|
|
67
|
+
{ resource: "transaction" },
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
: Effect.succeed(result),
|
|
71
|
+
),
|
|
72
|
+
),
|
|
73
|
+
);
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get a transaction by block number and index.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransactionByBlockNumberAndIndex
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
10
|
+
import { ProviderService } from "../ProviderService.js";
|
|
11
|
+
import {
|
|
12
|
+
type BlockTag,
|
|
13
|
+
ProviderNotFoundError,
|
|
14
|
+
type TransactionIndexInput,
|
|
15
|
+
type TransactionType,
|
|
16
|
+
} from "../types.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Converts transaction index to hex string.
|
|
20
|
+
*/
|
|
21
|
+
const toIndexHex = (index: TransactionIndexInput): `0x${string}` => {
|
|
22
|
+
if (typeof index === "string") return index;
|
|
23
|
+
return `0x${BigInt(index).toString(16)}`;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Converts block tag or bigint to RPC block identifier.
|
|
28
|
+
*/
|
|
29
|
+
const toBlockId = (blockTag: BlockTag | bigint): BlockTag => {
|
|
30
|
+
if (typeof blockTag === "bigint") {
|
|
31
|
+
return `0x${blockTag.toString(16)}` as BlockTag;
|
|
32
|
+
}
|
|
33
|
+
return blockTag;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Gets a transaction by block number/tag and transaction index.
|
|
38
|
+
*
|
|
39
|
+
* @param blockTag - The block number or tag
|
|
40
|
+
* @param index - The transaction index in the block
|
|
41
|
+
* @returns Effect yielding the transaction
|
|
42
|
+
*
|
|
43
|
+
* @since 0.4.0
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { Effect } from 'effect'
|
|
48
|
+
* import { getTransactionByBlockNumberAndIndex, Provider, HttpTransport } from 'voltaire-effect'
|
|
49
|
+
*
|
|
50
|
+
* const program = Effect.gen(function* () {
|
|
51
|
+
* // Get first transaction in block 18000000
|
|
52
|
+
* const tx = yield* getTransactionByBlockNumberAndIndex(18000000n, 0)
|
|
53
|
+
* console.log(`Transaction hash: ${tx.hash}`)
|
|
54
|
+
*
|
|
55
|
+
* // Get from latest block
|
|
56
|
+
* const latestTx = yield* getTransactionByBlockNumberAndIndex('latest', 0)
|
|
57
|
+
* }).pipe(
|
|
58
|
+
* Effect.provide(Provider),
|
|
59
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
60
|
+
* )
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export const getTransactionByBlockNumberAndIndex = (
|
|
64
|
+
blockTag: BlockTag | bigint,
|
|
65
|
+
index: TransactionIndexInput,
|
|
66
|
+
): Effect.Effect<TransactionType, TransportError | ProviderNotFoundError, ProviderService> =>
|
|
67
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
68
|
+
svc
|
|
69
|
+
.request<TransactionType | null>("eth_getTransactionByBlockNumberAndIndex", [
|
|
70
|
+
toBlockId(blockTag),
|
|
71
|
+
toIndexHex(index),
|
|
72
|
+
])
|
|
73
|
+
.pipe(
|
|
74
|
+
Effect.flatMap((result) =>
|
|
75
|
+
result === null
|
|
76
|
+
? Effect.fail(
|
|
77
|
+
new ProviderNotFoundError(
|
|
78
|
+
{ blockTag, index },
|
|
79
|
+
"Transaction not found",
|
|
80
|
+
{ resource: "transaction" },
|
|
81
|
+
),
|
|
82
|
+
)
|
|
83
|
+
: Effect.succeed(result),
|
|
84
|
+
),
|
|
85
|
+
),
|
|
86
|
+
);
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get transaction confirmations.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransactionConfirmations
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
10
|
+
import { ProviderService } from "../ProviderService.js";
|
|
11
|
+
import {
|
|
12
|
+
type HashInput,
|
|
13
|
+
type ProviderResponseError,
|
|
14
|
+
type ReceiptType,
|
|
15
|
+
} from "../types.js";
|
|
16
|
+
import { parseHexToBigInt, toHashHex } from "../utils.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets the number of confirmations for a transaction.
|
|
20
|
+
*
|
|
21
|
+
* @param hash - The transaction hash
|
|
22
|
+
* @returns Effect yielding the number of confirmations (0n if not yet mined)
|
|
23
|
+
*
|
|
24
|
+
* @since 0.4.0
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { Effect } from 'effect'
|
|
29
|
+
* import { getTransactionConfirmations, Provider, HttpTransport } from 'voltaire-effect'
|
|
30
|
+
*
|
|
31
|
+
* const program = Effect.gen(function* () {
|
|
32
|
+
* const confirmations = yield* getTransactionConfirmations('0x...')
|
|
33
|
+
* if (confirmations >= 12n) {
|
|
34
|
+
* console.log('Transaction is confirmed')
|
|
35
|
+
* }
|
|
36
|
+
* }).pipe(
|
|
37
|
+
* Effect.provide(Provider),
|
|
38
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
39
|
+
* )
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export const getTransactionConfirmations = (
|
|
43
|
+
hash: HashInput,
|
|
44
|
+
): Effect.Effect<bigint, TransportError | ProviderResponseError, ProviderService> =>
|
|
45
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
46
|
+
Effect.gen(function* () {
|
|
47
|
+
const hashHex = toHashHex(hash);
|
|
48
|
+
const receipt = yield* svc.request<ReceiptType | null>(
|
|
49
|
+
"eth_getTransactionReceipt",
|
|
50
|
+
[hashHex],
|
|
51
|
+
);
|
|
52
|
+
if (!receipt) {
|
|
53
|
+
return 0n;
|
|
54
|
+
}
|
|
55
|
+
const currentBlockHex = yield* svc.request<string>("eth_blockNumber");
|
|
56
|
+
const receiptBlock = yield* parseHexToBigInt({
|
|
57
|
+
method: "eth_getTransactionReceipt",
|
|
58
|
+
params: [hashHex],
|
|
59
|
+
response: receipt.blockNumber,
|
|
60
|
+
});
|
|
61
|
+
const currentBlock = yield* parseHexToBigInt({
|
|
62
|
+
method: "eth_blockNumber",
|
|
63
|
+
response: currentBlockHex,
|
|
64
|
+
});
|
|
65
|
+
if (currentBlock < receiptBlock) {
|
|
66
|
+
return 0n;
|
|
67
|
+
}
|
|
68
|
+
return currentBlock - receiptBlock + 1n;
|
|
69
|
+
}),
|
|
70
|
+
);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get account transaction count (nonce).
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransactionCount
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { ProviderService } from "../ProviderService.js";
|
|
10
|
+
import type { AddressInput, BlockTag } from "../types.js";
|
|
11
|
+
import { toAddressHex, parseHexToBigInt } from "../utils.js";
|
|
12
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
13
|
+
import type { ProviderResponseError } from "../types.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Gets the transaction count (nonce) for an address.
|
|
17
|
+
*
|
|
18
|
+
* @param address - The address to check nonce for
|
|
19
|
+
* @param blockTag - Block to query at (default: "latest")
|
|
20
|
+
* @returns Effect yielding the nonce as bigint
|
|
21
|
+
*
|
|
22
|
+
* @since 0.4.0
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { Effect } from 'effect'
|
|
27
|
+
* import { getTransactionCount, Provider, HttpTransport } from 'voltaire-effect'
|
|
28
|
+
*
|
|
29
|
+
* const program = Effect.gen(function* () {
|
|
30
|
+
* const nonce = yield* getTransactionCount('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')
|
|
31
|
+
* console.log(`Nonce: ${nonce}`)
|
|
32
|
+
* }).pipe(
|
|
33
|
+
* Effect.provide(Provider),
|
|
34
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
35
|
+
* )
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export const getTransactionCount = (
|
|
39
|
+
address: AddressInput,
|
|
40
|
+
blockTag: BlockTag = "latest",
|
|
41
|
+
): Effect.Effect<bigint, TransportError | ProviderResponseError, ProviderService> =>
|
|
42
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
43
|
+
svc
|
|
44
|
+
.request<string>("eth_getTransactionCount", [toAddressHex(address), blockTag])
|
|
45
|
+
.pipe(
|
|
46
|
+
Effect.flatMap((response) =>
|
|
47
|
+
parseHexToBigInt({ method: "eth_getTransactionCount", response, params: [address, blockTag] }),
|
|
48
|
+
),
|
|
49
|
+
),
|
|
50
|
+
);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get a transaction receipt by hash.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getTransactionReceipt
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
10
|
+
import { ProviderService } from "../ProviderService.js";
|
|
11
|
+
import {
|
|
12
|
+
type HashInput,
|
|
13
|
+
ProviderNotFoundError,
|
|
14
|
+
type ReceiptType,
|
|
15
|
+
} from "../types.js";
|
|
16
|
+
import { toHashHex } from "../utils.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets a transaction receipt by its hash.
|
|
20
|
+
*
|
|
21
|
+
* @param hash - The transaction hash
|
|
22
|
+
* @returns Effect yielding the receipt
|
|
23
|
+
*
|
|
24
|
+
* @since 0.4.0
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { Effect } from 'effect'
|
|
29
|
+
* import { getTransactionReceipt, Provider, HttpTransport } from 'voltaire-effect'
|
|
30
|
+
*
|
|
31
|
+
* const program = Effect.gen(function* () {
|
|
32
|
+
* const receipt = yield* getTransactionReceipt('0x...')
|
|
33
|
+
* console.log(`Status: ${receipt.status}`)
|
|
34
|
+
* }).pipe(
|
|
35
|
+
* Effect.provide(Provider),
|
|
36
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const getTransactionReceipt = (
|
|
41
|
+
hash: HashInput,
|
|
42
|
+
): Effect.Effect<ReceiptType, TransportError | ProviderNotFoundError, ProviderService> =>
|
|
43
|
+
Effect.flatMap(ProviderService, (svc) =>
|
|
44
|
+
svc
|
|
45
|
+
.request<ReceiptType | null>("eth_getTransactionReceipt", [toHashHex(hash)])
|
|
46
|
+
.pipe(
|
|
47
|
+
Effect.flatMap((result) =>
|
|
48
|
+
result === null
|
|
49
|
+
? Effect.fail(
|
|
50
|
+
new ProviderNotFoundError(hash, "Transaction receipt not found", {
|
|
51
|
+
resource: "receipt",
|
|
52
|
+
}),
|
|
53
|
+
)
|
|
54
|
+
: Effect.succeed(result),
|
|
55
|
+
),
|
|
56
|
+
),
|
|
57
|
+
);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Free function to get an uncle block by index.
|
|
3
|
+
*
|
|
4
|
+
* @module Provider/functions/getUncle
|
|
5
|
+
* @since 0.4.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { ProviderService } from "../ProviderService.js";
|
|
10
|
+
import {
|
|
11
|
+
type BlockTag,
|
|
12
|
+
type GetUncleArgs,
|
|
13
|
+
type UncleBlockType,
|
|
14
|
+
ProviderNotFoundError,
|
|
15
|
+
} from "../types.js";
|
|
16
|
+
import type { TransportError } from "../../Transport/TransportError.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets an uncle block by block identifier and uncle index.
|
|
20
|
+
*
|
|
21
|
+
* @param args - Block identifier (blockTag or blockHash)
|
|
22
|
+
* @param uncleIndex - The index of the uncle in the block
|
|
23
|
+
* @returns Effect yielding the uncle block
|
|
24
|
+
*
|
|
25
|
+
* @since 0.4.0
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { Effect } from 'effect'
|
|
30
|
+
* import { getUncle, Provider, HttpTransport } from 'voltaire-effect'
|
|
31
|
+
*
|
|
32
|
+
* const program = Effect.gen(function* () {
|
|
33
|
+
* // Get first uncle of a block by number
|
|
34
|
+
* const uncle = yield* getUncle({ blockTag: '0x1234' }, 0)
|
|
35
|
+
*
|
|
36
|
+
* // Get by block hash
|
|
37
|
+
* const uncleByHash = yield* getUncle({
|
|
38
|
+
* blockHash: '0x...'
|
|
39
|
+
* }, 0)
|
|
40
|
+
* }).pipe(
|
|
41
|
+
* Effect.provide(Provider),
|
|
42
|
+
* Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
|
|
43
|
+
* )
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export const getUncle = (
|
|
47
|
+
args: GetUncleArgs = {},
|
|
48
|
+
uncleIndex: number | bigint,
|
|
49
|
+
): Effect.Effect<UncleBlockType, TransportError | ProviderNotFoundError, ProviderService> =>
|
|
50
|
+
Effect.flatMap(ProviderService, (svc) => {
|
|
51
|
+
const indexHex = `0x${BigInt(uncleIndex).toString(16)}`;
|
|
52
|
+
|
|
53
|
+
if ("blockHash" in args && args.blockHash !== undefined) {
|
|
54
|
+
const hash =
|
|
55
|
+
typeof args.blockHash === "string"
|
|
56
|
+
? args.blockHash
|
|
57
|
+
: `0x${Buffer.from(args.blockHash).toString("hex")}`;
|
|
58
|
+
return svc
|
|
59
|
+
.request<UncleBlockType | null>("eth_getUncleByBlockHashAndIndex", [
|
|
60
|
+
hash,
|
|
61
|
+
indexHex,
|
|
62
|
+
])
|
|
63
|
+
.pipe(
|
|
64
|
+
Effect.flatMap((result) =>
|
|
65
|
+
result === null
|
|
66
|
+
? Effect.fail(
|
|
67
|
+
new ProviderNotFoundError(
|
|
68
|
+
{ ...args, uncleIndex },
|
|
69
|
+
"Uncle not found",
|
|
70
|
+
{ resource: "uncle" },
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
: Effect.succeed(result),
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const blockTag: BlockTag = args.blockTag ?? "latest";
|
|
79
|
+
return svc
|
|
80
|
+
.request<UncleBlockType | null>("eth_getUncleByBlockNumberAndIndex", [
|
|
81
|
+
blockTag,
|
|
82
|
+
indexHex,
|
|
83
|
+
])
|
|
84
|
+
.pipe(
|
|
85
|
+
Effect.flatMap((result) =>
|
|
86
|
+
result === null
|
|
87
|
+
? Effect.fail(
|
|
88
|
+
new ProviderNotFoundError(
|
|
89
|
+
{ ...args, uncleIndex },
|
|
90
|
+
"Uncle not found",
|
|
91
|
+
{ resource: "uncle" },
|
|
92
|
+
),
|
|
93
|
+
)
|
|
94
|
+
: Effect.succeed(result),
|
|
95
|
+
),
|
|
96
|
+
);
|
|
97
|
+
});
|