Contract 0x30582eeE34719fe22b1B6c3b607636A3ab94522E

Txn Hash Method
Block
From
To
Value
0x4aefdcbf9679c58b3ebfc242905c40a045bb0d8d2620fe393aa53b97637def43New Account216623492024-02-24 5:32:466 days 22 hrs ago0xa253430858c981691534fe933598c7483c90fa54 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005159445081.500000252
0x114de57cff949dd0a8bfc548e4910665e1a9852a299270fad34a34fd93e29a02New Account215063522024-02-20 14:52:5210 days 13 hrs ago0x8ce8e58171d8a32ec4bce3195522846d655c0511 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005155068141.500000252
0xc032e09507b931c2d59ade130e535fc1a82bc6dc40a8fd9823902d2d9f62b04bNew Account214630642024-02-19 14:49:5611 days 13 hrs ago0xf70a70db97c89d18cda3cfe5d4661acbcb43f622 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005155771571.500000252
0xbcc374f15a6df580144b9afc3cec6425390f6cacd635c69dadb2b4f8fb11dd14New Account209572052024-02-07 21:47:5823 days 6 hrs ago0xe2209492b6a03d38fd91fcf5e77ef2b5b6b8df2e IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005158739341.500000252
0x1fe209786071333e8d21c74561ccc16f4c3b2308b80bab86daf0cb149cec7d1bNew Account209259392024-02-07 4:25:4623 days 23 hrs ago0xe53cb30b74ff99bc3a5e0a2b3eae8ffa1facda9a IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0x528d8c098bfed61531704e207f864b83a37be07f7db4295b456feddd4dee8577New Account207243112024-02-02 12:24:5028 days 15 hrs ago0x14d5c17693edcff7a81b50bda681ed7e8b3b8202 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500881.500000252
0x23c35dd7588de96219014766fa1cbb74db32920819ae9686566b730d9c6b97c0New Account205061712024-01-28 11:13:3033 days 16 hrs ago0x224aeff2cc4775baa6567c00101563b658ac4a1f IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0003425000861.000000252
0x503e9cbfdbefcaf5a72dd7e550bfcade046310793b1953b92f87a762a1553872New Account204752262024-01-27 18:02:0034 days 10 hrs ago0xc5d3c3265d8c035c6a0470ff5bf85012f5ec0291 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0003425000861.000000252
0xc5d4bc680ade4147ceea40a6ed7b771045b119cee70a12b120071844feb53b28New Account203832432024-01-25 14:55:5436 days 13 hrs ago0x7af777b0579bffcbc99170e4ea45106e7970b13d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0x391eb16b861a66077ef3ad7713cf2e3d97d88ff51b0bd52af1cd5cb7324433a8New Account202849572024-01-23 8:19:4238 days 19 hrs ago0xea14ad9d43be831903a2a2d3f37960d08da3b142 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0x034e728fad7214ff27cea6dce95ab76c4e60a0faa3c6f9a4614040e5d93b623dNew Account196250332024-01-08 1:42:1454 days 2 hrs ago0xa2b3d79cd17bd70a197420162867810233d04e77 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0000003425860.001000252
0xba4a4116b84bc0de13c00c22365fa6986e85b983ac0ce0d3dcf5c4cba268e678New Account191743922023-12-28 15:20:5264 days 12 hrs ago0xb00365c2092a34e3faf4d751673a1e9e71c7bcee IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0x1dabc4b2d7e2256a201abc575455658d31f1f6a5da2c35c8f1d857347e98413bNew Account189257422023-12-22 21:12:3270 days 6 hrs ago0xf6b0c7c3c87db375b755e788d549938d60d3fcc4 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0000003254820.001000252
0xcdaf41232009a48988b4a58b56912ba11777fc1df2ca528599633b48ee22447cNew Account189257332023-12-22 21:12:1470 days 6 hrs ago0xf6b0c7c3c87db375b755e788d549938d60d3fcc4 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.000000022920.000066919
0xbdf53ee86eb7c4a7181f99b57a5b6a6143a5ec8f877996719904fdea80e5d404New Account189077152023-12-22 11:11:3870 days 16 hrs ago0xcaae92731ea712efe6e60b242420bbc9cc0284af IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0xb3a286317f12b9a4d4a0ac5467f4a8fdd964a1e975f67de84a35a09d55658949New Account188187922023-12-20 9:47:3272 days 18 hrs ago0xf650f91e71dacbe03609192d7bb6d211f64da317 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xf07a52649553ccd49d66ec047737a24f01183cbb5b64d53a5438318981ef7a7aNew Account188186882023-12-20 9:44:0472 days 18 hrs ago0xf650f91e71dacbe03609192d7bb6d211f64da317 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0xa9d6df1910241c1c030f7e141f2d6e9c86c4626740a016116d788006524501a4Update Account O...188154622023-12-20 7:56:3272 days 20 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0000362745061.500000252
0xc799695942b8001abc37ae6e671f531fb7b66a9ba75e78a170803e4ea8e294c9New Account188143882023-12-20 7:20:4472 days 20 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xbd95d966eb7de259fcdb765cdc1e86af4e325de507f39a44f6b5a944cada714fNew Account188143212023-12-20 7:18:3072 days 20 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xc04b56714eb514a2c72ebd30441fc3f7e5d72a3ad0a0f4a2b2f04ddcf9f311c8New Account188137252023-12-20 6:58:3872 days 21 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xb6d33debaa38fb4b99864b285f3564973aa0159236c6ff20d1fbf8de3c0d80cdNew Account188136502023-12-20 6:56:0872 days 21 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xf69e503233f10214ecefe14973f5d555fc438f94d00dbf0a5d16c80b2a050230New Account188136192023-12-20 6:55:0672 days 21 hrs ago0x6de9b942e8f8918a91768de5650b4328ae4ba31d IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0004881000821.500000252
0xe708dd23a7c499f819bbf0b5f605f2055d1c91b7a3b10dbe49c0e41000173ae4New Account187874522023-12-19 16:22:5273 days 11 hrs ago0x9fe4e60efa7a646c412217e6283d284483c87701 IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
0x763c93d5615a81d19dc12717246659c0dd3054995f6ba744d6ccd9b4c4696056New Account186922622023-12-17 11:29:5275 days 16 hrs ago0x5d11838f514ca6b4be4fee6a1c5301e3bf6a71ca IN 0x30582eee34719fe22b1b6c3b607636a3ab94522e0 ETH0.0005137500861.500000252
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4aefdcbf9679c58b3ebfc242905c40a045bb0d8d2620fe393aa53b97637def43216623492024-02-24 5:32:466 days 22 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x114de57cff949dd0a8bfc548e4910665e1a9852a299270fad34a34fd93e29a02215063522024-02-20 14:52:5210 days 13 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xc032e09507b931c2d59ade130e535fc1a82bc6dc40a8fd9823902d2d9f62b04b214630642024-02-19 14:49:5611 days 13 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xbcc374f15a6df580144b9afc3cec6425390f6cacd635c69dadb2b4f8fb11dd14209572052024-02-07 21:47:5823 days 6 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x1fe209786071333e8d21c74561ccc16f4c3b2308b80bab86daf0cb149cec7d1b209259392024-02-07 4:25:4623 days 23 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x528d8c098bfed61531704e207f864b83a37be07f7db4295b456feddd4dee8577207243112024-02-02 12:24:5028 days 15 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x23c35dd7588de96219014766fa1cbb74db32920819ae9686566b730d9c6b97c0205061712024-01-28 11:13:3033 days 16 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x503e9cbfdbefcaf5a72dd7e550bfcade046310793b1953b92f87a762a1553872204752262024-01-27 18:02:0034 days 10 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xc5d4bc680ade4147ceea40a6ed7b771045b119cee70a12b120071844feb53b28203832432024-01-25 14:55:5436 days 13 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x391eb16b861a66077ef3ad7713cf2e3d97d88ff51b0bd52af1cd5cb7324433a8202849572024-01-23 8:19:4238 days 19 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x034e728fad7214ff27cea6dce95ab76c4e60a0faa3c6f9a4614040e5d93b623d196250332024-01-08 1:42:1454 days 2 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xba4a4116b84bc0de13c00c22365fa6986e85b983ac0ce0d3dcf5c4cba268e678191743922023-12-28 15:20:5264 days 12 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x1dabc4b2d7e2256a201abc575455658d31f1f6a5da2c35c8f1d857347e98413b189257422023-12-22 21:12:3270 days 6 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xcdaf41232009a48988b4a58b56912ba11777fc1df2ca528599633b48ee22447c189257332023-12-22 21:12:1470 days 6 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xbdf53ee86eb7c4a7181f99b57a5b6a6143a5ec8f877996719904fdea80e5d404189077152023-12-22 11:11:3870 days 16 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xb3a286317f12b9a4d4a0ac5467f4a8fdd964a1e975f67de84a35a09d55658949188187922023-12-20 9:47:3272 days 18 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xf07a52649553ccd49d66ec047737a24f01183cbb5b64d53a5438318981ef7a7a188186882023-12-20 9:44:0472 days 18 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xc799695942b8001abc37ae6e671f531fb7b66a9ba75e78a170803e4ea8e294c9188143882023-12-20 7:20:4472 days 20 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xbd95d966eb7de259fcdb765cdc1e86af4e325de507f39a44f6b5a944cada714f188143212023-12-20 7:18:3072 days 20 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xc04b56714eb514a2c72ebd30441fc3f7e5d72a3ad0a0f4a2b2f04ddcf9f311c8188137252023-12-20 6:58:3872 days 21 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xb6d33debaa38fb4b99864b285f3564973aa0159236c6ff20d1fbf8de3c0d80cd188136502023-12-20 6:56:0872 days 21 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xf69e503233f10214ecefe14973f5d555fc438f94d00dbf0a5d16c80b2a050230188136192023-12-20 6:55:0672 days 21 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0xe708dd23a7c499f819bbf0b5f605f2055d1c91b7a3b10dbe49c0e41000173ae4187874522023-12-19 16:22:5273 days 11 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x763c93d5615a81d19dc12717246659c0dd3054995f6ba744d6ccd9b4c4696056186922622023-12-17 11:29:5275 days 16 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
0x6094181b8bf391f2a118df2680c6b4ad7f1514b0ffb19600b5927fe7acef8d94186052082023-12-15 11:08:0477 days 17 hrs ago 0x30582eee34719fe22b1b6c3b607636a3ab94522e  Contract Creation0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 5 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event OwnershipTransferred(address indexed user, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

File 2 of 5 : AccountProxy.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.18;

import {IAccountProxy} from "./interfaces/IAccountProxy.sol";

/// @title Kwenta Account Proxy
/// @author OpenZeppelin, JaredBorders ([email protected])
/// @dev This contract implements a proxy that gets the
/// implementation address for each call from the {Beacon}
/// (which in this system is the contract: {Factory.sol}).
/// The beacon address is stored in the storage slot
/// `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't
/// conflict with the storage layout of the implementation behind this proxy.
contract AccountProxy is IAccountProxy {
    /*//////////////////////////////////////////////////////////////
                           STORAGE MANAGEMENT
    //////////////////////////////////////////////////////////////*/

    bytes32 internal constant _BEACON_STORAGE_SLOT =
        bytes32(uint256(keccak256("eip1967.proxy.beacon")) - 1);

    /// @dev struct to store beacon address
    struct AddressSlot {
        address value;
    }

    /// @dev returns the storage slot where the beacon address is stored
    function _getAddressSlot(bytes32 slot)
        internal
        pure
        returns (AddressSlot storage r)
    {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r.slot := slot
        }
    }

    /*//////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    /// @notice constructor for proxy
    /// @param _beaconAddress: address of beacon (i.e. factory address)
    /// @dev {Factory.sol} will store the implementation address,
    /// thus acting as the beacon
    constructor(address _beaconAddress) {
        _getAddressSlot(_BEACON_STORAGE_SLOT).value = _beaconAddress;
    }

    /*//////////////////////////////////////////////////////////////
                              BEACON LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @return beacon address (i.e. the factory address)
    function _beacon() internal view returns (address beacon) {
        beacon = _getAddressSlot(_BEACON_STORAGE_SLOT).value;
        if (beacon == address(0)) revert BeaconNotSet();
    }

    /*//////////////////////////////////////////////////////////////
                          IMPLEMENTATION LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @return implementation address (i.e. the account logic address)
    function _implementation() internal returns (address implementation) {
        (bool success, bytes memory data) =
            _beacon().call(abi.encodeWithSignature("implementation()"));
        if (!success) revert BeaconCallFailed();
        implementation = abi.decode(data, (address));
        if (implementation == address(0)) revert ImplementationNotSet();
    }

    /*//////////////////////////////////////////////////////////////
                            FORWARDING LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.
    /// Will run if no other function in the contract matches the call data.
    fallback() external payable {
        _fallback();
    }

    /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.
    /// Will run if call data is empty.
    receive() external payable {
        _fallback();
    }

    /// @notice Delegates the current call to the address returned by `_implementation()`.
    /// @dev This function does not return to its internal call site,
    /// it will return directly to the external caller.
    function _fallback() internal {
        _delegate(_implementation());
    }

    /// @notice delegates the current call to `implementation`.
    /// @dev This function does not return to its internal call site,
    /// it will return directly to the external caller.
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result :=
                delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())
            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }
}

