@ensuro/account-abstraction 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_format": "hh3-sol-build-info-1",
3
- "id": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865",
3
+ "id": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966",
4
4
  "solcVersion": "0.8.30",
5
5
  "solcLongVersion": "0.8.30+commit.73712a01",
6
6
  "userSourceNameMap": {
@@ -226,7 +226,7 @@
226
226
  "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/types/Time.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"@openzeppelin/contracts/utils/math/Math.sol\";\nimport {SafeCast} from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\n/**\n * @dev This library provides helpers for manipulating time-related objects.\n *\n * It uses the following types:\n * - `uint48` for timepoints\n * - `uint32` for durations\n *\n * While the library doesn't provide specific types for timepoints and duration, it does provide:\n * - a `Delay` type to represent duration that can be programmed to change value automatically at a given point\n * - additional helper functions\n */\nlibrary FrozenTime {\n using FrozenTime for *;\n\n /**\n * @dev Get the block timestamp as a Timepoint.\n */\n function timestamp() internal pure returns (uint48) {\n // return SafeCast.toUint48(block.timestamp);\n return SafeCast.toUint48(32503680000); // 3000-01-01\n }\n\n /**\n * @dev Get the block number as a Timepoint.\n */\n function blockNumber() internal view returns (uint48) {\n return SafeCast.toUint48(block.number);\n }\n\n // ==================================================== Delay =====================================================\n /**\n * @dev A `Delay` is a uint32 duration that can be programmed to change value automatically at a given point in the\n * future. The \"effect\" timepoint describes when the transitions happens from the \"old\" value to the \"new\" value.\n * This allows updating the delay applied to some operation while keeping some guarantees.\n *\n * In particular, the {update} function guarantees that if the delay is reduced, the old delay still applies for\n * some time. For example if the delay is currently 7 days to do an upgrade, the admin should not be able to set\n * the delay to 0 and upgrade immediately. If the admin wants to reduce the delay, the old delay (7 days) should\n * still apply for some time.\n *\n *\n * The `Delay` type is 112 bits long, and packs the following:\n *\n * ```\n * | [uint48]: effect date (timepoint)\n * | | [uint32]: value before (duration)\n * ↓ ↓ ↓ [uint32]: value after (duration)\n * 0xAAAAAAAAAAAABBBBBBBBCCCCCCCC\n * ```\n *\n * NOTE: The {get} and {withUpdate} functions operate using timestamps. Block number based delays are not currently\n * supported.\n */\n type Delay is uint112;\n\n /**\n * @dev Wrap a duration into a Delay to add the one-step \"update in the future\" feature\n */\n function toDelay(uint32 duration) internal pure returns (Delay) {\n return Delay.wrap(duration);\n }\n\n /**\n * @dev Get the value at a given timepoint plus the pending value and effect timepoint if there is a scheduled\n * change after this timepoint. If the effect timepoint is 0, then the pending value should not be considered.\n */\n function _getFullAt(Delay self, uint48 timepoint) private pure returns (uint32, uint32, uint48) {\n (uint32 valueBefore, uint32 valueAfter, uint48 effect) = self.unpack();\n return effect <= timepoint ? (valueAfter, 0, 0) : (valueBefore, valueAfter, effect);\n }\n\n /**\n * @dev Get the current value plus the pending value and effect timepoint if there is a scheduled change. If the\n * effect timepoint is 0, then the pending value should not be considered.\n */\n function getFull(Delay self) internal pure returns (uint32, uint32, uint48) {\n return _getFullAt(self, timestamp());\n }\n\n /**\n * @dev Get the current value.\n */\n function get(Delay self) internal pure returns (uint32) {\n (uint32 delay, , ) = self.getFull();\n return delay;\n }\n\n /**\n * @dev Update a Delay object so that it takes a new duration after a timepoint that is automatically computed to\n * enforce the old delay at the moment of the update. Returns the updated Delay object and the timestamp when the\n * new delay becomes effective.\n */\n function withUpdate(\n Delay self,\n uint32 newValue,\n uint32 minSetback\n ) internal pure returns (Delay updatedDelay, uint48 effect) {\n uint32 value = self.get();\n uint32 setback = uint32(Math.max(minSetback, value > newValue ? value - newValue : 0));\n effect = timestamp() + setback;\n return (pack(value, newValue, effect), effect);\n }\n\n /**\n * @dev Split a delay into its components: valueBefore, valueAfter and effect (transition timepoint).\n */\n function unpack(Delay self) internal pure returns (uint32 valueBefore, uint32 valueAfter, uint48 effect) {\n uint112 raw = Delay.unwrap(self);\n\n valueAfter = uint32(raw);\n valueBefore = uint32(raw >> 32);\n effect = uint48(raw >> 64);\n\n return (valueBefore, valueAfter, effect);\n }\n\n /**\n * @dev pack the components into a Delay object.\n */\n function pack(uint32 valueBefore, uint32 valueAfter, uint48 effect) internal pure returns (Delay) {\n return Delay.wrap((uint112(effect) << 64) | (uint112(valueBefore) << 32) | uint112(valueAfter));\n }\n}\n"
227
227
  },
