平时如果你需要把多个账户的eth汇集到一个账户,就需要一个个的发送,很麻烦,下面这段脚本可以把多个账户的eth汇集到一个账户
首先安装依赖插件
composer require web3p/web3.php composer require blockchainethdev/ethereum-tx
如下代码展示
<?php require('../vendor/autoload.php'); use Web3\Web3; use Web3\Utils; //use Web3\Providers\HttpProvider; //use Web3\RequestManagers\HttpRequestManager; use Blockchainethdev\EthereumTx\Transaction; /* * Ethereum Mainnet : 1 * BNB Smart Chain Mainnet : 56 * Arbitrum One : 42161 * Polygon Mainnet : 137 * OP Mainnet : 10 * */ define('chainId',1); $Web3 = new Web3(new HttpProvider(new HttpRequestManager("http://localhost:7545",10))); # 在https://infura.io注册获得免费的rpc地址 示例: https://mainnet.infura.io/v3/{密钥} $Eth = $Web3->getEth(); $toaddress = "0xbf8B5bc7Ea580ca7cEDa5F79F6ef3362134fC695"; $from_accounts = [ "0xA3059b44852dF4c592d7916C19aC1B8EdF839C4C"=> "a5627de24f88d2e8586d314203acd4c8baf5bc710a76fdf000eeb4f54f692254", "0x2EE0B3Bb2A0222A9a424c861548e6b8d8fd49f65"=> "023bca35e1034ca3b073a5540fb036c3d1db13a599475afa603ccda5dbbdecea", "0x1f7537d14A8274C2e1F3B522D7025c1F765438FD"=> "fca4097f57fa73f18aec6ef04024fe27e277ba5de814520938ac3e17facc7717", "0xd27F9cA676d393432722Ae88D9e0cD9152e5Cb41"=> "7b96a28cd9487c2582197cccf4bb8f6a14a56d145f6c8895b3778a8caabc3eef", "0x5911d5b71E78261ba0D28f71017C9BF418d1e7a1"=> "671fc96178e91d2d20a341794ff7d9ba9595e4f623facdbe7b5d220c9485a312", "0x1a5CA207E3b6a4FAceADb20DfB7B3aAD3B98c0b8"=> "8ef1c6253183c968c5a1c85fc84a73b55de81d1ae8cc4aee761560ade71b6908" ]; #将一个账户的所有eth分散到其他账户,留1eth做手续费 function collect_funds(){ global $Eth; global $from_accounts; foreach ($from_accounts as $address =>$privatekey){ $Eth->getBalance($address, function ($err, $balance) use($address,$privatekey) { global $Eth; if ($err == null) { $all_send = $balance->toString()-(10**18);//留1eth做手续费 print_r($all_send); $Eth->getTransactionCount($address, function ($err, $transactionCount)use($Eth,$all_send,$privatekey) { if ($err !== null) { return print_r($err); } $Eth->gasPrice(function ($err, $gasPrice)use($transactionCount,$Eth,$all_send,$privatekey) { global $toaddress; if ($err !== null) { return print_r($err); } $nonce = $transactionCount->toString(); $transaction = new Transaction([ 'nonce' => Utils::toHex(intval($nonce),true), 'to' => $toaddress, 'gas' => Utils::toHex(21000,true), 'gasPrice' => Utils::toHex(intval($gasPrice->toString()),true), 'value' =>Utils::toHex(number_format($all_send, 0, '', ''),true), 'chainId' => chainId, ]); $sign_data = $transaction->sign($privatekey); $Eth->sendRawTransaction("0x".$sign_data, function ($err, $transaction) { if ($err !== null) { print_r($err); } echo 'tx id: ' . $transaction . PHP_EOL; }); }); }); } }); } } collect_funds();
每天学习一点点,遨游在区块链知识海洋里
本文由博客一文多发平台 OpenWrite 发布!