如何使用Node.js为每个不同钱包循环执行合约部署函数?
多钱包合约批量部署解决方案
你的代码问题在于web3.eth.accounts.privateKeyToAccount仅支持单个私钥参数,传入多个私钥时只会处理第一个,导致程序只完成一次部署就终止。以下是修改后的代码,实现每个私钥对应部署一个独立合约:
const Web3 = require("web3"); const fs = require("fs"); require("dotenv").config(); // 加载合约ABI和字节码 const { abi, bytecode } = JSON.parse(fs.readFileSync("Demo.json")); // 定义要使用的私钥数组 const privateKeys = ["PRIVATEKEY1", "PRIVATEKEY2", "PRIVATEKEY3"]; // 提取部署逻辑为独立可复用函数 async function deployContract(web3, privateKey) { // 创建当前私钥对应的签名账户 const signer = web3.eth.accounts.privateKeyToAccount(privateKey); web3.eth.accounts.wallet.add(signer); // 初始化合约实例并部署 const contract = new web3.eth.Contract(abi); contract.options.data = bytecode; const deployTx = contract.deploy(); const deployedContract = await deployTx .send({ from: signer.address, gas: await deployTx.estimateGas(), }) .once("transactionHash", (txhash) => { const network = process.env.ETHEREUM_NETWORK; console.log(`[${signer.address}] 正在挖矿部署交易...`); console.log(`[${signer.address}] 交易哈希: https://${network}.etherscan.io/tx/${txhash}`); }); // 输出部署结果 console.log(`[${signer.address}] 合约部署完成,地址: ${deployedContract.options.address}`); console.log(`[${signer.address}] 建议将此地址存入.env文件: DEMO_CONTRACT_${signer.address.slice(0,6)}=${deployedContract.options.address}\n`); return deployedContract.options.address; } async function main() { // 配置以太坊节点连接 const network = process.env.ETHEREUM_NETWORK; const web3 = new Web3( new Web3.providers.HttpProvider( `https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}` ) ); // 遍历私钥数组,逐个部署合约(串行执行,避免节点压力) for (const privateKey of privateKeys) { await deployContract(web3, privateKey); } console.log("所有合约部署任务完成"); } main().catch((err) => { console.error("部署过程出错:", err); process.exit(1); });
关键修改说明
- 私钥数组化:把多个私钥存入数组,方便遍历处理
- 部署逻辑封装:将单个合约的部署流程封装成函数,提高代码复用性
- 循环遍历执行:使用
for...of串行遍历私钥,确保每个部署完成后再执行下一个(如果需要并行部署,可改用Promise.all(privateKeys.map(key => deployContract(web3, key))),但需注意节点的请求频率限制) - 账户隔离:每个循环内单独创建对应私钥的签名账户,保证部署操作的独立性
- 增强日志:在日志中添加钱包地址前缀,方便区分不同钱包的部署结果
内容的提问来源于stack exchange,提问作者Nafisa
相关产品推荐
相关产品推荐

