ETH Price: $2,604.09 (-2.76%)
Gas: 1 Gwei

Contract

0x2E9c3924A9c6e94303fC592EA5DeD925284A82D5
 

Overview

ETH Balance

0.000000000881927541 ETH

Eth Value

Less Than $0.01 (@ $2,604.09/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer160148832022-11-21 0:43:35628 days ago1668991415IN
0x2E9c3924...5284A82D5
0 ETH0.000256210.80487156
Cast160148202022-11-21 0:30:59628 days ago1668990659IN
0x2E9c3924...5284A82D5
0 ETH0.0020210511.3075101
Cast160147792022-11-21 0:22:47628 days ago1668990167IN
0x2E9c3924...5284A82D5
0 ETH0.0020160211.2793335
Cast120138212021-03-10 23:33:431248 days ago1615419223IN
0x2E9c3924...5284A82D5
0 ETH0.00222826101
Transfer120123622021-03-10 18:14:501248 days ago1615400090IN
0x2E9c3924...5284A82D5
0 ETH0.0021812100
Transfer119685822021-03-04 0:39:581255 days ago1614818398IN
0x2E9c3924...5284A82D5
0.00063523 ETH0.00201696
Cast119635912021-03-03 6:06:181255 days ago1614751578IN
0x2E9c3924...5284A82D5
0 ETH0.0040835662.00000112
Cast119625032021-03-03 2:01:371256 days ago1614736897IN
0x2E9c3924...5284A82D5
0 ETH0.0065205399
Cast119611402021-03-02 20:54:111256 days ago1614718451IN
0x2E9c3924...5284A82D5
0 ETH0.0054337882.5
Cast119607772021-03-02 19:38:311256 days ago1614713911IN
0x2E9c3924...5284A82D5
0 ETH0.01939569111
Transfer119585552021-03-02 11:28:491256 days ago1614684529IN
0x2E9c3924...5284A82D5
0 ETH0.001461467
Cast119570692021-03-02 6:02:101256 days ago1614664930IN
0x2E9c3924...5284A82D5
0 ETH0.006388897.00000145
Cast119570322021-03-02 5:54:221256 days ago1614664462IN
0x2E9c3924...5284A82D5
0 ETH0.0167746596.00000145
Cast119569122021-03-02 5:27:431257 days ago1614662863IN
0x2E9c3924...5284A82D5
0 ETH0.00410487108.9
Approve119566762021-03-02 4:33:521257 days ago1614659632IN
0x2E9c3924...5284A82D5
0 ETH0.0019113384
Run119566152021-03-02 4:20:031257 days ago1614658803IN
0x2E9c3924...5284A82D5
0 ETH0.0020244692
Cast119561722021-03-02 2:43:491257 days ago1614653029IN
0x2E9c3924...5284A82D5
0 ETH0.00757857108
Cast119560272021-03-02 2:10:381257 days ago1614651038IN
0x2E9c3924...5284A82D5
0 ETH0.0162504493.00000145

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
112171262020-11-08 13:54:001370 days ago1604843640  Contract Creation0 ETH
112170502020-11-08 13:39:021370 days ago1604842742  Contract Creation0 ETH
Loading...
Loading

Minimal Proxy Contract for 0x939daad09fc4a9b8f8a9352a485dab2df4f4b3f8

Contract Name:
InstaAccount

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-03-26
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

/**
 * @title InstaAccount.
 * @dev DeFi Smart Account Wallet.
 */

interface IndexInterface {
    function connectors(uint version) external view returns (address);
    function check(uint version) external view returns (address);
    function list() external view returns (address);
}

interface ConnectorsInterface {
    function isConnector(address[] calldata logicAddr) external view returns (bool);
    function isStaticConnector(address[] calldata logicAddr) external view returns (bool);
}

interface CheckInterface {
    function isOk() external view returns (bool);
}

interface ListInterface {
    function addAuth(address user) external;
    function removeAuth(address user) external;
}


contract Record {

    event LogEnable(address indexed user);
    event LogDisable(address indexed user);
    event LogSwitchShield(bool _shield);

    // InstaIndex Address.
    address public constant instaIndex = 0x2971AdFa57b20E5a416aE5a708A8655A9c74f723;
    // The Account Module Version.
    uint public constant version = 1;
    // Auth Module(Address of Auth => bool).
    mapping (address => bool) private auth;
    // Is shield true/false.
    bool public shield;

    /**
     * @dev Check for Auth if enabled.
     * @param user address/user/owner.
     */
    function isAuth(address user) public view returns (bool) {
        return auth[user];
    }

    /**
     * @dev Change Shield State.
    */
    function switchShield(bool _shield) external {
        require(auth[msg.sender], "not-self");
        require(shield != _shield, "shield is set");
        shield = _shield;
        emit LogSwitchShield(shield);
    }

    /**
     * @dev Enable New User.
     * @param user Owner of the Smart Account.
    */
    function enable(address user) public {
        require(msg.sender == address(this) || msg.sender == instaIndex, "not-self-index");
        require(user != address(0), "not-valid");
        require(!auth[user], "already-enabled");
        auth[user] = true;
        ListInterface(IndexInterface(instaIndex).list()).addAuth(user);
        emit LogEnable(user);
    }

    /**
     * @dev Disable User.
     * @param user Owner of the Smart Account.
    */
    function disable(address user) public {
        require(msg.sender == address(this), "not-self");
        require(user != address(0), "not-valid");
        require(auth[user], "already-disabled");
        delete auth[user];
        ListInterface(IndexInterface(instaIndex).list()).removeAuth(user);
        emit LogDisable(user);
    }

}

contract InstaAccount is Record {

    event LogCast(address indexed origin, address indexed sender, uint value);

    receive() external payable {}

     /**
     * @dev Delegate the calls to Connector And this function is ran by cast().
     * @param _target Target to of Connector.
     * @param _data CallData of function in Connector.
    */
    function spell(address _target, bytes memory _data) internal {
        require(_target != address(0), "target-invalid");
        assembly {
            let succeeded := delegatecall(gas(), _target, add(_data, 0x20), mload(_data), 0, 0)

            switch iszero(succeeded)
                case 1 {
                    // throw if delegatecall failed
                    let size := returndatasize()
                    returndatacopy(0x00, 0x00, size)
                    revert(0x00, size)
                }
        }
    }

    /**
     * @dev This is the main function, Where all the different functions are called
     * from Smart Account.
     * @param _targets Array of Target(s) to of Connector.
     * @param _datas Array of Calldata(S) of function.
    */
    function cast(
        address[] calldata _targets,
        bytes[] calldata _datas,
        address _origin
    )
    external
    payable
    {
        require(isAuth(msg.sender) || msg.sender == instaIndex, "permission-denied");
        require(_targets.length == _datas.length , "array-length-invalid");
        IndexInterface indexContract = IndexInterface(instaIndex);
        bool isShield = shield;
        if (!isShield) {
            require(ConnectorsInterface(indexContract.connectors(version)).isConnector(_targets), "not-connector");
        } else {
            require(ConnectorsInterface(indexContract.connectors(version)).isStaticConnector(_targets), "not-static-connector");
        }
        for (uint i = 0; i < _targets.length; i++) {
            spell(_targets[i], _datas[i]);
        }
        address _check = indexContract.check(version);
        if (_check != address(0) && !isShield) require(CheckInterface(_check).isOk(), "not-ok");
        emit LogCast(_origin, msg.sender, msg.value);
    }

}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"origin","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LogCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogDisable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogEnable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_shield","type":"bool"}],"name":"LogSwitchShield","type":"event"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes[]","name":"_datas","type":"bytes[]"},{"internalType":"address","name":"_origin","type":"address"}],"name":"cast","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"enable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"instaIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shield","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_shield","type":"bool"}],"name":"switchShield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.