以太坊上存在着不同的买卖类型,比方,将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解析器来查看买卖类型。

这种新办法使新的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的新买卖格局

在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费用来实现这一点。

原始元买卖(meta transactions)和分批买卖(batch transactions)

元买卖已经呈现了几年,但到现在为止仍一向需求智能合约。与即将到期的买卖一样,这需求将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。

视野开拓

该书每次重印,在书店里上架销售,就说明又一投机事件——另一个泡沫或接踵而至的灾难。 这里有一个基本的循环过程:它会随着物品价格的上涨周而复始,无论是股票还是房地产、艺术品或其他任何物品都会如此。 每当市场陷人混乱,总能听到一些相同的话:经济状况基本健康。或者干脆就是基本情况是好的“每每听到这样的话,我们应该明白某些事情情况不妙。-《1929年大崩盘》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注