Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 45 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set User Role | 11418081 | 1392 days ago | IN | 0 ETH | 0.0033566 | ||||
Set User Role | 10673124 | 1507 days ago | IN | 0 ETH | 0.00890235 | ||||
Set User Roles | 10289911 | 1566 days ago | IN | 0 ETH | 0.0020106 | ||||
Set User Roles | 10289900 | 1566 days ago | IN | 0 ETH | 0.00403128 | ||||
Set User Roles | 9423927 | 1700 days ago | IN | 0 ETH | 0.00082743 | ||||
Set User Roles | 9423914 | 1700 days ago | IN | 0 ETH | 0.00050427 | ||||
Set User Role | 9417438 | 1701 days ago | IN | 0 ETH | 0.00098915 | ||||
Set User Role | 8727820 | 1816 days ago | IN | 0 ETH | 0.00049463 | ||||
Set User Roles | 8670383 | 1825 days ago | IN | 0 ETH | 0.00051738 | ||||
Set User Role | 8669993 | 1825 days ago | IN | 0 ETH | 0.00204487 | ||||
Set User Roles | 7895234 | 1946 days ago | IN | 0 ETH | 0.0003932 | ||||
Set User Roles | 7894926 | 1946 days ago | IN | 0 ETH | 0.0001089 | ||||
Set User Roles | 7894840 | 1946 days ago | IN | 0 ETH | 0.00025411 | ||||
Set User Roles | 7894817 | 1946 days ago | IN | 0 ETH | 0.00060405 | ||||
Set User Role | 7278943 | 2042 days ago | IN | 0 ETH | 0.00266368 | ||||
Set User Roles | 7208163 | 2059 days ago | IN | 0 ETH | 0.00049219 | ||||
Set User Roles | 7208114 | 2059 days ago | IN | 0 ETH | 0.00181177 | ||||
Set User Roles | 6781650 | 2135 days ago | IN | 0 ETH | 0.00151749 | ||||
Set User Role | 6745496 | 2141 days ago | IN | 0 ETH | 0.00083655 | ||||
Set User Role | 6745460 | 2141 days ago | IN | 0 ETH | 0.00083818 | ||||
Set User Roles | 6690977 | 2150 days ago | IN | 0 ETH | 0.00066112 | ||||
Set User Roles | 6690969 | 2150 days ago | IN | 0 ETH | 0.00070905 | ||||
Set User Roles | 6690955 | 2150 days ago | IN | 0 ETH | 0.00146912 | ||||
Set User Roles | 6690951 | 2150 days ago | IN | 0 ETH | 0.00356891 | ||||
Set User Roles | 6690940 | 2150 days ago | IN | 0 ETH | 0.00037773 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RoleBasedAccessPolicy
Compiler Version
v0.4.15+commit.bbb8e64f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-11-09 */ pragma solidity 0.4.15; /// @title provides subject to role checking logic contract IAccessPolicy { //////////////////////// // Public functions //////////////////////// /// @notice We don't make this function constant to allow for state-updating access controls such as rate limiting. /// @dev checks if subject belongs to requested role for particular object /// @param subject address to be checked against role, typically msg.sender /// @param role identifier of required role /// @param object contract instance context for role checking, typically contract requesting the check /// @param verb additional data, in current AccessControll implementation msg.sig /// @return if subject belongs to a role function allowed( address subject, bytes32 role, address object, bytes4 verb ) public returns (bool); } /// @title enables access control in implementing contract /// @dev see AccessControlled for implementation contract IAccessControlled { //////////////////////// // Events //////////////////////// /// @dev must log on access policy change event LogAccessPolicyChanged( address controller, IAccessPolicy oldPolicy, IAccessPolicy newPolicy ); //////////////////////// // Public functions //////////////////////// /// @dev allows to change access control mechanism for this contract /// this method must be itself access controlled, see AccessControlled implementation and notice below /// @notice it is a huge issue for Solidity that modifiers are not part of function signature /// then interfaces could be used for example to control access semantics /// @param newPolicy new access policy to controll this contract /// @param newAccessController address of ROLE_ACCESS_CONTROLLER of new policy that can set access to this contract function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController) public; function accessPolicy() public constant returns (IAccessPolicy); } contract StandardRoles { //////////////////////// // Constants //////////////////////// // @notice Soldity somehow doesn't evaluate this compile time // @dev role which has rights to change permissions and set new policy in contract, keccak256("AccessController") bytes32 internal constant ROLE_ACCESS_CONTROLLER = 0xac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da; } /// @title Granular code execution permissions /// @notice Intended to replace existing Ownable pattern with more granular permissions set to execute smart contract functions /// for each function where 'only' modifier is applied, IAccessPolicy implementation is called to evaluate if msg.sender belongs to required role for contract being called. /// Access evaluation specific belong to IAccessPolicy implementation, see RoleBasedAccessPolicy for details. /// @dev Should be inherited by a contract requiring such permissions controll. IAccessPolicy must be provided in constructor. Access policy may be replaced to a different one /// by msg.sender with ROLE_ACCESS_CONTROLLER role contract AccessControlled is IAccessControlled, StandardRoles { //////////////////////// // Mutable state //////////////////////// IAccessPolicy private _accessPolicy; //////////////////////// // Modifiers //////////////////////// /// @dev limits function execution only to senders assigned to required 'role' modifier only(bytes32 role) { require(_accessPolicy.allowed(msg.sender, role, this, msg.sig)); _; } //////////////////////// // Constructor //////////////////////// function AccessControlled(IAccessPolicy policy) internal { require(address(policy) != 0x0); _accessPolicy = policy; } //////////////////////// // Public functions //////////////////////// // // Implements IAccessControlled // function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController) public only(ROLE_ACCESS_CONTROLLER) { // ROLE_ACCESS_CONTROLLER must be present // under the new policy. This provides some // protection against locking yourself out. require(newPolicy.allowed(newAccessController, ROLE_ACCESS_CONTROLLER, this, msg.sig)); // We can now safely set the new policy without foot shooting. IAccessPolicy oldPolicy = _accessPolicy; _accessPolicy = newPolicy; // Log event LogAccessPolicyChanged(msg.sender, oldPolicy, newPolicy); } function accessPolicy() public constant returns (IAccessPolicy) { return _accessPolicy; } } contract AccessRoles { //////////////////////// // Constants //////////////////////// // NOTE: All roles are set to the keccak256 hash of the // CamelCased role name, i.e. // ROLE_LOCKED_ACCOUNT_ADMIN = keccak256("LockedAccountAdmin") // may setup LockedAccount, change disbursal mechanism and set migration bytes32 internal constant ROLE_LOCKED_ACCOUNT_ADMIN = 0x4675da546d2d92c5b86c4f726a9e61010dce91cccc2491ce6019e78b09d2572e; // may setup whitelists and abort whitelisting contract with curve rollback bytes32 internal constant ROLE_WHITELIST_ADMIN = 0xaef456e7c864418e1d2a40d996ca4febf3a7e317fe3af5a7ea4dda59033bbe5c; // May issue (generate) Neumarks bytes32 internal constant ROLE_NEUMARK_ISSUER = 0x921c3afa1f1fff707a785f953a1e197bd28c9c50e300424e015953cbf120c06c; // May burn Neumarks it owns bytes32 internal constant ROLE_NEUMARK_BURNER = 0x19ce331285f41739cd3362a3ec176edffe014311c0f8075834fdd19d6718e69f; // May create new snapshots on Neumark bytes32 internal constant ROLE_SNAPSHOT_CREATOR = 0x08c1785afc57f933523bc52583a72ce9e19b2241354e04dd86f41f887e3d8174; // May enable/disable transfers on Neumark bytes32 internal constant ROLE_TRANSFER_ADMIN = 0xb6527e944caca3d151b1f94e49ac5e223142694860743e66164720e034ec9b19; // may reclaim tokens/ether from contracts supporting IReclaimable interface bytes32 internal constant ROLE_RECLAIMER = 0x0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc5; // represents legally platform operator in case of forks and contracts with legal agreement attached. keccak256("PlatformOperatorRepresentative") bytes32 internal constant ROLE_PLATFORM_OPERATOR_REPRESENTATIVE = 0xb2b321377653f655206f71514ff9f150d0822d062a5abcf220d549e1da7999f0; // allows to deposit EUR-T and allow addresses to send and receive EUR-T. keccak256("EurtDepositManager") bytes32 internal constant ROLE_EURT_DEPOSIT_MANAGER = 0x7c8ecdcba80ce87848d16ad77ef57cc196c208fc95c5638e4a48c681a34d4fe7; } contract IBasicToken { //////////////////////// // Events //////////////////////// event Transfer( address indexed from, address indexed to, uint256 amount); //////////////////////// // Public functions //////////////////////// /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public constant returns (uint256); /// @param owner The address that's balance is being requested /// @return The balance of `owner` at the current block function balanceOf(address owner) public constant returns (uint256 balance); /// @notice Send `amount` tokens to `to` from `msg.sender` /// @param to The address of the recipient /// @param amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address to, uint256 amount) public returns (bool success); } /// @title allows deriving contract to recover any token or ether that it has balance of /// @notice note that this opens your contracts to claims from various people saying they lost tokens and they want them back /// be ready to handle such claims /// @dev use with care! /// 1. ROLE_RECLAIMER is allowed to claim tokens, it's not returning tokens to original owner /// 2. in derived contract that holds any token by design you must override `reclaim` and block such possibility. /// see LockedAccount as an example contract Reclaimable is AccessControlled, AccessRoles { //////////////////////// // Constants //////////////////////// IBasicToken constant internal RECLAIM_ETHER = IBasicToken(0x0); //////////////////////// // Public functions //////////////////////// function reclaim(IBasicToken token) public only(ROLE_RECLAIMER) { address reclaimer = msg.sender; if(token == RECLAIM_ETHER) { reclaimer.transfer(this.balance); } else { uint256 balance = token.balanceOf(this); require(token.transfer(reclaimer, balance)); } } } /// @title access policy based on Access Control Lists concept /// @dev Allows to assign an address to a set of roles (n:n relation) and querying if such specific assignment exists. /// This assignment happens in two contexts: /// - contract context which allows to build a set of local permissions enforced for particular contract /// - global context which defines set of global permissions that apply to any contract using this RoleBasedAccessPolicy as Access Policy /// Permissions are cascading as follows /// - evaluate permission for given subject for given object (local context) /// - evaluate permission for given subject for all objects (global context) /// - evaluate permissions for any subject (everyone) for given object (everyone local context) /// - evaluate permissions for any subject (everyone) for all objects (everyone global context) /// - if still unset then disallow /// Permission is cascaded up only if it was evaluated as Unset at particular level. See EVERYONE and GLOBAL definitions for special values (they are 0x0 addresses) /// RoleBasedAccessPolicy is its own policy. When created, creator has ROLE_ACCESS_CONTROLLER role. Right pattern is to transfer this control to some other (non deployer) account and then destroy deployer private key. /// See IAccessControlled for definitions of subject, object and role contract RoleBasedAccessPolicy is IAccessPolicy, AccessControlled, Reclaimable { //////////////// // Types //////////////// // Łukasiewicz logic values enum TriState { Unset, Allow, Deny } //////////////////////// // Constants //////////////////////// IAccessControlled private constant GLOBAL = IAccessControlled(0x0); address private constant EVERYONE = 0x0; //////////////////////// // Mutable state //////////////////////// /// @dev subject → role → object → allowed mapping (address => mapping(bytes32 => mapping(address => TriState))) private _access; /// @notice used to enumerate all users assigned to given role in object context /// @dev object → role → addresses mapping (address => mapping(bytes32 => address[])) private _accessList; //////////////////////// // Events //////////////////////// /// @dev logs change of permissions, 'controller' is an address with ROLE_ACCESS_CONTROLLER event LogAccessChanged( address controller, address indexed subject, bytes32 role, address indexed object, TriState oldValue, TriState newValue ); event LogAccess( address indexed subject, bytes32 role, address indexed object, bytes4 verb, bool granted ); //////////////////////// // Constructor //////////////////////// function RoleBasedAccessPolicy() AccessControlled(this) // We are our own policy. This is immutable. public { // Issue the local and global AccessContoler role to creator _access[msg.sender][ROLE_ACCESS_CONTROLLER][this] = TriState.Allow; _access[msg.sender][ROLE_ACCESS_CONTROLLER][GLOBAL] = TriState.Allow; // Update enumerator accordingly so those permissions are visible as any other updatePermissionEnumerator(msg.sender, ROLE_ACCESS_CONTROLLER, this, TriState.Unset, TriState.Allow); updatePermissionEnumerator(msg.sender, ROLE_ACCESS_CONTROLLER, GLOBAL, TriState.Unset, TriState.Allow); } //////////////////////// // Public functions //////////////////////// // Overrides `AccessControlled.setAccessPolicy(IAccessPolicy,address)` function setAccessPolicy(IAccessPolicy, address) public only(ROLE_ACCESS_CONTROLLER) { // `RoleBasedAccessPolicy` always controls its // own access. Disallow changing this by overriding // the `AccessControlled.setAccessPolicy` function. revert(); } // Implements `IAccessPolicy.allowed(address, bytes32, address, bytes4)` function allowed( address subject, bytes32 role, address object, bytes4 verb ) public // constant // NOTE: Solidity does not allow subtyping interfaces returns (bool) { bool set = false; bool allow = false; TriState value = TriState.Unset; // Cascade local, global, everyone local, everyone global value = _access[subject][role][object]; set = value != TriState.Unset; allow = value == TriState.Allow; if (!set) { value = _access[subject][role][GLOBAL]; set = value != TriState.Unset; allow = value == TriState.Allow; } if (!set) { value = _access[EVERYONE][role][object]; set = value != TriState.Unset; allow = value == TriState.Allow; } if (!set) { value = _access[EVERYONE][role][GLOBAL]; set = value != TriState.Unset; allow = value == TriState.Allow; } // If none is set then disallow if (!set) { allow = false; } // Log and return LogAccess(subject, role, object, verb, allow); return allow; } // Assign a role to a user globally function setUserRole( address subject, bytes32 role, IAccessControlled object, TriState newValue ) public only(ROLE_ACCESS_CONTROLLER) { setUserRolePrivate(subject, role, object, newValue); } // Atomically change a set of role assignments function setUserRoles( address[] subjects, bytes32[] roles, IAccessControlled[] objects, TriState[] newValues ) public only(ROLE_ACCESS_CONTROLLER) { require(subjects.length == roles.length); require(subjects.length == objects.length); require(subjects.length == newValues.length); for(uint256 i = 0; i < subjects.length; ++i) { setUserRolePrivate(subjects[i], roles[i], objects[i], newValues[i]); } } function getValue( address subject, bytes32 role, IAccessControlled object ) public constant returns (TriState) { return _access[subject][role][object]; } function getUsers( IAccessControlled object, bytes32 role ) public constant returns (address[]) { return _accessList[object][role]; } //////////////////////// // Private functions //////////////////////// function setUserRolePrivate( address subject, bytes32 role, IAccessControlled object, TriState newValue ) private { // An access controler is not allowed to revoke his own right on this // contract. This prevents access controlers from locking themselves // out. We also require the current contract to be its own policy for // this to work. This is enforced elsewhere. require(role != ROLE_ACCESS_CONTROLLER || subject != msg.sender || object != this); // Fetch old value and short-circuit no-ops TriState oldValue = _access[subject][role][object]; if(oldValue == newValue) { return; } // Update the mapping _access[subject][role][object] = newValue; // Update permission in enumerator updatePermissionEnumerator(subject, role, object, oldValue, newValue); // Log LogAccessChanged(msg.sender, subject, role, object, oldValue, newValue); } function updatePermissionEnumerator( address subject, bytes32 role, IAccessControlled object, TriState oldValue, TriState newValue ) private { // Update the list on add / remove address[] storage list = _accessList[object][role]; // Add new subject only when going form Unset to Allow/Deny if(oldValue == TriState.Unset && newValue != TriState.Unset) { list.push(subject); } // Remove subject when unsetting Allow/Deny if(oldValue != TriState.Unset && newValue == TriState.Unset) { for(uint256 i = 0; i < list.length; ++i) { if(list[i] == subject) { // replace unset address with last address in the list, cut list size list[i] = list[list.length - 1]; delete list[list.length - 1]; list.length -= 1; // there will be no more matches break; } } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"subject","type":"address"},{"name":"role","type":"bytes32"},{"name":"object","type":"address"}],"name":"getValue","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"object","type":"address"},{"name":"role","type":"bytes32"}],"name":"getUsers","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"setAccessPolicy","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"subject","type":"address"},{"name":"role","type":"bytes32"},{"name":"object","type":"address"},{"name":"verb","type":"bytes4"}],"name":"allowed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"subject","type":"address"},{"name":"role","type":"bytes32"},{"name":"object","type":"address"},{"name":"newValue","type":"uint8"}],"name":"setUserRole","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"subjects","type":"address[]"},{"name":"roles","type":"bytes32[]"},{"name":"objects","type":"address[]"},{"name":"newValues","type":"uint8[]"}],"name":"setUserRoles","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"accessPolicy","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaim","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"},{"indexed":true,"name":"subject","type":"address"},{"indexed":false,"name":"role","type":"bytes32"},{"indexed":true,"name":"object","type":"address"},{"indexed":false,"name":"oldValue","type":"uint8"},{"indexed":false,"name":"newValue","type":"uint8"}],"name":"LogAccessChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"subject","type":"address"},{"indexed":false,"name":"role","type":"bytes32"},{"indexed":true,"name":"object","type":"address"},{"indexed":false,"name":"verb","type":"bytes4"},{"indexed":false,"name":"granted","type":"bool"}],"name":"LogAccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"},{"indexed":false,"name":"oldPolicy","type":"address"},{"indexed":false,"name":"newPolicy","type":"address"}],"name":"LogAccessPolicyChanged","type":"event"}]
Contract Creation Code
606060405234156200001057600080fd5b5b305b600160a060020a03811615156200002957600080fd5b60008054600160a060020a031916600160a060020a0383161790555b50600160a060020a0333811660009081526001602081815260408084206000805160206200131f83398151915285528252808420309095168452939052919020805460ff191682805b0217905550600160a060020a03331660009081526001602081815260408084206000805160206200131f83398151915285528252808420848052909152909120805460ff191682805b02179055506200010a336000805160206200131f833981519152306000600164010000000062000cf66200013f82021704565b62000138336000805160206200131f833981519152600080600164010000000062000cf66200013f82021704565b5b6200038a565b600160a060020a0383166000908152600260209081526040808320878452909152812090805b8460028111156200017257fe5b1480156200018e575060005b8360028111156200018b57fe5b14155b15620001d6578154829060018101620001a8838262000339565b916000526020600020900160005b8154600160a060020a03808c166101009390930a92830292021916179055505b60005b846002811115620001e657fe5b1415801562000202575060005b8360028111156200020057fe5b145b156200032e575060005b81548110156200032e5786600160a060020a031682828154811015156200022f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141562000324578154829060001981019081106200027257fe5b906000526020600020900160005b9054906101000a9004600160a060020a03168282815481101515620002a157fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550816001838054905003815481101515620002e757fe5b906000526020600020900160005b81546101009190910a600160a060020a0302191690558154600019016200031d838262000339565b506200032e565b5b6001016200020c565b5b5b50505050505050565b81548183558181151162000360576000838152602090206200036091810190830162000366565b5b505050565b6200038791905b808211156200038357600081556001016200036d565b5090565b90565b610f85806200039a6000396000f300606060405236156100725763ffffffff60e060020a6000350416630beeb0af811461007757806311d817f2146100c4578063578756311461013a5780639085b77f14610161578063c3bdc16f146101ab578063e88eff06146101dc578063f5d60a51146102ed578063fc772c8b1461031c575b600080fd5b341561008257600080fd5b6100a0600160a060020a03600435811690602435906044351661033d565b604051808260028111156100b057fe5b60ff16815260200191505060405180910390f35b34156100cf57600080fd5b6100e6600160a060020a0360043516602435610376565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101265780820151818401525b60200161010d565b505050509050019250505060405180910390f35b341561014557600080fd5b61015f600160a060020a0360043581169060243516610404565b005b341561016c57600080fd5b610197600160a060020a036004358116906024359060443516600160e060020a0319606435166104d3565b604051901515815260200160405180910390f35b34156101b657600080fd5b61015f600160a060020a03600435811690602435906044351660ff606435166106e6565b005b34156101e757600080fd5b61015f60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506107bf95505050505050565b005b34156102f857600080fd5b61030061092a565b604051600160a060020a03909116815260200160405180910390f35b341561032757600080fd5b61015f600160a060020a036004351661093a565b005b600160a060020a03808416600090815260016020908152604080832086845282528083209385168352929052205460ff165b9392505050565b61037e610edc565b600160a060020a03831660009081526002602090815260408083208584528252918290208054909290918281020190519081016040528092919081815260200182805480156103f657602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116103d8575b505050505090505b92915050565b60008054600080516020610f3a83398151915291600160a060020a0390911690639085b77f90339084903090600160e060020a0319813516906040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156104a257600080fd5b6102c65a03f115156104b357600080fd5b50505060405180519050151561007257600080fd5b600080fd5b5b505050565b600160a060020a03808516600090815260016020908152604080832087845282528083209386168352929052908120548190819060ff16815b81600281111561051857fe5b1415925060015b81600281111561052b57fe5b14915082151561058a5750600160a060020a0387166000908152600160209081526040808320898452825280832083805290915281205460ff16905b81600281111561057357fe5b1415925060015b81600281111561058657fe5b1491505b8215156105fc575060008681527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960209081526040808320600160a060020a038916845290915281205460ff16905b8160028111156105e557fe5b1415925060015b8160028111156105f857fe5b1491505b821515610665575060008681527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020908152604080832083805290915281205460ff16905b81600281111561064e57fe5b1415925060015b81600281111561066157fe5b1491505b82151561067157600091505b85600160a060020a031688600160a060020a03167ff5122232b588fd8926743beb8e1ce73bb77585b17da27b759a60596bcb80e416898886604051928352600160e060020a0319909116602083015215156040808301919091526060909101905180910390a38193505b505050949350505050565b60008054600080516020610f3a83398151915291600160a060020a0390911690639085b77f90339084903090600160e060020a0319813516906040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561078457600080fd5b6102c65a03f1151561079557600080fd5b5050506040518051905015156107aa57600080fd5b6107b685858585610b5f565b5b5b5050505050565b60008054600080516020610f3a83398151915290600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561085657600080fd5b6102c65a03f1151561086757600080fd5b50505060405180519050151561087c57600080fd5b845186511461088a57600080fd5b835186511461089857600080fd5b82518651146108a657600080fd5b600091505b8551821015610920576109148683815181106108c357fe5b906020019060200201518684815181106108d957fe5b906020019060200201518685815181106108ef57fe5b9060200190602002015186868151811061090557fe5b90602001906020020151610b5f565b5b8160010191506108ab565b5b5b505050505050565b600054600160a060020a03165b90565b6000805481907f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc590600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156109e557600080fd5b6102c65a03f115156109f657600080fd5b505050604051805190501515610a0b57600080fd5b339250600160a060020a0384161515610a605782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515610a5b57600080fd5b610b56565b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ab757600080fd5b6102c65a03f11515610ac857600080fd5b5050506040518051925050600160a060020a03841663a9059cbb848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b3057600080fd5b6102c65a03f11515610b4157600080fd5b505050604051805190501515610b5657600080fd5b5b5b5b50505050565b6000600080516020610f3a83398151915284141580610b90575033600160a060020a031685600160a060020a031614155b80610bad575030600160a060020a031683600160a060020a031614155b1515610bb857600080fd5b50600160a060020a03808516600090815260016020908152604080832087845282528083209386168352929052205460ff16816002811115610bf657fe5b816002811115610c0257fe5b1415610c0d576107b6565b600160a060020a038086166000908152600160208181526040808420898552825280842094881684529390529190208054849260ff1990911690836002811115610c5357fe5b0217905550610c658585858486610cf6565b82600160a060020a031685600160a060020a03167f56e428fc9adc34022bed992b624158401d97ef3bfa2763cacbdb984ec1af89bf33878587604051600160a060020a03851681526020810184905260408101836002811115610cc457fe5b60ff168152602001826002811115610cd857fe5b60ff16815260200194505050505060405180910390a35b5050505050565b600160a060020a0383166000908152600260209081526040808320878452909152812090805b846002811115610d2857fe5b148015610d42575060005b836002811115610d3f57fe5b14155b15610d87578154829060018101610d598382610eee565b916000526020600020900160005b8154600160a060020a03808c166101009390930a92830292021916179055505b60005b846002811115610d9657fe5b14158015610db0575060005b836002811115610dae57fe5b145b15610ed1575060005b8154811015610ed15786600160a060020a03168282815481101515610dda57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415610ec857815482906000198101908110610e1b57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03168282815481101515610e4957fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550816001838054905003815481101515610e8e57fe5b906000526020600020900160005b81546101009190910a600160a060020a030219169055815460001901610ec28382610eee565b50610ed1565b5b600101610db9565b5b5b50505050505050565b60206040519081016040526000815290565b8154818355818115116104cd576000838152602090206104cd918101908301610f18565b5b505050565b61093791905b80821115610f325760008155600101610f1e565b5090565b905600ac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7daa165627a7a72305820e7a9dcfedd0e78aabf9d840c8660e0b34fd29bbdc2fe767e5fc96c77260eed220029ac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da
Deployed Bytecode
0x606060405236156100725763ffffffff60e060020a6000350416630beeb0af811461007757806311d817f2146100c4578063578756311461013a5780639085b77f14610161578063c3bdc16f146101ab578063e88eff06146101dc578063f5d60a51146102ed578063fc772c8b1461031c575b600080fd5b341561008257600080fd5b6100a0600160a060020a03600435811690602435906044351661033d565b604051808260028111156100b057fe5b60ff16815260200191505060405180910390f35b34156100cf57600080fd5b6100e6600160a060020a0360043516602435610376565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101265780820151818401525b60200161010d565b505050509050019250505060405180910390f35b341561014557600080fd5b61015f600160a060020a0360043581169060243516610404565b005b341561016c57600080fd5b610197600160a060020a036004358116906024359060443516600160e060020a0319606435166104d3565b604051901515815260200160405180910390f35b34156101b657600080fd5b61015f600160a060020a03600435811690602435906044351660ff606435166106e6565b005b34156101e757600080fd5b61015f60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506107bf95505050505050565b005b34156102f857600080fd5b61030061092a565b604051600160a060020a03909116815260200160405180910390f35b341561032757600080fd5b61015f600160a060020a036004351661093a565b005b600160a060020a03808416600090815260016020908152604080832086845282528083209385168352929052205460ff165b9392505050565b61037e610edc565b600160a060020a03831660009081526002602090815260408083208584528252918290208054909290918281020190519081016040528092919081815260200182805480156103f657602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116103d8575b505050505090505b92915050565b60008054600080516020610f3a83398151915291600160a060020a0390911690639085b77f90339084903090600160e060020a0319813516906040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156104a257600080fd5b6102c65a03f115156104b357600080fd5b50505060405180519050151561007257600080fd5b600080fd5b5b505050565b600160a060020a03808516600090815260016020908152604080832087845282528083209386168352929052908120548190819060ff16815b81600281111561051857fe5b1415925060015b81600281111561052b57fe5b14915082151561058a5750600160a060020a0387166000908152600160209081526040808320898452825280832083805290915281205460ff16905b81600281111561057357fe5b1415925060015b81600281111561058657fe5b1491505b8215156105fc575060008681527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960209081526040808320600160a060020a038916845290915281205460ff16905b8160028111156105e557fe5b1415925060015b8160028111156105f857fe5b1491505b821515610665575060008681527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020908152604080832083805290915281205460ff16905b81600281111561064e57fe5b1415925060015b81600281111561066157fe5b1491505b82151561067157600091505b85600160a060020a031688600160a060020a03167ff5122232b588fd8926743beb8e1ce73bb77585b17da27b759a60596bcb80e416898886604051928352600160e060020a0319909116602083015215156040808301919091526060909101905180910390a38193505b505050949350505050565b60008054600080516020610f3a83398151915291600160a060020a0390911690639085b77f90339084903090600160e060020a0319813516906040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561078457600080fd5b6102c65a03f1151561079557600080fd5b5050506040518051905015156107aa57600080fd5b6107b685858585610b5f565b5b5b5050505050565b60008054600080516020610f3a83398151915290600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561085657600080fd5b6102c65a03f1151561086757600080fd5b50505060405180519050151561087c57600080fd5b845186511461088a57600080fd5b835186511461089857600080fd5b82518651146108a657600080fd5b600091505b8551821015610920576109148683815181106108c357fe5b906020019060200201518684815181106108d957fe5b906020019060200201518685815181106108ef57fe5b9060200190602002015186868151811061090557fe5b90602001906020020151610b5f565b5b8160010191506108ab565b5b5b505050505050565b600054600160a060020a03165b90565b6000805481907f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc590600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156109e557600080fd5b6102c65a03f115156109f657600080fd5b505050604051805190501515610a0b57600080fd5b339250600160a060020a0384161515610a605782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515610a5b57600080fd5b610b56565b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ab757600080fd5b6102c65a03f11515610ac857600080fd5b5050506040518051925050600160a060020a03841663a9059cbb848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b3057600080fd5b6102c65a03f11515610b4157600080fd5b505050604051805190501515610b5657600080fd5b5b5b5b50505050565b6000600080516020610f3a83398151915284141580610b90575033600160a060020a031685600160a060020a031614155b80610bad575030600160a060020a031683600160a060020a031614155b1515610bb857600080fd5b50600160a060020a03808516600090815260016020908152604080832087845282528083209386168352929052205460ff16816002811115610bf657fe5b816002811115610c0257fe5b1415610c0d576107b6565b600160a060020a038086166000908152600160208181526040808420898552825280842094881684529390529190208054849260ff1990911690836002811115610c5357fe5b0217905550610c658585858486610cf6565b82600160a060020a031685600160a060020a03167f56e428fc9adc34022bed992b624158401d97ef3bfa2763cacbdb984ec1af89bf33878587604051600160a060020a03851681526020810184905260408101836002811115610cc457fe5b60ff168152602001826002811115610cd857fe5b60ff16815260200194505050505060405180910390a35b5050505050565b600160a060020a0383166000908152600260209081526040808320878452909152812090805b846002811115610d2857fe5b148015610d42575060005b836002811115610d3f57fe5b14155b15610d87578154829060018101610d598382610eee565b916000526020600020900160005b8154600160a060020a03808c166101009390930a92830292021916179055505b60005b846002811115610d9657fe5b14158015610db0575060005b836002811115610dae57fe5b145b15610ed1575060005b8154811015610ed15786600160a060020a03168282815481101515610dda57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415610ec857815482906000198101908110610e1b57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03168282815481101515610e4957fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550816001838054905003815481101515610e8e57fe5b906000526020600020900160005b81546101009190910a600160a060020a030219169055815460001901610ec28382610eee565b50610ed1565b5b600101610db9565b5b5b50505050505050565b60206040519081016040526000815290565b8154818355818115116104cd576000838152602090206104cd918101908301610f18565b5b505050565b61093791905b80821115610f325760008155600101610f1e565b5090565b905600ac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7daa165627a7a72305820e7a9dcfedd0e78aabf9d840c8660e0b34fd29bbdc2fe767e5fc96c77260eed220029
Swarm Source
bzzr://e7a9dcfedd0e78aabf9d840c8660e0b34fd29bbdc2fe767e5fc96c77260eed22
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.