viem 0.0.1-cjs.10 → 0.0.1-sushi.26
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/contract/package.json +4 -0
- package/dist/call-ac509982.d.ts +23 -0
- package/dist/chain-c4ccb458.d.ts +5 -0
- package/dist/{rpc-b77c5aee.d.ts → chain-f16512e8.d.ts} +97 -17
- package/dist/chains.d.ts +1303 -74
- package/dist/chains.js +81 -85
- package/dist/chains.js.map +1 -0
- package/dist/chains.mjs +121 -125
- package/dist/chains.mjs.map +1 -0
- package/dist/chunk-2PFNLP3F.js +192 -0
- package/dist/chunk-2PFNLP3F.js.map +1 -0
- package/dist/chunk-5ND4P6QL.mjs +192 -0
- package/dist/chunk-5ND4P6QL.mjs.map +1 -0
- package/dist/{chunk-5ZBNF5WM.js → chunk-NXCI5KQC.js} +769 -359
- package/dist/chunk-NXCI5KQC.js.map +1 -0
- package/dist/{chunk-HLVCJ7RV.mjs → chunk-O7T5NQLB.mjs} +484 -477
- package/dist/chunk-O7T5NQLB.mjs.map +1 -0
- package/dist/{chunk-2FDH6XP5.mjs → chunk-SD5X7F4U.mjs} +777 -367
- package/dist/chunk-SD5X7F4U.mjs.map +1 -0
- package/dist/{chunk-46ZFLVHC.js → chunk-UTL6F7UN.js} +519 -512
- package/dist/chunk-UTL6F7UN.js.map +1 -0
- package/dist/contract-9e76e561.d.ts +166 -0
- package/dist/contract.d.ts +123 -0
- package/dist/contract.js +53 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.mjs +53 -0
- package/dist/contract.mjs.map +1 -0
- package/dist/createClient-68ee4bb4.d.ts +62 -0
- package/dist/createPublicClient-b732194e.d.ts +19 -0
- package/dist/createTestClient-dedf321e.d.ts +34 -0
- package/dist/createWalletClient-75813d83.d.ts +30 -0
- package/dist/decodeErrorResult-0b934d23.d.ts +16 -0
- package/dist/{eip1193-020a6f13.d.ts → eip1193-6f9ba163.d.ts} +12 -9
- package/dist/ens.d.ts +82 -0
- package/dist/ens.js +216 -0
- package/dist/ens.js.map +1 -0
- package/dist/ens.mjs +216 -0
- package/dist/ens.mjs.map +1 -0
- package/dist/getAbiItem-c8e6e7d4.d.ts +97 -0
- package/dist/index.d.ts +128 -33
- package/dist/index.js +240 -244
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +257 -261
- package/dist/index.mjs.map +1 -0
- package/dist/public.d.ts +353 -0
- package/dist/public.js +58 -0
- package/dist/public.js.map +1 -0
- package/dist/public.mjs +58 -0
- package/dist/public.mjs.map +1 -0
- package/dist/readContract-4f6e2692.d.ts +10 -0
- package/dist/rpc-a5a7f376.d.ts +121 -0
- package/dist/sendTransaction-e713f90c.d.ts +12 -0
- package/dist/test.d.ts +161 -0
- package/dist/test.js +264 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +264 -0
- package/dist/test.mjs.map +1 -0
- package/dist/transactionReceipt-2a86c7c7.d.ts +26 -0
- package/dist/transactionRequest-c7794f5e.d.ts +15 -0
- package/dist/utils/index.d.ts +238 -24
- package/dist/utils/index.js +27 -2
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +30 -5
- package/dist/utils/index.mjs.map +1 -0
- package/dist/wallet.d.ts +42 -0
- package/dist/wallet.js +24 -0
- package/dist/wallet.js.map +1 -0
- package/dist/wallet.mjs +24 -0
- package/dist/wallet.mjs.map +1 -0
- package/dist/watchEvent-c346c12d.d.ts +41 -0
- package/dist/window.d.ts +3 -2
- package/dist/window.js +1 -1
- package/dist/window.js.map +1 -0
- package/dist/window.mjs +1 -0
- package/dist/window.mjs.map +1 -0
- package/ens/package.json +4 -0
- package/package.json +40 -72
- package/src/_test/abis.ts +1420 -0
- package/src/_test/bench.ts +15 -0
- package/src/_test/constants.ts +63 -0
- package/src/_test/generated.ts +128 -0
- package/src/_test/globalSetup.ts +11 -0
- package/src/_test/index.ts +25 -0
- package/src/_test/setup.ts +8 -0
- package/src/_test/utils.ts +155 -0
- package/src/actions/ens/getEnsAddress.bench.ts +26 -0
- package/src/actions/ens/getEnsAddress.test.ts +97 -0
- package/src/actions/ens/getEnsAddress.ts +122 -0
- package/src/actions/ens/getEnsName.bench.ts +30 -0
- package/src/actions/ens/getEnsName.test.ts +101 -0
- package/src/actions/ens/getEnsName.ts +106 -0
- package/src/actions/ens/index.test.ts +12 -0
- package/src/actions/ens/index.ts +3 -0
- package/src/actions/index.test.ts +81 -0
- package/src/actions/index.ts +182 -0
- package/src/actions/public/call.bench.ts +48 -0
- package/src/actions/public/call.test.ts +99 -0
- package/src/actions/public/call.ts +97 -0
- package/src/actions/public/createBlockFilter.bench.ts +11 -0
- package/src/actions/public/createBlockFilter.test.ts +9 -0
- package/src/actions/public/createBlockFilter.ts +14 -0
- package/src/actions/public/createContractEventFilter.test.ts +119 -0
- package/src/actions/public/createContractEventFilter.ts +69 -0
- package/src/actions/public/createEventFilter.test.ts +277 -0
- package/src/actions/public/createEventFilter.ts +93 -0
- package/src/actions/public/createPendingTransactionFilter.bench.ts +11 -0
- package/src/actions/public/createPendingTransactionFilter.test.ts +9 -0
- package/src/actions/public/createPendingTransactionFilter.ts +14 -0
- package/src/actions/public/estimateGas.bench.ts +46 -0
- package/src/actions/public/estimateGas.test.ts +92 -0
- package/src/actions/public/estimateGas.ts +61 -0
- package/src/actions/public/getBalance.test.ts +83 -0
- package/src/actions/public/getBalance.ts +37 -0
- package/src/actions/public/getBlock.bench.ts +28 -0
- package/src/actions/public/getBlock.test.ts +575 -0
- package/src/actions/public/getBlock.ts +65 -0
- package/src/actions/public/getBlockNumber.bench.ts +28 -0
- package/src/actions/public/getBlockNumber.test.ts +27 -0
- package/src/actions/public/getBlockNumber.ts +32 -0
- package/src/actions/public/getBlockTransactionCount.bench.ts +15 -0
- package/src/actions/public/getBlockTransactionCount.test.ts +57 -0
- package/src/actions/public/getBlockTransactionCount.ts +52 -0
- package/src/actions/public/getBytecode.test.ts +27 -0
- package/src/actions/public/getBytecode.ts +32 -0
- package/src/actions/public/getChainId.bench.ts +15 -0
- package/src/actions/public/getChainId.test.ts +8 -0
- package/src/actions/public/getChainId.ts +7 -0
- package/src/actions/public/getFeeHistory.bench.ts +18 -0
- package/src/actions/public/getFeeHistory.test.ts +137 -0
- package/src/actions/public/getFeeHistory.ts +44 -0
- package/src/actions/public/getFilterChanges.bench.ts +13 -0
- package/src/actions/public/getFilterChanges.test.ts +383 -0
- package/src/actions/public/getFilterChanges.ts +23 -0
- package/src/actions/public/getFilterLogs.test.ts +297 -0
- package/src/actions/public/getFilterLogs.ts +20 -0
- package/src/actions/public/getGasPrice.bench.ts +19 -0
- package/src/actions/public/getGasPrice.test.ts +8 -0
- package/src/actions/public/getGasPrice.ts +15 -0
- package/src/actions/public/getLogs.test.ts +306 -0
- package/src/actions/public/getLogs.ts +84 -0
- package/src/actions/public/getStorageAt.test.ts +34 -0
- package/src/actions/public/getStorageAt.ts +32 -0
- package/src/actions/public/getTransaction.bench.ts +33 -0
- package/src/actions/public/getTransaction.test.ts +311 -0
- package/src/actions/public/getTransaction.ts +95 -0
- package/src/actions/public/getTransactionConfirmations.test.ts +69 -0
- package/src/actions/public/getTransactionConfirmations.ts +38 -0
- package/src/actions/public/getTransactionCount.test.ts +56 -0
- package/src/actions/public/getTransactionCount.ts +34 -0
- package/src/actions/public/getTransactionReceipt.bench.ts +33 -0
- package/src/actions/public/getTransactionReceipt.test.ts +179 -0
- package/src/actions/public/getTransactionReceipt.ts +34 -0
- package/src/actions/public/index.test.ts +43 -0
- package/src/actions/public/index.ts +146 -0
- package/src/actions/public/multicall.test.ts +452 -0
- package/src/actions/public/multicall.ts +108 -0
- package/src/actions/public/readContract.test.ts +328 -0
- package/src/actions/public/readContract.ts +73 -0
- package/src/actions/public/simulateContract.bench.ts +41 -0
- package/src/actions/public/simulateContract.test.ts +410 -0
- package/src/actions/public/simulateContract.ts +91 -0
- package/src/actions/public/uninstallFilter.bench.ts +13 -0
- package/src/actions/public/uninstallFilter.test.ts +65 -0
- package/src/actions/public/uninstallFilter.ts +17 -0
- package/src/actions/public/waitForTransactionReceipt.test.ts +322 -0
- package/src/actions/public/waitForTransactionReceipt.ts +170 -0
- package/src/actions/public/watchBlockNumber.test.ts +166 -0
- package/src/actions/public/watchBlockNumber.ts +79 -0
- package/src/actions/public/watchBlocks.test.ts +210 -0
- package/src/actions/public/watchBlocks.ts +114 -0
- package/src/actions/public/watchContractEvent.test.ts +305 -0
- package/src/actions/public/watchContractEvent.ts +108 -0
- package/src/actions/public/watchEvent.test.ts +195 -0
- package/src/actions/public/watchEvent.ts +95 -0
- package/src/actions/public/watchPendingTransactions.test.ts +116 -0
- package/src/actions/public/watchPendingTransactions.ts +74 -0
- package/src/actions/test/dropTransaction.test.ts +34 -0
- package/src/actions/test/dropTransaction.ts +17 -0
- package/src/actions/test/getAutomine.test.ts +14 -0
- package/src/actions/test/getAutomine.ts +11 -0
- package/src/actions/test/getTxpoolContent.test.ts +45 -0
- package/src/actions/test/getTxpoolContent.ts +7 -0
- package/src/actions/test/getTxpoolStatus.test.ts +41 -0
- package/src/actions/test/getTxpoolStatus.ts +12 -0
- package/src/actions/test/impersonateAccount.test.ts +26 -0
- package/src/actions/test/impersonateAccount.ts +17 -0
- package/src/actions/test/increaseTime.test.ts +18 -0
- package/src/actions/test/increaseTime.ts +17 -0
- package/src/actions/test/index.test.ts +38 -0
- package/src/actions/test/index.ts +77 -0
- package/src/actions/test/inspectTxpool.test.ts +50 -0
- package/src/actions/test/inspectTxpool.ts +7 -0
- package/src/actions/test/mine.test.ts +20 -0
- package/src/actions/test/mine.ts +16 -0
- package/src/actions/test/removeBlockTimestampInterval.test.ts +23 -0
- package/src/actions/test/removeBlockTimestampInterval.ts +7 -0
- package/src/actions/test/reset.test.ts +19 -0
- package/src/actions/test/reset.ts +18 -0
- package/src/actions/test/revert.test.ts +39 -0
- package/src/actions/test/revert.ts +14 -0
- package/src/actions/test/sendUnsignedTransaction.test.ts +52 -0
- package/src/actions/test/sendUnsignedTransaction.ts +19 -0
- package/src/actions/test/setAutomine.test.ts +14 -0
- package/src/actions/test/setAutomine.ts +8 -0
- package/src/actions/test/setBalance.test.ts +29 -0
- package/src/actions/test/setBalance.ts +20 -0
- package/src/actions/test/setBlockGasLimit.test.ts +21 -0
- package/src/actions/test/setBlockGasLimit.ts +17 -0
- package/src/actions/test/setBlockTimestampInterval.test.ts +23 -0
- package/src/actions/test/setBlockTimestampInterval.ts +16 -0
- package/src/actions/test/setCode.test.ts +26 -0
- package/src/actions/test/setCode.ts +19 -0
- package/src/actions/test/setCoinbase.test.ts +11 -0
- package/src/actions/test/setCoinbase.ts +17 -0
- package/src/actions/test/setIntervalMining.test.ts +30 -0
- package/src/actions/test/setIntervalMining.ts +16 -0
- package/src/actions/test/setLoggingEnabled.test.ts +10 -0
- package/src/actions/test/setLoggingEnabled.ts +8 -0
- package/src/actions/test/setMinGasPrice.test.ts +22 -0
- package/src/actions/test/setMinGasPrice.ts +17 -0
- package/src/actions/test/setNextBlockBaseFeePerGas.test.ts +23 -0
- package/src/actions/test/setNextBlockBaseFeePerGas.ts +17 -0
- package/src/actions/test/setNextBlockTimestamp.test.ts +19 -0
- package/src/actions/test/setNextBlockTimestamp.ts +17 -0
- package/src/actions/test/setNonce.test.ts +28 -0
- package/src/actions/test/setNonce.ts +20 -0
- package/src/actions/test/setRpcUrl.test.ts +9 -0
- package/src/actions/test/setRpcUrl.ts +8 -0
- package/src/actions/test/setStorageAt.test.ts +36 -0
- package/src/actions/test/setStorageAt.ts +26 -0
- package/src/actions/test/snapshot.test.ts +18 -0
- package/src/actions/test/snapshot.ts +7 -0
- package/src/actions/test/stopImpersonatingAccount.test.ts +29 -0
- package/src/actions/test/stopImpersonatingAccount.ts +17 -0
- package/src/actions/wallet/addChain.test.ts +14 -0
- package/src/actions/wallet/addChain.ts +21 -0
- package/src/actions/wallet/deployContract.test.ts +55 -0
- package/src/actions/wallet/deployContract.ts +38 -0
- package/src/actions/wallet/getAccounts.test.ts +22 -0
- package/src/actions/wallet/getAccounts.ts +7 -0
- package/src/actions/wallet/getPermissions.test.ts +24 -0
- package/src/actions/wallet/getPermissions.ts +9 -0
- package/src/actions/wallet/index.test.ts +21 -0
- package/src/actions/wallet/index.ts +36 -0
- package/src/actions/wallet/requestAccounts.test.ts +13 -0
- package/src/actions/wallet/requestAccounts.ts +7 -0
- package/src/actions/wallet/requestPermissions.test.ts +26 -0
- package/src/actions/wallet/requestPermissions.ts +19 -0
- package/src/actions/wallet/sendTransaction.bench.ts +57 -0
- package/src/actions/wallet/sendTransaction.test.ts +440 -0
- package/src/actions/wallet/sendTransaction.ts +77 -0
- package/src/actions/wallet/signMessage.test.ts +61 -0
- package/src/actions/wallet/signMessage.ts +35 -0
- package/src/actions/wallet/switchChain.test.ts +21 -0
- package/src/actions/wallet/switchChain.ts +19 -0
- package/src/actions/wallet/watchAsset.test.ts +40 -0
- package/src/actions/wallet/watchAsset.ts +16 -0
- package/src/actions/wallet/writeContract.test.ts +84 -0
- package/src/actions/wallet/writeContract.ts +47 -0
- package/src/chains.test.ts +439 -0
- package/src/chains.ts +99 -0
- package/src/clients/createClient.test.ts +295 -0
- package/src/clients/createClient.ts +81 -0
- package/src/clients/createPublicClient.test.ts +165 -0
- package/src/clients/createPublicClient.ts +49 -0
- package/src/clients/createTestClient.test.ts +145 -0
- package/src/clients/createTestClient.ts +72 -0
- package/src/clients/createWalletClient.test.ts +121 -0
- package/src/clients/createWalletClient.ts +54 -0
- package/src/clients/index.test.ts +19 -0
- package/src/clients/index.ts +31 -0
- package/src/clients/transports/createTransport.test.ts +58 -0
- package/src/clients/transports/createTransport.ts +48 -0
- package/src/clients/transports/custom.test.ts +98 -0
- package/src/clients/transports/custom.ts +34 -0
- package/src/clients/transports/fallback.test.ts +393 -0
- package/src/clients/transports/fallback.ts +58 -0
- package/src/clients/transports/http.test.ts +109 -0
- package/src/clients/transports/http.ts +51 -0
- package/src/clients/transports/index.test.ts +15 -0
- package/src/clients/transports/index.ts +17 -0
- package/src/clients/transports/webSocket.test.ts +164 -0
- package/src/clients/transports/webSocket.ts +118 -0
- package/src/constants/abis.test.ts +53 -0
- package/src/constants/abis.ts +44 -0
- package/src/constants/index.test.ts +14 -0
- package/src/constants/index.ts +3 -0
- package/src/constants/solidity.test.ts +41 -0
- package/src/constants/solidity.ts +35 -0
- package/src/contract.test.ts +32 -0
- package/src/contract.ts +68 -0
- package/src/ens.test.ts +15 -0
- package/src/ens.ts +8 -0
- package/src/errors/abi.test.ts +81 -0
- package/src/errors/abi.ts +254 -0
- package/src/errors/address.test.ts +14 -0
- package/src/errors/address.ts +9 -0
- package/src/errors/base.test.ts +114 -0
- package/src/errors/base.ts +57 -0
- package/src/errors/block.test.ts +24 -0
- package/src/errors/block.ts +18 -0
- package/src/errors/chain.test.ts +46 -0
- package/src/errors/chain.ts +33 -0
- package/src/errors/contract.test.ts +233 -0
- package/src/errors/contract.ts +178 -0
- package/src/errors/data.ts +20 -0
- package/src/errors/encoding.ts +60 -0
- package/src/errors/index.ts +82 -0
- package/src/errors/log.ts +8 -0
- package/src/errors/request.test.ts +330 -0
- package/src/errors/request.ts +163 -0
- package/src/errors/rpc.test.ts +87 -0
- package/src/errors/rpc.ts +113 -0
- package/src/errors/transaction.test.ts +83 -0
- package/src/errors/transaction.ts +54 -0
- package/src/errors/transport.test.ts +11 -0
- package/src/errors/transport.ts +12 -0
- package/src/index.test.ts +116 -0
- package/src/index.ts +132 -0
- package/src/public.test.ts +36 -0
- package/src/public.ts +76 -0
- package/src/test.test.ts +38 -0
- package/src/test.ts +52 -0
- package/src/types/block.ts +71 -0
- package/src/types/chain.ts +6 -0
- package/src/types/contract.ts +497 -0
- package/src/types/eip1193.ts +1041 -0
- package/src/types/fee.ts +47 -0
- package/src/types/filter.ts +8 -0
- package/src/types/formatter.ts +23 -0
- package/src/types/index.ts +84 -0
- package/src/types/log.ts +22 -0
- package/src/types/misc.ts +5 -0
- package/src/types/multicall.ts +82 -0
- package/src/types/rpc.ts +35 -0
- package/src/types/transaction.ts +145 -0
- package/src/types/utils.ts +88 -0
- package/src/types/window.ts +9 -0
- package/src/utils/abi/decodeAbi.bench.ts +135 -0
- package/src/utils/abi/decodeAbi.test.ts +1614 -0
- package/src/utils/abi/decodeAbi.ts +300 -0
- package/src/utils/abi/decodeDeployData.test.ts +151 -0
- package/src/utils/abi/decodeDeployData.ts +44 -0
- package/src/utils/abi/decodeErrorResult.test.ts +230 -0
- package/src/utils/abi/decodeErrorResult.ts +45 -0
- package/src/utils/abi/decodeEventLog.test.ts +542 -0
- package/src/utils/abi/decodeEventLog.ts +107 -0
- package/src/utils/abi/decodeFunctionData.test.ts +138 -0
- package/src/utils/abi/decodeFunctionData.ts +32 -0
- package/src/utils/abi/decodeFunctionResult.test.ts +333 -0
- package/src/utils/abi/decodeFunctionResult.ts +57 -0
- package/src/utils/abi/encodeAbi.bench.ts +163 -0
- package/src/utils/abi/encodeAbi.test.ts +1447 -0
- package/src/utils/abi/encodeAbi.ts +273 -0
- package/src/utils/abi/encodeDeployData.test.ts +124 -0
- package/src/utils/abi/encodeDeployData.ts +40 -0
- package/src/utils/abi/encodeErrorResult.test.ts +192 -0
- package/src/utils/abi/encodeErrorResult.ts +47 -0
- package/src/utils/abi/encodeEventTopics.test.ts +345 -0
- package/src/utils/abi/encodeEventTopics.ts +75 -0
- package/src/utils/abi/encodeFunctionData.test.ts +138 -0
- package/src/utils/abi/encodeFunctionData.ts +42 -0
- package/src/utils/abi/encodeFunctionResult.test.ts +279 -0
- package/src/utils/abi/encodeFunctionResult.ts +41 -0
- package/src/utils/abi/formatAbiItem.test.ts +335 -0
- package/src/utils/abi/formatAbiItem.ts +41 -0
- package/src/utils/abi/formatAbiItemWithArgs.test.ts +291 -0
- package/src/utils/abi/formatAbiItemWithArgs.ts +27 -0
- package/src/utils/abi/getAbiItem.test.ts +547 -0
- package/src/utils/abi/getAbiItem.ts +95 -0
- package/src/utils/abi/index.test.ts +24 -0
- package/src/utils/abi/index.ts +48 -0
- package/src/utils/address/getAddress.bench.ts +22 -0
- package/src/utils/address/getAddress.test.ts +46 -0
- package/src/utils/address/getAddress.ts +28 -0
- package/src/utils/address/getContractAddress.bench.ts +20 -0
- package/src/utils/address/getContractAddress.test.ts +78 -0
- package/src/utils/address/getContractAddress.ts +59 -0
- package/src/utils/address/index.test.ts +17 -0
- package/src/utils/address/index.ts +16 -0
- package/src/utils/address/isAddress.test.ts +10 -0
- package/src/utils/address/isAddress.ts +10 -0
- package/src/utils/address/isAddressEqual.test.ts +55 -0
- package/src/utils/address/isAddressEqual.ts +6 -0
- package/src/utils/buildRequest.test.ts +428 -0
- package/src/utils/buildRequest.ts +72 -0
- package/src/utils/chain.test.ts +43 -0
- package/src/utils/chain.ts +8 -0
- package/src/utils/contract/extractFunctionParts.test.ts +109 -0
- package/src/utils/contract/extractFunctionParts.ts +27 -0
- package/src/utils/contract/getContractError.test.ts +282 -0
- package/src/utils/contract/getContractError.ts +58 -0
- package/src/utils/contract/index.test.ts +15 -0
- package/src/utils/contract/index.ts +8 -0
- package/src/utils/data/concat.test.ts +35 -0
- package/src/utils/data/concat.ts +34 -0
- package/src/utils/data/index.test.ts +23 -0
- package/src/utils/data/index.ts +13 -0
- package/src/utils/data/isBytes.test.ts +9 -0
- package/src/utils/data/isBytes.ts +7 -0
- package/src/utils/data/isHex.test.ts +13 -0
- package/src/utils/data/isHex.ts +5 -0
- package/src/utils/data/pad.bench.ts +30 -0
- package/src/utils/data/pad.test.ts +367 -0
- package/src/utils/data/pad.ts +53 -0
- package/src/utils/data/size.test.ts +18 -0
- package/src/utils/data/size.ts +13 -0
- package/src/utils/data/slice.test.ts +203 -0
- package/src/utils/data/slice.ts +60 -0
- package/src/utils/data/trim.bench.ts +34 -0
- package/src/utils/data/trim.test.ts +175 -0
- package/src/utils/data/trim.ts +33 -0
- package/src/utils/encoding/decodeBytes.bench.ts +40 -0
- package/src/utils/encoding/decodeBytes.test.ts +144 -0
- package/src/utils/encoding/decodeBytes.ts +63 -0
- package/src/utils/encoding/decodeHex.bench.ts +24 -0
- package/src/utils/encoding/decodeHex.test.ts +167 -0
- package/src/utils/encoding/decodeHex.ts +76 -0
- package/src/utils/encoding/decodeRlp.bench.ts +34 -0
- package/src/utils/encoding/decodeRlp.test.ts +350 -0
- package/src/utils/encoding/decodeRlp.ts +121 -0
- package/src/utils/encoding/encodeBytes.bench.ts +29 -0
- package/src/utils/encoding/encodeBytes.test.ts +676 -0
- package/src/utils/encoding/encodeBytes.ts +59 -0
- package/src/utils/encoding/encodeHex.bench.ts +49 -0
- package/src/utils/encoding/encodeHex.test.ts +232 -0
- package/src/utils/encoding/encodeHex.ts +104 -0
- package/src/utils/encoding/encodeRlp.bench.ts +54 -0
- package/src/utils/encoding/encodeRlp.test.ts +254 -0
- package/src/utils/encoding/encodeRlp.ts +48 -0
- package/src/utils/encoding/index.test.ts +32 -0
- package/src/utils/encoding/index.ts +36 -0
- package/src/utils/ens/index.test.ts +14 -0
- package/src/utils/ens/index.ts +7 -0
- package/src/utils/ens/labelhash.test.ts +55 -0
- package/src/utils/ens/labelhash.ts +16 -0
- package/src/utils/ens/namehash.test.ts +65 -0
- package/src/utils/ens/namehash.ts +28 -0
- package/src/utils/ens/normalize.bench.ts +14 -0
- package/src/utils/ens/normalize.test.ts +35 -0
- package/src/utils/ens/normalize.ts +14 -0
- package/src/utils/ens/packetToBytes.test.ts +11 -0
- package/src/utils/ens/packetToBytes.ts +29 -0
- package/src/utils/formatters/block.bench.ts +51 -0
- package/src/utils/formatters/block.test.ts +115 -0
- package/src/utils/formatters/block.ts +37 -0
- package/src/utils/formatters/extract.test.ts +14 -0
- package/src/utils/formatters/extract.ts +18 -0
- package/src/utils/formatters/feeHistory.test.ts +66 -0
- package/src/utils/formatters/feeHistory.ts +12 -0
- package/src/utils/formatters/format.test.ts +93 -0
- package/src/utils/formatters/format.ts +90 -0
- package/src/utils/formatters/index.test.ts +27 -0
- package/src/utils/formatters/index.ts +34 -0
- package/src/utils/formatters/log.test.ts +79 -0
- package/src/utils/formatters/log.ts +12 -0
- package/src/utils/formatters/transaction.test.ts +271 -0
- package/src/utils/formatters/transaction.ts +63 -0
- package/src/utils/formatters/transactionReceipt.bench.ts +73 -0
- package/src/utils/formatters/transactionReceipt.test.ts +151 -0
- package/src/utils/formatters/transactionReceipt.ts +63 -0
- package/src/utils/formatters/transactionRequest.bench.ts +29 -0
- package/src/utils/formatters/transactionRequest.test.ts +237 -0
- package/src/utils/formatters/transactionRequest.ts +56 -0
- package/src/utils/hash/getEventSignature.test.ts +61 -0
- package/src/utils/hash/getEventSignature.ts +4 -0
- package/src/utils/hash/getFunctionSignature.test.ts +22 -0
- package/src/utils/hash/getFunctionSignature.ts +5 -0
- package/src/utils/hash/hashFunction.test.ts +65 -0
- package/src/utils/hash/hashFunction.ts +12 -0
- package/src/utils/hash/index.test.ts +13 -0
- package/src/utils/hash/index.ts +5 -0
- package/src/utils/hash/keccak256.test.ts +59 -0
- package/src/utils/hash/keccak256.ts +21 -0
- package/src/utils/index.test.ts +111 -0
- package/src/utils/index.ts +142 -0
- package/src/utils/observe.test.ts +176 -0
- package/src/utils/observe.ts +66 -0
- package/src/utils/poll.test.ts +127 -0
- package/src/utils/poll.ts +42 -0
- package/src/utils/promise/index.test.ts +14 -0
- package/src/utils/promise/index.ts +3 -0
- package/src/utils/promise/withCache.test.ts +97 -0
- package/src/utils/promise/withCache.ts +73 -0
- package/src/utils/promise/withRetry.test.ts +231 -0
- package/src/utils/promise/withRetry.ts +61 -0
- package/src/utils/promise/withTimeout.test.ts +37 -0
- package/src/utils/promise/withTimeout.ts +39 -0
- package/src/utils/rpc.test.ts +990 -0
- package/src/utils/rpc.ts +294 -0
- package/src/utils/stringify.test.ts +13 -0
- package/src/utils/stringify.ts +5 -0
- package/src/utils/uid.ts +14 -0
- package/src/utils/unit/constants.test.ts +22 -0
- package/src/utils/unit/constants.ts +12 -0
- package/src/utils/unit/formatEther.test.ts +75 -0
- package/src/utils/unit/formatEther.ts +6 -0
- package/src/utils/unit/formatGwei.test.ts +32 -0
- package/src/utils/unit/formatGwei.ts +6 -0
- package/src/utils/unit/formatUnit.bench.ts +21 -0
- package/src/utils/unit/formatUnit.test.ts +40 -0
- package/src/utils/unit/formatUnit.ts +16 -0
- package/src/utils/unit/index.test.ts +28 -0
- package/src/utils/unit/index.ts +7 -0
- package/src/utils/unit/parseEther.test.ts +126 -0
- package/src/utils/unit/parseEther.ts +6 -0
- package/src/utils/unit/parseGwei.test.ts +50 -0
- package/src/utils/unit/parseGwei.ts +6 -0
- package/src/utils/unit/parseUnit.bench.ts +21 -0
- package/src/utils/unit/parseUnit.test.ts +54 -0
- package/src/utils/unit/parseUnit.ts +27 -0
- package/src/utils/wait.ts +3 -0
- package/src/wallet.test.ts +19 -0
- package/src/wallet.ts +23 -0
- package/src/window.ts +1 -0
- package/wallet/package.json +4 -0
- package/actions/package.json +0 -4
- package/clients/package.json +0 -4
- package/dist/actions/index.d.ts +0 -8
- package/dist/actions/index.js +0 -125
- package/dist/actions/index.mjs +0 -125
- package/dist/chunk-CWCWWGBC.mjs +0 -258
- package/dist/chunk-SGTIBKHG.js +0 -258
- package/dist/clients/index.d.ts +0 -7
- package/dist/clients/index.js +0 -23
- package/dist/clients/index.mjs +0 -23
- package/dist/createWalletClient-d612fe08.d.ts +0 -130
- package/dist/parseGwei-7c87ff41.d.ts +0 -278
- package/dist/rpc-26932bae.d.ts +0 -61
- package/dist/transactionRequest-08d30731.d.ts +0 -132
- package/dist/watchAsset-bc6373f4.d.ts +0 -534
- package/dist/webSocket-7f88e9e0.d.ts +0 -83
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/errors/base.ts","../src/errors/abi.ts","../src/errors/address.ts","../src/errors/block.ts","../src/errors/chain.ts","../src/constants/abis.ts","../src/constants/solidity.ts","../src/errors/contract.ts","../src/errors/data.ts","../src/errors/encoding.ts","../src/errors/log.ts","../src/errors/request.ts","../src/errors/rpc.ts","../src/errors/transaction.ts","../src/errors/transport.ts","../src/utils/data/concat.ts","../src/utils/data/isBytes.ts","../src/utils/data/isHex.ts","../src/utils/data/pad.ts","../src/utils/data/trim.ts","../src/utils/data/size.ts","../src/utils/data/slice.ts","../src/utils/encoding/encodeHex.ts","../src/utils/encoding/encodeBytes.ts","../src/utils/encoding/encodeRlp.ts","../src/utils/encoding/decodeHex.ts","../src/utils/encoding/decodeBytes.ts","../src/utils/encoding/decodeRlp.ts","../src/utils/contract/extractFunctionParts.ts","../src/utils/contract/getContractError.ts","../src/utils/hash/keccak256.ts","../src/utils/hash/hashFunction.ts","../src/utils/hash/getEventSignature.ts","../src/utils/hash/getFunctionSignature.ts","../src/utils/address/getAddress.ts","../src/utils/address/getContractAddress.ts","../src/utils/address/isAddress.ts","../src/utils/address/isAddressEqual.ts","../src/utils/abi/encodeAbi.ts","../src/utils/abi/decodeAbi.ts","../src/utils/abi/formatAbiItem.ts","../src/utils/abi/decodeErrorResult.ts","../src/utils/abi/decodeEventLog.ts","../src/utils/abi/decodeFunctionData.ts","../src/utils/abi/getAbiItem.ts","../src/utils/abi/decodeFunctionResult.ts","../src/utils/abi/encodeDeployData.ts","../src/utils/abi/encodeErrorResult.ts","../src/utils/abi/encodeEventTopics.ts","../src/utils/abi/encodeFunctionData.ts","../src/utils/abi/encodeFunctionResult.ts","../src/utils/abi/formatAbiItemWithArgs.ts","../src/utils/promise/withCache.ts","../src/utils/wait.ts","../src/utils/promise/withRetry.ts","../src/utils/promise/withTimeout.ts","../src/utils/buildRequest.ts","../src/utils/chain.ts","../src/utils/formatters/format.ts","../src/utils/formatters/transaction.ts","../src/utils/formatters/block.ts","../src/utils/formatters/extract.ts","../src/utils/formatters/feeHistory.ts","../src/utils/formatters/log.ts","../src/utils/formatters/transactionReceipt.ts","../src/utils/formatters/transactionRequest.ts","../src/utils/rpc.ts","../src/utils/stringify.ts","../src/utils/unit/constants.ts","../src/utils/unit/formatUnit.ts","../src/utils/unit/formatEther.ts","../src/utils/unit/formatGwei.ts","../src/utils/unit/parseUnit.ts","../src/utils/unit/parseEther.ts","../src/utils/unit/parseGwei.ts"],"names":["docsPath","size","hash","parse","format","length","lengthOfLength","encodeBytes","decodeBytes","consumed","value","cacheKey","response","data","webSocket","id"],"mappings":"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","sourcesContent":["{\n \"name\": \"viem\",\n \"description\": \"TypeScript Interface for Ethereum\",\n \"version\": \"0.0.1-alpha.25\",\n \"scripts\": {\n \"anvil\": \"source .env && anvil --fork-url $VITE_ANVIL_FORK_URL --fork-block-number $VITE_ANVIL_BLOCK_NUMBER --block-time $VITE_ANVIL_BLOCK_TIME\",\n \"bench\": \"vitest bench --no-threads\",\n \"bench:ci\": \"CI=true vitest bench --no-threads\",\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:release\": \"pnpm build && changeset publish\",\n \"changeset:version\": \"changeset version && pnpm install --lockfile-only\",\n \"contracts:build\": \"wagmi generate\",\n \"dev\": \"DEV=true tsup\",\n \"dev:docs\": \"pnpm -r --filter site dev\",\n \"format\": \"rome format src/ test/ --write\",\n \"lint\": \"rome check .\",\n \"lint:fix\": \"pnpm lint --apply-suggested\",\n \"playground\": \"pnpm --filter playground-dev dev\",\n \"postinstall\": \"pnpm dev && pnpm contracts:build\",\n \"preinstall\": \"npx only-allow pnpm\",\n \"prepublishOnly\": \"pnpm ts-node scripts/generate-package-json.ts\",\n \"prepare\": \"npx simple-git-hooks\",\n \"test\": \"vitest dev --no-threads\",\n \"test:ci\": \"CI=true vitest --coverage --no-threads\",\n \"test:ui\": \"vitest dev --ui --no-threads\",\n \"ts-node\": \"node --loader esbuild-register/loader -r esbuild-register\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"files\": [\n \"/chains\",\n \"/contract\",\n \"/dist\",\n \"/ens\",\n \"/src\",\n \"/types\",\n \"/utils\",\n \"/wallet\",\n \"/window\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.js\"\n },\n \"./chains\": {\n \"types\": \"./dist/chains.d.ts\",\n \"module\": \"./dist/chains.mjs\",\n \"default\": \"./dist/chains.js\"\n },\n \"./contract\": {\n \"types\": \"./dist/contract.d.ts\",\n \"module\": \"./dist/contract.mjs\",\n \"default\": \"./dist/contract.js\"\n },\n \"./ens\": {\n \"types\": \"./dist/ens.d.ts\",\n \"module\": \"./dist/ens.mjs\",\n \"default\": \"./dist/ens.js\"\n },\n \"./public\": {\n \"types\": \"./dist/public.d.ts\",\n \"module\": \"./dist/public.mjs\",\n \"default\": \"./dist/public.js\"\n },\n \"./test\": {\n \"types\": \"./dist/test.d.ts\",\n \"module\": \"./dist/test.mjs\",\n \"default\": \"./dist/test.js\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils/index.d.ts\",\n \"module\": \"./dist/utils/index.mjs\",\n \"default\": \"./dist/utils/index.js\"\n },\n \"./wallet\": {\n \"types\": \"./dist/wallet.d.ts\",\n \"module\": \"./dist/wallet.mjs\",\n \"default\": \"./dist/wallet.js\"\n },\n \"./window\": {\n \"types\": \"./dist/window.d.ts\",\n \"module\": \"./dist/window.mjs\",\n \"default\": \"./dist/window.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"sideEffects\": false,\n \"dependencies\": {\n \"@noble/hashes\": \"^1.1.2\",\n \"@wagmi/chains\": \"~0.2.8\",\n \"abitype\": \"~0.3.0\",\n \"idna-uts46-hx\": \"^4.1.2\",\n \"isomorphic-unfetch\": \"^4.0.2\",\n \"isomorphic-ws\": \"^5.0.0\",\n \"ws\": \"^8.12.0\"\n },\n \"devDependencies\": {\n \"@actions/core\": \"^1.10.0\",\n \"@actions/github\": \"^5.1.1\",\n \"@adraffy/ens-normalize\": \"^1.8.9\",\n \"@changesets/changelog-github\": \"^0.4.5\",\n \"@changesets/cli\": \"^2.23.2\",\n \"@types/dedent\": \"^0.7.0\",\n \"@types/fs-extra\": \"^9.0.13\",\n \"@types/node\": \"^17.0.45\",\n \"@types/ws\": \"^8.5.4\",\n \"@vitest/coverage-c8\": \"^0.24.3\",\n \"@vitest/ui\": \"^0.19.1\",\n \"@wagmi/cli\": \"^0.1.6\",\n \"bundlewatch\": \"^0.3.3\",\n \"dedent\": \"^0.7.0\",\n \"esbuild\": \"^0.16.17\",\n \"esbuild-register\": \"^3.4.2\",\n \"ethers\": \"^5.7.2\",\n \"ethers@6\": \"npm:ethers@^6.0.2\",\n \"execa\": \"^6.1.0\",\n \"fs-extra\": \"^10.1.0\",\n \"rome\": \"^11.0.0\",\n \"simple-git-hooks\": \"^2.8.1\",\n \"tsup\": \"^6.6.0\",\n \"typescript\": \"^4.9.4\",\n \"vite\": \"^3.2.5\",\n \"vitest\": \"^0.25.8\",\n \"web3\": \"^1.8.1\"\n },\n \"license\": \"MIT\",\n \"repository\": \"wagmi-dev/viem\",\n \"authors\": [\n \"awkweb.eth\",\n \"jxom.eth\"\n ],\n \"keywords\": [\n \"eth\",\n \"ethereum\",\n \"dapps\",\n \"wallet\",\n \"web3\"\n ],\n \"simple-git-hooks\": {\n \"pre-commit\": \"pnpm format & pnpm lint:fix\"\n },\n \"pnpm\": {\n \"patchedDependencies\": {\n \"vitepress@1.0.0-alpha.34\": \"patches/vitepress@1.0.0-alpha.34.patch\"\n }\n }\n}\n","// @ts-ignore\nimport pkg from '../../package.json'\n\n/* c8 ignore next */\nconst version = process.env.TEST ? '1.0.2' : pkg.version\n\ntype BaseErrorArgs = {\n docsPath?: string\n metaMessages?: string[]\n} & (\n | {\n cause?: never\n details?: string\n }\n | {\n cause: BaseError | Error\n details?: never\n }\n)\n\nexport class BaseError extends Error {\n details: string\n docsPath?: string\n metaMessages?: string[]\n shortMessage: string\n\n name = 'ViemError'\n\n constructor(shortMessage: string, args: BaseErrorArgs = {}) {\n const details =\n args.cause instanceof BaseError\n ? args.cause.details\n : args.cause?.message\n ? args.cause.message\n : args.details!\n const docsPath =\n args.cause instanceof BaseError\n ? args.cause.docsPath || args.docsPath\n : args.docsPath\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsPath ? [`Docs: https://viem.sh${docsPath}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: viem@${version}`,\n ].join('\\n')\n\n super(message)\n\n if (args.cause) this.cause = args.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.shortMessage = shortMessage\n }\n}\n","import { Hex } from '../types'\nimport { BaseError } from './base'\n\nexport class AbiConstructorNotFoundError extends BaseError {\n name = 'AbiConstructorNotFoundError'\n constructor({ docsPath }: { docsPath: string }) {\n super(\n [\n 'A constructor was not found on the ABI.',\n 'Make sure you are using the correct ABI and that the constructor exists on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiConstructorParamsNotFoundError extends BaseError {\n name = 'AbiConstructorParamsNotFoundError'\n constructor({ docsPath }: { docsPath: string }) {\n super(\n [\n 'Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.',\n 'Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiDecodingDataSizeInvalidError extends BaseError {\n name = 'AbiDecodingDataSizeInvalidError'\n constructor(size: number) {\n super(\n [\n `Data size of ${size} bytes is invalid.`,\n 'Size must be in increments of 32 bytes (size % 32 === 0).',\n ].join('\\n'),\n )\n }\n}\n\nexport class AbiDecodingZeroDataError extends BaseError {\n name = 'AbiDecodingZeroDataError'\n constructor() {\n super('Cannot decode zero data (\"0x\") with ABI parameters.')\n }\n}\n\nexport class AbiEncodingArrayLengthMismatchError extends BaseError {\n name = 'AbiEncodingArrayLengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n type,\n }: { expectedLength: number; givenLength: number; type: string }) {\n super(\n [\n `ABI encoding array length mismatch for type ${type}.`,\n `Expected length: ${expectedLength}`,\n `Given length: ${givenLength}`,\n ].join('\\n'),\n )\n }\n}\n\nexport class AbiEncodingLengthMismatchError extends BaseError {\n name = 'AbiEncodingLengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n }: { expectedLength: number; givenLength: number }) {\n super(\n [\n 'ABI encoding params/values length mismatch.',\n `Expected length (params): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'),\n )\n }\n}\n\nexport class AbiErrorInputsNotFoundError extends BaseError {\n name = 'AbiErrorInputsNotFoundError'\n constructor(errorName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Arguments (\\`args\\`) were provided to \"${errorName}\", but \"${errorName}\" on the ABI does not contain any parameters (\\`inputs\\`).`,\n 'Cannot encode error result without knowing what the parameter types are.',\n 'Make sure you are using the correct ABI and that the inputs exist on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiErrorNotFoundError extends BaseError {\n name = 'AbiErrorNotFoundError'\n constructor(errorName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Error \"${errorName}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the error exists on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiErrorSignatureNotFoundError extends BaseError {\n name = 'AbiErrorSignatureNotFoundError'\n constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n super(\n [\n `Encoded error signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the error exists on it.',\n `You can look up the signature here: https://openchain.xyz/signatures?query=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiEventSignatureNotFoundError extends BaseError {\n name = 'AbiEventSignatureNotFoundError'\n constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n super(\n [\n `Encoded event signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the event exists on it.',\n `You can look up the signature here: https://openchain.xyz/signatures?query=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiEventNotFoundError extends BaseError {\n name = 'AbiEventNotFoundError'\n constructor(eventName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Event \"${eventName}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the event exists on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiFunctionNotFoundError extends BaseError {\n name = 'AbiFunctionNotFoundError'\n constructor(functionName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Function \"${functionName}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the function exists on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiFunctionOutputsNotFoundError extends BaseError {\n name = 'AbiFunctionOutputsNotFoundError'\n constructor(functionName: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Function \"${functionName}\" does not contain any \\`outputs\\` on ABI.`,\n 'Cannot decode function result without knowing what the parameter types are.',\n 'Make sure you are using the correct ABI and that the function exists on it.',\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class AbiFunctionSignatureNotFoundError extends BaseError {\n name = 'AbiFunctionSignatureNotFoundError'\n constructor(signature: Hex, { docsPath }: { docsPath: string }) {\n super(\n [\n `Encoded function signature \"${signature}\" not found on ABI.`,\n 'Make sure you are using the correct ABI and that the function exists on it.',\n `You can look up the signature here: https://openchain.xyz/signatures?query=${signature}.`,\n ].join('\\n'),\n {\n docsPath,\n },\n )\n }\n}\n\nexport class InvalidAbiEncodingTypeError extends BaseError {\n name = 'InvalidAbiEncodingType'\n constructor(type: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Type \"${type}\" is not a valid encoding type.`,\n 'Please provide a valid ABI type.',\n ].join('\\n'),\n { docsPath },\n )\n }\n}\n\nexport class InvalidAbiDecodingTypeError extends BaseError {\n name = 'InvalidAbiDecodingType'\n constructor(type: string, { docsPath }: { docsPath: string }) {\n super(\n [\n `Type \"${type}\" is not a valid decoding type.`,\n 'Please provide a valid ABI type.',\n ].join('\\n'),\n { docsPath },\n )\n }\n}\n\nexport class InvalidArrayError extends BaseError {\n name = 'InvalidArrayError'\n constructor(value: unknown) {\n super([`Value \"${value}\" is not a valid array.`].join('\\n'))\n }\n}\n\nexport class InvalidDefinitionTypeError extends BaseError {\n name = 'InvalidDefinitionTypeError'\n constructor(type: string) {\n super(\n [\n `\"${type}\" is not a valid definition type.`,\n 'Valid types: \"function\", \"event\", \"error\"',\n ].join('\\n'),\n )\n }\n}\n","import { Address } from '../types'\nimport { BaseError } from './base'\n\nexport class InvalidAddressError extends BaseError {\n name = 'InvalidAddressError'\n constructor({ address }: { address: Address }) {\n super(`Address \"${address}\" is invalid.`)\n }\n}\n","import { Hash } from '../types'\nimport { BaseError } from './base'\n\nexport class BlockNotFoundError extends BaseError {\n name = 'BlockNotFoundError'\n constructor({\n blockHash,\n blockNumber,\n }: {\n blockHash?: Hash\n blockNumber?: bigint\n }) {\n let identifier = 'Block'\n if (blockHash) identifier = `Block at hash \"${blockHash}\"`\n if (blockNumber) identifier = `Block at number \"${blockNumber}\"`\n super(`${identifier} could not be found.`)\n }\n}\n","import { Chain } from '../types'\nimport { BaseError } from './base'\n\nexport class ChainDoesNotSupportContract extends BaseError {\n name = 'ChainDoesNotSupportContract'\n constructor({\n blockNumber,\n chain,\n contract,\n }: {\n blockNumber?: bigint\n chain: Chain\n contract: { name: string; blockCreated?: number }\n }) {\n super(\n `Chain \"${chain.name}\" does not support contract \"${contract.name}\".`,\n {\n metaMessages: [\n 'This could be due to any of the following:',\n ...(blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n ? [\n `- The contract \"${contract.name}\" was not deployed until block ${contract.blockCreated} (current block ${blockNumber}).`,\n ]\n : [\n `- The chain does not have the contract \"${contract.name}\" configured.`,\n ]),\n ],\n },\n )\n }\n}\n","/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n","import { AbiError } from 'abitype'\n\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n 1: 'An `assert` condition failed.',\n 17: 'Arithmic operation resulted in underflow or overflow.',\n 18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n 33: 'Attempted to convert to an invalid type.',\n 34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n 49: 'Performed `.pop()` on an empty array',\n 50: 'Array index is out of bounds.',\n 65: 'Allocated too much memory or created an array which is too large.',\n 81: 'Attempted to call a zero-initialized variable of internal function type.',\n} as const\n\nexport const solidityError: AbiError = {\n inputs: [\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'Error',\n type: 'error',\n}\nexport const solidityPanic: AbiError = {\n inputs: [\n {\n name: 'reason',\n type: 'uint256',\n },\n ],\n name: 'Panic',\n type: 'error',\n}\n","import { Abi } from 'abitype'\nimport { panicReasons } from '../constants'\nimport { Address, Chain, Hex } from '../types'\nimport {\n DecodeErrorResultResponse,\n decodeErrorResult,\n getAbiItem,\n formatAbiItem,\n formatAbiItemWithArgs,\n} from '../utils'\nimport { BaseError } from './base'\n\nexport class ContractFunctionExecutionError extends BaseError {\n abi: Abi\n args?: unknown[]\n cause: BaseError\n contractAddress?: Address\n formattedArgs?: string\n functionName: string\n sender?: Address\n\n name = 'ContractFunctionExecutionError'\n\n constructor(\n cause: BaseError,\n {\n abi,\n args,\n contractAddress,\n docsPath,\n functionName,\n sender,\n }: {\n abi: Abi\n args?: any\n contractAddress?: Address\n docsPath?: string\n functionName: string\n sender?: Address\n },\n ) {\n const abiItem = getAbiItem({ abi, args, name: functionName })\n const formattedArgs = abiItem\n ? formatAbiItemWithArgs({\n abiItem,\n args,\n includeFunctionName: false,\n includeName: false,\n })\n : undefined\n const functionWithParams = abiItem\n ? formatAbiItem(abiItem, { includeName: true })\n : undefined\n\n super(\n cause.shortMessage ||\n `An unknown error occurred while executing the contract function \"${functionName}\".`,\n {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n contractAddress &&\n `Contract: ${\n /* c8 ignore start */\n process.env.TEST\n ? '0x0000000000000000000000000000000000000000'\n : contractAddress\n /* c8 ignore end */\n }`,\n functionWithParams && `Function: ${functionWithParams}`,\n formattedArgs &&\n formattedArgs !== '()' &&\n `Arguments: ${[...Array(functionName?.length ?? 0).keys()]\n .map(() => ' ')\n .join('')}${formattedArgs}`,\n sender && `Sender: ${sender}`,\n ].filter(Boolean) as string[],\n },\n )\n this.abi = abi\n this.args = args\n this.cause = cause\n this.contractAddress = contractAddress\n this.functionName = functionName\n this.sender = sender\n }\n}\n\nexport class ContractFunctionRevertedError extends BaseError {\n name = 'ContractFunctionRevertedError'\n\n data?: DecodeErrorResultResponse\n reason?: string\n\n constructor({\n abi,\n data,\n functionName,\n message,\n }: { abi: Abi; data?: Hex; functionName: string; message?: string }) {\n let decodedData: DecodeErrorResultResponse | undefined = undefined\n let metaMessages\n let reason\n if (data && data !== '0x') {\n decodedData = decodeErrorResult({ abi, data })\n const { abiItem, errorName, args: errorArgs } = decodedData\n if (errorName === 'Error') {\n reason = (errorArgs as [string])[0]\n } else if (errorName === 'Panic') {\n const [firstArg] = errorArgs as [number]\n reason = panicReasons[firstArg as keyof typeof panicReasons]\n } else if (errorArgs) {\n const errorWithParams = abiItem\n ? formatAbiItem(abiItem, { includeName: true })\n : undefined\n const formattedArgs = abiItem\n ? formatAbiItemWithArgs({\n abiItem,\n args: errorArgs,\n includeFunctionName: false,\n includeName: false,\n })\n : undefined\n\n metaMessages = [\n errorWithParams ? `Error: ${errorWithParams}` : '',\n formattedArgs && formattedArgs !== '()'\n ? `Arguments: ${[...Array(errorName?.length ?? 0).keys()]\n .map(() => ' ')\n .join('')}${formattedArgs}`\n : '',\n ]\n }\n } else if (message) reason = message\n\n super(\n reason\n ? [\n `The contract function \"${functionName}\" reverted with the following reason:`,\n reason,\n ].join('\\n')\n : `The contract function \"${functionName}\" reverted.`,\n {\n metaMessages,\n },\n )\n\n this.reason = reason\n this.data = decodedData\n }\n}\n\nexport class ContractFunctionZeroDataError extends BaseError {\n name = 'ContractFunctionZeroDataError'\n constructor({ functionName }: { functionName: string }) {\n super(`The contract function \"${functionName}\" returned no data (\"0x\").`, {\n metaMessages: [\n 'This could be due to any of the following:',\n `- The contract does not have the function \"${functionName}\",`,\n '- The parameters passed to the contract function may be invalid, or',\n '- The address is not a contract.',\n ],\n })\n }\n}\n\nexport class RawContractError extends BaseError {\n code = 3\n name = 'RawContractError'\n\n data?: Hex\n\n constructor({ data, message }: { data?: Hex; message?: string }) {\n super(message || '')\n this.data = data\n }\n}\n","import { BaseError } from './base'\n\nexport class SizeExceedsPaddingSizeError extends BaseError {\n name = 'SizeExceedsPaddingSizeError'\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'hex' | 'bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize}).`,\n )\n }\n}\n","import { ByteArray, Hex } from '../types'\nimport { BaseError } from './base'\n\nexport class DataLengthTooLongError extends BaseError {\n name = 'DataLengthTooLongError'\n constructor({ consumed, length }: { consumed: number; length: number }) {\n super(\n `Consumed bytes (${consumed}) is shorter than data length (${\n length - 1\n }).`,\n )\n }\n}\n\nexport class DataLengthTooShortError extends BaseError {\n name = 'DataLengthTooShortError'\n constructor({ length, dataLength }: { length: number; dataLength: number }) {\n super(\n `Data length (${dataLength - 1}) is shorter than prefix length (${\n length - 1\n }).`,\n )\n }\n}\n\nexport class InvalidBytesBooleanError extends BaseError {\n name = 'InvalidBytesBooleanError'\n constructor(bytes: ByteArray) {\n super(\n `Bytes value \"${bytes}\" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`,\n )\n }\n}\n\nexport class InvalidHexBooleanError extends BaseError {\n name = 'InvalidHexBooleanError'\n constructor(hex: Hex) {\n super(\n `Hex value \"${hex}\" is not a valid boolean. The hex value must be \"0x0\" (false) or \"0x1\" (true).`,\n )\n }\n}\n\nexport class InvalidHexValueError extends BaseError {\n name = 'InvalidHexValueError'\n constructor(value: Hex) {\n super(\n `Hex value \"${value}\" is an odd length (${value.length}). It must be an even length.`,\n )\n }\n}\n\nexport class OffsetOutOfBoundsError extends BaseError {\n name = 'OffsetOutOfBoundsError'\n constructor({ nextOffset, offset }: { nextOffset: number; offset: number }) {\n super(\n `Next offset (${nextOffset}) is greater than previous offset + consumed bytes (${offset})`,\n )\n }\n}\n","import { BaseError } from './base'\n\nexport class FilterTypeNotSupportedError extends BaseError {\n name = 'FilterTypeNotSupportedError'\n constructor(type: string) {\n super(`Filter type \"${type}\" is not supported.`)\n }\n}\n","import { BaseError } from './base'\nimport { RpcError } from './rpc'\n\nexport class RequestError extends BaseError {\n constructor(\n err: Error,\n { docsPath, shortMessage }: { docsPath?: string; shortMessage: string },\n ) {\n super(shortMessage, {\n cause: err,\n docsPath,\n })\n this.name = err.name\n }\n}\n\nexport class RpcRequestError extends RequestError {\n code: number\n\n constructor(\n err: RpcError,\n { docsPath, shortMessage }: { docsPath?: string; shortMessage: string },\n ) {\n super(err, { docsPath, shortMessage })\n this.code = err.code\n this.name = err.name\n }\n}\n\nexport class ParseRpcError extends RpcRequestError {\n name = 'ParseRpcError'\n code = -32700\n\n constructor(err: RpcError) {\n super(err, {\n shortMessage:\n 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n })\n }\n}\n\nexport class InvalidRequestRpcError extends RpcRequestError {\n name = 'InvalidRequestRpcError'\n code = -32600\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'JSON is not a valid request object.' })\n }\n}\n\nexport class MethodNotFoundRpcError extends RpcRequestError {\n name = 'MethodNotFoundRpcError'\n code = -32601\n\n constructor(err: RpcError) {\n super(err, {\n shortMessage: 'The method does not exist / is not available.',\n })\n }\n}\n\nexport class InvalidParamsRpcError extends RpcRequestError {\n name = 'InvalidParamsRpcError'\n code = -32602\n\n constructor(err: RpcError) {\n super(err, {\n shortMessage: [\n 'Invalid parameters were provided to the RPC method.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n })\n }\n}\n\nexport class InternalRpcError extends RpcRequestError {\n name = 'InternalRpcError'\n code = -32603\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'An internal error was received.' })\n }\n}\n\nexport class InvalidInputRpcError extends RpcRequestError {\n name = 'InvalidInputRpcError'\n code = -32000\n\n constructor(err: RpcError) {\n super(err, {\n shortMessage: [\n 'Missing or invalid parameters.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n })\n }\n}\n\nexport class ResourceNotFoundRpcError extends RpcRequestError {\n name = 'ResourceNotFoundRpcError'\n code = -32001\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'Requested resource not found.' })\n }\n}\n\nexport class ResourceUnavailableRpcError extends RpcRequestError {\n name = 'ResourceUnavailableRpcError'\n code = -32002\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'Requested resource not available.' })\n }\n}\n\nexport class TransactionRejectedRpcError extends RpcRequestError {\n name = 'TransactionRejectedRpcError'\n code = -32003\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'Transaction creation failed.' })\n }\n}\n\nexport class MethodNotSupportedRpcError extends RpcRequestError {\n name = 'MethodNotSupportedRpcError'\n code = -32004\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'Method is not implemented.' })\n }\n}\n\nexport class LimitExceededRpcError extends RpcRequestError {\n name = 'LimitExceededRpcError'\n code = -32005\n\n constructor(err: RpcError) {\n super(err, { shortMessage: 'Request exceeds defined limit.' })\n }\n}\n\nexport class JsonRpcVersionUnsupportedError extends RpcRequestError {\n name = 'JsonRpcVersionUnsupportedError'\n code = -32006\n\n constructor(err: RpcError) {\n super(err, {\n shortMessage: 'Version of JSON-RPC protocol is not supported.',\n })\n }\n}\n\nexport class UnknownRpcError extends RequestError {\n name = 'UnknownRpcError'\n\n constructor(err: Error) {\n super(err, {\n shortMessage: 'An unknown RPC error occurred.',\n })\n }\n}\n","import { stringify } from '../utils'\nimport { BaseError } from './base'\n\nexport class HttpRequestError extends BaseError {\n name = 'HttpRequestError'\n status\n\n constructor({\n body,\n details,\n status,\n url,\n }: {\n body: { [key: string]: unknown }\n details: string\n status: number\n url: string\n }) {\n super(\n [\n 'HTTP request failed.',\n '',\n `Status: ${status}`,\n `URL: ${url}`,\n `Request body: ${stringify(body)}`,\n ].join('\\n'),\n {\n details,\n },\n )\n this.status = status\n }\n}\n\nexport class WebSocketRequestError extends BaseError {\n name = 'WebSocketRequestError'\n\n constructor({\n body,\n details,\n url,\n }: {\n body: { [key: string]: unknown }\n details: string\n url: string\n }) {\n super(\n [\n 'WebSocket request failed.',\n '',\n `URL: ${url}`,\n `Request body: ${stringify(body)}`,\n ].join('\\n'),\n {\n details,\n },\n )\n }\n}\n\nexport class RpcError extends BaseError {\n code: number\n\n name = 'RpcError'\n\n constructor({\n body,\n error,\n url,\n }: {\n body: { [key: string]: unknown }\n error: { code: number; message: string }\n url: string\n }) {\n super(\n [\n 'RPC Request failed.',\n '',\n `URL: ${url}`,\n `Request body: ${stringify(body)}`,\n ].join('\\n'),\n {\n cause: error as any,\n details: error.message,\n },\n )\n this.code = error.code\n }\n}\n\nexport class TimeoutError extends BaseError {\n name = 'TimeoutError'\n\n constructor({\n body,\n url,\n }: {\n body: { [key: string]: unknown }\n url: string\n }) {\n super(\n [\n 'The request took too long to respond.',\n '',\n `URL: ${url}`,\n `Request body: ${stringify(body)}`,\n ].join('\\n'),\n {\n details: 'The request timed out.',\n },\n )\n }\n}\n","import { BlockTag, Hash } from '../types'\nimport { BaseError } from './base'\n\nexport class InvalidGasArgumentsError extends BaseError {\n name = 'InvalidGasArgumentsError'\n constructor() {\n super('`maxFeePerGas` cannot be less than `maxPriorityFeePerGas`')\n }\n}\n\nexport class TransactionNotFoundError extends BaseError {\n name = 'TransactionNotFoundError'\n constructor({\n blockHash,\n blockNumber,\n blockTag,\n hash,\n index,\n }: {\n blockHash?: Hash\n blockNumber?: bigint\n blockTag?: BlockTag\n hash?: Hash\n index?: number\n }) {\n let identifier = 'Transaction'\n if (blockTag && index !== undefined)\n identifier = `Transaction at block time \"${blockTag}\" at index \"${index}\"`\n if (blockHash && index !== undefined)\n identifier = `Transaction at block hash \"${blockHash}\" at index \"${index}\"`\n if (blockNumber && index !== undefined)\n identifier = `Transaction at block number \"${blockNumber}\" at index \"${index}\"`\n if (hash) identifier = `Transaction with hash \"${hash}\"`\n super(`${identifier} could not be found.`)\n }\n}\n\nexport class TransactionReceiptNotFoundError extends BaseError {\n name = 'TransactionReceiptNotFoundError'\n constructor({ hash }: { hash: Hash }) {\n super(\n `Transaction receipt with hash \"${hash}\" could not be found. The Transaction may not be processed on a block yet.`,\n )\n }\n}\n\nexport class WaitForTransactionReceiptTimeoutError extends BaseError {\n name = 'WaitForTransactionReceiptTimeoutError'\n constructor({ hash }: { hash: Hash }) {\n super(\n `Timed out while waiting for transaction with hash \"${hash}\" to be confirmed.`,\n )\n }\n}\n","import { BaseError } from './base'\n\nexport class UrlRequiredError extends BaseError {\n constructor() {\n super(\n 'No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.',\n {\n docsPath: '/docs/clients/intro',\n },\n )\n }\n}\n","import type { ByteArray, Hex } from '../../types'\n\ntype ConcatResult<TValue extends Hex | ByteArray> = TValue extends Hex\n ? Hex\n : ByteArray\n\nexport function concat<TValue extends Hex | ByteArray>(\n values: TValue[],\n): ConcatResult<TValue> {\n if (typeof values[0] === 'string')\n return concatHex(values as Hex[]) as ConcatResult<TValue>\n return concatBytes(values as ByteArray[]) as ConcatResult<TValue>\n}\n\nexport function concatBytes(values: ByteArray[]): ByteArray {\n let length = 0\n for (const arr of values) {\n length += arr.length\n }\n const result = new Uint8Array(length)\n let offset = 0\n for (const arr of values) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\nexport function concatHex(values: Hex[]): Hex {\n return `0x${(values as Hex[]).reduce(\n (acc, x) => acc + x.replace('0x', ''),\n '',\n )}`\n}\n","export function isBytes(value: any) {\n if (!value) return false\n if (typeof value !== 'object') return false\n return (\n value.BYTES_PER_ELEMENT === 1 && value.constructor.name === 'Uint8Array'\n )\n}\n","export function isHex(value: any) {\n if (!value) return false\n if (typeof value !== 'string') return false\n return /^0x[0-9a-fA-F]*$/.test(value)\n}\n","import { SizeExceedsPaddingSizeError } from '../../errors'\nimport type { ByteArray, Hex } from '../../types'\n\ntype PadOptions = {\n dir?: 'left' | 'right'\n size?: number\n}\ntype PadResult<TValue extends ByteArray | Hex> = TValue extends Hex\n ? Hex\n : ByteArray\n\nexport function pad<TValue extends ByteArray | Hex>(\n hexOrBytes: TValue,\n { dir, size = 32 }: PadOptions = {},\n): PadResult<TValue> {\n if (typeof hexOrBytes === 'string')\n return padHex(hexOrBytes, { dir, size }) as PadResult<TValue>\n return padBytes(hexOrBytes, { dir, size }) as PadResult<TValue>\n}\n\nexport function padHex(hex_: Hex, { dir, size = 32 }: PadOptions = {}) {\n let hex = hex_.replace('0x', '')\n if (hex.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(hex.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](\n size * 2,\n '0',\n )}` as Hex\n}\n\nexport function padBytes(\n bytes: ByteArray,\n { dir, size = 32 }: PadOptions = {},\n) {\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n","import type { ByteArray, Hex } from '../../types'\n\ntype TrimOptions = {\n dir?: 'left' | 'right'\n}\ntype TrimResult<TValue extends ByteArray | Hex> = TValue extends Hex\n ? Hex\n : ByteArray\n\nexport function trim<TValue extends ByteArray | Hex>(\n hexOrBytes: TValue,\n { dir = 'left' }: TrimOptions = {},\n): TrimResult<TValue> {\n let data: any =\n typeof hexOrBytes === 'string' ? hexOrBytes.replace('0x', '') : hexOrBytes\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n if (typeof hexOrBytes === 'string') {\n if (data.length === 1 && dir === 'right') data = `${data}0`\n return `0x${data}` as TrimResult<TValue>\n }\n return data as TrimResult<TValue>\n}\n","import type { ByteArray, Hex } from '../../types'\nimport { isHex } from './isHex'\n\n/**\n * @description Retrieves the size of the value (in bytes).\n *\n * @param value The value (hex or byte array) to retrieve the size of.\n * @returns The size of the value (in bytes).\n */\nexport function size(value: Hex | ByteArray) {\n if (isHex(value)) return Math.ceil((value.length - 2) / 2)\n return value.length\n}\n","import type { ByteArray, Hex } from '../../types'\nimport { isHex } from './isHex'\nimport { size } from './size'\n\ntype SliceResult<TValue extends ByteArray | Hex> = TValue extends Hex\n ? Hex\n : ByteArray\n\n/**\n * @description Returns a section of the hex or byte array given a start/end bytes offset.\n *\n * @param value The hex or byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function slice<TValue extends ByteArray | Hex>(\n value: TValue,\n start?: number,\n end?: number,\n): SliceResult<TValue> {\n if (isHex(value))\n return sliceHex(value as Hex, start, end) as SliceResult<TValue>\n return sliceBytes(value as ByteArray, start, end) as SliceResult<TValue>\n}\n\nfunction assertStartOffset(value: Hex | ByteArray, start?: number) {\n if (typeof start === 'number' && start > 0 && start > size(value) - 1)\n throw new Error(\n `Slice starting at offset \"${start}\" is out-of-bounds (size: ${size(\n value,\n )}).`,\n )\n}\n\n/**\n * @description Returns a section of the byte array given a start/end bytes offset.\n *\n * @param value The byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceBytes(value: ByteArray, start?: number, end?: number) {\n assertStartOffset(value, start)\n return value.slice(start, end)\n}\n\n/**\n * @description Returns a section of the hex value given a start/end bytes offset.\n *\n * @param value The hex value to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nexport function sliceHex(value_: Hex, start?: number, end?: number) {\n assertStartOffset(value_, start)\n const value = value_\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value_.length) * 2)\n return `0x${value}`\n}\n","import { pad } from '../data'\nimport type { ByteArray, Hex } from '../../types'\n\nconst hexes = Array.from({ length: 256 }, (v, i) =>\n i.toString(16).padStart(2, '0'),\n)\n\n/**\n * @description Encodes a boolean into a hex string\n */\nexport function boolToHex(value: boolean): Hex {\n return `0x${Number(value)}`\n}\n\n/**\n * @description Encodes a bytes array into a hex string\n */\nexport function bytesToHex(value: ByteArray): Hex {\n let hex = ''\n for (let i = 0; i < value.length; i++) {\n hex += hexes[value[i]]\n }\n return `0x${hex}`\n}\n\n/**\n * @description Encodes a string, number, bigint, or ByteArray into a hex string\n */\nexport function encodeHex(\n value: string | number | bigint | boolean | ByteArray,\n): Hex {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToHex(value)\n if (typeof value === 'string') {\n return stringToHex(value)\n }\n if (typeof value === 'boolean') return boolToHex(value)\n return bytesToHex(value)\n}\n\nexport type NumberToHexOpts =\n | {\n // Whether or not the number of a signed representation.\n signed?: boolean\n // The size of the output hex (in bytes).\n size: number\n }\n | {\n signed?: never\n size?: never\n }\n\n/**\n * @description Encodes a number or bigint into a hex string\n */\nexport function numberToHex(\n value_: number | bigint,\n opts: NumberToHexOpts = {},\n): Hex {\n const { signed, size } = opts\n\n let value = BigInt(value_)\n\n let maxValue\n if (size) {\n if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n } else if (typeof value_ === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n }\n\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n if ((maxValue && value > maxValue) || value < minValue) {\n const suffix = typeof value_ === 'bigint' ? 'n' : ''\n throw new Error(\n `Number \"${value_}${suffix}\" is not in safe ${\n size ? `${size * 8}-bit ${signed ? 'signed' : 'unsigned'} ` : ''\n }integer range ${\n maxValue\n ? `(${minValue}${suffix} to ${maxValue}${suffix})`\n : `(above ${minValue})`\n }`,\n )\n }\n\n const hex = `0x${(signed && value < 0\n ? (1n << BigInt(size * 8)) + BigInt(value)\n : value\n ).toString(16)}` as Hex\n if (size) return pad(hex, { size }) as Hex\n return hex\n}\n\n/**\n * @description Encodes a UTF-8 string into a hex string\n */\nexport function stringToHex(value: string): Hex {\n let hex = ''\n for (let i = 0; i < value.length; i++) {\n hex += value.charCodeAt(i).toString(16)\n }\n return `0x${hex}`\n}\n","import type { ByteArray, Hex } from '../../types'\nimport type { NumberToHexOpts } from './encodeHex'\nimport { numberToHex } from './encodeHex'\n\nconst encoder = new TextEncoder()\n\n/**\n * @description Encodes a boolean into a byte array.\n */\nexport function boolToBytes(value: boolean) {\n const bytes = new Uint8Array(1)\n bytes[0] = Number(value)\n return bytes\n}\n\n/** @description Encodes a UTF-8 string, hex value, bigint, number or boolean to a byte array. */\nexport function encodeBytes(\n value: string | bigint | number | boolean | Hex,\n): ByteArray {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToBytes(value)\n if (typeof value === 'boolean') return boolToBytes(value)\n if (value.startsWith('0x')) return hexToBytes(value as Hex)\n return stringToBytes(value)\n}\n\n/**\n * @description Encodes a hex string into a byte array.\n */\nexport function hexToBytes(hex_: Hex): ByteArray {\n let hex = hex_.slice(2) as string\n\n if (hex.length % 2) hex = `0${hex}`\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let index = 0; index < bytes.length; index++) {\n const start = index * 2\n const hexByte = hex.slice(start, start + 2)\n const byte = Number.parseInt(hexByte, 16)\n if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence')\n bytes[index] = byte\n }\n return bytes\n}\n\n/**\n * @description Encodes a number into a byte array.\n */\nexport function numberToBytes(value: bigint | number, opts?: NumberToHexOpts) {\n const hex = numberToHex(value, opts)\n return hexToBytes(hex)\n}\n\n/**\n * @description Encodes a UTF-8 string into a byte array.\n */\nexport function stringToBytes(value: string): ByteArray {\n return encoder.encode(value)\n}\n","import type { ByteArray, Hex } from '../../types'\nimport { concat } from '../data'\nimport { encodeBytes } from './encodeBytes'\nimport { bytesToHex } from './encodeHex'\n\nexport type RecursiveArray<T> = T | Array<RecursiveArray<T>>\n\ntype To = 'hex' | 'bytes'\n\nexport type EncodeRlpResponse<TTo extends To> = TTo extends 'bytes'\n ? ByteArray\n : TTo extends 'hex'\n ? Hex\n : never\n\nexport function encodeRlp<TTo extends To = 'hex'>(\n hexOrBytes: RecursiveArray<Hex> | RecursiveArray<ByteArray>,\n to_?: TTo,\n) {\n const to = to_ || ('hex' as const)\n return format(bytesToRlp(parse(hexOrBytes)), to) as EncodeRlpResponse<TTo>\n}\n\nfunction parse(\n hexOrBytes: RecursiveArray<Hex> | RecursiveArray<ByteArray>,\n): RecursiveArray<ByteArray> {\n if (Array.isArray(hexOrBytes)) return hexOrBytes.map(parse)\n return typeof hexOrBytes === 'string' ? encodeBytes(hexOrBytes) : hexOrBytes\n}\n\nfunction format(bytes: ByteArray, type: 'hex' | 'bytes' = 'bytes') {\n return type === 'hex' ? bytesToHex(bytes) : bytes\n}\n\nexport function bytesToRlp(bytes: RecursiveArray<ByteArray>): ByteArray {\n if (Array.isArray(bytes)) {\n const encoded = concat(bytes.map(bytesToRlp))\n return new Uint8Array([...encodeLength(encoded.length, 0xc0), ...encoded])\n }\n\n if (bytes.length === 1 && bytes[0] < 0x80) return bytes\n return new Uint8Array([...encodeLength(bytes.length, 0x80), ...bytes])\n}\n\nfunction encodeLength(length: number, offset: number) {\n if (length < 56) return [offset + length]\n return [encodeBytes(length).length + offset + 55, ...encodeBytes(length)]\n}\n","import { InvalidHexBooleanError } from '../../errors'\nimport type { ByteArray, Hex } from '../../types'\nimport { trim } from '../data'\nimport { hexToBytes } from './encodeBytes'\n\ntype DecodeHexResponse<TTo> = TTo extends 'string'\n ? string\n : TTo extends 'bigint'\n ? bigint\n : TTo extends 'number'\n ? number\n : TTo extends 'bytes'\n ? ByteArray\n : TTo extends 'boolean'\n ? boolean\n : never\n\n/**\n * @description Decodes a hex string into a string, number, bigint, boolean, or bytes32 array.\n */\nexport function decodeHex<\n TTo extends 'string' | 'bigint' | 'number' | 'bytes' | 'boolean',\n>(hex: Hex, to: TTo): DecodeHexResponse<TTo> {\n if (to === 'number') return hexToNumber(hex) as DecodeHexResponse<TTo>\n if (to === 'bigint') return hexToBigInt(hex) as DecodeHexResponse<TTo>\n if (to === 'string') return hexToString(hex) as DecodeHexResponse<TTo>\n if (to === 'boolean') return hexToBool(hex) as DecodeHexResponse<TTo>\n return hexToBytes(hex) as DecodeHexResponse<TTo>\n}\n\nexport type HexToBigIntOpts = {\n // Whether or not the number of a signed representation.\n signed?: boolean\n}\n\n/**\n * @description Decodes a hex string into a bigint.\n */\nexport function hexToBigInt(hex: Hex, opts: HexToBigIntOpts = {}): bigint {\n const { signed } = opts\n\n const value = BigInt(hex)\n if (!signed) return value\n\n const size = (hex.length - 2) / 2\n const max = (1n << (BigInt(size) * 8n - 1n)) - 1n\n if (value <= max) return value\n\n return value - BigInt(`0x${'f'.padStart(size * 2, 'f')}`) - 1n\n}\n\n/**\n * @description Decodes a hex string into a boolean.\n */\nexport function hexToBool(hex: Hex): boolean {\n if (trim(hex) === '0x0') return false\n if (trim(hex) === '0x1') return true\n throw new InvalidHexBooleanError(hex)\n}\n\ntype NumberToHexOpts = HexToBigIntOpts\n\n/**\n * @description Decodes a hex string into a number.\n */\nexport function hexToNumber(hex: Hex, opts: NumberToHexOpts = {}): number {\n return Number(hexToBigInt(hex, opts))\n}\n\n/**\n * @description Decodes a hex string into a UTF-8 string.\n */\nexport function hexToString(hex: Hex): string {\n const bytes = hexToBytes(hex)\n return new TextDecoder().decode(bytes)\n}\n","import { InvalidBytesBooleanError } from '../../errors'\nimport type { ByteArray, Hex } from '../../types'\nimport { hexToBigInt, hexToNumber } from './decodeHex'\nimport { bytesToHex } from './encodeHex'\n\ntype DecodeBytesResponse<TTo> = TTo extends 'string'\n ? string\n : TTo extends 'hex'\n ? Hex\n : TTo extends 'bigint'\n ? bigint\n : TTo extends 'number'\n ? number\n : TTo extends 'boolean'\n ? boolean\n : never\n\n/**\n * @description Decodes a byte array into a UTF-8 string, hex value, number, bigint or boolean.\n */\nexport function decodeBytes<\n TTo extends 'string' | 'hex' | 'bigint' | 'number' | 'boolean',\n>(bytes: ByteArray, to: TTo): DecodeBytesResponse<TTo> {\n if (to === 'number') return bytesToNumber(bytes) as DecodeBytesResponse<TTo>\n if (to === 'bigint') return bytesToBigint(bytes) as DecodeBytesResponse<TTo>\n if (to === 'boolean') return bytesToBool(bytes) as DecodeBytesResponse<TTo>\n if (to === 'string') return bytesToString(bytes) as DecodeBytesResponse<TTo>\n return bytesToHex(bytes) as DecodeBytesResponse<TTo>\n}\n\n/**\n * @description Decodes a byte array into a bigint.\n */\nexport function bytesToBigint(bytes: ByteArray): bigint {\n const hex = bytesToHex(bytes)\n return hexToBigInt(hex)\n}\n\n/**\n * @description Decodes a byte array into a boolean.\n */\nexport function bytesToBool(bytes: ByteArray): boolean {\n if (bytes.length > 1 || bytes[0] > 1)\n throw new InvalidBytesBooleanError(bytes)\n return Boolean(bytes[0])\n}\n\nexport { bytesToHex }\n\n/**\n * @description Decodes a byte array into a number.\n */\nexport function bytesToNumber(bytes: ByteArray): number {\n const hex = bytesToHex(bytes)\n return hexToNumber(hex)\n}\n\n/**\n * @description Decodes a byte array into a UTF-8 string.\n */\nexport function bytesToString(bytes: ByteArray): string {\n return new TextDecoder().decode(bytes)\n}\n","import {\n DataLengthTooLongError,\n DataLengthTooShortError,\n InvalidHexValueError,\n OffsetOutOfBoundsError,\n} from '../../errors'\nimport type { ByteArray, Hex } from '../../types'\nimport { trim } from '../data'\nimport { bytesToNumber } from './decodeBytes'\nimport { hexToBytes } from './encodeBytes'\nimport { bytesToHex } from './encodeHex'\nimport type { RecursiveArray } from './encodeRlp'\n\ntype DecodeRlpResponse<TTo> = TTo extends 'bytes'\n ? ByteArray\n : TTo extends 'hex'\n ? Hex\n : never\n\nexport function decodeRlp<TTo extends 'bytes' | 'hex'>(\n value: ByteArray | Hex,\n to: TTo,\n): RecursiveArray<DecodeRlpResponse<TTo>> {\n const bytes = parse(value)\n const [data, consumed] = rlpToBytes(bytes)\n if (consumed < bytes.length)\n throw new DataLengthTooLongError({\n consumed,\n length: bytes.length,\n })\n return format(data, to)\n}\n\nfunction parse(value: ByteArray | Hex) {\n if (typeof value === 'string') {\n if (value.length > 3 && value.length % 2 !== 0)\n throw new InvalidHexValueError(value)\n return hexToBytes(value)\n }\n return value\n}\n\nfunction format<TTo extends 'bytes' | 'hex'>(\n bytes: RecursiveArray<ByteArray>,\n to: TTo,\n): RecursiveArray<DecodeRlpResponse<TTo>> {\n if (Array.isArray(bytes)) return bytes.map((b) => format(b, to))\n return (\n to === 'hex' ? trim(bytesToHex(bytes)) : bytes\n ) as DecodeRlpResponse<TTo>\n}\n\nfunction rlpToBytes(\n bytes: ByteArray,\n offset = 0,\n): [result: RecursiveArray<ByteArray>, consumed: number] {\n if (bytes.length === 0) return [new Uint8Array([]), 0]\n\n const prefix = bytes[offset]\n\n if (prefix <= 0x7f) return [new Uint8Array([bytes[offset]]), 1]\n\n if (prefix <= 0xb7) {\n const length = prefix - 0x80\n const offset_ = offset + 1\n\n if (offset_ + length > bytes.length)\n throw new DataLengthTooShortError({\n length: offset_ + length,\n dataLength: bytes.length,\n })\n\n return [bytes.slice(offset_, offset_ + length), 1 + length]\n }\n\n if (prefix <= 0xbf) {\n const lengthOfLength = prefix - 0xb7\n const offset_ = offset + 1\n const length = bytesToNumber(bytes.slice(offset_, offset_ + lengthOfLength))\n\n if (offset_ + lengthOfLength + length > bytes.length)\n throw new DataLengthTooShortError({\n length: lengthOfLength + length,\n dataLength: bytes.length - lengthOfLength,\n })\n\n return [\n bytes.slice(offset_ + lengthOfLength, offset_ + lengthOfLength + length),\n 1 + lengthOfLength + length,\n ]\n }\n\n let lengthOfLength = 0\n let length = prefix - 0xc0\n if (prefix > 0xf7) {\n lengthOfLength = prefix - 0xf7\n length = bytesToNumber(bytes.slice(offset + 1, offset + 1 + lengthOfLength))\n }\n\n let nextOffset = offset + 1 + lengthOfLength\n if (nextOffset > bytes.length)\n throw new DataLengthTooShortError({\n length: nextOffset,\n dataLength: bytes.length,\n })\n\n let consumed = 1 + lengthOfLength + length\n let result = []\n while (nextOffset < offset + consumed) {\n const decoded = rlpToBytes(bytes, nextOffset)\n result.push(decoded[0])\n nextOffset += decoded[1]\n if (nextOffset > offset + consumed)\n throw new OffsetOutOfBoundsError({\n nextOffset: nextOffset,\n offset: offset + consumed,\n })\n }\n\n return [result, consumed]\n}\n","const paramsRegex = /((function|event)\\s)?(.*)(\\((.*)\\))/\n\nexport function extractFunctionParts(def: string) {\n const parts = def.match(paramsRegex)\n const type = parts?.[2] || undefined\n const name = parts?.[3]\n const params = parts?.[5] || undefined\n return { type, name, params }\n}\n\nexport function extractFunctionName(def: string) {\n return extractFunctionParts(def).name\n}\n\nexport function extractFunctionParams(def: string) {\n const params = extractFunctionParts(def).params\n const splitParams = params?.split(',').map((x) => x.trim().split(' '))\n return splitParams?.map((param) => ({\n type: param[0],\n name: param[1] === 'indexed' ? param[2] : param[1],\n ...(param[1] === 'indexed' ? { indexed: true } : {}),\n }))\n}\n\nexport function extractFunctionType(def: string) {\n return extractFunctionParts(def).type\n}\n","import { Abi } from 'abitype'\nimport {\n AbiDecodingZeroDataError,\n BaseError,\n ContractFunctionExecutionError,\n RawContractError,\n} from '../../errors'\nimport {\n ContractFunctionRevertedError,\n ContractFunctionZeroDataError,\n} from '../../errors/contract'\nimport { Address } from '../../types'\n\nconst EXECUTION_REVERTED_ERROR_CODE = 3\n\nexport function getContractError(\n err: BaseError,\n {\n abi,\n address,\n args,\n docsPath,\n functionName,\n sender,\n }: {\n abi: Abi\n args: any\n address?: Address\n docsPath?: string\n functionName: string\n sender?: Address\n },\n) {\n const { code, data, message } = (\n err instanceof RawContractError ? err : err.cause || {}\n ) as RawContractError\n\n let cause = err\n if (err instanceof AbiDecodingZeroDataError) {\n cause = new ContractFunctionZeroDataError({ functionName })\n } else if (code === EXECUTION_REVERTED_ERROR_CODE && (data || message)) {\n cause = new ContractFunctionRevertedError({\n abi,\n data,\n functionName,\n message,\n })\n }\n\n return new ContractFunctionExecutionError(cause, {\n abi,\n args,\n contractAddress: address,\n docsPath,\n functionName,\n sender,\n })\n}\n","import { keccak_256 } from '@noble/hashes/sha3'\n\nimport type { ByteArray, Hex } from '../../types'\n\nimport { encodeHex } from '../encoding'\n\ntype To = 'hex' | 'bytes'\n\nexport type Keccak256Hash<TTo extends To> =\n | (TTo extends 'bytes' ? ByteArray : never)\n | (TTo extends 'hex' ? Hex : never)\n\nexport function keccak256<TTo extends To = 'hex'>(\n value: ByteArray,\n to_?: TTo,\n): Keccak256Hash<TTo> {\n const to = to_ || 'hex'\n const bytes = keccak_256(value)\n if (to === 'bytes') return bytes as Keccak256Hash<TTo>\n return encodeHex(bytes) as Keccak256Hash<TTo>\n}\n","import { encodeBytes } from '../encoding'\nimport { extractFunctionName, extractFunctionParams } from '../contract'\nimport { keccak256 } from './keccak256'\n\nconst hash = (value: string) => keccak256(encodeBytes(value))\n\nexport function hashFunction(def: string) {\n const name = extractFunctionName(def)\n const params = extractFunctionParams(def)\n if (!params || params.length === 0) return hash(def.replace(/ /g, ''))\n return hash(`${name}(${params.map(({ type }) => type).join(',')})`)\n}\n","import { EventDefinition } from '../../types'\nimport { hashFunction } from './hashFunction'\n\nexport const getEventSignature = (event: EventDefinition) => hashFunction(event)\n","import { slice } from '../data'\nimport { hashFunction } from './hashFunction'\n\nexport const getFunctionSignature = (fn: string) =>\n slice(hashFunction(fn), 0, 4)\n","import { InvalidAddressError } from '../../errors'\nimport type { Address } from '../../types'\nimport { stringToBytes } from '../encoding'\nimport { keccak256 } from '../hash'\n\nconst addressRegex = /^(0x)?[a-fA-F0-9]{40}$/\n\nexport function checksumAddress(address_: Address): Address {\n const hexAddress = address_.substring(2).toLowerCase()\n const hash = keccak256(stringToBytes(hexAddress), 'bytes')\n\n let address = hexAddress.split('')\n for (let i = 0; i < 40; i += 2) {\n if (hash?.[i >> 1] >> 4 >= 8 && address[i]) {\n address[i] = address[i].toUpperCase()\n }\n if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {\n address[i + 1] = address[i + 1].toUpperCase()\n }\n }\n\n return `0x${address.join('')}`\n}\n\nexport function getAddress(address: Address) {\n if (!addressRegex.test(address)) throw new InvalidAddressError({ address })\n return checksumAddress(address)\n}\n","import type { Address, ByteArray, Hex } from '../../types'\nimport { concat, isBytes, pad, slice } from '../data'\nimport { encodeBytes, encodeRlp } from '../encoding'\nimport { keccak256 } from '../hash'\nimport { getAddress } from './getAddress'\n\nexport type GetCreateAddressOptions = {\n from: Address\n nonce: bigint\n}\n\nexport type GetCreate2AddressOptions = {\n bytecode: ByteArray | Hex\n from: Address\n salt: ByteArray | Hex\n}\n\nexport type GetContractAddressOptions =\n | ({\n opcode?: 'CREATE'\n } & GetCreateAddressOptions)\n | ({ opcode: 'CREATE2' } & GetCreate2AddressOptions)\n\nexport function getContractAddress(opts: GetContractAddressOptions) {\n if (opts.opcode === 'CREATE2') return getCreate2Address(opts)\n return getCreateAddress(opts)\n}\n\nexport function getCreateAddress(opts: GetCreateAddressOptions) {\n const from = encodeBytes(getAddress(opts.from))\n\n let nonce = encodeBytes(opts.nonce)\n if (nonce[0] === 0) nonce = new Uint8Array([])\n\n return getAddress(\n `0x${keccak256(encodeRlp([from, nonce], 'bytes')).slice(26)}` as Address,\n )\n}\n\nexport function getCreate2Address(opts: GetCreate2AddressOptions) {\n const from = encodeBytes(getAddress(opts.from))\n const salt = pad(\n isBytes(opts.salt) ? opts.salt : encodeBytes(opts.salt as Hex),\n { size: 32 },\n ) as ByteArray\n const bytecodeHash = encodeBytes(\n keccak256(\n (isBytes(opts.bytecode)\n ? opts.bytecode\n : encodeBytes(opts.bytecode as Hex)) as ByteArray,\n ),\n )\n return getAddress(\n slice(\n keccak256(concat([encodeBytes('0xff'), from, salt, bytecodeHash])),\n 12,\n ),\n )\n}\n","import type { Address } from '../../types'\nimport { getAddress } from './getAddress'\n\nexport function isAddress(address: Address) {\n try {\n return Boolean(getAddress(address))\n } catch {\n return false\n }\n}\n","import type { Address } from '../../types'\nimport { getAddress } from './getAddress'\n\nexport function isAddressEqual(a: Address, b: Address) {\n return getAddress(a) === getAddress(b)\n}\n","import {\n AbiParameter,\n AbiParametersToPrimitiveTypes,\n AbiParameterToPrimitiveType,\n Narrow,\n} from 'abitype'\n\nimport {\n AbiEncodingArrayLengthMismatchError,\n AbiEncodingLengthMismatchError,\n InvalidAbiEncodingTypeError,\n InvalidArrayError,\n} from '../../errors'\nimport { Hex } from '../../types'\nimport { concat, padHex, size, slice } from '../data'\nimport { boolToHex, numberToHex, stringToHex } from '../encoding'\n\nexport type EncodeAbiArgs<\n TParams extends\n | readonly AbiParameter[]\n | readonly unknown[] = readonly AbiParameter[],\n> = {\n params: Narrow<TParams>\n values: TParams extends readonly AbiParameter[]\n ? AbiParametersToPrimitiveTypes<TParams>\n : never\n}\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n */\nexport function encodeAbi<\n TParams extends readonly AbiParameter[] | readonly unknown[],\n>({ params, values }: EncodeAbiArgs<TParams>) {\n if (params.length !== values.length)\n throw new AbiEncodingLengthMismatchError({\n expectedLength: params.length as number,\n givenLength: values.length,\n })\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParams = prepareParams({\n params: params as readonly AbiParameter[],\n values,\n })\n const data = encodeParams(preparedParams)\n if (data.length === 0) return '0x'\n return data\n}\n\n/////////////////////////////////////////////////////////////////\n\ntype PreparedParam = { dynamic: boolean; encoded: Hex }\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\ntype Tuple = AbiParameterToPrimitiveType<TupleAbiParameter>\n\nfunction prepareParams<TParams extends readonly AbiParameter[]>({\n params,\n values,\n}: {\n params: Narrow<TParams>\n values: AbiParametersToPrimitiveTypes<TParams>\n}) {\n let preparedParams: PreparedParam[] = []\n for (let i = 0; i < params.length; i++) {\n preparedParams.push(prepareParam({ param: params[i], value: values[i] }))\n }\n return preparedParams\n}\n\nfunction prepareParam<TParam extends AbiParameter>({\n param,\n value,\n}: {\n param: TParam\n value: AbiParameterToPrimitiveType<TParam>\n}): PreparedParam {\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return encodeArray(value, { length, param: { ...param, type } })\n }\n if (param.type === 'tuple') {\n return encodeTuple(value as unknown as Tuple, {\n param: param as TupleAbiParameter,\n })\n }\n if (param.type === 'address') {\n return encodeAddress(value as unknown as Hex)\n }\n if (param.type === 'bool') {\n return encodeBool(value as unknown as boolean)\n }\n if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n const signed = param.type.startsWith('int')\n return encodeNumber(value as unknown as number, { signed })\n }\n if (param.type.startsWith('bytes')) {\n return encodeBytes(value as unknown as Hex, { param })\n }\n if (param.type === 'string') {\n return encodeString(value as unknown as string)\n }\n throw new InvalidAbiEncodingTypeError(param.type, {\n docsPath: '/docs/contract/encodeAbi',\n })\n}\n\n/////////////////////////////////////////////////////////////////\n\nfunction encodeParams(preparedParams: PreparedParam[]): Hex {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i]\n if (dynamic) staticSize += 32\n else staticSize += size(encoded)\n }\n\n // 2. Split the parameters into static and dynamic parts.\n let staticParams: Hex[] = []\n let dynamicParams: Hex[] = []\n let dynamicSize = 0\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i]\n if (dynamic) {\n staticParams.push(numberToHex(staticSize + dynamicSize, { size: 32 }))\n dynamicParams.push(encoded)\n dynamicSize += size(encoded)\n } else {\n staticParams.push(encoded)\n }\n }\n\n // 3. Concatenate static and dynamic parts.\n return concat([...staticParams, ...dynamicParams])\n}\n\n/////////////////////////////////////////////////////////////////\n\nfunction encodeAddress(value: Hex): PreparedParam {\n return { dynamic: false, encoded: padHex(value.toLowerCase() as Hex) }\n}\n\nfunction encodeArray<TParam extends AbiParameter>(\n value: AbiParameterToPrimitiveType<TParam>,\n {\n length,\n param,\n }: {\n length: number | null\n param: TParam\n },\n): PreparedParam {\n let dynamic = length === null\n\n if (!Array.isArray(value)) throw new InvalidArrayError(value)\n if (!dynamic && value.length !== length)\n throw new AbiEncodingArrayLengthMismatchError({\n expectedLength: length!,\n givenLength: value.length,\n type: `${param.type}[${length}]`,\n })\n\n let dynamicChild = false\n let preparedParams: PreparedParam[] = []\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParam({ param, value: value[i] })\n if (preparedParam.dynamic) dynamicChild = true\n preparedParams.push(preparedParam)\n }\n\n if (dynamic || dynamicChild) {\n const data = encodeParams(preparedParams)\n if (dynamic) {\n const length = numberToHex(preparedParams.length, { size: 32 })\n return {\n dynamic: true,\n encoded: preparedParams.length > 0 ? concat([length, data]) : length,\n }\n }\n if (dynamicChild) return { dynamic: true, encoded: data }\n }\n return {\n dynamic: false,\n encoded: concat(preparedParams.map(({ encoded }) => encoded)),\n }\n}\n\nfunction encodeBytes<TParam extends AbiParameter>(\n value: Hex,\n { param }: { param: TParam },\n): PreparedParam {\n const [_, size_] = param.type.split('bytes')\n if (!size_) {\n const partsLength = Math.floor(size(value) / 32)\n const parts: Hex[] = []\n for (let i = 0; i < partsLength + 1; i++) {\n parts.push(padHex(slice(value, i * 32, (i + 1) * 32), { dir: 'right' }))\n }\n return {\n dynamic: true,\n encoded: concat([\n padHex(numberToHex(size(value), { size: 32 })),\n ...parts,\n ]),\n }\n }\n return { dynamic: false, encoded: padHex(value, { dir: 'right' }) }\n}\n\nfunction encodeBool(value: boolean): PreparedParam {\n return { dynamic: false, encoded: padHex(boolToHex(value)) }\n}\n\nfunction encodeNumber(\n value: number,\n { signed }: { signed: boolean },\n): PreparedParam {\n return {\n dynamic: false,\n encoded: numberToHex(value, {\n size: 32,\n signed,\n }),\n }\n}\n\nfunction encodeString(value: string): PreparedParam {\n return {\n dynamic: true,\n encoded: concat([\n padHex(numberToHex(value.length, { size: 32 })),\n padHex(stringToHex(value), { dir: 'right' }),\n ]),\n }\n}\n\nfunction encodeTuple<\n TParam extends AbiParameter & { components: readonly AbiParameter[] },\n>(\n value: AbiParameterToPrimitiveType<TParam>,\n { param }: { param: TParam },\n): PreparedParam {\n let dynamic = false\n let preparedParams: PreparedParam[] = []\n for (let i = 0; i < param.components.length; i++) {\n const param_ = param.components[i]\n const index = Array.isArray(value) ? i : param_.name\n const preparedParam = prepareParam({\n param: param_,\n value: (value as any)[index!] as any,\n })\n preparedParams.push(preparedParam)\n dynamic = preparedParam.dynamic\n }\n return {\n dynamic,\n encoded: dynamic\n ? encodeParams(preparedParams)\n : concat(preparedParams.map(({ encoded }) => encoded)),\n }\n}\n\nexport function getArrayComponents(\n type: string,\n): [length: number | null, innerType: string] | undefined {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2] ? Number(matches[2]) : null, matches[1]]\n : undefined\n}\n","import {\n AbiParameter,\n AbiParametersToPrimitiveTypes,\n AbiParameterToPrimitiveType,\n Narrow,\n} from 'abitype'\n\nimport {\n AbiDecodingDataSizeInvalidError,\n AbiDecodingZeroDataError,\n InvalidAbiDecodingTypeError,\n} from '../../errors'\nimport { Hex } from '../../types'\nimport { checksumAddress } from '../address'\nimport { size, slice, trim } from '../data'\nimport { hexToBigInt, hexToBool, hexToNumber, hexToString } from '../encoding'\nimport { getArrayComponents } from './encodeAbi'\n\nexport type DecodeAbiArgs<\n TParams extends\n | readonly AbiParameter[]\n | readonly unknown[] = readonly AbiParameter[],\n> = {\n data: Hex\n params: Narrow<TParams>\n}\n\nexport function decodeAbi<\n TParams extends readonly AbiParameter[] | readonly unknown[],\n>({ data, params }: DecodeAbiArgs<TParams>) {\n if (data === '0x' && params.length > 0) throw new AbiDecodingZeroDataError()\n if (size(data) % 32 !== 0)\n throw new AbiDecodingDataSizeInvalidError(size(data))\n const values = decodeParams({\n data,\n params: params as readonly AbiParameter[],\n })\n if (values.length === 0) return undefined\n return values\n}\n\n////////////////////////////////////////////////////////////////////\n\ntype TupleAbiParameter = AbiParameter & { components: readonly AbiParameter[] }\n\nfunction decodeParams<TParams extends readonly AbiParameter[]>({\n data,\n params,\n}: {\n data: Hex\n params: TParams\n}) {\n let decodedValues: unknown[] = []\n let position = 0\n\n for (let i = 0; i < params.length; i++) {\n const param = params[i]\n const { consumed, value } = decodeParam({ data, param, position })\n decodedValues.push(value)\n // Step across the data by the amount of data consumed by this parameter.\n position += consumed\n }\n\n return decodedValues as unknown as AbiParametersToPrimitiveTypes<TParams>\n}\n\nfunction decodeParam({\n data,\n param,\n position,\n}: { data: Hex; param: AbiParameter; position: number }): {\n consumed: number\n value: any\n} {\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return decodeArray(data, {\n length,\n param: { ...param, type: type } as AbiParameter,\n position,\n })\n }\n if (param.type === 'tuple') {\n return decodeTuple(data, { param: param as TupleAbiParameter, position })\n }\n if (param.type === 'string') {\n return decodeString(data, { position })\n }\n if (param.type.startsWith('bytes')) {\n return decodeBytes(data, { param, position })\n }\n\n let value = slice(data, position, position + 32) as Hex\n if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n return decodeNumber(value, { param })\n }\n if (param.type === 'address') {\n return decodeAddress(value)\n }\n if (param.type === 'bool') {\n return decodeBool(value)\n }\n throw new InvalidAbiDecodingTypeError(param.type, {\n docsPath: '/docs/contract/decodeAbi',\n })\n}\n\n////////////////////////////////////////////////////////////////////\n\nfunction decodeAddress(value: Hex) {\n return { consumed: 32, value: checksumAddress(slice(value, -20)) }\n}\n\nfunction decodeArray<TParam extends AbiParameter>(\n data: Hex,\n {\n param,\n length,\n position,\n }: {\n param: TParam\n length: number | null\n position: number\n },\n) {\n // If the length of the array is not known in advance (dynamic array),\n // we will need to decode the offset of the array data.\n if (!length) {\n // Get the offset of the array data.\n const offset = hexToNumber(slice(data, position, position + 32))\n // Get the length of the array from the offset.\n const length = hexToNumber(slice(data, offset, offset + 32))\n\n let consumed = 0\n let value: AbiParameterToPrimitiveType<TParam>[] = []\n for (let i = 0; i < length; ++i) {\n const decodedChild = decodeParam({\n data: slice(data, offset + 32),\n param,\n position: consumed,\n })\n consumed += decodedChild.consumed\n value.push(decodedChild.value)\n }\n return { value, consumed: 32 }\n }\n\n // If the length of the array is known in advance,\n // and the length of an element deeply nested in the array is not known,\n // we need to decode the offset of the array data.\n if (hasDynamicChild(param)) {\n // Get the child type of the array.\n const arrayComponents = getArrayComponents(param.type)\n // If the child type is not known, the array is dynamic.\n const dynamicChild = !arrayComponents?.[0]\n\n let consumed = 0\n let value: AbiParameterToPrimitiveType<TParam>[] = []\n for (let i = 0; i < length; ++i) {\n const offset = hexToNumber(slice(data, position, position + 32))\n const decodedChild = decodeParam({\n data: slice(data, offset),\n param,\n position: dynamicChild ? consumed : i * 32,\n })\n consumed += decodedChild.consumed\n value.push(decodedChild.value)\n }\n return { value, consumed }\n }\n\n // If the length of the array is known in advance,\n // and the length of each element in the array is known,\n // the array data is encoded contiguously after the array.\n let consumed = 0\n let value: AbiParameterToPrimitiveType<TParam>[] = []\n for (let i = 0; i < length; ++i) {\n const decodedChild = decodeParam({\n data,\n param,\n position: position + consumed,\n })\n consumed += decodedChild.consumed\n value.push(decodedChild.value)\n }\n return { value, consumed }\n}\n\nfunction decodeBool(value: Hex) {\n return { consumed: 32, value: hexToBool(value) }\n}\n\nfunction decodeBytes<TParam extends AbiParameter>(\n data: Hex,\n { param, position }: { param: TParam; position: number },\n) {\n const [_, size] = param.type.split('bytes')\n if (!size) {\n // If we don't have a size, we're dealing with a dynamic-size array\n // so we need to read the offset of the data part first.\n const offset = hexToNumber(slice(data, position, position + 32))\n const length = hexToNumber(slice(data, offset, offset + 32))\n const value = slice(data, offset + 32, offset + 32 + length)\n return { consumed: 32, value }\n }\n\n const value = slice(data, position, position + parseInt(size))\n return { consumed: 32, value }\n}\n\nfunction decodeNumber<TParam extends AbiParameter>(\n value: Hex,\n { param }: { param: TParam },\n) {\n const signed = param.type.startsWith('int')\n const size = parseInt(param.type.split('int')[1] || '256')\n return {\n consumed: 32,\n value:\n size > 48\n ? hexToBigInt(value, { signed })\n : hexToNumber(value, { signed }),\n }\n}\n\nfunction decodeString(data: Hex, { position }: { position: number }) {\n const offset = hexToNumber(slice(data, position, position + 32))\n const length = hexToNumber(slice(data, offset, offset + 32))\n const value = hexToString(\n trim(slice(data, offset + 32, offset + 32 + length)),\n )\n return { consumed: 32, value }\n}\n\nfunction decodeTuple<\n TParam extends AbiParameter & { components: readonly AbiParameter[] },\n>(data: Hex, { param, position }: { param: TParam; position: number }) {\n // Tuples can have unnamed components (i.e. they are arrays), so we must\n // determine whether the tuple is named or unnamed. In the case of a named\n // tuple, the value will be an object where each property is the name of the\n // component. In the case of an unnamed tuple, the value will be an array.\n const hasUnnamedChild =\n param.components.length === 0 || param.components.some(({ name }) => !name)\n\n // Initialize the value to an object or an array, depending on whether the\n // tuple is named or unnamed.\n let value: any = hasUnnamedChild ? [] : {}\n let consumed = 0\n\n // If the tuple has a dynamic child, we must first decode the offset to the\n // tuple data.\n if (hasDynamicChild(param)) {\n const offset = hexToNumber(slice(data, position, position + 32))\n // Decode each component of the tuple, starting at the offset.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]\n const decodedChild = decodeParam({\n data: slice(data, offset),\n param: component,\n position: consumed,\n })\n consumed += decodedChild.consumed\n value[hasUnnamedChild ? i : component?.name!] = decodedChild.value\n }\n return { consumed: 32, value }\n }\n\n // If the tuple has static children, we can just decode each component\n // in sequence.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]\n const decodedChild = decodeParam({\n data,\n param: component,\n position: position + consumed,\n })\n consumed += decodedChild.consumed\n value[hasUnnamedChild ? i : component?.name!] = decodedChild.value\n }\n return { consumed, value }\n}\n\nfunction hasDynamicChild(param: AbiParameter) {\n const { type } = param\n if (type === 'string') return true\n if (type === 'bytes') return true\n if (type.endsWith('[]')) return true\n\n if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n const arrayComponents = getArrayComponents(param.type)\n if (\n arrayComponents &&\n hasDynamicChild({ ...param, type: arrayComponents[1] } as AbiParameter)\n )\n return true\n\n return false\n}\n","import { AbiParameter } from 'abitype'\n\nimport { InvalidDefinitionTypeError } from '../../errors'\nimport { AbiItem } from '../../types'\n\nexport function formatAbiItem(\n abiItem: AbiItem,\n { includeName = false }: { includeName?: boolean } = {},\n) {\n if (\n abiItem.type !== 'function' &&\n abiItem.type !== 'event' &&\n abiItem.type !== 'error'\n )\n throw new InvalidDefinitionTypeError(abiItem.type)\n\n return `${abiItem.name}(${getParams(abiItem.inputs, { includeName })})`\n}\n\nfunction getParams(\n params: readonly AbiParameter[] | undefined,\n { includeName }: { includeName: boolean },\n): string {\n if (!params) return ''\n return params\n .map((param) => getParam(param, { includeName }))\n .join(includeName ? ', ' : ',')\n}\n\nfunction getParam(\n param: AbiParameter,\n { includeName }: { includeName: boolean },\n): string {\n if (param.type.startsWith('tuple')) {\n return `(${getParams(\n (param as unknown as { components: AbiParameter[] }).components,\n { includeName },\n )})${param.type.slice('tuple'.length)}`\n }\n return param.type + (includeName && param.name ? ` ${param.name}` : '')\n}\n","import { Abi, AbiError } from 'abitype'\nimport { solidityError, solidityPanic } from '../../constants'\nimport {\n AbiDecodingZeroDataError,\n AbiErrorSignatureNotFoundError,\n} from '../../errors'\nimport { AbiItem, Hex } from '../../types'\nimport { slice } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { decodeAbi } from './decodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\n\nexport type DecodeErrorResultArgs = { abi?: Abi; data: Hex }\n\nexport type DecodeErrorResultResponse = {\n abiItem: AbiItem\n errorName: string\n args?: readonly unknown[]\n}\n\nexport function decodeErrorResult({\n abi,\n data,\n}: DecodeErrorResultArgs): DecodeErrorResultResponse {\n const signature = slice(data, 0, 4)\n if (signature === '0x') throw new AbiDecodingZeroDataError()\n\n const abi_ = [...(abi || []), solidityError, solidityPanic]\n const abiItem = abi_.find(\n (x) =>\n x.type === 'error' &&\n signature === getFunctionSignature(formatAbiItem(x)),\n )\n if (!abiItem)\n throw new AbiErrorSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeErrorResult',\n })\n return {\n abiItem,\n args: ('inputs' in abiItem && abiItem.inputs && abiItem.inputs.length > 0\n ? decodeAbi({ data: slice(data, 4), params: abiItem.inputs })\n : undefined) as readonly unknown[] | undefined,\n errorName: (abiItem as { name: string }).name,\n }\n}\n","import { Abi, AbiParameter, Narrow } from 'abitype'\nimport { AbiEventSignatureNotFoundError } from '../../errors'\nimport {\n EventDefinition,\n ExtractEventArgsFromTopics,\n ExtractEventNameFromAbi,\n Hex,\n LogTopic,\n} from '../../types'\nimport { getEventSignature } from '../hash'\nimport { decodeAbi } from './decodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\n\nexport type DecodeEventLogArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TEventName extends string = string,\n TTopics extends LogTopic[] = LogTopic[],\n TData extends Hex | undefined = undefined,\n> = {\n abi: Narrow<TAbi>\n data?: TData\n eventName?: ExtractEventNameFromAbi<TAbi, TEventName>\n topics: [signature: Hex, ...args: TTopics]\n}\n\nexport type DecodeEventLogResponse<\n TAbi extends Abi | readonly unknown[] = Abi,\n TEventName extends string = string,\n TTopics extends LogTopic[] = LogTopic[],\n TData extends Hex | undefined = undefined,\n> = {\n eventName: TEventName\n} & ExtractEventArgsFromTopics<TAbi, TEventName, TTopics, TData>\n\nexport function decodeEventLog<\n TAbi extends Abi | readonly unknown[],\n TEventName extends string,\n TTopics extends LogTopic[],\n TData extends Hex | undefined = undefined,\n>({\n abi,\n data,\n topics,\n}: DecodeEventLogArgs<\n TAbi,\n TEventName,\n TTopics,\n TData\n>): DecodeEventLogResponse<TAbi, TEventName, TTopics, TData> {\n const [signature, ...argTopics] = topics\n const abiItem = (abi as Abi).find(\n (x) => signature === getEventSignature(formatAbiItem(x) as EventDefinition),\n )\n if (!(abiItem && 'name' in abiItem))\n throw new AbiEventSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeEventLog',\n })\n\n const { name, inputs } = abiItem\n const isUnnamed = inputs?.some((x) => !('name' in x && x.name))\n\n let args: any = isUnnamed ? [] : {}\n\n // Decode topics (indexed args).\n for (let i = 0; i < inputs.length; i++) {\n const param = inputs[i]\n const topic = argTopics[i]\n if (topic === null) args[param.name || i] = null\n if (!topic) continue\n if (Array.isArray(topic)) {\n args[param.name || i] = topic.map((t) => decodeTopic({ param, value: t }))\n } else {\n args[param.name || i] = decodeTopic({ param, value: topic })\n }\n }\n\n // Decode data (non-indexed args).\n if (data) {\n const params = inputs.filter((x) => !('indexed' in x && x.indexed))\n const decodedData = decodeAbi({ params, data })\n if (decodedData) {\n if (isUnnamed) args = [...args, ...decodedData]\n else {\n for (let i = 0; i < params.length; i++) {\n args[params[i].name!] = decodedData[i]\n }\n }\n }\n }\n\n return {\n eventName: name,\n args: Object.values(args).length > 0 ? args : undefined,\n } as unknown as DecodeEventLogResponse<TAbi, TEventName, TTopics, TData>\n}\n\nfunction decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {\n if (\n param.type === 'string' ||\n param.type === 'bytes' ||\n param.type === 'tuple' ||\n param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n )\n return value\n const decodedArg = decodeAbi({ params: [param], data: value }) || []\n return decodedArg[0]\n}\n","import { Abi } from 'abitype'\n\nimport { AbiFunctionSignatureNotFoundError } from '../../errors'\nimport { Hex } from '../../types'\nimport { slice } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { decodeAbi } from './decodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\n\nexport type DecodeFunctionDataArgs = {\n abi: Abi | readonly unknown[]\n data: Hex\n}\n\nexport function decodeFunctionData({ abi, data }: DecodeFunctionDataArgs) {\n const signature = slice(data, 0, 4)\n const description = (abi as Abi).find(\n (x) => signature === getFunctionSignature(formatAbiItem(x)),\n )\n if (!description)\n throw new AbiFunctionSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeFunctionData',\n })\n return {\n functionName: (description as { name: string }).name,\n args: ('inputs' in description &&\n description.inputs &&\n description.inputs.length > 0\n ? decodeAbi({ data: slice(data, 4), params: description.inputs })\n : undefined) as readonly unknown[] | undefined,\n }\n}\n","import type { Abi, AbiParameter, Address, Narrow } from 'abitype'\nimport type { ExtractArgsFromAbi, ExtractNameFromAbi } from '../../types'\nimport { isAddress } from '../address'\n\nexport type GetAbiItemArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n> = {\n abi: Narrow<TAbi>\n name: ExtractNameFromAbi<TAbi, TFunctionName>\n} & Partial<ExtractArgsFromAbi<TAbi, TFunctionName>>\n\nexport function getAbiItem<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>({ abi, args = [], name }: GetAbiItemArgs<TAbi, TFunctionName>) {\n const abiItems = (abi as Abi).filter((x) => 'name' in x && x.name === name)\n\n if (abiItems.length === 0) return undefined\n if (abiItems.length === 1) return abiItems[0]\n\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem)) continue\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0) return abiItem\n continue\n }\n if (!abiItem.inputs) continue\n if (abiItem.inputs.length === 0) continue\n const matched = (args as readonly unknown[]).every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n if (!abiParameter) return false\n return isArgOfType(arg, abiParameter as AbiParameter)\n })\n if (matched) return abiItem\n }\n return abiItems[0]\n}\n\nexport function isArgOfType(arg: unknown, abiParameter: AbiParameter): boolean {\n const argType = typeof arg\n const abiParameterType = abiParameter.type\n switch (abiParameterType) {\n case 'address':\n return isAddress(arg as Address)\n case 'bool':\n return argType === 'boolean'\n case 'function':\n return argType === 'string'\n case 'string':\n return argType === 'string'\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every(\n (component, index) => {\n return isArgOfType(\n Object.values(arg as unknown[] | Record<string, unknown>)[index],\n component as AbiParameter,\n )\n },\n )\n\n // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (\n /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n abiParameterType,\n )\n )\n return argType === 'number' || argType === 'bigint'\n\n // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array\n\n // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (\n Array.isArray(arg) &&\n arg.every((x: unknown) =>\n isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n } as AbiParameter),\n )\n )\n }\n\n return false\n }\n }\n}\n","import { Abi, Narrow } from 'abitype'\nimport {\n AbiFunctionNotFoundError,\n AbiFunctionOutputsNotFoundError,\n} from '../../errors'\nimport {\n ExtractArgsFromAbi,\n ExtractFunctionNameFromAbi,\n ExtractResultFromAbi,\n Hex,\n} from '../../types'\nimport { decodeAbi } from './decodeAbi'\nimport { getAbiItem, GetAbiItemArgs } from './getAbiItem'\n\nconst docsPath = '/docs/contract/decodeFunctionResult'\n\nexport type DecodeFunctionResultArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = {\n abi: Narrow<TAbi>\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n data: Hex\n} & Partial<ExtractArgsFromAbi<TAbi, TFunctionName>>\n\nexport type DecodeFunctionResultResponse<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = ExtractResultFromAbi<TAbi, TFunctionName>\n\nexport function decodeFunctionResult<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>({\n abi,\n args,\n functionName,\n data,\n}: DecodeFunctionResultArgs<TAbi, TFunctionName>): DecodeFunctionResultResponse<\n TAbi,\n TFunctionName\n> {\n const description = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemArgs)\n if (!description)\n throw new AbiFunctionNotFoundError(functionName, { docsPath })\n if (!('outputs' in description))\n throw new AbiFunctionOutputsNotFoundError(functionName, { docsPath })\n\n const values = decodeAbi({ data, params: description.outputs })\n if (values && values.length > 1) return values as any\n if (values && values.length === 1) return values[0] as any\n return undefined as any\n}\n","import { Abi, Narrow } from 'abitype'\n\nimport {\n AbiConstructorNotFoundError,\n AbiConstructorParamsNotFoundError,\n} from '../../errors'\nimport { ExtractConstructorArgsFromAbi, Hex } from '../../types'\nimport { concatHex } from '../data'\nimport { encodeAbi } from './encodeAbi'\n\nconst docsPath = '/docs/contract/encodeDeployData'\n\nexport type EncodeDeployDataArgs<TAbi extends Abi | readonly unknown[] = Abi> =\n {\n abi: Narrow<TAbi>\n bytecode: Hex\n } & ExtractConstructorArgsFromAbi<TAbi>\n\nexport function encodeDeployData<TAbi extends Abi | readonly unknown[]>({\n abi,\n args,\n bytecode,\n}: EncodeDeployDataArgs<TAbi>) {\n if (!args || args.length === 0) return bytecode\n\n const description = (abi as Abi).find(\n (x) => 'type' in x && x.type === 'constructor',\n )\n if (!description) throw new AbiConstructorNotFoundError({ docsPath })\n if (!('inputs' in description))\n throw new AbiConstructorParamsNotFoundError({ docsPath })\n if (!description.inputs || description.inputs.length === 0)\n throw new AbiConstructorParamsNotFoundError({ docsPath })\n\n const data = encodeAbi({\n params: description.inputs,\n values: args as any,\n })\n return concatHex([bytecode, data!])\n}\n","import { Abi, Narrow } from 'abitype'\nimport {\n AbiErrorInputsNotFoundError,\n AbiErrorNotFoundError,\n} from '../../errors'\nimport {\n ExtractErrorArgsFromAbi,\n ExtractErrorNameFromAbi,\n Hex,\n} from '../../types'\nimport { concatHex } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { encodeAbi } from './encodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\nimport { getAbiItem, GetAbiItemArgs } from './getAbiItem'\n\nconst docsPath = '/docs/contract/encodeErrorResult'\n\nexport type EncodeErrorResultArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TErrorName extends string = string,\n> = {\n abi: Narrow<TAbi>\n errorName: ExtractErrorNameFromAbi<TAbi, TErrorName>\n} & ExtractErrorArgsFromAbi<TAbi, TErrorName>\n\nexport function encodeErrorResult<\n TAbi extends Abi | readonly unknown[],\n TErrorName extends string,\n>({ abi, errorName, args }: EncodeErrorResultArgs<TAbi, TErrorName>) {\n const description = getAbiItem({\n abi,\n args,\n name: errorName,\n } as GetAbiItemArgs)\n if (!description) throw new AbiErrorNotFoundError(errorName, { docsPath })\n const definition = formatAbiItem(description)\n const signature = getFunctionSignature(definition)\n\n let data: Hex = '0x'\n if (args && args.length > 0) {\n if (!('inputs' in description && description.inputs))\n throw new AbiErrorInputsNotFoundError(errorName, { docsPath })\n data = encodeAbi({ params: description.inputs, values: args as any })\n }\n return concatHex([signature, data])\n}\n","import {\n Abi,\n AbiParameter,\n AbiParameterToPrimitiveType,\n ExtractAbiEventNames,\n Narrow,\n} from 'abitype'\n\nimport {\n AbiEventNotFoundError,\n FilterTypeNotSupportedError,\n} from '../../errors'\nimport {\n EventDefinition,\n ExtractEventArgsFromAbi,\n ExtractEventNameFromAbi,\n Hex,\n} from '../../types'\nimport { encodeBytes } from '../encoding'\nimport { keccak256, getEventSignature } from '../hash'\nimport { encodeAbi } from './encodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\nimport { getAbiItem, GetAbiItemArgs } from './getAbiItem'\n\nexport type EncodeEventTopicsArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TEventName extends string = string,\n> = {\n abi: Narrow<TAbi>\n eventName: ExtractEventNameFromAbi<TAbi, TEventName>\n} & ExtractEventArgsFromAbi<TAbi, TEventName>\n\nexport function encodeEventTopics<\n TAbi extends Abi | readonly unknown[],\n TEventName extends string,\n>({ abi, eventName, args }: EncodeEventTopicsArgs<TAbi, TEventName>) {\n const abiItem = getAbiItem({ abi, args, name: eventName } as GetAbiItemArgs)\n if (!abiItem)\n throw new AbiEventNotFoundError(eventName, {\n docsPath: '/docs/contract/encodeEventTopics',\n })\n const definition = formatAbiItem(abiItem)\n const signature = getEventSignature(definition as EventDefinition)\n\n let topics: Hex[] = []\n if (args && 'inputs' in abiItem) {\n const args_ = Array.isArray(args)\n ? args\n : abiItem.inputs?.map((x: any) => (args as any)[x.name]) ?? []\n topics =\n abiItem.inputs\n ?.filter((param) => 'indexed' in param && param.indexed)\n .map((param, i) =>\n Array.isArray(args_[i])\n ? args_[i].map((_: any, j: number) =>\n encodeArg({ param, value: args_[i][j] }),\n )\n : args_[i]\n ? encodeArg({ param, value: args_[i] })\n : null,\n ) ?? []\n }\n return [signature, ...topics]\n}\n\nfunction encodeArg({\n param,\n value,\n}: { param: AbiParameter; value: AbiParameterToPrimitiveType<AbiParameter> }) {\n if (param.type === 'string' || param.type === 'bytes')\n return keccak256(encodeBytes(value as string))\n if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n throw new FilterTypeNotSupportedError(param.type)\n return encodeAbi({ params: [param], values: [value] })\n}\n","import { Abi, Narrow } from 'abitype'\n\nimport { AbiFunctionNotFoundError } from '../../errors'\nimport { ExtractArgsFromAbi, ExtractFunctionNameFromAbi } from '../../types'\nimport { concatHex } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { encodeAbi } from './encodeAbi'\nimport { formatAbiItem } from './formatAbiItem'\nimport { getAbiItem, GetAbiItemArgs } from './getAbiItem'\n\nexport type EncodeFunctionDataArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = {\n abi: Narrow<TAbi>\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n} & ExtractArgsFromAbi<TAbi, TFunctionName>\n\nexport function encodeFunctionData<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>({ abi, args, functionName }: EncodeFunctionDataArgs<TAbi, TFunctionName>) {\n const description = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemArgs)\n if (!description)\n throw new AbiFunctionNotFoundError(functionName, {\n docsPath: '/docs/contract/encodeFunctionData',\n })\n const definition = formatAbiItem(description)\n const signature = getFunctionSignature(definition)\n const data =\n 'inputs' in description && description.inputs\n ? encodeAbi({\n params: description.inputs,\n values: (args ?? []) as any,\n })\n : undefined\n return concatHex([signature, data ?? '0x'])\n}\n","import { Abi, ExtractAbiFunctionNames, Narrow } from 'abitype'\nimport {\n AbiFunctionNotFoundError,\n AbiFunctionOutputsNotFoundError,\n} from '../../errors'\n\nimport { ExtractFunctionNameFromAbi, ExtractResultFromAbi } from '../../types'\nimport { encodeAbi } from './encodeAbi'\n\nconst docsPath = '/docs/contract/encodeFunctionResult'\n\nexport type EncodeFunctionResultArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = {\n abi: Narrow<TAbi>\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n result?: ExtractResultFromAbi<TAbi, TFunctionName>\n}\n\nexport function encodeFunctionResult<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>({\n abi,\n functionName,\n result,\n}: EncodeFunctionResultArgs<TAbi, TFunctionName>) {\n const description = (abi as Abi).find(\n (x) => 'name' in x && x.name === functionName,\n )\n if (!description)\n throw new AbiFunctionNotFoundError(functionName, { docsPath })\n if (!('outputs' in description))\n throw new AbiFunctionOutputsNotFoundError(functionName, { docsPath })\n\n let values = Array.isArray(result) ? result : [result]\n if (description.outputs.length === 0 && !values[0]) values = []\n\n return encodeAbi({ params: description.outputs, values })\n}\n","import { AbiParameter } from 'abitype'\nimport { AbiItem } from '../../types'\nimport { stringify } from '../../utils'\n\nexport function formatAbiItemWithArgs({\n abiItem,\n args,\n includeFunctionName = true,\n includeName = false,\n}: {\n abiItem: AbiItem\n args: readonly unknown[]\n includeFunctionName?: boolean\n includeName?: boolean\n}) {\n if (!('name' in abiItem)) return\n if (!('inputs' in abiItem)) return\n if (!abiItem.inputs) return\n return `${includeFunctionName ? abiItem.name : ''}(${abiItem.inputs\n .map(\n (input: AbiParameter, i: number) =>\n `${includeName && input.name ? `${input.name}: ` : ''}${\n typeof args[i] === 'object' ? stringify(args[i]) : args[i]\n }`,\n )\n .join(', ')})`\n}\n","export const promiseCache = new Map()\nexport const responseCache = new Map()\n\nexport function getCache<TData>(cacheKey: string) {\n const buildCache = <TData>(cacheKey: string, cache: Map<string, TData>) => ({\n clear: () => cache.delete(cacheKey),\n get: () => cache.get(cacheKey),\n set: (data: TData) => cache.set(cacheKey, data),\n })\n\n const promise = buildCache<Promise<TData>>(cacheKey, promiseCache)\n const response = buildCache<{ created: Date; data: TData }>(\n cacheKey,\n responseCache,\n )\n\n return {\n clear: () => {\n promise.clear()\n response.clear()\n },\n promise,\n response,\n }\n}\n\nexport type WithCacheArgs = {\n /** The key to cache the data against. */\n cacheKey: string\n /** The maximum age (in ms) of the cached value. Default: Infinity (no expiry) */\n maxAge?: number\n}\n\n/**\n * @description Returns the result of a given promise, and caches the result for\n * subsequent invocations against a provided cache key.\n */\nexport async function withCache<TData>(\n fn: () => Promise<TData>,\n { cacheKey, maxAge = Infinity }: WithCacheArgs,\n) {\n const cache = getCache<TData>(cacheKey)\n\n // If a response exists in the cache, and it's not expired, return it\n // and do not invoke the promise.\n // If the max age is 0, the cache is disabled.\n const response = cache.response.get()\n if (response && maxAge > 0) {\n const age = new Date().getTime() - response.created.getTime()\n if (age < maxAge) return response.data\n }\n\n let promise = cache.promise.get()\n if (!promise) {\n promise = fn()\n\n // Store the promise in the cache so that subsequent invocations\n // will wait for the same promise to resolve (deduping).\n cache.promise.set(promise)\n }\n\n const data = await promise\n\n // Clear the promise cache so that subsequent invocations will\n // invoke the promise again.\n cache.promise.clear()\n\n // Store the response in the cache so that subsequent invocations\n // will return the same response.\n cache.response.set({ created: new Date(), data })\n\n return data\n}\n","export async function wait(time: number) {\n return new Promise((res) => setTimeout(res, time))\n}\n","import { wait } from '../wait'\n\nexport function withRetry<TData>(\n fn: () => Promise<TData>,\n {\n delay: delay_ = 100,\n retryCount = 2,\n shouldRetryOnResponse = () => false,\n shouldRetryOnError = () => false,\n }: {\n // The delay (in ms) between retries.\n delay?: ((config: { count: number; data?: TData }) => number) | number\n // The max number of times to retry.\n retryCount?: number\n // Whether or not to retry on a successful response.\n shouldRetryOnResponse?: ({\n count,\n data,\n }: {\n count: number\n data: TData\n }) => Promise<boolean> | boolean\n // Whether or not to retry when an error is thrown.\n shouldRetryOnError?: ({\n count,\n error,\n }: {\n count: number\n error: Error\n }) => Promise<boolean> | boolean\n } = {},\n) {\n return new Promise<TData>((resolve, reject) => {\n const attemptRetry = async ({ count = 0 } = {}) => {\n const retry = async ({ data }: { data?: TData } = {}) => {\n const delay =\n typeof delay_ === 'function' ? delay_({ count, data }) : delay_\n if (delay) await wait(delay)\n attemptRetry({ count: count + 1 })\n }\n\n try {\n const data = await fn()\n if (\n count < retryCount &&\n (await shouldRetryOnResponse({ count, data }))\n )\n return retry({ data })\n resolve(data)\n } catch (err) {\n if (\n count < retryCount &&\n (await shouldRetryOnError({ count, error: err as Error }))\n )\n return retry()\n reject(err)\n }\n }\n attemptRetry()\n })\n}\n","export function withTimeout<TData>(\n fn: ({ signal }: { signal?: AbortController['signal'] }) => Promise<TData>,\n {\n errorInstance,\n timeout,\n signal,\n }: {\n // The error instance to throw when the timeout is reached.\n errorInstance: Error\n // The timeout (in ms).\n timeout: number\n // Whether or not the timeout should use an abort signal.\n signal?: boolean\n },\n): Promise<TData> {\n return new Promise((resolve, reject) => {\n ;(async () => {\n let timeoutId!: NodeJS.Timeout\n try {\n const controller = new AbortController()\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n if (signal) {\n controller.abort()\n } else {\n reject(errorInstance)\n }\n }, timeout)\n }\n resolve(await fn({ signal: controller?.signal }))\n } catch (err) {\n if ((err as Error).name === 'AbortError') reject(errorInstance)\n reject(err)\n } finally {\n clearTimeout(timeoutId)\n }\n })()\n })\n}\n","import {\n BaseError,\n InternalRpcError,\n InvalidInputRpcError,\n InvalidParamsRpcError,\n InvalidRequestRpcError,\n JsonRpcVersionUnsupportedError,\n LimitExceededRpcError,\n MethodNotFoundRpcError,\n MethodNotSupportedRpcError,\n ParseRpcError,\n ResourceNotFoundRpcError,\n ResourceUnavailableRpcError,\n RpcError,\n TransactionRejectedRpcError,\n UnknownRpcError,\n} from '../errors'\nimport { withRetry } from './promise'\n\nexport const isNonDeterministicError = (error: Error) => {\n if (error instanceof UnknownRpcError) return true\n if ('code' in error)\n return (\n error.code === -32603 || error.code === -32000 || error.code === -32005\n )\n return false\n}\n\nexport function buildRequest<TRequest extends (args: any) => Promise<any>>(\n request: TRequest,\n {\n retryDelay = 150,\n retryCount = 3,\n }: {\n // The base delay (in ms) between retries.\n retryDelay?: number\n // The max number of times to retry.\n retryCount?: number\n } = {},\n) {\n return (async (args: any) =>\n withRetry(\n async () => {\n try {\n return await request(args)\n } catch (err_) {\n let err = err_ as unknown as RpcError\n if (err.code === -32700) throw new ParseRpcError(err)\n if (err.code === -32600) throw new InvalidRequestRpcError(err)\n if (err.code === -32601) throw new MethodNotFoundRpcError(err)\n if (err.code === -32602) throw new InvalidParamsRpcError(err)\n if (err.code === -32603) throw new InternalRpcError(err)\n if (err.code === -32000) throw new InvalidInputRpcError(err)\n if (err.code === -32001) throw new ResourceNotFoundRpcError(err)\n if (err.code === -32002) throw new ResourceUnavailableRpcError(err)\n if (err.code === -32003) throw new TransactionRejectedRpcError(err)\n if (err.code === -32004) throw new MethodNotSupportedRpcError(err)\n if (err.code === -32005) throw new LimitExceededRpcError(err)\n if (err.code === -32006) throw new JsonRpcVersionUnsupportedError(err)\n // TODO: 4001 - user rejected\n // TODO: 4902 - switch chain error\n if (err_ instanceof BaseError) throw err_\n throw new UnknownRpcError(err as Error)\n }\n },\n {\n delay: ({ count }) => ~~(1 << count) * retryDelay,\n retryCount,\n shouldRetryOnError: ({ error }) => isNonDeterministicError(error),\n },\n )) as TRequest\n}\n","import { Chain, Formatters } from '../types'\n\nexport function defineChain<\n TFormatters extends Formatters = Formatters,\n TChain extends Chain<TFormatters> = Chain<TFormatters>,\n>(chain: TChain) {\n return chain\n}\n","import type { Chain, Formatter, OptionalNullable } from '../../types'\n\nexport type ExtractFormatter<\n TChain extends Chain,\n TKey extends keyof NonNullable<TChain['formatters']>,\n TFallbackFormatter extends Formatter = Formatter,\n> = NonNullable<TChain['formatters']>[TKey] extends NonNullable<unknown>\n ? NonNullable<TChain['formatters']>[TKey]\n : TFallbackFormatter\n\nexport type FormatOptions<TSource, TTarget> = {\n formatter: Formatter<TSource, TTarget>\n}\n\n/**\n * Creates a type that is the result of applying `TFormatter` to `TSource`.\n *\n * @example\n * Formatted<() => { a: undefined, b: bigint }, { a: bigint }>\n * => { a: undefined, b: bigint }\n *\n * @example\n * Formatted<() => {}, { a: bigint }>\n * => { a: bigint }\n *\n * @example\n * Formatted<() => { a: bigint | undefined, b: bigint }, { a: bigint, b: bigint }, true>\n * => { a?: bigint | undefined, b: bigint }\n */\nexport type Formatted<\n TFormatter,\n TFallback,\n TAllowOptional = false,\n> = TFormatter extends Formatter\n ? // If Formatter attributes exist, attach them; otherwise attach the Target type (e.g. Block).\n ReturnType<TFormatter> extends Record<string, never>\n ? TFallback\n : TAllowOptional extends true\n ? OptionalNullable<ReturnType<TFormatter>>\n : ReturnType<TFormatter>\n : never\n\n/**\n * @description Formats a data object using the given replacer and an optional formatter.\n */\nexport function format<\n TFormatter,\n TSource extends Record<string, any>,\n TTarget,\n>(data: TSource, { formatter }: FormatOptions<TSource, TTarget>) {\n return formatter(data) as Formatted<TFormatter, TTarget>\n}\n\nexport function defineFormatter<\n TSource extends Record<string, unknown>,\n TFormatted,\n>({\n format,\n}: {\n format: (data: TSource) => TFormatted\n}) {\n return <\n TFormat extends Formatter<\n TSource,\n Partial<TFormatted> & { [key: string]: unknown }\n >,\n TExclude extends (keyof TSource)[] = [],\n >({\n exclude,\n format: formatOverride,\n }: {\n exclude?: TExclude\n format?: TFormat\n }) =>\n (data: TSource & { [key: string]: unknown }) => {\n const formatted = format(data)\n if (exclude) {\n for (const key of exclude) {\n delete (formatted as any)[key]\n }\n }\n return {\n ...formatted,\n ...formatOverride?.(data),\n } as TFormatted &\n ReturnType<TFormat> & {\n [K in TExclude[number]]: never\n }\n }\n}\n","import type {\n Chain,\n Formatter,\n Formatters,\n RpcTransaction,\n Transaction,\n} from '../../types'\nimport { hexToNumber } from '../encoding'\nimport { defineFormatter, ExtractFormatter, Formatted } from './format'\n\nexport type TransactionFormatter<TChain extends Chain = Chain> =\n ExtractFormatter<\n TChain,\n 'transaction',\n NonNullable<Formatters['transaction']>\n >\n\nexport type FormattedTransaction<\n TFormatter extends Formatter | undefined = Formatter,\n> = Formatted<TFormatter, Transaction>\n\nexport const transactionType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n} as const\n\nexport function formatTransaction(transaction: Partial<RpcTransaction>) {\n const transaction_ = {\n ...transaction,\n blockNumber: transaction.blockNumber\n ? BigInt(transaction.blockNumber)\n : null,\n gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n maxFeePerGas: transaction.maxFeePerGas\n ? BigInt(transaction.maxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n ? BigInt(transaction.maxPriorityFeePerGas)\n : undefined,\n nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n transactionIndex: transaction.transactionIndex\n ? Number(transaction.transactionIndex)\n : null,\n type: transaction.type ? transactionType[transaction.type] : undefined,\n value: transaction.value ? BigInt(transaction.value) : undefined,\n v: transaction.v ? BigInt(transaction.v) : undefined,\n }\n\n if (transaction_.type === 'legacy') {\n delete transaction_['accessList']\n delete transaction_['maxFeePerGas']\n delete transaction_['maxPriorityFeePerGas']\n }\n if (transaction_.type === 'eip2930') {\n delete transaction_['maxFeePerGas']\n delete transaction_['maxPriorityFeePerGas']\n }\n return transaction_ as Transaction\n}\n\nexport const defineTransaction = defineFormatter({ format: formatTransaction })\n","import type { Chain, Block, Formatter, Formatters, RpcBlock } from '../../types'\nimport { defineFormatter, ExtractFormatter, Formatted } from './format'\nimport { formatTransaction } from './transaction'\n\nexport type BlockFormatter<TChain extends Chain = Chain> = ExtractFormatter<\n TChain,\n 'block',\n NonNullable<Formatters['block']>\n>\n\nexport type FormattedBlock<\n TFormatter extends Formatter | undefined = Formatter,\n> = Formatted<TFormatter, Block>\n\nexport function formatBlock(block: Partial<RpcBlock>) {\n // TODO: Properly format transactions with a custom formatter\n const transactions = block.transactions?.map((transaction) => {\n if (typeof transaction === 'string') return transaction\n return formatTransaction(transaction)\n })\n return {\n ...block,\n baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n number: block.number ? BigInt(block.number) : null,\n size: block.size ? BigInt(block.size) : undefined,\n timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n transactions,\n totalDifficulty: block.totalDifficulty\n ? BigInt(block.totalDifficulty)\n : null,\n } as Block\n}\n\nexport const defineBlock = defineFormatter({ format: formatBlock })\n","import { Formatter } from '../../types'\n\n/**\n * @description Picks out the keys from `value` that exist in the formatter.\n */\nexport function extract(\n value: Record<string, unknown>,\n { formatter }: { formatter?: Formatter },\n) {\n if (!formatter) return {}\n const keys = Object.keys(formatter({}))\n return keys.reduce((data, key) => {\n if (value?.hasOwnProperty(key)) {\n ;(data as any)[key] = value[key]\n }\n return data\n }, {})\n}\n","import type { FeeHistory, RpcFeeHistory } from '../../types'\n\nexport function formatFeeHistory(feeHistory: RpcFeeHistory): FeeHistory {\n return {\n baseFeePerGas: feeHistory.baseFeePerGas.map((value) => BigInt(value)),\n gasUsedRatio: feeHistory.gasUsedRatio,\n oldestBlock: BigInt(feeHistory.oldestBlock),\n reward: feeHistory.reward?.map((reward) =>\n reward.map((value) => BigInt(value)),\n ),\n }\n}\n","import type { Log, RpcLog } from '../../types'\n\nexport function formatLog(log: Partial<RpcLog>) {\n return {\n ...log,\n blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n logIndex: log.logIndex ? BigInt(log.logIndex) : null,\n transactionIndex: log.transactionIndex\n ? BigInt(log.transactionIndex)\n : null,\n } as Log\n}\n","import type {\n Chain,\n Formatter,\n Formatters,\n RpcTransactionReceipt,\n TransactionReceipt,\n} from '../../types'\nimport { hexToNumber } from '../encoding'\nimport { defineFormatter, ExtractFormatter, Formatted } from './format'\nimport { formatLog } from './log'\nimport { transactionType } from './transaction'\n\nexport type TransactionReceiptFormatter<TChain extends Chain = Chain> =\n ExtractFormatter<\n TChain,\n 'transactionReceipt',\n NonNullable<Formatters['transactionReceipt']>\n >\n\nexport type FormattedTransactionReceipt<\n TFormatter extends Formatter | undefined = Formatter,\n> = Formatted<TFormatter, TransactionReceipt>\n\nconst statuses = {\n '0x0': 'reverted',\n '0x1': 'success',\n} as const\n\nexport function formatTransactionReceipt(\n transactionReceipt: Partial<RpcTransactionReceipt>,\n) {\n return {\n ...transactionReceipt,\n blockNumber: transactionReceipt.blockNumber\n ? BigInt(transactionReceipt.blockNumber)\n : null,\n cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n ? BigInt(transactionReceipt.cumulativeGasUsed)\n : null,\n effectiveGasPrice: transactionReceipt.effectiveGasPrice\n ? BigInt(transactionReceipt.effectiveGasPrice)\n : null,\n gasUsed: transactionReceipt.gasUsed\n ? BigInt(transactionReceipt.gasUsed)\n : null,\n logs: transactionReceipt.logs\n ? transactionReceipt.logs.map(formatLog)\n : null,\n transactionIndex: transactionReceipt.transactionIndex\n ? hexToNumber(transactionReceipt.transactionIndex)\n : null,\n status: transactionReceipt.status\n ? statuses[transactionReceipt.status]\n : null,\n type: transactionReceipt.type\n ? transactionType[transactionReceipt.type]\n : null,\n } as TransactionReceipt\n}\n\nexport const defineTransactionReceipt = defineFormatter({\n format: formatTransactionReceipt,\n})\n","import type {\n Chain,\n Formatter,\n Formatters,\n RpcTransactionRequest,\n TransactionRequest,\n} from '../../types'\nimport { defineFormatter, ExtractFormatter, Formatted } from './format'\nimport { numberToHex } from '../encoding'\n\nexport type TransactionRequestFormatter<TChain extends Chain = Chain> =\n ExtractFormatter<\n TChain,\n 'transactionRequest',\n NonNullable<Formatters['transactionRequest']>\n >\n\nexport type FormattedTransactionRequest<\n TFormatter extends Formatter | undefined = Formatter,\n> = Formatted<TFormatter, RpcTransactionRequest>\n\nexport function formatTransactionRequest(\n transactionRequest: Partial<TransactionRequest>,\n) {\n return {\n ...transactionRequest,\n gas:\n typeof transactionRequest.gas !== 'undefined'\n ? numberToHex(transactionRequest.gas)\n : undefined,\n gasPrice:\n typeof transactionRequest.gasPrice !== 'undefined'\n ? numberToHex(transactionRequest.gasPrice)\n : undefined,\n maxFeePerGas:\n typeof transactionRequest.maxFeePerGas !== 'undefined'\n ? numberToHex(transactionRequest.maxFeePerGas)\n : undefined,\n maxPriorityFeePerGas:\n typeof transactionRequest.maxPriorityFeePerGas !== 'undefined'\n ? numberToHex(transactionRequest.maxPriorityFeePerGas)\n : undefined,\n nonce:\n typeof transactionRequest.nonce !== 'undefined'\n ? numberToHex(transactionRequest.nonce)\n : undefined,\n value:\n typeof transactionRequest.value !== 'undefined'\n ? numberToHex(transactionRequest.value)\n : undefined,\n } as RpcTransactionRequest\n}\n\nexport const defineTransactionRequest = defineFormatter({\n format: formatTransactionRequest,\n})\n","import fetch from 'isomorphic-unfetch'\nimport WebSocket from 'isomorphic-ws'\nimport {\n HttpRequestError,\n RpcError,\n TimeoutError,\n WebSocketRequestError,\n} from '../errors'\nimport { withRetry } from './promise'\nimport { withTimeout } from './promise/withTimeout'\nimport { stringify } from './stringify'\n\nlet id = 0\n\ntype SuccessResult<T> = {\n method?: never\n result: T\n error?: never\n}\ntype ErrorResult<T> = {\n method?: never\n result?: never\n error: T\n}\ntype Subscription<TResult, TError> = {\n method: 'eth_subscription'\n error?: never\n result?: never\n params: {\n subscription: string\n } & (\n | {\n result: TResult\n error?: never\n }\n | {\n result?: never\n error: TError\n }\n )\n}\n\ntype RpcRequest = { method: string; params?: any[] }\n\nexport type RpcResponse<TResult = any, TError = any> = {\n jsonrpc: `${number}`\n id: number\n} & (\n | SuccessResult<TResult>\n | ErrorResult<TError>\n | Subscription<TResult, TError>\n)\n\n///////////////////////////////////////////////////\n// HTTP\n\nasync function http(\n url: string,\n {\n body,\n retryDelay = 150,\n retryCount = 3,\n timeout = 0,\n }: {\n // The RPC request body.\n body: RpcRequest\n // The base delay (in ms) between retries.\n retryDelay?: number\n // The max number of times to retry.\n retryCount?: number\n // The timeout (in ms) for the request.\n timeout?: number\n },\n) {\n const response = await withRetry(\n () =>\n withTimeout(\n async ({ signal }) => {\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n body: stringify({ jsonrpc: '2.0', id: id++, ...body }),\n signal: timeout > 0 ? signal : undefined,\n })\n return response\n },\n {\n errorInstance: new TimeoutError({ body, url }),\n timeout,\n signal: true,\n },\n ),\n {\n delay: ({ count, data }) => {\n // If we find a Retry-After header, let's retry after the given time.\n const retryAfter = data?.headers.get('Retry-After')\n if (retryAfter?.match(/\\d/)) return parseInt(retryAfter) * 1000\n\n // Otherwise, let's retry with an exponential backoff.\n return ~~(1 << count) * retryDelay\n },\n retryCount,\n shouldRetryOnResponse: async ({ data }) => {\n if (data.status >= 500) return true\n if ([408, 413, 429].includes(data.status)) return true\n return false\n },\n },\n )\n\n let data\n if (response.headers.get('Content-Type')?.startsWith('application/json')) {\n data = await response.json()\n } else {\n data = await response.text()\n }\n\n if (!response.ok) {\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n status: response.status,\n url,\n })\n }\n\n if (data.error) {\n throw new RpcError({ body, error: data.error, url })\n }\n return data as RpcResponse\n}\n\n///////////////////////////////////////////////////\n// WebSocket\n\ntype Id = string | number\ntype CallbackFn = (message: any) => void\ntype CallbackMap = Map<Id, CallbackFn>\n\nexport type Socket = WebSocket & {\n requests: CallbackMap\n subscriptions: CallbackMap\n}\n\nconst sockets = new Map<string, Socket>()\n\nexport async function getSocket(url_: string) {\n const url = new URL(url_)\n const urlKey = url.toString()\n\n let socket = sockets.get(urlKey)\n\n // If the socket already exists, return it.\n if (socket) return socket\n\n const webSocket = new WebSocket(url)\n\n // Set up a cache for incoming \"synchronous\" requests.\n const requests = new Map<Id, CallbackFn>()\n\n // Set up a cache for subscriptions (eth_subscribe).\n const subscriptions = new Map<Id, CallbackFn>()\n\n const onMessage: (event: WebSocket.MessageEvent) => void = ({ data }) => {\n const message: RpcResponse = JSON.parse(data as string)\n const isSubscription = message.method === 'eth_subscription'\n const id = isSubscription ? message.params.subscription : message.id\n const cache = isSubscription ? subscriptions : requests\n const callback = cache.get(id)\n if (callback) callback({ data })\n if (!isSubscription) cache.delete(id)\n }\n const onClose = () => {\n sockets.delete(urlKey)\n webSocket.removeEventListener('close', onClose)\n webSocket.removeEventListener('message', onMessage)\n }\n\n // Setup event listeners for RPC & subscription responses.\n webSocket.addEventListener('close', onClose)\n webSocket.addEventListener('message', onMessage)\n\n // Wait for the socket to open.\n if (webSocket.readyState === WebSocket.CONNECTING) {\n await new Promise((resolve, reject) => {\n if (!webSocket) return\n webSocket.onopen = resolve\n webSocket.onerror = reject\n })\n }\n\n // Create a new socket instance.\n socket = Object.assign(webSocket, {\n requests,\n subscriptions,\n })\n sockets.set(urlKey, socket)\n\n return socket\n}\n\nfunction webSocket(\n socket: Socket,\n {\n body,\n onData,\n onError,\n }: {\n // The RPC request body.\n body: RpcRequest\n // The callback to invoke when the request is successful.\n onData?: (message: RpcResponse) => void\n // The callback to invoke if the request errors.\n onError?: (message: RpcResponse['error']) => void\n },\n) {\n if (\n socket.readyState === socket.CLOSED ||\n socket.readyState === socket.CLOSING\n )\n throw new WebSocketRequestError({\n body,\n url: socket.url,\n details: 'Socket is closed.',\n })\n\n const id_ = id++\n\n const callback = ({ data }: { data: any }) => {\n const message: RpcResponse = JSON.parse(data)\n\n if (typeof message.id === 'number' && id_ !== message.id) return\n\n if (message.error) {\n onError?.(new RpcError({ body, error: message.error, url: socket.url }))\n } else {\n onData?.(message)\n }\n\n // If we are subscribing to a topic, we want to set up a listener for incoming\n // messages.\n if (body.method === 'eth_subscribe' && typeof message.result === 'string') {\n socket.subscriptions.set(message.result, callback)\n }\n\n // If we are unsubscribing from a topic, we want to remove the listener.\n if (body.method === 'eth_unsubscribe') {\n socket.subscriptions.delete(body.params?.[0])\n }\n }\n socket.requests.set(id_, callback)\n\n socket.send(JSON.stringify({ jsonrpc: '2.0', ...body, id: id_ }))\n\n return socket\n}\n\nasync function webSocketAsync(\n socket: Socket,\n {\n body,\n timeout = 0,\n }: {\n // The RPC request body.\n body: RpcRequest\n // The timeout (in ms) for the request.\n timeout?: number\n },\n) {\n return withTimeout(\n () =>\n new Promise<RpcResponse>((onData, onError) =>\n rpc.webSocket(socket, {\n body,\n onData,\n onError,\n }),\n ),\n {\n errorInstance: new TimeoutError({ body, url: socket.url }),\n timeout,\n },\n )\n}\n\n///////////////////////////////////////////////////\n\nexport const rpc = {\n http,\n webSocket,\n webSocketAsync,\n}\n","export function stringify(value: unknown) {\n return JSON.stringify(value, (_, value) =>\n typeof value === 'bigint' ? value.toString() : value,\n )\n}\n","export const etherUnits = {\n gwei: 9,\n wei: 18,\n}\nexport const gweiUnits = {\n ether: -9,\n wei: 9,\n}\nexport const weiUnits = {\n ether: -18,\n gwei: -9,\n}\n","export function formatUnit(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.padStart(decimals, '0')\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n","import { etherUnits } from '../../utils'\nimport { formatUnit } from './formatUnit'\n\nexport function formatEther(wei: bigint, unit: 'wei' | 'gwei' = 'wei') {\n return formatUnit(wei, etherUnits[unit])\n}\n","import { gweiUnits } from '../../utils'\nimport { formatUnit } from './formatUnit'\n\nexport function formatGwei(wei: bigint, unit: 'wei' = 'wei') {\n return formatUnit(wei, gweiUnits[unit])\n}\n","export function parseUnit(value: `${number}`, decimals: number) {\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim leading zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n integer = `${Math.round(Number(`${integer}.${fraction}`))}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [before, after] = [\n fraction.slice(0, decimals),\n fraction.slice(decimals),\n ]\n fraction = `${\n /^0+$/.test(before) ? before.slice(0, before.length - 1) : ''\n }${Math.round(Number(`${before}.${after}`))}`\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n","import { etherUnits } from '../../utils'\nimport { parseUnit } from './parseUnit'\n\nexport function parseEther(ether: `${number}`, unit: 'wei' | 'gwei' = 'wei') {\n return parseUnit(ether, etherUnits[unit])\n}\n","import { gweiUnits } from '../../utils'\nimport { parseUnit } from './parseUnit'\n\nexport function parseGwei(ether: `${number}`, unit: 'wei' = 'wei') {\n return parseUnit(ether, gweiUnits[unit])\n}\n"]}
|