关于zkSync Era必须要了解的知识(十)

#交易流程

 每笔交易都经过以下流程:

验证步骤

在验证步骤中,账户应决定是否接受交易,如果接受,则支付费用。如果任何部分验证失败,则该帐户不收取费用,并且该交易不能包含在区块中。

 Step 1.系统检查交易的随机数之前没有被使用过。可以在#保持随机数唯一章节中阅读有关保留随机数唯一性的更多信息。

 **Step 2.**系统调用validateTransaction账户的方法。如果它没有恢复,请继续执行下一步。

 **Step 3.**系统检查交易的随机数是否已被标记为已使用。

 Step 4.

1>(no paymaster)。系统调用payForTransaction账户的方法。如果它没有恢复,请继续执行下一步。

2>(paymaster)。系统调用prepareForPaymaster发送方的方法。如果此调用没有恢复,则validateAndPayForPaymasterTransaction调用 paymaster 的方法。如果它也没有还原,继续执行下一步。

 **Step 5.**系统验证引导加载程序至少收到了tx.gasPrice * tx.gasLimitETH 给引导加载程序。如果是这样,则认为验证完成,可以进行下一步。

 #执行步骤

执行步骤被认为负责交易的实际执行,并将任何未使用的gas的退款发送回用户。如果在这一步有任何回滚,交易仍然被认为是有效的,并将被包含在区块中。

 **Step 6.**系统调用executeTransaction账户的方法。

 Step 7.(仅在交易有 paymaster 的情况下)postTransaction调用 paymaster 的方法。此步骤通常用于向发送方退还未使用的 gas,以防 paymaster 被用来以 ERC-20 代币支付费用。

 #费用

在 EIP4337 中,可以看到三种类型的气体限制:verificationGas, executionGas, preVerificationGas,它们描述了区块中交易包含的不同步骤的气体限制。zkSync Era 只有一个字段,gasLimit涵盖了所有三个的费用。提交易时,确保gasLimit足以涵盖验证、支付费用(上面提到的 ERC20 转账)和实际执行本身。

默认情况下,调用estimateGas添加一个常量来覆盖 EOA 帐户的收费和签名验证。