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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Base64
|
|
3
|
-
* @description Effect-based schemas for standard and URL-safe base64 encoding.
|
|
3
|
+
* @description Effect-based schemas and functions for standard and URL-safe base64 encoding.
|
|
4
4
|
*
|
|
5
5
|
* ## Type Declarations
|
|
6
6
|
*
|
|
@@ -12,17 +12,97 @@
|
|
|
12
12
|
* }
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
|
+
* ## Schemas
|
|
16
|
+
*
|
|
17
|
+
* | Schema | Input | Output |
|
|
18
|
+
* |--------|-------|--------|
|
|
19
|
+
* | `Base64.Schema` | string \| Uint8Array | BrandedBase64 |
|
|
20
|
+
* | `Base64.UrlSchema` | string \| Uint8Array | BrandedBase64Url |
|
|
21
|
+
*
|
|
22
|
+
* ## Constructors (Effect-wrapped)
|
|
23
|
+
*
|
|
24
|
+
* ```typescript
|
|
25
|
+
* Base64.from(value) // Effect<BrandedBase64, Error>
|
|
26
|
+
* Base64.fromUrlSafe(value) // Effect<BrandedBase64Url, Error>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* ## Encoding (Pure)
|
|
30
|
+
*
|
|
31
|
+
* ```typescript
|
|
32
|
+
* Base64.encode(bytes) // BrandedBase64
|
|
33
|
+
* Base64.encodeString(str) // BrandedBase64
|
|
34
|
+
* Base64.encodeUrlSafe(bytes) // BrandedBase64Url
|
|
35
|
+
* Base64.encodeStringUrlSafe(str) // BrandedBase64Url
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* ## Decoding (Effect-wrapped)
|
|
39
|
+
*
|
|
40
|
+
* ```typescript
|
|
41
|
+
* Base64.decode(encoded) // Effect<Uint8Array, Error>
|
|
42
|
+
* Base64.decodeToString(encoded) // Effect<string, Error>
|
|
43
|
+
* Base64.decodeUrlSafe(encoded) // Effect<Uint8Array, Error>
|
|
44
|
+
* Base64.decodeUrlSafeToString(encoded) // Effect<string, Error>
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* ## Conversion (Pure)
|
|
48
|
+
*
|
|
49
|
+
* ```typescript
|
|
50
|
+
* Base64.toBytes(b64) // Uint8Array
|
|
51
|
+
* Base64.toBytesUrlSafe(b64) // Uint8Array
|
|
52
|
+
* Base64.toString(b64) // string
|
|
53
|
+
* Base64.toStringUrlSafe(b64) // string
|
|
54
|
+
* Base64.toBase64(bytes) // BrandedBase64
|
|
55
|
+
* Base64.toBase64Url(bytes) // BrandedBase64Url
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* ## Validation (Pure)
|
|
59
|
+
*
|
|
60
|
+
* ```typescript
|
|
61
|
+
* Base64.isValid(str) // boolean
|
|
62
|
+
* Base64.isValidUrlSafe(str) // boolean
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* ## Size Calculation (Pure)
|
|
66
|
+
*
|
|
67
|
+
* ```typescript
|
|
68
|
+
* Base64.calcEncodedSize(byteCount) // number
|
|
69
|
+
* Base64.calcDecodedSize(encoded) // number
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
15
72
|
* @example
|
|
16
73
|
* ```typescript
|
|
17
74
|
* import * as Base64 from 'voltaire-effect/primitives/Base64'
|
|
18
75
|
* import * as Schema from 'effect/Schema'
|
|
76
|
+
* import { Effect } from 'effect'
|
|
19
77
|
*
|
|
20
78
|
* const encoded = Schema.decodeSync(Base64.Schema)('SGVsbG8gV29ybGQ=')
|
|
79
|
+
* const decoded = await Effect.runPromise(Base64.decode('SGVsbG8='))
|
|
21
80
|
* ```
|
|
22
81
|
*
|
|
23
82
|
* @since 0.0.1
|
|
24
83
|
* @module
|
|
25
84
|
*/
|
|
26
85
|
|
|
86
|
+
// Types
|
|
27
87
|
export type { BrandedBase64, BrandedBase64Url } from "@tevm/voltaire/Base64";
|
|
88
|
+
|
|
89
|
+
// Schemas
|
|
28
90
|
export { Schema, UrlSchema } from "./Base64Schema.js";
|
|
91
|
+
|
|
92
|
+
// Constructors (Effect-wrapped)
|
|
93
|
+
export { from, fromUrlSafe } from "./from.js";
|
|
94
|
+
|
|
95
|
+
// Encoding (Pure)
|
|
96
|
+
export { encode, encodeString, encodeUrlSafe, encodeStringUrlSafe } from "./encode.js";
|
|
97
|
+
|
|
98
|
+
// Decoding (Effect-wrapped)
|
|
99
|
+
export { decode, decodeToString, decodeUrlSafe, decodeUrlSafeToString } from "./decode.js";
|
|
100
|
+
|
|
101
|
+
// Conversion (Pure)
|
|
102
|
+
export { toBytes, toBytesUrlSafe, toString, toStringUrlSafe, toBase64, toBase64Url } from "./convert.js";
|
|
103
|
+
|
|
104
|
+
// Validation (Pure)
|
|
105
|
+
export { isValid, isValidUrlSafe } from "./validation.js";
|
|
106
|
+
|
|
107
|
+
// Size Calculation (Pure)
|
|
108
|
+
export { calcEncodedSize, calcDecodedSize } from "./size.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module size
|
|
3
|
+
* @description Pure Base64 size calculation functions
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Base64 } from "@tevm/voltaire/Base64";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Calculate encoded size for given byte count
|
|
10
|
+
*/
|
|
11
|
+
export const calcEncodedSize = (byteCount: number): number => Base64.calcEncodedSize(byteCount);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Calculate decoded size for given Base64 string length
|
|
15
|
+
*/
|
|
16
|
+
export const calcDecodedSize = (encodedLength: number): number => Base64.calcDecodedSize(encodedLength);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module validation
|
|
3
|
+
* @description Pure Base64 validation functions
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { Base64 } from "@tevm/voltaire/Base64";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Check if string is valid standard Base64
|
|
10
|
+
*/
|
|
11
|
+
export const isValid = (value: string): boolean => Base64.isValid(value);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Check if string is valid URL-safe Base64
|
|
15
|
+
*/
|
|
16
|
+
export const isValidUrlSafe = (value: string): boolean => Base64.isValidUrlSafe(value);
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import {
|
|
4
|
+
SIZE,
|
|
5
|
+
FIELD_ELEMENTS_PER_BLOB,
|
|
6
|
+
BYTES_PER_FIELD_ELEMENT,
|
|
7
|
+
MAX_PER_TRANSACTION,
|
|
8
|
+
MAX_DATA_PER_BLOB,
|
|
9
|
+
} from "./index.js";
|
|
10
|
+
import { from } from "./from.js";
|
|
11
|
+
import { fromData } from "./fromData.js";
|
|
12
|
+
import { isValid } from "./isValid.js";
|
|
13
|
+
import { isValidVersion } from "./isValidVersion.js";
|
|
14
|
+
import { toData } from "./toData.js";
|
|
15
|
+
import { calculateGas } from "./calculateGas.js";
|
|
16
|
+
import { estimateBlobCount } from "./estimateBlobCount.js";
|
|
17
|
+
import { splitData } from "./splitData.js";
|
|
18
|
+
import { joinData } from "./joinData.js";
|
|
19
|
+
import { toVersionedHash } from "./toVersionedHash.js";
|
|
20
|
+
import { toCommitment } from "./toCommitment.js";
|
|
21
|
+
import { toProof } from "./toProof.js";
|
|
22
|
+
import { verify } from "./verify.js";
|
|
23
|
+
import { verifyBatch } from "./verifyBatch.js";
|
|
24
|
+
import { BlobSchema } from "./BlobSchema.js";
|
|
25
|
+
import { KZGTest } from "../../crypto/KZG/KZGService.js";
|
|
26
|
+
import * as S from "effect/Schema";
|
|
27
|
+
|
|
28
|
+
describe("Blob", () => {
|
|
29
|
+
describe("constants", () => {
|
|
30
|
+
it("SIZE is 131072", () => {
|
|
31
|
+
expect(SIZE).toBe(131072);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("FIELD_ELEMENTS_PER_BLOB is 4096", () => {
|
|
35
|
+
expect(FIELD_ELEMENTS_PER_BLOB).toBe(4096);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("BYTES_PER_FIELD_ELEMENT is 32", () => {
|
|
39
|
+
expect(BYTES_PER_FIELD_ELEMENT).toBe(32);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("MAX_PER_TRANSACTION is 6", () => {
|
|
43
|
+
expect(MAX_PER_TRANSACTION).toBe(6);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("MAX_DATA_PER_BLOB is 126972", () => {
|
|
47
|
+
expect(MAX_DATA_PER_BLOB).toBe(126972);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe("isValid", () => {
|
|
52
|
+
it("returns true for 128KB blob", () => {
|
|
53
|
+
const blob = new Uint8Array(SIZE);
|
|
54
|
+
expect(isValid(blob)).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("returns false for wrong size", () => {
|
|
58
|
+
expect(isValid(new Uint8Array(100))).toBe(false);
|
|
59
|
+
expect(isValid(new Uint8Array(SIZE + 1))).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe("from", () => {
|
|
64
|
+
it.effect("returns blob if already valid size", () =>
|
|
65
|
+
Effect.gen(function* () {
|
|
66
|
+
const input = new Uint8Array(SIZE);
|
|
67
|
+
const blob = yield* from(input);
|
|
68
|
+
expect(blob.length).toBe(SIZE);
|
|
69
|
+
}),
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
it.effect("encodes smaller data", () =>
|
|
73
|
+
Effect.gen(function* () {
|
|
74
|
+
const data = new TextEncoder().encode("Hello");
|
|
75
|
+
const blob = yield* from(data);
|
|
76
|
+
expect(blob.length).toBe(SIZE);
|
|
77
|
+
}),
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe("fromData", () => {
|
|
82
|
+
it.effect("encodes data with padding", () =>
|
|
83
|
+
Effect.gen(function* () {
|
|
84
|
+
const data = new TextEncoder().encode("Hello, blob!");
|
|
85
|
+
const blob = yield* fromData(data);
|
|
86
|
+
expect(blob.length).toBe(SIZE);
|
|
87
|
+
}),
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
it.effect("fails for data too large", () =>
|
|
91
|
+
Effect.gen(function* () {
|
|
92
|
+
const data = new Uint8Array(MAX_DATA_PER_BLOB + 1);
|
|
93
|
+
const result = yield* Effect.either(fromData(data));
|
|
94
|
+
expect(result._tag).toBe("Left");
|
|
95
|
+
}),
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe("toData", () => {
|
|
100
|
+
it.effect("round-trips data correctly", () =>
|
|
101
|
+
Effect.gen(function* () {
|
|
102
|
+
const original = new TextEncoder().encode("Hello, blob!");
|
|
103
|
+
const blob = yield* fromData(original);
|
|
104
|
+
const extracted = toData(blob);
|
|
105
|
+
expect(new TextDecoder().decode(extracted)).toBe("Hello, blob!");
|
|
106
|
+
}),
|
|
107
|
+
);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe("isValidVersion", () => {
|
|
111
|
+
it("returns true for valid KZG version", () => {
|
|
112
|
+
const hash = new Uint8Array(32);
|
|
113
|
+
hash[0] = 0x01;
|
|
114
|
+
expect(isValidVersion(hash as any)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("returns false for wrong version", () => {
|
|
118
|
+
const hash = new Uint8Array(32);
|
|
119
|
+
hash[0] = 0x00;
|
|
120
|
+
expect(isValidVersion(hash as any)).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("returns false for wrong length", () => {
|
|
124
|
+
const hash = new Uint8Array(31);
|
|
125
|
+
hash[0] = 0x01;
|
|
126
|
+
expect(isValidVersion(hash as any)).toBe(false);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
describe("calculateGas", () => {
|
|
131
|
+
it.effect("calculates gas for valid count", () =>
|
|
132
|
+
Effect.gen(function* () {
|
|
133
|
+
const gas = yield* calculateGas(3);
|
|
134
|
+
expect(gas).toBe(3 * 131072);
|
|
135
|
+
}),
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
it.effect("returns 0 for 0 blobs", () =>
|
|
139
|
+
Effect.gen(function* () {
|
|
140
|
+
const gas = yield* calculateGas(0);
|
|
141
|
+
expect(gas).toBe(0);
|
|
142
|
+
}),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
it.effect("fails for invalid count", () =>
|
|
146
|
+
Effect.gen(function* () {
|
|
147
|
+
const result = yield* Effect.either(calculateGas(7));
|
|
148
|
+
expect(result._tag).toBe("Left");
|
|
149
|
+
}),
|
|
150
|
+
);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
describe("estimateBlobCount", () => {
|
|
154
|
+
it.effect("estimates correctly", () =>
|
|
155
|
+
Effect.gen(function* () {
|
|
156
|
+
const count = yield* estimateBlobCount(200000);
|
|
157
|
+
expect(count).toBe(2);
|
|
158
|
+
}),
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
it.effect("returns 0 for empty data", () =>
|
|
162
|
+
Effect.gen(function* () {
|
|
163
|
+
const count = yield* estimateBlobCount(0);
|
|
164
|
+
expect(count).toBe(0);
|
|
165
|
+
}),
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
it.effect("fails for negative size", () =>
|
|
169
|
+
Effect.gen(function* () {
|
|
170
|
+
const result = yield* Effect.either(estimateBlobCount(-1));
|
|
171
|
+
expect(result._tag).toBe("Left");
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe("splitData/joinData", () => {
|
|
177
|
+
it.effect("round-trips large data", () =>
|
|
178
|
+
Effect.gen(function* () {
|
|
179
|
+
const original = new Uint8Array(200000);
|
|
180
|
+
for (let i = 0; i < original.length; i++) {
|
|
181
|
+
original[i] = i % 256;
|
|
182
|
+
}
|
|
183
|
+
const blobs = yield* splitData(original);
|
|
184
|
+
expect(blobs.length).toBe(2);
|
|
185
|
+
const rejoined = yield* joinData(blobs);
|
|
186
|
+
expect(rejoined).toEqual(original);
|
|
187
|
+
}),
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
it.effect("fails for data requiring too many blobs", () =>
|
|
191
|
+
Effect.gen(function* () {
|
|
192
|
+
const huge = new Uint8Array(MAX_DATA_PER_BLOB * 7);
|
|
193
|
+
const result = yield* Effect.either(splitData(huge));
|
|
194
|
+
expect(result._tag).toBe("Left");
|
|
195
|
+
}),
|
|
196
|
+
);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
describe("toVersionedHash", () => {
|
|
200
|
+
it.effect("creates versioned hash from commitment", () =>
|
|
201
|
+
Effect.gen(function* () {
|
|
202
|
+
const commitment = new Uint8Array(48);
|
|
203
|
+
const hash = yield* toVersionedHash(commitment as any);
|
|
204
|
+
expect(hash.length).toBe(32);
|
|
205
|
+
expect(hash[0]).toBe(0x01);
|
|
206
|
+
}),
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
it.effect("fails for invalid commitment size", () =>
|
|
210
|
+
Effect.gen(function* () {
|
|
211
|
+
const commitment = new Uint8Array(32);
|
|
212
|
+
const result = yield* Effect.either(
|
|
213
|
+
toVersionedHash(commitment as any),
|
|
214
|
+
);
|
|
215
|
+
expect(result._tag).toBe("Left");
|
|
216
|
+
}),
|
|
217
|
+
);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe("KZG operations with KZGTest", () => {
|
|
221
|
+
it.effect("toCommitment returns 48-byte commitment", () =>
|
|
222
|
+
Effect.gen(function* () {
|
|
223
|
+
const blob = yield* fromData(new Uint8Array(100));
|
|
224
|
+
const commitment = yield* toCommitment(blob);
|
|
225
|
+
expect(commitment.length).toBe(48);
|
|
226
|
+
}).pipe(Effect.provide(KZGTest)),
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
it.effect("toProof returns 48-byte proof", () =>
|
|
230
|
+
Effect.gen(function* () {
|
|
231
|
+
const blob = yield* fromData(new Uint8Array(100));
|
|
232
|
+
const commitment = yield* toCommitment(blob);
|
|
233
|
+
const proof = yield* toProof(blob, commitment);
|
|
234
|
+
expect(proof.length).toBe(48);
|
|
235
|
+
}).pipe(Effect.provide(KZGTest)),
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
it.effect("verify returns true with test layer", () =>
|
|
239
|
+
Effect.gen(function* () {
|
|
240
|
+
const blob = yield* fromData(new Uint8Array(100));
|
|
241
|
+
const commitment = yield* toCommitment(blob);
|
|
242
|
+
const proof = yield* toProof(blob, commitment);
|
|
243
|
+
const isValid = yield* verify(blob, commitment, proof);
|
|
244
|
+
expect(isValid).toBe(true);
|
|
245
|
+
}).pipe(Effect.provide(KZGTest)),
|
|
246
|
+
);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
describe("verifyBatch", () => {
|
|
250
|
+
it.effect("fails with not implemented error", () =>
|
|
251
|
+
Effect.gen(function* () {
|
|
252
|
+
const blob = yield* fromData(new Uint8Array(100));
|
|
253
|
+
const commitment = new Uint8Array(48) as any;
|
|
254
|
+
const proof = new Uint8Array(48) as any;
|
|
255
|
+
const result = yield* Effect.either(
|
|
256
|
+
verifyBatch([blob], [commitment], [proof]),
|
|
257
|
+
);
|
|
258
|
+
expect(result._tag).toBe("Left");
|
|
259
|
+
if (result._tag === "Left") {
|
|
260
|
+
expect(result.left.name).toBe("BlobNotImplementedError");
|
|
261
|
+
}
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
it.effect("validates array length mismatch", () =>
|
|
266
|
+
Effect.gen(function* () {
|
|
267
|
+
const blob = yield* fromData(new Uint8Array(100));
|
|
268
|
+
const commitment = new Uint8Array(48) as any;
|
|
269
|
+
const result = yield* Effect.either(
|
|
270
|
+
verifyBatch([blob], [commitment], []),
|
|
271
|
+
);
|
|
272
|
+
expect(result._tag).toBe("Left");
|
|
273
|
+
if (result._tag === "Left") {
|
|
274
|
+
expect(result.left.name).toBe("BlobArrayLengthMismatchError");
|
|
275
|
+
}
|
|
276
|
+
}),
|
|
277
|
+
);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
describe("BlobSchema", () => {
|
|
281
|
+
it("decodes valid blob", () => {
|
|
282
|
+
const bytes = new Uint8Array(SIZE);
|
|
283
|
+
const blob = S.decodeSync(BlobSchema)(bytes);
|
|
284
|
+
expect(blob.length).toBe(SIZE);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it("fails for invalid size", () => {
|
|
288
|
+
const bytes = new Uint8Array(100);
|
|
289
|
+
expect(() => S.decodeSync(BlobSchema)(bytes)).toThrow();
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module calculateGas
|
|
3
|
+
* @description Calculate blob gas for number of blobs
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { BrandedBlob as BlobNamespace } from "@tevm/voltaire";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import type { InvalidBlobCountError } from "@tevm/voltaire/Blob";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Calculate blob gas for number of blobs.
|
|
12
|
+
*
|
|
13
|
+
* @param blobCount - Number of blobs (0-6)
|
|
14
|
+
* @returns Effect yielding total blob gas or failing with InvalidBlobCountError
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
18
|
+
* import * as Effect from 'effect/Effect'
|
|
19
|
+
*
|
|
20
|
+
* const gas = await Effect.runPromise(Blob.calculateGas(3)) // 393216
|
|
21
|
+
* ```
|
|
22
|
+
* @since 0.1.0
|
|
23
|
+
*/
|
|
24
|
+
export const calculateGas = (
|
|
25
|
+
blobCount: number,
|
|
26
|
+
): Effect.Effect<number, InvalidBlobCountError> =>
|
|
27
|
+
Effect.try({
|
|
28
|
+
try: () => BlobNamespace.calculateGas(blobCount),
|
|
29
|
+
catch: (e) => e as InvalidBlobCountError,
|
|
30
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module estimateBlobCount
|
|
3
|
+
* @description Estimate number of blobs needed for data
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { BrandedBlob as BlobNamespace } from "@tevm/voltaire";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import type { InvalidBlobDataSizeError } from "@tevm/voltaire/Blob";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Estimate number of blobs needed for data.
|
|
12
|
+
*
|
|
13
|
+
* @param dataSize - Size of data in bytes
|
|
14
|
+
* @returns Effect yielding blob count or failing with InvalidBlobDataSizeError
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
18
|
+
* import * as Effect from 'effect/Effect'
|
|
19
|
+
*
|
|
20
|
+
* const count = await Effect.runPromise(Blob.estimateBlobCount(200000)) // 2
|
|
21
|
+
* ```
|
|
22
|
+
* @since 0.1.0
|
|
23
|
+
*/
|
|
24
|
+
export const estimateBlobCount = (
|
|
25
|
+
dataSize: number,
|
|
26
|
+
): Effect.Effect<number, InvalidBlobDataSizeError> =>
|
|
27
|
+
Effect.try({
|
|
28
|
+
try: () => BlobNamespace.estimateBlobCount(dataSize),
|
|
29
|
+
catch: (e) => e as InvalidBlobDataSizeError,
|
|
30
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module from
|
|
3
|
+
* @description Create Blob from Uint8Array with Effect error handling
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { BrandedBlob as BlobNamespace } from "@tevm/voltaire";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import type { InvalidBlobDataSizeError } from "@tevm/voltaire/Blob";
|
|
9
|
+
|
|
10
|
+
type BrandedBlob = BlobNamespace.BrandedBlob;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create Blob from Uint8Array (either raw blob data or data to encode)
|
|
14
|
+
*
|
|
15
|
+
* If input is 131072 bytes, returns as-is. Otherwise encodes with padding.
|
|
16
|
+
*
|
|
17
|
+
* @param value - Uint8Array (either 131072 bytes blob or data to encode)
|
|
18
|
+
* @returns Effect yielding BrandedBlob or failing with InvalidBlobDataSizeError
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
22
|
+
* import * as Effect from 'effect/Effect'
|
|
23
|
+
*
|
|
24
|
+
* // Raw 128KB blob
|
|
25
|
+
* const blob1 = await Effect.runPromise(Blob.from(new Uint8Array(131072)))
|
|
26
|
+
*
|
|
27
|
+
* // Auto-encode smaller data
|
|
28
|
+
* const blob2 = await Effect.runPromise(Blob.from(new TextEncoder().encode("Hello")))
|
|
29
|
+
* ```
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
*/
|
|
32
|
+
export const from = (
|
|
33
|
+
value: Uint8Array,
|
|
34
|
+
): Effect.Effect<BrandedBlob, InvalidBlobDataSizeError> =>
|
|
35
|
+
Effect.try({
|
|
36
|
+
try: () => BlobNamespace.from(value),
|
|
37
|
+
catch: (e) => e as InvalidBlobDataSizeError,
|
|
38
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module fromData
|
|
3
|
+
* @description Create Blob from arbitrary data with EIP-4844 field element encoding
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { BrandedBlob as BlobNamespace } from "@tevm/voltaire";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import type { InvalidBlobDataSizeError } from "@tevm/voltaire/Blob";
|
|
9
|
+
|
|
10
|
+
type BrandedBlob = BlobNamespace.BrandedBlob;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create Blob from arbitrary data (will be padded to 128KB)
|
|
14
|
+
*
|
|
15
|
+
* Uses EIP-4844 field element encoding where each 32-byte field element
|
|
16
|
+
* has byte[0] = 0x00 for BLS field constraint. First 4 bytes store length.
|
|
17
|
+
*
|
|
18
|
+
* @param data - Data to encode (max 126972 bytes)
|
|
19
|
+
* @returns Effect yielding BrandedBlob or failing with InvalidBlobDataSizeError
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
23
|
+
* import * as Effect from 'effect/Effect'
|
|
24
|
+
*
|
|
25
|
+
* const data = new TextEncoder().encode("Hello, blob!")
|
|
26
|
+
* const blob = await Effect.runPromise(Blob.fromData(data))
|
|
27
|
+
* ```
|
|
28
|
+
* @since 0.1.0
|
|
29
|
+
*/
|
|
30
|
+
export const fromData = (
|
|
31
|
+
data: Uint8Array,
|
|
32
|
+
): Effect.Effect<BrandedBlob, InvalidBlobDataSizeError> =>
|
|
33
|
+
Effect.try({
|
|
34
|
+
try: () => BlobNamespace.fromData(data),
|
|
35
|
+
catch: (e) => e as InvalidBlobDataSizeError,
|
|
36
|
+
});
|
|
@@ -8,6 +8,51 @@
|
|
|
8
8
|
* This module provides Effect-based schemas and functions for creating,
|
|
9
9
|
* validating, and working with blob data.
|
|
10
10
|
*
|
|
11
|
+
* ## Type Declarations
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
15
|
+
*
|
|
16
|
+
* function processBlob(blob: Blob.BrandedBlob) {
|
|
17
|
+
* // ...
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* ## Schemas
|
|
22
|
+
*
|
|
23
|
+
* | Schema | Input | Output | Description |
|
|
24
|
+
* |--------|-------|--------|-------------|
|
|
25
|
+
* | `Blob.Schema` | Uint8Array | BrandedBlob | Validates exactly 131072 bytes |
|
|
26
|
+
*
|
|
27
|
+
* ## Constructors (Effect-wrapped)
|
|
28
|
+
*
|
|
29
|
+
* ```typescript
|
|
30
|
+
* Blob.from(bytes) // Effect<BrandedBlob, InvalidBlobDataSizeError>
|
|
31
|
+
* Blob.fromData(data) // Effect<BrandedBlob, InvalidBlobDataSizeError>
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* ## Pure Functions
|
|
35
|
+
*
|
|
36
|
+
* ```typescript
|
|
37
|
+
* Blob.isValid(data) // boolean - check if exactly 128KB
|
|
38
|
+
* Blob.isValidVersion(hash) // boolean - check versioned hash version byte
|
|
39
|
+
* Blob.toData(blob) // Uint8Array - extract original data
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ## Effectful Functions
|
|
43
|
+
*
|
|
44
|
+
* ```typescript
|
|
45
|
+
* Blob.calculateGas(count) // Effect<number, InvalidBlobCountError>
|
|
46
|
+
* Blob.estimateBlobCount(size) // Effect<number, InvalidBlobDataSizeError>
|
|
47
|
+
* Blob.splitData(data) // Effect<BrandedBlob[], InvalidBlobDataSizeError>
|
|
48
|
+
* Blob.joinData(blobs) // Effect<Uint8Array, BlobError>
|
|
49
|
+
* Blob.toCommitment(blob) // Effect<Commitment, KZGError, KZGService>
|
|
50
|
+
* Blob.toProof(blob, commitment) // Effect<Proof, KZGError, KZGService>
|
|
51
|
+
* Blob.toVersionedHash(commitment) // Effect<VersionedHash, InvalidCommitmentSizeError>
|
|
52
|
+
* Blob.verify(blob, commitment, proof) // Effect<boolean, KZGError, KZGService>
|
|
53
|
+
* Blob.verifyBatch(blobs, commitments, proofs) // Effect<boolean, BlobError>
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
11
56
|
* @example
|
|
12
57
|
* ```typescript
|
|
13
58
|
* import * as Blob from 'voltaire-effect/primitives/Blob'
|
|
@@ -30,25 +75,67 @@
|
|
|
30
75
|
* @since 0.0.1
|
|
31
76
|
*/
|
|
32
77
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
78
|
+
// Re-export types from voltaire
|
|
79
|
+
export type {
|
|
80
|
+
BrandedBlob,
|
|
81
|
+
Commitment,
|
|
82
|
+
Proof,
|
|
83
|
+
VersionedHash,
|
|
84
|
+
} from "@tevm/voltaire/Blob";
|
|
85
|
+
|
|
86
|
+
// Re-export constants from voltaire
|
|
40
87
|
export {
|
|
41
88
|
BYTES_PER_FIELD_ELEMENT,
|
|
42
89
|
FIELD_ELEMENTS_PER_BLOB,
|
|
43
90
|
MAX_PER_TRANSACTION,
|
|
44
91
|
SIZE,
|
|
92
|
+
COMMITMENT_VERSION_KZG,
|
|
93
|
+
GAS_PER_BLOB,
|
|
94
|
+
TARGET_GAS_PER_BLOCK,
|
|
95
|
+
MAX_DATA_PER_BLOB,
|
|
45
96
|
} from "@tevm/voltaire/Blob";
|
|
46
|
-
|
|
97
|
+
|
|
98
|
+
// Re-export errors from voltaire
|
|
99
|
+
export {
|
|
100
|
+
BlobArrayLengthMismatchError,
|
|
101
|
+
BlobNotImplementedError,
|
|
102
|
+
InvalidBlobCountError,
|
|
103
|
+
InvalidBlobDataSizeError,
|
|
104
|
+
InvalidBlobLengthPrefixError,
|
|
105
|
+
InvalidBlobSizeError,
|
|
106
|
+
InvalidCommitmentSizeError,
|
|
107
|
+
InvalidProofSizeError,
|
|
108
|
+
} from "@tevm/voltaire/Blob";
|
|
109
|
+
|
|
110
|
+
// Re-export factory functions from voltaire (for advanced use/DI)
|
|
111
|
+
export {
|
|
112
|
+
Blob,
|
|
113
|
+
ToCommitment,
|
|
114
|
+
ToProof,
|
|
115
|
+
ToVersionedHash,
|
|
116
|
+
Verify,
|
|
117
|
+
VerifyBatch,
|
|
118
|
+
} from "@tevm/voltaire/Blob";
|
|
119
|
+
|
|
120
|
+
// Schema
|
|
47
121
|
export { BlobSchema, BlobSchema as Schema } from "./BlobSchema.js";
|
|
48
|
-
/** Create blob from exact 131,072 bytes */
|
|
49
|
-
/** Create blob from arbitrary data with padding */
|
|
50
122
|
|
|
51
|
-
|
|
123
|
+
// Constructors (Effect-wrapped)
|
|
124
|
+
export { from } from "./from.js";
|
|
125
|
+
export { fromData } from "./fromData.js";
|
|
126
|
+
|
|
127
|
+
// Pure functions
|
|
52
128
|
export { isValid } from "./isValid.js";
|
|
53
|
-
|
|
129
|
+
export { isValidVersion } from "./isValidVersion.js";
|
|
54
130
|
export { toData } from "./toData.js";
|
|
131
|
+
|
|
132
|
+
// Effectful functions
|
|
133
|
+
export { calculateGas } from "./calculateGas.js";
|
|
134
|
+
export { estimateBlobCount } from "./estimateBlobCount.js";
|
|
135
|
+
export { joinData } from "./joinData.js";
|
|
136
|
+
export { splitData } from "./splitData.js";
|
|
137
|
+
export { toCommitment } from "./toCommitment.js";
|
|
138
|
+
export { toProof } from "./toProof.js";
|
|
139
|
+
export { toVersionedHash } from "./toVersionedHash.js";
|
|
140
|
+
export { verify } from "./verify.js";
|
|
141
|
+
export { verifyBatch } from "./verifyBatch.js";
|