我手动地合成、签名和序列化了以下原始事务:
02f87282053980018504a817c800825208940c512b60531e2440edbee50f48bafdc6d291d8dd890246ddf9797668000080c080a075488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38a0377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9它是一个类型-2事务,由类型前缀字节和RLP编码和签名的事务组成,如EIP-1559所示。
但是,将它发送给Geth会导致以下错误:
eth.sendRawTransaction("0x02f87282053980018504a817c800825208940c512b60531e2440edbee50f48bafdc6d291d8dd890246ddf9797668000080c080a075488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38a0377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9")
Error: rlp: expected input list for types.txdata
at web3.js:6347:37(47)
at web3.js:5081:62(37)
at <eval>:1:23(4)事务是一个简单的值传输,没有任何调用数据或任何访问列表。然而,它似乎期待某种类型的清单。我的RLP译码器能够按以下方式读取事务:
Eth::Tx.decode "02f87282053980018504a817c800825208940c512b60531e2440edbee50f48bafdc6d291d8dd890246ddf9797668000080c080a075488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38a0377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9"
=> #<Eth::Tx::Eip1559:0x000056001ab1ab00
@access_list=[],
@amount=42000000000000000000,
@chain_id=1337,
@destination="0c512b60531e2440edbee50f48bafdc6d291d8dd",
@gas_limit=21000,
@max_fee_per_gas=20000000000,
@max_priority_fee_per_gas=1,
@payload="",
@sender="61792A47cA5D231d0a8c165536586f83DC893C12",
@signature_r="75488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38",
@signature_s="377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9",
@signature_y_parity=0,
@signer_nonce=0,
@type=2>但是geth没能破解交易。因此,我假设在事务编写器或rlp编码器中存在一个bug。但我真的看不见。下列事务解码器也失败:
这就是我手动解码的内容:
02 # eip-1559 transaction tpye
f872 # rlp-prefix (list of 12?)
82 0539 # chain id (1337)
80 # nonce (0)
01 # priority fee (1)
85 04a817c800 # max fee (20 gwei)
82 5208 # gas limit (21_000)
94 0c512b60531e2440edbee50f48bafdc6d291d8dd # destination
89 0246ddf97976680000 # amount (42 ether)
80 # data (empty "")
c0 # access list (empty [])
80 # y-parity (0)
a0 75488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38 # r
a0 377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9 # s窃听器在哪里?一个空的访问列表应该是80还是c0?
可能是相关的:如何编码空事务字段?
发布于 2022-01-18 16:57:17
好的,手动调试RLP一个小时后,结果发现我运行的Geth版本还不支持EIP-1559。*面部表情:
INFO [01-18|16:50:33.830] Wrote custom genesis block OK config="{ChainID: 1337 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: 0 ConstantinopleFix: 0 Istanbul: 0 MuirGlacier: <nil> Engine: clique}"
INFO [01-18|16:50:33.830] Initialised chain configuration config="{ChainID: 1337 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: 0 ConstantinopleFix: 0 Istanbul: 0 MuirGlacier: <nil> Engine: clique}"
INFO [01-18|16:50:33.830] Initialising Ethereum protocol versions="[65 64 63]" network=1337 dbversion=<nil>
WARN [01-18|16:50:33.830] Upgrade blockchain database version from=<nil> to=8升级到1.10.15版本修复了它。
INFO [01-18|17:53:30.506] Initialised chain configuration config="{ChainID: 1337 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: 0 Petersburg: 0 Istanbul: 0, Muir Glacier: 0, Berlin: 0, London: 0, Arrow Glacier: <nil>, MergeFork: <nil>, Engine: clique}"
INFO [01-18|17:53:30.506] Initialising Ethereum protocol network=1337 dbversion=<nil>发布于 2022-11-24 10:42:44
当签名的原始tx无效时,会发生错误rlp: expected input list for types.txdata。如果您将tx十六进制放入Ethereum解码器,它将是无效的。
在这种情况下,EIP-1559费用参数maxFeePerGas和maxPriorityFeePerGas不受支持.通过用gas和gasPrice替换它们来修正。
https://ethereum.stackexchange.com/questions/119252
复制相似问题