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}笔交易已经完成`)
}
}
