首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EIP-1559:为什么geth需要types.txdata的输入列表?

EIP-1559:为什么geth需要types.txdata的输入列表?
EN

Ethereum用户
提问于 2022-01-18 16:11:16
回答 2查看 1.6K关注 0票数 1

我手动地合成、签名和序列化了以下原始事务:

代码语言:javascript
复制
02f87282053980018504a817c800825208940c512b60531e2440edbee50f48bafdc6d291d8dd890246ddf9797668000080c080a075488ef7d2d6192758545f0020dd3e381a610068e6e7539860461ca25a952d38a0377b07f01be37bc1ebb48eb1ec9fa62c8e4ebf5c6b03d31a113b964b8c9e37e9

它是一个类型-2事务,由类型前缀字节和RLP编码和签名的事务组成,如EIP-1559所示。

但是,将它发送给Geth会导致以下错误:

代码语言:javascript
复制
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译码器能够按以下方式读取事务:

代码语言:javascript
复制
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。但我真的看不见。下列事务解码器也失败:

这就是我手动解码的内容:

代码语言:javascript
复制
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

可能是相关的:如何编码空事务字段?

EN

回答 2

Ethereum用户

发布于 2022-01-18 16:57:17

好的,手动调试RLP一个小时后,结果发现我运行的Geth版本还不支持EIP-1559。*面部表情:

代码语言:javascript
复制
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版本修复了它。

代码语言:javascript
复制
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>
票数 1
EN

Ethereum用户

发布于 2022-11-24 10:42:44

当签名的原始tx无效时,会发生错误rlp: expected input list for types.txdata。如果您将tx十六进制放入Ethereum解码器,它将是无效的。

在这种情况下,EIP-1559费用参数maxFeePerGasmaxPriorityFeePerGas不受支持.通过用gasgasPrice替换它们来修正。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/119252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档