以太坊采用不同的事务类型来定义不同的操作,例如,将以太币发送至某个地址、部署合约等等。 在最近的柏林升级之前,以太坊主要有 4 种不同的事务 “类型”: 带有收款方地址、数据字段的常规事务不带有收款方地址的合约部署事务,其数据字段填写的是合约代码签名v值不含链 ID 的事务(EIP155 实行之前)签名v值含有链 ID 的事务上述事务类型都采用相同的格式。不同的以太坊客户端、库和其它工具必须分析每个事务来判断它属于哪个类型。这四种不同的事务类型引入了很多复杂的情况。我们需要查看事务的所有字段来判断其所属类型。这是人们在提议新的事务类型(如元事务、多签事务等)时不得不面对的重大难题,直到 EIP 2718 出现才打破这一困境。 以太坊现在有了新的事务标准 Typed Transaction Envelope(类型化事务封套),由EIP 2718的提议者Micah Zoltu定义。该标准为以太坊上的一些新功能和即将开发的功能奠定了基础。在本文中,我们将回顾柏林升级引入的一些标准以及未来有可能引入的其它标准。 标准化的事务封套 RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s]) TransactionType || TransactionPayload 上述字段的定义是:TransactionType:0至0x7f范围内的某个值,最多可代表 128 种事务类型。TransactionPayload:由事务类型定义的任意一个字节数组。 将上述字段连接(合并)起来,即可得到一个类型化事务。EIP 2718没有为事务的有效负载定义格式。因此,事务的有效负载可以是任意一段经过编码的字节序列,只要采用符合新的事务类型(如 RLP、SSZ等)定义的编码器即可。之所以选择简单的字节相连方式,是因为读取字节数组的第一个字节非常简单,无需使用任何库或工具。也就是说,你不需要使用 RLP 或 SSZ 解析器来判断事务类型。 这个方法可以避免新的 EIP 在引入新的事务类型时增加现有事务格式的复杂性,并让不同的以太坊工具(客户端、库)更容易区分不同的事务。 在增加复杂性这一点上,EIP-155就是一个很好的例子。它通过在事务中引入链 ID 来实现重放攻击保护。由于在事务参数中增加新的字段会破坏向后兼容性,链 ID 被编码进了事务签名的恢复参数(v),就像我在上一篇关于数字签名的文章中解释的那样。实行 EIP 2718 后,我们可以在不影响向后兼容性的情况下定义新的事务类型。 向后兼容性和传统事务 新的事务类型最多可达0x7f种。选择这一上限是为了保证向后兼容传统事务。经过 RLP 编码的事务的第一个字节始终大于或等于0xc0,因此类型化事务永远不会与传统事务产生冲突,而且类型化事务和传统事务之间可以通过第一个字节来区分。 EIP 2718 本身并未定义任何事务类型,不过已经出现了一些采用这一新标准的 EIP :EIP 1559:改革 ETH 1.0 链的交易费市场。你肯定听说过这个 EIP。EIP 2711:代付事务、限期事务和批量事务。这个 EIP 同样由Micah Zoltu 提出,EIP-2718 中定义的标准就是为此创建的。EIP 2930:可选访问列表。 我们将在下文详细解释其中一些标准。 为什么要引入新的事务类型? EIP 2711 可以将该功能添加到以太坊网络上,同时保证向后兼容传统事务(正如上文所述),而且无需使用智能合约或专门的节点。但是,EIP 2711 目前还是草案,我们还无法确定它近期是否会在以太坊网络上实行。EIP 2711 也有可能被拆分成几个小的 EIP(如EIP 3074)。 -图源:f2pool- EIP 1559 提出的新的事务格式 在 EIP 1559 中,gas 的运作方式发生了巨大变化:gas 会被部分销毁,不再全部支付给矿工。本文不会具体阐述 EIP 1559 的所有变化,但是 EIP 1559 确实提出了一种新的事务格式:0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS]) 最显著的变化包括:用 “每单位 gas 的最高优先费用(maxpriorityfee per gas)” 和 “每单位 gas 的最高费用(max fee per gas)” 来代替 gas price。链 ID 是单独编码的,不再包含在签名v值内。这实际上是使用更简单的实现来代替 EIP 155。签名v值变成了一个简单的校验位(“签名 Y 校验位”),不是 0 就是 1,具体取决于使用椭圆曲线上的哪个点。EIP 1559 还提供了一种基于 EIP 2930 指定访问列表的方法。这样可以减少事务的 gas 成本。由于 EIP 1559 极大地改变了 gas 费的运作方式,它并不能直接兼容传统事务。为了保证向后兼容性,EIP 1559 提出了一种将传统事务升级成兼容 EIP 1559 事务的方法,即,使用 “每单位 gas 的最高优先费用” 和 “每单位 gas 的最高费用” 来代替“gas 价格”。原生元事务和批量事务 EIP 2711 使得原生元事务(又称代付事务)和批量事务成为可能,无需依赖于智能合约。这里定义了一个新的事务格式,事务类型是0x02(但是事务类型可能会更改,因为 EIP-1559 也使用同一个事务类型标识)。交易如下所示: 0x02||RLP([...SenderPayload,...SenderSignature,...GasPayerPayload,...GasPayerSignature]) EIP 2711 主要包括 gas 付款方(用来支付事务 gas 费的账户)的有效负载(可选)和签名。这样一来,即使不持有任何以太币的地址也能发送 ERC 20 代币。发送方的有效负载和签名等均基于事务子类型(1 至 4)定义。例如,如果交易类型为1,发送方的有效负载被定义为: [1,ChildTransaction[],nonce,ChainId,ValidUntil,gasLimit,gasPrice] ChildTransaction被定义为[to, value, data],可以在单个事务内指定收款方地址、值和数据。例如,ChildTransaction可以用来在单笔事务中调用 ERC 20 的approve和transferFrom。如果你想了解更多关于 EIP 2711 的事务子类型的信息,我建议你阅读EIP 2711 的规范。 结论 目前,由于 EIP 2718 最近才被添加到网络中,新的事务类型还没有得到广泛应用,但是目前还有一些很棒的 EIP 正在开发中,例如,EIP 2711 提出了限期事务、批量事务和代付事务(即,元事务)。由于以太坊上可以定义新的事务类型,提出新的 EIP 也会变得更容易。 原文链接: https://blog.mycrypto.com/new-transaction-types-on-ethereum/ 作者:Maarten Zuidhoorn 翻译&校对:闵敏 &阿剑—- 编译者/作者:EthFans 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
引介 | 以太坊上新的事务类型:EIP-2718 简介
2021-05-18 EthFans 来源:区块链网络
LOADING...
相关阅读:
- 比特币以太坊FIL选择哪个价值更高?2021-05-18
- 八哥论币:5.17以太坊行情分析压制难破空军蓄势待发2021-05-17
- 数字经济之区块链+车联网2021-05-17
- 比特币以太坊深度回调反弹上行多军重新归来后市操作策略2021-05-17
- 京星说币波卡上即将爆发的4个项目2021-05-17