# 关于zkSync Era必须要了解的知识（十）

By [zkSync](https://paragraph.com/@zksync-13) · 2023-05-03

---

**#交易流程**

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

**验证步骤**

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

 **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 帐户的收费和签名验证。**

---

*Originally published on [zkSync](https://paragraph.com/@zksync-13/zksync-era-10)*
