使用PHP 将ETH账户的资产汇集到一个账户

2024/11/29 21:03:04

本文主要是介绍使用PHP 将ETH账户的资产汇集到一个账户,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用PHP 将ETH账户的资产汇集到一个账户

平时如果你需要把多个账户的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 发布!



这篇关于使用PHP 将ETH账户的资产汇集到一个账户的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程