@ensuro/account-abstraction 0.2.0 → 0.3.0
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.
- package/build/build-info.json +2 -2
- package/build/contracts/AccessControlAccount.sol/AccessControlAccount.json +1 -1
- package/build/contracts/AccessControlAccount.sol/artifacts.d.ts +1 -1
- package/build/contracts/AccessManagerAccount.sol/AccessManagerAccount.json +1 -1
- package/build/contracts/AccessManagerAccount.sol/artifacts.d.ts +1 -1
- package/build/contracts/ERC2771ForwarderAccount.sol/ERC2771ForwarderAccount.json +9 -9
- package/build/contracts/ERC2771ForwarderAccount.sol/artifacts.d.ts +4 -4
- package/build/contracts/dependencies/AccessManager.sol/AccessManager.json +1 -1
- package/build/contracts/dependencies/AccessManager.sol/artifacts.d.ts +1 -1
- package/build/contracts/dependencies/FrozenTime.sol/FrozenTime.json +1 -1
- package/build/contracts/dependencies/FrozenTime.sol/artifacts.d.ts +1 -1
- package/build/contracts/mock/ERC20With2771.sol/ERC20With2771.json +2 -2
- package/build/contracts/mock/ERC20With2771.sol/artifacts.d.ts +2 -2
- package/contracts/ERC2771ForwarderAccount.sol +17 -13
- package/package.json +1 -1
package/build/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_format": "hh3-sol-build-info-1",
|
|
3
|
-
"id": "solc-0_8_30-
|
|
3
|
+
"id": "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac",
|
|
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 >=
|
|
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 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 */\n function _validateAndDecodeCall(\n PackedUserOperation calldata userOp,\n bytes32 userOpHash\n ) internal pure returns (address expectedSigner, Call memory call) {\n require(userOp.callData.length >= 80 && bytes4(userOp.callData[0:4]) == this.executeUserOp.selector, InvalidCall());\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 // 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 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 // We can trust that expectedSigner is the userop signer because it was checked in validateSignature\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 * 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"
|
|
@@ -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-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
import "hardhat/types/artifacts";
|
|
@@ -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-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
import "hardhat/types/artifacts";
|
|
@@ -548,23 +548,23 @@
|
|
|
548
548
|
"type": "receive"
|
|
549
549
|
}
|
|
550
550
|
],
|
|
551
|
-
"bytecode": "0x60c060405230608052348015610013575f5ffd5b5060405161152838038061152883398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516114666100c25f395f81816102510152818161036f015281816103eb015281816105d40152818161066901526106a301525f81816107a6015281816107cf015261090b01526114665ff3fe6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033",
|
|
552
|
-
"deployedBytecode": "0x6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f87565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fe5565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004611000565b610354565b61014361036d565b348015610177575f5ffd5b50610143610186366004611071565b6103e9565b61014361019936600461113a565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611187565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111be565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b9190611200565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f366004611235565b3480156102a0575f5ffd5b506101116105b5565b3480156102b4575f5ffd5b50610111610643565b5f6102c6610698565b6102d08484610710565b90506102db82610756565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561079b565b61047f828261083f565b5050565b5f61048c610900565b505f5160206114115f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b5f6105268383610949565b90505f6105338484610a4d565b905061054281835f0151610ace565b825190829061057c5760405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50506103e2825f015183604001518360405160200161059c9291906112ba565b6040516020818303038152906040528460200151610b0e565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561061a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063e91906112e9565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105ff565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610573565b5f5f61071c8484610949565b90505f6107298585610a4d565b905061073881835f0151610ace565b6107475760019250505061074d565b5f925050505b92915050565b50565b8015610753576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061082157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108155f5160206114115f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610899575060408051601f3d908101601f19168201909252610896918101906112e9565b60015b6108c157604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610573565b5f5160206114115f395f51905f5281146108f157604051632a87526960e21b815260048101829052602401610573565b6108fb8383610bda565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f80835260208301529181019190915260386109736060850185611300565b9050101580156109b65750638dd7712f60e01b6109936060850185611300565b6109a1916004915f9161134a565b6109aa91611371565b6001600160e01b031916145b6109d35760405163574b16a760e11b815260040160405180910390fd5b6109e06060840184611300565b6109ee91600490829061134a565b8101906109fb91906113a7565b604084015260208301526001600160a01b031680825261074d578051610a218484610a4d565b60405163f252a21160e01b81526001600160a01b03928316600482015291166024820152604401610573565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610ac681610a8d610100870187611300565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c2f92505050565b949350505050565b6001600160a01b039182165f9081527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020526040902054821691161490565b606081471015610b3a5760405163cf47918160e01b815247600482015260248101839052604401610573565b5f610b46858486610c57565b9050808015610b6757505f3d1180610b6757505f856001600160a01b03163b115b15610b7c57610b74610c6c565b9150506102db565b8015610ba657604051639996b31560e01b81526001600160a01b0386166004820152602401610573565b3d15610bb957610bb4610c85565b610bd2565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b610be382610c90565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c27576108fb8282610cf3565b61047f610d75565b5f5f5f5f610c3d8686610d94565b925092509250610c4d8282610ddd565b5090949350505050565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b806001600160a01b03163b5f03610cc557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610573565b5f5160206114115f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610d008484610e95565b9050808015610d2157505f3d1180610d2157505f846001600160a01b03163b115b15610d3657610d2e610c6c565b91505061074d565b8015610d6057604051639996b31560e01b81526001600160a01b0385166004820152602401610573565b3d15610bb957610d6e610c85565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610dcb576020840151604085015160608601515f1a610dbd88828585610ea8565b955095509550505050610dd6565b505081515f91506002905b9250925092565b5f826003811115610df057610df06113fc565b03610df9575050565b6001826003811115610e0d57610e0d6113fc565b03610e2b5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e3f57610e3f6113fc565b03610e605760405163fce698f760e01b815260048101829052602401610573565b6003826003811115610e7457610e746113fc565b0361047f576040516335e2f38360e21b815260048101829052602401610573565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ee157505f91506003905082610f66565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f32573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f5d57505f925060019150829050610f66565b92505f91508190505b9450945094915050565b5f6101208284031215610f81575f5ffd5b50919050565b5f5f5f60608486031215610f99575f5ffd5b833567ffffffffffffffff811115610faf575f5ffd5b610fbb86828701610f70565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610753575f5ffd5b5f60208284031215610ff5575f5ffd5b81356102db81610fd1565b5f5f60208385031215611011575f5ffd5b823567ffffffffffffffff811115611027575f5ffd5b8301601f81018513611037575f5ffd5b803567ffffffffffffffff81111561104d575f5ffd5b8560208260051b8401011115611061575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611082575f5ffd5b823561108d81610fd1565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110be575f5ffd5b813567ffffffffffffffff8111156110d8576110d861109b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111075761110761109b565b60405281815283820160200185101561111e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561114b575f5ffd5b823561115681610fd1565b9150602083013567ffffffffffffffff811115611171575f5ffd5b61117d858286016110af565b9150509250929050565b5f5f60408385031215611198575f5ffd5b82356111a381610fd1565b915060208301356111b381610fd1565b809150509250929050565b5f5f604083850312156111cf575f5ffd5b823567ffffffffffffffff8111156111e5575f5ffd5b6111f185828601610f70565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611248575f5ffd5b843561125381610fd1565b935060208501359250604085013567ffffffffffffffff811115611275575f5ffd5b8501601f81018713611285575f5ffd5b803567ffffffffffffffff81111561129b575f5ffd5b8760208284010111156112ac575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112f9575f5ffd5b5051919050565b5f5f8335601e19843603018112611315575f5ffd5b83018035915067ffffffffffffffff82111561132f575f5ffd5b602001915036819003821315611343575f5ffd5b9250929050565b5f5f85851115611358575f5ffd5b83861115611364575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d6e576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f606084860312156113b9575f5ffd5b83356113c481610fd1565b925060208401359150604084013567ffffffffffffffff8111156113e6575f5ffd5b6113f2868287016110af565b9150509250925092565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220872c50a7097bf4bc50c5972cce553b4d6fb501a6658c63b74a98bc002b65524164736f6c634300081e0033",
|
|
551
|
+
"bytecode": "0x60c060405230608052348015610013575f5ffd5b5060405161151e38038061151e83398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a05161145c6100c25f395f81816102510152818161036f015281816103eb015281816105890152818161061e015261065801525f81816107660152818161078f01526108cb015261145c5ff3fe6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f71565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fcf565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004610fea565b610354565b61014361036d565b348015610177575f5ffd5b5061014361018636600461105b565b6103e9565b610143610199366004611124565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611171565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111a8565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b91906111ea565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f36600461121f565b3480156102a0575f5ffd5b5061011161056a565b3480156102b4575f5ffd5b506101116105f8565b5f6102c661064d565b6102d084846106ca565b90506102db82610716565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561075b565b61047f82826107ff565b5050565b5f61048c6108c0565b505f5160206114075f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61052361064d565b5f5f61052f8484610909565b915091506103e2815f01518260400151846040516020016105519291906112a4565b6040516020818303038152906040528360200151610a16565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156105cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f391906112d3565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105b4565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6106d78585610909565b915091505f6106e68686610ae2565b90506106f68184845f0151610b63565b610706576001935050505061070d565b5f93505050505b92915050565b50565b8015610713576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806107e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d55f5160206114075f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610859575060408051601f3d908101601f19168201909252610856918101906112d3565b60015b61088157604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106c1565b5f5160206114075f395f51905f5281146108b157604051632a87526960e21b8152600481018290526024016106c1565b6108bb8383610bc4565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f8083526020830181905292820152605061093260608601866112ea565b9050101580156109755750638dd7712f60e01b61095260608601866112ea565b610960916004915f9161132d565b61096991611354565b6001600160e01b031916145b6109925760405163574b16a760e11b815260040160405180910390fd5b61099f60608501856112ea565b6109ad91600490829061132d565b8101906109ba919061138a565b604085015260208401526001600160a01b0316808352909250610a0f5780516109e38585610ae2565b60405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044016106c1565b9250929050565b606081471015610a425760405163cf47918160e01b8152476004820152602481018390526044016106c1565b5f610a4e858486610c19565b9050808015610a6f57505f3d1180610a6f57505f856001600160a01b03163b115b15610a8457610a7c610c2e565b9150506102db565b8015610aae57604051639996b31560e01b81526001600160a01b03861660048201526024016106c1565b3d15610ac157610abc610c47565b610ada565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610b5b81610b226101008701876112ea565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c5292505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610bbb57506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610bcd82610c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c11576108bb8282610cdd565b61047f610d5f565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610c608686610d7e565b925092509250610c708282610dc7565b5090949350505050565b806001600160a01b03163b5f03610caf57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106c1565b5f5160206114075f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610cea8484610e7f565b9050808015610d0b57505f3d1180610d0b57505f846001600160a01b03163b115b15610d2057610d18610c2e565b91505061070d565b8015610d4a57604051639996b31560e01b81526001600160a01b03851660048201526024016106c1565b3d15610ac157610d58610c47565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610db5576020840151604085015160608601515f1a610da788828585610e92565b955095509550505050610dc0565b505081515f91506002905b9250925092565b5f826003811115610dda57610dda6113f2565b03610de3575050565b6001826003811115610df757610df76113f2565b03610e155760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e2957610e296113f2565b03610e4a5760405163fce698f760e01b8152600481018290526024016106c1565b6003826003811115610e5e57610e5e6113f2565b0361047f576040516335e2f38360e21b8152600481018290526024016106c1565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ecb57505f91506003905082610f50565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f1c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f4757505f925060019150829050610f50565b92505f91508190505b9450945094915050565b5f6101208284031215610f6b575f5ffd5b50919050565b5f5f5f60608486031215610f83575f5ffd5b833567ffffffffffffffff811115610f99575f5ffd5b610fa586828701610f5a565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610713575f5ffd5b5f60208284031215610fdf575f5ffd5b81356102db81610fbb565b5f5f60208385031215610ffb575f5ffd5b823567ffffffffffffffff811115611011575f5ffd5b8301601f81018513611021575f5ffd5b803567ffffffffffffffff811115611037575f5ffd5b8560208260051b840101111561104b575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561106c575f5ffd5b823561107781610fbb565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110a8575f5ffd5b813567ffffffffffffffff8111156110c2576110c2611085565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156110f1576110f1611085565b604052818152838201602001851015611108575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611135575f5ffd5b823561114081610fbb565b9150602083013567ffffffffffffffff81111561115b575f5ffd5b61116785828601611099565b9150509250929050565b5f5f60408385031215611182575f5ffd5b823561118d81610fbb565b9150602083013561119d81610fbb565b809150509250929050565b5f5f604083850312156111b9575f5ffd5b823567ffffffffffffffff8111156111cf575f5ffd5b6111db85828601610f5a565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611232575f5ffd5b843561123d81610fbb565b935060208501359250604085013567ffffffffffffffff81111561125f575f5ffd5b8501601f8101871361126f575f5ffd5b803567ffffffffffffffff811115611285575f5ffd5b876020828401011115611296575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112e3575f5ffd5b5051919050565b5f5f8335601e198436030181126112ff575f5ffd5b83018035915067ffffffffffffffff821115611319575f5ffd5b602001915036819003821315610a0f575f5ffd5b5f5f8585111561133b575f5ffd5b83861115611347575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d58576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f6080858703121561139d575f5ffd5b84356113a881610fbb565b935060208501356113b881610fbb565b925060408501359150606085013567ffffffffffffffff8111156113da575f5ffd5b6113e687828801611099565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122013a4df1d72e5a64f451b71018c2fa481b59ab84ef8a2fe93f22ebcc4986f4f0364736f6c634300081e0033",
|
|
552
|
+
"deployedBytecode": "0x6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f71565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fcf565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004610fea565b610354565b61014361036d565b348015610177575f5ffd5b5061014361018636600461105b565b6103e9565b610143610199366004611124565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611171565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111a8565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b91906111ea565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f36600461121f565b3480156102a0575f5ffd5b5061011161056a565b3480156102b4575f5ffd5b506101116105f8565b5f6102c661064d565b6102d084846106ca565b90506102db82610716565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561075b565b61047f82826107ff565b5050565b5f61048c6108c0565b505f5160206114075f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61052361064d565b5f5f61052f8484610909565b915091506103e2815f01518260400151846040516020016105519291906112a4565b6040516020818303038152906040528360200151610a16565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156105cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f391906112d3565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105b4565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6106d78585610909565b915091505f6106e68686610ae2565b90506106f68184845f0151610b63565b610706576001935050505061070d565b5f93505050505b92915050565b50565b8015610713576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806107e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d55f5160206114075f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610859575060408051601f3d908101601f19168201909252610856918101906112d3565b60015b61088157604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106c1565b5f5160206114075f395f51905f5281146108b157604051632a87526960e21b8152600481018290526024016106c1565b6108bb8383610bc4565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f8083526020830181905292820152605061093260608601866112ea565b9050101580156109755750638dd7712f60e01b61095260608601866112ea565b610960916004915f9161132d565b61096991611354565b6001600160e01b031916145b6109925760405163574b16a760e11b815260040160405180910390fd5b61099f60608501856112ea565b6109ad91600490829061132d565b8101906109ba919061138a565b604085015260208401526001600160a01b0316808352909250610a0f5780516109e38585610ae2565b60405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044016106c1565b9250929050565b606081471015610a425760405163cf47918160e01b8152476004820152602481018390526044016106c1565b5f610a4e858486610c19565b9050808015610a6f57505f3d1180610a6f57505f856001600160a01b03163b115b15610a8457610a7c610c2e565b9150506102db565b8015610aae57604051639996b31560e01b81526001600160a01b03861660048201526024016106c1565b3d15610ac157610abc610c47565b610ada565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610b5b81610b226101008701876112ea565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c5292505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610bbb57506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610bcd82610c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c11576108bb8282610cdd565b61047f610d5f565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610c608686610d7e565b925092509250610c708282610dc7565b5090949350505050565b806001600160a01b03163b5f03610caf57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106c1565b5f5160206114075f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610cea8484610e7f565b9050808015610d0b57505f3d1180610d0b57505f846001600160a01b03163b115b15610d2057610d18610c2e565b91505061070d565b8015610d4a57604051639996b31560e01b81526001600160a01b03851660048201526024016106c1565b3d15610ac157610d58610c47565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610db5576020840151604085015160608601515f1a610da788828585610e92565b955095509550505050610dc0565b505081515f91506002905b9250925092565b5f826003811115610dda57610dda6113f2565b03610de3575050565b6001826003811115610df757610df76113f2565b03610e155760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e2957610e296113f2565b03610e4a5760405163fce698f760e01b8152600481018290526024016106c1565b6003826003811115610e5e57610e5e6113f2565b0361047f576040516335e2f38360e21b8152600481018290526024016106c1565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ecb57505f91506003905082610f50565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f1c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f4757505f925060019150829050610f50565b92505f91508190505b9450945094915050565b5f6101208284031215610f6b575f5ffd5b50919050565b5f5f5f60608486031215610f83575f5ffd5b833567ffffffffffffffff811115610f99575f5ffd5b610fa586828701610f5a565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610713575f5ffd5b5f60208284031215610fdf575f5ffd5b81356102db81610fbb565b5f5f60208385031215610ffb575f5ffd5b823567ffffffffffffffff811115611011575f5ffd5b8301601f81018513611021575f5ffd5b803567ffffffffffffffff811115611037575f5ffd5b8560208260051b840101111561104b575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561106c575f5ffd5b823561107781610fbb565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110a8575f5ffd5b813567ffffffffffffffff8111156110c2576110c2611085565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156110f1576110f1611085565b604052818152838201602001851015611108575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611135575f5ffd5b823561114081610fbb565b9150602083013567ffffffffffffffff81111561115b575f5ffd5b61116785828601611099565b9150509250929050565b5f5f60408385031215611182575f5ffd5b823561118d81610fbb565b9150602083013561119d81610fbb565b809150509250929050565b5f5f604083850312156111b9575f5ffd5b823567ffffffffffffffff8111156111cf575f5ffd5b6111db85828601610f5a565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611232575f5ffd5b843561123d81610fbb565b935060208501359250604085013567ffffffffffffffff81111561125f575f5ffd5b8501601f8101871361126f575f5ffd5b803567ffffffffffffffff811115611285575f5ffd5b876020828401011115611296575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112e3575f5ffd5b5051919050565b5f5f8335601e198436030181126112ff575f5ffd5b83018035915067ffffffffffffffff821115611319575f5ffd5b602001915036819003821315610a0f575f5ffd5b5f5f8585111561133b575f5ffd5b83861115611347575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d58576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f6080858703121561139d575f5ffd5b84356113a881610fbb565b935060208501356113b881610fbb565b925060408501359150606085013567ffffffffffffffff8111156113da575f5ffd5b6113e687828801611099565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122013a4df1d72e5a64f451b71018c2fa481b59ab84ef8a2fe93f22ebcc4986f4f0364736f6c634300081e0033",
|
|
553
553
|
"linkReferences": {},
|
|
554
554
|
"deployedLinkReferences": {},
|
|
555
555
|
"immutableReferences": {
|
|
556
556
|
"2756": [
|
|
557
557
|
{
|
|
558
558
|
"length": 32,
|
|
559
|
-
"start":
|
|
559
|
+
"start": 1894
|
|
560
560
|
},
|
|
561
561
|
{
|
|
562
562
|
"length": 32,
|
|
563
|
-
"start":
|
|
563
|
+
"start": 1935
|
|
564
564
|
},
|
|
565
565
|
{
|
|
566
566
|
"length": 32,
|
|
567
|
-
"start":
|
|
567
|
+
"start": 2251
|
|
568
568
|
}
|
|
569
569
|
],
|
|
570
570
|
"12314": [
|
|
@@ -582,18 +582,18 @@
|
|
|
582
582
|
},
|
|
583
583
|
{
|
|
584
584
|
"length": 32,
|
|
585
|
-
"start":
|
|
585
|
+
"start": 1417
|
|
586
586
|
},
|
|
587
587
|
{
|
|
588
588
|
"length": 32,
|
|
589
|
-
"start":
|
|
589
|
+
"start": 1566
|
|
590
590
|
},
|
|
591
591
|
{
|
|
592
592
|
"length": 32,
|
|
593
|
-
"start":
|
|
593
|
+
"start": 1624
|
|
594
594
|
}
|
|
595
595
|
]
|
|
596
596
|
},
|
|
597
597
|
"inputSourceName": "project/contracts/ERC2771ForwarderAccount.sol",
|
|
598
|
-
"buildInfoId": "solc-0_8_30-
|
|
598
|
+
"buildInfoId": "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac"
|
|
599
599
|
}
|
|
@@ -9,13 +9,13 @@ export interface ERC2771ForwarderAccount$Type {
|
|
|
9
9
|
readonly contractName: "ERC2771ForwarderAccount";
|
|
10
10
|
readonly sourceName: "contracts/ERC2771ForwarderAccount.sol";
|
|
11
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";
|
|
12
|
+
readonly bytecode: "0x60c060405230608052348015610013575f5ffd5b5060405161151e38038061151e83398101604081905261003291610043565b6001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a05161145c6100c25f395f81816102510152818161036f015281816103eb015281816105890152818161061e015261065801525f81816107660152818161078f01526108cb015261145c5ff3fe6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f71565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fcf565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004610fea565b610354565b61014361036d565b348015610177575f5ffd5b5061014361018636600461105b565b6103e9565b610143610199366004611124565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611171565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111a8565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b91906111ea565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f36600461121f565b3480156102a0575f5ffd5b5061011161056a565b3480156102b4575f5ffd5b506101116105f8565b5f6102c661064d565b6102d084846106ca565b90506102db82610716565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561075b565b61047f82826107ff565b5050565b5f61048c6108c0565b505f5160206114075f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61052361064d565b5f5f61052f8484610909565b915091506103e2815f01518260400151846040516020016105519291906112a4565b6040516020818303038152906040528360200151610a16565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156105cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f391906112d3565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105b4565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6106d78585610909565b915091505f6106e68686610ae2565b90506106f68184845f0151610b63565b610706576001935050505061070d565b5f93505050505b92915050565b50565b8015610713576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806107e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d55f5160206114075f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610859575060408051601f3d908101601f19168201909252610856918101906112d3565b60015b61088157604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106c1565b5f5160206114075f395f51905f5281146108b157604051632a87526960e21b8152600481018290526024016106c1565b6108bb8383610bc4565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f8083526020830181905292820152605061093260608601866112ea565b9050101580156109755750638dd7712f60e01b61095260608601866112ea565b610960916004915f9161132d565b61096991611354565b6001600160e01b031916145b6109925760405163574b16a760e11b815260040160405180910390fd5b61099f60608501856112ea565b6109ad91600490829061132d565b8101906109ba919061138a565b604085015260208401526001600160a01b0316808352909250610a0f5780516109e38585610ae2565b60405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044016106c1565b9250929050565b606081471015610a425760405163cf47918160e01b8152476004820152602481018390526044016106c1565b5f610a4e858486610c19565b9050808015610a6f57505f3d1180610a6f57505f856001600160a01b03163b115b15610a8457610a7c610c2e565b9150506102db565b8015610aae57604051639996b31560e01b81526001600160a01b03861660048201526024016106c1565b3d15610ac157610abc610c47565b610ada565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610b5b81610b226101008701876112ea565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c5292505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610bbb57506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610bcd82610c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c11576108bb8282610cdd565b61047f610d5f565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610c608686610d7e565b925092509250610c708282610dc7565b5090949350505050565b806001600160a01b03163b5f03610caf57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106c1565b5f5160206114075f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610cea8484610e7f565b9050808015610d0b57505f3d1180610d0b57505f846001600160a01b03163b115b15610d2057610d18610c2e565b91505061070d565b8015610d4a57604051639996b31560e01b81526001600160a01b03851660048201526024016106c1565b3d15610ac157610d58610c47565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610db5576020840151604085015160608601515f1a610da788828585610e92565b955095509550505050610dc0565b505081515f91506002905b9250925092565b5f826003811115610dda57610dda6113f2565b03610de3575050565b6001826003811115610df757610df76113f2565b03610e155760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e2957610e296113f2565b03610e4a5760405163fce698f760e01b8152600481018290526024016106c1565b6003826003811115610e5e57610e5e6113f2565b0361047f576040516335e2f38360e21b8152600481018290526024016106c1565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ecb57505f91506003905082610f50565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f1c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f4757505f925060019150829050610f50565b92505f91508190505b9450945094915050565b5f6101208284031215610f6b575f5ffd5b50919050565b5f5f5f60608486031215610f83575f5ffd5b833567ffffffffffffffff811115610f99575f5ffd5b610fa586828701610f5a565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610713575f5ffd5b5f60208284031215610fdf575f5ffd5b81356102db81610fbb565b5f5f60208385031215610ffb575f5ffd5b823567ffffffffffffffff811115611011575f5ffd5b8301601f81018513611021575f5ffd5b803567ffffffffffffffff811115611037575f5ffd5b8560208260051b840101111561104b575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561106c575f5ffd5b823561107781610fbb565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110a8575f5ffd5b813567ffffffffffffffff8111156110c2576110c2611085565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156110f1576110f1611085565b604052818152838201602001851015611108575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611135575f5ffd5b823561114081610fbb565b9150602083013567ffffffffffffffff81111561115b575f5ffd5b61116785828601611099565b9150509250929050565b5f5f60408385031215611182575f5ffd5b823561118d81610fbb565b9150602083013561119d81610fbb565b809150509250929050565b5f5f604083850312156111b9575f5ffd5b823567ffffffffffffffff8111156111cf575f5ffd5b6111db85828601610f5a565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611232575f5ffd5b843561123d81610fbb565b935060208501359250604085013567ffffffffffffffff81111561125f575f5ffd5b8501601f8101871361126f575f5ffd5b803567ffffffffffffffff811115611285575f5ffd5b876020828401011115611296575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112e3575f5ffd5b5051919050565b5f5f8335601e198436030181126112ff575f5ffd5b83018035915067ffffffffffffffff821115611319575f5ffd5b602001915036819003821315610a0f575f5ffd5b5f5f8585111561133b575f5ffd5b83861115611347575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d58576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f6080858703121561139d575f5ffd5b84356113a881610fbb565b935060208501356113b881610fbb565b925060408501359150606085013567ffffffffffffffff8111156113da575f5ffd5b6113e687828801611099565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122013a4df1d72e5a64f451b71018c2fa481b59ab84ef8a2fe93f22ebcc4986f4f0364736f6c634300081e0033";
|
|
13
|
+
readonly deployedBytecode: "0x6080604052600436106100e7575f3560e01c80636267e75911610087578063b0d691fe11610057578063b0d691fe14610238578063b61d27f61461027b578063c399ec8814610295578063d087d288146102a9575f5ffd5b80636267e759146101b25780638129fc1c146101d15780638dd7712f146101dc578063ad3cb1cc146101fb575f5ffd5b80634a58db19116100c25780634a58db19146101645780634d44560d1461016c5780634f1ef2861461018b57806352d1902d1461019e575f5ffd5b806319822f7c146100f2578063247884291461012457806334fcd5be14610145575f5ffd5b366100ee57005b5f5ffd5b3480156100fd575f5ffd5b5061011161010c366004610f71565b6102bd565b6040519081526020015b60405180910390f35b34801561012f575f5ffd5b5061014361013e366004610fcf565b6102e2565b005b348015610150575f5ffd5b5061014361015f366004610fea565b610354565b61014361036d565b348015610177575f5ffd5b5061014361018636600461105b565b6103e9565b610143610199366004611124565b61046d565b3480156101a9575f5ffd5b50610111610483565b3480156101bd575f5ffd5b506101436101cc366004611171565b61049e565b348015610143575f5ffd5b3480156101e7575f5ffd5b506101436101f63660046111a8565b61051b565b348015610206575f5ffd5b5061022b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161011b91906111ea565b348015610243575f5ffd5b506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011b565b348015610286575f5ffd5b5061014361015f36600461121f565b3480156102a0575f5ffd5b5061011161056a565b3480156102b4575f5ffd5b506101116105f8565b5f6102c661064d565b6102d084846106ca565b90506102db82610716565b9392505050565b6001600160a01b0381165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b0319169055519092917f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d91a25050565b604051630ad8c00b60e31b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b1580156103d0575f5ffd5b505af11580156103e2573d5f5f3e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015f604051808303815f87803b158015610453575f5ffd5b505af1158015610465573d5f5f3e3d5ffd5b505050505050565b61047561075b565b61047f82826107ff565b5050565b5f61048c6108c0565b505f5160206114075f395f51905f5290565b6001600160a01b038281165f8181527f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006020819052604080832080546001600160a01b031916958716958617905551909392917f8a39fc6d5142759acd84b3e96ccde9187266ecb0df56c8ff08bf2aedc7c93c4791a3505050565b565b61052361064d565b5f5f61052f8484610909565b915091506103e2815f01518260400151846040516020016105519291906112a4565b6040516020818303038152906040528360200151610a16565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156105cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f391906112d3565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044016105b4565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b5f5f5f6106d78585610909565b915091505f6106e68686610ae2565b90506106f68184845f0151610b63565b610706576001935050505061070d565b5f93505050505b92915050565b50565b8015610713576040515f90339083908381818185875af1925050503d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e2565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806107e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d55f5160206114075f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610859575060408051601f3d908101601f19168201909252610856918101906112d3565b60015b61088157604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106c1565b5f5160206114075f395f51905f5281146108b157604051632a87526960e21b8152600481018290526024016106c1565b6108bb8383610bc4565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105195760405163703e46dd60e11b815260040160405180910390fd5b60408051606080820183525f8083526020830181905292820152605061093260608601866112ea565b9050101580156109755750638dd7712f60e01b61095260608601866112ea565b610960916004915f9161132d565b61096991611354565b6001600160e01b031916145b6109925760405163574b16a760e11b815260040160405180910390fd5b61099f60608501856112ea565b6109ad91600490829061132d565b8101906109ba919061138a565b604085015260208401526001600160a01b0316808352909250610a0f5780516109e38585610ae2565b60405163f252a21160e01b81526001600160a01b039283166004820152911660248201526044016106c1565b9250929050565b606081471015610a425760405163cf47918160e01b8152476004820152602481018390526044016106c1565b5f610a4e858486610c19565b9050808015610a6f57505f3d1180610a6f57505f856001600160a01b03163b115b15610a8457610a7c610c2e565b9150506102db565b8015610aae57604051639996b31560e01b81526001600160a01b03861660048201526024016106c1565b3d15610ac157610abc610c47565b610ada565b60405163d6bda27560e01b815260040160405180910390fd5b509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c8120610b5b81610b226101008701876112ea565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c5292505050565b949350505050565b5f7f32800a8a254400b8b55434a22b827759dcb96a572133b419f26b7155e38430006001600160a01b03858116908516148015610bbb57506001600160a01b038581165f908152602083905260409020548116908416145b95945050505050565b610bcd82610c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610c11576108bb8282610cdd565b61047f610d5f565b5f5f5f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f5f5f5f610c608686610d7e565b925092509250610c708282610dc7565b5090949350505050565b806001600160a01b03163b5f03610caf57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106c1565b5f5160206114075f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610cea8484610e7f565b9050808015610d0b57505f3d1180610d0b57505f846001600160a01b03163b115b15610d2057610d18610c2e565b91505061070d565b8015610d4a57604051639996b31560e01b81526001600160a01b03851660048201526024016106c1565b3d15610ac157610d58610c47565b5092915050565b34156105195760405163b398979f60e01b815260040160405180910390fd5b5f5f5f8351604103610db5576020840151604085015160608601515f1a610da788828585610e92565b955095509550505050610dc0565b505081515f91506002905b9250925092565b5f826003811115610dda57610dda6113f2565b03610de3575050565b6001826003811115610df757610df76113f2565b03610e155760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610e2957610e296113f2565b03610e4a5760405163fce698f760e01b8152600481018290526024016106c1565b6003826003811115610e5e57610e5e6113f2565b0361047f576040516335e2f38360e21b8152600481018290526024016106c1565b5f5f5f835160208501865af49392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610ecb57505f91506003905082610f50565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f1c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610f4757505f925060019150829050610f50565b92505f91508190505b9450945094915050565b5f6101208284031215610f6b575f5ffd5b50919050565b5f5f5f60608486031215610f83575f5ffd5b833567ffffffffffffffff811115610f99575f5ffd5b610fa586828701610f5a565b9660208601359650604090950135949350505050565b6001600160a01b0381168114610713575f5ffd5b5f60208284031215610fdf575f5ffd5b81356102db81610fbb565b5f5f60208385031215610ffb575f5ffd5b823567ffffffffffffffff811115611011575f5ffd5b8301601f81018513611021575f5ffd5b803567ffffffffffffffff811115611037575f5ffd5b8560208260051b840101111561104b575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561106c575f5ffd5b823561107781610fbb565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126110a8575f5ffd5b813567ffffffffffffffff8111156110c2576110c2611085565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156110f1576110f1611085565b604052818152838201602001851015611108575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611135575f5ffd5b823561114081610fbb565b9150602083013567ffffffffffffffff81111561115b575f5ffd5b61116785828601611099565b9150509250929050565b5f5f60408385031215611182575f5ffd5b823561118d81610fbb565b9150602083013561119d81610fbb565b809150509250929050565b5f5f604083850312156111b9575f5ffd5b823567ffffffffffffffff8111156111cf575f5ffd5b6111db85828601610f5a565b95602094909401359450505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215611232575f5ffd5b843561123d81610fbb565b935060208501359250604085013567ffffffffffffffff81111561125f575f5ffd5b8501601f8101871361126f575f5ffd5b803567ffffffffffffffff811115611285575f5ffd5b876020828401011115611296575f5ffd5b949793965060200194505050565b5f83518060208601845e60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f602082840312156112e3575f5ffd5b5051919050565b5f5f8335601e198436030181126112ff575f5ffd5b83018035915067ffffffffffffffff821115611319575f5ffd5b602001915036819003821315610a0f575f5ffd5b5f5f8585111561133b575f5ffd5b83861115611347575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610d58576001600160e01b031960049490940360031b84901b1690921692915050565b5f5f5f5f6080858703121561139d575f5ffd5b84356113a881610fbb565b935060208501356113b881610fbb565b925060408501359150606085013567ffffffffffffffff8111156113da575f5ffd5b6113e687828801611099565b91505092959194509250565b634e487b7160e01b5f52602160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122013a4df1d72e5a64f451b71018c2fa481b59ab84ef8a2fe93f22ebcc4986f4f0364736f6c634300081e0033";
|
|
14
14
|
readonly linkReferences: {};
|
|
15
15
|
readonly deployedLinkReferences: {};
|
|
16
|
-
readonly immutableReferences: {"2756":[{"length":32,"start":
|
|
16
|
+
readonly immutableReferences: {"2756":[{"length":32,"start":1894},{"length":32,"start":1935},{"length":32,"start":2251}],"12314":[{"length":32,"start":593},{"length":32,"start":879},{"length":32,"start":1003},{"length":32,"start":1417},{"length":32,"start":1566},{"length":32,"start":1624}]};
|
|
17
17
|
readonly inputSourceName: "project/contracts/ERC2771ForwarderAccount.sol";
|
|
18
|
-
readonly buildInfoId: "solc-0_8_30-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
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-
|
|
1177
|
+
"buildInfoId": "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac"
|
|
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-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
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-
|
|
12
|
+
"buildInfoId": "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac"
|
|
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-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
import "hardhat/types/artifacts";
|
|
@@ -394,7 +394,7 @@
|
|
|
394
394
|
"start": 1096
|
|
395
395
|
}
|
|
396
396
|
],
|
|
397
|
-
"
|
|
397
|
+
"14972": [
|
|
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-
|
|
405
|
+
"buildInfoId": "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac"
|
|
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}],"
|
|
16
|
+
readonly immutableReferences: {"2301":[{"length":32,"start":337},{"length":32,"start":438},{"length":32,"start":1096}],"14972":[{"length":32,"start":279}]};
|
|
17
17
|
readonly inputSourceName: "project/contracts/mock/ERC20With2771.sol";
|
|
18
|
-
readonly buildInfoId: "solc-0_8_30-
|
|
18
|
+
readonly buildInfoId: "solc-0_8_30-3f701667cdad33af53ac1f684f455bb9e01a58ac";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
import "hardhat/types/artifacts";
|
|
@@ -84,23 +84,27 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
|
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* @dev Validates that the user operation is well formed and that the destination is correct. Does not validate signature.
|
|
87
|
+
* @return expectedSigner The address included in the call data, expected to be the signer of the userOp
|
|
87
88
|
* @return call A Call struct containing the call to be made
|
|
88
89
|
*/
|
|
89
90
|
function _validateAndDecodeCall(
|
|
90
91
|
PackedUserOperation calldata userOp,
|
|
91
92
|
bytes32 userOpHash
|
|
92
|
-
) internal pure returns (Call memory call) {
|
|
93
|
-
require(userOp.callData.length >=
|
|
94
|
-
(call.target, call.value, call.data) = abi.decode(
|
|
93
|
+
) internal pure returns (address expectedSigner, Call memory call) {
|
|
94
|
+
require(userOp.callData.length >= 80 && bytes4(userOp.callData[0:4]) == this.executeUserOp.selector, InvalidCall());
|
|
95
|
+
(expectedSigner, call.target, call.value, call.data) = abi.decode(
|
|
96
|
+
userOp.callData[4:],
|
|
97
|
+
(address, address, uint256, bytes)
|
|
98
|
+
);
|
|
95
99
|
if (call.target == address(0)) {
|
|
96
100
|
// This is an if and not a require to avoid evaluating the _getSigner call in the happy path
|
|
97
101
|
revert InvalidTarget(ERC2771Context(call.target), _getSigner(userOp, userOpHash));
|
|
98
102
|
}
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
function _isAuthorized(address signer, address target) internal view returns (bool) {
|
|
105
|
+
function _isAuthorized(address signer, address expectedSigner, address target) internal view returns (bool) {
|
|
102
106
|
ERC2771ForwarderAccountStorage storage $ = _getAccountStorage();
|
|
103
|
-
return $.targets[signer] == ERC2771Context(target);
|
|
107
|
+
return signer == expectedSigner && $.targets[signer] == ERC2771Context(target);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
/**
|
|
@@ -129,9 +133,9 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
|
|
|
129
133
|
PackedUserOperation calldata userOp,
|
|
130
134
|
bytes32 userOpHash
|
|
131
135
|
) internal virtual override returns (uint256 validationData) {
|
|
132
|
-
Call memory call = _validateAndDecodeCall(userOp, userOpHash);
|
|
136
|
+
(address expectedSigner, Call memory call) = _validateAndDecodeCall(userOp, userOpHash);
|
|
133
137
|
address signer = _getSigner(userOp, userOpHash);
|
|
134
|
-
if (!_isAuthorized(signer, call.target)) {
|
|
138
|
+
if (!_isAuthorized(signer, expectedSigner, call.target)) {
|
|
135
139
|
return SIG_VALIDATION_FAILED;
|
|
136
140
|
}
|
|
137
141
|
return SIG_VALIDATION_SUCCESS;
|
|
@@ -139,8 +143,8 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
|
|
|
139
143
|
|
|
140
144
|
/**
|
|
141
145
|
* @dev Executes a user operation by forwarding the call to the target contract with the signer as the msgSender.
|
|
142
|
-
*
|
|
143
|
-
*
|
|
146
|
+
* The calldata is expected to contain this function's selector followed by the signer and the ABI-encoded call:
|
|
147
|
+
* - signer (address): the signer of the userop, must match the signature
|
|
144
148
|
* - dest (address): the target contract address (must be the same as _target)
|
|
145
149
|
* - value (uint256): the amount of ETH to send with the call
|
|
146
150
|
* - func (bytes): the calldata for the target function
|
|
@@ -149,12 +153,12 @@ contract ERC2771ForwarderAccount is UUPSUpgradeable, BaseAccount, IAccountExecut
|
|
|
149
153
|
* @param userOpHash The hash of the user operation, used for signature verification.
|
|
150
154
|
*/
|
|
151
155
|
function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external override {
|
|
152
|
-
|
|
153
|
-
address signer = _getSigner(userOp, userOpHash);
|
|
156
|
+
_requireFromEntryPoint();
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
// We can trust that expectedSigner is the userop signer because it was checked in validateSignature
|
|
159
|
+
(address expectedSigner, Call memory call) = _validateAndDecodeCall(userOp, userOpHash);
|
|
156
160
|
|
|
157
|
-
Address.functionCallWithValue(call.target, abi.encodePacked(call.data,
|
|
161
|
+
Address.functionCallWithValue(call.target, abi.encodePacked(call.data, expectedSigner), call.value);
|
|
158
162
|
}
|
|
159
163
|
|
|
160
164
|
/**
|