228
228
  "project/contracts/ERC2771ForwarderAccount.sol": {
229
- "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.23;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {BaseAccount} from \"@account-abstraction/contracts/core/BaseAccount.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport {ERC2771Context} from \"@openzeppelin/contracts/metatx/ERC2771Context.sol\";\nimport {IAccountExecute} from \"@account-abstraction/contracts/interfaces/IAccountExecute.sol\";\nimport {IEntryPoint} from \"@account-abstraction/contracts/interfaces/IEntryPoint.sol\";\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED} from \"@account-abstraction/contracts/core/Helpers.sol\";\nimport {UUPSUpgradeable} from \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\n\n/**\n * @title ERC2771ForwarderAccount\n *\n * @dev Smart Account that acts as an ERC2771 Trusted Forwarder, forwarding calls to a pre-defined contract\n * on behalf of the signer of the userOp.\n *\n * Assumes the target contract is designed to work with ERC2771Context and trusts this account as a forwarder.\n *\n * This contract is designed to be used with an AccessManagedProxy for runtime access control management.\n *\n * @custom:security-contact security@ensuro.co\n * @author Ensuro\n */\ncontract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecute {\n IEntryPoint private immutable _entryPoint;\n\n /// @custom:storage-location erc7201:ensuro.storage.ERC2771ForwarderAccount\n struct ERC2771ForwarderAccountStorage {\n mapping(address => ERC2771Context) targets;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"ensuro.storage.ERC2771ForwarderAccount\")) - 1)) & ~bytes32(uint256(0xff))\n // solhint-disable-next-line const-name-snakecase\n bytes32 internal constant ERC2771ForwarderAccountStorageLocation =\n 0x32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e3843000;\n\n function _getAccountStorage() internal pure returns (ERC2771ForwarderAccountStorage storage $) {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n $.slot := ERC2771ForwarderAccountStorageLocation\n }\n }\n\n event ExecutorAdded(address indexed executor, ERC2771Context indexed target);\n event ExecutorRemoved(address indexed executor);\n\n error RequiredEntryPointOrExecutor(address sender);\n error InvalidTarget(ERC2771Context target, address signer);\n error OnlyExecuteUserOpAllowed();\n error InvalidCall();\n\n constructor(IEntryPoint anEntryPoint) {\n _entryPoint = anEntryPoint;\n }\n\n // solhint-disable-next-line no-empty-blocks\n function _authorizeUpgrade(address newImpl) internal view override {}\n\n /**\n * @dev This is a noop, for deployment convenience where an initializer is expected.\n */\n //solhint-disable-next-line no-empty-blocks\n function initialize() external {}\n\n // solhint-disable-next-line no-empty-blocks\n receive() external payable {}\n\n function executeBatch(Call[] calldata) external virtual override {\n revert OnlyExecuteUserOpAllowed();\n }\n\n function execute(address, uint256, bytes calldata) external virtual override {\n revert OnlyExecuteUserOpAllowed();\n }\n\n function _getSigner(PackedUserOperation calldata userop, bytes32 userOpHash) internal pure returns (address) {\n bytes32 hash = MessageHashUtils.toEthSignedMessageHash(userOpHash);\n return ECDSA.recover(hash, userop.signature);\n }\n\n /**\n * @dev Validates that the user operation is well formed and that the destination is correct. Does not validate signature.\n * @return call A Call struct containing the call to be made\n */\n function _validateAndDecodeCall(\n PackedUserOperation calldata userOp,\n bytes32 userOpHash\n ) internal pure returns (Call memory call) {\n require(userOp.callData.length >= 56 && bytes4(userOp.callData[0:4]) == this.executeUserOp.selector, InvalidCall());\n (call.target, call.value, call.data) = abi.decode(userOp.callData[4:], (address, uint256, bytes));\n if (call.target == address(0)) {\n // This is an if and not a require to avoid evaluating the _getSigner call in the happy path\n revert InvalidTarget(ERC2771Context(call.target), _getSigner(userOp, userOpHash));\n }\n }\n\n function _isAuthorized(address signer, address target) internal view returns (bool) {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n return $.targets[signer] == ERC2771Context(target);\n }\n\n /**\n * @notice Add an executor and its corresponding target contract.\n * @param executor The executor address to add\n * @param target The ERC2771Context target contract for this executor\n */\n function addExecutor(address executor, ERC2771Context target) external {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n $.targets[executor] = target;\n emit ExecutorAdded(executor, target);\n }\n\n /**\n * @notice Remove an executor by setting its target to the zero address.\n * @param executor The executor address to remove\n */\n function removeExecutor(address executor) external {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n $.targets[executor] = ERC2771Context(address(0));\n emit ExecutorRemoved(executor);\n }\n\n /// implement template method of BaseAccount\n function _validateSignature(\n PackedUserOperation calldata userOp,\n bytes32 userOpHash\n ) internal virtual override returns (uint256 validationData) {\n Call memory call = _validateAndDecodeCall(userOp, userOpHash);\n address signer = _getSigner(userOp, userOpHash);\n if (!_isAuthorized(signer, call.target)) {\n return SIG_VALIDATION_FAILED;\n }\n return SIG_VALIDATION_SUCCESS;\n }\n\n /**\n * @dev Executes a user operation by forwarding the call to the target contract with the signer as the msgSender.\n * It re-validates the signature and checks that the signer is authorized. Reverts with InvalidTarget if it isn't.\n * The calldata is expected to contain this function's selector followed by an ABI-encoded Call:\n * - dest (address): the target contract address (must be the same as _target)\n * - value (uint256): the amount of ETH to send with the call\n * - func (bytes): the calldata for the target function\n *\n * @param userOp The packed user operation containing the call data and signature.\n * @param userOpHash The hash of the user operation, used for signature verification.\n */\n function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external override {\n Call memory call = _validateAndDecodeCall(userOp, userOpHash);\n address signer = _getSigner(userOp, userOpHash);\n\n require(_isAuthorized(signer, call.target), InvalidTarget(ERC2771Context(call.target), signer));\n\n Address.functionCallWithValue(call.target, abi.encodePacked(call.data, signer), call.value);\n }\n\n /**\n * check current account deposit in the entryPoint\n */\n function getDeposit() public view returns (uint256) {\n return entryPoint().balanceOf(address(this));\n }\n\n /**\n * deposit more funds for this account in the entryPoint\n */\n function addDeposit() public payable {\n entryPoint().depositTo{value: msg.value}(address(this));\n }\n\n /**\n * withdraw value from the account's deposit\n * @param withdrawAddress target to send to\n * @param amount to withdraw\n */\n function withdrawDepositTo(address payable withdrawAddress, uint256 amount) public {\n entryPoint().withdrawTo(withdrawAddress, amount);\n }\n\n /// @inheritdoc BaseAccount\n function entryPoint() public view virtual override returns (IEntryPoint) {\n return _entryPoint;\n }\n}\n"
229
+ "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.23;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {BaseAccount} from \"@account-abstraction/contracts/core/BaseAccount.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport {ERC2771Context} from \"@openzeppelin/contracts/metatx/ERC2771Context.sol\";\nimport {IAccountExecute} from \"@account-abstraction/contracts/interfaces/IAccountExecute.sol\";\nimport {IEntryPoint} from \"@account-abstraction/contracts/interfaces/IEntryPoint.sol\";\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED} from \"@account-abstraction/contracts/core/Helpers.sol\";\nimport {UUPSUpgradeable} from \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\n\n/**\n * @title ERC2771ForwarderAccount\n *\n * @dev Smart Account that acts as an ERC2771 Trusted Forwarder, forwarding calls to a pre-defined contract\n * on behalf of the signer of the userOp.\n *\n * Assumes the target contract is designed to work with ERC2771Context and trusts this account as a forwarder.\n *\n * This contract is designed to be used with an AccessManagedProxy for runtime access control management.\n *\n * @custom:security-contact security@ensuro.co\n * @author Ensuro\n */\ncontract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecute {\n // 132 = 4 (method bytes4) + 32 (expectedSigner) + 32 (target) + 32 (value) + 32 (calldata offset)\n uint256 private constant MIN_USER_OP_CALLDATA = 132;\n IEntryPoint private immutable _entryPoint;\n\n /// @custom:storage-location erc7201:ensuro.storage.ERC2771ForwarderAccount\n struct ERC2771ForwarderAccountStorage {\n mapping(address => ERC2771Context) targets;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"ensuro.storage.ERC2771ForwarderAccount\")) - 1)) & ~bytes32(uint256(0xff))\n // solhint-disable-next-line const-name-snakecase\n bytes32 internal constant ERC2771ForwarderAccountStorageLocation =\n 0x32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e3843000;\n\n function _getAccountStorage() internal pure returns (ERC2771ForwarderAccountStorage storage $) {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n $.slot := ERC2771ForwarderAccountStorageLocation\n }\n }\n\n event ExecutorAdded(address indexed executor, ERC2771Context indexed target);\n event ExecutorRemoved(address indexed executor);\n\n error RequiredEntryPointOrExecutor(address sender);\n error InvalidTarget(ERC2771Context target, address signer);\n error InvalidCall();\n error MethodNotSupported(bytes4 selector);\n\n constructor(IEntryPoint anEntryPoint) {\n _entryPoint = anEntryPoint;\n }\n\n // solhint-disable-next-line no-empty-blocks\n function _authorizeUpgrade(address newImpl) internal view override {}\n\n /**\n * @dev This is a noop, for deployment convenience where an initializer is expected.\n */\n //solhint-disable-next-line no-empty-blocks\n function initialize() external {}\n\n // solhint-disable-next-line no-empty-blocks\n receive() external payable {}\n\n function executeBatch(Call[] calldata) external virtual override {\n revert InvalidCall();\n }\n\n function execute(address, uint256, bytes calldata) external virtual override {\n revert InvalidCall();\n }\n\n function _getSigner(PackedUserOperation calldata userop, bytes32 userOpHash) internal pure returns (address) {\n bytes32 hash = MessageHashUtils.toEthSignedMessageHash(userOpHash);\n return ECDSA.recover(hash, userop.signature);\n }\n\n /**\n * @dev Validates that the user operation is well formed and that the destination is correct. Does not validate signature.\n * @return expectedSigner The address included in the call data, expected to be the signer of the userOp\n * @return call A Call struct containing the call to be made\n * @return selector The selector used (execute or executeUserOp)\n */\n function _validateAndDecodeCall(\n PackedUserOperation calldata userOp,\n bytes32 userOpHash\n ) internal pure returns (address expectedSigner, Call memory call, bytes4 selector) {\n require(userOp.callData.length >= MIN_USER_OP_CALLDATA, InvalidCall());\n selector = bytes4(userOp.callData[0:4]);\n if (selector != this.executeUserOp.selector && selector != this.erc2771Forward.selector) {\n revert MethodNotSupported(selector);\n }\n (expectedSigner, call.target, call.value, call.data) = abi.decode(\n userOp.callData[4:],\n (address, address, uint256, bytes)\n );\n if (call.target == address(0)) {\n revert InvalidTarget(ERC2771Context(call.target), _getSigner(userOp, userOpHash));\n }\n }\n\n function _isAuthorized(address signer, address expectedSigner, address target) internal view returns (bool) {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n return signer == expectedSigner && $.targets[signer] == ERC2771Context(target);\n }\n\n /**\n * @notice Add an executor and its corresponding target contract.\n * @param executor The executor address to add\n * @param target The ERC2771Context target contract for this executor\n */\n function addExecutor(address executor, ERC2771Context target) external {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n $.targets[executor] = target;\n emit ExecutorAdded(executor, target);\n }\n\n /**\n * @notice Remove an executor by setting its target to the zero address.\n * @param executor The executor address to remove\n */\n function removeExecutor(address executor) external {\n ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();\n $.targets[executor] = ERC2771Context(address(0));\n emit ExecutorRemoved(executor);\n }\n\n /// implement template method of BaseAccount\n function _validateSignature(\n PackedUserOperation calldata userOp,\n bytes32 userOpHash\n ) internal virtual override returns (uint256 validationData) {\n (address expectedSigner, Call memory call, ) = _validateAndDecodeCall(userOp, userOpHash);\n address signer = _getSigner(userOp, userOpHash);\n if (!_isAuthorized(signer, expectedSigner, call.target)) {\n return SIG_VALIDATION_FAILED;\n }\n return SIG_VALIDATION_SUCCESS;\n }\n\n /**\n * @dev Executes a user operation by forwarding the call to the target contract with the signer as the msgSender.\n * The calldata is expected to contain this function's selector followed by the signer and the ABI-encoded call:\n * - signer (address): the signer of the userop, must match the signature\n * - dest (address): the target contract address (must be the same as _target)\n * - value (uint256): the amount of ETH to send with the call\n * - func (bytes): the calldata for the target function\n *\n * @param userOp The packed user operation containing the call data and signature.\n * @param userOpHash The hash of the user operation, used for signature verification.\n */\n function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external override {\n _requireFromEntryPoint();\n\n (address expectedSigner, Call memory call, ) = _validateAndDecodeCall(userOp, userOpHash);\n\n Address.functionCallWithValue(call.target, abi.encodePacked(call.data, expectedSigner), call.value);\n }\n\n /**\n * @notice Forwards a call to the target contract with `caller` as the msgSender.\n * @dev Since this method is called from the entryPoint, the method _validateSignature was passed before,\n * validating the signer of the userOp is equal to `caller` and `caller` is authorized to call `target`.\n *\n * @param caller The real caller of the operation that will be appended to the call, and decoded by the target\n * contract as _msgSender()\n * @param target The target contract to be called\n * @param value The amount of ETH to send with the call\n * @param func The calldata for the target function\n */\n function erc2771Forward(address caller, address target, uint256 value, bytes calldata func) external virtual {\n _requireFromEntryPoint();\n Address.functionCallWithValue(target, abi.encodePacked(func, caller), value);\n }\n\n /**\n * check current account deposit in the entryPoint\n */\n function getDeposit() public view returns (uint256) {\n return entryPoint().balanceOf(address(this));\n }\n\n /**\n * deposit more funds for this account in the entryPoint\n */\n function addDeposit() public payable {\n entryPoint().depositTo{value: msg.value}(address(this));\n }\n\n /**\n * withdraw value from the account's deposit\n * @param withdrawAddress target to send to\n * @param amount to withdraw\n */\n function withdrawDepositTo(address payable withdrawAddress, uint256 amount) public {\n entryPoint().withdrawTo(withdrawAddress, amount);\n }\n\n /// @inheritdoc BaseAccount\n function entryPoint() public view virtual override returns (IEntryPoint) {\n return _entryPoint;\n }\n}\n"
230
230
  },
