尝试将 SmartContract 写入 Pancakeswap 路由器时出现 Web3.py “未知帐户”错误
Posted
技术标签:
【中文标题】尝试将 SmartContract 写入 Pancakeswap 路由器时出现 Web3.py “未知帐户”错误【英文标题】:Web3.py “Unknown account” error when trying to write SmartContract to Pancakeswap router 【发布时间】:2021-08-06 11:15:29 【问题描述】:我开始开发一个小程序,它应该允许我通过 pancakeswap 路由器购买代币。当我尝试进行交易时,出现“未知帐户”错误。我认为这可能是因为我应该在本地“登录”到我的元掩码帐户,但这只是我的假设。我导出了我的私钥并尝试使用w3.eth.account.from_key(privateKey)
从中创建一个帐户,但它没有做任何事情。我还尝试在所有地址上执行w3.toChecksumAddress(address)
,但它没有做任何事情。我现在不知道我能做什么。
这是我的代码:
binanceRPC = 'https://bsc-dataseed1.defibit.io/'
w3 = Web3(Web3.HTTPProvider(binanceRPC))
PCS_V2_ADDR = w3.toChecksumAddress(
'0x10ED43C718714eb63d5aA57B78B54704E256024E')
PCS_ABI = #there would be pcs ABI but i needed to delete it due to character limit on stack
PCS_ROUTER_CONTRACT = w3.eth.contract(address=PCS_V2_ADDR, abi=PCS_ABI)
print(w3.isConnected()) # True
WBNB = w3.toChecksumAddress('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c')
shitcoin = w3.toChecksumAddress('0x3ee2200efb3400fabb9aacf31297cbdd1d435d47')
nonce = w3.eth.get_transaction_count(testAccAddr)
amountIn = 0.0005
tx =
'nonce': nonce,
'from': testAccAddr,
'to': PCS_V2_ADDR,
'gasPrice': 5,
'gas': 165250,
'value': w3.toWei(amountIn, 'ether')
w3.eth.account.privateKeyToAccount(testAccPrvKey)
print(w3.eth.accounts) # []
txHash = PCS_ROUTER_CONTRACT.functions.swapExactETHForTokens(0, [w3.toChecksumAddress('0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'), w3.toChecksumAddress(
'0x3ee2200efb3400fabb9aacf31297cbdd1d435d47')], testAccAddr, 1621289953).transact(tx) # ValueError: 'code': -32000, 'message': 'unknown account'
【问题讨论】:
【参考方案1】:试试这样的:
account = w3.eth.account.privateKeyToAccount(testAccPrvKey)
w3.eth.default_account = account.address
txn = PCS_ROUTER_CONTRACT.functions.swapExactETHForTokens(0,
[w3.toChecksumAddress('0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'),
w3.toChecksumAddress('0x3ee2200efb3400fabb9aacf31297cbdd1d435d47')],
testAccAddr, 1621289953).buildTransaction(
'chainId': 97, #This is testnet
'value': w3.toWei(amountIn, 'ether'),
'nonce': nonce,
)
signed_txn = account.signTransaction(txn)
txid = w3.toHex(w3.eth.sendRawTransaction(signed_txn.rawTransaction))
【讨论】:
以上是关于尝试将 SmartContract 写入 Pancakeswap 路由器时出现 Web3.py “未知帐户”错误的主要内容,如果未能解决你的问题,请参考以下文章