Change Network

Use the search box to find a hosted network, or select from the list of available networks below.

All
Mainnet
Testnet
Favorites
No content.

Contract Address Details

0xfF8DC77e54fa96eB158509C8DEa7971197748332

ProxyStorage >= 0 Incoming Transactions Last Balance Update: Block #9834194
Created by 0x190e–768ecd at 0xb8be–f3fb8d

Balance

0 POA

(@ /POA)

Fetching tokens...

Contract name:
ProxyStorage
Compiler version
v0.4.24+commit.e67f0147
Optimization enabled
true

Contract source code

pragma solidity ^0.4.24;
/**
* @title EternalStorage
* @dev This contract holds all the necessary state variables to carry out the storage of any contract
* and to support the upgrade functionality.
*/
contract EternalStorage {
// Version number of the current implementation
uint256 internal _version;
// Address of the current implementation
address internal _implementation;
// Storage mappings
mapping(bytes32 => uint256) internal uintStorage;
mapping(bytes32 => string) internal stringStorage;
mapping(bytes32 => address) internal addressStorage;
mapping(bytes32 => bytes) internal bytesStorage;
mapping(bytes32 => bool) internal boolStorage;
mapping(bytes32 => int256) internal intStorage;
mapping(bytes32 => bytes32) internal bytes32Storage;
mapping(bytes32 => uint256[]) internal uintArrayStorage;
mapping(bytes32 => string[]) internal stringArrayStorage;
mapping(bytes32 => address[]) internal addressArrayStorage;
//mapping(bytes32 => bytes[]) internal bytesArrayStorage;
mapping(bytes32 => bool[]) internal boolArrayStorage;
mapping(bytes32 => int256[]) internal intArrayStorage;
mapping(bytes32 => bytes32[]) internal bytes32ArrayStorage;
}
interface IEternalStorageProxy {
function upgradeTo(address) external returns(bool);
}
interface IPoaNetworkConsensus {
function addValidator(address, bool) external returns(bool);
function finalizeChange() external;
function removeValidator(address, bool) external returns(bool);
function swapValidatorKey(address, address) external returns(bool);
function isMasterOfCeremonyRemoved() external view returns(bool);
function isValidator(address) external view returns(bool);
function getCurrentValidatorsLength() external view returns(uint256);
function getCurrentValidatorsLengthWithoutMoC() external view returns(uint256);
function getPendingList() external view returns(address[]);
function getValidators() external view returns(address[]);
function masterOfCeremony() external view returns(address);
}
interface IPoaNetworkConsensusForVotingToChange {
function currentValidators(uint256) external view returns(address);
function getCurrentValidatorsLength() external view returns(uint256);
}
interface IProxyStorage {
function initializeAddresses(
address, address, address, address, address, address, address, address
) external;
function setContractAddress(uint256, address) external returns(bool);
function getBallotsStorage() external view returns(address);
function getKeysManager() external view returns(address);
function getPoaConsensus() external view returns(address);
function getValidatorMetadata() external view returns(address);
function getVotingToChangeKeys() external view returns(address);
function getVotingToChangeMinThreshold() external view returns(address);
}
contract ProxyStorage is EternalStorage, IProxyStorage {
bytes32 internal constant INIT_DISABLED =
keccak256("initDisabled");
bytes32 internal constant BALLOTS_STORAGE_ETERNAL_STORAGE =
keccak256("ballotsStorageEternalStorage");
bytes32 internal constant KEYS_MANAGER_ETERNAL_STORAGE =
keccak256("keysManagerEternalStorage");
bytes32 internal constant MOC_INITIALIZED =
keccak256("mocInitialized");
bytes32 internal constant OWNER =
keccak256("owner");
bytes32 internal constant POA_CONSENSUS =
keccak256("poaConsensus");
bytes32 internal constant REWARD_BY_BLOCK_ETERNAL_STORAGE =
keccak256("rewardByBlockEternalStorage");
bytes32 internal constant VALIDATOR_METADATA_ETERNAL_STORAGE =
keccak256("validatorMetadataEternalStorage");
bytes32 internal constant VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE =
keccak256("votingToChangeKeysEternalStorage");
bytes32 internal constant VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE =
keccak256("votingToChangeMinThresholdEternalStorage");
bytes32 internal constant VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE =
keccak256("votingToChangeProxyEternalStorage");
bytes32 internal constant VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE =
keccak256("votingToManageEmissionFundsEternalStorage");
enum ContractTypes {
Invalid,
KeysManager,
VotingToChangeKeys,
VotingToChangeMinThreshold,
VotingToChangeProxy,
BallotsStorage,
PoaConsensus,
ValidatorMetadata,
ProxyStorage,
RewardByBlock
}
event ProxyInitialized(
address keysManagerEternalStorage,
address votingToChangeKeysEternalStorage,
address votingToChangeMinThresholdEternalStorage,
address votingToChangeProxyEternalStorage,
address votingToManageEmissionFundsEternalStorage,
address ballotsStorageEternalStorage,
address validatorMetadataEternalStorage,
address rewardByBlockEternalStorage
);
event AddressSet(uint256 contractType, address contractAddress);
modifier onlyVotingToChangeProxy() {
require(msg.sender == getVotingToChangeProxy());
_;
}
modifier onlyOwner() {
require(_isOwner(msg.sender));
_;
}
function initDisabled() public view returns(bool) {
return boolStorage[INIT_DISABLED];
}
function init(address _poaConsensus) public onlyOwner {
require(!initDisabled());
require(_poaConsensus != address(0));
require(_poaConsensus != address(this));
_setPoaConsensus(_poaConsensus);
boolStorage[INIT_DISABLED] = true;
}
function mocInitialized() public view returns(bool) {
return boolStorage[MOC_INITIALIZED];
}
function getKeysManager() public view returns(address) {
return addressStorage[KEYS_MANAGER_ETERNAL_STORAGE];
}
function getVotingToChangeKeys() public view returns(address) {
return addressStorage[VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE];
}
function getVotingToChangeMinThreshold() public view returns(address) {
return addressStorage[VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE];
}
function getVotingToChangeProxy() public view returns(address) {
return addressStorage[VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE];
}
function getVotingToManageEmissionFunds() public view returns(address) {
return addressStorage[VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE];
}
function getPoaConsensus() public view returns(address) {
return addressStorage[POA_CONSENSUS];
}
function getBallotsStorage() public view returns(address) {
return addressStorage[BALLOTS_STORAGE_ETERNAL_STORAGE];
}
function getValidatorMetadata() public view returns(address) {
return addressStorage[VALIDATOR_METADATA_ETERNAL_STORAGE];
}
function getRewardByBlock() public view returns(address) {
return addressStorage[REWARD_BY_BLOCK_ETERNAL_STORAGE];
}
function initializeAddresses(
address _keysManagerEternalStorage,
address _votingToChangeKeysEternalStorage,
address _votingToChangeMinThresholdEternalStorage,
address _votingToChangeProxyEternalStorage,
address _votingToManageEmissionFundsEternalStorage,
address _ballotsStorageEternalStorage,
address _validatorMetadataEternalStorage,
address _rewardByBlockEternalStorage
) public {
require(_isOwner(msg.sender) || _isMoC(msg.sender));
require(!mocInitialized());
addressStorage[KEYS_MANAGER_ETERNAL_STORAGE] =
_keysManagerEternalStorage;
addressStorage[VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE] =
_votingToChangeKeysEternalStorage;
addressStorage[VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE] =
_votingToChangeMinThresholdEternalStorage;
addressStorage[VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE] =
_votingToChangeProxyEternalStorage;
addressStorage[VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE] =
_votingToManageEmissionFundsEternalStorage;
addressStorage[BALLOTS_STORAGE_ETERNAL_STORAGE] =
_ballotsStorageEternalStorage;
addressStorage[VALIDATOR_METADATA_ETERNAL_STORAGE] =
_validatorMetadataEternalStorage;
addressStorage[REWARD_BY_BLOCK_ETERNAL_STORAGE] =
_rewardByBlockEternalStorage;
boolStorage[MOC_INITIALIZED] = true;
emit ProxyInitialized(
_keysManagerEternalStorage,
_votingToChangeKeysEternalStorage,
_votingToChangeMinThresholdEternalStorage,
_votingToChangeProxyEternalStorage,
_votingToManageEmissionFundsEternalStorage,
_ballotsStorageEternalStorage,
_validatorMetadataEternalStorage,
_rewardByBlockEternalStorage
);
}
// solhint-disable code-complexity
function setContractAddress(uint256 _contractType, address _contractAddress)
public
onlyVotingToChangeProxy
returns(bool)
{
if (!mocInitialized()) return false;
if (!initDisabled()) return false;
if (_contractAddress == address(0)) return false;
bool success = false;
if (_contractType == uint256(ContractTypes.KeysManager)) {
success = IEternalStorageProxy(
getKeysManager()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.VotingToChangeKeys)) {
success = IEternalStorageProxy(
getVotingToChangeKeys()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.VotingToChangeMinThreshold)) {
success = IEternalStorageProxy(
getVotingToChangeMinThreshold()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.VotingToChangeProxy)) {
success = IEternalStorageProxy(
getVotingToChangeProxy()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.BallotsStorage)) {
success = IEternalStorageProxy(
getBallotsStorage()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.PoaConsensus)) {
_setPoaConsensus(_contractAddress);
success = true;
} else if (_contractType == uint256(ContractTypes.ValidatorMetadata)) {
success = IEternalStorageProxy(
getValidatorMetadata()
).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.ProxyStorage)) {
success = IEternalStorageProxy(this).upgradeTo(_contractAddress);
} else if (_contractType == uint256(ContractTypes.RewardByBlock)) {
success = IEternalStorageProxy(
getRewardByBlock()
).upgradeTo(_contractAddress);
}
if (success) {
emit AddressSet(_contractType, _contractAddress);
}
return success;
}
// solhint-enable code-complexity
function _isMoC(address _validator) private view returns(bool) {
IPoaNetworkConsensus poa = IPoaNetworkConsensus(getPoaConsensus());
return _validator == poa.masterOfCeremony() && !poa.isMasterOfCeremonyRemoved();
}
function _isOwner(address _sender) private view returns(bool) {
return _sender == addressStorage[OWNER];
}
function _setPoaConsensus(address _poaConsensus) private {
addressStorage[POA_CONSENSUS] = _poaConsensus;
}
}

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getRewardByBlock","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeProxy","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"init","inputs":[{"type":"address","name":"_poaConsensus"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getBallotsStorage","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeKeys","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"initDisabled","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"mocInitialized","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToManageEmissionFunds","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getPoaConsensus","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getKeysManager","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initializeAddresses","inputs":[{"type":"address","name":"_keysManagerEternalStorage"},{"type":"address","name":"_votingToChangeKeysEternalStorage"},{"type":"address","name":"_votingToChangeMinThresholdEternalStorage"},{"type":"address","name":"_votingToChangeProxyEternalStorage"},{"type":"address","name":"_votingToManageEmissionFundsEternalStorage"},{"type":"address","name":"_ballotsStorageEternalStorage"},{"type":"address","name":"_validatorMetadataEternalStorage"},{"type":"address","name":"_rewardByBlockEternalStorage"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeMinThreshold","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getValidatorMetadata","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"setContractAddress","inputs":[{"type":"uint256","name":"_contractType"},{"type":"address","name":"_contractAddress"}],"constant":false},{"type":"event","name":"ProxyInitialized","inputs":[{"type":"address","name":"keysManagerEternalStorage","indexed":false},{"type":"address","name":"votingToChangeKeysEternalStorage","indexed":false},{"type":"address","name":"votingToChangeMinThresholdEternalStorage","indexed":false},{"type":"address","name":"votingToChangeProxyEternalStorage","indexed":false},{"type":"address","name":"votingToManageEmissionFundsEternalStorage","indexed":false},{"type":"address","name":"ballotsStorageEternalStorage","indexed":false},{"type":"address","name":"validatorMetadataEternalStorage","indexed":false},{"type":"address","name":"rewardByBlockEternalStorage","indexed":false}],"anonymous":false},{"type":"event","name":"AddressSet","inputs":[{"type":"uint256","name":"contractType","indexed":false},{"type":"address","name":"contractAddress","indexed":false}],"anonymous":false}]
            

Contract Byte Code

0x6080604052600436106100b65763ffffffff60e060020a60003504166302afdfd481146100bb57806313e468b3146100ec57806319ab453c1461010157806336ee77731461012457806349285b581461013957806352a369381461014e5780636398316c146101775780636ecad99d1461018c5780638b8414c4146101a15780639a573786146101b65780639efa82cf146101cb578063a3b3fff114610216578063b1339de31461022b578063bb0165b114610240575b600080fd5b3480156100c757600080fd5b506100d0610264565b60408051600160a060020a039092168252519081900360200190f35b3480156100f857600080fd5b506100d06102ae565b34801561010d57600080fd5b50610122600160a060020a0360043516610323565b005b34801561013057600080fd5b506100d06103c8565b34801561014557600080fd5b506100d0610412565b34801561015a57600080fd5b5061016361045d565b604080519115158252519081900360200190f35b34801561018357600080fd5b506101636104a1565b34801561019857600080fd5b506100d06104e5565b3480156101ad57600080fd5b506100d061055a565b3480156101c257600080fd5b506100d06105a4565b3480156101d757600080fd5b50610122600160a060020a0360043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e435166105ee565b34801561022257600080fd5b506100d0610baf565b34801561023757600080fd5b506100d0610c24565b34801561024c57600080fd5b50610163600435600160a060020a0360243516610c6e565b604080517f7265776172644279426c6f636b457465726e616c53746f7261676500000000008152815190819003601b019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781527f6500000000000000000000000000000000000000000000000000000000000000602080830191909152825191829003602101909120600090815260049091522054600160a060020a031690565b61032c33610f3d565b151561033757600080fd5b61033f61045d565b1561034957600080fd5b600160a060020a038116151561035e57600080fd5b600160a060020a03811630141561037457600080fd5b61037d81610f8e565b50604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c0190206000908152600660205220805460ff19166001179055565b604080517f62616c6c6f747353746f72616765457465726e616c53746f72616765000000008152815190819003601c019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e67654b657973457465726e616c53746f726167658152815160209181900382019020600090815260049091522054600160a060020a031690565b604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c01902060009081526006602052205460ff1690565b604080517f6d6f63496e697469616c697a65640000000000000000000000000000000000008152815190819003600e01902060009081526006602052205460ff1690565b604080517f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81527f616c53746f726167650000000000000000000000000000000000000000000000602080830191909152825191829003602901909120600090815260049091522054600160a060020a031690565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c019020600090815260046020522054600160a060020a031690565b604080517f6b6579734d616e61676572457465726e616c53746f726167650000000000000081528151908190036019019020600090815260046020522054600160a060020a031690565b6105f733610f3d565b80610606575061060633610ff9565b151561061157600080fd5b6106196104a1565b1561062357600080fd5b876004600060405180807f6b6579734d616e61676572457465726e616c53746f7261676500000000000000815250601901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550866004600060405180807f766f74696e67546f4368616e67654b657973457465726e616c53746f72616765815250602001905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550856004600060405180807f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181526020017f6c53746f72616765000000000000000000000000000000000000000000000000815250602801905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550846004600060405180807f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781526020017f6500000000000000000000000000000000000000000000000000000000000000815250602101905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550836004600060405180807f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81526020017f616c53746f726167650000000000000000000000000000000000000000000000815250602901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550826004600060405180807f62616c6c6f747353746f72616765457465726e616c53746f7261676500000000815250601c01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550816004600060405180807f76616c696461746f724d65746164617461457465726e616c53746f7261676500815250601f01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550806004600060405180807f7265776172644279426c6f636b457465726e616c53746f726167650000000000815250601b01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a0316021790555060016006600060405180807f6d6f63496e697469616c697a6564000000000000000000000000000000000000815250600e01905060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa0b05192e1273ceffbbdd1e02195c6ea17c6555a090c4f498adbd7ba31a19eb688888888888888886040518089600160a060020a0316600160a060020a0316815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200186600160a060020a0316600160a060020a0316815260200185600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a031681526020019850505050505050505060405180910390a15050505050505050565b604080517f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181527f6c53746f72616765000000000000000000000000000000000000000000000000602080830191909152825191829003602801909120600090815260049091522054600160a060020a031690565b604080517f76616c696461746f724d65746164617461457465726e616c53746f72616765008152815190819003601f019020600090815260046020522054600160a060020a031690565b600080610c796102ae565b600160a060020a03163314610c8d57600080fd5b610c956104a1565b1515610ca45760009150610f36565b610cac61045d565b1515610cbb5760009150610f36565b600160a060020a0383161515610cd45760009150610f36565b5060006001841415610d7557610ce86105a4565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50519050610ee8565b6002841415610d8657610ce8610412565b6003841415610d9757610ce8610baf565b6004841415610da857610ce86102ae565b6005841415610db957610ce86103c8565b6006841415610dd357610dcb83610f8e565b506001610ee8565b6007841415610de457610ce8610c24565b6008841415610e4e57604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600160a060020a038516600482015290513091633659cfe69160248083019260209291908290030181600087803b158015610d4257600080fd5b6009841415610ee857610e5f610264565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050506040513d6020811015610ee357600080fd5b505190505b8015610f325760408051858152600160a060020a038516602082015281517fcb8f0f32182a0f756b1e065dab832c24d2c48fa533912c33552252a7f25bf4ae929181900390910190a15b8091505b5092915050565b604080517f6f776e657200000000000000000000000000000000000000000000000000000081528151908190036005019020600090815260046020522054600160a060020a03828116911614919050565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c01902060009081526004602052208054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b60008061100461055a565b905080600160a060020a031663fa81b2006040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b5051600160a060020a0384811691161480156110f1575080600160a060020a031663379fed9a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b5051155b93925050505600a165627a7a7230582071861f036d24f65b11c0e38c38172c6e1dbb207597888d31db3ce2ce5688207a0029