231
231
  "project/contracts/mock/ERC20With2771.sol": {
232
232
  "content": "//SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {ERC2771Context} from \"@openzeppelin/contracts/metatx/ERC2771Context.sol\";\nimport {Context} from \"@openzeppelin/contracts/utils/Context.sol\";\n\ncontract ERC20With2771 is ERC20, ERC2771Context {\n uint8 internal immutable _decimals;\n\n constructor(\n string memory name_,\n string memory symbol_,\n uint256 initialSupply,\n uint8 decimals_,\n address trustedForwarder\n ) ERC20(name_, symbol_) ERC2771Context(trustedForwarder) {\n _decimals = decimals_;\n _mint(msg.sender, initialSupply);\n }\n\n function decimals() public view virtual override returns (uint8) {\n return _decimals;\n }\n\n /// @inheritdoc ERC2771Context\n function _contextSuffixLength() internal view override(Context, ERC2771Context) returns (uint256) {\n return ERC2771Context._contextSuffixLength();\n }\n\n /// @inheritdoc ERC2771Context\n function _msgSender() internal view override(Context, ERC2771Context) returns (address) {\n return ERC2771Context._msgSender();\n }\n\n /// @inheritdoc ERC2771Context\n function _msgData() internal view override(Context, ERC2771Context) returns (bytes calldata) {\n return ERC2771Context._msgData();\n }\n}\n"
@@ -624,5 +624,5 @@
624
624
  ]
625
625
  },
626
626
  "inputSourceName": "project/contracts/AccessControlAccount.sol",
627
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
627
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
628
628
  }
@@ -15,7 +15,7 @@ export interface AccessControlAccount$Type {
15
15
  readonly deployedLinkReferences: {};
16
16
  readonly immutableReferences: {"11576":[{"length":32,"start":709},{"length":32,"start":1751},{"length":32,"start":1917},{"length":32,"start":2183},{"length":32,"start":2332},{"length":32,"start":2426},{"length":32,"start":3165}]};
17
17
  readonly inputSourceName: "project/contracts/AccessControlAccount.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -1467,5 +1467,5 @@
1467
1467
  ]
1468
1468
  },
1469
1469
  "inputSourceName": "project/contracts/AccessManagerAccount.sol",
1470
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
1470
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
1471
1471
  }
@@ -15,7 +15,7 @@ export interface AccessManagerAccount$Type {
15
15
  readonly deployedLinkReferences: {};
16
16
  readonly immutableReferences: {"11905":[{"length":32,"start":1672},{"length":32,"start":3154},{"length":32,"start":3366},{"length":32,"start":4409},{"length":32,"start":4558},{"length":32,"start":5858}]};
17
17
  readonly inputSourceName: "project/contracts/AccessManagerAccount.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -127,8 +127,14 @@
127
127
  "type": "error"
128
128
  },
129
129
  {
130
- "inputs": [],
131
- "name": "OnlyExecuteUserOpAllowed",
130
+ "inputs": [
131
+ {
132
+ "internalType": "bytes4",
133
+ "name": "selector",
134
+ "type": "bytes4"
135
+ }
136
+ ],
137
+ "name": "MethodNotSupported",
132
138
  "type": "error"
133
139
  },
134
140
  {
@@ -254,6 +260,34 @@
254
260
  "stateMutability": "view",
255
261
  "type": "function"
256
262
  },
