solana链好像每个tx携带的字符有限,所以建议一次转10个地址
const web3 = require('@solana/web3.js');
const bs58 = require('bs58'); // 引入bs58库来处理Base58编码
async function multisendSOL(senderKeypair, transfers, connection) {
let transaction = new web3.Transaction();
// 为每个接收者添加一个转账指令到交易中
transfers.forEach(transfer => {
// console.log('Attempting to transfer to:', transfer.to); // 打印出要转账的地址
try {
const toPubkey = new web3.PublicKey(transfer.to);
transaction.add(
web3.SystemProgram.transfer({
fromPubkey: senderKeypair.publicKey,
toPubkey: toPubkey,
lamports: transfer.amount * web3.LAMPORTS_PER_SOL,
})
);
} catch (error) {
console.error('Error creating PublicKey for address:', transfer.to, error);
}
});
// 签名并发送交易
try {
console.log('Sending transaction...');
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[senderKeypair]
);
console.log('Transaction sent:', signature);
} catch (error) {
console.error( error);
}
}
async function main() {
// 使用devnet
const connection = new web3.Connection('rpc_url', 'confirmed');
// console.log('Connected to cluster testnet',connection);
// 从Base58编码的字符串转换为密钥数组
const senderPrivateKeyBase58 = '私钥';
const senderSecretKey = bs58.decode(senderPrivateKeyBase58);
const senderKeypair = web3.Keypair.fromSecretKey(senderSecretKey);
const transfers = [
{
"to": "地址1",
"amount": 0.03
},
{
"to": "5RpmhhyFjVasXcgHSu33Jko6engA7tUQJ4ApfHYdrW78",
"amount": 0.03
},
];
await multisendSOL(senderKeypair, transfers, connection);
}
// 安装bs58库:npm install bs58
main().catch(console.error);