ETH Price: $3,111.80 (-0.85%)
Gas: 9.31 Gwei

Contract

0x2732fD9fD5F0E84B1b774cf5E6f5c812EAfd455b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set App162329612022-12-21 12:05:23697 days ago1671624323IN
0x2732fD9f...2EAfd455b
0 ETH0.0008119113.40905886
Set App132886712021-09-24 13:09:181150 days ago1632488958IN
0x2732fD9f...2EAfd455b
0 ETH0.00767985126.8349713
Set App130799832021-08-23 6:34:141183 days ago1629700454IN
0x2732fD9f...2EAfd455b
0 ETH0.00242240
Set App122710522021-04-19 14:29:021308 days ago1618842542IN
0x2732fD9f...2EAfd455b
0 ETH0.01647286272
Set App118803702021-02-18 10:48:141368 days ago1613645294IN
0x2732fD9f...2EAfd455b
0 ETH0.00788175155
New App Instance115424872020-12-28 12:38:451420 days ago1609159125IN
0x2732fD9f...2EAfd455b
0 ETH0.10236127230
Set App115155112020-12-24 9:33:041425 days ago1608802384IN
0x2732fD9f...2EAfd455b
0 ETH0.0050862100
Set App107539502020-08-29 6:06:381542 days ago1598681198IN
0x2732fD9f...2EAfd455b
0 ETH0.004474888
Set App106381842020-08-11 10:50:591559 days ago1597143059IN
0x2732fD9f...2EAfd455b
0 ETH0.00625455123
New App Instance106129992020-08-07 13:39:211563 days ago1596807561IN
0x2732fD9f...2EAfd455b
0 ETH0.0422546490
Set App105692512020-07-31 19:32:091570 days ago1596223929IN
0x2732fD9f...2EAfd455b
0 ETH0.002543150
New App Instance105662462020-07-31 8:26:031571 days ago1596183963IN
0x2732fD9f...2EAfd455b
0 ETH0.0424899280
New App Instance105661612020-07-31 8:08:181571 days ago1596182898IN
0x2732fD9f...2EAfd455b
0 ETH0.0418521775
New App Instance105660102020-07-31 7:37:201571 days ago1596181040IN
0x2732fD9f...2EAfd455b
0 ETH0.035215275
New App Instance105659902020-07-31 7:32:031571 days ago1596180723IN
0x2732fD9f...2EAfd455b
0 ETH0.031890375
New App Instance105659132020-07-31 7:13:301571 days ago1596179610IN
0x2732fD9f...2EAfd455b
0 ETH0.0282805575
New App Instance105659082020-07-31 7:13:001571 days ago1596179580IN
0x2732fD9f...2EAfd455b
0 ETH0.0282805575
New App Instance105659042020-07-31 7:12:341571 days ago1596179554IN
0x2732fD9f...2EAfd455b
0 ETH0.0300501775
New App Instance105658552020-07-31 7:04:001571 days ago1596179040IN
0x2732fD9f...2EAfd455b
0 ETH0.0231328565

Latest 13 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
115424872020-12-28 12:38:451420 days ago1609159125
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
106129992020-08-07 13:39:211563 days ago1596807561
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105662462020-07-31 8:26:031571 days ago1596183963
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105661612020-07-31 8:08:181571 days ago1596182898
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105660102020-07-31 7:37:201571 days ago1596181040
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105659902020-07-31 7:32:031571 days ago1596180723
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105659132020-07-31 7:13:301571 days ago1596179610
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105659082020-07-31 7:13:001571 days ago1596179580
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105659042020-07-31 7:12:341571 days ago1596179554
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105658552020-07-31 7:04:001571 days ago1596179040
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105657042020-07-31 6:32:231571 days ago1596177143
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105657042020-07-31 6:32:231571 days ago1596177143
0x2732fD9f...2EAfd455b
 Contract Creation0 ETH
105657042020-07-31 6:32:231571 days ago1596177143  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xa4e649A2...5679E0b3F
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
KernelProxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-06
*/

// File: contracts/acl/IACL.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


interface IACL {
    function initialize(address permissionsCreator) external;

    // TODO: this should be external
    // See https://github.com/ethereum/solidity/issues/4832
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);
}

// File: contracts/common/IVaultRecoverable.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


interface IVaultRecoverable {
    event RecoverToVault(address indexed vault, address indexed token, uint256 amount);

    function transferToVault(address token) external;

    function allowRecoverability(address token) external view returns (bool);
    function getRecoveryVault() external view returns (address);
}

// File: contracts/kernel/IKernel.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;




interface IKernelEvents {
    event SetApp(bytes32 indexed namespace, bytes32 indexed appId, address app);
}


