viem 0.0.1-cjs.10 → 0.0.1-sushi.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contract/package.json +4 -0
- package/dist/call-ac509982.d.ts +23 -0
- package/dist/chain-c4ccb458.d.ts +5 -0
- package/dist/{rpc-b77c5aee.d.ts → chain-f16512e8.d.ts} +97 -17
- package/dist/chains.d.ts +1303 -74
- package/dist/chains.js +81 -85
- package/dist/chains.js.map +1 -0
- package/dist/chains.mjs +121 -125
- package/dist/chains.mjs.map +1 -0
- package/dist/chunk-2PFNLP3F.js +192 -0
- package/dist/chunk-2PFNLP3F.js.map +1 -0
- package/dist/chunk-5ND4P6QL.mjs +192 -0
- package/dist/chunk-5ND4P6QL.mjs.map +1 -0
- package/dist/{chunk-5ZBNF5WM.js → chunk-NXCI5KQC.js} +769 -359
- package/dist/chunk-NXCI5KQC.js.map +1 -0
- package/dist/{chunk-HLVCJ7RV.mjs → chunk-O7T5NQLB.mjs} +484 -477
- package/dist/chunk-O7T5NQLB.mjs.map +1 -0
- package/dist/{chunk-2FDH6XP5.mjs → chunk-SD5X7F4U.mjs} +777 -367
- package/dist/chunk-SD5X7F4U.mjs.map +1 -0
- package/dist/{chunk-46ZFLVHC.js → chunk-UTL6F7UN.js} +519 -512
- package/dist/chunk-UTL6F7UN.js.map +1 -0
- package/dist/contract-9e76e561.d.ts +166 -0
- package/dist/contract.d.ts +123 -0
- package/dist/contract.js +53 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.mjs +53 -0
- package/dist/contract.mjs.map +1 -0
- package/dist/createClient-68ee4bb4.d.ts +62 -0
- package/dist/createPublicClient-b732194e.d.ts +19 -0
- package/dist/createTestClient-dedf321e.d.ts +34 -0
- package/dist/createWalletClient-75813d83.d.ts +30 -0
- package/dist/decodeErrorResult-0b934d23.d.ts +16 -0
- package/dist/{eip1193-020a6f13.d.ts → eip1193-6f9ba163.d.ts} +12 -9
- package/dist/ens.d.ts +82 -0
- package/dist/ens.js +216 -0
- package/dist/ens.js.map +1 -0
- package/dist/ens.mjs +216 -0
- package/dist/ens.mjs.map +1 -0
- package/dist/getAbiItem-c8e6e7d4.d.ts +97 -0
- package/dist/index.d.ts +128 -33
- package/dist/index.js +240 -244
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +257 -261
- package/dist/index.mjs.map +1 -0
- package/dist/public.d.ts +353 -0
- package/dist/public.js +58 -0
- package/dist/public.js.map +1 -0
- package/dist/public.mjs +58 -0
- package/dist/public.mjs.map +1 -0
- package/dist/readContract-4f6e2692.d.ts +10 -0
- package/dist/rpc-a5a7f376.d.ts +121 -0
- package/dist/sendTransaction-e713f90c.d.ts +12 -0
- package/dist/test.d.ts +161 -0
- package/dist/test.js +264 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +264 -0
- package/dist/test.mjs.map +1 -0
- package/dist/transactionReceipt-2a86c7c7.d.ts +26 -0
- package/dist/transactionRequest-c7794f5e.d.ts +15 -0
- package/dist/utils/index.d.ts +238 -24
- package/dist/utils/index.js +27 -2
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +30 -5
- package/dist/utils/index.mjs.map +1 -0
- package/dist/wallet.d.ts +42 -0
- package/dist/wallet.js +24 -0
- package/dist/wallet.js.map +1 -0
- package/dist/wallet.mjs +24 -0
- package/dist/wallet.mjs.map +1 -0
- package/dist/watchEvent-c346c12d.d.ts +41 -0
- package/dist/window.d.ts +3 -2
- package/dist/window.js +1 -1
- package/dist/window.js.map +1 -0
- package/dist/window.mjs +1 -0
- package/dist/window.mjs.map +1 -0
- package/ens/package.json +4 -0
- package/package.json +40 -72
- package/src/_test/abis.ts +1420 -0
- package/src/_test/bench.ts +15 -0
- package/src/_test/constants.ts +63 -0
- package/src/_test/generated.ts +128 -0
- package/src/_test/globalSetup.ts +11 -0
- package/src/_test/index.ts +25 -0
- package/src/_test/setup.ts +8 -0
- package/src/_test/utils.ts +155 -0
- package/src/actions/ens/getEnsAddress.bench.ts +26 -0
- package/src/actions/ens/getEnsAddress.test.ts +97 -0
- package/src/actions/ens/getEnsAddress.ts +122 -0
- package/src/actions/ens/getEnsName.bench.ts +30 -0
- package/src/actions/ens/getEnsName.test.ts +101 -0
- package/src/actions/ens/getEnsName.ts +106 -0
- package/src/actions/ens/index.test.ts +12 -0
- package/src/actions/ens/index.ts +3 -0
- package/src/actions/index.test.ts +81 -0
- package/src/actions/index.ts +182 -0
- package/src/actions/public/call.bench.ts +48 -0
- package/src/actions/public/call.test.ts +99 -0
- package/src/actions/public/call.ts +97 -0
- package/src/actions/public/createBlockFilter.bench.ts +11 -0
- package/src/actions/public/createBlockFilter.test.ts +9 -0
- package/src/actions/public/createBlockFilter.ts +14 -0
- package/src/actions/public/createContractEventFilter.test.ts +119 -0
- package/src/actions/public/createContractEventFilter.ts +69 -0
- package/src/actions/public/createEventFilter.test.ts +277 -0
- package/src/actions/public/createEventFilter.ts +93 -0
- package/src/actions/public/createPendingTransactionFilter.bench.ts +11 -0
- package/src/actions/public/createPendingTransactionFilter.test.ts +9 -0
- package/src/actions/public/createPendingTransactionFilter.ts +14 -0
- package/src/actions/public/estimateGas.bench.ts +46 -0
- package/src/actions/public/estimateGas.test.ts +92 -0
- package/src/actions/public/estimateGas.ts +61 -0
- package/src/actions/public/getBalance.test.ts +83 -0
- package/src/actions/public/getBalance.ts +37 -0
- package/src/actions/public/getBlock.bench.ts +28 -0
- package/src/actions/public/getBlock.test.ts +575 -0
- package/src/actions/public/getBlock.ts +65 -0
- package/src/actions/public/getBlockNumber.bench.ts +28 -0
- package/src/actions/public/getBlockNumber.test.ts +27 -0
- package/src/actions/public/getBlockNumber.ts +32 -0
- package/src/actions/public/getBlockTransactionCount.bench.ts +15 -0
- package/src/actions/public/getBlockTransactionCount.test.ts +57 -0
- package/src/actions/public/getBlockTransactionCount.ts +52 -0
- package/src/actions/public/getBytecode.test.ts +27 -0
- package/src/actions/public/getBytecode.ts +32 -0
- package/src/actions/public/getChainId.bench.ts +15 -0
- package/src/actions/public/getChainId.test.ts +8 -0
- package/src/actions/public/getChainId.ts +7 -0
- package/src/actions/public/getFeeHistory.bench.ts +18 -0
- package/src/actions/public/getFeeHistory.test.ts +137 -0
- package/src/actions/public/getFeeHistory.ts +44 -0
- package/src/actions/public/getFilterChanges.bench.ts +13 -0
- package/src/actions/public/getFilterChanges.test.ts +383 -0
- package/src/actions/public/getFilterChanges.ts +23 -0
- package/src/actions/public/getFilterLogs.test.ts +297 -0
- package/src/actions/public/getFilterLogs.ts +20 -0
- package/src/actions/public/getGasPrice.bench.ts +19 -0
- package/src/actions/public/getGasPrice.test.ts +8 -0
- package/src/actions/public/getGasPrice.ts +15 -0
- package/src/actions/public/getLogs.test.ts +306 -0
- package/src/actions/public/getLogs.ts +84 -0
- package/src/actions/public/getStorageAt.test.ts +34 -0
- package/src/actions/public/getStorageAt.ts +32 -0
- package/src/actions/public/getTransaction.bench.ts +33 -0
- package/src/actions/public/getTransaction.test.ts +311 -0
- package/src/actions/public/getTransaction.ts +95 -0
- package/src/actions/public/getTransactionConfirmations.test.ts +69 -0
- package/src/actions/public/getTransactionConfirmations.ts +38 -0
- package/src/actions/public/getTransactionCount.test.ts +56 -0
- package/src/actions/public/getTransactionCount.ts +34 -0
- package/src/actions/public/getTransactionReceipt.bench.ts +33 -0
- package/src/actions/public/getTransactionReceipt.test.ts +179 -0
- package/src/actions/public/getTransactionReceipt.ts +34 -0
- package/src/actions/public/index.test.ts +43 -0
- package/src/actions/public/index.ts +146 -0
- package/src/actions/public/multicall.test.ts +452 -0
- package/src/actions/public/multicall.ts +108 -0
- package/src/actions/public/readContract.test.ts +328 -0
- package/src/actions/public/readContract.ts +73 -0
- package/src/actions/public/simulateContract.bench.ts +41 -0
- package/src/actions/public/simulateContract.test.ts +410 -0
- package/src/actions/public/simulateContract.ts +91 -0
- package/src/actions/public/uninstallFilter.bench.ts +13 -0
- package/src/actions/public/uninstallFilter.test.ts +65 -0
- package/src/actions/public/uninstallFilter.ts +17 -0
- package/src/actions/public/waitForTransactionReceipt.test.ts +322 -0
- package/src/actions/public/waitForTransactionReceipt.ts +170 -0
- package/src/actions/public/watchBlockNumber.test.ts +166 -0
- package/src/actions/public/watchBlockNumber.ts +79 -0
- package/src/actions/public/watchBlocks.test.ts +210 -0
- package/src/actions/public/watchBlocks.ts +114 -0
- package/src/actions/public/watchContractEvent.test.ts +305 -0
- package/src/actions/public/watchContractEvent.ts +108 -0
- package/src/actions/public/watchEvent.test.ts +195 -0
- package/src/actions/public/watchEvent.ts +95 -0
- package/src/actions/public/watchPendingTransactions.test.ts +116 -0
- package/src/actions/public/watchPendingTransactions.ts +74 -0
- package/src/actions/test/dropTransaction.test.ts +34 -0
- package/src/actions/test/dropTransaction.ts +17 -0
- package/src/actions/test/getAutomine.test.ts +14 -0
- package/src/actions/test/getAutomine.ts +11 -0
- package/src/actions/test/getTxpoolContent.test.ts +45 -0
- package/src/actions/test/getTxpoolContent.ts +7 -0
- package/src/actions/test/getTxpoolStatus.test.ts +41 -0
- package/src/actions/test/getTxpoolStatus.ts +12 -0
- package/src/actions/test/impersonateAccount.test.ts +26 -0
- package/src/actions/test/impersonateAccount.ts +17 -0
- package/src/actions/test/increaseTime.test.ts +18 -0
- package/src/actions/test/increaseTime.ts +17 -0
- package/src/actions/test/index.test.ts +38 -0
- package/src/actions/test/index.ts +77 -0
- package/src/actions/test/inspectTxpool.test.ts +50 -0
- package/src/actions/test/inspectTxpool.ts +7 -0
- package/src/actions/test/mine.test.ts +20 -0
- package/src/actions/test/mine.ts +16 -0
- package/src/actions/test/removeBlockTimestampInterval.test.ts +23 -0
- package/src/actions/test/removeBlockTimestampInterval.ts +7 -0
- package/src/actions/test/reset.test.ts +19 -0
- package/src/actions/test/reset.ts +18 -0
- package/src/actions/test/revert.test.ts +39 -0
- package/src/actions/test/revert.ts +14 -0
- package/src/actions/test/sendUnsignedTransaction.test.ts +52 -0
- package/src/actions/test/sendUnsignedTransaction.ts +19 -0
- package/src/actions/test/setAutomine.test.ts +14 -0
- package/src/actions/test/setAutomine.ts +8 -0
- package/src/actions/test/setBalance.test.ts +29 -0
- package/src/actions/test/setBalance.ts +20 -0
- package/src/actions/test/setBlockGasLimit.test.ts +21 -0
- package/src/actions/test/setBlockGasLimit.ts +17 -0
- package/src/actions/test/setBlockTimestampInterval.test.ts +23 -0
- package/src/actions/test/setBlockTimestampInterval.ts +16 -0
- package/src/actions/test/setCode.test.ts +26 -0
- package/src/actions/test/setCode.ts +19 -0
- package/src/actions/test/setCoinbase.test.ts +11 -0
- package/src/actions/test/setCoinbase.ts +17 -0
- package/src/actions/test/setIntervalMining.test.ts +30 -0
- package/src/actions/test/setIntervalMining.ts +16 -0
- package/src/actions/test/setLoggingEnabled.test.ts +10 -0
- package/src/actions/test/setLoggingEnabled.ts +8 -0
- package/src/actions/test/setMinGasPrice.test.ts +22 -0
- package/src/actions/test/setMinGasPrice.ts +17 -0
- package/src/actions/test/setNextBlockBaseFeePerGas.test.ts +23 -0
- package/src/actions/test/setNextBlockBaseFeePerGas.ts +17 -0
- package/src/actions/test/setNextBlockTimestamp.test.ts +19 -0
- package/src/actions/test/setNextBlockTimestamp.ts +17 -0
- package/src/actions/test/setNonce.test.ts +28 -0
- package/src/actions/test/setNonce.ts +20 -0
- package/src/actions/test/setRpcUrl.test.ts +9 -0
- package/src/actions/test/setRpcUrl.ts +8 -0
- package/src/actions/test/setStorageAt.test.ts +36 -0
- package/src/actions/test/setStorageAt.ts +26 -0
- package/src/actions/test/snapshot.test.ts +18 -0
- package/src/actions/test/snapshot.ts +7 -0
- package/src/actions/test/stopImpersonatingAccount.test.ts +29 -0
- package/src/actions/test/stopImpersonatingAccount.ts +17 -0
- package/src/actions/wallet/addChain.test.ts +14 -0
- package/src/actions/wallet/addChain.ts +21 -0
- package/src/actions/wallet/deployContract.test.ts +55 -0
- package/src/actions/wallet/deployContract.ts +38 -0
- package/src/actions/wallet/getAccounts.test.ts +22 -0
- package/src/actions/wallet/getAccounts.ts +7 -0
- package/src/actions/wallet/getPermissions.test.ts +24 -0
- package/src/actions/wallet/getPermissions.ts +9 -0
- package/src/actions/wallet/index.test.ts +21 -0
- package/src/actions/wallet/index.ts +36 -0
- package/src/actions/wallet/requestAccounts.test.ts +13 -0
- package/src/actions/wallet/requestAccounts.ts +7 -0
- package/src/actions/wallet/requestPermissions.test.ts +26 -0
- package/src/actions/wallet/requestPermissions.ts +19 -0
- package/src/actions/wallet/sendTransaction.bench.ts +57 -0
- package/src/actions/wallet/sendTransaction.test.ts +440 -0
- package/src/actions/wallet/sendTransaction.ts +77 -0
- package/src/actions/wallet/signMessage.test.ts +61 -0
- package/src/actions/wallet/signMessage.ts +35 -0
- package/src/actions/wallet/switchChain.test.ts +21 -0
- package/src/actions/wallet/switchChain.ts +19 -0
- package/src/actions/wallet/watchAsset.test.ts +40 -0
- package/src/actions/wallet/watchAsset.ts +16 -0
- package/src/actions/wallet/writeContract.test.ts +84 -0
- package/src/actions/wallet/writeContract.ts +47 -0
- package/src/chains.test.ts +439 -0
- package/src/chains.ts +99 -0
- package/src/clients/createClient.test.ts +295 -0
- package/src/clients/createClient.ts +81 -0
- package/src/clients/createPublicClient.test.ts +165 -0
- package/src/clients/createPublicClient.ts +49 -0
- package/src/clients/createTestClient.test.ts +145 -0
- package/src/clients/createTestClient.ts +72 -0
- package/src/clients/createWalletClient.test.ts +121 -0
- package/src/clients/createWalletClient.ts +54 -0
- package/src/clients/index.test.ts +19 -0
- package/src/clients/index.ts +31 -0
- package/src/clients/transports/createTransport.test.ts +58 -0
- package/src/clients/transports/createTransport.ts +48 -0
- package/src/clients/transports/custom.test.ts +98 -0
- package/src/clients/transports/custom.ts +34 -0
- package/src/clients/transports/fallback.test.ts +393 -0
- package/src/clients/transports/fallback.ts +58 -0
- package/src/clients/transports/http.test.ts +109 -0
- package/src/clients/transports/http.ts +51 -0
- package/src/clients/transports/index.test.ts +15 -0
- package/src/clients/transports/index.ts +17 -0
- package/src/clients/transports/webSocket.test.ts +164 -0
- package/src/clients/transports/webSocket.ts +118 -0
- package/src/constants/abis.test.ts +53 -0
- package/src/constants/abis.ts +44 -0
- package/src/constants/index.test.ts +14 -0
- package/src/constants/index.ts +3 -0
- package/src/constants/solidity.test.ts +41 -0
- package/src/constants/solidity.ts +35 -0
- package/src/contract.test.ts +32 -0
- package/src/contract.ts +68 -0
- package/src/ens.test.ts +15 -0
- package/src/ens.ts +8 -0
- package/src/errors/abi.test.ts +81 -0
- package/src/errors/abi.ts +254 -0
- package/src/errors/address.test.ts +14 -0
- package/src/errors/address.ts +9 -0
- package/src/errors/base.test.ts +114 -0
- package/src/errors/base.ts +57 -0
- package/src/errors/block.test.ts +24 -0
- package/src/errors/block.ts +18 -0
- package/src/errors/chain.test.ts +46 -0
- package/src/errors/chain.ts +33 -0
- package/src/errors/contract.test.ts +233 -0
- package/src/errors/contract.ts +178 -0
- package/src/errors/data.ts +20 -0
- package/src/errors/encoding.ts +60 -0
- package/src/errors/index.ts +82 -0
- package/src/errors/log.ts +8 -0
- package/src/errors/request.test.ts +330 -0
- package/src/errors/request.ts +163 -0
- package/src/errors/rpc.test.ts +87 -0
- package/src/errors/rpc.ts +113 -0
- package/src/errors/transaction.test.ts +83 -0
- package/src/errors/transaction.ts +54 -0
- package/src/errors/transport.test.ts +11 -0
- package/src/errors/transport.ts +12 -0
- package/src/index.test.ts +116 -0
- package/src/index.ts +132 -0
- package/src/public.test.ts +36 -0
- package/src/public.ts +76 -0
- package/src/test.test.ts +38 -0
- package/src/test.ts +52 -0
- package/src/types/block.ts +71 -0
- package/src/types/chain.ts +6 -0
- package/src/types/contract.ts +497 -0
- package/src/types/eip1193.ts +1041 -0
- package/src/types/fee.ts +47 -0
- package/src/types/filter.ts +8 -0
- package/src/types/formatter.ts +23 -0
- package/src/types/index.ts +84 -0
- package/src/types/log.ts +22 -0
- package/src/types/misc.ts +5 -0
- package/src/types/multicall.ts +82 -0
- package/src/types/rpc.ts +35 -0
- package/src/types/transaction.ts +145 -0
- package/src/types/utils.ts +88 -0
- package/src/types/window.ts +9 -0
- package/src/utils/abi/decodeAbi.bench.ts +135 -0
- package/src/utils/abi/decodeAbi.test.ts +1614 -0
- package/src/utils/abi/decodeAbi.ts +300 -0
- package/src/utils/abi/decodeDeployData.test.ts +151 -0
- package/src/utils/abi/decodeDeployData.ts +44 -0
- package/src/utils/abi/decodeErrorResult.test.ts +230 -0
- package/src/utils/abi/decodeErrorResult.ts +45 -0
- package/src/utils/abi/decodeEventLog.test.ts +542 -0
- package/src/utils/abi/decodeEventLog.ts +107 -0
- package/src/utils/abi/decodeFunctionData.test.ts +138 -0
- package/src/utils/abi/decodeFunctionData.ts +32 -0
- package/src/utils/abi/decodeFunctionResult.test.ts +333 -0
- package/src/utils/abi/decodeFunctionResult.ts +57 -0
- package/src/utils/abi/encodeAbi.bench.ts +163 -0
- package/src/utils/abi/encodeAbi.test.ts +1447 -0
- package/src/utils/abi/encodeAbi.ts +273 -0
- package/src/utils/abi/encodeDeployData.test.ts +124 -0
- package/src/utils/abi/encodeDeployData.ts +40 -0
- package/src/utils/abi/encodeErrorResult.test.ts +192 -0
- package/src/utils/abi/encodeErrorResult.ts +47 -0
- package/src/utils/abi/encodeEventTopics.test.ts +345 -0
- package/src/utils/abi/encodeEventTopics.ts +75 -0
- package/src/utils/abi/encodeFunctionData.test.ts +138 -0
- package/src/utils/abi/encodeFunctionData.ts +42 -0
- package/src/utils/abi/encodeFunctionResult.test.ts +279 -0
- package/src/utils/abi/encodeFunctionResult.ts +41 -0
- package/src/utils/abi/formatAbiItem.test.ts +335 -0
- package/src/utils/abi/formatAbiItem.ts +41 -0
- package/src/utils/abi/formatAbiItemWithArgs.test.ts +291 -0
- package/src/utils/abi/formatAbiItemWithArgs.ts +27 -0
- package/src/utils/abi/getAbiItem.test.ts +547 -0
- package/src/utils/abi/getAbiItem.ts +95 -0
- package/src/utils/abi/index.test.ts +24 -0
- package/src/utils/abi/index.ts +48 -0
- package/src/utils/address/getAddress.bench.ts +22 -0
- package/src/utils/address/getAddress.test.ts +46 -0
- package/src/utils/address/getAddress.ts +28 -0
- package/src/utils/address/getContractAddress.bench.ts +20 -0
- package/src/utils/address/getContractAddress.test.ts +78 -0
- package/src/utils/address/getContractAddress.ts +59 -0
- package/src/utils/address/index.test.ts +17 -0
- package/src/utils/address/index.ts +16 -0
- package/src/utils/address/isAddress.test.ts +10 -0
- package/src/utils/address/isAddress.ts +10 -0
- package/src/utils/address/isAddressEqual.test.ts +55 -0
- package/src/utils/address/isAddressEqual.ts +6 -0
- package/src/utils/buildRequest.test.ts +428 -0
- package/src/utils/buildRequest.ts +72 -0
- package/src/utils/chain.test.ts +43 -0
- package/src/utils/chain.ts +8 -0
- package/src/utils/contract/extractFunctionParts.test.ts +109 -0
- package/src/utils/contract/extractFunctionParts.ts +27 -0
- package/src/utils/contract/getContractError.test.ts +282 -0
- package/src/utils/contract/getContractError.ts +58 -0
- package/src/utils/contract/index.test.ts +15 -0
- package/src/utils/contract/index.ts +8 -0
- package/src/utils/data/concat.test.ts +35 -0
- package/src/utils/data/concat.ts +34 -0
- package/src/utils/data/index.test.ts +23 -0
- package/src/utils/data/index.ts +13 -0
- package/src/utils/data/isBytes.test.ts +9 -0
- package/src/utils/data/isBytes.ts +7 -0
- package/src/utils/data/isHex.test.ts +13 -0
- package/src/utils/data/isHex.ts +5 -0
- package/src/utils/data/pad.bench.ts +30 -0
- package/src/utils/data/pad.test.ts +367 -0
- package/src/utils/data/pad.ts +53 -0
- package/src/utils/data/size.test.ts +18 -0
- package/src/utils/data/size.ts +13 -0
- package/src/utils/data/slice.test.ts +203 -0
- package/src/utils/data/slice.ts +60 -0
- package/src/utils/data/trim.bench.ts +34 -0
- package/src/utils/data/trim.test.ts +175 -0
- package/src/utils/data/trim.ts +33 -0
- package/src/utils/encoding/decodeBytes.bench.ts +40 -0
- package/src/utils/encoding/decodeBytes.test.ts +144 -0
- package/src/utils/encoding/decodeBytes.ts +63 -0
- package/src/utils/encoding/decodeHex.bench.ts +24 -0
- package/src/utils/encoding/decodeHex.test.ts +167 -0
- package/src/utils/encoding/decodeHex.ts +76 -0
- package/src/utils/encoding/decodeRlp.bench.ts +34 -0
- package/src/utils/encoding/decodeRlp.test.ts +350 -0
- package/src/utils/encoding/decodeRlp.ts +121 -0
- package/src/utils/encoding/encodeBytes.bench.ts +29 -0
- package/src/utils/encoding/encodeBytes.test.ts +676 -0
- package/src/utils/encoding/encodeBytes.ts +59 -0
- package/src/utils/encoding/encodeHex.bench.ts +49 -0
- package/src/utils/encoding/encodeHex.test.ts +232 -0
- package/src/utils/encoding/encodeHex.ts +104 -0
- package/src/utils/encoding/encodeRlp.bench.ts +54 -0
- package/src/utils/encoding/encodeRlp.test.ts +254 -0
- package/src/utils/encoding/encodeRlp.ts +48 -0
- package/src/utils/encoding/index.test.ts +32 -0
- package/src/utils/encoding/index.ts +36 -0
- package/src/utils/ens/index.test.ts +14 -0
- package/src/utils/ens/index.ts +7 -0
- package/src/utils/ens/labelhash.test.ts +55 -0
- package/src/utils/ens/labelhash.ts +16 -0
- package/src/utils/ens/namehash.test.ts +65 -0
- package/src/utils/ens/namehash.ts +28 -0
- package/src/utils/ens/normalize.bench.ts +14 -0
- package/src/utils/ens/normalize.test.ts +35 -0
- package/src/utils/ens/normalize.ts +14 -0
- package/src/utils/ens/packetToBytes.test.ts +11 -0
- package/src/utils/ens/packetToBytes.ts +29 -0
- package/src/utils/formatters/block.bench.ts +51 -0
- package/src/utils/formatters/block.test.ts +115 -0
- package/src/utils/formatters/block.ts +37 -0
- package/src/utils/formatters/extract.test.ts +14 -0
- package/src/utils/formatters/extract.ts +18 -0
- package/src/utils/formatters/feeHistory.test.ts +66 -0
- package/src/utils/formatters/feeHistory.ts +12 -0
- package/src/utils/formatters/format.test.ts +93 -0
- package/src/utils/formatters/format.ts +90 -0
- package/src/utils/formatters/index.test.ts +27 -0
- package/src/utils/formatters/index.ts +34 -0
- package/src/utils/formatters/log.test.ts +79 -0
- package/src/utils/formatters/log.ts +12 -0
- package/src/utils/formatters/transaction.test.ts +271 -0
- package/src/utils/formatters/transaction.ts +63 -0
- package/src/utils/formatters/transactionReceipt.bench.ts +73 -0
- package/src/utils/formatters/transactionReceipt.test.ts +151 -0
- package/src/utils/formatters/transactionReceipt.ts +63 -0
- package/src/utils/formatters/transactionRequest.bench.ts +29 -0
- package/src/utils/formatters/transactionRequest.test.ts +237 -0
- package/src/utils/formatters/transactionRequest.ts +56 -0
- package/src/utils/hash/getEventSignature.test.ts +61 -0
- package/src/utils/hash/getEventSignature.ts +4 -0
- package/src/utils/hash/getFunctionSignature.test.ts +22 -0
- package/src/utils/hash/getFunctionSignature.ts +5 -0
- package/src/utils/hash/hashFunction.test.ts +65 -0
- package/src/utils/hash/hashFunction.ts +12 -0
- package/src/utils/hash/index.test.ts +13 -0
- package/src/utils/hash/index.ts +5 -0
- package/src/utils/hash/keccak256.test.ts +59 -0
- package/src/utils/hash/keccak256.ts +21 -0
- package/src/utils/index.test.ts +111 -0
- package/src/utils/index.ts +142 -0
- package/src/utils/observe.test.ts +176 -0
- package/src/utils/observe.ts +66 -0
- package/src/utils/poll.test.ts +127 -0
- package/src/utils/poll.ts +42 -0
- package/src/utils/promise/index.test.ts +14 -0
- package/src/utils/promise/index.ts +3 -0
- package/src/utils/promise/withCache.test.ts +97 -0
- package/src/utils/promise/withCache.ts +73 -0
- package/src/utils/promise/withRetry.test.ts +231 -0
- package/src/utils/promise/withRetry.ts +61 -0
- package/src/utils/promise/withTimeout.test.ts +37 -0
- package/src/utils/promise/withTimeout.ts +39 -0
- package/src/utils/rpc.test.ts +990 -0
- package/src/utils/rpc.ts +294 -0
- package/src/utils/stringify.test.ts +13 -0
- package/src/utils/stringify.ts +5 -0
- package/src/utils/uid.ts +14 -0
- package/src/utils/unit/constants.test.ts +22 -0
- package/src/utils/unit/constants.ts +12 -0
- package/src/utils/unit/formatEther.test.ts +75 -0
- package/src/utils/unit/formatEther.ts +6 -0
- package/src/utils/unit/formatGwei.test.ts +32 -0
- package/src/utils/unit/formatGwei.ts +6 -0
- package/src/utils/unit/formatUnit.bench.ts +21 -0
- package/src/utils/unit/formatUnit.test.ts +40 -0
- package/src/utils/unit/formatUnit.ts +16 -0
- package/src/utils/unit/index.test.ts +28 -0
- package/src/utils/unit/index.ts +7 -0
- package/src/utils/unit/parseEther.test.ts +126 -0
- package/src/utils/unit/parseEther.ts +6 -0
- package/src/utils/unit/parseGwei.test.ts +50 -0
- package/src/utils/unit/parseGwei.ts +6 -0
- package/src/utils/unit/parseUnit.bench.ts +21 -0
- package/src/utils/unit/parseUnit.test.ts +54 -0
- package/src/utils/unit/parseUnit.ts +27 -0
- package/src/utils/wait.ts +3 -0
- package/src/wallet.test.ts +19 -0
- package/src/wallet.ts +23 -0
- package/src/window.ts +1 -0
- package/wallet/package.json +4 -0
- package/actions/package.json +0 -4
- package/clients/package.json +0 -4
- package/dist/actions/index.d.ts +0 -8
- package/dist/actions/index.js +0 -125
- package/dist/actions/index.mjs +0 -125
- package/dist/chunk-CWCWWGBC.mjs +0 -258
- package/dist/chunk-SGTIBKHG.js +0 -258
- package/dist/clients/index.d.ts +0 -7
- package/dist/clients/index.js +0 -23
- package/dist/clients/index.mjs +0 -23
- package/dist/createWalletClient-d612fe08.d.ts +0 -130
- package/dist/parseGwei-7c87ff41.d.ts +0 -278
- package/dist/rpc-26932bae.d.ts +0 -61
- package/dist/transactionRequest-08d30731.d.ts +0 -132
- package/dist/watchAsset-bc6373f4.d.ts +0 -534
- package/dist/webSocket-7f88e9e0.d.ts +0 -83
@@ -0,0 +1,22 @@
|
|
1
|
+
import { bench, describe } from 'vitest'
|
2
|
+
import { utils } from 'ethers'
|
3
|
+
|
4
|
+
import Web3 from 'web3'
|
5
|
+
|
6
|
+
import { getAddress } from './getAddress'
|
7
|
+
|
8
|
+
describe('Get Address', () => {
|
9
|
+
bench('viem: getAddress', () => {
|
10
|
+
getAddress('0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC')
|
11
|
+
})
|
12
|
+
|
13
|
+
bench('ethers: getAddress', () => {
|
14
|
+
utils.getAddress('0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC')
|
15
|
+
})
|
16
|
+
|
17
|
+
bench('web3.js: checkAddressChecksum', () => {
|
18
|
+
Web3.utils.checkAddressChecksum(
|
19
|
+
'0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
|
20
|
+
)
|
21
|
+
})
|
22
|
+
})
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
2
|
+
|
3
|
+
import { getAddress } from './getAddress'
|
4
|
+
|
5
|
+
test('checksums address', () => {
|
6
|
+
expect(
|
7
|
+
getAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac'),
|
8
|
+
).toMatchInlineSnapshot('"0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC"')
|
9
|
+
expect(
|
10
|
+
getAddress('0xa0cf798816d4b9b9866b5330eea46a18382f251e'),
|
11
|
+
).toMatchInlineSnapshot('"0xA0Cf798816D4b9b9866b5330EEa46a18382f251e"')
|
12
|
+
expect(
|
13
|
+
getAddress('0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'),
|
14
|
+
).toMatchInlineSnapshot('"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"')
|
15
|
+
expect(
|
16
|
+
getAddress('0x70997970c51812dc3a010c7d01b50e0d17dc79c8'),
|
17
|
+
).toMatchInlineSnapshot('"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"')
|
18
|
+
expect(
|
19
|
+
getAddress('0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc'),
|
20
|
+
).toMatchInlineSnapshot('"0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC"')
|
21
|
+
expect(
|
22
|
+
getAddress('0x90f79bf6eb2c4f870365e785982e1f101e93b906'),
|
23
|
+
).toMatchInlineSnapshot('"0x90F79bf6EB2c4f870365E785982E1f101E93b906"')
|
24
|
+
expect(
|
25
|
+
getAddress('0x15d34aaf54267db7d7c367839aaf71a00a2c6a65'),
|
26
|
+
).toMatchInlineSnapshot('"0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65"')
|
27
|
+
})
|
28
|
+
|
29
|
+
describe('errors', () => {
|
30
|
+
test('invalid address', () => {
|
31
|
+
expect(() =>
|
32
|
+
getAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az'),
|
33
|
+
).toThrowErrorMatchingInlineSnapshot(`
|
34
|
+
"Address \\"0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az\\" is invalid.
|
35
|
+
|
36
|
+
Version: viem@1.0.2"
|
37
|
+
`)
|
38
|
+
expect(() =>
|
39
|
+
getAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678aff'),
|
40
|
+
).toThrowErrorMatchingInlineSnapshot(`
|
41
|
+
"Address \\"0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678aff\\" is invalid.
|
42
|
+
|
43
|
+
Version: viem@1.0.2"
|
44
|
+
`)
|
45
|
+
})
|
46
|
+
})
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { InvalidAddressError } from '../../errors'
|
2
|
+
import type { Address } from '../../types'
|
3
|
+
import { stringToBytes } from '../encoding'
|
4
|
+
import { keccak256 } from '../hash'
|
5
|
+
|
6
|
+
const addressRegex = /^(0x)?[a-fA-F0-9]{40}$/
|
7
|
+
|
8
|
+
export function checksumAddress(address_: Address): Address {
|
9
|
+
const hexAddress = address_.substring(2).toLowerCase()
|
10
|
+
const hash = keccak256(stringToBytes(hexAddress), 'bytes')
|
11
|
+
|
12
|
+
let address = hexAddress.split('')
|
13
|
+
for (let i = 0; i < 40; i += 2) {
|
14
|
+
if (hash?.[i >> 1] >> 4 >= 8 && address[i]) {
|
15
|
+
address[i] = address[i].toUpperCase()
|
16
|
+
}
|
17
|
+
if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {
|
18
|
+
address[i + 1] = address[i + 1].toUpperCase()
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
return `0x${address.join('')}`
|
23
|
+
}
|
24
|
+
|
25
|
+
export function getAddress(address: Address) {
|
26
|
+
if (!addressRegex.test(address)) throw new InvalidAddressError({ address })
|
27
|
+
return checksumAddress(address)
|
28
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { bench, describe } from 'vitest'
|
2
|
+
import { utils } from 'ethers'
|
3
|
+
|
4
|
+
import { getContractAddress } from './getContractAddress'
|
5
|
+
|
6
|
+
describe('Get Contract Address (CREATE)', () => {
|
7
|
+
bench('viem: getContractAddress', () => {
|
8
|
+
getContractAddress({
|
9
|
+
from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
|
10
|
+
nonce: 69420n,
|
11
|
+
})
|
12
|
+
})
|
13
|
+
|
14
|
+
bench('ethers: getContractAddress', () => {
|
15
|
+
utils.getContractAddress({
|
16
|
+
from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
|
17
|
+
nonce: 69420n,
|
18
|
+
})
|
19
|
+
})
|
20
|
+
})
|
@@ -0,0 +1,78 @@
|
|
1
|
+
import { expect, test } from 'vitest'
|
2
|
+
|
3
|
+
import { encodeBytes, encodeHex } from '../encoding'
|
4
|
+
|
5
|
+
import {
|
6
|
+
getContractAddress,
|
7
|
+
getCreate2Address,
|
8
|
+
getCreateAddress,
|
9
|
+
} from './getContractAddress'
|
10
|
+
|
11
|
+
test('gets contract address (CREATE)', () => {
|
12
|
+
expect(
|
13
|
+
getContractAddress({
|
14
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
15
|
+
nonce: 0n,
|
16
|
+
}),
|
17
|
+
).toMatchInlineSnapshot('"0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2"')
|
18
|
+
|
19
|
+
expect(
|
20
|
+
getContractAddress({
|
21
|
+
from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
|
22
|
+
nonce: 5n,
|
23
|
+
}),
|
24
|
+
).toMatchInlineSnapshot('"0x30b3F7E5B61d6343Af9B4f98Ed92c003d8fc600F"')
|
25
|
+
|
26
|
+
expect(
|
27
|
+
getContractAddress({
|
28
|
+
from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b',
|
29
|
+
nonce: 69420n,
|
30
|
+
}),
|
31
|
+
).toMatchInlineSnapshot('"0xDf2e056f7062790dF95A472f691670717Ae7b1B6"')
|
32
|
+
|
33
|
+
expect(
|
34
|
+
getCreateAddress({
|
35
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
36
|
+
nonce: 0n,
|
37
|
+
}),
|
38
|
+
).toMatchInlineSnapshot('"0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2"')
|
39
|
+
})
|
40
|
+
|
41
|
+
test('gets contract address (CREATE2)', () => {
|
42
|
+
expect(
|
43
|
+
getContractAddress({
|
44
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
45
|
+
bytecode: '0x6394198df16000526103ff60206004601c335afa6040516060f3',
|
46
|
+
salt: encodeBytes('hello world'),
|
47
|
+
opcode: 'CREATE2',
|
48
|
+
}),
|
49
|
+
).toMatchInlineSnapshot('"0x59fbB593ABe27Cb193b6ee5C5DC7bbde312290aB"')
|
50
|
+
expect(
|
51
|
+
getContractAddress({
|
52
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
53
|
+
bytecode: encodeBytes(
|
54
|
+
'0x6394198df16000526103ff60206004601c335afa6040516060f3',
|
55
|
+
),
|
56
|
+
salt: encodeBytes('hello world'),
|
57
|
+
opcode: 'CREATE2',
|
58
|
+
}),
|
59
|
+
).toMatchInlineSnapshot('"0x59fbB593ABe27Cb193b6ee5C5DC7bbde312290aB"')
|
60
|
+
expect(
|
61
|
+
getCreate2Address({
|
62
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
63
|
+
bytecode: encodeBytes(
|
64
|
+
'0x6394198df16000526103ff60206004601c335afa6040516060f3',
|
65
|
+
),
|
66
|
+
salt: encodeHex('hello world'),
|
67
|
+
}),
|
68
|
+
).toMatchInlineSnapshot('"0x59fbB593ABe27Cb193b6ee5C5DC7bbde312290aB"')
|
69
|
+
expect(
|
70
|
+
getContractAddress({
|
71
|
+
from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',
|
72
|
+
bytecode:
|
73
|
+
'0x60096102c0818152682bb0b93430b6b6b2b960b91b6102e0526080908152600c6103008181526b28bab0b93a32b939ba30b33360a11b6103205260a05260046103408181526313585d5b60e21b6103605260c052610380818152634d61636560e01b6103a05260e0526103c08181526321b63ab160e11b6103e052610100526006610400908152654b6174616e6160d01b61042052610120526008610440818152672330b631b434b7b760c11b61046052610140526104808181526729b1b4b6b4ba30b960c11b6104a05261016052600a6104c081815269131bdb99c814dddbdc9960b21b6104e05261018052600b6105009081526a14da1bdc9d0814dddbdc9960aa1b610520526101a0526105408181526911da1bdcdd0815d85b9960b21b610560526101c0526105809081526911dc985d994815d85b9960b21b6105a0526101e0526105c085815268109bdb994815d85b9960ba1b6105e052610200526106008281526315d85b9960e21b6106205261022052610640908152674772696d6f69726560c01b6106605261024052610680938452684368726f6e69636c6560b81b6106a052610260939093526106c083815263546f6d6560e01b6106e0526102805261074060405261070092835263426f6f6b60e01b610720526102a092909252620001ef9190601262001d24565b506040805161022081018252600b6101e082019081526a446976696e6520526f626560a81b61020083015281528151808301835260098082526853696c6b20526f626560b81b6020838101919091528084019290925283518085018552600a808252694c696e656e20526f626560b01b8285015284860191909152845180860186526004815263526f626560e01b81850152606085015284518086018652600581526414da1a5c9d60da1b818501526080850152845180860186528181526944656d6f6e204875736b60b01b8185015260a085015284518086018652601081526f223930b3b7b739b5b4b71020b936b7b960811b8185015260c085015284518086018652601581527f53747564646564204c6561746865722041726d6f7200000000000000000000008185015260e08501528451808601865260128152712430b932102632b0ba3432b91020b936b7b960711b8185015261010085015284518086018652600d8082526c2632b0ba3432b91020b936b7b960991b8286015261012086019190915285518087018752600f8082526e486f6c79204368657374706c61746560881b828701526101408701919091528651808801885260118152704f726e617465204368657374706c61746560781b818701526101608701528651808801885283815269141b185d194813585a5b60b21b81870152610180870152865180880188529283526910da185a5b8813585a5b60b21b838601526101a0860192909252855180870190965291855268149a5b99c813585a5b60ba1b928501929092526101c08301939093526200044892919062001d88565b50604051806101e001604052806040518060400160405280600c81526020016b416e6369656e742048656c6d60a01b81525081526020016040518060400160405280600b81526020016a4f726e6174652048656c6d60a81b81525081526020016040518060400160405280600a81526020016947726561742048656c6d60b01b81525081526020016040518060400160405280600981526020016846756c6c2048656c6d60b81b81525081526020016040518060400160405280600481526020016348656c6d60e01b81525081526020016040518060400160405280600b81526020016a2232b6b7b71021b937bbb760a91b81525081526020016040518060400160405280600e81526020016d223930b3b7b713b99021b937bbb760911b8152508152602001604051806040016040528060078152602001660576172204361760cc1b81525081526020016040518060400160405280600b81526020016a04c656174686572204361760ac1b81525081526020016040518060400160405280600381526020016204361760ec1b81525081526020016040518060400160405280600581526020016421b937bbb760d91b81525081526020016040518060400160405280600b81526020016a111a5d9a5b9948121bdbd960aa1b81525081526020016040518060400160405280600981526020016814da5b1ac8121bdbd960ba1b81525081526020016040518060400160405280600a815260200169131a5b995b88121bdbd960b21b815250815260200160405180604001604052806004815260200163121bdbd960e21b815250815250600e90600f620006aa92919062001d88565b506040805161022081018252600b6101e082018181526a13dc9b985d194810995b1d60aa1b610200840152825282518084018452600881526715d85c8810995b1d60c21b60208281019190915280840191909152835180850185529182526a141b185d19590810995b1d60aa1b82820152828401919091528251808401845260098082526813595cda0810995b1d60ba1b82840152606084019190915283518085018552600a808252691219585d9e4810995b1d60b21b82850152608085019190915284518086018652600e81526d11195b5bdb9a1a59194810995b1d60921b8185015260a085015284518086018652600f8082526e111c9859dbdb9cdada5b8810995b1d608a1b8286015260c086019190915285518087018752601481527f53747564646564204c6561746865722042656c740000000000000000000000008186015260e086015285518087018752601181527012185c99081319585d1a195c8810995b1d607a1b8186015261010086015285518087018752600c81526b1319585d1a195c8810995b1d60a21b81860152610120860152855180870187528181526e084e4d2ced0e8e6d2d8d640a6c2e6d608b1b8186015261014086015285518087018752838152680a6d2d8d640a6c2e6d60bb1b8186015261016086015285518087018752928352680aededed840a6c2e6d60bb1b838501526101808501929092528451808601865290815269098d2dccadc40a6c2e6d60b31b818401526101a0840152835180850190945260048452630a6c2e6d60e31b918401919091526101c08201929092526200090191908162001d88565b506040805161022081018252600c6101e082019081526b486f6c79204772656176657360a01b610200830152815281518083018352600e81526d4f726e617465204772656176657360901b602082810191909152808301919091528251808401845260078152664772656176657360c81b818301528284015282518084018452600b8082526a436861696e20426f6f747360a81b828401526060840191909152835180850185528181526a486561767920426f6f747360a81b81840152608084015283518085018552600f8082526e44656d6f6e6869646520426f6f747360881b8285015260a08501919091528451808601865260108082526f447261676f6e736b696e20426f6f747360801b8286015260c086019190915285518087018752601581527f53747564646564204c65617468657220426f6f747300000000000000000000008186015260e086015285518087018752601281527148617264204c65617468657220426f6f747360701b8186015261010086015285518087018752600d8082526c4c65617468657220426f6f747360981b82870152610120870191909152865180880188528381526e446976696e6520536c69707065727360881b81870152610140870152865180880188529081526c53696c6b20536c69707065727360981b8186015261016086015285518087018752600a815269576f6f6c2053686f657360b01b81860152610180860152855180870187529283526a4c696e656e2053686f657360a81b838501526101a08501929092528451808601909552600585526453686f657360d81b928501929092526101c083019390935262000b6b92919062001d88565b506040805161022081018252600e6101e082018181526d486f6c79204761756e746c65747360901b610200840152825282518084018452601081526f4f726e617465204761756e746c65747360801b602082810191909152808401919091528351808501855260098152684761756e746c65747360b81b818301528385015283518085018552600c8082526b436861696e20476c6f76657360a01b828401526060850191909152845180860186528181526b486561767920476c6f76657360a01b81840152608085015284518086018652600d8082526c44656d6f6e27732048616e647360981b8285015260a086019190915285518087018752601180825270447261676f6e736b696e20476c6f76657360781b8286015260c087019190915286518088018852601681527f53747564646564204c65617468657220476c6f766573000000000000000000008186015260e087015286518088018852601381527f48617264204c65617468657220476c6f7665730000000000000000000000000081860152610100870152865180880188529485526d4c65617468657220476c6f76657360901b85850152610120860194909452855180870187529081526c446976696e6520476c6f76657360981b8184015261014085015284518086018652600b8082526a53696c6b20476c6f76657360a81b82850152610160860191909152855180870187529081526a576f6f6c20476c6f76657360a81b81840152610180850152845180860186529081526b4c696e656e20476c6f76657360a01b818301526101a084015283518085019094526006845265476c6f76657360d01b908401526101c082019290925262000de49190600f62001d88565b506040518060600160405280604051806040016040528060088152602001674e65636b6c61636560c01b815250815260200160405180604001604052806006815260200165105b5d5b195d60d21b81525081526020016040518060400160405280600781526020016614195b99185b9d60ca1b815250815250601290600362000e6f92919062001dda565b506040805160e081018252600960a0820190815268476f6c642052696e6760b81b60c0830152815281518083018352600b8082526a53696c7665722052696e6760a81b60208381019190915280840192909252835180850185529081526a42726f6e7a652052696e6760a81b818301528284015282518084018452600d8082526c506c6174696e756d2052696e6760981b828401526060840191909152835180850190945283526c546974616e69756d2052696e6760981b90830152608081019190915262000f4390601390600562001e2c565b506040805161024081018252600861020082018181526737b3102837bbb2b960c11b6102208401528252825180840184526009808252686f66204769616e747360b81b6020838101919091528085019290925284518086018652908152686f6620546974616e7360b81b818301528385015283518085018552828152671bd98814dada5b1b60c21b81830152606084015283518085018552600d8082526c37b3102832b93332b1ba34b7b760991b828401526080850191909152845180860186528181526c6f66204272696c6c69616e636560981b8184015260a08501528451808601865260108082526f1bd988115b9b1a59da1d195b9b595b9d60821b8285015260c0860191909152855180870187528281526c37b310283937ba32b1ba34b7b760991b8185015260e0860152855180870187529384526737b31020b733b2b960c11b84840152610100850193909352845180860186526007808252666f66205261676560c81b8285015261012086019190915285518087018752908152666f66204675727960c81b8184015261014085015284518086018652600a808252691bd988159a5d1c9a5bdb60b21b8285015261016086019190915285518087018752908152690decc40e8d0ca408cdef60b31b8184015261018085015284518086018652600c8082526b37b3102232ba32b1ba34b7b760a11b828501526101a0860191909152855180870187529182526c37b3102932b33632b1ba34b7b760991b828401526101c0850191909152845180860190955284526b6f6620746865205477696e7360a01b908401526101e0820192909252620011a7916014919062001e7e565b50604080516108e08101825260056108a082018181526441676f6e7960d81b6108c0840152825282518084018452600a8082526941706f63616c7970736560b01b60208381019190915280850192909252845180860186528181526920b936b0b3b2b23237b760b11b818401528486015284518086018652838152641099585cdd60da1b81840152606085015284518086018652600880825267084cad0cadadee8d60c31b82850152608086019190915285518087018752600680825265109b1a59da1d60d21b8286015260a08701919091528651808801885285815264109b1bdbd960da1b8186015260c0870152865180880188526007808252664272616d626c6560c81b8287015260e0880191909152875180890189526009808252684272696d73746f6e6560b81b828801526101008901919091528851808a018a5287815264109c9bdbd960da1b818801526101208901528851808a018a528281526621b0b93934b7b760c91b818801526101408901528851808a018a528181526843617461636c79736d60b81b818801526101608901528851808a018a52848152674368696d6572696360c01b818801526101808901528851808a018a5283815265436f7270736560d01b818801526101a08901528851808a018a528581526921b7b9393ab83a34b7b760b11b818801526101c08901528851808a018a52818152682230b6b730ba34b7b760b91b818801526101e08901528851808a018a5287815264088cac2e8d60db1b818801526102008901528851808a018a52878152642232b6b7b760d91b818801526102208901528851808a018a526004808252634469726560e01b828901526102408a01919091528951808b018b5284815265223930b3b7b760d11b818901526102608a01528951808b018b5288815264111c99585960da1b818901526102808a01528951808b018b5281815263446f6f6d60e01b818901526102a08a01528951808b018b52818152634475736b60e01b818901526102c08a01528951808b018b52888152644561676c6560d81b818901526102e08a01528951808b018b528581526722b6b83cb932b0b760c11b818901526103008a01528951808b018b52818152634661746560e01b818901526103208a01528951808b018b52600380825262466f6560e81b828a01526103408b01919091528a51808c018c528281526347616c6560e01b818a01526103608b01528a51808c018c528981526411da1bdd5b60da1b818a01526103808b01528a51808c018c5289815264476c6f6f6d60d81b818a01526103a08b01528a51808c018c528981526408ed8f2e0d60db1b818a01526103c08b01528a51808c018c5289815264476f6c656d60d81b818a01526103e08b01528a51808c018c52828152634772696d60e01b818a01526104008b01528a51808c018c52828152634861746560e01b818a01526104208b01528a51808c018c52898152644861766f6360d81b818a01526104408b01528a51808c018c52858152652437b737bab960d11b818a01526104608b01528a51808c018c52858152652437b93937b960d11b818a01526104808b01528a51808c018c52868152674879706e6f74696360c01b818a01526104a08b01528a51808c018c528581526525b930b5b2b760d11b818a01526104c08b01528a51808c018c5289815264098dec2e8d60db1b818a01526104e08b01528a51808c018c52838152684d61656c7374726f6d60b81b818a01526105008b01528a51808c018c5282815263135a5b9960e21b818a01526105208b01528a51808c018c52848152664d697261636c6560c81b818a01526105408b01528a51808c018c5285815265135bdc989a5960d21b818a01526105608b01528a51808c018c529586526727b13634bb34b7b760c11b868901526105808a01959095528951808b018b528281526813db9cdb185d59da1d60ba1b818901526105a08a01528951808b018b52818152632830b4b760e11b818901526105c08a01528951808b018b52600b81526a50616e64656d6f6e69756d60a81b818901526105e08a01528951808b018b52838152660a0d0decadcd2f60cb1b818901526106008a01528951808b018b5284815265506c6167756560d01b818901526106208a01528951808b018b52818152635261676560e01b818901526106408a01528951808b018b52838152665261707475726560c81b818901526106608a01528951808b018b528181526352756e6560e01b818901526106808a01528951808b018b528881526414dadd5b1b60da1b818901526106a08a01528951808b018b528581526214dbdb60ea1b818901526106c08a01528951808b018b529081526314dbdd5b60e21b818801526106e08901528851808a018a5283815265536f72726f7760d01b818801526107008901528851808a018a528381526514dc1a5c9a5d60d21b818801526107208901528851808a018a528781526453746f726d60d81b818801526107408901528851808a018a528281526615195b5c195cdd60ca1b818801526107608901528851808a018a5282815266151bdc9b595b9d60ca1b818801526107808901528851808a018a529081526856656e6765616e636560b81b818701526107a08801528751808901895281815266566963746f727960c81b818701526107c088015287518089018952868152642b34b832b960d91b818701526107e088015287518089018952918252650acdee4e8caf60d31b828601526108008701919091528651808801885291825262576f6560e81b8285015261082086019190915285518087018752938452640aee4c2e8d60db1b8484015261084085019390935284518086018652928352664c69676874277360c81b838301526108608401929092528351808501909452908352695368696d6d6572696e6760b01b9083015261088081019190915262001a1190601590604562001ed0565b506040805161028081018252600461024082018181526342616e6560e01b61026084015282528251808401845281815263149bdbdd60e21b6020828101919091528084019190915283518085018552828152634269746560e01b81830152838501528351808501855282815263536f6e6760e01b81830152606084015283518085018552828152632937b0b960e11b81830152608084015283518085018552600580825264047726173760dc1b8284015260a085019190915284518086018652600a815269125b9cdd1c9d5b595b9d60b21b8184015260c08501528451808601865283815263476c6f7760e01b8184015260e0850152845180860186526006808252652132b73232b960d11b828501526101008601919091528551808701875290815265536861646f7760d01b818401526101208501528451808601865260078152662bb434b9b832b960c91b81840152610140850152845180860186528181526414da1bdd5d60da1b81840152610160850152845180860186529081526411dc9bdddb60da1b8183015261018084015283518085018552828152632a32b0b960e11b818301526101a084015283518085018552828152635065616b60e01b818301526101c08401528351808501855282815263466f726d60e01b818301526101e084015283518085018552600381526229bab760e91b8183015261020084015283518085019094529083526326b7b7b760e11b9083015261022081019190915262001c4290601690601262001d24565b5034801562001c5057600080fd5b5060405180604001604052806004815260200163131bdbdd60e21b815250604051806040016040528060048152602001631313d3d560e21b815250816000908051906020019062001ca392919062001f22565b50805162001cb990600190602084019062001f22565b50506001600a555062001ccc3362001cd2565b62002064565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001d6591849160209091019062001f22565b509160200191906001019062001d45565b5062001d8492915062001fad565b5090565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001dc991849160209091019062001f22565b509160200191906001019062001da9565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001e1b91849160209091019062001f22565b509160200191906001019062001dfb565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001e6d91849160209091019062001f22565b509160200191906001019062001e4d565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001ebf91849160209091019062001f22565b509160200191906001019062001e9f565b82805482825590600052602060002090810192821562001d76579160200282015b8281111562001d76578251805162001f1191849160209091019062001f22565b509160200191906001019062001ef1565b82805462001f309062002027565b90600052602060002090601f01602090048101928262001f54576000855562001f9f565b82601f1062001f6f57805160ff191683800117855562001f9f565b8280016001018555821562001f9f579182015b8281111562001f9f57825182559160200191906001019062001f82565b5062001d8492915062001fce565b8082111562001d8457600062001fc4828262001fe5565b5060010162001fad565b5b8082111562001d84576000815560010162001fcf565b50805462001ff39062002027565b6000825580601f1062002004575050565b601f01602090049060005260206000209081019062002024919062001fce565b50565b600181811c908216806200203c57607f821691505b602082108114156200205e57634e487b7160e01b600052602260045260246000fd5b50919050565b61320c80620020746000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a22cb465116100a2578063d47f269e11610071578063d47f269e146103c7578063e985e9c5146103da578063ef68075a14610416578063f2fde38b1461042957600080fd5b8063a22cb4651461037b578063b88d4fde1461038e578063c08a5dd5146103a1578063c87b56dd146103b457600080fd5b806395d89b41116100de57806395d89b411461033a5780639720c969146103425780639bdc1b69146103555780639e41b73f1461036857600080fd5b806370a082311461030e578063715018a6146103215780638da5cb5b1461032957600080fd5b80632f745c5911610171578063434f48c41161014b578063434f48c4146102c25780634f6ccce7146102d55780636352211e146102e857806367209aa8146102fb57600080fd5b80632f745c5914610289578063379607f51461029c57806342842e0e146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630e99990d1461025157806318160ddd1461026457806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e23660046127f8565b61043c565b60405190151581526020015b60405180910390f35b610204610467565b6040516101f39190612d42565b61022461021f366004612830565b6104f9565b6040516001600160a01b0390911681526020016101f3565b61024f61024a3660046127cf565b610593565b005b61020461025f366004612830565b6106a9565b6008545b6040519081526020016101f3565b61024f610284366004612685565b6107a3565b6102686102973660046127cf565b6107d4565b61024f6102aa366004612830565b61086a565b61024f6102bd366004612685565b610924565b61024f6102d0366004612830565b61093f565b6102686102e3366004612830565b610a27565b6102246102f6366004612830565b610ac8565b610204610309366004612830565b610b3f565b61026861031c366004612632565b610c30565b61024f610cb7565b600b546001600160a01b0316610224565b610204610ced565b610204610350366004612830565b610cfc565b610204610363366004612830565b610ded565b610204610376366004612830565b610edf565b61024f610389366004612795565b610fd2565b61024f61039c3660046126c0565b611097565b6102046103af366004612830565b6110cf565b6102046103c2366004612830565b6111c0565b6102046103d5366004612830565b611468565b6101e76103e8366004612653565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610204610424366004612830565b611559565b61024f610437366004612632565b61164b565b60006001600160e01b0319821663780e9d6360e01b14806104615750610461826116e6565b92915050565b60606000805461047690612ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546104a290612ebb565b80156104ef5780601f106104c4576101008083540402835291602001916104ef565b820191906000526020600020905b8154815290600101906020018083116104d257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105775760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061059e82610ac8565b9050806001600160a01b0316836001600160a01b0316141561060c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161056e565b336001600160a01b0382161480610628575061062881336103e8565b61069a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161056e565b6106a48383611736565b505050565b606061046182604051806040016040528060048152602001631193d3d560e21b8152506010805480602002602001604051908101604052809291908181526020016000905b8282101561079a57838290600052602060002001805461070d90612ebb565b80601f016020809104026020016040519081016040528092919081815260200182805461073990612ebb565b80156107865780601f1061075b57610100808354040283529160200191610786565b820191906000526020600020905b81548152906001019060200180831161076957829003601f168201915b5050505050815260200190600101906106ee565b505050506117a4565b6107ad3382611ad1565b6107c95760405162461bcd60e51b815260040161056e90612ddc565b6106a4838383611bc8565b60006107df83610c30565b82106108415760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161056e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6002600a5414156108bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056e565b6002600a5580158015906108d25750611e6281105b6109115760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b604482015260640161056e565b61091c335b82611d73565b506001600a55565b6106a483838360405180602001604052806000815250611097565b6002600a5414156109925760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056e565b6002600a55600b546001600160a01b031633146109c15760405162461bcd60e51b815260040161056e90612da7565b611e61811180156109d35750611f4181105b610a125760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b604482015260640161056e565b61091c610916600b546001600160a01b031690565b6000610a3260085490565b8210610a955760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161056e565b60088281548110610ab657634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806104615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161056e565b606061046182604051806040016040528060048152602001634e45434b60e01b8152506012805480602002602001604051908101604052809291908181526020016000905b8282101561079a578382906000526020600020018054610ba390612ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90612ebb565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b505050505081526020019060010190610b84565b60006001600160a01b038216610c9b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161056e565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610ce15760405162461bcd60e51b815260040161056e90612da7565b610ceb6000611d91565b565b60606001805461047690612ebb565b606061046182604051806040016040528060048152602001631211505160e21b815250600e805480602002602001604051908101604052809291908181526020016000905b8282101561079a578382906000526020600020018054610d6090612ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8c90612ebb565b8015610dd95780601f10610dae57610100808354040283529160200191610dd9565b820191906000526020600020905b815481529060010190602001808311610dbc57829003601f168201915b505050505081526020019060010190610d41565b6060610461826040518060400160405280600581526020016415d05254d560da1b815250600f805480602002602001604051908101604052809291908181526020016000905b8282101561079a578382906000526020600020018054610e5290612ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7e90612ebb565b8015610ecb5780601f10610ea057610100808354040283529160200191610ecb565b820191906000526020600020905b815481529060010190602001808311610eae57829003601f168201915b505050505081526020019060010190610e33565b606061046182604051806040016040528060068152602001652ba2a0a827a760d11b815250600c805480602002602001604051908101604052809291908181526020016000905b8282101561079a578382906000526020600020018054610f4590612ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7190612ebb565b8015610fbe5780601f10610f9357610100808354040283529160200191610fbe565b820191906000526020600020905b815481529060010190602001808311610fa157829003601f168201915b505050505081526020019060010190610f26565b6001600160a01b03821633141561102b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161056e565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6110a13383611ad1565b6110bd5760405162461bcd60e51b815260040161056e90612ddc565b6110c984848484611de3565b50505050565b6060610461826040518060400160405280600481526020016352494e4760e01b8152506013805480602002602001604051908101604052809291908181526020016000905b8282101561079a57838290600052602060002001805461113390612ebb565b80601f016020809104026020016040519081016040528092919081815260200182805461115f90612ebb565b80156111ac5780601f10611181576101008083540402835291602001916111ac565b820191906000526020600020905b81548152906001019060200180831161118f57829003601f168201915b505050505081526020019060010190611114565b60606111ca6125d5565b60405180610120016040528060fd815260200161304960fd913981526111ef83610edf565b81600160200201819052506040518060600160405280602881526020016131af60289139604082015261122183611559565b6060808301919091526040805191820190526028808252612f7e6020830139608082015261124e83610cfc565b60a082015260408051606081019091526028808252612ff8602083013960c082015261127983610ded565b60e08201526040805160608101909152602980825261302060208301396101008201526112a5836106a9565b61012082015260408051606081019091526029808252612fcf60208301396101408201526112d283611468565b6101608201526040805160608101909152602980825261314660208301396101808201526112ff83610b3f565b6101a082015260408051606081019091526029808252612fa660208301396101c082015261132c836110cf565b6101e0820152604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b602080830191909152610200840191909152825181840151838501516060860151608087015160a088015160c089015160e08a01516101008b0151995160009a61139c9a9091016128bf565b60408051808303601f19018152908290526101208401516101408501516101608601516101808701516101a08801516101c08901516101e08a01516102008b01519799506113ef988a98906020016128bf565b6040516020818303038152906040529050600061143c61140e86611e16565b61141784611f30565b604051602001611428929190612b2a565b604051602081830303815290604052611f30565b90508060405160200161144f9190612cc0565b60408051601f1981840301815291905295945050505050565b606061046182604051806040016040528060048152602001631210539160e21b8152506011805480602002602001604051908101604052809291908181526020016000905b8282101561079a5783829060005260206000200180546114cc90612ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546114f890612ebb565b80156115455780601f1061151a57610100808354040283529160200191611545565b820191906000526020600020905b81548152906001019060200180831161152857829003601f168201915b5050505050815260200190600101906114ad565b6060610461826040518060400160405280600581526020016410d21154d560da1b815250600d805480602002602001604051908101604052809291908181526020016000905b8282101561079a5783829060005260206000200180546115be90612ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546115ea90612ebb565b80156116375780601f1061160c57610100808354040283529160200191611637565b820191906000526020600020905b81548152906001019060200180831161161a57829003601f168201915b50505050508152602001906001019061159f565b600b546001600160a01b031633146116755760405162461bcd60e51b815260040161056e90612da7565b6001600160a01b0381166116da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056e565b6116e381611d91565b50565b60006001600160e01b031982166380ac58cd60e01b148061171757506001600160e01b03198216635b5e139f60e01b145b8061046157506301ffc9a760e01b6001600160e01b0319831614610461565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061176b82610ac8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060006117da846117b587611e16565b6040516020016117c6929190612890565b6040516020818303038152906040526120a4565b90506000838451836117ec9190612f11565b8151811061180a57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006015836118239190612f11565b9050600e81111561188a576014805483919061183f9086612f11565b8154811061185d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001604051602001611878929190612980565b60405160208183030381529060405291505b60138110611ac75761189a6125fd565b601580546118a89086612f11565b815481106118c657634e487b7160e01b600052603260045260246000fd5b9060005260206000200180546118db90612ebb565b80601f016020809104026020016040519081016040528092919081815260200182805461190790612ebb565b80156119545780601f1061192957610100808354040283529160200191611954565b820191906000526020600020905b81548152906001019060200180831161193757829003601f168201915b50505050508160006002811061197a57634e487b7160e01b600052603260045260246000fd5b60200201526016805461198d9086612f11565b815481106119ab57634e487b7160e01b600052603260045260246000fd5b9060005260206000200180546119c090612ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546119ec90612ebb565b8015611a395780601f10611a0e57610100808354040283529160200191611a39565b820191906000526020600020905b815481529060010190602001808311611a1c57829003601f168201915b505050505081600160028110611a5f57634e487b7160e01b600052603260045260246000fd5b60200201526013821415611a9b578051602080830151604051611a859392879101612a3e565b6040516020818303038152906040529250611ac5565b8051602080830151604051611ab39392879101612aac565b60405160208183030381529060405292505b505b5095945050505050565b6000818152600260205260408120546001600160a01b0316611b4a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161056e565b6000611b5583610ac8565b9050806001600160a01b0316846001600160a01b03161480611b905750836001600160a01b0316611b85846104f9565b6001600160a01b0316145b80611bc057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611bdb82610ac8565b6001600160a01b031614611c435760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161056e565b6001600160a01b038216611ca55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161056e565b611cb08383836120d5565b611cbb600082611736565b6001600160a01b0383166000908152600360205260408120805460019290611ce4908490612e78565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d12908490612e2d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611d8d82826040518060200160405280600081525061218d565b5050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611dee848484611bc8565b611dfa848484846121c0565b6110c95760405162461bcd60e51b815260040161056e90612d55565b606081611e3a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e645780611e4e81612ef6565b9150611e5d9050600a83612e45565b9150611e3e565b60008167ffffffffffffffff811115611e8d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611eb7576020820181803683370190505b5090505b8415611bc057611ecc600183612e78565b9150611ed9600a86612f11565b611ee4906030612e2d565b60f81b818381518110611f0757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611f29600a86612e45565b9450611ebb565b805160609080611f50575050604080516020810190915260008152919050565b60006003611f5f836002612e2d565b611f699190612e45565b611f74906004612e59565b90506000611f83826020612e2d565b67ffffffffffffffff811115611fa957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fd3576020820181803683370190505b509050600060405180606001604052806040815260200161316f604091399050600181016020830160005b8681101561205f576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101611ffe565b506003860660018114612079576002811461208a57612096565b613d3d60f01b600119830152612096565b603d60f81b6000198301525b505050918152949350505050565b6000816040516020016120b79190612874565b60408051601f19818403018152919052805160209091012092915050565b6001600160a01b0383166121305761212b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612153565b816001600160a01b0316836001600160a01b0316146121535761215383826122cd565b6001600160a01b03821661216a576106a48161236a565b826001600160a01b0316826001600160a01b0316146106a4576106a48282612443565b6121978383612487565b6121a460008484846121c0565b6106a45760405162461bcd60e51b815260040161056e90612d55565b60006001600160a01b0384163b156122c257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612204903390899088908890600401612d05565b602060405180830381600087803b15801561221e57600080fd5b505af192505050801561224e575060408051601f3d908101601f1916820190925261224b91810190612814565b60015b6122a8573d80801561227c576040519150601f19603f3d011682016040523d82523d6000602084013e612281565b606091505b5080516122a05760405162461bcd60e51b815260040161056e90612d55565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611bc0565b506001949350505050565b600060016122da84610c30565b6122e49190612e78565b600083815260076020526040902054909150808214612337576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061237c90600190612e78565b600083815260096020526040812054600880549394509092849081106123b257634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106123e157634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061242757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061244e83610c30565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124dd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161056e565b6000818152600260205260409020546001600160a01b0316156125425760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161056e565b61254e600083836120d5565b6001600160a01b0382166000908152600360205260408120805460019290612577908490612e2d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6040518061022001604052806011905b60608152602001906001900390816125e55790505090565b60408051808201909152606081526001602082016125e5565b80356001600160a01b038116811461262d57600080fd5b919050565b600060208284031215612643578081fd5b61264c82612616565b9392505050565b60008060408385031215612665578081fd5b61266e83612616565b915061267c60208401612616565b90509250929050565b600080600060608486031215612699578081fd5b6126a284612616565b92506126b060208501612616565b9150604084013590509250925092565b600080600080608085870312156126d5578081fd5b6126de85612616565b93506126ec60208601612616565b925060408501359150606085013567ffffffffffffffff8082111561270f578283fd5b818701915087601f830112612722578283fd5b81358181111561273457612734612f51565b604051601f8201601f19908116603f0116810190838211818310171561275c5761275c612f51565b816040528281528a6020848701011115612774578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156127a7578182fd5b6127b083612616565b9150602083013580151581146127c4578182fd5b809150509250929050565b600080604083850312156127e1578182fd5b6127ea83612616565b946020939093013593505050565b600060208284031215612809578081fd5b813561264c81612f67565b600060208284031215612825578081fd5b815161264c81612f67565b600060208284031215612841578081fd5b5035919050565b60008151808452612860816020860160208601612e8f565b601f01601f19169290920160200192915050565b60008251612886818460208701612e8f565b9190910192915050565b600083516128a2818460208801612e8f565b8351908301906128b6818360208801612e8f565b01949350505050565b60008a516128d1818460208f01612e8f565b8a516128e38183860160208f01612e8f565b8a5191840101906128f8818360208e01612e8f565b895161290a8183850160208e01612e8f565b8951929091010190612920818360208c01612e8f565b87516129328183850160208c01612e8f565b8751929091010190612948818360208a01612e8f565b855161295a8183850160208a01612e8f565b8551929091010190612970818360208801612e8f565b019b9a5050505050505050505050565b6000835160206129938285838901612e8f565b600160fd1b9184019182528454600190849080831c818416806129b757607f821691505b8582108114156129d557634e487b7160e01b88526022600452602488fd5b8080156129e957600181146129fe57612a2e565b60ff1984168887015282880186019450612a2e565b60008b815260209020895b84811015612a245781548a8201890152908701908801612a09565b5050858389010194505b50929a9950505050505050505050565b601160f91b81528351600090612a5b816001850160208901612e8f565b600160fd1b6001918401918201528451612a7c816002840160208901612e8f565b61011160f51b600292909101918201528351612a9f816004840160208801612e8f565b0160040195945050505050565b601160f91b81528351600090612ac9816001850160208901612e8f565b600160fd1b6001918401918201528451612aea816002840160208901612e8f565b61011160f51b600292909101918201528351612b0d816004840160208801612e8f565b62202b3160e81b6004929091019182015260070195945050505050565b6e7b226e616d65223a2022426167202360881b81528251600090612b5581600f850160208801612e8f565b80830190507f222c20226465736372697074696f6e223a20224c6f6f742069732072616e646f600f8201527f6d697a656420616476656e747572657220676561722067656e65726174656420602f8201527f616e642073746f726564206f6e20636861696e2e2053746174732c20696d6167604f8201527f65732c20616e64206f746865722066756e6374696f6e616c6974792061726520606f8201527f696e74656e74696f6e616c6c79206f6d697474656420666f72206f7468657273608f8201527f20746f20696e746572707265742e204665656c206672656520746f207573652060af8201527f4c6f6f7420696e20616e792077617920796f752077616e742e222c2022696d6160cf8201527f6765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c60ef82015261010f8451612c9f8183850160208901612e8f565b612cb5828285010161227d60f01b815260020190565b979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251612cf881601d850160208701612e8f565b91909101601d0192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d3890830184612848565b9695505050505050565b60208152600061264c6020830184612848565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612e4057612e40612f25565b500190565b600082612e5457612e54612f3b565b500490565b6000816000190483118215151615612e7357612e73612f25565b500290565b600082821015612e8a57612e8a612f25565b500390565b60005b83811015612eaa578181015183820152602001612e92565b838111156110c95750506000910152565b600181811c90821680612ecf57607f821691505b60208210811415612ef057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f0a57612f0a612f25565b5060010190565b600082612f2057612f20612f3b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146116e357600080fdfe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220afd8a42edeeb6b78a1f2564f8301af9f1f72be2eedf980ee45200f6459d4c45064736f6c63430008040033',
|
74
|
+
salt: encodeBytes('hello world'),
|
75
|
+
opcode: 'CREATE2',
|
76
|
+
}),
|
77
|
+
).toMatchInlineSnapshot('"0x98F06eF857728F5a10e9968b881739bf9638300A"')
|
78
|
+
})
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import type { Address, ByteArray, Hex } from '../../types'
|
2
|
+
import { concat, isBytes, pad, slice } from '../data'
|
3
|
+
import { encodeBytes, encodeRlp } from '../encoding'
|
4
|
+
import { keccak256 } from '../hash'
|
5
|
+
import { getAddress } from './getAddress'
|
6
|
+
|
7
|
+
export type GetCreateAddressOptions = {
|
8
|
+
from: Address
|
9
|
+
nonce: bigint
|
10
|
+
}
|
11
|
+
|
12
|
+
export type GetCreate2AddressOptions = {
|
13
|
+
bytecode: ByteArray | Hex
|
14
|
+
from: Address
|
15
|
+
salt: ByteArray | Hex
|
16
|
+
}
|
17
|
+
|
18
|
+
export type GetContractAddressOptions =
|
19
|
+
| ({
|
20
|
+
opcode?: 'CREATE'
|
21
|
+
} & GetCreateAddressOptions)
|
22
|
+
| ({ opcode: 'CREATE2' } & GetCreate2AddressOptions)
|
23
|
+
|
24
|
+
export function getContractAddress(opts: GetContractAddressOptions) {
|
25
|
+
if (opts.opcode === 'CREATE2') return getCreate2Address(opts)
|
26
|
+
return getCreateAddress(opts)
|
27
|
+
}
|
28
|
+
|
29
|
+
export function getCreateAddress(opts: GetCreateAddressOptions) {
|
30
|
+
const from = encodeBytes(getAddress(opts.from))
|
31
|
+
|
32
|
+
let nonce = encodeBytes(opts.nonce)
|
33
|
+
if (nonce[0] === 0) nonce = new Uint8Array([])
|
34
|
+
|
35
|
+
return getAddress(
|
36
|
+
`0x${keccak256(encodeRlp([from, nonce], 'bytes')).slice(26)}` as Address,
|
37
|
+
)
|
38
|
+
}
|
39
|
+
|
40
|
+
export function getCreate2Address(opts: GetCreate2AddressOptions) {
|
41
|
+
const from = encodeBytes(getAddress(opts.from))
|
42
|
+
const salt = pad(
|
43
|
+
isBytes(opts.salt) ? opts.salt : encodeBytes(opts.salt as Hex),
|
44
|
+
{ size: 32 },
|
45
|
+
) as ByteArray
|
46
|
+
const bytecodeHash = encodeBytes(
|
47
|
+
keccak256(
|
48
|
+
(isBytes(opts.bytecode)
|
49
|
+
? opts.bytecode
|
50
|
+
: encodeBytes(opts.bytecode as Hex)) as ByteArray,
|
51
|
+
),
|
52
|
+
)
|
53
|
+
return getAddress(
|
54
|
+
slice(
|
55
|
+
keccak256(concat([encodeBytes('0xff'), from, salt, bytecodeHash])),
|
56
|
+
12,
|
57
|
+
),
|
58
|
+
)
|
59
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { expect, test } from 'vitest'
|
2
|
+
|
3
|
+
import * as address from './index'
|
4
|
+
|
5
|
+
test('exports address', () => {
|
6
|
+
expect(address).toMatchInlineSnapshot(`
|
7
|
+
{
|
8
|
+
"checksumAddress": [Function],
|
9
|
+
"getAddress": [Function],
|
10
|
+
"getContractAddress": [Function],
|
11
|
+
"getCreate2Address": [Function],
|
12
|
+
"getCreateAddress": [Function],
|
13
|
+
"isAddress": [Function],
|
14
|
+
"isAddressEqual": [Function],
|
15
|
+
}
|
16
|
+
`)
|
17
|
+
})
|
@@ -0,0 +1,16 @@
|
|
1
|
+
export { checksumAddress, getAddress } from './getAddress'
|
2
|
+
|
3
|
+
export type {
|
4
|
+
GetContractAddressOptions,
|
5
|
+
GetCreate2AddressOptions,
|
6
|
+
GetCreateAddressOptions,
|
7
|
+
} from './getContractAddress'
|
8
|
+
export {
|
9
|
+
getContractAddress,
|
10
|
+
getCreate2Address,
|
11
|
+
getCreateAddress,
|
12
|
+
} from './getContractAddress'
|
13
|
+
|
14
|
+
export { isAddress } from './isAddress'
|
15
|
+
|
16
|
+
export { isAddressEqual } from './isAddressEqual'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { expect, test } from 'vitest'
|
2
|
+
|
3
|
+
import { isAddress } from './isAddress'
|
4
|
+
|
5
|
+
test('checks if address is valid', () => {
|
6
|
+
expect(isAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac')).toBeTruthy()
|
7
|
+
expect(isAddress('0xa0cf798816d4b9b9866b5330eea46a18382f251e')).toBeTruthy()
|
8
|
+
expect(isAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az')).toBeFalsy()
|
9
|
+
expect(isAddress('0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678aff')).toBeFalsy()
|
10
|
+
})
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
2
|
+
|
3
|
+
import { isAddressEqual } from './isAddressEqual'
|
4
|
+
|
5
|
+
test('checksums address', () => {
|
6
|
+
expect(
|
7
|
+
isAddressEqual(
|
8
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac',
|
9
|
+
'0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
|
10
|
+
),
|
11
|
+
).toBeTruthy()
|
12
|
+
expect(
|
13
|
+
isAddressEqual(
|
14
|
+
'0xa0cf798816d4b9b9866b5330eea46a18382f251e',
|
15
|
+
'0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
|
16
|
+
),
|
17
|
+
).toBeTruthy()
|
18
|
+
expect(
|
19
|
+
isAddressEqual(
|
20
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac',
|
21
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac',
|
22
|
+
),
|
23
|
+
).toBeTruthy()
|
24
|
+
expect(
|
25
|
+
isAddressEqual(
|
26
|
+
'0xa0cf798816d4b9b9866b5330eea46a18382f251e',
|
27
|
+
'0xA0Cf798816D4b9b9866b5330EEa46a18382f251f',
|
28
|
+
),
|
29
|
+
).toBeFalsy()
|
30
|
+
})
|
31
|
+
|
32
|
+
describe('errors', () => {
|
33
|
+
test('invalid address', () => {
|
34
|
+
expect(() =>
|
35
|
+
isAddressEqual(
|
36
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az',
|
37
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac',
|
38
|
+
),
|
39
|
+
).toThrowErrorMatchingInlineSnapshot(`
|
40
|
+
"Address \\"0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az\\" is invalid.
|
41
|
+
|
42
|
+
Version: viem@1.0.2"
|
43
|
+
`)
|
44
|
+
expect(() =>
|
45
|
+
isAddressEqual(
|
46
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678aff',
|
47
|
+
'0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678ac',
|
48
|
+
),
|
49
|
+
).toThrowErrorMatchingInlineSnapshot(`
|
50
|
+
"Address \\"0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678aff\\" is invalid.
|
51
|
+
|
52
|
+
Version: viem@1.0.2"
|
53
|
+
`)
|
54
|
+
})
|
55
|
+
})
|