使用 js 将ETH账户的资产平均分散到其他账户
平时如果你需要把一个账户的eth打散到很多账户,其他账户批量操作的话,就需要一个个的发送,很麻烦,下面这段脚本可以把一个账户的eth打散发送到指定的很多账户
首先安装依赖插件
npm install -save web3@4.0.3
npm install -save @ethereumjs/common@3.2.0
npm install -save sign-tx
如下代码展示如何将0xbf8B5bc7Ea580ca7cEDa5F79F6ef3362134fC695 账户的ETH平均分散到其他账户
const {Web3} = require('web3')
const {Common, Chain, Hardfork} = require("@ethereumjs/common");
const Transaction = require('sign-tx').LegacyTransaction;
const rpcURL = "https://eth-mainnet.public.blastapi.io" // RPC URL 如果地址不能使用了 请去 https://infura.io 注册账号获取免费的
const your_private_key = Buffer.from('ea9c312161c541758038e374a53147b933d39f504649b82f823285eb0b2ffd6e', 'hex');
const your_wallet_address = '0xbf8B5bc7Ea580ca7cEDa5F79F6ef3362134fC695'
const web3 = new Web3(rpcURL);
const chainId = 1 ///Chain.Mainnet
function uint8ToHex(uint8arr) {
let hexStr = "";
for (let i = 0; i < uint8arr.length; i++) {
let hex = uint8arr[i].toString(16);
hex = hex.length === 1 ? "0" + hex : hex; // 需要补0
hexStr += hex;
}
return hexStr;
}
const dispersion_accounts = [
"0xA3059b44852dF4c592d7916C19aC1B8EdF839C4C",
"0x2EE0B3Bb2A0222A9a424c861548e6b8d8fd49f65",
"0x1f7537d14A8274C2e1F3B522D7025c1F765438FD",
"0xd27F9cA676d393432722Ae88D9e0cD9152e5Cb41",
"0x5911d5b71E78261ba0D28f71017C9BF418d1e7a1",
"0x1a5CA207E3b6a4FAceADb20DfB7B3aAD3B98c0b8"
];
function dispersion_funds() {
web3.eth.getBalance(your_wallet_address).then(( wei) => {
// 余额单位从wei转换为ether
web3.eth.getTransactionCount(your_wallet_address).then((txCount) => {
let one_amount = wei-BigInt(10**18) // 预留一个ETH做手续费
one_amount = one_amount/BigInt(dispersion_accounts.length)
const txObject = {
from: your_wallet_address,
gasLimit: web3.utils.toHex(21000),
gasPrice: web3.utils.toHex(web3.utils.tonumber(20000000000)),
value: web3.utils.toHex(one_amount),
}
const call_back = function (txHash){
console.log('txHash:', txHash.transactionHash)
}
let nonce = web3.utils.toHex(txCount)
for(let i=0;i<dispersion_accounts.length;i++){
txObject['nonce'] = nonce
txObject['to'] = dispersion_accounts[i]
const common = Common.custom({ chainId: chainId })
let tx = Transaction.fromTxData(txObject, { common })
let signedTx = tx.sign(your_private_key)
let serializedTx = signedTx.serialize()
let tes = serializedTx.valueOf()
let raw = '0x' + uint8ToHex(tes)
web3.eth.sendSignedTransaction(raw).then(call_back)
nonce++
}
})
})
}
dispersion_funds()
每天学习一点点,遨游在区块链知识海洋里
本文由博客一文多发平台 OpenWrite 发布!