More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BridgeValidators
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
byzantium EvmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-01-17 */ // File: contracts/upgradeability/EternalStorage.sol pragma solidity 0.4.24; /** * @title EternalStorage * @dev This contract holds all the necessary state variables to carry out the storage of any contract. */ contract EternalStorage { 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; } // File: contracts/interfaces/IUpgradeabilityOwnerStorage.sol pragma solidity 0.4.24; interface IUpgradeabilityOwnerStorage { function upgradeabilityOwner() external view returns (address); } // File: contracts/upgradeable_contracts/Ownable.sol pragma solidity 0.4.24; /** * @title Ownable * @dev This contract has an owner address providing basic authorization control */ contract Ownable is EternalStorage { bytes4 internal constant UPGRADEABILITY_OWNER = 0x6fde8202; // upgradeabilityOwner() /** * @dev Event to show ownership has been transferred * @param previousOwner representing the address of the previous owner * @param newOwner representing the address of the new owner */ event OwnershipTransferred(address previousOwner, address newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner()); /* solcov ignore next */ _; } /** * @dev Throws if called by any account other than contract itself or owner. */ modifier onlyRelevantSender() { // proxy owner if used through proxy, address(0) otherwise require( !address(this).call(abi.encodeWithSelector(UPGRADEABILITY_OWNER)) || // covers usage without calling through storage proxy msg.sender == IUpgradeabilityOwnerStorage(this).upgradeabilityOwner() || // covers usage through regular proxy calls msg.sender == address(this) // covers calls through upgradeAndCall proxy method ); /* solcov ignore next */ _; } bytes32 internal constant OWNER = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0; // keccak256(abi.encodePacked("owner")) /** * @dev Tells the address of the owner * @return the address of the owner */ function owner() public view returns (address) { return addressStorage[OWNER]; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner the address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); setOwner(newOwner); } /** * @dev Sets a new owner address */ function setOwner(address newOwner) internal { emit OwnershipTransferred(owner(), newOwner); addressStorage[OWNER] = newOwner; } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } // File: contracts/upgradeable_contracts/Initializable.sol pragma solidity 0.4.24; contract Initializable is EternalStorage { bytes32 internal constant INITIALIZED = 0x0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba; // keccak256(abi.encodePacked("isInitialized")) function setInitialize() internal { boolStorage[INITIALIZED] = true; } function isInitialized() public view returns (bool) { return boolStorage[INITIALIZED]; } } // File: contracts/upgradeable_contracts/InitializableBridge.sol pragma solidity 0.4.24; contract InitializableBridge is Initializable { bytes32 internal constant DEPLOYED_AT_BLOCK = 0xb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b0; // keccak256(abi.encodePacked("deployedAtBlock")) function deployedAtBlock() external view returns (uint256) { return uintStorage[DEPLOYED_AT_BLOCK]; } } // File: contracts/upgradeable_contracts/BaseBridgeValidators.sol pragma solidity 0.4.24; contract BaseBridgeValidators is InitializableBridge, Ownable { using SafeMath for uint256; address public constant F_ADDR = 0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF; uint256 internal constant MAX_VALIDATORS = 50; bytes32 internal constant REQUIRED_SIGNATURES = 0xd18ea17c351d6834a0e568067fb71804d2a588d5e26d60f792b1c724b1bd53b1; // keccak256(abi.encodePacked("requiredSignatures")) bytes32 internal constant VALIDATOR_COUNT = 0x8656d603d9f985c3483946a92789d52202f49736384ba131cb92f62c4c1aa082; // keccak256(abi.encodePacked("validatorCount")) event ValidatorAdded(address indexed validator); event ValidatorRemoved(address indexed validator); event RequiredSignaturesChanged(uint256 requiredSignatures); function setRequiredSignatures(uint256 _requiredSignatures) external onlyOwner { require(validatorCount() >= _requiredSignatures); require(_requiredSignatures != 0); uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures; emit RequiredSignaturesChanged(_requiredSignatures); } function getBridgeValidatorsInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); } function validatorList() external view returns (address[]) { address[] memory list = new address[](validatorCount()); uint256 counter = 0; address nextValidator = getNextValidator(F_ADDR); require(nextValidator != address(0)); while (nextValidator != F_ADDR) { list[counter] = nextValidator; nextValidator = getNextValidator(nextValidator); counter++; require(nextValidator != address(0)); } return list; } function _addValidator(address _validator) internal { require(_validator != address(0) && _validator != F_ADDR); require(!isValidator(_validator)); address firstValidator = getNextValidator(F_ADDR); require(firstValidator != address(0)); setNextValidator(_validator, firstValidator); setNextValidator(F_ADDR, _validator); setValidatorCount(validatorCount().add(1)); } function _removeValidator(address _validator) internal { require(validatorCount() > requiredSignatures()); require(isValidator(_validator)); address validatorsNext = getNextValidator(_validator); address index = F_ADDR; address next = getNextValidator(index); require(next != address(0)); while (next != _validator) { index = next; next = getNextValidator(index); require(next != F_ADDR && next != address(0)); } setNextValidator(index, validatorsNext); deleteItemFromAddressStorage("validatorsList", _validator); setValidatorCount(validatorCount().sub(1)); } function requiredSignatures() public view returns (uint256) { return uintStorage[REQUIRED_SIGNATURES]; } function validatorCount() public view returns (uint256) { return uintStorage[VALIDATOR_COUNT]; } function isValidator(address _validator) public view returns (bool) { return _validator != F_ADDR && getNextValidator(_validator) != address(0); } function getNextValidator(address _address) public view returns (address) { return addressStorage[keccak256(abi.encodePacked("validatorsList", _address))]; } function deleteItemFromAddressStorage(string _mapName, address _address) internal { delete addressStorage[keccak256(abi.encodePacked(_mapName, _address))]; } function setValidatorCount(uint256 _validatorCount) internal { require(_validatorCount <= MAX_VALIDATORS); uintStorage[VALIDATOR_COUNT] = _validatorCount; } function setNextValidator(address _prevValidator, address _validator) internal { addressStorage[keccak256(abi.encodePacked("validatorsList", _prevValidator))] = _validator; } function isValidatorDuty(address _validator) external view returns (bool) { uint256 counter = 0; address next = getNextValidator(F_ADDR); require(next != address(0)); while (next != F_ADDR) { if (next == _validator) { return (block.number % validatorCount() == counter); } next = getNextValidator(next); counter++; require(next != address(0)); } return false; } } // File: contracts/upgradeable_contracts/BridgeValidators.sol pragma solidity 0.4.24; contract BridgeValidators is BaseBridgeValidators { function initialize(uint256 _requiredSignatures, address[] _initialValidators, address _owner) external onlyRelevantSender returns (bool) { require(!isInitialized()); require(_owner != address(0)); setOwner(_owner); require(_requiredSignatures != 0); require(_initialValidators.length >= _requiredSignatures); for (uint256 i = 0; i < _initialValidators.length; i++) { require(_initialValidators[i] != address(0) && _initialValidators[i] != F_ADDR); require(!isValidator(_initialValidators[i])); if (i == 0) { setNextValidator(F_ADDR, _initialValidators[i]); if (_initialValidators.length == 1) { setNextValidator(_initialValidators[i], F_ADDR); } } else if (i == _initialValidators.length - 1) { setNextValidator(_initialValidators[i - 1], _initialValidators[i]); setNextValidator(_initialValidators[i], F_ADDR); } else { setNextValidator(_initialValidators[i - 1], _initialValidators[i]); } emit ValidatorAdded(_initialValidators[i]); } setValidatorCount(_initialValidators.length); uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures; uintStorage[DEPLOYED_AT_BLOCK] = block.number; setInitialize(); emit RequiredSignaturesChanged(_requiredSignatures); return isInitialized(); } function addValidator(address _validator) external onlyOwner { _addValidator(_validator); emit ValidatorAdded(_validator); } function removeValidator(address _validator) external onlyOwner { _removeValidator(_validator); emit ValidatorRemoved(_validator); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"validatorCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBridgeValidatorsInterfacesVersion","outputs":[{"name":"major","type":"uint64"},{"name":"minor","type":"uint64"},{"name":"patch","type":"uint64"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_validator","type":"address"}],"name":"removeValidator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_validator","type":"address"}],"name":"addValidator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_requiredSignatures","type":"uint256"},{"name":"_initialValidators","type":"address[]"},{"name":"_owner","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"validatorList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_requiredSignatures","type":"uint256"}],"name":"setRequiredSignatures","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requiredSignatures","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getNextValidator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_validator","type":"address"}],"name":"isValidatorDuty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedAtBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"F_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_validator","type":"address"}],"name":"isValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"validator","type":"address"}],"name":"ValidatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"validator","type":"address"}],"name":"ValidatorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"requiredSignatures","type":"uint256"}],"name":"RequiredSignaturesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b5061134a806100206000396000f3006080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630f43a67781146100ea5780632bda4eee14610111578063392e53cd1461015257806340a141ff1461017b5780634d238c8e1461019e57806352af719f146101bf5780635890ef79146101ef5780637d2b9cc0146102545780638d0680431461026c5780638d37052c146102815780638da5cb5b146102be5780638e4ec60a146102d35780639a454b99146102f4578063c794c76914610309578063f2fde38b1461031e578063facd743b1461033f575b600080fd5b3480156100f657600080fd5b506100ff610360565b60408051918252519081900360200190f35b34801561011d57600080fd5b506101266103ae565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561015e57600080fd5b506101676103b9565b604080519115158252519081900360200190f35b34801561018757600080fd5b5061019c600160a060020a036004351661040a565b005b3480156101aa57600080fd5b5061019c600160a060020a0360043516610466565b3480156101cb57600080fd5b50610167600480359060248035908101910135600160a060020a03604435166104c2565b3480156101fb57600080fd5b5061020461090d565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610240578181015183820152602001610228565b505050509050019250505060405180910390f35b34801561026057600080fd5b5061019c6004356109db565b34801561027857600080fd5b506100ff610a9d565b34801561028d57600080fd5b506102a2600160a060020a0360043516610aeb565b60408051600160a060020a039092168252519081900360200190f35b3480156102ca57600080fd5b506102a2610bd3565b3480156102df57600080fd5b50610167600160a060020a0360043516610c2a565b34801561030057600080fd5b506100ff610cd2565b34801561031557600080fd5b506102a2610d20565b34801561032a57600080fd5b5061019c600160a060020a0360043516610d2b565b34801561034b57600080fd5b50610167600160a060020a0360043516610d68565b7f8656d603d9f985c3483946a92789d52202f49736384ba131cb92f62c4c1aa08260009081526020527f95d17efd9f452ee83a125e41a6180e225f2e2ff7d47d2c1f6cd9b2e14a207ba15490565b600260036000909192565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc5460ff1690565b610412610bd3565b600160a060020a0316331461042657600080fd5b61042f81610d9b565b604051600160a060020a038216907fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f190600090a250565b61046e610bd3565b600160a060020a0316331461048257600080fd5b61048b81610ec5565b604051600160a060020a038216907fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498790600090a250565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fde8202000000000000000000000000000000000000000000000000000000001781529151815160009384933093909290918291808383895b8381101561054657818101518382015260200161052e565b50505050905090810190601f1680156105735780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af1915050158061061e575030600160a060020a0316636fde82026040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156105e657600080fd5b505af11580156105fa573d6000803e3d6000fd5b505050506040513d602081101561061057600080fd5b5051600160a060020a031633145b8061062857503330145b151561063357600080fd5b61063b6103b9565b1561064557600080fd5b600160a060020a038316151561065a57600080fd5b61066383610f68565b85151561066f57600080fd5b8584101561067c57600080fd5b5060005b8381101561084657600085858381811061069657fe5b90506020020135600160a060020a0316600160a060020a0316141580156106e85750600160a060020a038585838181106106cc57fe5b90506020020135600160a060020a0316600160a060020a031614155b15156106f357600080fd5b61071785858381811061070257fe5b90506020020135600160a060020a0316610d68565b1561072157600080fd5b80151561078e57610754600160a060020a0386868481811061073f57fe5b90506020020135600160a060020a031661102a565b60018414156107895761078985858381811061076c57fe5b90506020020135600160a060020a0316600160a060020a0361102a565b6107ed565b60001984018114156107da576107cb858560001984018181106107ad57fe5b90506020020135600160a060020a0316868684818110151561073f57fe5b61078985858381811061076c57fe5b6107ed858560001984018181106107ad57fe5b8484828181106107f957fe5b90506020020135600160a060020a0316600160a060020a03167fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498760405160405180910390a2600101610680565b61084f84611131565b600060208190527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc8790557fb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b09052437fe66bef0282a446f9848e2903380099bb6e431483ee78778868f33b4a154c818b556108c861118c565b6040805187815290517f10dbc913050d3180c3b99f7da91fd514af7cbc9c1bb59a0da5d2bc38f0cf395a9181900360200190a16109036103b9565b9695505050505050565b60608060008061091b610360565b604051908082528060200260200182016040528015610944578160200160208202803883390190505b5092506000915061095b600160a060020a03610aeb565b9050600160a060020a038116151561097257600080fd5b600160a060020a03818116146109d35780838381518110151561099157fe5b600160a060020a039092166020928302909101909101526109b181610aeb565b6001909201919050600160a060020a03811615156109ce57600080fd5b610972565b509092915050565b6109e3610bd3565b600160a060020a031633146109f757600080fd5b80610a00610360565b1015610a0b57600080fd5b801515610a1757600080fd5b7fd18ea17c351d6834a0e568067fb71804d2a588d5e26d60f792b1c724b1bd53b1600090815260209081527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc8290556040805183815290517f10dbc913050d3180c3b99f7da91fd514af7cbc9c1bb59a0da5d2bc38f0cf395a929181900390910190a150565b7fd18ea17c351d6834a0e568067fb71804d2a588d5e26d60f792b1c724b1bd53b160009081526020527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc5490565b6000600260008360405160200180807f76616c696461746f72734c697374000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610b895780518252601f199092019160209182019101610b6a565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054600160a060020a031695945050505050565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e54600160a060020a031690565b60008080610c3e600160a060020a03610aeb565b9050600160a060020a0381161515610c5557600080fd5b600160a060020a0381811614610cc65783600160a060020a031681600160a060020a03161415610c9b5781610c88610360565b43811515610c9257fe5b06149250610ccb565b610ca481610aeb565b6001909201919050600160a060020a0381161515610cc157600080fd5b610c55565b600092505b5050919050565b7fb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b060009081526020527fe66bef0282a446f9848e2903380099bb6e431483ee78778868f33b4a154c818b5490565b600160a060020a0381565b610d33610bd3565b600160a060020a03163314610d4757600080fd5b600160a060020a0381161515610d5c57600080fd5b610d6581610f68565b50565b6000600160a060020a0382811614801590610d9557506000610d8983610aeb565b600160a060020a031614155b92915050565b6000806000610da8610a9d565b610db0610360565b11610dba57600080fd5b610dc384610d68565b1515610dce57600080fd5b610dd784610aeb565b9250600160a060020a039150610dec82610aeb565b9050600160a060020a0381161515610e0357600080fd5b600160a060020a0381811690851614610e5557809150610e2282610aeb565b9050600160a060020a0380821614801590610e455750600160a060020a03811615155b1515610e5057600080fd5b610e03565b610e5f828461102a565b610e9e6040805190810160405280600e81526020017f76616c696461746f72734c697374000000000000000000000000000000000000815250856111e3565b610ebf610eba6001610eae610360565b9063ffffffff6112ff16565b611131565b50505050565b6000600160a060020a03821615801590610ee85750600160a060020a0382811614155b1515610ef357600080fd5b610efc82610d68565b15610f0657600080fd5b610f16600160a060020a03610aeb565b9050600160a060020a0381161515610f2d57600080fd5b610f37828261102a565b610f48600160a060020a038361102a565b610f64610eba6001610f58610360565b9063ffffffff61131116565b5050565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0610f91610bd3565b60408051600160a060020a03928316815291841660208301528051918290030190a17f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b80600260008460405160200180807f76616c696461746f72734c697374000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106110c75780518252601f1990920191602091820191016110a8565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0395909516949094179093555050505050565b603281111561113f57600080fd5b7f8656d603d9f985c3483946a92789d52202f49736384ba131cb92f62c4c1aa08260009081526020527f95d17efd9f452ee83a125e41a6180e225f2e2ff7d47d2c1f6cd9b2e14a207ba155565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc805460ff19166001179055565b6002600083836040516020018083805190602001908083835b6020831061121b5780518252601f1990920191602091820191016111fc565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112a65780518252601f199092019160209182019101611287565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff191690555050505050565b60008282111561130b57fe5b50900390565b81810182811015610d9557fe00a165627a7a72305820011d82060dd3ecd5ce075ef65357c66360a3de8a3b00c67fbacbf6b547c0b5be0029
Deployed Bytecode
0x6080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630f43a67781146100ea5780632bda4eee14610111578063392e53cd1461015257806340a141ff1461017b5780634d238c8e1461019e57806352af719f146101bf5780635890ef79146101ef5780637d2b9cc0146102545780638d0680431461026c5780638d37052c146102815780638da5cb5b146102be5780638e4ec60a146102d35780639a454b99146102f4578063c794c76914610309578063f2fde38b1461031e578063facd743b1461033f575b600080fd5b3480156100f657600080fd5b506100ff610360565b60408051918252519081900360200190f35b34801561011d57600080fd5b506101266103ae565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561015e57600080fd5b506101676103b9565b604080519115158252519081900360200190f35b34801561018757600080fd5b5061019c600160a060020a036004351661040a565b005b3480156101aa57600080fd5b5061019c600160a060020a0360043516610466565b3480156101cb57600080fd5b50610167600480359060248035908101910135600160a060020a03604435166104c2565b3480156101fb57600080fd5b5061020461090d565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610240578181015183820152602001610228565b505050509050019250505060405180910390f35b34801561026057600080fd5b5061019c6004356109db565b34801561027857600080fd5b506100ff610a9d565b34801561028d57600080fd5b506102a2600160a060020a0360043516610aeb565b60408051600160a060020a039092168252519081900360200190f35b3480156102ca57600080fd5b506102a2610bd3565b3480156102df57600080fd5b50610167600160a060020a0360043516610c2a565b34801561030057600080fd5b506100ff610cd2565b34801561031557600080fd5b506102a2610d20565b34801561032a57600080fd5b5061019c600160a060020a0360043516610d2b565b34801561034b57600080fd5b50610167600160a060020a0360043516610d68565b7f8656d603d9f985c3483946a92789d52202f49736384ba131cb92f62c4c1aa08260009081526020527f95d17efd9f452ee83a125e41a6180e225f2e2ff7d47d2c1f6cd9b2e14a207ba15490565b600260036000909192565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc5460ff1690565b610412610bd3565b600160a060020a0316331461042657600080fd5b61042f81610d9b565b604051600160a060020a038216907fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f190600090a250565b61046e610bd3565b600160a060020a0316331461048257600080fd5b61048b81610ec5565b604051600160a060020a038216907fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498790600090a250565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fde8202000000000000000000000000000000000000000000000000000000001781529151815160009384933093909290918291808383895b8381101561054657818101518382015260200161052e565b50505050905090810190601f1680156105735780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af1915050158061061e575030600160a060020a0316636fde82026040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156105e657600080fd5b505af11580156105fa573d6000803e3d6000fd5b505050506040513d602081101561061057600080fd5b5051600160a060020a031633145b8061062857503330145b151561063357600080fd5b61063b6103b9565b1561064557600080fd5b600160a060020a038316151561065a57600080fd5b61066383610f68565b85151561066f57600080fd5b8584101561067c57600080fd5b5060005b8381101561084657600085858381811061069657fe5b90506020020135600160a060020a0316600160a060020a0316141580156106e85750600160a060020a038585838181106106cc57fe5b90506020020135600160a060020a0316600160a060020a031614155b15156106f357600080fd5b61071785858381811061070257fe5b90506020020135600160a060020a0316610d68565b1561072157600080fd5b80151561078e57610754600160a060020a0386868481811061073f57fe5b90506020020135600160a060020a031661102a565b60018414156107895761078985858381811061076c57fe5b90506020020135600160a060020a0316600160a060020a0361102a565b6107ed565b60001984018114156107da576107cb858560001984018181106107ad57fe5b90506020020135600160a060020a0316868684818110151561073f57fe5b61078985858381811061076c57fe5b6107ed858560001984018181106107ad57fe5b8484828181106107f957fe5b90506020020135600160a060020a0316600160a060020a03167fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498760405160405180910390a2600101610680565b61084f84611131565b600060208190527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc8790557fb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b09052437fe66bef0282a446f9848e2903380099bb6e431483ee78778868f33b4a154c818b556108c861118c565b6040805187815290517f10dbc913050d3180c3b99f7da91fd514af7cbc9c1bb59a0da5d2bc38f0cf395a9181900360200190a16109036103b9565b9695505050505050565b60608060008061091b610360565b604051908082528060200260200182016040528015610944578160200160208202803883390190505b5092506000915061095b600160a060020a03610aeb565b9050600160a060020a038116151561097257600080fd5b600160a060020a03818116146109d35780838381518110151561099157fe5b600160a060020a039092166020928302909101909101526109b181610aeb565b6001909201919050600160a060020a03811615156109ce57600080fd5b610972565b509092915050565b6109e3610bd3565b600160a060020a031633146109f757600080fd5b80610a00610360565b1015610a0b57600080fd5b801515610a1757600080fd5b7fd18ea17c351d6834a0e568067fb71804d2a588d5e26d60f792b1c724b1bd53b1600090815260209081527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc8290556040805183815290517f10dbc913050d3180c3b99f7da91fd514af7cbc9c1bb59a0da5d2bc38f0cf395a929181900390910190a150565b7fd18ea17c351d6834a0e568067fb71804d2a588d5e26d60f792b1c724b1bd53b160009081526020527f8a247e09a5673bd4d93a4e76d8fb9553523aa0d77f51f3d576e7421f5295b9bc5490565b6000600260008360405160200180807f76616c696461746f72734c697374000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610b895780518252601f199092019160209182019101610b6a565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054600160a060020a031695945050505050565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e54600160a060020a031690565b60008080610c3e600160a060020a03610aeb565b9050600160a060020a0381161515610c5557600080fd5b600160a060020a0381811614610cc65783600160a060020a031681600160a060020a03161415610c9b5781610c88610360565b43811515610c9257fe5b06149250610ccb565b610ca481610aeb565b6001909201919050600160a060020a0381161515610cc157600080fd5b610c55565b600092505b5050919050565b7fb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b060009081526020527fe66bef0282a446f9848e2903380099bb6e431483ee78778868f33b4a154c818b5490565b600160a060020a0381565b610d33610bd3565b600160a060020a03163314610d4757600080fd5b600160a060020a0381161515610d5c57600080fd5b610d6581610f68565b50565b6000600160a060020a0382811614801590610d9557506000610d8983610aeb565b600160a060020a031614155b92915050565b6000806000610da8610a9d565b610db0610360565b11610dba57600080fd5b610dc384610d68565b1515610dce57600080fd5b610dd784610aeb565b9250600160a060020a039150610dec82610aeb565b9050600160a060020a0381161515610e0357600080fd5b600160a060020a0381811690851614610e5557809150610e2282610aeb565b9050600160a060020a0380821614801590610e455750600160a060020a03811615155b1515610e5057600080fd5b610e03565b610e5f828461102a565b610e9e6040805190810160405280600e81526020017f76616c696461746f72734c697374000000000000000000000000000000000000815250856111e3565b610ebf610eba6001610eae610360565b9063ffffffff6112ff16565b611131565b50505050565b6000600160a060020a03821615801590610ee85750600160a060020a0382811614155b1515610ef357600080fd5b610efc82610d68565b15610f0657600080fd5b610f16600160a060020a03610aeb565b9050600160a060020a0381161515610f2d57600080fd5b610f37828261102a565b610f48600160a060020a038361102a565b610f64610eba6001610f58610360565b9063ffffffff61131116565b5050565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0610f91610bd3565b60408051600160a060020a03928316815291841660208301528051918290030190a17f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b80600260008460405160200180807f76616c696461746f72734c697374000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106110c75780518252601f1990920191602091820191016110a8565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0395909516949094179093555050505050565b603281111561113f57600080fd5b7f8656d603d9f985c3483946a92789d52202f49736384ba131cb92f62c4c1aa08260009081526020527f95d17efd9f452ee83a125e41a6180e225f2e2ff7d47d2c1f6cd9b2e14a207ba155565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc805460ff19166001179055565b6002600083836040516020018083805190602001908083835b6020831061121b5780518252601f1990920191602091820191016111fc565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112a65780518252601f199092019160209182019101611287565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff191690555050505050565b60008282111561130b57fe5b50900390565b81810182811015610d9557fe00a165627a7a72305820011d82060dd3ecd5ce075ef65357c66360a3de8a3b00c67fbacbf6b547c0b5be0029
Swarm Source
bzzr://011d82060dd3ecd5ce075ef65357c66360a3de8a3b00c67fbacbf6b547c0b5be
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 97.69% | $0.034387 | 33,410,012.7154 | $1,148,872.04 | |
BSC | 1.46% | $3,322.87 | 5.1656 | $17,164.64 | |
BSC | 0.31% | $1 | 3,636.4698 | $3,637.26 | |
BSC | 0.18% | $0.999154 | 2,121.1061 | $2,119.31 | |
BSC | 0.09% | $1 | 1,048.4149 | $1,048.63 | |
BSC | 0.06% | $25.89 | 29.2498 | $757.22 | |
BSC | 0.04% | $690.16 | 0.7129 | $492.04 | |
BSC | 0.04% | $0.361086 | 1,252.4101 | $452.23 | |
BSC | 0.04% | $6.15 | 69.8879 | $430.07 | |
BSC | 0.03% | $1 | 314.5968 | $314.74 | |
BSC | 0.02% | $0.005133 | 43,289.667 | $222.19 | |
BSC | 0.01% | $94,709.25 | 0.00151713 | $143.69 | |
BSC | <0.01% | $104,783.98 | 0.0010989 | $115.15 | |
BSC | <0.01% | $0.000021 | 4,251,599.145 | $88.37 | |
BSC | <0.01% | $5.98 | 6.2799 | $37.55 | |
BSC | <0.01% | $293.66 | 0.1068 | $31.36 | |
BSC | <0.01% | $0.051216 | 408.0977 | $20.9 | |
BSC | <0.01% | $0.000544 | 34,965 | $19.01 | |
BSC | <0.01% | $0.003532 | 5,203.0161 | $18.38 | |
BSC | <0.01% | $0.001922 | 8,926.6242 | $17.15 | |
BSC | <0.01% | $0.000424 | 31,968 | $13.55 | |
BSC | <0.01% | $2.62 | 5.1338 | $13.45 | |
BSC | <0.01% | $0.449276 | 17.5183 | $7.87 | |
BSC | <0.01% | $0.03386 | 139.6155 | $4.73 | |
BSC | <0.01% | $0.002768 | 1,090.5639 | $3.02 | |
BSC | <0.01% | $0.009073 | 296.4095 | $2.69 | |
BSC | <0.01% | $2.18 | 1.0159 | $2.21 | |
BSC | <0.01% | $0.001978 | 1,010.6903 | $2 | |
BSC | <0.01% | $0.002715 | 540.9282 | $1.47 | |
BSC | <0.01% | $0.344605 | 3.007 | $1.04 | |
BSC | <0.01% | $0.000155 | 6,570.4613 | $1.02 | |
BSC | <0.01% | $1 | 0.999 | $1 | |
BSC | <0.01% | $0.000001 | 999,000.6562 | $0.7184 | |
BSC | <0.01% | $0.001996 | 249.5003 | $0.498 | |
BSC | <0.01% | $0.000412 | 999 | $0.4116 | |
BSC | <0.01% | $6.86 | 0.0349 | $0.2395 | |
BSC | <0.01% | $0.017912 | 10.9596 | $0.1963 | |
BSC | <0.01% | $0.008061 | 19.98 | $0.161 | |
BSC | <0.01% | $0.000015 | 9,739.251 | $0.1464 | |
ETH | <0.01% | <$0.000001 | 46,303,768.0243 | $0.531 |
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.