使用批量钱包打ETH铭文

Ethscript火了有一段时间了,相对于其他域名,比如说BRC20、LTC20,使用metamask插件钱包总需要一个一个打,还要提前把想要打的数据转换为十六进制,速度很慢,对于一些需要抢速度的项目来说,完全没有优势。所以我写了一个使用JS打ethscript的脚本,可以使用多个钱包,每个钱包自定义打多少张。

使用方法

在桌面上建立两个excel文件,一个wallet.xlsx,在A列储存钱包私钥,每个钱包提前存好一定量的eth。另外一个命名为data.xlsx,在A列输入自己想要打的铭文,每行一个。运行JS代码,会批量让这些钱包顺序打这些铭文。(批量钱包的原因主要是在于有些铭文对每个钱包打的数量有限制)

下面是代码

import { ethers } from "ethers";
import xlsx  from "xlsx";
//链接网络
const ETH_URL = '去Infura.io申请API';
const provider = new ethers.JsonRpcProvider(ETH_URL);

//****参数设定******
//  需要几个钱包
const numWallet = 5
//  单个钱包打的铭文数量 
const N = 10;
//  计数器
let K = 0;
let m = 0;
//  给自己发送的数额和每个钱包需要的最小金额计算
const value = ethers.parseEther("0");
const balanceThreshold = ethers.formatEther(ethers.parseEther("0.01")); 

//1.读取data数据
// 读取 Excel 文件
const workbook = xlsx.readFile('C:/Users/yelin/Desktop/data.xlsx'); 
// 获取第一个 worksheet 
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
// 定义结果数组
let dataArray = [];
// 遍历每一行
for (let row in worksheet) {
  // 如果是 A 列
  if (row[0] === 'A') {  
    // 获取单元格的值
    let value = worksheet[row].v;   
    // 转为字符串存入结果数组
    dataArray.push(String(value)); 
  }
}

//2.读取wallet
// 读取 Excel 文件
const workbook1 = xlsx.readFile('C:/Users/yelin/Desktop/wallet.xlsx');
const sheet = workbook1.Sheets[workbook1.SheetNames[0]];
// 存储生成的钱包
const wallets = [];
// 遍历每一行
for (let row in sheet) {
    // 检查是否为 A 列 
    if(row[0] === 'A') {
      // 读取单元格的值作为私钥  
      let privateKey = sheet[row].v;
      // 创建新钱包
      let wallet = new ethers.Wallet(privateKey,provider); 
      // 添加到数组
      wallets.push(wallet);
      m++;
      console.log(`第${m}个钱包,钱包地址为${wallet.address}`);
    }
  }


// 3. 为每个钱包生成交易
for (let i = 0; i < numWallet; i++) {
  // 获取钱包余额
  const balance = await provider.getBalance(wallets[i])
  if(ethers.formatEther(balance) < balanceThreshold) {
    console.log(`钱包 ${i+1}:${wallets[i].address} 余额不足,跳过`); 
    continue;
  }
  const to = wallets[i].address; 
  const nonce = await provider.getTransactionCount(to);
  for (let j = 0; j < N; j++) {
    const bytes = Buffer.from(dataArray[K]); 
    const data = ethers.hexlify(bytes);
    const tx = {
        to: to,
        nonce: nonce+j,
        value: ethers.parseEther("0"),
        data:data,
    }
    // 发送交易
    console.log(`\n等待交易在区块链确认`)
    await wallets[i].sendTransaction(tx);
    K++;
    console.log(`第${i+1}个钱包${to}的第${K}笔交易已经完成`)
  }
}