签名交易的发件人无效 - 孟买多边形

Posted

技术标签:

【中文标题】签名交易的发件人无效 - 孟买多边形【英文标题】:Invalid sender on signed transaction - mumbai polygon 【发布时间】:2021-11-21 20:38:58 【问题描述】:

我在孟买部署了与在 ropsten to mint nfts 上部署相同的智能合约,没什么太花哨的。然后,我使用 web3 库设置了一些 python 代码来调用铸币函数。当我在 ropsten 上测试时,代码可以正常工作,但在 mumbai 上尝试时却失败了。我也担心多边形主网上的这种失败。我想我正在为每个网络使用正确的chainId。我在签署交易和发送原始版本时得到的错误代码是:‘code’: -32000, ‘message’: ‘invalid sender’。你知道会发生什么吗?

import os
from web3 import Web3
from web3.middleware import geth_poa_middleware
from eth_account import Account

w3 = Web3(Web3.HTTPProvider(f"https://polygon-mumbai.infura.io/v3/os.environ['WEB3_INFURA_PROJECT_ID']"))
#w3 = Web3(Web3.HTTPProvider(f"https://polygon-mainnet.infura.io/v3/os.environ['WEB3_INFURA_PROJECT_ID']"))
#w3 = Web3(Web3.HTTPProvider(f"https://ropsten.infura.io/v3/os.environ['WEB3_INFURA_PROJECT_ID']"))

w3.middleware_onion.inject(geth_poa_middleware, layer=0)
print(w3.isConnected())

addr = "0x0D3C0D1C13a973DEFAe0dBA184081bDE0eD55B4C" # DMT on Polygon Mumbai
#addr = "0x74a4bf35Ec669A500541c1137A1fcDfa5f45194c" # DMT on Ropsten

acct = Account.privateKeyToAccount(os.environ['PRIVATE_KEY'])

#abi = ... # lots of stuff

contract_instance = w3.eth.contract(address=w3.toChecksumAddress(addr), abi=abi)
print(contract_instance.functions.lastTokenId().call())

nonce = w3.eth.get_transaction_count(acct.address)
test = 'https://ipfs.io/ipfs/mydata'
tx_hash = contract_instance.functions.autoMint(acct.address, test).buildTransaction(
    'from': acct.address,
    'chainId': 80001, # mumbai
    #'chainId': 3, # ropsten
    'gas': int(1e6),
    'maxFeePerGas': w3.toWei('2', 'gwei'),
    'maxPriorityFeePerGas': w3.toWei('1', 'gwei'),
    'nonce': nonce
)

signed_txn = w3.eth.account.sign_transaction(tx_hash, private_key=acct.privateKey)
tx_sent = w3.eth.send_raw_transaction(signed_txn.rawTransaction)

我使用的提供商是 infura 通过 http 访问区块链。你认为这个错误是由他们的 api 引起的吗?

【问题讨论】:

您是否启用了 Polygon API 并使用了来自 Infura 的正确 API 密钥?您与 API Key 的交易是否成功? 【参考方案1】:

使用 1559 年之前的费用结构对其进行了修复

tx_hash = contract_instance.functions.automint(acct.address, test).buildTransaction(
    'chainId': 0x13881, # mumbai
    #'chainId': 3, # ropsten
    'gasPrice': w3.toHex(w3.toWei('20', 'gwei')),
    'nonce': nonce,
    'from': acct.address
)

【讨论】:

以上是关于签名交易的发件人无效 - 孟买多边形的主要内容,如果未能解决你的问题,请参考以下文章

此交易无效。请返回收件人的网站并重试

签名验证前发件人证书已过期

多边形交易在孟买运行良好,但在主网上却不行

私人以太坊网络无法识别发件人帐户

无法向群发电子邮件 VBA 添加签名,也无法更改发件人帐户

传输 BEP20 令牌时发件人无效