// This should be an interface, but interfaces can't inherit yet :(
contract IKernel is IKernelEvents, IVaultRecoverable {
    function acl() public view returns (IACL);
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);

    function setApp(bytes32 namespace, bytes32 appId, address app) public;
    function getApp(bytes32 namespace, bytes32 appId) public view returns (address);
}

// File: contracts/kernel/KernelConstants.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


contract KernelAppIds {
    /* Hardcoded constants to save gas
    bytes32 internal constant KERNEL_CORE_APP_ID = apmNamehash("kernel");
    bytes32 internal constant KERNEL_DEFAULT_ACL_APP_ID = apmNamehash("acl");
    bytes32 internal constant KERNEL_DEFAULT_VAULT_APP_ID = apmNamehash("vault");
    */
    bytes32 internal constant KERNEL_CORE_APP_ID = 0x3b4bf6bf3ad5000ecf0f989d5befde585c6860fea3e574a4fab4c49d1c177d9c;
    bytes32 internal constant KERNEL_DEFAULT_ACL_APP_ID = 0xe3262375f45a6e2026b7e7b18c2b807434f2508fe1a2a3dfb493c7df8f4aad6a;
    bytes32 internal constant KERNEL_DEFAULT_VAULT_APP_ID = 0x7e852e0fcfce6551c13800f1e7476f982525c2b5277ba14b24339c68416336d1;
}


contract KernelNamespaceConstants {
    /* Hardcoded constants to save gas
    bytes32 internal constant KERNEL_CORE_NAMESPACE = keccak256("core");
    bytes32 internal constant KERNEL_APP_BASES_NAMESPACE = keccak256("base");
    bytes32 internal constant KERNEL_APP_ADDR_NAMESPACE = keccak256("app");
    */
    bytes32 internal constant KERNEL_CORE_NAMESPACE = 0xc681a85306374a5ab27f0bbc385296a54bcd314a1948b6cf61c4ea1bc44bb9f8;
    bytes32 internal constant KERNEL_APP_BASES_NAMESPACE = 0xf1f3eb40f5bc1ad1344716ced8b8a0431d840b5783aea1fd01786bc26f35ac0f;
    bytes32 internal constant KERNEL_APP_ADDR_NAMESPACE = 0xd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb;
}

// File: contracts/kernel/KernelStorage.sol

pragma solidity 0.4.24;


contract KernelStorage {
    // namespace => app id => address
    mapping (bytes32 => mapping (bytes32 => address)) public apps;
    bytes32 public recoveryVaultAppId;
}

// File: contracts/common/IsContract.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


contract IsContract {
    /*
    * NOTE: this should NEVER be used for authentication
    * (see pitfalls: https://github.com/fergarrui/ethereum-security/tree/master/contracts/extcodesize).
    *
    * This is only intended to be used as a sanity check that an address is actually a contract,
    * RATHER THAN an address not being a contract.
    */
    function isContract(address _target) internal view returns (bool) {
        if (_target == address(0)) {
            return false;
        }

        uint256 size;
        assembly { size := extcodesize(_target) }
        return size > 0;
    }
}

// File: contracts/lib/misc/ERCProxy.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


contract ERCProxy {
    uint256 internal constant FORWARDING = 1;
    uint256 internal constant UPGRADEABLE = 2;

    function proxyType() public pure returns (uint256 proxyTypeId);
    function implementation() public view returns (address codeAddr);
}

// File: contracts/common/DelegateProxy.sol

pragma solidity 0.4.24;




contract DelegateProxy is ERCProxy, IsContract {
    uint256 internal constant FWD_GAS_LIMIT = 10000;

    /**
    * @dev Performs a delegatecall and returns whatever the delegatecall returned (entire context execution will return!)
    * @param _dst Destination address to perform the delegatecall
    * @param _calldata Calldata for the delegatecall
    */
    function delegatedFwd(address _dst, bytes _calldata) internal {
        require(isContract(_dst));
        uint256 fwdGasLimit = FWD_GAS_LIMIT;

        assembly {
            let result := delegatecall(sub(gas, fwdGasLimit), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0)
            let size := returndatasize
            let ptr := mload(0x40)
            returndatacopy(ptr, 0, size)

            // revert instead of invalid() bc if the underlying call failed with invalid() it already wasted gas.
            // if the call returned error data, forward it
            switch result case 0 { revert(ptr, size) }
            default { return(ptr, size) }
        }
    }
}

// File: contracts/common/UnstructuredStorage.sol

/*
 * SPDX-License-Identitifer:    MIT
 */

pragma solidity ^0.4.24;