263
+ {
264
+ "inputs": [
265
+ {
266
+ "internalType": "address",
267
+ "name": "caller",
268
+ "type": "address"
269
+ },
270
+ {
271
+ "internalType": "address",
272
+ "name": "target",
273
+ "type": "address"
274
+ },
275
+ {
276
+ "internalType": "uint256",
277
+ "name": "value",
278
+ "type": "uint256"
279
+ },
280
+ {
281
+ "internalType": "bytes",
282
+ "name": "func",
283
+ "type": "bytes"
284
+ }
285
+ ],
286
+ "name": "erc2771Forward",
287
+ "outputs": [],
288
+ "stateMutability": "nonpayable",
289
+ "type": "function"
290
+ },
257
291
  {
258
292
  "inputs": [
259
293
  {
@@ -548,52 +582,52 @@
548
582
  "type": "receive"
549
583
  }
550
584
  ],
551
- "bytecode": "0x60c060405230608052348015610013575f5ffd5b5060405161152838038061152883398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516114666100c25f395f81816102510152818161036f015281816103eb015281816105d40152818161066901526106a301525f81816107a6015281816107cf015261090b01526114665ff3fe6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033",
552
- "deployedBytecode": "0x6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033",
585
+ "bytecode": "0x60c060405230608052348015610013575f5ffd5b5060405161166d38038061166d83398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516115ab6100c25f395f818161027b0152818161039901528181610415015281816105ea0152818161067f01526106b901525f81816107c8015281816107f1015261092d01526115ab5ff3fe6080604052600436106100f2575f3560e01c80638129fc1c11610087578063b0d691fe11610057578063b0d691fe14610262578063b61d27f6146102a5578063c399ec88146102bf578063d087d288146102d3575f5ffd5b80638129fc1c146101dc57806381a30acd146101e75780638dd7712f14610206578063ad3cb1cc14610225575f5ffd5b80634d44560d116100c25780634d44560d146101775780634f1ef2861461019657806352d1902d146101a95780636267e759146101bd575f5ffd5b806319822f7c146100fd578063247884291461012f57806334fcd5be146101505780634a58db191461016f575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b5061011c610117366004611014565b6102e7565b6040519081526020015b60405180910390f35b34801561013a575f5ffd5b5061014e610149366004611072565b61030c565b005b34801561015b575f5ffd5b5061014e61016a36600461108d565b61037e565b61014e610397565b348015610182575f5ffd5b5061014e6101913660046110fe565b610413565b61014e6101a43660046111c7565b610497565b3480156101b4575f5ffd5b5061011c6104ad565b3480156101c8575f5ffd5b5061014e6101d7366004611214565b6104c8565b34801561014e575f5ffd5b3480156101f2575f5ffd5b5061014e610201366004611290565b610545565b348015610211575f5ffd5b5061014e6102203660046112fe565b61057b565b348015610230575f5ffd5b50610255604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101269190611340565b34801561026d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610126565b3480156102b0575f5ffd5b5061014e61016a366004611375565b3480156102ca575f5ffd5b5061011c6105cb565b3480156102de575f5ffd5b5061011c610659565b5f6102f06106ae565b6102fa848461072b565b905061030582610778565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b60405163574b16a760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b15801561047d575f5ffd5b505af115801561048f573d5f5f3e3d5ffd5b505050505050565b61049f6107bd565b6104a98282610861565b5050565b5f6104b6610922565b505f5160206115565f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61054d6106ae565b61048f84838388604051602001610566939291906113cd565b6040516020818303038152906040528561096b565b6105836106ae565b5f5f61058f8484610a37565b509150915061040c815f01518260400151846040516020016105b29291906113f3565b604051602081830303815290604052836020015161096b565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610630573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106549190611422565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610615565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6107388585610a37565b50915091505f6107488686610b88565b90506107588184845f0151610c09565b610768576001935050505061076f565b5f93505050505b92915050565b50565b8015610775576040515f90339083908381818185875af1925050503d805f811461040c576040519150601f19603f3d011682016040523d82523d5f602084013e61040c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061084357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108375f5160206115565f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105435760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108bb575060408051601f3d908101601f191682019092526108b891810190611422565b60015b6108e357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610722565b5f5160206115565f395f51905f52811461091357604051632a87526960e21b815260048101829052602401610722565b61091d8383610c6a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405163703e46dd60e11b815260040160405180910390fd5b6060814710156109975760405163cf47918160e01b815247600482015260248101839052604401610722565b5f6109a3858486610cbf565b90508080156109c457505f3d11806109c457505f856001600160a01b03163b115b156109d9576109d1610cd4565b915050610305565b8015610a0357604051639996b31560e01b81526001600160a01b0386166004820152602401610722565b3d15610a1657610a11610ced565b610a2f565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b60408051606080820183525f80835260208301819052928201525f6084610a616060870187611439565b90501015610a825760405163574b16a760e11b815260040160405180910390fd5b610a8f6060860186611439565b610a9d916004915f9161147c565b610aa6916114a3565b90506001600160e01b03198116638dd7712f60e01b14801590610ada57506001600160e01b031981166381a30acd60e01b14155b15610b045760405163c610096760e01b81526001600160e01b031982166004820152602401610722565b610b116060860186611439565b610b1f91600490829061147c565b810190610b2c91906114d9565b604086015260208501526001600160a01b0316808452909350610b81578151610b558686610b88565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610722565b9250925092565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610c0181610bc8610100870187611439565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cf892505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610c6157506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610c7382610d20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cb75761091d8282610d83565b6104a9610e05565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610d068686610e24565b925092509250610d168282610e6a565b5090949350505050565b806001600160a01b03163b5f03610d5557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610722565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d908484610f22565b9050808015610db157505f3d1180610db157505f846001600160a01b03163b115b15610dc657610dbe610cd4565b91505061076f565b8015610df057604051639996b31560e01b81526001600160a01b0385166004820152602401610722565b3d15610a1657610dfe610ced565b5092915050565b34156105435760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610e5b576020840151604085015160608601515f1a610e4d88828585610f35565b955095509550505050610b81565b505081515f9150600290610b81565b5f826003811115610e7d57610e7d611541565b03610e86575050565b6001826003811115610e9a57610e9a611541565b03610eb85760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ecc57610ecc611541565b03610eed5760405163fce698f760e01b815260048101829052602401610722565b6003826003811115610f0157610f01611541565b036104a9576040516335e2f38360e21b815260048101829052602401610722565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610f6e57505f91506003905082610ff3565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610fbf573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610fea57505f925060019150829050610ff3565b92505f91508190505b9450945094915050565b5f610120828403121561100e575f5ffd5b50919050565b5f5f5f60608486031215611026575f5ffd5b833567ffffffffffffffff81111561103c575f5ffd5b61104886828701610ffd565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610775575f5ffd5b5f60208284031215611082575f5ffd5b81356103058161105e565b5f5f6020838503121561109e575f5ffd5b823567ffffffffffffffff8111156110b4575f5ffd5b8301601f810185136110c4575f5ffd5b803567ffffffffffffffff8111156110da575f5ffd5b8560208260051b84010111156110ee575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561110f575f5ffd5b823561111a8161105e565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261114b575f5ffd5b813567ffffffffffffffff81111561116557611165611128565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561119457611194611128565b6040528181528382016020018510156111ab575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156111d8575f5ffd5b82356111e38161105e565b9150602083013567ffffffffffffffff8111156111fe575f5ffd5b61120a8582860161113c565b9150509250929050565b5f5f60408385031215611225575f5ffd5b82356112308161105e565b915060208301356112408161105e565b809150509250929050565b5f5f83601f84011261125b575f5ffd5b50813567ffffffffffffffff811115611272575f5ffd5b602083019150836020828501011115611289575f5ffd5b9250929050565b5f5f5f5f5f608086880312156112a4575f5ffd5b85356112af8161105e565b945060208601356112bf8161105e565b935060408601359250606086013567ffffffffffffffff8111156112e1575f5ffd5b6112ed8882890161124b565b969995985093965092949392505050565b5f5f6040838503121561130f575f5ffd5b823567ffffffffffffffff811115611325575f5ffd5b61133185828601610ffd565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611388575f5ffd5b84356113938161105e565b935060208501359250604085013567ffffffffffffffff8111156113b5575f5ffd5b6113c18782880161124b565b95989497509550505050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f60208284031215611432575f5ffd5b5051919050565b5f5f8335601e1984360301811261144e575f5ffd5b83018035915067ffffffffffffffff821115611468575f5ffd5b602001915036819003821315611289575f5ffd5b5f5f8585111561148a575f5ffd5b83861115611496575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610dfe576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f608085870312156114ec575f5ffd5b84356114f78161105e565b935060208501356115078161105e565b925060408501359150606085013567ffffffffffffffff811115611529575f5ffd5b6115358782880161113c565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220925fe411a74f721c53058a316afb80f3ef094898def53447db92437f185df9ba64736f6c634300081e0033",
586
+ "deployedBytecode": "0x6080604052600436106100f2575f3560e01c80638129fc1c11610087578063b0d691fe11610057578063b0d691fe14610262578063b61d27f6146102a5578063c399ec88146102bf578063d087d288146102d3575f5ffd5b80638129fc1c146101dc57806381a30acd146101e75780638dd7712f14610206578063ad3cb1cc14610225575f5ffd5b80634d44560d116100c25780634d44560d146101775780634f1ef2861461019657806352d1902d146101a95780636267e759146101bd575f5ffd5b806319822f7c146100fd578063247884291461012f57806334fcd5be146101505780634a58db191461016f575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b5061011c610117366004611014565b6102e7565b6040519081526020015b60405180910390f35b34801561013a575f5ffd5b5061014e610149366004611072565b61030c565b005b34801561015b575f5ffd5b5061014e61016a36600461108d565b61037e565b61014e610397565b348015610182575f5ffd5b5061014e6101913660046110fe565b610413565b61014e6101a43660046111c7565b610497565b3480156101b4575f5ffd5b5061011c6104ad565b3480156101c8575f5ffd5b5061014e6101d7366004611214565b6104c8565b34801561014e575f5ffd5b3480156101f2575f5ffd5b5061014e610201366004611290565b610545565b348015610211575f5ffd5b5061014e6102203660046112fe565b61057b565b348015610230575f5ffd5b50610255604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101269190611340565b34801561026d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610126565b3480156102b0575f5ffd5b5061014e61016a366004611375565b3480156102ca575f5ffd5b5061011c6105cb565b3480156102de575f5ffd5b5061011c610659565b5f6102f06106ae565b6102fa848461072b565b905061030582610778565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b60405163574b16a760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b15801561047d575f5ffd5b505af115801561048f573d5f5f3e3d5ffd5b505050505050565b61049f6107bd565b6104a98282610861565b5050565b5f6104b6610922565b505f5160206115565f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61054d6106ae565b61048f84838388604051602001610566939291906113cd565b6040516020818303038152906040528561096b565b6105836106ae565b5f5f61058f8484610a37565b509150915061040c815f01518260400151846040516020016105b29291906113f3565b604051602081830303815290604052836020015161096b565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610630573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106549190611422565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610615565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6107388585610a37565b50915091505f6107488686610b88565b90506107588184845f0151610c09565b610768576001935050505061076f565b5f93505050505b92915050565b50565b8015610775576040515f90339083908381818185875af1925050503d805f811461040c576040519150601f19603f3d011682016040523d82523d5f602084013e61040c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061084357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108375f5160206115565f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105435760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108bb575060408051601f3d908101601f191682019092526108b891810190611422565b60015b6108e357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610722565b5f5160206115565f395f51905f52811461091357604051632a87526960e21b815260048101829052602401610722565b61091d8383610c6a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405163703e46dd60e11b815260040160405180910390fd5b6060814710156109975760405163cf47918160e01b815247600482015260248101839052604401610722565b5f6109a3858486610cbf565b90508080156109c457505f3d11806109c457505f856001600160a01b03163b115b156109d9576109d1610cd4565b915050610305565b8015610a0357604051639996b31560e01b81526001600160a01b0386166004820152602401610722565b3d15610a1657610a11610ced565b610a2f565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b60408051606080820183525f80835260208301819052928201525f6084610a616060870187611439565b90501015610a825760405163574b16a760e11b815260040160405180910390fd5b610a8f6060860186611439565b610a9d916004915f9161147c565b610aa6916114a3565b90506001600160e01b03198116638dd7712f60e01b14801590610ada57506001600160e01b031981166381a30acd60e01b14155b15610b045760405163c610096760e01b81526001600160e01b031982166004820152602401610722565b610b116060860186611439565b610b1f91600490829061147c565b810190610b2c91906114d9565b604086015260208501526001600160a01b0316808452909350610b81578151610b558686610b88565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610722565b9250925092565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610c0181610bc8610100870187611439565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cf892505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610c6157506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610c7382610d20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cb75761091d8282610d83565b6104a9610e05565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610d068686610e24565b925092509250610d168282610e6a565b5090949350505050565b806001600160a01b03163b5f03610d5557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610722565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d908484610f22565b9050808015610db157505f3d1180610db157505f846001600160a01b03163b115b15610dc657610dbe610cd4565b91505061076f565b8015610df057604051639996b31560e01b81526001600160a01b0385166004820152602401610722565b3d15610a1657610dfe610ced565b5092915050565b34156105435760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610e5b576020840151604085015160608601515f1a610e4d88828585610f35565b955095509550505050610b81565b505081515f9150600290610b81565b5f826003811115610e7d57610e7d611541565b03610e86575050565b6001826003811115610e9a57610e9a611541565b03610eb85760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ecc57610ecc611541565b03610eed5760405163fce698f760e01b815260048101829052602401610722565b6003826003811115610f0157610f01611541565b036104a9576040516335e2f38360e21b815260048101829052602401610722565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610f6e57505f91506003905082610ff3565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610fbf573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610fea57505f925060019150829050610ff3565b92505f91508190505b9450945094915050565b5f610120828403121561100e575f5ffd5b50919050565b5f5f5f60608486031215611026575f5ffd5b833567ffffffffffffffff81111561103c575f5ffd5b61104886828701610ffd565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610775575f5ffd5b5f60208284031215611082575f5ffd5b81356103058161105e565b5f5f6020838503121561109e575f5ffd5b823567ffffffffffffffff8111156110b4575f5ffd5b8301601f810185136110c4575f5ffd5b803567ffffffffffffffff8111156110da575f5ffd5b8560208260051b84010111156110ee575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561110f575f5ffd5b823561111a8161105e565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261114b575f5ffd5b813567ffffffffffffffff81111561116557611165611128565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561119457611194611128565b6040528181528382016020018510156111ab575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156111d8575f5ffd5b82356111e38161105e565b9150602083013567ffffffffffffffff8111156111fe575f5ffd5b61120a8582860161113c565b9150509250929050565b5f5f60408385031215611225575f5ffd5b82356112308161105e565b915060208301356112408161105e565b809150509250929050565b5f5f83601f84011261125b575f5ffd5b50813567ffffffffffffffff811115611272575f5ffd5b602083019150836020828501011115611289575f5ffd5b9250929050565b5f5f5f5f5f608086880312156112a4575f5ffd5b85356112af8161105e565b945060208601356112bf8161105e565b935060408601359250606086013567ffffffffffffffff8111156112e1575f5ffd5b6112ed8882890161124b565b969995985093965092949392505050565b5f5f6040838503121561130f575f5ffd5b823567ffffffffffffffff811115611325575f5ffd5b61133185828601610ffd565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611388575f5ffd5b84356113938161105e565b935060208501359250604085013567ffffffffffffffff8111156113b5575f5ffd5b6113c18782880161124b565b95989497509550505050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f60208284031215611432575f5ffd5b5051919050565b5f5f8335601e1984360301811261144e575f5ffd5b83018035915067ffffffffffffffff821115611468575f5ffd5b602001915036819003821315611289575f5ffd5b5f5f8585111561148a575f5ffd5b83861115611496575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610dfe576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f608085870312156114ec575f5ffd5b84356114f78161105e565b935060208501356115078161105e565b925060408501359150606085013567ffffffffffffffff811115611529575f5ffd5b6115358782880161113c565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220925fe411a74f721c53058a316afb80f3ef094898def53447db92437f185df9ba64736f6c634300081e0033",
553
587
  "linkReferences": {},
554
588
  "deployedLinkReferences": {},
555
589
  "immutableReferences": {
556
590
  "2756": [
557
591
  {
558
592
  "length": 32,
559
- "start": 1958
593
+ "start": 1992
560
594
  },
561
595
  {
562
596
  "length": 32,
563
- "start": 1999
597
+ "start": 2033
564
598
  },
565
599
  {
566
600
  "length": 32,
567
- "start": 2315
601
+ "start": 2349
568
602
  }
569
603
  ],
570
- "12314": [
604
+ "12317": [
571
605
  {
572
606
  "length": 32,
573
- "start": 593
607
+ "start": 635
574
608
  },
575
609
  {
576
610
  "length": 32,
577
- "start": 879
611
+ "start": 921
578
612
  },
579
613
  {
580
614
  "length": 32,
581
- "start": 1003
615
+ "start": 1045
582
616
  },
583
617
  {
584
618
  "length": 32,
585
- "start": 1492
619
+ "start": 1514
586
620
  },
587
621
  {
588
622
  "length": 32,
589
- "start": 1641
623
+ "start": 1663
590
624
  },
591
625
  {
592
626
  "length": 32,
593
- "start": 1699
627
+ "start": 1721
594
628
  }
595
629
  ]
596
630
  },
597
631
  "inputSourceName": "project/contracts/ERC2771ForwarderAccount.sol",
598
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
632
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
599
633
  }
@@ -8,14 +8,14 @@ export interface ERC2771ForwarderAccount$Type {
8
8
  readonly _format: "hh3-artifact-1";
9
9
  readonly contractName: "ERC2771ForwarderAccount";
10
10
  readonly sourceName: "contracts/ERC2771ForwarderAccount.sol";
11
- readonly abi: [{"inputs":[{"internalType":"contract IEntryPoint","name":"anEntryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes","name":"error","type":"bytes"}],"name":"ExecuteError","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidCall","type":"error"},{"inputs":[{"internalType":"contract ERC2771Context","name":"target","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"InvalidTarget","type":"error"},{"inputs":[],"name":"OnlyExecuteUserOpAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"RequiredEntryPointOrExecutor","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"contract ERC2771Context","name":"target","type":"address"}],"name":"ExecutorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"}],"name":"ExecutorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"},{"internalType":"contract ERC2771Context","name":"target","type":"address"}],"name":"addExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entryPoint","outputs":[{"internalType":"contract IEntryPoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BaseAccount.Call[]","name":"","type":"tuple[]"}],"name":"executeBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple"},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"}],"name":"executeUserOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"}],"name":"removeExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple"},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDepositTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}];
12
- readonly bytecode: "0x60c060405230608052348015610013575f5ffd5b5060405161152838038061152883398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516114666100c25f395f81816102510152818161036f015281816103eb015281816105d40152818161066901526106a301525f81816107a6015281816107cf015261090b01526114665ff3fe6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033";
13
- readonly deployedBytecode: "0x6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033";
11
+ readonly abi: [{"inputs":[{"internalType":"contract IEntryPoint","name":"anEntryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes","name":"error","type":"bytes"}],"name":"ExecuteError","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidCall","type":"error"},{"inputs":[{"internalType":"contract ERC2771Context","name":"target","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"name":"InvalidTarget","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"MethodNotSupported","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"RequiredEntryPointOrExecutor","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"contract ERC2771Context","name":"target","type":"address"}],"name":"ExecutorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"}],"name":"ExecutorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"},{"internalType":"contract ERC2771Context","name":"target","type":"address"}],"name":"addExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entryPoint","outputs":[{"internalType":"contract IEntryPoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"func","type":"bytes"}],"name":"erc2771Forward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BaseAccount.Call[]","name":"","type":"tuple[]"}],"name":"executeBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple"},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"}],"name":"executeUserOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"}],"name":"removeExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple"},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDepositTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}];
12
+ readonly bytecode: "0x60c060405230608052348015610013575f5ffd5b5060405161166d38038061166d83398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516115ab6100c25f395f818161027b0152818161039901528181610415015281816105ea0152818161067f01526106b901525f81816107c8015281816107f1015261092d01526115ab5ff3fe6080604052600436106100f2575f3560e01c80638129fc1c11610087578063b0d691fe11610057578063b0d691fe14610262578063b61d27f6146102a5578063c399ec88146102bf578063d087d288146102d3575f5ffd5b80638129fc1c146101dc57806381a30acd146101e75780638dd7712f14610206578063ad3cb1cc14610225575f5ffd5b80634d44560d116100c25780634d44560d146101775780634f1ef2861461019657806352d1902d146101a95780636267e759146101bd575f5ffd5b806319822f7c146100fd578063247884291461012f57806334fcd5be146101505780634a58db191461016f575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b5061011c610117366004611014565b6102e7565b6040519081526020015b60405180910390f35b34801561013a575f5ffd5b5061014e610149366004611072565b61030c565b005b34801561015b575f5ffd5b5061014e61016a36600461108d565b61037e565b61014e610397565b348015610182575f5ffd5b5061014e6101913660046110fe565b610413565b61014e6101a43660046111c7565b610497565b3480156101b4575f5ffd5b5061011c6104ad565b3480156101c8575f5ffd5b5061014e6101d7366004611214565b6104c8565b34801561014e575f5ffd5b3480156101f2575f5ffd5b5061014e610201366004611290565b610545565b348015610211575f5ffd5b5061014e6102203660046112fe565b61057b565b348015610230575f5ffd5b50610255604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101269190611340565b34801561026d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610126565b3480156102b0575f5ffd5b5061014e61016a366004611375565b3480156102ca575f5ffd5b5061011c6105cb565b3480156102de575f5ffd5b5061011c610659565b5f6102f06106ae565b6102fa848461072b565b905061030582610778565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b60405163574b16a760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b15801561047d575f5ffd5b505af115801561048f573d5f5f3e3d5ffd5b505050505050565b61049f6107bd565b6104a98282610861565b5050565b5f6104b6610922565b505f5160206115565f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61054d6106ae565b61048f84838388604051602001610566939291906113cd565b6040516020818303038152906040528561096b565b6105836106ae565b5f5f61058f8484610a37565b509150915061040c815f01518260400151846040516020016105b29291906113f3565b604051602081830303815290604052836020015161096b565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610630573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106549190611422565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610615565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6107388585610a37565b50915091505f6107488686610b88565b90506107588184845f0151610c09565b610768576001935050505061076f565b5f93505050505b92915050565b50565b8015610775576040515f90339083908381818185875af1925050503d805f811461040c576040519150601f19603f3d011682016040523d82523d5f602084013e61040c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061084357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108375f5160206115565f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105435760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108bb575060408051601f3d908101601f191682019092526108b891810190611422565b60015b6108e357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610722565b5f5160206115565f395f51905f52811461091357604051632a87526960e21b815260048101829052602401610722565b61091d8383610c6a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405163703e46dd60e11b815260040160405180910390fd5b6060814710156109975760405163cf47918160e01b815247600482015260248101839052604401610722565b5f6109a3858486610cbf565b90508080156109c457505f3d11806109c457505f856001600160a01b03163b115b156109d9576109d1610cd4565b915050610305565b8015610a0357604051639996b31560e01b81526001600160a01b0386166004820152602401610722565b3d15610a1657610a11610ced565b610a2f565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b60408051606080820183525f80835260208301819052928201525f6084610a616060870187611439565b90501015610a825760405163574b16a760e11b815260040160405180910390fd5b610a8f6060860186611439565b610a9d916004915f9161147c565b610aa6916114a3565b90506001600160e01b03198116638dd7712f60e01b14801590610ada57506001600160e01b031981166381a30acd60e01b14155b15610b045760405163c610096760e01b81526001600160e01b031982166004820152602401610722565b610b116060860186611439565b610b1f91600490829061147c565b810190610b2c91906114d9565b604086015260208501526001600160a01b0316808452909350610b81578151610b558686610b88565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610722565b9250925092565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610c0181610bc8610100870187611439565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cf892505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610c6157506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610c7382610d20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cb75761091d8282610d83565b6104a9610e05565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610d068686610e24565b925092509250610d168282610e6a565b5090949350505050565b806001600160a01b03163b5f03610d5557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610722565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d908484610f22565b9050808015610db157505f3d1180610db157505f846001600160a01b03163b115b15610dc657610dbe610cd4565b91505061076f565b8015610df057604051639996b31560e01b81526001600160a01b0385166004820152602401610722565b3d15610a1657610dfe610ced565b5092915050565b34156105435760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610e5b576020840151604085015160608601515f1a610e4d88828585610f35565b955095509550505050610b81565b505081515f9150600290610b81565b5f826003811115610e7d57610e7d611541565b03610e86575050565b6001826003811115610e9a57610e9a611541565b03610eb85760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ecc57610ecc611541565b03610eed5760405163fce698f760e01b815260048101829052602401610722565b6003826003811115610f0157610f01611541565b036104a9576040516335e2f38360e21b815260048101829052602401610722565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610f6e57505f91506003905082610ff3565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610fbf573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610fea57505f925060019150829050610ff3565b92505f91508190505b9450945094915050565b5f610120828403121561100e575f5ffd5b50919050565b5f5f5f60608486031215611026575f5ffd5b833567ffffffffffffffff81111561103c575f5ffd5b61104886828701610ffd565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610775575f5ffd5b5f60208284031215611082575f5ffd5b81356103058161105e565b5f5f6020838503121561109e575f5ffd5b823567ffffffffffffffff8111156110b4575f5ffd5b8301601f810185136110c4575f5ffd5b803567ffffffffffffffff8111156110da575f5ffd5b8560208260051b84010111156110ee575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561110f575f5ffd5b823561111a8161105e565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261114b575f5ffd5b813567ffffffffffffffff81111561116557611165611128565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561119457611194611128565b6040528181528382016020018510156111ab575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156111d8575f5ffd5b82356111e38161105e565b9150602083013567ffffffffffffffff8111156111fe575f5ffd5b61120a8582860161113c565b9150509250929050565b5f5f60408385031215611225575f5ffd5b82356112308161105e565b915060208301356112408161105e565b809150509250929050565b5f5f83601f84011261125b575f5ffd5b50813567ffffffffffffffff811115611272575f5ffd5b602083019150836020828501011115611289575f5ffd5b9250929050565b5f5f5f5f5f608086880312156112a4575f5ffd5b85356112af8161105e565b945060208601356112bf8161105e565b935060408601359250606086013567ffffffffffffffff8111156112e1575f5ffd5b6112ed8882890161124b565b969995985093965092949392505050565b5f5f6040838503121561130f575f5ffd5b823567ffffffffffffffff811115611325575f5ffd5b61133185828601610ffd565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611388575f5ffd5b84356113938161105e565b935060208501359250604085013567ffffffffffffffff8111156113b5575f5ffd5b6113c18782880161124b565b95989497509550505050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f60208284031215611432575f5ffd5b5051919050565b5f5f8335601e1984360301811261144e575f5ffd5b83018035915067ffffffffffffffff821115611468575f5ffd5b602001915036819003821315611289575f5ffd5b5f5f8585111561148a575f5ffd5b83861115611496575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610dfe576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f608085870312156114ec575f5ffd5b84356114f78161105e565b935060208501356115078161105e565b925060408501359150606085013567ffffffffffffffff811115611529575f5ffd5b6115358782880161113c565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220925fe411a74f721c53058a316afb80f3ef094898def53447db92437f185df9ba64736f6c634300081e0033";
13
+ readonly deployedBytecode: "0x6080604052600436106100f2575f3560e01c80638129fc1c11610087578063b0d691fe11610057578063b0d691fe14610262578063b61d27f6146102a5578063c399ec88146102bf578063d087d288146102d3575f5ffd5b80638129fc1c146101dc57806381a30acd146101e75780638dd7712f14610206578063ad3cb1cc14610225575f5ffd5b80634d44560d116100c25780634d44560d146101775780634f1ef2861461019657806352d1902d146101a95780636267e759146101bd575f5ffd5b806319822f7c146100fd578063247884291461012f57806334fcd5be146101505780634a58db191461016f575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b5061011c610117366004611014565b6102e7565b6040519081526020015b60405180910390f35b34801561013a575f5ffd5b5061014e610149366004611072565b61030c565b005b34801561015b575f5ffd5b5061014e61016a36600461108d565b61037e565b61014e610397565b348015610182575f5ffd5b5061014e6101913660046110fe565b610413565b61014e6101a43660046111c7565b610497565b3480156101b4575f5ffd5b5061011c6104ad565b3480156101c8575f5ffd5b5061014e6101d7366004611214565b6104c8565b34801561014e575f5ffd5b3480156101f2575f5ffd5b5061014e610201366004611290565b610545565b348015610211575f5ffd5b5061014e6102203660046112fe565b61057b565b348015610230575f5ffd5b50610255604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101269190611340565b34801561026d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610126565b3480156102b0575f5ffd5b5061014e61016a366004611375565b3480156102ca575f5ffd5b5061011c6105cb565b3480156102de575f5ffd5b5061011c610659565b5f6102f06106ae565b6102fa848461072b565b905061030582610778565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b60405163574b16a760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b15801561047d575f5ffd5b505af115801561048f573d5f5f3e3d5ffd5b505050505050565b61049f6107bd565b6104a98282610861565b5050565b5f6104b6610922565b505f5160206115565f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61054d6106ae565b61048f84838388604051602001610566939291906113cd565b6040516020818303038152906040528561096b565b6105836106ae565b5f5f61058f8484610a37565b509150915061040c815f01518260400151846040516020016105b29291906113f3565b604051602081830303815290604052836020015161096b565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610630573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106549190611422565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610615565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6107388585610a37565b50915091505f6107488686610b88565b90506107588184845f0151610c09565b610768576001935050505061076f565b5f93505050505b92915050565b50565b8015610775576040515f90339083908381818185875af1925050503d805f811461040c576040519150601f19603f3d011682016040523d82523d5f602084013e61040c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061084357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108375f5160206115565f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105435760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108bb575060408051601f3d908101601f191682019092526108b891810190611422565b60015b6108e357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610722565b5f5160206115565f395f51905f52811461091357604051632a87526960e21b815260048101829052602401610722565b61091d8383610c6a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105435760405163703e46dd60e11b815260040160405180910390fd5b6060814710156109975760405163cf47918160e01b815247600482015260248101839052604401610722565b5f6109a3858486610cbf565b90508080156109c457505f3d11806109c457505f856001600160a01b03163b115b156109d9576109d1610cd4565b915050610305565b8015610a0357604051639996b31560e01b81526001600160a01b0386166004820152602401610722565b3d15610a1657610a11610ced565b610a2f565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b60408051606080820183525f80835260208301819052928201525f6084610a616060870187611439565b90501015610a825760405163574b16a760e11b815260040160405180910390fd5b610a8f6060860186611439565b610a9d916004915f9161147c565b610aa6916114a3565b90506001600160e01b03198116638dd7712f60e01b14801590610ada57506001600160e01b031981166381a30acd60e01b14155b15610b045760405163c610096760e01b81526001600160e01b031982166004820152602401610722565b610b116060860186611439565b610b1f91600490829061147c565b810190610b2c91906114d9565b604086015260208501526001600160a01b0316808452909350610b81578151610b558686610b88565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610722565b9250925092565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610c0181610bc8610100870187611439565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cf892505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610c6157506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610c7382610d20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cb75761091d8282610d83565b6104a9610e05565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610d068686610e24565b925092509250610d168282610e6a565b5090949350505050565b806001600160a01b03163b5f03610d5557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610722565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d908484610f22565b9050808015610db157505f3d1180610db157505f846001600160a01b03163b115b15610dc657610dbe610cd4565b91505061076f565b8015610df057604051639996b31560e01b81526001600160a01b0385166004820152602401610722565b3d15610a1657610dfe610ced565b5092915050565b34156105435760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610e5b576020840151604085015160608601515f1a610e4d88828585610f35565b955095509550505050610b81565b505081515f9150600290610b81565b5f826003811115610e7d57610e7d611541565b03610e86575050565b6001826003811115610e9a57610e9a611541565b03610eb85760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ecc57610ecc611541565b03610eed5760405163fce698f760e01b815260048101829052602401610722565b6003826003811115610f0157610f01611541565b036104a9576040516335e2f38360e21b815260048101829052602401610722565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610f6e57505f91506003905082610ff3565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610fbf573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610fea57505f925060019150829050610ff3565b92505f91508190505b9450945094915050565b5f610120828403121561100e575f5ffd5b50919050565b5f5f5f60608486031215611026575f5ffd5b833567ffffffffffffffff81111561103c575f5ffd5b61104886828701610ffd565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610775575f5ffd5b5f60208284031215611082575f5ffd5b81356103058161105e565b5f5f6020838503121561109e575f5ffd5b823567ffffffffffffffff8111156110b4575f5ffd5b8301601f810185136110c4575f5ffd5b803567ffffffffffffffff8111156110da575f5ffd5b8560208260051b84010111156110ee575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561110f575f5ffd5b823561111a8161105e565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261114b575f5ffd5b813567ffffffffffffffff81111561116557611165611128565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561119457611194611128565b6040528181528382016020018510156111ab575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156111d8575f5ffd5b82356111e38161105e565b9150602083013567ffffffffffffffff8111156111fe575f5ffd5b61120a8582860161113c565b9150509250929050565b5f5f60408385031215611225575f5ffd5b82356112308161105e565b915060208301356112408161105e565b809150509250929050565b5f5f83601f84011261125b575f5ffd5b50813567ffffffffffffffff811115611272575f5ffd5b602083019150836020828501011115611289575f5ffd5b9250929050565b5f5f5f5f5f608086880312156112a4575f5ffd5b85356112af8161105e565b945060208601356112bf8161105e565b935060408601359250606086013567ffffffffffffffff8111156112e1575f5ffd5b6112ed8882890161124b565b969995985093965092949392505050565b5f5f6040838503121561130f575f5ffd5b823567ffffffffffffffff811115611325575f5ffd5b61133185828601610ffd565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611388575f5ffd5b84356113938161105e565b935060208501359250604085013567ffffffffffffffff8111156113b5575f5ffd5b6113c18782880161124b565b95989497509550505050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f60208284031215611432575f5ffd5b5051919050565b5f5f8335601e1984360301811261144e575f5ffd5b83018035915067ffffffffffffffff821115611468575f5ffd5b602001915036819003821315611289575f5ffd5b5f5f8585111561148a575f5ffd5b83861115611496575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610dfe576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f608085870312156114ec575f5ffd5b84356114f78161105e565b935060208501356115078161105e565b925060408501359150606085013567ffffffffffffffff811115611529575f5ffd5b6115358782880161113c565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220925fe411a74f721c53058a316afb80f3ef094898def53447db92437f185df9ba64736f6c634300081e0033";
14
14
  readonly linkReferences: {};
