交易


交易

以太坊的交易是由外部拥有的账户(由用户而非代码拥有的账户)加密签署的指令。这些指令被存储在区块链中,并添加到一个区块中。 当一个交易启动时,以太坊虚拟机(EVM)的状态会发生变化。一个交易可以是任何东西,从发送Gas到另一个账户到调用智能合约的功能。

前提

我们建议你先阅读账户open in new window以了解本页面。

交易如何运作

当用户在以太坊上发起交易时,一些特定的数据会被创建。

  • Receiver: 收件人是接收交易的账户地址。接收者可以是一个合约账户或外部拥有的账户。每笔交易都是针对一个特定的收件人的。
  • Nonce:这个字段显示的是基于账户计数器的最新交易,该计数器保持着对其交易数量的跟踪。网络使用交易nonce来确保交易以正确的顺序完成。
  • Gas Price: 大多数交易必须从交易的作者那里支付一笔费用。这个费用是按单位气体计算的。这个单位是Wei,一个较小的Gas单位。
  • Gas limit:交易作者指定交易使用的气体单位数量。这是可消耗的气体总量。
  • Value: 发送方账户希望传输给接收方的Wei或Ether的数量,由价值表示。
  • Data: 如果交易接收方是一个智能合约,那么数据就包含了合约功能的执行信息。这包括具有不同长度的数据。
  • Signature: 签名表明谁发送了通信。当一个外部拥有的账户用其私钥确认并签署交易时,签名就会产生。

交易类型

  • 简单或资产转移。这指的是以Gas形式从一个账户到另一个账户的常规代币转移。

为了部署一个合同,用户调用ContractDeployer的create函数,并提供要发布的合约的哈希值以及构造器参数。合同字节码本身是在EIP712事务的factory_deps字段中提供的。如果合同是一个工厂(即它可以部署其他合同),这些合约的字节码也应该包括在 factory_deps 中。

  • 合约部署事务。zkSync上的合约部署与Ethereum有很大不同。
    • 以太坊。当用户向零地址(0x000...000)发送一个交易,交易的data字段等于与构造器参数相连接的合约字节码时,合约部署就发生了。
    • zkSync。要在zkSync上部署合约,用户调用ContractDeployercreate函数,并提供要发布的合约的哈希值以及构造函数参数。 合同字节码本身是在EIP712事务的factory_deps字段中提供的。 如果合同是一个工厂(即它可以部署其他合同),这些合同的字节码也应该包括在factory_deps中。 阅读更多关于合约部署

Tips

zkSync支持Ethereum的 "旧"(EIP2718之前)交易类型,即EIP1559交易类型,以及其EIP712交易。这种类型的交易可用于访问zkSync的特定功能,如账户抽象。此外,智能合约只能用这种交易来部署。

利用zkSync的SDK没有必要了解交易格式,但如果你有兴趣,你可以了解更多关于它的信息这里

什么时候交易被认为是最终的?

交易最终性是指在区块链网络背景下,交易不能被逆转、改变或变异的承诺。

在股权证明下,以太坊交易在正常情况下平均在2.5个纪元(16分钟)内最终完成:恢复该交易将花费以太坊总供应量的1/3。

一旦一个区块在zk卷中被填充和密封,它的状态就会被提交到以太坊主链上。然后开始证明阶段,并为每个区块交易构建一个SNARK有效性证明。一旦完成,SNARK被发送到L1智能合约上进行验证,交易状态在验证后成为最终状态。

从zkSync的角度来看,当交易(SNARK验证)被L1执行时,_finality_就发生了。在这一点上,保证与同一L1区块内的任何其他L1交易相同;在初始区块被处理后发出的L1区块越多,这个交易被推翻的可能性就越小。

当用户传输交易时,zkSync目前正在等待整个区块被填充,这意味着最终时间可能会更长,这取决于通过zkSync发送的交易量。随着吞吐量的增加,最终时间将减少。

运营商到底是什么?

操作者是执行基本的ZK滚动功能的角色。他们负责生产区块,包装交易,进行计算,并将数据提交给以太坊主链进行验证。