library UnstructuredStorage {
    function getStorageBool(bytes32 position) internal view returns (bool data) {
        assembly { data := sload(position) }
    }

    function getStorageAddress(bytes32 position) internal view returns (address data) {
        assembly { data := sload(position) }
    }

    function getStorageBytes32(bytes32 position) internal view returns (bytes32 data) {
        assembly { data := sload(position) }
    }

    function getStorageUint256(bytes32 position) internal view returns (uint256 data) {
        assembly { data := sload(position) }
    }

    function setStorageBool(bytes32 position, bool data) internal {
        assembly { sstore(position, data) }
    }

    function setStorageAddress(bytes32 position, address data) internal {
        assembly { sstore(position, data) }
    }

    function setStorageBytes32(bytes32 position, bytes32 data) internal {
        assembly { sstore(position, data) }
    }

    function setStorageUint256(bytes32 position, uint256 data) internal {
        assembly { sstore(position, data) }
    }
}

// File: contracts/common/DepositableStorage.sol

pragma solidity 0.4.24;



contract DepositableStorage {
    using UnstructuredStorage for bytes32;

    // keccak256("aragonOS.depositableStorage.depositable")
    bytes32 internal constant DEPOSITABLE_POSITION = 0x665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea;

    function isDepositable() public view returns (bool) {
        return DEPOSITABLE_POSITION.getStorageBool();
    }

    function setDepositable(bool _depositable) internal {
        DEPOSITABLE_POSITION.setStorageBool(_depositable);
    }
}

// File: contracts/common/DepositableDelegateProxy.sol

pragma solidity 0.4.24;




contract DepositableDelegateProxy is DepositableStorage, DelegateProxy {
    event ProxyDeposit(address sender, uint256 value);

    function () external payable {
        uint256 forwardGasThreshold = FWD_GAS_LIMIT;
        bytes32 isDepositablePosition = DEPOSITABLE_POSITION;

        // Optimized assembly implementation to prevent EIP-1884 from breaking deposits, reference code in Solidity:
        // https://github.com/aragon/aragonOS/blob/v4.2.1/contracts/common/DepositableDelegateProxy.sol#L10-L20
        assembly {
            // Continue only if the gas left is lower than the threshold for forwarding to the implementation code,
            // otherwise continue outside of the assembly block.
            if lt(gas, forwardGasThreshold) {
                // Only accept the deposit and emit an event if all of the following are true:
                // the proxy accepts deposits (isDepositable), msg.data.length == 0, and msg.value > 0
                if and(and(sload(isDepositablePosition), iszero(calldatasize)), gt(callvalue, 0)) {
                    // Equivalent Solidity code for emitting the event:
                    // emit ProxyDeposit(msg.sender, msg.value);

                    let logData := mload(0x40) // free memory pointer
                    mstore(logData, caller) // add 'msg.sender' to the log data (first event param)
                    mstore(add(logData, 0x20), callvalue) // add 'msg.value' to the log data (second event param)

                    // Emit an event with one topic to identify the event: keccak256('ProxyDeposit(address,uint256)') = 0x15ee...dee1
                    log1(logData, 0x40, 0x15eeaa57c7bd188c1388020bcadc2c436ec60d647d36ef5b9eb3c742217ddee1)

                    stop() // Stop. Exits execution context
                }

                // If any of above checks failed, revert the execution (if ETH was sent, it is returned to the sender)
                revert(0, 0)
            }
        }

        address target = implementation();
        delegatedFwd(target, msg.data);
    }
}

// File: contracts/kernel/KernelProxy.sol

pragma solidity 0.4.24;







