More Info
Private Name Tags
ContractCreator
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00235714 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00201141 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.0014966 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00140241 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00309547 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00189308 | ||||
Transfer | 12743805 | 1284 days ago | IN | 0 ETH | 0.00149845 | ||||
Transfer | 12743801 | 1284 days ago | IN | 0 ETH | 0.00149929 | ||||
Transfer | 12743800 | 1284 days ago | IN | 0 ETH | 0.00141067 | ||||
Transfer | 12743799 | 1284 days ago | IN | 0 ETH | 0.00141974 | ||||
Transfer | 12743799 | 1284 days ago | IN | 0 ETH | 0.00149975 | ||||
Transfer | 12743799 | 1284 days ago | IN | 0 ETH | 0.00369124 | ||||
Transfer | 12743799 | 1284 days ago | IN | 0 ETH | 0.00141102 | ||||
Set Owner | 7109478 | 2175 days ago | IN | 0 ETH | 0.00028652 | ||||
Set Authority | 7109476 | 2175 days ago | IN | 0 ETH | 0.00089932 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ReserveEscrow
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 2019-02-05 */ pragma solidity 0.4.24; contract MasterCopy { address masterCopy; function changeMasterCopy(address _masterCopy) public { require(_masterCopy != 0, "Invalid master copy address provided"); masterCopy = _masterCopy; } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } // custom : not in original DSMath, putting it here for consistency, copied from SafeMath function div(uint x, uint y) internal pure returns (uint z) { z = x / y; } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called "exponentiation by squaring" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract Utils { modifier addressValid(address _address) { require(_address != address(0), "Utils::_ INVALID_ADDRESS"); _; } } interface ERC20 { function name() public view returns(string); function symbol() public view returns(string); function decimals() public view returns(uint8); function totalSupply() public view returns (uint); function balanceOf(address tokenOwner) public view returns (uint balance); function allowance(address tokenOwner, address spender) public view returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract WETH9 { string public name = "Wrapped Ether"; string public symbol = "WETH"; uint8 public decimals = 18; event Approval(address indexed _owner, address indexed _spender, uint _value); event Transfer(address indexed _from, address indexed _to, uint _value); event Deposit(address indexed _owner, uint _value); event Withdrawal(address indexed _owner, uint _value); mapping (address => uint) public balanceOf; mapping (address => mapping (address => uint)) public allowance; function() public payable { deposit(); } function deposit() public payable { balanceOf[msg.sender] += msg.value; Deposit(msg.sender, msg.value); } function withdraw(uint wad) public { require(balanceOf[msg.sender] >= wad); balanceOf[msg.sender] -= wad; msg.sender.transfer(wad); Withdrawal(msg.sender, wad); } function totalSupply() public view returns (uint) { return this.balance; } function approve(address guy, uint wad) public returns (bool) { allowance[msg.sender][guy] = wad; Approval(msg.sender, guy, wad); return true; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { require(balanceOf[src] >= wad); if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) { require(allowance[src][msg.sender] >= wad); allowance[src][msg.sender] -= wad; } balanceOf[src] -= wad; balanceOf[dst] += wad; Transfer(src, dst, wad); return true; } } contract ErrorUtils { event LogError(string methodSig, string errMsg); event LogErrorWithHintBytes32(bytes32 indexed bytes32Value, string methodSig, string errMsg); event LogErrorWithHintAddress(address indexed addressValue, string methodSig, string errMsg); } contract DSAuthority { function canCall(address src, address dst, bytes4 sig) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig), "DSAuth::_ SENDER_NOT_AUTHORIZED"); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSThing is DSNote, DSAuth, DSMath { function S(string s) internal pure returns (bytes4) { return bytes4(keccak256(s)); } } contract Config is DSNote, DSAuth, Utils { WETH9 public weth9; mapping (address => bool) public isAccountHandler; mapping (address => bool) public isAdmin; address[] public admins; bool public disableAdminControl = false; event LogAdminAdded(address indexed _admin, address _by); event LogAdminRemoved(address indexed _admin, address _by); constructor() public { admins.push(msg.sender); isAdmin[msg.sender] = true; } modifier onlyAdmin(){ require(isAdmin[msg.sender], "Config::_ SENDER_NOT_AUTHORIZED"); _; } function setWETH9 ( address _weth9 ) public auth note addressValid(_weth9) { weth9 = WETH9(_weth9); } function setAccountHandler ( address _accountHandler, bool _isAccountHandler ) public auth note addressValid(_accountHandler) { isAccountHandler[_accountHandler] = _isAccountHandler; } function toggleAdminsControl() public auth note { disableAdminControl = !disableAdminControl; } function isAdminValid(address _admin) public view returns (bool) { if(disableAdminControl) { return true; } else { return isAdmin[_admin]; } } function getAllAdmins() public view returns(address[]) { return admins; } function addAdmin ( address _admin ) external note onlyAdmin addressValid(_admin) { require(!isAdmin[_admin], "Config::addAdmin ADMIN_ALREADY_EXISTS"); admins.push(_admin); isAdmin[_admin] = true; emit LogAdminAdded(_admin, msg.sender); } function removeAdmin ( address _admin ) external note onlyAdmin addressValid(_admin) { require(isAdmin[_admin], "Config::removeAdmin ADMIN_DOES_NOT_EXIST"); require(msg.sender != _admin, "Config::removeAdmin ADMIN_NOT_AUTHORIZED"); isAdmin[_admin] = false; for (uint i = 0; i < admins.length - 1; i++) { if (admins[i] == _admin) { admins[i] = admins[admins.length - 1]; admins.length -= 1; break; } } emit LogAdminRemoved(_admin, msg.sender); } } library ECRecovery { function recover(bytes32 _hash, bytes _sig) internal pure returns (address) { bytes32 r; bytes32 s; uint8 v; if (_sig.length != 65) { return (address(0)); } assembly { r := mload(add(_sig, 32)) s := mload(add(_sig, 64)) v := byte(0, mload(add(_sig, 96))) } if (v < 27) { v += 27; } if (v != 27 && v != 28) { return (address(0)); } else { return ecrecover(_hash, v, r, s); } } function toEthSignedMessageHash(bytes32 _hash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash) ); } } contract Utils2 { using ECRecovery for bytes32; function _recoverSigner(bytes32 _hash, bytes _signature) internal pure returns(address _signer) { return _hash.toEthSignedMessageHash().recover(_signature); } } contract Account is MasterCopy, DSNote, Utils, Utils2, ErrorUtils { address[] public users; mapping (address => bool) public isUser; mapping (bytes32 => bool) public actionCompleted; WETH9 public weth9; Config public config; bool public isInitialized = false; event LogTransferBySystem(address indexed token, address indexed to, uint value, address by); event LogTransferByUser(address indexed token, address indexed to, uint value, address by); event LogUserAdded(address indexed user, address by); event LogUserRemoved(address indexed user, address by); modifier initialized() { require(isInitialized, "Account::_ ACCOUNT_NOT_INITIALIZED"); _; } modifier userExists(address _user) { require(isUser[_user], "Account::_ INVALID_USER"); _; } modifier userDoesNotExist(address _user) { require(!isUser[_user], "Account::_ USER_DOES_NOT_EXISTS"); _; } modifier onlyHandler(){ require(config.isAccountHandler(msg.sender), "Account::_ INVALID_ACC_HANDLER"); _; } function init(address _user, address _config) public { users.push(_user); isUser[_user] = true; config = Config(_config); weth9 = config.weth9(); isInitialized = true; } function getAllUsers() public view returns (address[]) { return users; } function balanceFor(address _token) public view returns (uint _balance){ _balance = ERC20(_token).balanceOf(this); } function transferBySystem ( address _token, address _to, uint _value ) external onlyHandler note initialized { require(ERC20(_token).balanceOf(this) >= _value, "Account::transferBySystem INSUFFICIENT_BALANCE_IN_ACCOUNT"); require(ERC20(_token).transfer(_to, _value), "Account::transferBySystem TOKEN_TRANSFER_FAILED"); emit LogTransferBySystem(_token, _to, _value, msg.sender); } function transferByUser ( address _token, address _to, uint _value, uint _salt, bytes _signature ) external addressValid(_to) note initialized { bytes32 actionHash = _getTransferActionHash(_token, _to, _value, _salt); if(actionCompleted[actionHash]) { emit LogError("Account::transferByUser", "ACTION_ALREADY_PERFORMED"); return; } if(ERC20(_token).balanceOf(this) < _value){ emit LogError("Account::transferByUser", "INSUFFICIENT_BALANCE_IN_ACCOUNT"); return; } address signer = _recoverSigner(actionHash, _signature); if(!isUser[signer]) { emit LogError("Account::transferByUser", "SIGNER_NOT_AUTHORIZED_WITH_ACCOUNT"); return; } actionCompleted[actionHash] = true; if (_token == address(weth9)) { weth9.withdraw(_value); _to.transfer(_value); } else { require(ERC20(_token).transfer(_to, _value), "Account::transferByUser TOKEN_TRANSFER_FAILED"); } emit LogTransferByUser(_token, _to, _value, signer); } function addUser ( address _user, uint _salt, bytes _signature ) external note addressValid(_user) userDoesNotExist(_user) initialized { bytes32 actionHash = _getUserActionHash(_user, "ADD_USER", _salt); if(actionCompleted[actionHash]) { emit LogError("Account::addUser", "ACTION_ALREADY_PERFORMED"); return; } address signer = _recoverSigner(actionHash, _signature); if(!isUser[signer]) { emit LogError("Account::addUser", "SIGNER_NOT_AUTHORIZED_WITH_ACCOUNT"); return; } actionCompleted[actionHash] = true; users.push(_user); isUser[_user] = true; emit LogUserAdded(_user, signer); } function removeUser ( address _user, uint _salt, bytes _signature ) external note userExists(_user) initialized { bytes32 actionHash = _getUserActionHash(_user, "REMOVE_USER", _salt); if(actionCompleted[actionHash]) { emit LogError("Account::removeUser", "ACTION_ALREADY_PERFORMED"); return; } address signer = _recoverSigner(actionHash, _signature); // require(signer != _user, "Account::removeUser SIGNER_NOT_AUTHORIZED_WITH_ACCOUNT"); if(!isUser[signer]){ emit LogError("Account::removeUser", "SIGNER_NOT_AUTHORIZED_WITH_ACCOUNT"); return; } actionCompleted[actionHash] = true; isUser[_user] = false; for (uint i = 0; i < users.length - 1; i++) { if (users[i] == _user) { users[i] = users[users.length - 1]; users.length -= 1; break; } } emit LogUserRemoved(_user, signer); } function _getTransferActionHash ( address _token, address _to, uint _value, uint _salt ) internal view returns (bytes32) { return keccak256( abi.encodePacked( address(this), _token, _to, _value, _salt ) ); } function _getUserActionHash ( address _user, string _action, uint _salt ) internal view returns (bytes32) { return keccak256( abi.encodePacked( address(this), _user, _action, _salt ) ); } // to directly send ether to contract function() external payable { require(msg.data.length == 0 && msg.value > 0, "Account::fallback INVALID_ETHER_TRANSFER"); if(msg.sender != address(weth9)){ weth9.deposit.value(msg.value)(); } } } contract Escrow is DSNote, DSAuth { event LogTransfer(address indexed token, address indexed to, uint value); event LogTransferFromAccount(address indexed account, address indexed token, address indexed to, uint value); function transfer ( address _token, address _to, uint _value ) public note auth { require(ERC20(_token).transfer(_to, _value), "Escrow::transfer TOKEN_TRANSFER_FAILED"); emit LogTransfer(_token, _to, _value); } function transferFromAccount ( address _account, address _token, address _to, uint _value ) public note auth { Account(_account).transferBySystem(_token, _to, _value); emit LogTransferFromAccount(_account, _token, _to, _value); } } contract ReserveEscrow is Escrow { }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFromAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogTransferFromAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":true,"name":"guy","type":"address"},{"indexed":true,"name":"foo","type":"bytes32"},{"indexed":true,"name":"bar","type":"bytes32"},{"indexed":false,"name":"wad","type":"uint256"},{"indexed":false,"name":"fax","type":"bytes"}],"name":"LogNote","type":"event"}]
Contract Creation Code
6080604081905260018054600160a060020a03191633908117909155907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a26107f1806100516000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313af4035811461007c5780635e61e1c81461009f5780637a9e5e4b146100cf5780638da5cb5b146100f0578063beabacc814610121578063bf7e214f1461014b575b600080fd5b34801561008857600080fd5b5061009d600160a060020a0360043516610160565b005b3480156100ab57600080fd5b5061009d600160a060020a0360043581169060243581169060443516606435610217565b3480156100db57600080fd5b5061009d600160a060020a03600435166103aa565b3480156100fc57600080fd5b5061010561045d565b60408051600160a060020a039092168252519081900360200190f35b34801561012d57600080fd5b5061009d600160a060020a036004358116906024351660443561046c565b34801561015757600080fd5b5061010561068d565b61017633600035600160e060020a03191661069c565b15156101ba576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b60408051348082526020820183815236938301849052600435936024359384938693339360008035600160e060020a031916949092606082018484808284376040519201829003965090945050505050a461027e33600035600160e060020a03191661069c565b15156102c2576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b604080517f93ef43df000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301528681166024830152604482018690529151918816916393ef43df9160648082019260009290919082900301818387803b15801561033557600080fd5b505af1158015610349573d6000803e3d6000fd5b5050505083600160a060020a031685600160a060020a031687600160a060020a03167fcbdd82faf094a5648368f9a6b6b3d12e253510e5a4a93673a6d5d0699ef8f661866040518082815260200191505060405180910390a4505050505050565b6103c033600035600160e060020a03191661069c565b1515610404576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b600154600160a060020a031681565b60408051348082526020820183815236938301849052600435936024359384938693339360008035600160e060020a031916949092606082018484808284376040519201829003965090945050505050a46104d333600035600160e060020a03191661069c565b1515610517576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b84600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b505050506040513d60208110156105bd57600080fd5b5051151561063b576040805160e560020a62461bcd02815260206004820152602660248201527f457363726f773a3a7472616e7366657220544f4b454e5f5452414e534645525f60448201527f4641494c45440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600160a060020a031685600160a060020a03167f0a85107a334eae0d22d21cdf13af0f8e8125039ec60baaa843d2c4c5b0680174856040518082815260200191505060405180910390a35050505050565b600054600160a060020a031681565b6000600160a060020a0383163014156106b75750600161079f565b600154600160a060020a03848116911614156106d55750600161079f565b600054600160a060020a031615156106ef5750600061079f565b60008054604080517fb7009613000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152600160e060020a0319871660448301529151919092169263b700961392606480820193602093909283900390910190829087803b15801561077057600080fd5b505af1158015610784573d6000803e3d6000fd5b505050506040513d602081101561079a57600080fd5b505190505b9291505056004453417574683a3a5f2053454e4445525f4e4f545f415554484f52495a454400a165627a7a7230582012719bede70c1824f04f59bd53002273f70a751429ae2a31daf25d153b59cada0029
Deployed Bytecode
0x6080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313af4035811461007c5780635e61e1c81461009f5780637a9e5e4b146100cf5780638da5cb5b146100f0578063beabacc814610121578063bf7e214f1461014b575b600080fd5b34801561008857600080fd5b5061009d600160a060020a0360043516610160565b005b3480156100ab57600080fd5b5061009d600160a060020a0360043581169060243581169060443516606435610217565b3480156100db57600080fd5b5061009d600160a060020a03600435166103aa565b3480156100fc57600080fd5b5061010561045d565b60408051600160a060020a039092168252519081900360200190f35b34801561012d57600080fd5b5061009d600160a060020a036004358116906024351660443561046c565b34801561015757600080fd5b5061010561068d565b61017633600035600160e060020a03191661069c565b15156101ba576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b60408051348082526020820183815236938301849052600435936024359384938693339360008035600160e060020a031916949092606082018484808284376040519201829003965090945050505050a461027e33600035600160e060020a03191661069c565b15156102c2576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b604080517f93ef43df000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301528681166024830152604482018690529151918816916393ef43df9160648082019260009290919082900301818387803b15801561033557600080fd5b505af1158015610349573d6000803e3d6000fd5b5050505083600160a060020a031685600160a060020a031687600160a060020a03167fcbdd82faf094a5648368f9a6b6b3d12e253510e5a4a93673a6d5d0699ef8f661866040518082815260200191505060405180910390a4505050505050565b6103c033600035600160e060020a03191661069c565b1515610404576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b600154600160a060020a031681565b60408051348082526020820183815236938301849052600435936024359384938693339360008035600160e060020a031916949092606082018484808284376040519201829003965090945050505050a46104d333600035600160e060020a03191661069c565b1515610517576040805160e560020a62461bcd02815260206004820152601f60248201526000805160206107a6833981519152604482015290519081900360640190fd5b84600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b505050506040513d60208110156105bd57600080fd5b5051151561063b576040805160e560020a62461bcd02815260206004820152602660248201527f457363726f773a3a7472616e7366657220544f4b454e5f5452414e534645525f60448201527f4641494c45440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600160a060020a031685600160a060020a03167f0a85107a334eae0d22d21cdf13af0f8e8125039ec60baaa843d2c4c5b0680174856040518082815260200191505060405180910390a35050505050565b600054600160a060020a031681565b6000600160a060020a0383163014156106b75750600161079f565b600154600160a060020a03848116911614156106d55750600161079f565b600054600160a060020a031615156106ef5750600061079f565b60008054604080517fb7009613000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152600160e060020a0319871660448301529151919092169263b700961392606480820193602093909283900390910190829087803b15801561077057600080fd5b505af1158015610784573d6000803e3d6000fd5b505050506040513d602081101561079a57600080fd5b505190505b9291505056004453417574683a3a5f2053454e4445525f4e4f545f415554484f52495a454400a165627a7a7230582012719bede70c1824f04f59bd53002273f70a751429ae2a31daf25d153b59cada0029
Swarm Source
bzzr://12719bede70c1824f04f59bd53002273f70a751429ae2a31daf25d153b59cada
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.