Source Code
Overview
XDAI Balance
XDAI Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 44297923 | 47 hrs ago | 0 XDAI | ||||
| 44297923 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297912 | 47 hrs ago | 0 XDAI | ||||
| 44297895 | 47 hrs ago | 0 XDAI | ||||
| 44297895 | 47 hrs ago | 0 XDAI | ||||
| 44238334 | 5 days ago | 0 XDAI | ||||
| 44238334 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44238330 | 5 days ago | 0 XDAI | ||||
| 44216186 | 7 days ago | 0 XDAI |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xf26ebf17...02326916b 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
Contract Source Code (Solidity)
/**
*Submitted for verification at gnosisscan.io on 2024-03-14
*/
// File: contracts/acl/IACL.sol
/*
* SPDX-License-Identifier: 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-Identifier: 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-Identifier: 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-Identifier: 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-Identifier: 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-Identifier: 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-Identifier: 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
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]Contract Creation Code
0x608060405234801561001057600080fd5b5060405160208061048d833981016040525161003481640100000000610120810204565b151561003f57600080fd5b7f3b4bf6bf3ad5000ecf0f989d5befde585c6860fea3e574a4fab4c49d1c177d9c60008190527fc67454ed56db7ff90a4bb32fc9a8de1ab3174b221e5fecea22b7503a3111791f60209081527f8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede48054600160a060020a031916600160a060020a03851690811790915560408051918252517fc681a85306374a5ab27f0bbc385296a54bcd314a1948b6cf61c4ea1bc44bb9f8927f2ec1ae0a449b7ae354b9dacfb3ade6b6332ba26b7fcbb935835fa39dd7263b23928290030190a35061014d565b600080600160a060020a038316151561013c5760009150610147565b823b90506000811191505b50919050565b6103318061015c6000396000f3006080604052600436106100535763ffffffff60e060020a6000350416634555d5c981146101005780634558850c1461012757806348a0c8dd1461015e5780635c60da1b1461018757806386070cfe1461019c575b6127106000805160206102e68339815191526000825a10156100b65760003411361583541616156100b1576040513381523460208201527f15eeaa57c7bd188c1388020bcadc2c436ec60d647d36ef5b9eb3c742217ddee1604082a1005b600080fd5b6100be6101b1565b90506100fb816000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750610227945050505050565b505050005b34801561010c57600080fd5b50610115610268565b60408051918252519081900360200190f35b34801561013357600080fd5b5061014260043560243561026d565b60408051600160a060020a039092168252519081900360200190f35b34801561016a57600080fd5b50610173610290565b604080519115158252519081900360200190f35b34801561019357600080fd5b506101426101b1565b3480156101a857600080fd5b506101156102ae565b7f3b4bf6bf3ad5000ecf0f989d5befde585c6860fea3e574a4fab4c49d1c177d9c6000527fc67454ed56db7ff90a4bb32fc9a8de1ab3174b221e5fecea22b7503a3111791f6020527f8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede454600160a060020a031690565b6000610232836102b4565b151561023d57600080fd5b612710905060008083516020850186855a03f43d604051816000823e828015610264578282f35b8282fd5b600290565b6000602081815292815260408082209093529081522054600160a060020a031681565b60006102a96000805160206102e68339815191526102e1565b905090565b60015481565b600080600160a060020a03831615156102d057600091506102db565b823b90506000811191505b50919050565b54905600665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50ceaa165627a7a7230582059d7b1ec86fdc2096e8d087dca4e98d9feef0d9e840701db64929e71cabfc8b40029000000000000000000000000336ebb4def4da4fad6936874b8c952e800024653
Deployed Bytecode
0x6080604052600436106100535763ffffffff60e060020a6000350416634555d5c981146101005780634558850c1461012757806348a0c8dd1461015e5780635c60da1b1461018757806386070cfe1461019c575b6127106000805160206102e68339815191526000825a10156100b65760003411361583541616156100b1576040513381523460208201527f15eeaa57c7bd188c1388020bcadc2c436ec60d647d36ef5b9eb3c742217ddee1604082a1005b600080fd5b6100be6101b1565b90506100fb816000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750610227945050505050565b505050005b34801561010c57600080fd5b50610115610268565b60408051918252519081900360200190f35b34801561013357600080fd5b5061014260043560243561026d565b60408051600160a060020a039092168252519081900360200190f35b34801561016a57600080fd5b50610173610290565b604080519115158252519081900360200190f35b34801561019357600080fd5b506101426101b1565b3480156101a857600080fd5b506101156102ae565b7f3b4bf6bf3ad5000ecf0f989d5befde585c6860fea3e574a4fab4c49d1c177d9c6000527fc67454ed56db7ff90a4bb32fc9a8de1ab3174b221e5fecea22b7503a3111791f6020527f8e2ed18767e9c33b25344c240cdf92034fae56be99e2c07f3d9946d949ffede454600160a060020a031690565b6000610232836102b4565b151561023d57600080fd5b612710905060008083516020850186855a03f43d604051816000823e828015610264578282f35b8282fd5b600290565b6000602081815292815260408082209093529081522054600160a060020a031681565b60006102a96000805160206102e68339815191526102e1565b905090565b60015481565b600080600160a060020a03831615156102d057600091506102db565b823b90506000811191505b50919050565b54905600665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50ceaa165627a7a7230582059d7b1ec86fdc2096e8d087dca4e98d9feef0d9e840701db64929e71cabfc8b40029
Deployed Bytecode Sourcemap
9724:1414:0:-;;;;;;;;;-1:-1:-1;;;9724:1414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:5;-1:-1:-1;;;;;;;;;;;7714:27:0;4628:5;8277:3;8274:28;8271:2;;;8600:1;8589:9;8586:16;8570:12;8563:20;8539:21;8533:28;8529:55;8525:78;8522:2;;;8789:4;8783:11;8855:6;8846:7;8839:23;8967:9;8960:4;8951:7;8947:18;8940:37;9212:66;9206:4;9197:7;9192:87;9303:6;8522:2;9511:1;9508;9501:12;8271:2;9568:16;:14;:16::i;:::-;9551:33;;9595:30;9608:6;9616:8;;9595:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9595:12:0;;-1:-1:-1;;;;;9595:30:0:i;:::-;7674:1959;;;9724:1414;10815:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10815:100:0;;;;;;;;;;;;;;;;;;;;3216:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3216:61:0;;;;;;;;;;;-1:-1:-1;;;;;3216:61:0;;;;;;;;;;;;;;7197:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7197:115:0;;;;;;;;;;;;;;;;;;;;;;11006:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11006:129:0;;;;3284:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3284:33:0;;;;11006:129;2041:66;11053:7;11080:47;:27;;:47;;;-1:-1:-1;;;;;11080:47:0;11006:129;:::o;4903:694::-;5012:19;4984:16;4995:4;4984:10;:16::i;:::-;4976:25;;;;;;;;4628:5;5012:35;;5183:1;5180;5168:9;5162:16;5155:4;5144:9;5140:20;5134:4;5120:11;5115:3;5111:21;5098:87;5211:14;5256:4;5250:11;5298:4;5295:1;5290:3;5275:28;5501:6;5508:28;;;;5572:4;5567:3;5560:17;5508:28;5529:4;5524:3;5517:17;10815:100;4301:1;10815:100;:::o;3216:61::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3216:61:0;;:::o;7197:115::-;7243:4;7267:37;-1:-1:-1;;;;;;;;;;;7267:35:0;:37::i;:::-;7260:44;;7197:115;:::o;3284:33::-;;;;:::o;3809:252::-;3869:4;;-1:-1:-1;;;;;3890:21:0;;;3886:66;;;3935:5;3928:12;;;;3886:66;4018:7;4006:20;3998:28;;4052:1;4045:4;:8;4038:15;;3809:252;;;;;:::o;5769:130::-;5875:15;;5865:27::o
Swarm Source
bzzr://59d7b1ec86fdc2096e8d087dca4e98d9feef0d9e840701db64929e71cabfc8b4
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in XDAI
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.