铭文在许多区块链游戏和应用中扮演着重要的角色。然而,如果你需要大量铸造铭文,手动完成这项任务将是一项繁重和耗时的工作。为了解决这个问题,我们可以使用Python和Web3库创建一个铭文批量铸造工具,以便更高效地完成这项任务。
故事开端
假设你是一个充满音乐和技术热情的自由职业者,你的工作和生活都是远程的。你对编程和脚本编写有高级技能,喜欢电子设备的修理和服务器的安装。今天,你面临一个挑战:需要批量铸造铭文以满足游戏中的需求。手动完成这项任务将非常繁琐,但是你决心使用自己的技术技能来解决这个问题。让我们一起来创建一个强大的铭文批量铸造工具吧!
步骤1:准备工作
在开始之前,确保你已经安装了以下库:
tkinter
:用于创建图形用户界面。asyncio
:用于异步操作。web3
:用于与以太坊区块链进行交互。httpx
:用于进行HTTP请求。re
:用于正则表达式匹配。
你可以使用以下命令安装这些库:
pip install tkinter asyncio web3 httpx
步骤2:创建图形用户界面
首先,我们将创建一个图形用户界面,用于输入铭文铸造的相关参数。这将大大简化铭文铸造的过程。以下是创建GUI的代码:
# 导入所需库
import tkinter as tk
from tkinter import messagebox, simpledialog
import asyncio
from web3 import AsyncWeb3
import httpx
import re
# 创建一个异步运行的函数,用于处理mint操作
async def run_mint(inputs, root):
try:
await mint(inputs['to'], inputs['rpc'], inputs['private_key'],
inputs['gasPrice'], inputs['maxFeePerGas'],
inputs['maxPriorityFeePerGas'], inputs['data'])
messagebox.showinfo("成功", "交易已发送")
except Exception as e:
messagebox.showerror("错误", str(e))
finally:
root.quit()
# 创建图形用户界面
def create_gui():
root = tk.Tk()
root.title("大神铭文打造神器")
inputs = {
'to': tk.StringVar(),
'rpc': tk.StringVar(),
'private_key': tk.StringVar(),
'gasPrice': tk.StringVar(),
'maxFeePerGas': tk.StringVar(),
'maxPriorityFeePerGas': tk.StringVar(),
'data': tk.StringVar()
}
labels = {
'to': "输入地址(打到那个号):",
'rpc': "输入RPC:",
'private_key': "输入私钥(有gas的小号):",
'gasPrice': "输入gasPrice:",
'maxFeePerGas': "输入maxFeePerGas:",
'maxPriorityFeePerGas': "输入maxPriorityFeePerGas:",
'data': "输入data:"
}
# 创建输入字段
for i, key in enumerate(inputs.keys()):
tk.Label(root, text=labels[key]).grid(row=i, column=0)
tk.Entry(root, textvariable=inputs[key]).grid(row=i, column=1)
# 创建提交按钮
submit_button = tk.Button(root, text="开始打造!!!", command=lambda: asyncio.run(run_mint(inputs, root)))
submit_button.grid(row=len(inputs), column=0, columnspan=2)
# 运行GUI
root.mainloop()
if __name__ == '__main__':
create_gui()
上述代码创建了一个简单的GUI,允许用户输入铭文铸造所需的参数,包括接收地址、RPC地址、私钥、gasPrice等。一旦用户点击“开始打造”按钮,就会触发异步操作来执行铭文铸造。
步骤3:批量铸造铭文
接下来,我们将实现批量铸造铭文的功能。我们将使用Web3库与以太坊区块链进行交互,创建多个交易并将其发送到链上。以下是铭文批量铸造的代码:
async def mint(to, rpc, private_key, gasPrice, maxFeePerGas, maxPriorityFeePerGas, data):
web3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider(rpc))
account = web3.eth.account.from_key(private_key)
http = httpx.AsyncClient()
chain_id = await web3.eth.chain_id
to = web3.to_checksum_address(to)
nonce = await web3.eth.get_transaction_count(account.address)
gasPrice = web3.to_wei(float(gasPrice), 'gwei')
maxFeePerGas = web3.to_wei(float(maxFeePerGas), 'gwei')
maxPriorityFeePerGas = web3.to_wei(float(maxPriorityFeePerGas), 'gwei')
tx = {
'from': account.address,
'to': to,
'nonce': nonce,
'gas': 25024,
'gasPrice': gasPrice,
'maxFeePerGas': maxFeePerGas,
'maxPriorityFeePerGas': maxPriorityFeePerGas,
'chainId': chain_id,
'data': data
}
if gasPrice == 0:
del tx['gasPrice']
else:
del tx['maxFeePerGas']
del tx['maxPriorityFeePerGas']
match = re.search(r'\[(\d+)-(\d+)\]', data)
if match:
start, end = map(int, match.groups())
subtext = match.group()
else:
start, end, subtext = 0, 0, None
time = (end - start) // 100 + 1 if end - start > 10000 else 100
if not data.startswith('0x') and
subtext is None:
data = web3.to_hex(text=data)
for x in range(0, time):
request_list = []
for i in range(0, 100):
tx['nonce'] = nonce
if subtext is not None:
tx['data'] = data.replace(subtext, str(start))
start += 1
if start > end:
print('已经到达最大范围')
return
signed = account.sign_transaction(tx)
nonce += 1
request_list.append({"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": [signed.rawTransaction.hex()], "id": i + 1})
res = await http.post(rpc, json=request_list)
print(res.json())
await asyncio.sleep(1)
上述代码使用异步操作创建交易并将其发送到以太坊链上。它还处理了一些特殊情况,如替换数据中的占位符以实现批量铸造。这样,你就可以轻松地铸造大量铭文而不必手动创建每个交易。
结束语
通过使用Python和Web3库,我们创建了一个强大的铭文批量铸造工具,使铭文铸造变得更加高效和简单。这个工具可以大大提高你的工作效率,让你更专注于你的音乐和技术兴趣。
在编程的世界里,我们总是面临各种挑战,但正是通过不断学习和成长,我们才能不断进步。希望这个教程对你有所帮助,让你在自由职业生活中更加成功。