contract KernelProxy is IKernelEvents, KernelStorage, KernelAppIds, KernelNamespaceConstants, IsContract, DepositableDelegateProxy {
    /**
    * @dev KernelProxy is a proxy contract to a kernel implementation. The implementation
    *      can update the reference, which effectively upgrades the contract
    * @param _kernelImpl Address of the contract used as implementation for kernel
    */
    constructor(IKernel _kernelImpl) public {
        require(isContract(address(_kernelImpl)));
        apps[KERNEL_CORE_NAMESPACE][KERNEL_CORE_APP_ID] = _kernelImpl;

        // Note that emitting this event is important for verifying that a KernelProxy instance
        // was never upgraded to a malicious Kernel logic contract over its lifespan.
        // This starts the "chain of trust", that can be followed through later SetApp() events
        // emitted during kernel upgrades.
        emit SetApp(KERNEL_CORE_NAMESPACE, KERNEL_CORE_APP_ID, _kernelImpl);
    }

    /**
     * @dev ERC897, whether it is a forwarding (1) or an upgradeable (2) proxy
     */
    function proxyType() public pure returns (uint256 proxyTypeId) {
        return UPGRADEABLE;
    }

    /**
    * @dev ERC897, the address the proxy would delegate calls to
    */
    function implementation() public view returns (address) {
        return apps[KERNEL_CORE_NAMESPACE][KERNEL_CORE_APP_ID];
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"proxyType","outputs":[{"name":"proxyTypeId","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"},{"name":"","type":"bytes32"}],"name":"apps","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isDepositable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recoveryVaultAppId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_kernelImpl","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ProxyDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"namespace","type":"bytes32"},{"indexed":true,"name":"appId","type":"bytes32"},{"indexed":false,"name":"app","type":"address"}],"name":"SetApp","type":"event"}]

Deployed Bytecode

0x60806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634555d5c9811461012b5780634558850c1461015257806348a0c8dd146101965780635c60da1b146101bf57806386070cfe146101d4575b6127107f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea6000825a10156100e15760003411361583541616156100dc576040513381523460208201527f15eeaa57c7bd188c1388020bcadc2c436ec60d647d36ef5b9eb3c742217ddee1604082a1005b600080fd5b6100e96101e9565b9050610126816000368080601f0160208091040260200160405190810160405280939291908181526020018383808284375061026c945050505050565b505050005b34801561013757600080fd5b506101406102ad565b60408051918252519081900360200190f35b34801561015e57600080fd5b5061016d6004356024356102b2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101a257600080fd5b506101ab6102e2565b604080519115158252519081900360200190f35b3480156101cb57600080fd5b5061016d6101e9565b3480156101e057600080fd5b50610140610312565b7f3b4bf6bf3ad5000ecf0f989d5befde585c6860fea3e574a4fab4c49d1c177d9c6000527fc67454ed56db7ff90a4bb32fc9a8de1ab3174b221e5fecea22b7503a3111791f6020527f8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede45473ffffffffffffffffffffffffffffffffffffffff1690565b600061027783610318565b151561028257600080fd5b612710905060008083516020850186855a03f43d604051816000823e8280156102a9578282f35b8282fd5b600290565b600060208181529281526040808220909352908152205473ffffffffffffffffffffffffffffffffffffffff1681565b600061030d7f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea610352565b905090565b60015481565b60008073ffffffffffffffffffffffffffffffffffffffff83161515610341576000915061034c565b823b90506000811191505b50919050565b54905600a165627a7a72305820d6f85ee1a265e6c4a971b32dc0793f4866569241e70d625fcd8ea70d2c22e1f70029

Deployed Bytecode Sourcemap

9731:1414:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4634:5;7129:66;7721:27;4634:5;8284:3;8281:28;8278:2;;;8607:1;8596:9;8593:16;8577:12;8570:20;8546:21;8540:28;8536:55;8532:78;8529:2;;;8796:4;8790:11;8862:6;8853:7;8846:23;8974:9;8967:4;8958:7;8954:18;8947:37;9219:66;9213:4;9204:7;9199:87;9310:6;8529:2;9518:1;9515;9508:12;8278:2;9575:16;:14;:16::i;:::-;9558:33;;9602:30;9615:6;9623:8;;9602:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9602:12:0;;-1:-1:-1;;;;;9602:30:0:i;:::-;7681:1959;;;9731:1414;10822:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10822:100:0;;;;;;;;;;;;;;;;;;;;3220:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3220:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;7204:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7204:115:0;;;;;;;;;;;;;;;;;;;;;;11013:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11013:129:0;;;;3288:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3288:33:0;;;;11013:129;2045:66;11060:7;11087:47;:27;;:47;;;;;11013:129;:::o;4909:694::-;5018:19;4990:16;5001:4;4990:10;:16::i;:::-;4982:25;;;;;;;;4634:5;5018:35;;5189:1;5186;5174:9;5168:16;5161:4;5150:9;5146:20;5140:4;5126:11;5121:3;5117:21;5104:87;5217:14;5262:4;5256:11;5304:4;5301:1;5296:3;5281:28;5507:6;5514:28;;;;5578:4;5573:3;5566:17;5514:28;5535:4;5530:3;5523:17;10822:100;4307:1;10822:100;:::o;3220:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7204:115::-;7250:4;7274:37;7129:66;7274:35;:37::i;:::-;7267:44;;7204:115;:::o;3288:33::-;;;;:::o;3814:252::-;3874:4;;3895:21;;;;3891:66;;;3940:5;3933:12;;;;3891:66;4023:7;4011:20;4003:28;;4057:1;4050:4;:8;4043:15;;3814:252;;;;;:::o;5776:130::-;5882:15;;5872:27::o

Swarm Source

bzzr://d6f85ee1a265e6c4a971b32dc0793f4866569241e70d625fcd8ea70d2c22e1f7

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.