Web3 отправить необработанную транзакцию ValueError неверный тип тип транзакции не поддерживается

Я пытаюсь отправить подписанную транзакцию из взаимодействия со смарт-контрактом, но все разваливается при отправке необработанной транзакции.

Мой код выглядит следующим образом

          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())

Коды выдают ошибку в обеих последних 2 строках

      >>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'>

Почему мой код возвращает что-то другое?

Какой тип данных требуется такой функции, как отправка необработанной транзакции? Как я могу заставить это работать?

0 ответов

Другие вопросы по тегам