#交易流程
每笔交易都经过以下流程:
验证步骤
在验证步骤中,账户应决定是否接受交易,如果接受,则支付费用。如果任何部分验证失败,则该帐户不收取费用,并且该交易不能包含在区块中。
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 帐户的收费和签名验证。