Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ForeignBridge
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-12-04 */ pragma solidity 0.4.24; // File: contracts/ERC677Receiver.sol contract ERC677Receiver { function onTokenTransfer(address _from, uint _value, bytes _data) external returns(bool); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/ERC677.sol contract ERC677 is ERC20 { event Transfer(address indexed from, address indexed to, uint value, bytes data); function transferAndCall(address, uint, bytes) external returns (bool); } // File: contracts/IBurnableMintableERC677Token.sol contract IBurnableMintableERC677Token is ERC677 { function mint(address, uint256) public returns (bool); function burn(uint256 _value) public; function claimTokens(address _token, address _to) public; } // File: contracts/IBridgeValidators.sol interface IBridgeValidators { function isValidator(address _validator) public view returns(bool); function requiredSignatures() public view returns(uint256); function owner() public view returns(address); } // File: contracts/libraries/Message.sol library Message { // function uintToString(uint256 inputValue) internal pure returns (string) { // // figure out the length of the resulting string // uint256 length = 0; // uint256 currentValue = inputValue; // do { // length++; // currentValue /= 10; // } while (currentValue != 0); // // allocate enough memory // bytes memory result = new bytes(length); // // construct the string backwards // uint256 i = length - 1; // currentValue = inputValue; // do { // result[i--] = byte(48 + currentValue % 10); // currentValue /= 10; // } while (currentValue != 0); // return string(result); // } function addressArrayContains(address[] array, address value) internal pure returns (bool) { for (uint256 i = 0; i < array.length; i++) { if (array[i] == value) { return true; } } return false; } // layout of message :: bytes: // offset 0: 32 bytes :: uint256 - message length // offset 32: 20 bytes :: address - recipient address // offset 52: 32 bytes :: uint256 - value // offset 84: 32 bytes :: bytes32 - transaction hash // offset 116: 32 bytes :: uint256 - home gas price // bytes 1 to 32 are 0 because message length is stored as little endian. // mload always reads 32 bytes. // so we can and have to start reading recipient at offset 20 instead of 32. // if we were to read at 32 the address would contain part of value and be corrupted. // when reading from offset 20 mload will read 12 zero bytes followed // by the 20 recipient address bytes and correctly convert it into an address. // this saves some storage/gas over the alternative solution // which is padding address to 32 bytes and reading recipient at offset 32. // for more details see discussion in: // https://github.com/paritytech/parity-bridge/issues/61 function parseMessage(bytes message) internal pure returns(address recipient, uint256 amount, bytes32 txHash) { require(isMessageValid(message)); assembly { recipient := and(mload(add(message, 20)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) amount := mload(add(message, 52)) txHash := mload(add(message, 84)) } } function isMessageValid(bytes _msg) internal pure returns(bool) { return _msg.length == 116; } function recoverAddressFromSignedMessage(bytes signature, bytes message) internal pure returns (address) { require(signature.length == 65); bytes32 r; bytes32 s; bytes1 v; // solium-disable-next-line security/no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := mload(add(signature, 0x60)) } return ecrecover(hashMessage(message), uint8(v), r, s); } function hashMessage(bytes message) internal pure returns (bytes32) { bytes memory prefix = "\x19Ethereum Signed Message:\n"; // message is always 116 length string memory msgLength = "116"; return keccak256(prefix, msgLength, message); } function hasEnoughValidSignatures( bytes _message, uint8[] _vs, bytes32[] _rs, bytes32[] _ss, IBridgeValidators _validatorContract) internal view { require(isMessageValid(_message)); uint256 requiredSignatures = _validatorContract.requiredSignatures(); require(_vs.length >= requiredSignatures); bytes32 hash = hashMessage(_message); address[] memory encounteredAddresses = new address[](requiredSignatures); for (uint256 i = 0; i < requiredSignatures; i++) { address recoveredAddress = ecrecover(hash, _vs[i], _rs[i], _ss[i]); require(_validatorContract.isValidator(recoveredAddress)); if (addressArrayContains(encounteredAddresses, recoveredAddress)) { revert(); } encounteredAddresses[i] = recoveredAddress; } } } // File: contracts/libraries/SafeMath.sol /** * @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) { if (a == 0) { return 0; } uint256 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 c; } /** * @dev Substracts 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) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/upgradeability/EternalStorage.sol /** * @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/upgradeable_contracts/U_BasicBridge.sol contract BasicBridge is EternalStorage { event GasPriceChanged(uint256 gasPrice); event RequiredBlockConfirmationChanged(uint256 requiredBlockConfirmations); function validatorContract() public view returns(IBridgeValidators) { return IBridgeValidators(addressStorage[keccak256("validatorContract")]); } modifier onlyValidator() { require(validatorContract().isValidator(msg.sender)); _; } modifier onlyOwner() { require(validatorContract().owner() == msg.sender); _; } function setGasPrice(uint256 _gasPrice) public onlyOwner { require(_gasPrice > 0); uintStorage[keccak256("gasPrice")] = _gasPrice; emit GasPriceChanged(_gasPrice); } function gasPrice() public view returns(uint256) { return uintStorage[keccak256("gasPrice")]; } function setRequiredBlockConfirmations(uint256 _blockConfirmations) public onlyOwner { require(_blockConfirmations > 0); uintStorage[keccak256("requiredBlockConfirmations")] = _blockConfirmations; emit RequiredBlockConfirmationChanged(_blockConfirmations); } function requiredBlockConfirmations() public view returns(uint256) { return uintStorage[keccak256("requiredBlockConfirmations")]; } } // File: contracts/upgradeable_contracts/U_ForeignBridge.sol contract ForeignBridge is ERC677Receiver, BasicBridge { using SafeMath for uint256; /// triggered when relay of deposit from HomeBridge is complete event Deposit(address recipient, uint value, bytes32 transactionHash); /// Event created on money withdraw. event Withdraw(address recipient, uint256 value, uint256 homeGasPrice); /// Collected signatures which should be relayed to home chain. event CollectedSignatures(address authorityResponsibleForRelay, bytes32 messageHash); event GasConsumptionLimitsUpdated(uint256 gasLimitDepositRelay, uint256 gasLimitWithdrawConfirm); event SignedForDeposit(address indexed signer, bytes32 transactionHash); event SignedForWithdraw(address indexed signer, bytes32 messageHash); event DailyLimit(uint256 newLimit); event HomeDailyLimit(uint256 newLimit); function initialize( address _validatorContract, address _erc677token, uint256 _foreignDailyLimit, uint256 _maxPerTx, uint256 _minPerTx, uint256 _foreignGasPrice, uint256 _requiredBlockConfirmations ) public returns(bool) { require(!isInitialized()); require(_validatorContract != address(0)); require(_minPerTx > 0 && _maxPerTx > _minPerTx && _foreignDailyLimit > _maxPerTx); require(_foreignGasPrice > 0); addressStorage[keccak256("validatorContract")] = _validatorContract; setErc677token(_erc677token); uintStorage[keccak256("foreignDailyLimit")] = _foreignDailyLimit; uintStorage[keccak256("deployedAtBlock")] = block.number; uintStorage[keccak256("maxPerTx")] = _maxPerTx; uintStorage[keccak256("minPerTx")] = _minPerTx; uintStorage[keccak256("gasPrice")] = _foreignGasPrice; uintStorage[keccak256("requiredBlockConfirmations")] = _requiredBlockConfirmations; setInitialize(true); return isInitialized(); } function upgradeFrom1To2() public { require(!boolStorage[keccak256("isUpgradedFrom1To2")]); uintStorage[keccak256("homeDailyLimit")] = 3000000 ether; emit HomeDailyLimit(3000000 ether); uintStorage[keccak256("homeMaxPerTx")] = 1500000 ether; boolStorage[keccak256("isUpgradedFrom1To2")] = true; } function onTokenTransfer(address _from, uint256 _value, bytes /*_data*/) external returns(bool) { require(msg.sender == address(erc677token())); require(withinLimit(_value)); setTotalSpentPerDay(getCurrentDay(), totalSpentPerDay(getCurrentDay()).add(_value)); erc677token().burn(_value); emit Withdraw(_from, _value, gasPriceForCompensationAtHomeSide()); return true; } function setMaxPerTx(uint256 _maxPerTx) external onlyOwner { require(_maxPerTx < foreignDailyLimit()); uintStorage[keccak256("maxPerTx")] = _maxPerTx; } function setHomeMaxPerTx(uint256 _maxPerTx) external onlyOwner { require(_maxPerTx < homeDailyLimit()); uintStorage[keccak256("homeMaxPerTx")] = _maxPerTx; } function setMinPerTx(uint256 _minPerTx) external onlyOwner { require(_minPerTx < foreignDailyLimit() && _minPerTx < maxPerTx()); uintStorage[keccak256("minPerTx")] = _minPerTx; } function claimTokens(address _token, address _to) external onlyOwner { require(_to != address(0)); if (_token == address(0)) { _to.transfer(address(this).balance); return; } ERC20Basic token = ERC20Basic(_token); uint256 balance = token.balanceOf(this); require(token.transfer(_to, balance)); } function claimTokensFromErc677(address _token, address _to) external onlyOwner { erc677token().claimTokens(_token, _to); } function minPerTx() public view returns(uint256) { return uintStorage[keccak256("minPerTx")]; } function maxPerTx() public view returns(uint256) { return uintStorage[keccak256("maxPerTx")]; } function homeMaxPerTx() public view returns(uint256) { return uintStorage[keccak256("homeMaxPerTx")]; } function totalSpentPerDay(uint256 _day) public view returns(uint256) { return uintStorage[keccak256("totalSpentPerDay", _day)]; } function totalExecutedPerDay(uint256 _day) public view returns(uint256) { return uintStorage[keccak256("totalExecutedPerDay", _day)]; } function deployedAtBlock() public view returns(uint256) { return uintStorage[keccak256("deployedAtBlock")]; } function gasLimitDepositRelay() public view returns(uint256) { return uintStorage[keccak256("gasLimitDepositRelay")]; } function gasLimitWithdrawConfirm() public view returns(uint256) { return uintStorage[keccak256("gasLimitWithdrawConfirm")]; } function foreignDailyLimit() public view returns(uint256) { return uintStorage[keccak256("foreignDailyLimit")]; } function homeDailyLimit() public view returns(uint256) { return uintStorage[keccak256("homeDailyLimit")]; } function erc677token() public view returns(IBurnableMintableERC677Token) { return IBurnableMintableERC677Token(addressStorage[keccak256("erc677token")]); } function setGasLimits(uint256 _gasLimitDepositRelay, uint256 _gasLimitWithdrawConfirm) external onlyOwner { uintStorage[keccak256("gasLimitDepositRelay")] = _gasLimitDepositRelay; uintStorage[keccak256("gasLimitWithdrawConfirm")] = _gasLimitWithdrawConfirm; emit GasConsumptionLimitsUpdated(gasLimitDepositRelay(), gasLimitWithdrawConfirm()); } function deposit(address recipient, uint256 value, bytes32 transactionHash) external onlyValidator { bytes32 hashMsg = keccak256(recipient, value, transactionHash); bytes32 hashSender = keccak256(msg.sender, hashMsg); require(withinHomeLimit(value)); // Duplicated deposits require(!depositsSigned(hashSender)); setDepositsSigned(hashSender, true); uint256 signed = numDepositsSigned(hashMsg); require(!isAlreadyProcessed(signed)); // the check above assumes that the case when the value could be overflew will not happen in the addition operation below signed = signed + 1; setNumDepositsSigned(hashMsg, signed); emit SignedForDeposit(msg.sender, transactionHash); if (signed >= validatorContract().requiredSignatures()) { // If the bridge contract does not own enough tokens to transfer // it will couse funds lock on the home side of the bridge setTotalExecutedPerDay(getCurrentDay(), totalExecutedPerDay(getCurrentDay()).add(value)); setNumDepositsSigned(hashMsg, markAsProcessed(signed)); erc677token().mint(recipient, value); emit Deposit(recipient, value, transactionHash); } } /// Should be used as sync tool /// /// Message is a message that should be relayed to main chain once authorities sign it. /// /// for withdraw message contains: /// withdrawal recipient (bytes20) /// withdrawal value (uint) /// foreign transaction hash (bytes32) // to avoid transaction duplication function submitSignature(bytes signature, bytes message) external onlyValidator { // ensure that `signature` is really `message` signed by `msg.sender` require(Message.isMessageValid(message)); require(msg.sender == Message.recoverAddressFromSignedMessage(signature, message)); bytes32 hashMsg = keccak256(message); bytes32 hashSender = keccak256(msg.sender, hashMsg); uint256 signed = numMessagesSigned(hashMsg); require(!isAlreadyProcessed(signed)); // the check above assumes that the case when the value could be overflew will not happen in the addition operation below signed = signed + 1; if (signed > 1) { // Duplicated signatures require(!messagesSigned(hashSender)); } else { setMessages(hashMsg, message); } setMessagesSigned(hashSender, true); bytes32 signIdx = keccak256(hashMsg, (signed-1)); setSignatures(signIdx, signature); setNumMessagesSigned(hashMsg, signed); emit SignedForWithdraw(msg.sender, hashMsg); if (signed >= validatorContract().requiredSignatures()) { setNumMessagesSigned(hashMsg, markAsProcessed(signed)); emit CollectedSignatures(msg.sender, hashMsg); } } function gasPriceForCompensationAtHomeSide() public pure returns(uint256) { return 1000000000 wei; } function isAlreadyProcessed(uint256 _number) public pure returns(bool) { return _number & 2**255 == 2**255; } function signature(bytes32 _hash, uint256 _index) public view returns (bytes) { bytes32 signIdx = keccak256(_hash, _index); return signatures(signIdx); } /// Get message function message(bytes32 _hash) public view returns (bytes) { return messages(_hash); } function getCurrentDay() public view returns(uint256) { return now / 1 days; } function setForeignDailyLimit(uint256 _foreignDailyLimit) public onlyOwner { uintStorage[keccak256("foreignDailyLimit")] = _foreignDailyLimit; emit DailyLimit(_foreignDailyLimit); } function setHomeDailyLimit(uint256 _homeDailyLimit) external onlyOwner { uintStorage[keccak256("homeDailyLimit")] = _homeDailyLimit; emit HomeDailyLimit(_homeDailyLimit); } function withinLimit(uint256 _amount) public view returns(bool) { uint256 nextLimit = totalSpentPerDay(getCurrentDay()).add(_amount); return foreignDailyLimit() >= nextLimit && _amount <= maxPerTx() && _amount >= minPerTx(); } function withinHomeLimit(uint256 _amount) public view returns(bool) { uint256 nextLimit = totalExecutedPerDay(getCurrentDay()).add(_amount); return homeDailyLimit() >= nextLimit && _amount <= homeMaxPerTx(); } function isInitialized() public view returns(bool) { return boolStorage[keccak256("isInitialized")]; } function messages(bytes32 _hash) private view returns(bytes) { return bytesStorage[keccak256("messages", _hash)]; } function setMessages(bytes32 _hash, bytes _message) private { bytesStorage[keccak256("messages", _hash)] = _message; } function signatures(bytes32 _hash) private view returns(bytes) { return bytesStorage[keccak256("signatures", _hash)]; } function setSignatures(bytes32 _hash, bytes _signature) private { bytesStorage[keccak256("signatures", _hash)] = _signature; } function messagesSigned(bytes32 _message) public view returns(bool) { return boolStorage[keccak256("messagesSigned", _message)]; } function depositsSigned(bytes32 _deposit) public view returns(bool) { return boolStorage[keccak256("depositsSigned", _deposit)]; } function markAsProcessed(uint256 _v) private pure returns(uint256) { return _v | 2 ** 255; } function numMessagesSigned(bytes32 _message) private view returns(uint256) { return uintStorage[keccak256("numMessagesSigned", _message)]; } function numDepositsSigned(bytes32 _deposit) private view returns(uint256) { return uintStorage[keccak256("numDepositsSigned", _deposit)]; } function setMessagesSigned(bytes32 _hash, bool _status) private { boolStorage[keccak256("messagesSigned", _hash)] = _status; } function setDepositsSigned(bytes32 _deposit, bool _status) private { boolStorage[keccak256("depositsSigned", _deposit)] = _status; } function setNumMessagesSigned(bytes32 _message, uint256 _number) private { uintStorage[keccak256("numMessagesSigned", _message)] = _number; } function setNumDepositsSigned(bytes32 _deposit, uint256 _number) private { uintStorage[keccak256("numDepositsSigned", _deposit)] = _number; } function setTotalSpentPerDay(uint256 _day, uint256 _value) private { uintStorage[keccak256("totalSpentPerDay", _day)] = _value; } function setTotalExecutedPerDay(uint256 _day, uint256 _value) private { uintStorage[keccak256("totalExecutedPerDay", _day)] = _value; } function setErc677token(address _token) private { require(_token != address(0)); addressStorage[keccak256("erc677token")] = _token; } function setInitialize(bool _status) private { boolStorage[keccak256("isInitialized")] = _status; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_index","type":"uint256"}],"name":"signature","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc677token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"},{"name":"transactionHash","type":"bytes32"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"homeMaxPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_day","type":"uint256"}],"name":"totalSpentPerDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requiredBlockConfirmations","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"message","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_day","type":"uint256"}],"name":"totalExecutedPerDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gasLimitDepositRelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"signature","type":"bytes"},{"name":"message","type":"bytes"}],"name":"submitSignature","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxPerTx","type":"uint256"}],"name":"setHomeMaxPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_deposit","type":"bytes32"}],"name":"depositsSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gasLimitDepositRelay","type":"uint256"},{"name":"_gasLimitWithdrawConfirm","type":"uint256"}],"name":"setGasLimits","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"homeDailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foreignDailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_message","type":"bytes32"}],"name":"messagesSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"claimTokensFromErc677","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"validatorContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedAtBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minPerTx","type":"uint256"}],"name":"setMinPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"},{"name":"","type":"bytes"}],"name":"onTokenTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blockConfirmations","type":"uint256"}],"name":"setRequiredBlockConfirmations","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_homeDailyLimit","type":"uint256"}],"name":"setHomeDailyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasPriceForCompensationAtHomeSide","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_gasPrice","type":"uint256"}],"name":"setGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasLimitWithdrawConfirm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_foreignDailyLimit","type":"uint256"}],"name":"setForeignDailyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"upgradeFrom1To2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withinLimit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_validatorContract","type":"address"},{"name":"_erc677token","type":"address"},{"name":"_foreignDailyLimit","type":"uint256"},{"name":"_maxPerTx","type":"uint256"},{"name":"_minPerTx","type":"uint256"},{"name":"_foreignGasPrice","type":"uint256"},{"name":"_requiredBlockConfirmations","type":"uint256"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withinHomeLimit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_number","type":"uint256"}],"name":"isAlreadyProcessed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"transactionHash","type":"bytes32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"homeGasPrice","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"authorityResponsibleForRelay","type":"address"},{"indexed":false,"name":"messageHash","type":"bytes32"}],"name":"CollectedSignatures","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gasLimitDepositRelay","type":"uint256"},{"indexed":false,"name":"gasLimitWithdrawConfirm","type":"uint256"}],"name":"GasConsumptionLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"signer","type":"address"},{"indexed":false,"name":"transactionHash","type":"bytes32"}],"name":"SignedForDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"signer","type":"address"},{"indexed":false,"name":"messageHash","type":"bytes32"}],"name":"SignedForWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newLimit","type":"uint256"}],"name":"DailyLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newLimit","type":"uint256"}],"name":"HomeDailyLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gasPrice","type":"uint256"}],"name":"GasPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"requiredBlockConfirmations","type":"uint256"}],"name":"RequiredBlockConfirmationChanged","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50612b34806100206000396000f3006080604052600436106101c95763ffffffff60e060020a6000350416631812d99681146101ce57806318d8f9c91461025e57806326b3293f1461028f578063288b7ad8146102b85780632bd0bb05146102df578063392e53cd146102f75780633e6968b6146103205780633f0a9f6514610335578063490a32c61461034a5780634fb3fef71461036257806359292ef31461037a578063630cea8e1461038f57806363258462146103bb57806369ffa08a146103d357806379304063146103fa57806379f9cc7214610412578063857cfff91461042d5780638a2a60ef146104425780638f4b4b98146104575780639313dc431461046f57806399439089146104965780639a454b99146104ab578063a2a6ca27146104c0578063a4c0ed36146104d8578063acf5c68914610509578063b2355b4214610521578063bea7c13a14610539578063bf1fe4201461054e578063c4a1ee3714610566578063c6f6f2161461057b578063cbbc8a5114610593578063df25f3f0146105ab578063e1bb8044146105c0578063ea9f4968146105d5578063edbf4ac2146105ed578063f426d8ac14610623578063f968adbe1461063b578063fe173b9714610650578063ffd19e8c14610665575b600080fd5b3480156101da57600080fd5b506101e960043560243561067d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022357818101518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026a57600080fd5b506102736106aa565b60408051600160a060020a039092168252519081900360200190f35b34801561029b57600080fd5b506102b6600160a060020a03600435166024356044356106f5565b005b3480156102c457600080fd5b506102cd610a1e565b60408051918252519081900360200190f35b3480156102eb57600080fd5b506102cd600435610a5f565b34801561030357600080fd5b5061030c610aa9565b604080519115158252519081900360200190f35b34801561032c57600080fd5b506102cd610aed565b34801561034157600080fd5b506102cd610af6565b34801561035657600080fd5b506101e9600435610b37565b34801561036e57600080fd5b506102cd600435610b48565b34801561038657600080fd5b506102cd610b92565b34801561039b57600080fd5b506102b66024600480358281019290820135918135918201910135610bd3565b3480156103c757600080fd5b506102b6600435610f65565b3480156103df57600080fd5b506102b6600160a060020a036004358116906024351661103d565b34801561040657600080fd5b5061030c600435611262565b34801561041e57600080fd5b506102b66004356024356112af565b34801561043957600080fd5b506102cd6113fc565b34801561044e57600080fd5b506102cd61143d565b34801561046357600080fd5b5061030c60043561147e565b34801561047b57600080fd5b506102b6600160a060020a03600435811690602435166114cb565b3480156104a257600080fd5b506102736115d9565b3480156104b757600080fd5b506102cd611623565b3480156104cc57600080fd5b506102b6600435611664565b3480156104e457600080fd5b5061030c60048035600160a060020a0316906024803591604435918201910135611750565b34801561051557600080fd5b506102b660043561186b565b34801561052d57600080fd5b506102b6600435611973565b34801561054557600080fd5b506102cd611a6e565b34801561055a57600080fd5b506102b6600435611a76565b34801561057257600080fd5b506102cd611b7e565b34801561058757600080fd5b506102b6600435611bbf565b34801561059f57600080fd5b506102b6600435611c97565b3480156105b757600080fd5b506102cd611d92565b3480156105cc57600080fd5b506102b6611dd3565b3480156105e157600080fd5b5061030c600435611f2e565b3480156105f957600080fd5b5061030c600160a060020a036004358116906024351660443560643560843560a43560c435611f7a565b34801561062f57600080fd5b5061030c6004356121bf565b34801561064757600080fd5b506102cd6121f7565b34801561065c57600080fd5b506102cd612238565b34801561067157600080fd5b5061030c600435612279565b604080518381526020810183905281519081900390910190206060906106a2816122a1565b949350505050565b604080517f657263363737746f6b656e0000000000000000000000000000000000000000008152815190819003600b019020600090815260026020522054600160a060020a03165b90565b60008060006107026115d9565b600160a060020a031663facd743b336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b5051151561079357600080fd5b604080516c01000000000000000000000000600160a060020a03891681028252601480830189905260348084018990528451938490036054018420339093028452908301829052925191829003909201902090935091506107f3856121bf565b15156107fe57600080fd5b61080782611262565b1561081157600080fd5b61081c826001612377565b610825836123d3565b905061083081612279565b1561083a57600080fd5b600101610847838261241d565b60408051858152905133917f6a09111cb1bbfc898f36504afb4d5411d0dbef45f2c43fac5781e6b640b86a32919081900360200190a26108856115d9565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b50518110610a16576109246108ff610aed565b61091f8761091361090e610aed565b610b48565b9063ffffffff61246916565b612478565b61093683610931836124c4565b61241d565b61093e6106aa565b600160a060020a03166340c10f1987876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b505060408051600160a060020a03881681526020810187905280820186905290517f1a771fe656018364a9369da21954bb3081cb08b0196c27e43ca59c7cae8727379181900360600190a15b505050505050565b604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c01902060009081526020819052205490565b604080517f746f74616c5370656e74506572446179000000000000000000000000000000008152601081018390528151908190036030019020600090815260208190522054919050565b604080517f6973496e697469616c697a6564000000000000000000000000000000000000008152815190819003600d01902060009081526004602052205460ff1690565b62015180420490565b604080517f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008152815190819003601a01902060009081526020819052205490565b6060610b42826124e9565b92915050565b604080517f746f74616c4578656375746564506572446179000000000000000000000000008152601381018390528151908190036033019020600090815260208190522054919050565b604080517f6761734c696d69744465706f73697452656c61790000000000000000000000008152815190819003601401902060009081526020819052205490565b600080600080610be16115d9565b600160a060020a031663facd743b336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b505050506040513d6020811015610c6557600080fd5b50511515610c7257600080fd5b610cab86868080601f01602080910402602001604051908101604052809392919081815260200183838082843750612588945050505050565b1515610cb657600080fd5b610d1d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375050604080516020601f8e018190048102820181019092528c815294508c93508b925082915084018382808284375061258f945050505050565b600160a060020a03163314610d3157600080fd5b858560405180838380828437604080519190930181900381206c0100000000000000000000000033028252601482018190529251908190036034019020919850909650610d84935087925061264f915050565b9150610d8f82612279565b15610d9957600080fd5b600191820191821115610dbe57610daf8361147e565b15610db957600080fd5b610df8565b610df88487878080601f01602080910402602001604051908101604052809392919081815260200183838082843750612699945050505050565b610e038360016126f4565b5060408051848152600019830160208083019190915282519182900383018220601f8a01829004820283018201909352888252610e569183918b908b908190840183828082843750612750945050505050565b610e6084836127a6565b60408051858152905133917f962f785fc9b91edbed2fdad62c075258ee14d39bd29cd1e83c298a7bf26d5a65919081900360200190a2610e9e6115d9565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d6020811015610f0557600080fd5b50518210610f5b57610f1f84610f1a846124c4565b6127a6565b604080513381526020810186905281517feb043d149eedb81369bec43d4c3a3a53087debc88d2525f13bfaa3eecda28b5c929181900390910190a15b5050505050505050565b33610f6e6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b505050506040513d6020811015610fd557600080fd5b5051600160a060020a031614610fea57600080fd5b610ff26113fc565b8110610ffd57600080fd5b604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c019020600090815260208190522055565b600080336110496115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561108657600080fd5b505af115801561109a573d6000803e3d6000fd5b505050506040513d60208110156110b057600080fd5b5051600160a060020a0316146110c557600080fd5b600160a060020a03831615156110da57600080fd5b600160a060020a038416151561112657604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015611120573d6000803e3d6000fd5b5061125c565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b505050506040513d60208110156111b457600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b15801561122557600080fd5b505af1158015611239573d6000803e3d6000fd5b505050506040513d602081101561124f57600080fd5b5051151561125c57600080fd5b50505050565b604080517f6465706f736974735369676e65640000000000000000000000000000000000008152600e8101839052815190819003602e01902060009081526004602052205460ff16919050565b336112b86115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b505050506040513d602081101561131f57600080fd5b5051600160a060020a03161461133457600080fd5b604080517f6761734c696d69744465706f73697452656c617900000000000000000000000081528151908190036014018120600090815260208181528382208690557f6761734c696d69745769746864726177436f6e6669726d0000000000000000008352835192839003601701909220815290819052208190557f3b49a33ec45179ab3408f6f29a2b208c909ab1460e94af7558808ea22854c1066113d8610b92565b6113e0611b7e565b6040805192835260208301919091528051918290030190a15050565b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e01902060009081526020819052205490565b604080517f666f726569676e4461696c794c696d69740000000000000000000000000000008152815190819003601101902060009081526020819052205490565b604080517f6d657373616765735369676e65640000000000000000000000000000000000008152600e8101839052815190819003602e01902060009081526004602052205460ff16919050565b336114d46115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b5051600160a060020a03161461155057600080fd5b6115586106aa565b604080517f69ffa08a000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152915192909116916369ffa08a9160448082019260009290919082900301818387803b1580156115c557600080fd5b505af1158015610a16573d6000803e3d6000fd5b604080517f76616c696461746f72436f6e747261637400000000000000000000000000000081528151908190036011019020600090815260026020522054600160a060020a031690565b604080517f6465706c6f7965644174426c6f636b00000000000000000000000000000000008152815190819003600f01902060009081526020819052205490565b3361166d6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116aa57600080fd5b505af11580156116be573d6000803e3d6000fd5b505050506040513d60208110156116d457600080fd5b5051600160a060020a0316146116e957600080fd5b6116f161143d565b8110801561170557506117026121f7565b81105b151561171057600080fd5b604080517f6d696e506572547800000000000000000000000000000000000000000000000081528151908190036008019020600090815260208190522055565b600061175a6106aa565b600160a060020a0316331461176e57600080fd5b61177784611f2e565b151561178257600080fd5b6117a661178d610aed565b6117a18661091361179c610aed565b610a5f565b6127f2565b6117ae6106aa565b600160a060020a03166342966c68856040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688585611839611a6e565b60408051600160a060020a039094168452602084019290925282820152519081900360600190a1506001949350505050565b336118746115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b505050506040513d60208110156118db57600080fd5b5051600160a060020a0316146118f057600080fd5b600081116118fd57600080fd5b604080517f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008152815190819003601a018120600090815260208181529083902084905583825291517f4fb76205cd57c896b21511d2114137d8e901b4ccd659e1a0f97d6306795264fb929181900390910190a150565b3361197c6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119b957600080fd5b505af11580156119cd573d6000803e3d6000fd5b505050506040513d60208110156119e357600080fd5b5051600160a060020a0316146119f857600080fd5b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e018120600090815260208181529083902084905583825291517f7cbf6a47cd79c6fef9f0a89db1e9cdca2a3e93d84eae02a0232897b24524089e929181900390910190a150565b633b9aca0090565b33611a7f6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d6020811015611ae657600080fd5b5051600160a060020a031614611afb57600080fd5b60008111611b0857600080fd5b604080517f676173507269636500000000000000000000000000000000000000000000000081528151908190036008018120600090815260208181529083902084905583825291517f52264b89e0fceafb26e79fd49ef8a366eb6297483bf4035b027f0c99a7ad512e929181900390910190a150565b604080517f6761734c696d69745769746864726177436f6e6669726d0000000000000000008152815190819003601701902060009081526020819052205490565b33611bc86115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c0557600080fd5b505af1158015611c19573d6000803e3d6000fd5b505050506040513d6020811015611c2f57600080fd5b5051600160a060020a031614611c4457600080fd5b611c4c61143d565b8110611c5757600080fd5b604080517f6d6178506572547800000000000000000000000000000000000000000000000081528151908190036008019020600090815260208190522055565b33611ca06115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cdd57600080fd5b505af1158015611cf1573d6000803e3d6000fd5b505050506040513d6020811015611d0757600080fd5b5051600160a060020a031614611d1c57600080fd5b604080517f666f726569676e4461696c794c696d697400000000000000000000000000000081528151908190036011018120600090815260208181529083902084905583825291517f8d797628d21ca877e321aa59bc2d55eba59ae001c5294d433797019caebab2ab929181900390910190a150565b604080517f6d696e50657254780000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b604080517f6973557067726164656446726f6d31546f3200000000000000000000000000008152815190819003601201902060009081526004602052205460ff1615611e1e57600080fd5b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e01812060009081526020818152908390206a027b46536c66c8e300000090819055825291517f7cbf6a47cd79c6fef9f0a89db1e9cdca2a3e93d84eae02a0232897b24524089e929181900390910190a1604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c018120600090815260208181528382206a013da329b633647180000090557f6973557067726164656446726f6d31546f32000000000000000000000000000083528351928390036012019092208152600490915220805460ff19166001179055565b600080611f408361091361179c610aed565b905080611f4b61143d565b10158015611f605750611f5c6121f7565b8311155b8015611f735750611f6f611d92565b8310155b9392505050565b6000611f84610aa9565b15611f8e57600080fd5b600160a060020a0388161515611fa357600080fd5b600084118015611fb257508385115b8015611fbd57508486115b1515611fc857600080fd5b60008311611fd557600080fd5b604080517f76616c696461746f72436f6e74726163740000000000000000000000000000008152815190819003601101902060009081526002602052208054600160a060020a038a1673ffffffffffffffffffffffffffffffffffffffff199091161790556120438761283e565b604080517f666f726569676e4461696c794c696d697400000000000000000000000000000081528151908190036011018120600090815260208181528382208a90557f6465706c6f7965644174426c6f636b00000000000000000000000000000000008352835192839003600f01832082528181528382204390557f6d6178506572547800000000000000000000000000000000000000000000000083528351928390036008908101842083528282528483208a90557f6d696e506572547800000000000000000000000000000000000000000000000084528451938490038101842083528282528483208990557f6761735072696365000000000000000000000000000000000000000000000000845284519384900301832082528181528382208790557f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008352835192839003601a01909220815290819052208290556121ab60016128be565b6121b3610aa9565b98975050505050505050565b6000806121d18361091361090e610aed565b9050806121dc6113fc565b10158015611f7357506121ed610a1e565b9092111592915050565b604080517f6d617850657254780000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b604080517f67617350726963650000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b604080517f7369676e617475726573000000000000000000000000000000000000000000008152600a81018390528151602a9181900391909101812060009081526003602090815290839020805460026000196001831615610100020190911604601f8101839004830284018301909452838352606093909183018282801561236b5780601f106123405761010080835404028352916020019161236b565b820191906000526020600020905b81548152906001019060200180831161234e57829003601f168201915b50505050509050919050565b604080517f6465706f736974735369676e65640000000000000000000000000000000000008152600e810193909352805192839003602e019092206000908152600460205291909120805491151560ff19909216919091179055565b604080517f6e756d4465706f736974735369676e65640000000000000000000000000000008152601181018390528151908190036031019020600090815260208190522054919050565b604080517f6e756d4465706f736974735369676e656400000000000000000000000000000081526011810193909352805192839003603101909220600090815260208190529190912055565b600082820183811015611f7357fe5b604080517f746f74616c45786563757465645065724461790000000000000000000000000081526013810193909352805192839003603301909220600090815260208190529190912055565b7f80000000000000000000000000000000000000000000000000000000000000001790565b604080517f6d65737361676573000000000000000000000000000000000000000000000000815260088101839052815160289181900391909101812060009081526003602090815290839020805460026000196001831615610100020190911604601f8101839004830284018301909452838352606093909183018282801561236b5780601f106123405761010080835404028352916020019161236b565b5160741490565b600080600080855160411415156125a557600080fd5b50505060208301516040840151606085015160016125c28661290e565b60408051600080825260208083018085529490945260ff7f0100000000000000000000000000000000000000000000000000000000000000870416828401526060820188905260808201879052915160a08083019493601f198301938390039091019190865af115801561263a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080517f6e756d4d657373616765735369676e65640000000000000000000000000000008152601181018390528151908190036031019020600090815260208190522054919050565b604080517f6d65737361676573000000000000000000000000000000000000000000000000815260088101849052815190819003602801902060009081526003602090815291902082516126ef92840190612a70565b505050565b604080517f6d657373616765735369676e65640000000000000000000000000000000000008152600e810193909352805192839003602e019092206000908152600460205291909120805491151560ff19909216919091179055565b604080517f7369676e617475726573000000000000000000000000000000000000000000008152600a8101849052815190819003602a01902060009081526003602090815291902082516126ef92840190612a70565b604080517f6e756d4d657373616765735369676e656400000000000000000000000000000081526011810193909352805192839003603101909220600090815260208190529190912055565b604080517f746f74616c5370656e745065724461790000000000000000000000000000000081526010810193909352805192839003603001909220600090815260208190529190912055565b600160a060020a038116151561285357600080fd5b604080517f657263363737746f6b656e0000000000000000000000000000000000000000008152815190819003600b01902060009081526002602052208054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b604080517f6973496e697469616c697a6564000000000000000000000000000000000000008152815190819003600d0190206000908152600460205220805491151560ff19909216919091179055565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191825283518085018552600381527f313136000000000000000000000000000000000000000000000000000000000091810191909152925182516000949284928492889282918083835b602083106129aa5780518252601f19909201916020918201910161298b565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106129f25780518252601f1990920191602091820191016129d3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612a3a5780518252601f199092019160209182019101612a1b565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209998505050505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ab157805160ff1916838001178555612ade565b82800160010185558215612ade579182015b82811115612ade578251825591602001919060010190612ac3565b50612aea929150612aee565b5090565b6106f291905b80821115612aea5760008155600101612af45600a165627a7a723058202482d93833b68501384524d06b8060c5acb12514bf7fd887ac5194f0de938da00029
Deployed Bytecode
0x6080604052600436106101c95763ffffffff60e060020a6000350416631812d99681146101ce57806318d8f9c91461025e57806326b3293f1461028f578063288b7ad8146102b85780632bd0bb05146102df578063392e53cd146102f75780633e6968b6146103205780633f0a9f6514610335578063490a32c61461034a5780634fb3fef71461036257806359292ef31461037a578063630cea8e1461038f57806363258462146103bb57806369ffa08a146103d357806379304063146103fa57806379f9cc7214610412578063857cfff91461042d5780638a2a60ef146104425780638f4b4b98146104575780639313dc431461046f57806399439089146104965780639a454b99146104ab578063a2a6ca27146104c0578063a4c0ed36146104d8578063acf5c68914610509578063b2355b4214610521578063bea7c13a14610539578063bf1fe4201461054e578063c4a1ee3714610566578063c6f6f2161461057b578063cbbc8a5114610593578063df25f3f0146105ab578063e1bb8044146105c0578063ea9f4968146105d5578063edbf4ac2146105ed578063f426d8ac14610623578063f968adbe1461063b578063fe173b9714610650578063ffd19e8c14610665575b600080fd5b3480156101da57600080fd5b506101e960043560243561067d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022357818101518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026a57600080fd5b506102736106aa565b60408051600160a060020a039092168252519081900360200190f35b34801561029b57600080fd5b506102b6600160a060020a03600435166024356044356106f5565b005b3480156102c457600080fd5b506102cd610a1e565b60408051918252519081900360200190f35b3480156102eb57600080fd5b506102cd600435610a5f565b34801561030357600080fd5b5061030c610aa9565b604080519115158252519081900360200190f35b34801561032c57600080fd5b506102cd610aed565b34801561034157600080fd5b506102cd610af6565b34801561035657600080fd5b506101e9600435610b37565b34801561036e57600080fd5b506102cd600435610b48565b34801561038657600080fd5b506102cd610b92565b34801561039b57600080fd5b506102b66024600480358281019290820135918135918201910135610bd3565b3480156103c757600080fd5b506102b6600435610f65565b3480156103df57600080fd5b506102b6600160a060020a036004358116906024351661103d565b34801561040657600080fd5b5061030c600435611262565b34801561041e57600080fd5b506102b66004356024356112af565b34801561043957600080fd5b506102cd6113fc565b34801561044e57600080fd5b506102cd61143d565b34801561046357600080fd5b5061030c60043561147e565b34801561047b57600080fd5b506102b6600160a060020a03600435811690602435166114cb565b3480156104a257600080fd5b506102736115d9565b3480156104b757600080fd5b506102cd611623565b3480156104cc57600080fd5b506102b6600435611664565b3480156104e457600080fd5b5061030c60048035600160a060020a0316906024803591604435918201910135611750565b34801561051557600080fd5b506102b660043561186b565b34801561052d57600080fd5b506102b6600435611973565b34801561054557600080fd5b506102cd611a6e565b34801561055a57600080fd5b506102b6600435611a76565b34801561057257600080fd5b506102cd611b7e565b34801561058757600080fd5b506102b6600435611bbf565b34801561059f57600080fd5b506102b6600435611c97565b3480156105b757600080fd5b506102cd611d92565b3480156105cc57600080fd5b506102b6611dd3565b3480156105e157600080fd5b5061030c600435611f2e565b3480156105f957600080fd5b5061030c600160a060020a036004358116906024351660443560643560843560a43560c435611f7a565b34801561062f57600080fd5b5061030c6004356121bf565b34801561064757600080fd5b506102cd6121f7565b34801561065c57600080fd5b506102cd612238565b34801561067157600080fd5b5061030c600435612279565b604080518381526020810183905281519081900390910190206060906106a2816122a1565b949350505050565b604080517f657263363737746f6b656e0000000000000000000000000000000000000000008152815190819003600b019020600090815260026020522054600160a060020a03165b90565b60008060006107026115d9565b600160a060020a031663facd743b336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b5051151561079357600080fd5b604080516c01000000000000000000000000600160a060020a03891681028252601480830189905260348084018990528451938490036054018420339093028452908301829052925191829003909201902090935091506107f3856121bf565b15156107fe57600080fd5b61080782611262565b1561081157600080fd5b61081c826001612377565b610825836123d3565b905061083081612279565b1561083a57600080fd5b600101610847838261241d565b60408051858152905133917f6a09111cb1bbfc898f36504afb4d5411d0dbef45f2c43fac5781e6b640b86a32919081900360200190a26108856115d9565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b50518110610a16576109246108ff610aed565b61091f8761091361090e610aed565b610b48565b9063ffffffff61246916565b612478565b61093683610931836124c4565b61241d565b61093e6106aa565b600160a060020a03166340c10f1987876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b505060408051600160a060020a03881681526020810187905280820186905290517f1a771fe656018364a9369da21954bb3081cb08b0196c27e43ca59c7cae8727379181900360600190a15b505050505050565b604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c01902060009081526020819052205490565b604080517f746f74616c5370656e74506572446179000000000000000000000000000000008152601081018390528151908190036030019020600090815260208190522054919050565b604080517f6973496e697469616c697a6564000000000000000000000000000000000000008152815190819003600d01902060009081526004602052205460ff1690565b62015180420490565b604080517f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008152815190819003601a01902060009081526020819052205490565b6060610b42826124e9565b92915050565b604080517f746f74616c4578656375746564506572446179000000000000000000000000008152601381018390528151908190036033019020600090815260208190522054919050565b604080517f6761734c696d69744465706f73697452656c61790000000000000000000000008152815190819003601401902060009081526020819052205490565b600080600080610be16115d9565b600160a060020a031663facd743b336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b505050506040513d6020811015610c6557600080fd5b50511515610c7257600080fd5b610cab86868080601f01602080910402602001604051908101604052809392919081815260200183838082843750612588945050505050565b1515610cb657600080fd5b610d1d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375050604080516020601f8e018190048102820181019092528c815294508c93508b925082915084018382808284375061258f945050505050565b600160a060020a03163314610d3157600080fd5b858560405180838380828437604080519190930181900381206c0100000000000000000000000033028252601482018190529251908190036034019020919850909650610d84935087925061264f915050565b9150610d8f82612279565b15610d9957600080fd5b600191820191821115610dbe57610daf8361147e565b15610db957600080fd5b610df8565b610df88487878080601f01602080910402602001604051908101604052809392919081815260200183838082843750612699945050505050565b610e038360016126f4565b5060408051848152600019830160208083019190915282519182900383018220601f8a01829004820283018201909352888252610e569183918b908b908190840183828082843750612750945050505050565b610e6084836127a6565b60408051858152905133917f962f785fc9b91edbed2fdad62c075258ee14d39bd29cd1e83c298a7bf26d5a65919081900360200190a2610e9e6115d9565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d6020811015610f0557600080fd5b50518210610f5b57610f1f84610f1a846124c4565b6127a6565b604080513381526020810186905281517feb043d149eedb81369bec43d4c3a3a53087debc88d2525f13bfaa3eecda28b5c929181900390910190a15b5050505050505050565b33610f6e6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b505050506040513d6020811015610fd557600080fd5b5051600160a060020a031614610fea57600080fd5b610ff26113fc565b8110610ffd57600080fd5b604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c019020600090815260208190522055565b600080336110496115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561108657600080fd5b505af115801561109a573d6000803e3d6000fd5b505050506040513d60208110156110b057600080fd5b5051600160a060020a0316146110c557600080fd5b600160a060020a03831615156110da57600080fd5b600160a060020a038416151561112657604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015611120573d6000803e3d6000fd5b5061125c565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b505050506040513d60208110156111b457600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b15801561122557600080fd5b505af1158015611239573d6000803e3d6000fd5b505050506040513d602081101561124f57600080fd5b5051151561125c57600080fd5b50505050565b604080517f6465706f736974735369676e65640000000000000000000000000000000000008152600e8101839052815190819003602e01902060009081526004602052205460ff16919050565b336112b86115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b505050506040513d602081101561131f57600080fd5b5051600160a060020a03161461133457600080fd5b604080517f6761734c696d69744465706f73697452656c617900000000000000000000000081528151908190036014018120600090815260208181528382208690557f6761734c696d69745769746864726177436f6e6669726d0000000000000000008352835192839003601701909220815290819052208190557f3b49a33ec45179ab3408f6f29a2b208c909ab1460e94af7558808ea22854c1066113d8610b92565b6113e0611b7e565b6040805192835260208301919091528051918290030190a15050565b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e01902060009081526020819052205490565b604080517f666f726569676e4461696c794c696d69740000000000000000000000000000008152815190819003601101902060009081526020819052205490565b604080517f6d657373616765735369676e65640000000000000000000000000000000000008152600e8101839052815190819003602e01902060009081526004602052205460ff16919050565b336114d46115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b5051600160a060020a03161461155057600080fd5b6115586106aa565b604080517f69ffa08a000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152915192909116916369ffa08a9160448082019260009290919082900301818387803b1580156115c557600080fd5b505af1158015610a16573d6000803e3d6000fd5b604080517f76616c696461746f72436f6e747261637400000000000000000000000000000081528151908190036011019020600090815260026020522054600160a060020a031690565b604080517f6465706c6f7965644174426c6f636b00000000000000000000000000000000008152815190819003600f01902060009081526020819052205490565b3361166d6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116aa57600080fd5b505af11580156116be573d6000803e3d6000fd5b505050506040513d60208110156116d457600080fd5b5051600160a060020a0316146116e957600080fd5b6116f161143d565b8110801561170557506117026121f7565b81105b151561171057600080fd5b604080517f6d696e506572547800000000000000000000000000000000000000000000000081528151908190036008019020600090815260208190522055565b600061175a6106aa565b600160a060020a0316331461176e57600080fd5b61177784611f2e565b151561178257600080fd5b6117a661178d610aed565b6117a18661091361179c610aed565b610a5f565b6127f2565b6117ae6106aa565b600160a060020a03166342966c68856040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688585611839611a6e565b60408051600160a060020a039094168452602084019290925282820152519081900360600190a1506001949350505050565b336118746115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b505050506040513d60208110156118db57600080fd5b5051600160a060020a0316146118f057600080fd5b600081116118fd57600080fd5b604080517f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008152815190819003601a018120600090815260208181529083902084905583825291517f4fb76205cd57c896b21511d2114137d8e901b4ccd659e1a0f97d6306795264fb929181900390910190a150565b3361197c6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119b957600080fd5b505af11580156119cd573d6000803e3d6000fd5b505050506040513d60208110156119e357600080fd5b5051600160a060020a0316146119f857600080fd5b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e018120600090815260208181529083902084905583825291517f7cbf6a47cd79c6fef9f0a89db1e9cdca2a3e93d84eae02a0232897b24524089e929181900390910190a150565b633b9aca0090565b33611a7f6115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d6020811015611ae657600080fd5b5051600160a060020a031614611afb57600080fd5b60008111611b0857600080fd5b604080517f676173507269636500000000000000000000000000000000000000000000000081528151908190036008018120600090815260208181529083902084905583825291517f52264b89e0fceafb26e79fd49ef8a366eb6297483bf4035b027f0c99a7ad512e929181900390910190a150565b604080517f6761734c696d69745769746864726177436f6e6669726d0000000000000000008152815190819003601701902060009081526020819052205490565b33611bc86115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c0557600080fd5b505af1158015611c19573d6000803e3d6000fd5b505050506040513d6020811015611c2f57600080fd5b5051600160a060020a031614611c4457600080fd5b611c4c61143d565b8110611c5757600080fd5b604080517f6d6178506572547800000000000000000000000000000000000000000000000081528151908190036008019020600090815260208190522055565b33611ca06115d9565b600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cdd57600080fd5b505af1158015611cf1573d6000803e3d6000fd5b505050506040513d6020811015611d0757600080fd5b5051600160a060020a031614611d1c57600080fd5b604080517f666f726569676e4461696c794c696d697400000000000000000000000000000081528151908190036011018120600090815260208181529083902084905583825291517f8d797628d21ca877e321aa59bc2d55eba59ae001c5294d433797019caebab2ab929181900390910190a150565b604080517f6d696e50657254780000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b604080517f6973557067726164656446726f6d31546f3200000000000000000000000000008152815190819003601201902060009081526004602052205460ff1615611e1e57600080fd5b604080517f686f6d654461696c794c696d69740000000000000000000000000000000000008152815190819003600e01812060009081526020818152908390206a027b46536c66c8e300000090819055825291517f7cbf6a47cd79c6fef9f0a89db1e9cdca2a3e93d84eae02a0232897b24524089e929181900390910190a1604080517f686f6d654d6178506572547800000000000000000000000000000000000000008152815190819003600c018120600090815260208181528382206a013da329b633647180000090557f6973557067726164656446726f6d31546f32000000000000000000000000000083528351928390036012019092208152600490915220805460ff19166001179055565b600080611f408361091361179c610aed565b905080611f4b61143d565b10158015611f605750611f5c6121f7565b8311155b8015611f735750611f6f611d92565b8310155b9392505050565b6000611f84610aa9565b15611f8e57600080fd5b600160a060020a0388161515611fa357600080fd5b600084118015611fb257508385115b8015611fbd57508486115b1515611fc857600080fd5b60008311611fd557600080fd5b604080517f76616c696461746f72436f6e74726163740000000000000000000000000000008152815190819003601101902060009081526002602052208054600160a060020a038a1673ffffffffffffffffffffffffffffffffffffffff199091161790556120438761283e565b604080517f666f726569676e4461696c794c696d697400000000000000000000000000000081528151908190036011018120600090815260208181528382208a90557f6465706c6f7965644174426c6f636b00000000000000000000000000000000008352835192839003600f01832082528181528382204390557f6d6178506572547800000000000000000000000000000000000000000000000083528351928390036008908101842083528282528483208a90557f6d696e506572547800000000000000000000000000000000000000000000000084528451938490038101842083528282528483208990557f6761735072696365000000000000000000000000000000000000000000000000845284519384900301832082528181528382208790557f7265717569726564426c6f636b436f6e6669726d6174696f6e730000000000008352835192839003601a01909220815290819052208290556121ab60016128be565b6121b3610aa9565b98975050505050505050565b6000806121d18361091361090e610aed565b9050806121dc6113fc565b10158015611f7357506121ed610a1e565b9092111592915050565b604080517f6d617850657254780000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b604080517f67617350726963650000000000000000000000000000000000000000000000008152815190819003600801902060009081526020819052205490565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b604080517f7369676e617475726573000000000000000000000000000000000000000000008152600a81018390528151602a9181900391909101812060009081526003602090815290839020805460026000196001831615610100020190911604601f8101839004830284018301909452838352606093909183018282801561236b5780601f106123405761010080835404028352916020019161236b565b820191906000526020600020905b81548152906001019060200180831161234e57829003601f168201915b50505050509050919050565b604080517f6465706f736974735369676e65640000000000000000000000000000000000008152600e810193909352805192839003602e019092206000908152600460205291909120805491151560ff19909216919091179055565b604080517f6e756d4465706f736974735369676e65640000000000000000000000000000008152601181018390528151908190036031019020600090815260208190522054919050565b604080517f6e756d4465706f736974735369676e656400000000000000000000000000000081526011810193909352805192839003603101909220600090815260208190529190912055565b600082820183811015611f7357fe5b604080517f746f74616c45786563757465645065724461790000000000000000000000000081526013810193909352805192839003603301909220600090815260208190529190912055565b7f80000000000000000000000000000000000000000000000000000000000000001790565b604080517f6d65737361676573000000000000000000000000000000000000000000000000815260088101839052815160289181900391909101812060009081526003602090815290839020805460026000196001831615610100020190911604601f8101839004830284018301909452838352606093909183018282801561236b5780601f106123405761010080835404028352916020019161236b565b5160741490565b600080600080855160411415156125a557600080fd5b50505060208301516040840151606085015160016125c28661290e565b60408051600080825260208083018085529490945260ff7f0100000000000000000000000000000000000000000000000000000000000000870416828401526060820188905260808201879052915160a08083019493601f198301938390039091019190865af115801561263a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080517f6e756d4d657373616765735369676e65640000000000000000000000000000008152601181018390528151908190036031019020600090815260208190522054919050565b604080517f6d65737361676573000000000000000000000000000000000000000000000000815260088101849052815190819003602801902060009081526003602090815291902082516126ef92840190612a70565b505050565b604080517f6d657373616765735369676e65640000000000000000000000000000000000008152600e810193909352805192839003602e019092206000908152600460205291909120805491151560ff19909216919091179055565b604080517f7369676e617475726573000000000000000000000000000000000000000000008152600a8101849052815190819003602a01902060009081526003602090815291902082516126ef92840190612a70565b604080517f6e756d4d657373616765735369676e656400000000000000000000000000000081526011810193909352805192839003603101909220600090815260208190529190912055565b604080517f746f74616c5370656e745065724461790000000000000000000000000000000081526010810193909352805192839003603001909220600090815260208190529190912055565b600160a060020a038116151561285357600080fd5b604080517f657263363737746f6b656e0000000000000000000000000000000000000000008152815190819003600b01902060009081526002602052208054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b604080517f6973496e697469616c697a6564000000000000000000000000000000000000008152815190819003600d0190206000908152600460205220805491151560ff19909216919091179055565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191825283518085018552600381527f313136000000000000000000000000000000000000000000000000000000000091810191909152925182516000949284928492889282918083835b602083106129aa5780518252601f19909201916020918201910161298b565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106129f25780518252601f1990920191602091820191016129d3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612a3a5780518252601f199092019160209182019101612a1b565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209998505050505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ab157805160ff1916838001178555612ade565b82800160010185558215612ade579182015b82811115612ade578251825591602001919060010190612ac3565b50612aea929150612aee565b5090565b6106f291905b80821115612aea5760008155600101612af45600a165627a7a723058202482d93833b68501384524d06b8060c5acb12514bf7fd887ac5194f0de938da00029
Swarm Source
bzzr://2482d93833b68501384524d06b8060c5acb12514bf7fd887ac5194f0de938da0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.