本文档介绍了OpenZeppelin Contracts库中用于构建符合ERC-4337标准的账户合约,并详细介绍了ERC4337Utils和ERC7579Utils两个实用工具库。
建议在 https://docs.openzeppelin.com/contracts/api/account 查看本文档 |
此目录包含用于构建 ERC-4337 账户的合约。
ERC4337Utils
import "@openzeppelin/contracts/account/utils/draft-ERC4337Utils.sol";
包含通用 ERC-4337 实用功能的库。
参见 ERC-4337。
函数
内部变量
parseValidationData(uint256 validationData) → address aggregator, uint48 validAfter, uint48 validUntil
internal将验证数据解析为其组成部分. 参见 packValidationData
.
packValidationData(address aggregator, uint48 validAfter, uint48 validUntil) → uint256
internal将验证数据打包成一个 uint256. 参见 parseValidationData
.
packValidationData(bool sigSuccess, uint48 validAfter, uint48 validUntil) → uint256
internal与 packValidationData
相同, 但带有一个布尔签名成功标志.
combineValidationData(uint256 validationData1, uint256 validationData2) → uint256
internal将两个验证数据合并为一个.
如果两者都成功, 则 aggregator
设置为 SIG_VALIDATION_SUCCESS
, 而
validAfter
是两者中的最大值, validUntil
是两者中的最小值.
getValidationData(uint256 validationData) → address aggregator, bool outOfTimeRange
internal返回 validationData
的 aggregator 以及它是否超出时间范围.
hash(struct PackedUserOperation self, address entrypoint) → bytes32
internal获取给定 entrypoint 的用户操作的哈希值
factory(struct PackedUserOperation self) → address
internal从 PackedUserOperation
返回 factory
, 如果 initCode 为空或格式不正确, 则返回 address(0).
factoryData(struct PackedUserOperation self) → bytes
internal从 PackedUserOperation
返回 factoryData
, 如果 initCode 为空或格式不正确, 则返回空字节.
verificationGasLimit(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 verificationGasLimit
.
callGasLimit(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 callGasLimit
.
maxPriorityFeePerGas(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 gasFees
的第一部分.
maxFeePerGas(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 gasFees
的第二部分.
gasPrice(struct PackedUserOperation self) → uint256
internal返回 PackedUserOperation
的总 gas 价格 (即 maxFeePerGas
或 maxPriorityFeePerGas + basefee
).
paymaster(struct PackedUserOperation self) → address
internal从 PackedUserOperation
返回 paymasterAndData
的第一部分.
paymasterVerificationGasLimit(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 paymasterAndData
的第二部分.
paymasterPostOpGasLimit(struct PackedUserOperation self) → uint256
internal从 PackedUserOperation
返回 paymasterAndData
的第三部分.
paymasterData(struct PackedUserOperation self) → bytes
internal从 PackedUserOperation
返回 paymasterAndData
的第四部分.
contract IEntryPoint ENTRYPOINT_V07
internal constantentrypoint v0.7.0 的地址
contract IEntryPoint ENTRYPOINT_V08
internal constantentrypoint v0.8.0 的地址
uint256 SIG_VALIDATION_SUCCESS
internal constant出于模拟目的, validateUserOp (和 validatePaymasterUserOp) 成功时返回此值.
uint256 SIG_VALIDATION_FAILED
internal constant出于模拟目的, 如果签名失败, validateUserOp (和 validatePaymasterUserOp) 必须返回此值, 而不是 revert.
ERC7579Utils
import "@openzeppelin/contracts/account/utils/draft-ERC7579Utils.sol";
包含通用 ERC-7579 实用功能的库。
参见 ERC-7579。
函数
事件
错误
内部变量
execSingle(bytes executionCalldata, ExecType execType) → bytes[] returnData
internal执行单个调用.
execBatch(bytes executionCalldata, ExecType execType) → bytes[] returnData
internal执行一批调用.
execDelegateCall(bytes executionCalldata, ExecType execType) → bytes[] returnData
internal执行一个 delegate call.
encodeMode(CallType callType, ExecType execType, ModeSelector selector, ModePayload payload) → Mode mode
internal使用提供的参数编码模式。请参阅decodeMode
。
decodeMode(Mode mode) → CallType callType, ExecType execType, ModeSelector selector, ModePayload payload
internal将模式解码为参数。请参阅encodeMode
。
encodeSingle(address target, uint256 value, bytes callData) → bytes executionCalldata
internal编码单个调用执行。请参阅decodeSingle
。
decodeSingle(bytes executionCalldata) → address target, uint256 value, bytes callData
internal解码单个调用执行。请参阅encodeSingle
。
encodeDelegate(address target, bytes callData) → bytes executionCalldata
internal编码委托调用执行。请参阅decodeDelegate
。
decodeDelegate(bytes executionCalldata) → address target, bytes callData
internal解码委托调用执行。请参阅encodeDelegate
。
encodeBatch(struct Execution[] executionBatch) → bytes executionCalldata
internal编码一批执行。请参阅decodeBatch
。
decodeBatch(bytes executionCalldata) → struct Execution[] executionBatch
internal解码一批执行。请参阅encodeBatch
。
此函数运行一些检查,如果输入格式不正确,将抛出ERC7579DecodingError 。 |
ERC7579TryExecuteFail(uint256 batchExecutionIndex, bytes returndata)
event当 EXECTYPE_TRY
执行失败时发出。
ERC7579UnsupportedCallType(CallType callType)
error不支持提供的CallType
。
ERC7579UnsupportedExecType(ExecType execType)
error不支持提供的ExecType
。
ERC7579MismatchedModuleTypeId(uint256 moduleTypeId, address module)
error提供的模块与提供的模块类型不匹配。
ERC7579UninstalledModule(uint256 moduleTypeId, address module)
error该模块未安装。
ERC7579AlreadyInstalledModule(uint256 moduleTypeId, address module)
error该模块已安装。
ERC7579UnsupportedModuleType(uint256 moduleTypeId)
error不支持该模块类型。
ERC7579DecodingError()
error输入 calldata 格式不正确,可能存在恶意代码。
CallType CALLTYPE_SINGLE
internal constant单个 call
执行。
CallType CALLTYPE_BATCH
internal constant一批 call
执行。
CallType CALLTYPE_DELEGATECALL
internal constantdelegatecall
执行。
ExecType EXECTYPE_DEFAULT
internal constant默认执行类型,失败时恢复。
ExecType EXECTYPE_TRY
internal constant失败时不恢复的执行类型。
- 原文链接: docs.openzeppelin.com/co...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!