15
15
  readonly deployedLinkReferences: {};
16
- readonly immutableReferences: {"2756":[{"length":32,"start":1958},{"length":32,"start":1999},{"length":32,"start":2315}],"12314":[{"length":32,"start":593},{"length":32,"start":879},{"length":32,"start":1003},{"length":32,"start":1492},{"length":32,"start":1641},{"length":32,"start":1699}]};
16
+ readonly immutableReferences: {"2756":[{"length":32,"start":1992},{"length":32,"start":2033},{"length":32,"start":2349}],"12317":[{"length":32,"start":635},{"length":32,"start":921},{"length":32,"start":1045},{"length":32,"start":1514},{"length":32,"start":1663},{"length":32,"start":1721}]};
17
17
  readonly inputSourceName: "project/contracts/ERC2771ForwarderAccount.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -1174,5 +1174,5 @@
1174
1174
  "deployedLinkReferences": {},
1175
1175
  "immutableReferences": {},
1176
1176
  "inputSourceName": "project/contracts/dependencies/AccessManager.sol",
1177
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
1177
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
1178
1178
  }
@@ -15,7 +15,7 @@ export interface AccessManager$Type {
15
15
  readonly deployedLinkReferences: {};
16
16
  readonly immutableReferences: {};
17
17
  readonly inputSourceName: "project/contracts/dependencies/AccessManager.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -9,5 +9,5 @@
9
9
  "deployedLinkReferences": {},
10
10
  "immutableReferences": {},
11
11
  "inputSourceName": "project/contracts/dependencies/FrozenTime.sol",
12
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
12
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
13
13
  }
