目前,以太坊每秒只能处理大约 15 笔交易;这意味着验证者会从交易池中选择一组尚未确认的交易,而他们选择这些交易的方式实际上与他们的利润有关。因此,您必须争取将您的交易纳入其中,因为一次可以处理的交易数量有限。
您知道,当验证者将您的交易包含在区块中时,他们会获得费用。现在从验证者的角度思考;当前有两笔交易位于交易池中等待验证器接收。一笔交易愿意支付 10 美元,另一笔交易只支付 1 美元作为费用。您会选择哪种交易?
10 美元的,对吗?因为如果您将此交易包含在区块中,您将获得 10 美元的费用。
让我简单地解释一下。当与以太坊网络交互时,您通常会调用某些智能合约。智能合约是一组指令;将它们视为一个程序。每条指令都需要一定的计算能力。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract HelloWorld { string public message; constructor() { message = "Hello World"; } function getMessage() public view returns (string memory) { return message; } function setMessage(string memory newMessage) public { message = newMessage; } }
如果你是一个
当您部署此合约时,首先调用的是其构造函数,它将message
变量设置为“Hello World” 。这改变了区块链的状态。任何状态变更都需要付费。假设将字符串存储在变量中的成本为 1 美元。
如果您想将消息设置为其他内容,例如“欢迎阅读 Kishan 的文章” ,您需要调用合约中的setMessage()
方法,传递您所需的消息,这将再次需要一些费用,因为您正在改变状态。假设再次需要 1 美元。
如果我想查看消息内容该怎么办?您可以简单地调用getMessage();
这不需要任何费用,因为它不会改变状态。解释完之后,让我们回到我们的讨论。
假设,由于某种原因,您当前位于交易池中的交易调用此HelloWorld
智能合约并将消息设置为您的名字。
现在假设验证者假设选择了您的交易,他会看到您已将费用设置为 1 美元,并且智能合约本身的调用将花费 1 美元。所以,他自己也没有得到什么回报。所有费用均通过与智能合约交互使用。那他为什么要捡起来呢?该交易将被拒绝,因为验证者没有动力处理它并将其包含在链中。因此,您必须以更高的费用重试,以便吸引验证者选择您的交易。
当大量用户在以太坊上进行交易时,汽油费会变得非常有竞争力。是的,您可以手动设置费用,但请注意,这可能需要大量时间才能得到确认,因为验证者只会选择对他们有利的交易。
如果您的交易对时间敏感,例如您希望尽快结束交易,那么就会存在被清算的风险。在这种情况下,您最好将费用设置得尽可能高,或者使用一个可以为您提供费用估算的钱包,以便在几秒钟内确认您的交易。因为节省天然气可能会导致您的整个投资组合被抹去。
高额费用阻碍了许多加密货币爱好者在以太坊上进行交易,并且引入了许多其他第一层来解决这个问题。但它们都缺乏去中心化,这就是为什么有人会转向 web3。
我们希望利用以太坊提供的去中心化和安全性,但同时,又不想因为这些高额费用而损失我们的口袋。
解决这些问题的一种方法是 Rollups,一种第 2 层扩展解决方案。
汇总是一种聚合交易并在链外处理交易并将结果发布回链上的方法。
所有这些链下和链上可能会给理解带来疑问,所以让我进一步澄清一下。将汇总视为可以显着减少以太坊区块链费用和拥塞的过程。这项工作的方式是将大量交易汇总(聚合)在一起,并将它们移动到链外,例如平行链、VM 等。这些平行链由第 2 层网络(例如 Arbitrum、 zkSync)操作,乐观主义等
聚合是由称为汇总操作员的实体完成的,其主要工作是收集来自不同用户的交易并在链下环境中执行它们。同样,链下可能意味着很多东西,具体取决于实现,例如虚拟机、侧链或其他第 2 层协议。
一旦执行了交易,它就会将聚合数据(汇总块)作为调用数据提交到以太坊链,并附上其已正确执行的证明。到这里,我们就清楚了,但是calldata 是什么?
将 calldata 视为一种特殊类型的数据,可以存储在以太坊上而不会被执行或影响其状态。
Rollup 运营商需要向以太坊验证器支付费用,以将通话数据包含在区块中。一旦它被包含在内。 Rollup 操作员监视Rollup 合约(在下一节中解释)是否存在来自其他用户或验证者的任何质疑或争议。如有争议,将作出相应回应。
Rollup 合约负责验证 Rollup 操作员提交的调用数据中存在的交易数据和证明。它是部署在以太坊上的智能合约,用于管理汇总的状态和逻辑。
Rollup 合约从 rollup 操作者处接收交易数据和证明作为 calldata,验证它们,更新 rollup 的状态,并针对任何状态更改发出事件。
让我们结合我们所学到的所有知识并用一个例子来总结一下:
假设您想使用汇总发送 1 ETH 给您的朋友 Ram。
您指定 Ram 的地址以及要发送到钱包中的金额并签署交易。
之后,您将交易提交给汇总操作员,该操作员负责聚合来自不同用户的交易并在链外执行环境中执行它们。
然后,汇总操作员会将您的交易与其他交易捆绑在所谓的汇总块中,并将其作为calldata提交到以太坊链。然后,它向验证者支付费用,以将其包含在区块中。
现在,根据汇总的类型,汇总操作员可能需要与调用数据一起提交汇总块有效性的证明或附加断言。
完成此操作后,汇总块将由汇总合约进行处理,汇总合约是部署在以太坊链上的智能合约,用于管理汇总的状态和逻辑。合约验证证明或断言,更新汇总用户的状态,并针对任何状态更改发出事件。
最后,Ram 在他的汇总账户中收到您发送的 1 ETH。
乐观汇总是乐观的。我的意思是他们假设批次中的每笔交易都是有效的。但是有一个问题!他们给出了一个宽限期,认为交易无效的用户或验证者可以通过提交防欺诈来质疑该交易。以太坊主网随后对其进行验证,如果挑战成功,则rollup区块将被拒绝,不诚实的运营商将受到严厉惩罚。
如果宽限期结束后没有争议,则该交易批次将锚定到以太坊,并且其包含的状态更改将被最终确定。
尽管它提供了更高的可扩展性并降低了 Gas 费用,但它会导致交易最终完成的延迟,因为人们必须等待宽限期。
比赛中有两匹主要马匹:
我写了一篇详细的文章解释zk-rollups,你可以参考一下。不管怎样,我会向您简要介绍一下它是什么以及它是如何工作的。
zk rollups 与乐观汇总不同,假设每笔交易在被证明有效之前都是无效的。它使用“零知识证明”来验证交易的真实性。一旦它处理完批次中的所有交易,它就会将单个交易发送回以太坊,并附上汇总合约可以轻松验证的证明。
与乐观汇总相比,它更安全。由于没有宽限期,交易具有即时终结性,因为有效性已通过密码证明得到证明。然而,生成证明需要大量的计算能力和专业知识来实现它。与乐观汇总相比,这会增加复杂性。
比赛中的两匹主要马匹是:
感谢您花时间阅读这篇文章。
参考: