diff --git a/README.md b/README.md index 6921acd..49e2f44 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,91 @@ # ethutil + An Ethereum util, can transfer eth, check balance, call any contract function etc # Install + ```shell GO111MODULE=on go install github.com/10gic/ethutil@latest ``` # Usage Example + ## Check Balance + Check balance of an address: + ```shell $ ethutil balance 0x79047aBf3af2a1061B108D71d6dc7BdB06474790 addr 0x79047aBf3af2a1061B108D71d6dc7BdB06474790, balance 231.905355677037965414 ether ``` ## Transfer ETH + Transfer 1 ETH to 0xB2aC853cF815B47903bc19BF4860540306F4f944: + ```shell -$ ethutil transfer 0xB2aC853cF815B47903bc19BF4860540306F4f944 1 --private-key 0xXXXX +ethutil transfer 0xB2aC853cF815B47903bc19BF4860540306F4f944 1 --private-key 0xXXXX ``` ## Contract Interaction + Invokes the (paid) contract method: + ```shell -$ ethutil --node mainnet --private-key 0xXXXX call 0xdac17f958d2ee523a2206206994597c13d831ec7 'transfer(address, uint256)' 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 +ethutil --node mainnet --private-key 0xXXXX call 0xdac17f958d2ee523a2206206994597c13d831ec7 'transfer(address, uint256)' 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 ``` Invokes the (paid) contract method with abi file: + ```shell -$ ethutil --node mainnet --private-key 0xXXXX call 0xdac17f958d2ee523a2206206994597c13d831ec7 --abi-file path/to/abi transfer 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 +ethutil --node mainnet --private-key 0xXXXX call 0xdac17f958d2ee523a2206206994597c13d831ec7 --abi-file path/to/abi transfer 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 ``` Invokes the (constant) contract method: + ```shell $ ethutil --node mainnet query 0xdac17f958d2ee523a2206206994597c13d831ec7 'balanceOf(address) returns (uint256)' 0x703662e526d2b71944fbfb9d87f61de3e0f0f290 ret0 = 1100000000000 ``` Invokes the (constant) contract method with abi file: + ```shell -$ ethutil --node mainnet query 0xdac17f958d2ee523a2206206994597c13d831ec7 --abi-file path/to/abi balanceOf 0x703662e526d2b71944fbfb9d87f61de3e0f0f290 +ethutil --node mainnet query 0xdac17f958d2ee523a2206206994597c13d831ec7 --abi-file path/to/abi balanceOf 0x703662e526d2b71944fbfb9d87f61de3e0f0f290 ``` ## Deploy Contract + Deploy a contract: + ```shell -$ ethutil --private-key 0xXXXX deploy --bin-file Contract1_sol_Contract1.bin +ethutil --private-key 0xXXXX deploy --bin-file Contract1_sol_Contract1.bin ``` The binary file Contract1_sol_Contract1.bin can be generated by `solcjs`, for example: + ``` -$ solcjs --bin Contract1.sol # generate Contract1_sol_Contract1.bin +solcjs --bin Contract1.sol # generate Contract1_sol_Contract1.bin ``` ## Deploy A ERC20 Token + Deploy A ERC20 Token (use default setting: totalSupply = "10000000000000000000000000", name = "A Simple ERC20", symbol = "TEST", decimals = 18) + ```shell -$ ethutil deploy-erc20 +ethutil deploy-erc20 ``` ## Drop Pending Tx + ```shell -$ ethutil drop-tx --private-key 0xXXXX +ethutil drop-tx --private-key 0xXXXX ``` ## Encode Param + An example: + ```shell $ ethutil encode-param 'transfer(address, uint256)' 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 MethodID: 0xa9059cbb @@ -75,6 +95,7 @@ encoded parameters (input data) = 0xa9059cbb0000000000000000000000008f36975cdea2 ``` Another example: + ```shell $ ethutil encode-param 'swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline)' 12939945098273591402279 '[0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0x9Ed8e7C9604790F7Ec589F99b94361d8AAB64E5E]' 0x95206727FA3DD2FA32cd0BfE1fd40736B525CF11 1615952806 MethodID: 0x7ff36ab5 @@ -89,6 +110,7 @@ encoded parameters (input data) = 0x7ff36ab5000000000000000000000000000000000000 ``` Only encode arguments (without function selector): + ```shell $ ethutil encode-param '(address, uint256)' 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 [0]: 0x0000000000000000000000008f36975cdea2e6e64f85719788c8efbbe89dfbbb @@ -97,6 +119,7 @@ encoded parameters (input data) = 0x0000000000000000000000008f36975cdea2e6e64f85 ``` ## Generate New Private Key + ```shell $ ethutil --terse gen-private-key -n 10 0x4a7a7070d616c70ca7caa5e34dfa944f983d530be4831e6e0086a781a679c601 0x356EC6F0b43bdEB18C291D5e629c1585c3c0BA73 @@ -112,13 +135,16 @@ $ ethutil --terse gen-private-key -n 10 ``` ## Dump Address From Private Key + ```shell $ ethutil dump-address --private-key-or-mnemonic 0xef065dcbc43081c63c0fbf389ec8df3872d9d61b1bc2e98d7a0a4395d11314d2 private key 0xef065dcbc43081c63c0fbf389ec8df3872d9d61b1bc2e98d7a0a4395d11314d2, addr 0xB2aC853cF815B47903bc19BF4860540306F4f944 ``` ## Compute Contract Address + Compute contract address before deployment: + ```shell $ ethutil compute-contract-addr 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb --nonce 0 deployer address 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb @@ -127,6 +153,7 @@ contract address 0x3bb8C061Ec6EdB3E78777b983b96468CC4799888 ``` Compute contract address (CREATE2) before deployment: + ```shell $ ethutil compute-contract-addr 0x0000000000000000000000000000000000000000 --salt 0x0000000000000000000000000000000000000000000000000000000000000000 --init-code 0x00 deployer address 0x0000000000000000000000000000000000000000 @@ -136,6 +163,7 @@ contract address 0x4D1A2e2bB4F88F0250f26Ffff098B0b30B26BF38 ``` ## Decode Raw Transaction + ```shell $ ethutil decode-tx 0xf86c808504e3b2920082520894428cf082d321d435ff0e1f8a994e01f976f19c118809b5552f5abade008026a00a27decf27241dca4e5d82bd5b7c1fbcc3f09c35a2a05cb967f2983d148ad6aba0596e9baa40ab157f5b1b0d66746472550ba9000d4154e3faa43ccce00b030452 basic info (eip155): @@ -159,32 +187,38 @@ sender = 0xf7033D6010E8F2E12b810883e1c28CAcd6D25B16 ``` ## Get Contract Runtime Bytecode + ```shell $ ethutil --node mainnet code 0xd152f549545093347a162dce210e7293f1452150 runtime bytecode of contract 0xd152f549545093347a162dce210e7293f1452150 is 0x608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806351ba162c1461005c578063c73a2d60146100cf578063e63d38ed14610142575b600080fd5b34801561006857600080fd5b506100cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610188565b005b3480156100db57600080fd5b50610140600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610309565b005b6101866004803603810190808035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293905050506105b0565b005b60008090505b84849050811015610301578573ffffffffffffffffffffffffffffffffffffffff166323b872dd3387878581811015156101c457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686868681811015156101ef57fe5b905060200201356040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156102ae57600080fd5b505af11580156102c2573d6000803e3d6000fd5b505050506040513d60208110156102d857600080fd5b810190808051906020019092919050505015156102f457600080fd5b808060010191505061018e565b505050505050565b60008060009150600090505b8585905081101561034657838382818110151561032e57fe5b90506020020135820191508080600101915050610315565b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561041d57600080fd5b505af1158015610431573d6000803e3d6000fd5b505050506040513d602081101561044757600080fd5b8101908080519060200190929190505050151561046357600080fd5b600090505b858590508110156105a7578673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878784818110151561049d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686868581811015156104c857fe5b905060200201356040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561055457600080fd5b505af1158015610568573d6000803e3d6000fd5b505050506040513d602081101561057e57600080fd5b8101908080519060200190929190505050151561059a57600080fd5b8080600101915050610468565b50505050505050565b600080600091505b858590508210156106555785858381811015156105d157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc858585818110151561061557fe5b905060200201359081150290604051600060405180830381858888f19350505050158015610647573d6000803e3d6000fd5b5081806001019250506105b8565b3073ffffffffffffffffffffffffffffffffffffffff1631905060008111156106c0573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106be573d6000803e3d6000fd5b505b5050505050505600a165627a7a72305820104eaf57909eb0d29f37ba9e3196e8e88438f83546136cf61270ca5d3b491e160029 ``` ## ERC20 Interaction + The subcommand `erc20` is a helper for subcommand `call/query`. Example of check ERC20 balance: + ```shell -$ ethutil --node mainnet erc20 0xdac17f958d2ee523a2206206994597c13d831ec7 balanceOf 0x703662e526d2b71944fbfb9d87f61de3e0f0f290 +ethutil --node mainnet erc20 0xdac17f958d2ee523a2206206994597c13d831ec7 balanceOf 0x703662e526d2b71944fbfb9d87f61de3e0f0f290 ``` Example of transfer ERC20: + ```shell -$ ethutil --node mainnet --private-key 0xXXXX erc20 0xdac17f958d2ee523a2206206994597c13d831ec7 transfer 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 +ethutil --node mainnet --private-key 0xXXXX erc20 0xdac17f958d2ee523a2206206994597c13d831ec7 transfer 0x8F36975cdeA2e6E64f85719788C8EFBBe89DFBbb 1000000 ``` ## Compute keccak hash + ```shell $ echo -n "abc" | ethutil keccak - 4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 - ``` ## Download source of verified contract + ```shell $ ethutil --node mainnet download-src 0xdac17f958d2ee523a2206206994597c13d831ec7 -d output 2021/12/12 21:25:44 Current network is mainnet @@ -192,6 +226,7 @@ $ ethutil --node mainnet download-src 0xdac17f958d2ee523a2206206994597c13d831ec7 ``` # Documentation + ```txt An Ethereum util, can transfer eth, check balance, call any contract function etc @@ -238,5 +273,7 @@ Use "ethutil [command] --help" for more information about a command. ``` # Issue + ## daily request count exceeded, request rate limited + If `panic: daily request count exceeded, request rate limited` appears, please use your own node url. It can be changed by option `--node-url`, for example `--node-url wss://mainnet.infura.io/ws/v3/YOUR_INFURA_PROJECT_ID`