@@ -15,7 +15,7 @@ export interface FrozenTime$Type {
15
15
  readonly deployedLinkReferences: {};
16
16
  readonly immutableReferences: {};
17
17
  readonly inputSourceName: "project/contracts/dependencies/FrozenTime.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -394,7 +394,7 @@
394
394
  "start": 1096
395
395
  }
396
396
  ],
397
- "14976": [
397
+ "15022": [
398
398
  {
399
399
  "length": 32,
400
400
  "start": 279
@@ -402,5 +402,5 @@
402
402
  ]
403
403
  },
404
404
  "inputSourceName": "project/contracts/mock/ERC20With2771.sol",
405
- "buildInfoId": "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865"
405
+ "buildInfoId": "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966"
406
406
  }
@@ -13,9 +13,9 @@ export interface ERC20With2771$Type {
13
13
  readonly deployedBytecode: "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063572b6c051161006e578063572b6c051461014157806370a08231146101815780637da0a877146101a957806395d89b41146101e0578063a9059cbb146101e8578063dd62ed3e146101fb575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b2610233565b6040516100bf9190610699565b60405180910390f35b6100db6100d63660046106e9565b6102c3565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610711565b6102e6565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100bf565b6100db61014f36600461074b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6100ef61018f36600461074b565b6001600160a01b03165f9081526020819052604090205490565b6040516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020016100bf565b6100b2610313565b6100db6101f63660046106e9565b610322565b6100ef61020936600461076b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546102429061079c565b80601f016020809104026020016040519081016040528092919081815260200182805461026e9061079c565b80156102b95780601f10610290576101008083540402835291602001916102b9565b820191905f5260205f20905b81548152906001019060200180831161029c57829003601f168201915b5050505050905090565b5f5f6102cd610339565b90506102da818585610347565b60019150505b92915050565b5f5f6102f0610339565b90506102fd858285610359565b6103088585856103da565b506001949350505050565b6060600480546102429061079c565b5f5f61032c610339565b90506102da8185856103da565b5f610342610437565b905090565b61035483838360016104a1565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198110156103d457818110156103c657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6103d484848484035f6104a1565b50505050565b6001600160a01b03831661040357604051634b637e8f60e11b81525f60048201526024016103bd565b6001600160a01b03821661042c5760405163ec442f0560e01b81525f60048201526024016103bd565b610354838383610573565b5f36601480821080159061047357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633145b156104995761048636828403815f6107d4565b61048f916107fb565b60601c9250505090565b339250505090565b6001600160a01b0384166104ca5760405163e602df0560e01b81525f60048201526024016103bd565b6001600160a01b0383166104f357604051634a1406b160e11b81525f60048201526024016103bd565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156103d457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161056591815260200190565b60405180910390a350505050565b6001600160a01b03831661059d578060025f8282546105929190610848565b9091555061060d9050565b6001600160a01b0383165f90815260208190526040902054818110156105ef5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103bd565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661062957600280548290039055610647565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161068c91815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106e4575f5ffd5b919050565b5f5f604083850312156106fa575f5ffd5b610703836106ce565b946020939093013593505050565b5f5f5f60608486031215610723575f5ffd5b61072c846106ce565b925061073a602085016106ce565b929592945050506040919091013590565b5f6020828403121561075b575f5ffd5b610764826106ce565b9392505050565b5f5f6040838503121561077c575f5ffd5b610785836106ce565b9150610793602084016106ce565b90509250929050565b600181811c908216806107b057607f821691505b6020821081036107ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f858511156107e2575f5ffd5b838611156107ee575f5ffd5b5050820193919092039150565b80356bffffffffffffffffffffffff198116906014841015610841576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b808201808211156102e057634e487b7160e01b5f52601160045260245ffdfea26469706673582212209052ca3b7d16208877574fb8688288b972afaa142be43385402a72663c099d9564736f6c634300081e0033";
14
14
  readonly linkReferences: {};
15
15
  readonly deployedLinkReferences: {};
16
- readonly immutableReferences: {"2301":[{"length":32,"start":337},{"length":32,"start":438},{"length":32,"start":1096}],"14976":[{"length":32,"start":279}]};
16
+ readonly immutableReferences: {"2301":[{"length":32,"start":337},{"length":32,"start":438},{"length":32,"start":1096}],"15022":[{"length":32,"start":279}]};
17
17
  readonly inputSourceName: "project/contracts/mock/ERC20With2771.sol";
18
- readonly buildInfoId: "solc-0_8_30-95f43f1788cfd8898b8023be4a1aea1d69744865";
18
+ readonly buildInfoId: "solc-0_8_30-f987e738f2ecce00e06bc1b8c078480f3d3eb966";
19
19
  };
