viem 0.0.1-alpha.14 → 0.0.1-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chains.js +6 -5
- package/dist/chains.js.map +1 -0
- package/dist/chains.mjs +2 -1
- package/dist/chains.mjs.map +1 -0
- package/dist/chunk-4XREGFHD.js +153 -0
- package/dist/chunk-4XREGFHD.js.map +1 -0
- package/dist/{chunk-DUNJAMH5.mjs → chunk-B7A2CAHU.mjs} +95 -480
- package/dist/chunk-B7A2CAHU.mjs.map +1 -0
- package/dist/{chunk-6Z62LPKB.js → chunk-EWTLCB3N.js} +18 -6
- package/dist/chunk-EWTLCB3N.js.map +1 -0
- package/dist/chunk-KCMYVU3Z.mjs +153 -0
- package/dist/chunk-KCMYVU3Z.mjs.map +1 -0
- package/dist/{chunk-KB6CBNKW.mjs → chunk-KM6AFT2K.mjs} +18 -6
- package/dist/chunk-KM6AFT2K.mjs.map +1 -0
- package/dist/chunk-LQXQPPTU.js +256 -0
- package/dist/chunk-LQXQPPTU.js.map +1 -0
- package/dist/{chunk-5TCPFLFT.mjs → chunk-TSJ3OOJW.mjs} +2 -1
- package/dist/chunk-TSJ3OOJW.mjs.map +1 -0
- package/dist/chunk-U7QDLGQL.mjs +256 -0
- package/dist/chunk-U7QDLGQL.mjs.map +1 -0
- package/dist/{chunk-VUNR7KGG.js → chunk-WTXKCAG7.js} +146 -531
- package/dist/chunk-WTXKCAG7.js.map +1 -0
- package/dist/{chunk-E7IQYTLV.js → chunk-XJKOJIX3.js} +12 -11
- package/dist/chunk-XJKOJIX3.js.map +1 -0
- package/dist/clients/index.d.ts +6 -3
- package/dist/clients/index.js +4 -3
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/index.mjs +3 -2
- package/dist/clients/index.mjs.map +1 -0
- package/dist/createClient-cd948138.d.ts +62 -0
- package/dist/createPublicClient-989a0556.d.ts +19 -0
- package/dist/createTestClient-81507f58.d.ts +34 -0
- package/dist/createWalletClient-43f801b9.d.ts +30 -0
- package/dist/{eip1193-c001fcd5.d.ts → eip1193-4330b722.d.ts} +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +34 -29
- package/dist/index.mjs.map +1 -0
- package/dist/{parseGwei-21f98a29.d.ts → parseGwei-f2d23de6.d.ts} +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/public.js +59 -0
- package/dist/public.js.map +1 -0
- package/dist/public.mjs +59 -0
- package/dist/public.mjs.map +1 -0
- package/dist/sendTransaction-7a9d241a.d.ts +13 -0
- package/dist/stopImpersonatingAccount-8113150e.d.ts +156 -0
- package/dist/test.d.ts +7 -0
- package/dist/test.js +60 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +60 -0
- package/dist/test.mjs.map +1 -0
- package/dist/{transactionRequest-1d4e4385.d.ts → transactionReceipt-5d332aab.d.ts} +4 -32
- package/dist/transactionRequest-327eb7c2.d.ts +33 -0
- package/dist/utils/index.d.ts +4 -3
- package/dist/utils/index.js +3 -2
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +2 -1
- package/dist/utils/index.mjs.map +1 -0
- package/dist/wallet.d.ts +9 -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/watchAsset-0088384c.d.ts +39 -0
- package/dist/{stopImpersonatingAccount-fcc5a678.d.ts → watchPendingTransactions-670a7ca3.d.ts} +7 -197
- package/dist/{webSocket-3385e295.d.ts → webSocket-9a3b0b26.d.ts} +1 -1
- package/dist/window.d.ts +1 -1
- 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/package.json +18 -6
- package/src/_test/abis.ts +1225 -0
- package/src/_test/bench.ts +15 -0
- package/src/_test/constants.ts +63 -0
- package/src/_test/globalSetup.ts +11 -0
- package/src/_test/index.ts +20 -0
- package/src/_test/setup.ts +8 -0
- package/src/_test/utils.ts +112 -0
- package/src/actions/index.test.ts +72 -0
- package/src/actions/index.ts +156 -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 +96 -0
- package/src/actions/public/callContract.bench.ts +24 -0
- package/src/actions/public/callContract.test.ts +285 -0
- package/src/actions/public/callContract.ts +80 -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/createEventFilter.test.ts +245 -0
- package/src/actions/public/createEventFilter.ts +81 -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/deployContract.test.ts +56 -0
- package/src/actions/public/deployContract.ts +39 -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 +66 -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 +53 -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 +187 -0
- package/src/actions/public/getFilterChanges.ts +23 -0
- package/src/actions/public/getFilterLogs.test.ts +102 -0
- package/src/actions/public/getFilterLogs.ts +20 -0
- package/src/actions/public/getGasPrice.bench.ts +28 -0
- package/src/actions/public/getGasPrice.test.ts +8 -0
- package/src/actions/public/getGasPrice.ts +15 -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 +96 -0
- package/src/actions/public/getTransactionConfirmations.test.ts +69 -0
- package/src/actions/public/getTransactionConfirmations.ts +39 -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 +217 -0
- package/src/actions/public/getTransactionReceipt.ts +35 -0
- package/src/actions/public/index.test.ts +36 -0
- package/src/actions/public/index.ts +120 -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 +171 -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 +185 -0
- package/src/actions/public/watchBlocks.ts +95 -0
- package/src/actions/public/watchPendingTransactions.test.ts +116 -0
- package/src/actions/public/watchPendingTransactions.ts +73 -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 +28 -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 +31 -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/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 +19 -0
- package/src/actions/wallet/index.ts +27 -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 +76 -0
- package/src/actions/wallet/signMessage.test.ts +62 -0
- package/src/actions/wallet/signMessage.ts +35 -0
- package/src/actions/wallet/switchChain.test.ts +22 -0
- package/src/actions/wallet/switchChain.ts +19 -0
- package/src/actions/wallet/watchAsset.test.ts +41 -0
- package/src/actions/wallet/watchAsset.ts +16 -0
- package/src/chains.test.ts +1134 -0
- package/src/chains.ts +167 -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 +223 -0
- package/src/clients/transports/fallback.ts +48 -0
- package/src/clients/transports/http.test.ts +110 -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 +117 -0
- package/src/constants.test.ts +27 -0
- package/src/constants.ts +18 -0
- package/src/errors/abi.test.ts +83 -0
- package/src/errors/abi.ts +238 -0
- package/src/errors/address.test.ts +14 -0
- package/src/errors/address.ts +9 -0
- package/src/errors/base.test.ts +72 -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/contract.ts +125 -0
- package/src/errors/data.ts +20 -0
- package/src/errors/encoding.ts +60 -0
- package/src/errors/index.ts +77 -0
- package/src/errors/log.ts +8 -0
- package/src/errors/request.test.ts +331 -0
- package/src/errors/request.ts +163 -0
- package/src/errors/rpc.test.ts +88 -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 +12 -0
- package/src/errors/transport.ts +12 -0
- package/src/index.test.ts +208 -0
- package/src/index.ts +353 -0
- package/src/public.ts +80 -0
- package/src/test.ts +51 -0
- package/src/types/block.ts +71 -0
- package/src/types/contract.ts +327 -0
- package/src/types/eip1193.ts +1038 -0
- package/src/types/fee.ts +47 -0
- package/src/types/filter.ts +8 -0
- package/src/types/index.ts +72 -0
- package/src/types/log.ts +22 -0
- package/src/types/misc.ts +4 -0
- package/src/types/rpc.ts +35 -0
- package/src/types/transaction.ts +145 -0
- package/src/types/utils.ts +67 -0
- package/src/types/window.ts +9 -0
- package/src/utils/abi/decodeAbi.bench.ts +135 -0
- package/src/utils/abi/decodeAbi.test.ts +1615 -0
- package/src/utils/abi/decodeAbi.ts +296 -0
- package/src/utils/abi/decodeDeployData.test.ts +159 -0
- package/src/utils/abi/decodeDeployData.ts +41 -0
- package/src/utils/abi/decodeErrorResult.test.ts +130 -0
- package/src/utils/abi/decodeErrorResult.ts +28 -0
- package/src/utils/abi/decodeFunctionData.test.ts +140 -0
- package/src/utils/abi/decodeFunctionData.ts +29 -0
- package/src/utils/abi/decodeFunctionResult.test.ts +262 -0
- package/src/utils/abi/decodeFunctionResult.ts +53 -0
- package/src/utils/abi/encodeAbi.bench.ts +163 -0
- package/src/utils/abi/encodeAbi.test.ts +1414 -0
- package/src/utils/abi/encodeAbi.ts +258 -0
- package/src/utils/abi/encodeDeployData.test.ts +131 -0
- package/src/utils/abi/encodeDeployData.ts +37 -0
- package/src/utils/abi/encodeErrorResult.test.ts +197 -0
- package/src/utils/abi/encodeErrorResult.ts +40 -0
- package/src/utils/abi/encodeEventTopics.test.ts +348 -0
- package/src/utils/abi/encodeEventTopics.ts +69 -0
- package/src/utils/abi/encodeFunctionData.test.ts +140 -0
- package/src/utils/abi/encodeFunctionData.ts +38 -0
- package/src/utils/abi/encodeFunctionResult.test.ts +284 -0
- package/src/utils/abi/encodeFunctionResult.ts +39 -0
- package/src/utils/abi/formatAbiItemWithArgs.test.ts +291 -0
- package/src/utils/abi/formatAbiItemWithArgs.ts +27 -0
- package/src/utils/abi/formatAbiItemWithParams.test.ts +335 -0
- package/src/utils/abi/formatAbiItemWithParams.ts +41 -0
- package/src/utils/abi/getAbiItem.ts +5 -0
- package/src/utils/abi/index.test.ts +23 -0
- package/src/utils/abi/index.ts +38 -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 +365 -0
- package/src/utils/buildRequest.ts +45 -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 +97 -0
- package/src/utils/contract/getContractError.ts +70 -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 +39 -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 +50 -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 +41 -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 +60 -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/formatters/block.bench.ts +51 -0
- package/src/utils/formatters/block.test.ts +115 -0
- package/src/utils/formatters/block.ts +36 -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 +53 -0
- package/src/utils/formatters/index.test.ts +17 -0
- package/src/utils/formatters/index.ts +24 -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 +51 -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 +54 -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 +47 -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 +23 -0
- package/src/utils/index.test.ts +87 -0
- package/src/utils/index.ts +126 -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 +992 -0
- package/src/utils/rpc.ts +292 -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/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 +26 -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 +16 -0
- package/src/utils/unit/index.ts +6 -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 +26 -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.ts +23 -0
- package/src/window.ts +1 -0
- package/actions/package.json +0 -4
- package/dist/actions/index.d.ts +0 -8
- package/dist/actions/index.js +0 -129
- package/dist/actions/index.mjs +0 -129
- package/dist/createWalletClient-3f9fa8b6.d.ts +0 -130
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/utils/stringify.ts","../src/errors/base.ts","../src/errors/abi.ts","../src/errors/address.ts","../src/errors/block.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/formatAbiItemWithParams.ts","../src/utils/abi/decodeErrorResult.ts","../src/utils/abi/decodeFunctionData.ts","../src/utils/abi/decodeFunctionResult.ts","../src/utils/abi/encodeDeployData.ts","../src/utils/abi/getAbiItem.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/buildRequest.ts","../src/constants.ts","../src/utils/formatters/transaction.ts","../src/utils/formatters/block.ts","../src/utils/formatters/extract.ts","../src/utils/formatters/feeHistory.ts","../src/utils/formatters/format.ts","../src/utils/formatters/log.ts","../src/utils/formatters/transactionReceipt.ts","../src/utils/formatters/transactionRequest.ts","../src/utils/promise/withCache.ts","../src/utils/wait.ts","../src/utils/promise/withRetry.ts","../src/utils/promise/withTimeout.ts","../src/utils/rpc.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":["value","docsPath","size","hash","parse","format","length","lengthOfLength","encodeBytes","decodeBytes","consumed","cacheKey","response","data","webSocket","id"],"mappings":"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","sourcesContent":["export function stringify(value: unknown) {\n return JSON.stringify(value, (_, value) =>\n typeof value === 'bigint' ? value.toString() : value,\n )\n}\n","// @ts-ignore\nimport pkg from '../../package.json'\nimport { stringify } from '../utils/stringify'\n\n/* c8 ignore next */\nconst version = process.env.TEST ? '1.0.2' : pkg.version\n\ntype BaseErrorArgs = { docsPath?: string } & (\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 humanMessage: string\n details: string\n docsPath?: string\n\n name = 'ViemError'\n\n constructor(humanMessage: 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 humanMessage,\n ...(docsPath ? ['', `Docs: https://viem.sh${docsPath}`] : []),\n '',\n ...(details ? [`Details: ${details}`] : []),\n `Version: viem@${version}`,\n ...(args.cause &&\n !(args.cause instanceof BaseError) &&\n Object.keys(args.cause).length > 0\n ? [`Internal Error: ${stringify(args.cause)}`]\n : []),\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.humanMessage = humanMessage\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 \"${signature}\" here: https://sig.eth.samczsun.com/.`,\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 \"${signature}\" here: https://sig.eth.samczsun.com/.`,\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 { Abi } from 'abitype'\nimport { Address } from '../types'\nimport { BaseError } from './base'\n\nexport class ContractMethodExecutionError extends BaseError {\n abi?: Abi\n args?: unknown[]\n contractAddress?: Address\n formattedArgs?: string\n functionName?: string\n reason?: string\n sender?: Address\n\n name = 'ContractMethodExecutionError'\n\n constructor(\n message?: string,\n {\n abi,\n args,\n cause,\n contractAddress,\n formattedArgs,\n functionName,\n functionWithParams,\n sender,\n }: {\n abi?: Abi\n args?: any\n cause?: Error\n contractAddress?: Address\n formattedArgs?: string\n functionName?: string\n functionWithParams?: string\n sender?: Address\n } = {},\n ) {\n super(\n [\n message,\n ' ',\n sender && `Sender: ${sender}`,\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 `Arguments: ${[...Array(functionName?.length ?? 0).keys()]\n .map(() => ' ')\n .join('')}${formattedArgs}`,\n ]\n .filter(Boolean)\n .join('\\n'),\n {\n cause,\n },\n )\n if (message) this.reason = message\n this.abi = abi\n this.args = args\n this.contractAddress = contractAddress\n this.functionName = functionName\n this.sender = sender\n }\n}\n\nexport class ContractMethodZeroDataError extends BaseError {\n abi?: Abi\n args?: unknown[]\n contractAddress?: Address\n functionName?: string\n functionWithParams?: string\n\n name = 'ContractMethodZeroDataError'\n\n constructor({\n abi,\n args,\n cause,\n contractAddress,\n functionName,\n functionWithParams,\n }: {\n abi?: Abi\n args?: any\n cause?: Error\n contractAddress?: Address\n functionName?: string\n functionWithParams?: string\n } = {}) {\n super(\n [\n `The contract method \"${functionName}\" returned no data (\"0x\"). 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 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 functionWithParams && ` > \"0x\"`,\n ]\n .filter(Boolean)\n .join('\\n'),\n {\n cause,\n },\n )\n this.abi = abi\n this.args = args\n this.contractAddress = contractAddress\n this.functionName = functionName\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, humanMessage }: { docsPath?: string; humanMessage: string },\n ) {\n super(humanMessage, {\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, humanMessage }: { docsPath?: string; humanMessage: string },\n ) {\n super(err, { docsPath, humanMessage })\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 humanMessage:\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, { humanMessage: '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 humanMessage: '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 humanMessage: [\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, { humanMessage: '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 humanMessage: [\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, { humanMessage: '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, { humanMessage: '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, { humanMessage: '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, { humanMessage: '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, { humanMessage: '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 humanMessage: '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 humanMessage: '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 ContractMethodExecutionError,\n ContractMethodZeroDataError,\n} from '../../errors'\nimport { Address } from '../../types'\nimport {\n formatAbiItemWithArgs,\n formatAbiItemWithParams,\n getAbiItem,\n} from '../abi'\n\nexport function getContractError(\n err: unknown,\n {\n abi,\n address,\n args,\n functionName,\n sender,\n }: {\n abi: Abi\n args: any\n address?: Address\n functionName: string\n sender?: Address\n },\n) {\n const { code, message } =\n ((err as Error).cause as { code?: number; message?: string }) || {}\n\n const abiItem = getAbiItem({ abi, 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 ? formatAbiItemWithParams(abiItem, { includeName: true })\n : undefined\n\n if (err instanceof AbiDecodingZeroDataError) {\n return new ContractMethodZeroDataError({\n abi,\n args,\n cause: err as Error,\n contractAddress: address,\n functionName,\n functionWithParams,\n })\n }\n if (code === 3 || message?.includes('execution reverted')) {\n const message_ = message?.replace('execution reverted: ', '')\n return new ContractMethodExecutionError(message_, {\n abi,\n args,\n cause: err as Error,\n contractAddress: address,\n formattedArgs,\n functionName,\n functionWithParams,\n sender,\n })\n }\n return err\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> = TTo extends 'bytes'\n ? ByteArray\n : TTo extends 'hex'\n ? Hex\n : 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 { hashFunction } from './hashFunction'\n\nexport const getEventSignature = (event: `${string}(${string})`) =>\n 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} from 'abitype'\n\nimport {\n AbiEncodingArrayLengthMismatchError,\n AbiEncodingLengthMismatchError,\n InvalidAbiEncodingTypeError,\n InvalidArrayError,\n} from '../../errors'\nimport { Hex } from '../../types'\nimport { concat, padHex, size } from '../data'\nimport { boolToHex, numberToHex, stringToHex } from '../encoding'\n\nexport type EncodeAbiArgs<TParams extends readonly AbiParameter[]> = {\n params: TParams\n values: AbiParametersToPrimitiveTypes<TParams>\n}\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n */\nexport function encodeAbi<TParams extends readonly AbiParameter[]>({\n params,\n values,\n}: EncodeAbiArgs<TParams>) {\n if (params.length !== values.length)\n throw new AbiEncodingLengthMismatchError({\n expectedLength: params.length,\n givenLength: values.length,\n })\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParams = prepareParams({ params, values })\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: 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 return {\n dynamic: true,\n encoded: concat([\n padHex(numberToHex(size(value), { size: 32 })),\n padHex(value, { dir: 'right' }),\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} 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<TParams extends readonly AbiParameter[]> = {\n data: Hex\n params: TParams\n}\n\nexport function decodeAbi<TParams extends readonly AbiParameter[]>({\n data,\n params,\n}: 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,\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 formatAbiItemWithParams(\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 } from 'abitype'\nimport { AbiErrorSignatureNotFoundError } from '../../errors'\nimport { Hex } from '../../types'\nimport { slice } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { decodeAbi } from './decodeAbi'\nimport { formatAbiItemWithParams } from './formatAbiItemWithParams'\n\nexport type DecodeErrorResultArgs = { abi: Abi; data: Hex }\n\nexport function decodeErrorResult({ abi, data }: DecodeErrorResultArgs) {\n const signature = slice(data, 0, 4)\n const description = abi.find(\n (x) => signature === getFunctionSignature(formatAbiItemWithParams(x)),\n )\n if (!description)\n throw new AbiErrorSignatureNotFoundError(signature, {\n docsPath: '/docs/contract/decodeErrorResult',\n })\n return {\n errorName: (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 { 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 { formatAbiItemWithParams } from './formatAbiItemWithParams'\n\nexport type DecodeFunctionDataArgs = { abi: Abi; data: Hex }\n\nexport function decodeFunctionData({ abi, data }: DecodeFunctionDataArgs) {\n const signature = slice(data, 0, 4)\n const description = abi.find(\n (x) => signature === getFunctionSignature(formatAbiItemWithParams(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 { Abi, ExtractAbiFunctionNames } from 'abitype'\nimport {\n AbiFunctionNotFoundError,\n AbiFunctionOutputsNotFoundError,\n} from '../../errors'\n\nimport {\n ExtractFunctionNameFromAbi,\n ExtractResultFromAbi,\n Hex,\n} from '../../types'\nimport { decodeAbi } from './decodeAbi'\n\nconst docsPath = '/docs/contract/decodeFunctionResult'\n\nexport type DecodeFunctionResultArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n> = {\n abi: TAbi\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n data: Hex\n}\n\nexport type DecodeFunctionResultResponse<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n> = ExtractResultFromAbi<TAbi, TFunctionName>\n\nexport function decodeFunctionResult<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n>({\n abi,\n functionName,\n data,\n}: DecodeFunctionResultArgs<TAbi, TFunctionName>): DecodeFunctionResultResponse<\n TAbi,\n TFunctionName\n> {\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 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 } 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 = Abi> = {\n abi: TAbi\n bytecode: Hex\n} & ExtractConstructorArgsFromAbi<TAbi>\n\nexport function encodeDeployData<TAbi extends Abi = Abi>({\n abi,\n args,\n bytecode,\n}: EncodeDeployDataArgs<TAbi>) {\n if (!args || args.length === 0) return bytecode\n\n const description = abi.find((x) => 'type' in x && x.type === 'constructor')\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 } from 'abitype'\n\nexport function getAbiItem({ abi, name }: { abi: Abi; name: string }) {\n return abi.find((x) => 'name' in x && x.name === name)\n}\n","import { Abi, ExtractAbiErrorNames } from 'abitype'\nimport {\n AbiErrorInputsNotFoundError,\n AbiErrorNotFoundError,\n} from '../../errors'\n\nimport { ExtractErrorArgsFromAbi, Hex } from '../../types'\nimport { concatHex } from '../data'\nimport { getFunctionSignature } from '../hash'\nimport { encodeAbi } from './encodeAbi'\nimport { formatAbiItemWithParams } from './formatAbiItemWithParams'\nimport { getAbiItem } from './getAbiItem'\n\nconst docsPath = '/docs/contract/encodeErrorResult'\n\nexport type EncodeErrorResultArgs<\n TAbi extends Abi = Abi,\n TErrorName extends ExtractAbiErrorNames<TAbi> = any,\n> = {\n abi: TAbi\n errorName: TErrorName\n} & ExtractErrorArgsFromAbi<TAbi, TErrorName>\n\nexport function encodeErrorResult<\n TAbi extends Abi = Abi,\n TErrorName extends ExtractAbiErrorNames<TAbi> = any,\n>({ abi, errorName, args }: EncodeErrorResultArgs<TAbi, TErrorName>) {\n const description = getAbiItem({ abi, name: errorName })\n if (!description) throw new AbiErrorNotFoundError(errorName, { docsPath })\n const definition = formatAbiItemWithParams(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} from 'abitype'\n\nimport {\n AbiEventNotFoundError,\n FilterTypeNotSupportedError,\n} from '../../errors'\nimport { ExtractEventArgsFromAbi, Hex } from '../../types'\nimport { encodeBytes } from '../encoding'\nimport { keccak256, getEventSignature } from '../hash'\nimport { encodeAbi } from './encodeAbi'\nimport { formatAbiItemWithParams } from './formatAbiItemWithParams'\nimport { getAbiItem } from './getAbiItem'\n\nexport type EncodeEventTopicsArgs<\n TAbi extends Abi = Abi,\n TEventName extends ExtractAbiEventNames<TAbi> = any,\n> = {\n abi: TAbi\n eventName: TEventName\n} & ExtractEventArgsFromAbi<TAbi, TEventName>\n\nexport function encodeEventTopics<\n TAbi extends Abi = Abi,\n TEventName extends ExtractAbiEventNames<TAbi> = any,\n>({ abi, eventName, args }: EncodeEventTopicsArgs<TAbi, TEventName>) {\n const abiItem = getAbiItem({ abi, name: eventName })\n if (!abiItem)\n throw new AbiEventNotFoundError(eventName, {\n docsPath: '/docs/contract/encodeEventTopics',\n })\n const definition = formatAbiItemWithParams(abiItem)\n const signature = getEventSignature(definition as `${string}(${string})`)\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, ExtractAbiFunctionNames } 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 { formatAbiItemWithParams } from './formatAbiItemWithParams'\nimport { getAbiItem } from './getAbiItem'\n\nexport type EncodeFunctionDataArgs<\n TAbi extends Abi = Abi,\n TFunctionName extends string = any,\n> = {\n abi: TAbi\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n} & ExtractArgsFromAbi<TAbi, TFunctionName>\n\nexport function encodeFunctionData<\n TAbi extends Abi = Abi,\n TFunctionName extends string = any,\n>({ abi, args, functionName }: EncodeFunctionDataArgs<TAbi, TFunctionName>) {\n const description = getAbiItem({ abi, name: functionName })\n if (!description)\n throw new AbiFunctionNotFoundError(functionName, {\n docsPath: '/docs/contract/encodeFunctionData',\n })\n const definition = formatAbiItemWithParams(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 } 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 = Abi,\n TFunctionName extends string = any,\n> = {\n abi: TAbi\n functionName: ExtractFunctionNameFromAbi<TAbi, TFunctionName>\n result?: ExtractResultFromAbi<TAbi, TFunctionName>\n}\n\nexport function encodeFunctionResult<\n TAbi extends Abi = Abi,\n TFunctionName extends string = any,\n>({\n abi,\n functionName,\n result,\n}: EncodeFunctionResultArgs<TAbi, TFunctionName>) {\n const description = abi.find((x) => 'name' in x && x.name === functionName)\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","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'\n\nexport function buildRequest<TRequest extends (args: any) => Promise<any>>(\n request: TRequest,\n) {\n return (async (args: any) => {\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 }) as TRequest\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\nexport const transactionType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n} as const\n","import type { Chain, Formatter, Formatters } from '../../chains'\nimport type { RpcTransaction, Transaction } from '../../types'\nimport { transactionType } from '../../constants'\nimport { hexToNumber } from '../encoding'\nimport type { 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 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","import type { Chain, Formatter, Formatters } from '../../chains'\nimport type { Block, RpcBlock } from '../../types'\nimport type { 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","import { Formatter } from '../../chains'\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 { Chain, Formatter } from '../../chains'\nimport type { 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","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 { Chain, Formatter, Formatters } from '../../chains'\nimport { transactionType } from '../../constants'\nimport type { RpcTransactionReceipt, TransactionReceipt } from '../../types'\nimport { hexToNumber } from '../encoding'\nimport type { ExtractFormatter, Formatted } from './format'\nimport { formatLog } from './log'\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","import type { Chain, Formatter, Formatters } from '../../chains'\nimport type { RpcTransactionRequest, TransactionRequest } from '../../types'\nimport type { 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","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 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 = 100,\n retryCount = 2,\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 ~~((Math.random() + 0.5) * (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 = ({ data }: { data: string }) => {\n const message: RpcResponse = JSON.parse(data)\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 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 '../../constants'\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 '../../constants'\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 '../../constants'\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 '../../constants'\nimport { parseUnit } from './parseUnit'\n\nexport function parseGwei(ether: `${number}`, unit: 'wei' = 'wei') {\n return parseUnit(ether, gweiUnits[unit])\n}\n"]}
|
@@ -0,0 +1,153 @@
|
|
1
|
+
import {
|
2
|
+
BaseError,
|
3
|
+
InvalidGasArgumentsError,
|
4
|
+
checksumAddress,
|
5
|
+
encodeHex,
|
6
|
+
extract,
|
7
|
+
format,
|
8
|
+
formatTransactionRequest,
|
9
|
+
getAddress,
|
10
|
+
numberToHex
|
11
|
+
} from "./chunk-KM6AFT2K.mjs";
|
12
|
+
|
13
|
+
// src/actions/wallet/addChain.ts
|
14
|
+
async function addChain(client, chain) {
|
15
|
+
const { id, name, nativeCurrency, rpcUrls, blockExplorers } = chain;
|
16
|
+
await client.request({
|
17
|
+
method: "wallet_addEthereumChain",
|
18
|
+
params: [
|
19
|
+
{
|
20
|
+
chainId: numberToHex(id),
|
21
|
+
chainName: name,
|
22
|
+
nativeCurrency,
|
23
|
+
rpcUrls: rpcUrls.default.http,
|
24
|
+
blockExplorerUrls: blockExplorers ? Object.values(blockExplorers).map(({ url }) => url) : void 0
|
25
|
+
}
|
26
|
+
]
|
27
|
+
});
|
28
|
+
}
|
29
|
+
|
30
|
+
// src/actions/wallet/getAccounts.ts
|
31
|
+
async function getAccounts(client) {
|
32
|
+
const addresses = await client.request({ method: "eth_accounts" });
|
33
|
+
return addresses.map((address) => checksumAddress(address));
|
34
|
+
}
|
35
|
+
|
36
|
+
// src/actions/wallet/getPermissions.ts
|
37
|
+
async function getPermissions(client) {
|
38
|
+
const permissions = await client.request({ method: "wallet_getPermissions" });
|
39
|
+
return permissions;
|
40
|
+
}
|
41
|
+
|
42
|
+
// src/actions/wallet/requestAccounts.ts
|
43
|
+
async function requestAccounts(client) {
|
44
|
+
const addresses = await client.request({ method: "eth_requestAccounts" });
|
45
|
+
return addresses.map((address) => getAddress(address));
|
46
|
+
}
|
47
|
+
|
48
|
+
// src/actions/wallet/requestPermissions.ts
|
49
|
+
async function requestPermissions(client, permissions) {
|
50
|
+
return client.request({
|
51
|
+
method: "wallet_requestPermissions",
|
52
|
+
params: [permissions]
|
53
|
+
});
|
54
|
+
}
|
55
|
+
|
56
|
+
// src/actions/wallet/sendTransaction.ts
|
57
|
+
async function sendTransaction(client, {
|
58
|
+
chain,
|
59
|
+
from,
|
60
|
+
accessList,
|
61
|
+
data,
|
62
|
+
gas,
|
63
|
+
gasPrice,
|
64
|
+
maxFeePerGas,
|
65
|
+
maxPriorityFeePerGas,
|
66
|
+
nonce,
|
67
|
+
to,
|
68
|
+
value,
|
69
|
+
...rest
|
70
|
+
}) {
|
71
|
+
if (maxFeePerGas !== void 0 && maxPriorityFeePerGas !== void 0 && maxFeePerGas < maxPriorityFeePerGas)
|
72
|
+
throw new InvalidGasArgumentsError();
|
73
|
+
const formatter = chain?.formatters?.transactionRequest;
|
74
|
+
const request_ = format(
|
75
|
+
{
|
76
|
+
from,
|
77
|
+
accessList,
|
78
|
+
data,
|
79
|
+
gas,
|
80
|
+
gasPrice,
|
81
|
+
maxFeePerGas,
|
82
|
+
maxPriorityFeePerGas,
|
83
|
+
nonce,
|
84
|
+
to,
|
85
|
+
value,
|
86
|
+
...extract(rest, { formatter })
|
87
|
+
},
|
88
|
+
{
|
89
|
+
formatter: formatter || formatTransactionRequest
|
90
|
+
}
|
91
|
+
);
|
92
|
+
const hash = await client.request({
|
93
|
+
method: "eth_sendTransaction",
|
94
|
+
params: [request_]
|
95
|
+
});
|
96
|
+
return hash;
|
97
|
+
}
|
98
|
+
|
99
|
+
// src/actions/wallet/signMessage.ts
|
100
|
+
async function signMessage(client, { from, data: data_ }) {
|
101
|
+
let data;
|
102
|
+
if (typeof data_ === "string") {
|
103
|
+
if (!data_.startsWith("0x"))
|
104
|
+
throw new BaseError(
|
105
|
+
`data ("${data_}") must be a hex value. Encode it first to a hex with the \`encodeHex\` util.`,
|
106
|
+
{
|
107
|
+
docsPath: "/TODO"
|
108
|
+
}
|
109
|
+
);
|
110
|
+
data = data_;
|
111
|
+
} else {
|
112
|
+
data = encodeHex(data_);
|
113
|
+
}
|
114
|
+
const signed = await client.request({
|
115
|
+
method: "personal_sign",
|
116
|
+
params: [data, from]
|
117
|
+
});
|
118
|
+
return signed;
|
119
|
+
}
|
120
|
+
|
121
|
+
// src/actions/wallet/switchChain.ts
|
122
|
+
async function switchChain(client, { id }) {
|
123
|
+
await client.request({
|
124
|
+
method: "wallet_switchEthereumChain",
|
125
|
+
params: [
|
126
|
+
{
|
127
|
+
chainId: numberToHex(id)
|
128
|
+
}
|
129
|
+
]
|
130
|
+
});
|
131
|
+
}
|
132
|
+
|
133
|
+
// src/actions/wallet/watchAsset.ts
|
134
|
+
async function watchAsset(client, params) {
|
135
|
+
const added = await client.request({
|
136
|
+
method: "wallet_watchAsset",
|
137
|
+
params: [params]
|
138
|
+
});
|
139
|
+
return added;
|
140
|
+
}
|
141
|
+
|
142
|
+
export {
|
143
|
+
addChain,
|
144
|
+
getAccounts,
|
145
|
+
getPermissions,
|
146
|
+
requestAccounts,
|
147
|
+
requestPermissions,
|
148
|
+
sendTransaction,
|
149
|
+
signMessage,
|
150
|
+
switchChain,
|
151
|
+
watchAsset
|
152
|
+
};
|
153
|
+
//# sourceMappingURL=chunk-KCMYVU3Z.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/actions/wallet/addChain.ts","../src/actions/wallet/getAccounts.ts","../src/actions/wallet/getPermissions.ts","../src/actions/wallet/requestAccounts.ts","../src/actions/wallet/requestPermissions.ts","../src/actions/wallet/sendTransaction.ts","../src/actions/wallet/signMessage.ts","../src/actions/wallet/switchChain.ts","../src/actions/wallet/watchAsset.ts"],"sourcesContent":["import type { Chain } from '../../chains'\nimport type { WalletClient } from '../../clients'\nimport { numberToHex } from '../../utils'\n\nexport async function addChain(client: WalletClient, chain: Chain) {\n const { id, name, nativeCurrency, rpcUrls, blockExplorers } = chain\n await client.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: numberToHex(id),\n chainName: name,\n nativeCurrency,\n rpcUrls: rpcUrls.default.http,\n blockExplorerUrls: blockExplorers\n ? Object.values(blockExplorers).map(({ url }) => url)\n : undefined,\n },\n ],\n })\n}\n","import type { WalletClient } from '../../clients'\nimport { checksumAddress } from '../../utils/address'\n\nexport async function getAccounts(client: WalletClient) {\n const addresses = await client.request({ method: 'eth_accounts' })\n return addresses.map((address) => checksumAddress(address))\n}\n","import type { WalletClient } from '../../clients'\nimport type { WalletPermission } from '../../types/eip1193'\n\nexport type GetPermissionsResponse = WalletPermission[]\n\nexport async function getPermissions(client: WalletClient) {\n const permissions = await client.request({ method: 'wallet_getPermissions' })\n return permissions\n}\n","import type { WalletClient } from '../../clients'\nimport { getAddress } from '../../utils'\n\nexport async function requestAccounts(client: WalletClient) {\n const addresses = await client.request({ method: 'eth_requestAccounts' })\n return addresses.map((address) => getAddress(address))\n}\n","import type { WalletClient } from '../../clients'\nimport type { WalletPermission } from '../../types/eip1193'\n\nexport type RequestPermissionsArgs = {\n eth_accounts: Record<string, any>\n} & {\n [key: string]: Record<string, any>\n}\nexport type RequestPermissionsResponse = WalletPermission[]\n\nexport async function requestPermissions(\n client: WalletClient,\n permissions: RequestPermissionsArgs,\n) {\n return client.request({\n method: 'wallet_requestPermissions',\n params: [permissions],\n })\n}\n","import type { Chain, Formatter } from '../../chains'\nimport type { WalletClient } from '../../clients'\nimport { InvalidGasArgumentsError } from '../../errors'\nimport type {\n Hash,\n MergeIntersectionProperties,\n TransactionRequest,\n} from '../../types'\nimport type { Formatted, TransactionRequestFormatter } from '../../utils'\nimport { extract, format, formatTransactionRequest } from '../../utils'\n\nexport type FormattedTransactionRequest<\n TFormatter extends Formatter | undefined = Formatter,\n> = MergeIntersectionProperties<\n Formatted<TFormatter, TransactionRequest, true>,\n TransactionRequest\n>\n\nexport type SendTransactionArgs<TChain extends Chain = Chain> =\n FormattedTransactionRequest<TransactionRequestFormatter<TChain>> & {\n chain?: TChain\n }\n\nexport type SendTransactionResponse = Hash\n\nexport async function sendTransaction<TChain extends Chain>(\n client: WalletClient,\n {\n chain,\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n ...rest\n }: SendTransactionArgs<TChain>,\n): Promise<SendTransactionResponse> {\n if (\n maxFeePerGas !== undefined &&\n maxPriorityFeePerGas !== undefined &&\n maxFeePerGas < maxPriorityFeePerGas\n )\n throw new InvalidGasArgumentsError()\n\n const formatter = chain?.formatters?.transactionRequest\n const request_ = format(\n {\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { formatter }),\n } as TransactionRequest,\n {\n formatter: formatter || formatTransactionRequest,\n },\n )\n\n const hash = await client.request({\n method: 'eth_sendTransaction',\n params: [request_],\n })\n return hash\n}\n","import type { WalletClient } from '../../clients'\nimport { BaseError } from '../../errors'\nimport type { Address, ByteArray, Hex } from '../../types'\nimport { encodeHex } from '../../utils'\n\nexport type SignMessageArgs = {\n from: Address\n data: Hex | ByteArray\n}\n\nexport type SignMessageResponse = Hex\n\nexport async function signMessage(\n client: WalletClient,\n { from, data: data_ }: SignMessageArgs,\n): Promise<SignMessageResponse> {\n let data\n if (typeof data_ === 'string') {\n if (!data_.startsWith('0x'))\n throw new BaseError(\n `data (\"${data_}\") must be a hex value. Encode it first to a hex with the \\`encodeHex\\` util.`,\n {\n docsPath: '/TODO',\n },\n )\n data = data_\n } else {\n data = encodeHex(data_)\n }\n const signed = await client.request({\n method: 'personal_sign',\n params: [data, from],\n })\n return signed\n}\n","import type { Chain } from '../../chains'\nimport type { WalletClient } from '../../clients'\nimport { numberToHex } from '../../utils'\n\nexport type SwitchChainArgs = { id: Chain['id'] }\n\nexport async function switchChain(\n client: WalletClient,\n { id }: SwitchChainArgs,\n) {\n await client.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: numberToHex(id),\n },\n ],\n })\n}\n","import type { WalletClient } from '../../clients'\nimport type { WatchAssetParams } from '../../types/eip1193'\n\nexport type WatchAssetArgs = WatchAssetParams\nexport type WatchAssetResponse = boolean\n\nexport async function watchAsset(\n client: WalletClient,\n params: WatchAssetParams,\n): Promise<WatchAssetResponse> {\n const added = await client.request({\n method: 'wallet_watchAsset',\n params: [params],\n })\n return added\n}\n"],"mappings":"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","names":[]}
|