import json
import os
import time
from loguru import logger
from web3 import Web3
from web3.middleware import geth_poa_middleware
def transaction_maintain(from_address, contract_address, private_key, transaction_data='', nonce=None,
gas_price=None, gas=None, eth_value=0, log=''):
try:
contract_address = w3.to_checksum_address(contract_address)
from_address = w3.to_checksum_address(from_address)
if nonce is None:
nonce = w3.eth.get_transaction_count(from_address, 'pending')
if gas_price is None:
gas_price = w3.eth.gas_price * 1.1
gas_price = Web3.from_wei(int(gas_price), 'gwei')
if gas is None:
tx = {
'from': from_address,
'to': contract_address,
'gasPrice': w3.to_wei(gas_price, 'gwei'),
'chainId': 1,
'nonce': nonce,
'data': transaction_data,
'value': eth_value
}
gas = w3.eth.estimate_gas(tx)
tx['gas'] = gas
else:
tx = {
'from': from_address,
'to': contract_address,
'gas': gas,
'gasPrice': w3.to_wei(gas_price, 'gwei'),
'chainId': 1,
'nonce': nonce,
'data': transaction_data,
'value': eth_value
}
signed_tx = w3.eth.account.sign_transaction(tx, private_key)
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
hash = w3.to_hex(tx_hash)
logger.info(f'地址:{from_address} \n'
f'contract_address:{contract_address} \n'
f'{log}\n'
f'hash:{hash}')
return hash, 'success'
except Exception as e:
print(f'{from_address}:transaction error', e)
logger.error(f'{from_address}:transaction error:{e}', e)
def transaction_goerli(from_address, contract_address, private_key, transaction_data='', nonce=None,
gas_price=None, gas=None, eth_value=0, log=''):
try:
contract_address = w3.to_checksum_address(contract_address)
if nonce is None:
nonce = w3.eth.get_transaction_count(from_address, 'pending')
if gas_price is None:
gas_price = w3.eth.gas_price * 1.1
gas_price = Web3.from_wei(int(gas_price), 'gwei')
if gas is None:
tx = {
'from': from_address,
'to': contract_address,
'gasPrice': w3.to_wei(gas_price, 'gwei'),
'chainId': 5,
'nonce': nonce,
'data': transaction_data,
'value': eth_value
}
gas = w3.eth.estimate_gas(tx)
tx['gas'] = gas
else:
tx = {
'from': from_address,
'to': contract_address,
'gas': gas,
'gasPrice': w3.to_wei(gas_price, 'gwei'),
'chainId': 5,
'nonce': nonce,
'data': transaction_data,
'value': eth_value
}
signed_tx = w3.eth.account.sign_transaction(tx, private_key)
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
hash = w3.to_hex(tx_hash)
# logger.info(f'地址:{from_address} \n'
# f'contract_address:{contract_address} \n'
# f'{log}\n'
# f'hash:{hash}')
logger.info(f'正在mint Dumb Contract ...hash:{hash}')
return hash, 'success'
except Exception as e:
print(f'{from_address}:transaction error', e)
logger.error(f'{from_address}:transaction error:{e}', e)
def dumb_mint(contractId, amount):
data = generate_data(contractId, amount)
# 将字符串转换为字节串
bytes_data = data.encode('utf-8')
# 将字节串转换为十六进制表示
transaction_data = bytes_data.hex()
return transaction_data
def generate_data(contractId, amount):
# 校验contractId是否以'0x'开头
if not contractId.startswith('0x'):
raise ValueError("contractId必须以'0x'开头")
# 将amount补全为18个0
amount_str = str(amount) + '0' * 18
data = {
"to": contractId,
"data": {"function": "mint", "args": {"amount": amount_str}}
}
return f"data:application/vnd.esc;esip6=true,{json.dumps(data, separators=(',', ':'))}"
if __name__ == '__main__':
# 在https:
w3 = Web3(Web3.HTTPProvider(RPC))
w3.middleware_onion.inject(geth_poa_middleware, layer=0)
# 填入钱包地址和私钥,建议使用新钱包并只使用这一次,避免被盗
address = ""
private_key = ""
contract_address = "0x0000000000000000000000000000000000000000"
# goerli测试网版——极速mint版
nonce = w3.eth.get_transaction_count(w3.to_checksum_address(address), 'pending')
i = 0
while i < 10:
# 在这里修改要mint的合约地址
transaction_data = dumb_mint("", 1000)
transaction_goerli(address, contract_address, private_key, transaction_data=transaction_data, nonce=nonce,
gas_price=None, gas=None, eth_value=0, log='goerli_dumb_mint')
nonce += 1
i += 1
time.sleep(1)
# # goerli测试网版——普通mint版
# i = 0
# while i < 10:
# # 在这里修改要mint的合约地址
# transaction_data = dumb_mint("", 1000)
#
# hash = transaction_goerli(address, contract_address, private_key, transaction_data=transaction_data, nonce=None,
# gas_price=None, gas=None, eth_value=0, log='goerli_dumb_mint')
# i += 1
# time.sleep(5)
# # eth主网版——极速mint版
# nonce = w3.eth.get_transaction_count(w3.to_checksum_address(address), 'pending')
# i = 0
# while i < 10:
# # 在这里修改要mint的合约地址
# transaction_data = dumb_mint("", 1000)
#
# hash = transaction_maintain(address, contract_address, private_key, transaction_data=transaction_data, nonce=nonce,
# gas_price=None, gas=None, eth_value=0, log='maintain_dumb_mint')
# i += 1
# nonce += 1
# time.sleep(1)
#
# # eth主网版——普通mint版
# i = 0
# while i < 10:
# # 在这里修改要mint的合约地址
# transaction_data = dumb_mint("", 1000)
#
# hash = transaction_maintain(address, contract_address, private_key, transaction_data=transaction_data, nonce=None,
# gas_price=None, gas=None, eth_value=0, log='maintain_dumb_mint')
# i += 1
# time.sleep(5)