20
20
 
21
21
  import "hardhat/types/artifacts";
@@ -26,6 +26,8 @@ import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/U
26
26
  * @author Ensuro
27
27
  */
28
28
  contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecute {
29
+ // 132 = 4 (method bytes4) + 32 (expectedSigner) + 32 (target) + 32 (value) + 32 (calldata offset)
30
+ uint256 private constant MIN_USER_OP_CALLDATA = 132;
29
31
  IEntryPoint private immutable _entryPoint;
30
32
 
31
33
  /// @custom:storage-location erc7201:ensuro.storage.ERC2771ForwarderAccount
@@ -50,8 +52,8 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
50
52
 
51
53
  error RequiredEntryPointOrExecutor(address sender);
52
54
  error InvalidTarget(ERC2771Context target, address signer);
53
- error OnlyExecuteUserOpAllowed();
54
55
  error InvalidCall();
56
+ error MethodNotSupported(bytes4 selector);
55
57
 
56
58
  constructor(IEntryPoint anEntryPoint) {
57
59
  _entryPoint = anEntryPoint;
@@ -70,11 +72,11 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
70
72
  receive() external payable {}
71
73
 
72
74
  function executeBatch(Call[] calldata) external virtual override {
73
- revert OnlyExecuteUserOpAllowed();
75
+ revert InvalidCall();
74
76
  }
75
77
 
76
78
  function execute(address, uint256, bytes calldata) external virtual override {
77
- revert OnlyExecuteUserOpAllowed();
79
+ revert InvalidCall();
78
80
  }
79
81
 
80
82
  function _getSigner(PackedUserOperation calldata userop, bytes32 userOpHash) internal pure returns (address) {
@@ -84,23 +86,31 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
84
86
 
85
87
  /**
86
88
  * @dev Validates that the user operation is well formed and that the destination is correct. Does not validate signature.
89
+ * @return expectedSigner The address included in the call data, expected to be the signer of the userOp
87
90
  * @return call A Call struct containing the call to be made
91
+ * @return selector The selector used (execute or executeUserOp)
88
92
  */
89
93
  function _validateAndDecodeCall(
90
94
  PackedUserOperation calldata userOp,
91
95
  bytes32 userOpHash
92
- ) internal pure returns (Call memory call) {
93
- require(userOp.callData.length >= 56 && bytes4(userOp.callData[0:4]) == this.executeUserOp.selector, InvalidCall());
94
- (call.target, call.value, call.data) = abi.decode(userOp.callData[4:], (address, uint256, bytes));
96
+ ) internal pure returns (address expectedSigner, Call memory call, bytes4 selector) {
97
+ require(userOp.callData.length >= MIN_USER_OP_CALLDATA, InvalidCall());
98
+ selector = bytes4(userOp.callData[0:4]);
99
+ if (selector != this.executeUserOp.selector && selector != this.erc2771Forward.selector) {
100
+ revert MethodNotSupported(selector);
101
+ }
102
+ (expectedSigner, call.target, call.value, call.data) = abi.decode(
103
+ userOp.callData[4:],
104
+ (address, address, uint256, bytes)
105
+ );
95
106
  if (call.target == address(0)) {
96
- // This is an if and not a require to avoid evaluating the _getSigner call in the happy path
97
107
  revert InvalidTarget(ERC2771Context(call.target), _getSigner(userOp, userOpHash));
98
108
  }
99
109
  }
100
110
 
101
- function _isAuthorized(address signer, address target) internal view returns (bool) {
111
+ function _isAuthorized(address signer, address expectedSigner, address target) internal view returns (bool) {
102
112
  ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();
103
- return $.targets[signer] == ERC2771Context(target);
113
+ return signer == expectedSigner && $.targets[signer] == ERC2771Context(target);
104
114
  }
105
115
 
106
116
  /**
@@ -129,9 +139,9 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
129
139
  PackedUserOperation calldata userOp,
130
140
  bytes32 userOpHash
131
141
  ) internal virtual override returns (uint256 validationData) {
132
- Call memory call = _validateAndDecodeCall(userOp, userOpHash);
142
+ (address expectedSigner, Call memory call, ) = _validateAndDecodeCall(userOp, userOpHash);
133
143
  address signer = _getSigner(userOp, userOpHash);
134
- if (!_isAuthorized(signer, call.target)) {
144
+ if (!_isAuthorized(signer, expectedSigner, call.target)) {
135
145
  return SIG_VALIDATION_FAILED;
136
146
  }
137
147
  return SIG_VALIDATION_SUCCESS;
@@ -139,8 +149,8 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
139
149
 
140
150
  /**
141
151
  * @dev Executes a user operation by forwarding the call to the target contract with the signer as the msgSender.
142
- * It re-validates the signature and checks that the signer is authorized. Reverts with InvalidTarget if it isn't.
143
- * The calldata is expected to contain this function's selector followed by an ABI-encoded Call:
152
+ * The calldata is expected to contain this function's selector followed by the signer and the ABI-encoded call:
153
+ * - signer (address): the signer of the userop, must match the signature
144
154
  * - dest (address): the target contract address (must be the same as _target)
145
155
  * - value (uint256): the amount of ETH to send with the call
146
156
  * - func (bytes): the calldata for the target function
@@ -149,12 +159,27 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
149
159
  * @param userOpHash The hash of the user operation, used for signature verification.
150
160
  */
151
161
  function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external override {
152
- Call memory call = _validateAndDecodeCall(userOp, userOpHash);
153
- address signer = _getSigner(userOp, userOpHash);
162
+ _requireFromEntryPoint();
154
163
 
155
- require(_isAuthorized(signer, call.target), InvalidTarget(ERC2771Context(call.target), signer));
164
+ (address expectedSigner, Call memory call, ) = _validateAndDecodeCall(userOp, userOpHash);
165
+
166
+ Address.functionCallWithValue(call.target, abi.encodePacked(call.data, expectedSigner), call.value);
167
+ }
156
168
 
157
- Address.functionCallWithValue(call.target, abi.encodePacked(call.data, signer), call.value);
169
+ /**
170
+ * @notice Forwards a call to the target contract with `caller` as the msgSender.
171
+ * @dev Since this method is called from the entryPoint, the method _validateSignature was passed before,
172
+ * validating the signer of the userOp is equal to `caller` and `caller` is authorized to call `target`.
173
+ *
174
+ * @param caller The real caller of the operation that will be appended to the call, and decoded by the target
175
+ * contract as _msgSender()
176
+ * @param target The target contract to be called
177
+ * @param value The amount of ETH to send with the call
178
+ * @param func The calldata for the target function
179
+ */
180
+ function erc2771Forward(address caller, address target, uint256 value, bytes calldata func) external virtual {
181
+ _requireFromEntryPoint();
182
+ Address.functionCallWithValue(target, abi.encodePacked(func, caller), value);
158
183
  }
159
184
 
160
185
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ensuro/account-abstraction",
3
3
  "description": "ERC-4337 related contracts by the Ensuro Team",
4
- "version": "0.2.0",
4
+ "version": "0.3.1",
5
5
  "files": [
6
6
  "**/*.sol",
7
7
  "/build",