File 3 of 5 : Factory.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.18;

import {AccountProxy} from "./AccountProxy.sol";
import {IFactory} from "./interfaces/IFactory.sol";
import {Owned} from "@solmate/auth/Owned.sol";

/// @title Kwenta Account Factory
/// @author JaredBorders ([email protected])
/// @notice factory for creating smart margin accounts
/// @dev the factory acts as a beacon for the proxy {AccountProxy.sol} contract(s)
contract Factory is IFactory, Owned {
    /*//////////////////////////////////////////////////////////////
                                 STATE
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc IFactory
    bool public canUpgrade = true;

    /// @inheritdoc IFactory
    address public implementation;

    /// @inheritdoc IFactory
    mapping(address accounts => bool exist) public accounts;

    /// @notice mapping of owner to accounts owned by owner
    mapping(address owner => address[] accounts) internal ownerAccounts;

    /*//////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    /// @notice constructor for factory that sets owner
    /// @param _owner: owner of factory
    constructor(address _owner) Owned(_owner) {}

    /*//////////////////////////////////////////////////////////////
                                 VIEWS
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc IFactory
    function getAccountOwner(address _account)
        public
        view
        override
        returns (address)
    {
        // ensure account is registered
        if (!accounts[_account]) revert AccountDoesNotExist();

        // fetch owner from account
        (bool success, bytes memory data) =
            _account.staticcall(abi.encodeWithSignature("owner()"));
        assert(success); // should never fail (account is a contract)

        return abi.decode(data, (address));
    }

    /// @inheritdoc IFactory
    function getAccountsOwnedBy(address _owner)
        external
        view
        override
        returns (address[] memory)
    {
        return ownerAccounts[_owner];
    }

    /*//////////////////////////////////////////////////////////////
                               OWNERSHIP
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc IFactory
    function updateAccountOwnership(address _newOwner, address _oldOwner)
        external
        override
    {
        // ensure account is registered by factory
        if (!accounts[msg.sender]) revert AccountDoesNotExist();

        // store length of ownerAccounts array in memory
        uint256 length = ownerAccounts[_oldOwner].length;

        for (uint256 i = 0; i < length;) {
            if (ownerAccounts[_oldOwner][i] == msg.sender) {
                // remove account from ownerAccounts mapping for old owner
                ownerAccounts[_oldOwner][i] =
                    ownerAccounts[_oldOwner][length - 1];
                ownerAccounts[_oldOwner].pop();

                // add account to ownerAccounts mapping for new owner
                ownerAccounts[_newOwner].push(msg.sender);

                return;
            }

            unchecked {
                ++i;
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                           ACCOUNT DEPLOYMENT
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc IFactory
    function newAccount()
        external
        override
        returns (address payable accountAddress)
    {
        // create account and set beacon to this address (i.e. factory address)
        accountAddress = payable(address(new AccountProxy(address(this))));

        // add account to accounts mapping
        accounts[accountAddress] = true;

        // add account to ownerAccounts mapping
        ownerAccounts[msg.sender].push(accountAddress);

        // set owner of account to caller
        (bool success, bytes memory data) = accountAddress.call(
            abi.encodeWithSignature("setInitialOwnership(address)", msg.sender)
        );
        if (!success) revert FailedToSetAcountOwner(data);

        // determine version for the following event
        (success, data) =
            accountAddress.call(abi.encodeWithSignature("VERSION()"));
        if (!success) revert AccountFailedToFetchVersion(data);

        emit NewAccount({
            creator: msg.sender,
            account: accountAddress,
            version: abi.decode(data, (bytes32))
        });
    }

    /*//////////////////////////////////////////////////////////////
                             UPGRADABILITY
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc IFactory
    function upgradeAccountImplementation(address _implementation)
        external
        override
        onlyOwner
    {
        if (!canUpgrade) revert CannotUpgrade();
        implementation = _implementation;
        emit AccountImplementationUpgraded({implementation: _implementation});
    }

    /// @inheritdoc IFactory
    function removeUpgradability() external override onlyOwner {
        canUpgrade = false;
    }
}

File 4 of 5 : IAccountProxy.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.18;

/// @title Kwenta Account Proxy Interface
/// @author JaredBorders ([email protected])
interface IAccountProxy {
    /*//////////////////////////////////////////////////////////////
                                 ERRORS
    //////////////////////////////////////////////////////////////*/

    /// @dev thrown if beacon is not set to a valid address
    error BeaconNotSet();

    /// @dev thrown if implementation is not set to a valid address
    error ImplementationNotSet();

    /// @dev thrown if beacon call fails
    error BeaconCallFailed();
}

File 5 of 5 : IFactory.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.18;

/// @title Kwenta Factory Interface
/// @author JaredBorders ([email protected])
interface IFactory {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    /// @notice emitted when new account is created
    /// @param creator: account creator (address that called newAccount())
    /// @param account: address of account that was created (will be address of proxy)
    event NewAccount(
        address indexed creator, address indexed account, bytes32 version
    );

    /// @notice emitted when implementation is upgraded
    /// @param implementation: address of new implementation
    event AccountImplementationUpgraded(address implementation);

    /*//////////////////////////////////////////////////////////////
                                 ERRORS
    //////////////////////////////////////////////////////////////*/

    /// @notice thrown when factory cannot set account owner to the msg.sender
    /// @param data: data returned from failed low-level call
    error FailedToSetAcountOwner(bytes data);

    /// @notice thrown when Account creation fails due to no version being set
    /// @param data: data returned from failed low-level call
    error AccountFailedToFetchVersion(bytes data);

    /// @notice thrown when factory is not upgradable
    error CannotUpgrade();

    /// @notice thrown when account is unrecognized by factory
    error AccountDoesNotExist();

    /*//////////////////////////////////////////////////////////////
                                 VIEWS
    //////////////////////////////////////////////////////////////*/

    /// @return canUpgrade: bool to determine if system can be upgraded
    function canUpgrade() external view returns (bool);

    /// @return logic: account logic address
    function implementation() external view returns (address);

    /// @param _account: address of account
    /// @return whether or not account exists
    function accounts(address _account) external view returns (bool);

    /// @param _account: address of account
    /// @return owner of account
    function getAccountOwner(address _account)
        external
        view
        returns (address);

    /// @param _owner: address of owner
    /// @return array of accounts owned by _owner
    function getAccountsOwnedBy(address _owner)
        external
        view
        returns (address[] memory);

    /*//////////////////////////////////////////////////////////////
                               OWNERSHIP
    //////////////////////////////////////////////////////////////*/

    /// @notice update owner to account(s) mapping
    /// @dev does *NOT* check new owner != old owner
    /// @param _newOwner: new owner of account
    /// @param _oldOwner: old owner of account
    function updateAccountOwnership(address _newOwner, address _oldOwner)
        external;

    /*//////////////////////////////////////////////////////////////
                           ACCOUNT DEPLOYMENT
    //////////////////////////////////////////////////////////////*/

    /// @notice create unique account proxy for function caller
    /// @return accountAddress address of account created
    function newAccount() external returns (address payable accountAddress);

    /*//////////////////////////////////////////////////////////////
                             UPGRADABILITY
    //////////////////////////////////////////////////////////////*/

    /// @notice upgrade implementation of account which all account proxies currently point to
    /// @dev this *will* impact all existing accounts
    /// @dev future accounts will also point to this new implementation (until
    /// upgradeAccountImplementation() is called again with a newer implementation)
    /// @dev *DANGER* this function does not check the new implementation for validity,
    /// thus, a bad upgrade could result in severe consequences.
    /// @param _implementation: address of new implementation
    function upgradeAccountImplementation(address _implementation) external;

    /// @notice remove upgradability from factory
    /// @dev cannot be undone
    function removeUpgradability() external;
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@solmate/=lib/solmate/src/",
    "@synthetix/=src/interfaces/synthetix/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccountDoesNotExist","type":"error"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"AccountFailedToFetchVersion","type":"error"},{"inputs":[],"name":"CannotUpgrade","type":"error"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"FailedToSetAcountOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"implementation","type":"address"}],"name":"AccountImplementationUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bytes32","name":"version","type":"bytes32"}],"name":"NewAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"accounts","type":"address"}],"name":"accounts","outputs":[{"internalType":"bool","name":"exist","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canUpgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccountOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getAccountsOwnedBy","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newAccount","outputs":[{"internalType":"address payable","name":"accountAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeUpgradability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_oldOwner","type":"address"}],"name":"updateAccountOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"upgradeAccountImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000805460ff60a01b1916600160a01b17905534801561002357600080fd5b5060405161144738038061144783398101604081905261004291610091565b600080546001600160a01b0319166001600160a01b03831690811782556040518392907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350506100c1565b6000602082840312156100a357600080fd5b81516001600160a01b03811681146100ba57600080fd5b9392505050565b611377806100d06000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bf335e621161005b578063bf335e62146101e0578063f2fde38b146101e8578063fc8613f9146101fb57600080fd5b80638da5cb5b1461017b5780639738968c1461019b578063b53bc1e3146101c057600080fd5b80634b06effe116100b25780634b06effe146101205780635c60da1b146101285780635e5c06e21461014857600080fd5b80632e9ca204146100ce578063442b172c146100e3575b600080fd5b6100e16100dc366004610cea565b61020e565b005b6100f66100f1366004610d23565b61048a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e16105d5565b6001546100f69073ffffffffffffffffffffffffffffffffffffffff1681565b61016b610156366004610d23565b60026020526000908152604090205460ff1681565b6040519015158152602001610117565b6000546100f69073ffffffffffffffffffffffffffffffffffffffff1681565b60005461016b9074010000000000000000000000000000000000000000900460ff1681565b6101d36101ce366004610d23565b610685565b6040516101179190610d47565b6100f6610715565b6100e16101f6366004610d23565b610a79565b6100e1610209366004610d23565b610b6a565b3360009081526002602052604090205460ff16610257576040517fe76ea87f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812054905b818110156104845773ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090208054339190839081106102c1576102c1610da1565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361047c5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020610318600184610dd0565b8154811061032857610328610da1565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff86811684526003909252604090922080549190921691908390811061037257610372610da1565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905591851681526003909152604090208054806103dc576103dc610e10565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155930190935573ffffffffffffffffffffffffffffffffffffffff96909616865260038252604086208054600181018255908752919095200180549094163317909355505050565b60010161027f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604081205460ff166104e9576040517fe76ea87f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8da5cb5b000000000000000000000000000000000000000000000000000000001790529051600091829173ffffffffffffffffffffffffffffffffffffffff86169161056791610e63565b600060405180830381855afa9150503d80600081146105a2576040519150601f19603f3d011682016040523d82523d6000602084013e6105a7565b606091505b5091509150816105b9576105b9610e7f565b808060200190518101906105cd9190610eae565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461065b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561070957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106de575b50505050509050919050565b60003060405161072490610cb8565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801561075d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915533808552600384528285208054928301815585529284200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905551602481019190915292935091829190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd6c7ef8b00000000000000000000000000000000000000000000000000000000179052516108869190610e63565b6000604051808303816000865af19150503d80600081146108c3576040519150601f19603f3d011682016040523d82523d6000602084013e6108c8565b606091505b50915091508161090657806040517f215529560000000000000000000000000000000000000000000000000000000081526004016106529190610ecb565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffa1ad7400000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff85169161097f91610e63565b6000604051808303816000865af19150503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b50909250905081610a0057806040517ff873e28c0000000000000000000000000000000000000000000000000000000081526004016106529190610ecb565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6814d673ab3768002b6eeaf470ba6db3e2b3e4b0f346c0ee23ee9271c1445c3d83806020019051810190610a639190610f1c565b60405190815260200160405180910390a3505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610652565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610652565b60005474010000000000000000000000000000000000000000900460ff16610c3f576040517f24c1d6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdaa2b90d4f4e53aac69bc06e8ce6fc4a0d69c6582f74cd6e4547abcb972f7c6e9060200160405180910390a150565b61040c80610f3683390190565b73ffffffffffffffffffffffffffffffffffffffff81168114610ce757600080fd5b50565b60008060408385031215610cfd57600080fd5b8235610d0881610cc5565b91506020830135610d1881610cc5565b809150509250929050565b600060208284031215610d3557600080fd5b8135610d4081610cc5565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d9557835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d63565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610e0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b83811015610e5a578181015183820152602001610e42565b50506000910152565b60008251610e75818460208701610e3f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600060208284031215610ec057600080fd5b8151610d4081610cc5565b6020815260008251806020840152610eea816040850160208701610e3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215610f2e57600080fd5b505191905056fe608060405234801561001057600080fd5b5060405161040c38038061040c83398101604081905261002f91610085565b8061006161005e60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d516100b5565b90565b80546001600160a01b0319166001600160a01b0392909216919091179055506100dc565b60006020828403121561009757600080fd5b81516001600160a01b03811681146100ae57600080fd5b9392505050565b818103818111156100d657634e487b7160e01b600052601160045260246000fd5b92915050565b610321806100eb6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b610198565b565b60008060006100366101bc565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5c60da1b00000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff92909216916100b2919061023f565b6000604051808303816000865af19150503d80600081146100ef576040519150601f19603f3d011682016040523d82523d6000602084013e6100f4565b606091505b509150915081610130576040517f73a769bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80806020019051810190610144919061026e565b925073ffffffffffffffffffffffffffffffffffffffff8316610193576040517f40dde93500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505090565b3660008037600080366000845af43d6000803e8080156101b7573d6000f35b3d6000fd5b60006101ef6101ec60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d516102ab565b90565b5473ffffffffffffffffffffffffffffffffffffffff169050806101ec576040517fee755c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825160005b818110156102605760208186018101518583015201610246565b506000920191825250919050565b60006020828403121561028057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102a457600080fd5b9392505050565b818103818111156102e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea2646970667358221220a9fe180b118f059af22133ae7f06251ccb7ca886e7c85092c4cf14b7a43fce0064736f6c63430008120033a264697066735822122074c2971fbf6c0bf00f081ec7e4edef26fc5749dd447d3f7dd60a6d5335a62d5264736f6c63430008120033000000000000000000000000c625f59d51ecdff57fefe535c80d318ca42a0ec4

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bf335e621161005b578063bf335e62146101e0578063f2fde38b146101e8578063fc8613f9146101fb57600080fd5b80638da5cb5b1461017b5780639738968c1461019b578063b53bc1e3146101c057600080fd5b80634b06effe116100b25780634b06effe146101205780635c60da1b146101285780635e5c06e21461014857600080fd5b80632e9ca204146100ce578063442b172c146100e3575b600080fd5b6100e16100dc366004610cea565b61020e565b005b6100f66100f1366004610d23565b61048a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e16105d5565b6001546100f69073ffffffffffffffffffffffffffffffffffffffff1681565b61016b610156366004610d23565b60026020526000908152604090205460ff1681565b6040519015158152602001610117565b6000546100f69073ffffffffffffffffffffffffffffffffffffffff1681565b60005461016b9074010000000000000000000000000000000000000000900460ff1681565b6101d36101ce366004610d23565b610685565b6040516101179190610d47565b6100f6610715565b6100e16101f6366004610d23565b610a79565b6100e1610209366004610d23565b610b6a565b3360009081526002602052604090205460ff16610257576040517fe76ea87f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812054905b818110156104845773ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090208054339190839081106102c1576102c1610da1565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361047c5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020610318600184610dd0565b8154811061032857610328610da1565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff86811684526003909252604090922080549190921691908390811061037257610372610da1565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905591851681526003909152604090208054806103dc576103dc610e10565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155930190935573ffffffffffffffffffffffffffffffffffffffff96909616865260038252604086208054600181018255908752919095200180549094163317909355505050565b60010161027f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604081205460ff166104e9576040517fe76ea87f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8da5cb5b000000000000000000000000000000000000000000000000000000001790529051600091829173ffffffffffffffffffffffffffffffffffffffff86169161056791610e63565b600060405180830381855afa9150503d80600081146105a2576040519150601f19603f3d011682016040523d82523d6000602084013e6105a7565b606091505b5091509150816105b9576105b9610e7f565b808060200190518101906105cd9190610eae565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461065b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561070957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106de575b50505050509050919050565b60003060405161072490610cb8565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801561075d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915533808552600384528285208054928301815585529284200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905551602481019190915292935091829190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd6c7ef8b00000000000000000000000000000000000000000000000000000000179052516108869190610e63565b6000604051808303816000865af19150503d80600081146108c3576040519150601f19603f3d011682016040523d82523d6000602084013e6108c8565b606091505b50915091508161090657806040517f215529560000000000000000000000000000000000000000000000000000000081526004016106529190610ecb565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffa1ad7400000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff85169161097f91610e63565b6000604051808303816000865af19150503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b50909250905081610a0057806040517ff873e28c0000000000000000000000000000000000000000000000000000000081526004016106529190610ecb565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6814d673ab3768002b6eeaf470ba6db3e2b3e4b0f346c0ee23ee9271c1445c3d83806020019051810190610a639190610f1c565b60405190815260200160405180910390a3505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610652565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610652565b60005474010000000000000000000000000000000000000000900460ff16610c3f576040517f24c1d6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdaa2b90d4f4e53aac69bc06e8ce6fc4a0d69c6582f74cd6e4547abcb972f7c6e9060200160405180910390a150565b61040c80610f3683390190565b73ffffffffffffffffffffffffffffffffffffffff81168114610ce757600080fd5b50565b60008060408385031215610cfd57600080fd5b8235610d0881610cc5565b91506020830135610d1881610cc5565b809150509250929050565b600060208284031215610d3557600080fd5b8135610d4081610cc5565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d9557835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d63565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610e0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b83811015610e5a578181015183820152602001610e42565b50506000910152565b60008251610e75818460208701610e3f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600060208284031215610ec057600080fd5b8151610d4081610cc5565b6020815260008251806020840152610eea816040850160208701610e3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215610f2e57600080fd5b505191905056fe608060405234801561001057600080fd5b5060405161040c38038061040c83398101604081905261002f91610085565b8061006161005e60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d516100b5565b90565b80546001600160a01b0319166001600160a01b0392909216919091179055506100dc565b60006020828403121561009757600080fd5b81516001600160a01b03811681146100ae57600080fd5b9392505050565b818103818111156100d657634e487b7160e01b600052601160045260246000fd5b92915050565b610321806100eb6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b610198565b565b60008060006100366101bc565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5c60da1b00000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff92909216916100b2919061023f565b6000604051808303816000865af19150503d80600081146100ef576040519150601f19603f3d011682016040523d82523d6000602084013e6100f4565b606091505b509150915081610130576040517f73a769bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80806020019051810190610144919061026e565b925073ffffffffffffffffffffffffffffffffffffffff8316610193576040517f40dde93500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505090565b3660008037600080366000845af43d6000803e8080156101b7573d6000f35b3d6000fd5b60006101ef6101ec60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d516102ab565b90565b5473ffffffffffffffffffffffffffffffffffffffff169050806101ec576040517fee755c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825160005b818110156102605760208186018101518583015201610246565b506000920191825250919050565b60006020828403121561028057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102a457600080fd5b9392505050565b818103818111156102e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea2646970667358221220a9fe180b118f059af22133ae7f06251ccb7ca886e7c85092c4cf14b7a43fce0064736f6c63430008120033a264697066735822122074c2971fbf6c0bf00f081ec7e4edef26fc5749dd447d3f7dd60a6d5335a62d5264736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c625f59d51ecdff57fefe535c80d318ca42a0ec4

-----Decoded View---------------
Arg [0] : _owner (address): 0xc625F59d51ecDff57FEFE535C80d318CA42A0Ec4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c625f59d51ecdff57fefe535c80d318ca42a0ec4


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading