0

我正在尝试通过与智能合约的交互发送已签名的交易,但在发送原始交易时一切都崩溃了。

我的代码如下

    import Globalvariables as thg
    bsc='https://bsc-dataseed.binance.org/'
    w3=Web3(Web3.HTTPProvider(bsc))
    w3.middleware_onion.inject(geth_poa_middleware, layer=0)

    abi=json.loads(abi_string)

    contract_object=w3.eth.contract(address=w3.toChecksumAddress(thg.direction_market),abi=abi)

    nonce=w3.eth.getTransactionCount(w3.toChecksumAddress(thg.my_direction))

    #tx={'nonce':nonce,'from':w3.toChecksumAddress(thg.my_direction),'gasPrice':50000000000,'gas':277777}
    tx={'nonce':nonce,'from':w3.toChecksumAddress(thg.my_direction),'maxFeePerGas':277777,'maxPriorityFeePerGas':30000}

    input_data={'addresses':[w3.toChecksumAddress(token['owner']),w3.toChecksumAddress(token['nftContract']),w3.toChecksumAddress(thg.contract_wbnb)],
                'values':[int(token['tokenId']),int(w3.toWei(token['bnb'],'ether')),int(token['saltNonce'])],
                'signature':bytes.fromhex(token['sign'].lstrip('0x'))
                }                               
    purchase=contract_object.functions.matchTransaction(input_data['addresses'],input_data['values'],input_data['signature']).buildTransaction(tx)

    sign_tx=w3.eth.account.sign_transaction(purchase,thg.metamask)
    print(sign_tx,type(sign_tx))
    print(sign_tx.rawTransaction,type(sign_tx.rawTransaction))

    try:raw_final=w3.eth.send_raw_transaction(sign_tx.rawTransaction)
    except:raw_final=w3.eth.send_raw_transaction(sign_tx.rawTransaction.hex())

代码在最后两行都返回错误

>>ValueError: {'code': -32000, 'message': 'transaction type not supported'}

为什么我会收到这个?

在文档中,我认为我没有任何错误地遵循了代码。但是,仔细观察,而在文档中,当您调用 sign_tx.rawTransaction 时,它会返回类似这样的内容

>>> signed_txn.rawTransaction
HexBytes('0x02f8b00180843b9aca0084773594008301117094fb6916095ca1df60bb79ce92ce3ea74c37c5d35980b844a9059cbb000000000000000000000000fb6916095ca1df60bb79ce92ce3ea74c37c5d3590000000000000000000000000000000000000000000000000000000000000001c001a0cec4150e52898cf1295cc4020ac0316cbf186071e7cdc5ec44eeb7cdda05afa2a06b0b3a09c7fb0112123c0bef1fd6334853a9dcf3cb5bab3ccd1f5baae926d449')

我从我的代码中看到的是这个

print(signed_txn.rawTransaction,type(signed_txn.rawTransaction))
b'\x02\xf9\x01\xce8"\x82u0\x83.....', <class 'hexbytes.main.HexBytes'>

为什么我的代码返回不同的东西?

像发送原始事务这样的函数需要什么数据类型?我怎样才能使这项工作?

4

0 回答 0