以太坊上存在着不同的交易类型,比如,将ETH发送到某个地址,部署合约等等。在柏林网络升级之前,以太坊上就有四种不同的交易类型:
带接收地址的常规交易,数据域等;
没有目的地址的合约部署交易,数据域用于合约代码;
带v值签名方式的交易,但不包括链ID(pre-EIP-155);
带v值签名方式的交易,但包括链ID。
不同的以太坊客户端(clients)、库(libraries)和其它工具会分析每次交易,理解每个交易类型。虽然只有四种交易类型,但也有很多复杂性和情况需要处理。技术人员应该检查交易中所有的域,弄清楚是属于什么交易类型。这对于新型交易来说是关键,比如元交易(meta transaction)、多重签名交易(multisig transaction)等pre-EIP-2718交易类型。
以太坊现在有了一个新的交易标准,这是由开发人员迈卡·佐尔图(Micah·Zoltu)在EIP-2718中定义和创建的。类型化交易信封形成了以太坊上一些和其它尚未开发的功能的基础。
本文我们将详细介绍柏林升级中包含的一些标准,以及其它可能未来可能包括的内容。
以太坊有一个交易格式。每个交易包括一个随机数(nonce)、gas价格、gas极限、目的地址、value、数据、v、r、和s。这些字段是RLP编码的,如下所示:
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
EIP-2718为类型化交易定义了一个新的广泛的信封。在新标准中,交易如下所示:
TransactionType || TransactionPayload
其中,这些字段被定义为:
交易类型:介于0和0x7f之间的数字,总共有128个可能的交易类型。
交易有效负载:由交易类型定义的任意字节数组。
这些字段连接组合形成类型化交易。该标准没有描述交易有效负载的格式;它可以是任何任意的字节系列,由新的交易类型(例如,RLP、SSZ等)定义的编码器进行编码。选择简单的字节连接是因为读取一个字节数组的第一个字节,而不需要任何库或工具:你不需要一个RLP或SSZ解析器来检查交易类型。
WeStarter即将开启FinNexus(FNX)认购:据官方消息,WeStarter.org将于2021年3月3日20:00上线去中心化期权项目FinNexus,用户可通过WeStarter以白名单募集和公开募集两种方式认购FNX,白名单申请于今日开启。
FinNexus将衍生品赛道作为重点,并落地于去中心化期权。其开创性的点对池的期权交易模型解决了传统期权交易流动性不足的问题。FNX是FinNexus的平台代币,具有平台决策、管理、收益、流通等多重属性。
WeStarter是基于Heco网络的代币分发平台,通过产品的创新与充足的行业资源,承载多种类型资产的资金与资源需求,打造DeFi项目加速器。WeStarter平台可支持跨链资产的代币分发,并持续发掘多领域方向如STO、NFT等资产,提供多种分发方式给开发者与投资者选择。[2021/2/26 17:55:56]
这种新方法使新的EIPs可以引入交易类型,而不在现有交易格式中引入不必要的复杂性,而且使用不同的以太坊工具(客户端、库)来区分不同的交易变得更容易。
增加的复杂性的一个很好的例子是EIP-155,它通过在交易中使用链ID来引入了回复保护(reply protection)。向交易参数中添加一个新字段将会破坏向后兼容性(backwards compatibility),所以链ID被编码到交易签名(v)的恢复参数(v)中。使用EIP-2718,我们可以简单地创建一个新的交易类型,以维护向后兼容性。
EIP-2718的一个大主题是向后兼容性。EIP-2718采用完全向后兼容模式,这意味着任何现有的工具、库、(硬件)钱包和交易都可以使用它,但他们将无法使用EIP-2718提供的新“功能”以及使用它的标准。旧的交易格式(现在称为原始交易)对于以太坊网络上的新交易仍然有效。
新交易类型的最大数目为0x7f,被选为维持这些旧交易的向后兼容性。RLP编码的交易总是以一个为l的字节开头,参数大于或等于0xc0,因此类型化交易永远不会与旧交易发生冲突,并且只需检查第一个字节,就可以区分类型化交易和旧交易。
EIP-2718本身不定义任何交易类型,但有一些建议使用新标准:
EIP-1559:ETH1.0链市场手续费变化;
EIP-2711:赞助、到期和批处理交易,也由开发人员迈卡·佐尔图(Micah·Zoltu)创建,这也是EIP-2718被创建的原因;
EIP-2930:可选的访问列表。
其中一些标准将在下面进一步详细说明。
新的交易类型可以支持功能的集成,否则将通过Solidity合约或第三方解决方案进行处理。以即将到期的交易为例。在现有的解决方案中,你可以将资金发送到一个Solidity合约,签署一项交易,并将该交易发送到一个专门的节点,以便该交易具有额外的参数,如到期日。然后节点处理发送交易,并确保它在设置的到期日期之前执行,否则交易不会被广播。一些dApps和合约(例如Uniswap)内置了这个功能,但对于大多数交易来说,这是不容易实现的。
EIP-2711将此功能本地化添加到以太坊网络中,同时保持与原始类型交易的向后兼容性(如上一节所述)。它不需要智能合约或专门的节点来运行。然而,目前EIP-2711仍是一个草案,不清楚该EIP是否会很快加入以太坊网络。也可能被分割成多个更小的 EIPs(如EIP-3074)。
在EIP-1559中,gas的工作方式发生了显著的变化。不再向矿工支付全部gas,而是燃烧一部分gas。我们不详细介绍EIP-1559的所有变化,但它确实指定了一种新的交易格式:
0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])
最显著的变化是:
Gas价格已被“每个gas最高优先费用”和“每个gas最高费用”所替代。
链ID是单独编码,而不是包含在签名v值中。这本质上用一个更简单的执行取代了EIP-155。
签名v值现在是一个简单的奇偶校验位(“签名Y奇偶校验”),它是0或1,这取决于应该使用椭圆曲线上的哪个点。
EIP-1559还提供了一种基于EIP-2930来指定访问列表的方法。这可以降低交易的gas成本。
由于EIP-1559对gas费用的工作方式发生了重大变化,因此它与原始交易并不直接兼容。为了保持向后兼容性,EIP-1559描述了一种将原始交易升级到EIP-1559兼容的交易的方法。它通过使用原始gas价格作为每个gas的最高优先费用和最高gas费用来实现这一点。
元交易已经出现了几年,但到目前为止仍一直需要智能合约。与即将到期的交易一样,这需要将ETH发送到智能合约,而该合约必须专门支持元交易。
EIP-2711使得原生元交易(称为赞助交易)和批交易成为可能,而不需要智能合约。一种新的交易格式被定义,交易类型为0x02(尽管这可能会发生变化,因为EIP-1559使用相同的交易类型)。交易如下:
0x02 || RLP([...SenderPayload, ...SenderSignature, ...GasPayerPayload, ...GasPayerSignature])
基本上,EIP-2711包括一个(可选的)有效载荷和gas支付人的签名。该账户将用于支付交易中的gas费用。例如,可以从一个地址发送ERC-20代币,而不需要该地址持有任何ETH。发送方有效载荷、签名等是基于交易子类型定义的。例如,对于交易类型为1的交易,发送方有效载荷被定义为:
[1, ChildTransaction[], nonce, ChainId, ValidUntil, gasLimit, gasPrice]
子交易( Child Transaction )被定义为:发送地址、值、数据。这使得可以在单个交易中指定多个地址、值和数据。例如,这可以用于在单个交易中调用ERC-20的批准和转移。
有关EIP-2711中可用的所有交易子类型的详细说明,建议读者阅读官方文件。
类型化交易为以太坊网络带来了很多可能性。它们可以在不给以太坊客户端(clients)、库(libraries)和其它可用工具增加大量复杂性的情况下创建。
目前,新的交易类型还没有被广泛使用,因为EIP最近才被包含在网络中,但有一些激动人心的EIP正在开发中,比如EIP-2711,它增加了过期交易、批处理交易和赞助交易(又称元交易)等特性。现在可以在以太坊上定义新的交易类型,因此可以轻松创建其它EIP。
本文来自 Mycrypto,原文作者:Maarten Zuidhoorn。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。