Contract Overview
Balance:
0 Ether
EtherValue:
$0.00
More Info
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x0f6d5b0e21b614357f26b4f116633593a9a01f899b2d022e49071a36afc29dcc | Add Permissions | 15181611 | 197 days 1 hr ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00806132 | ||
0x9e314b1f6332ff14d90b5aa4dfcc8d2c8eda3bb6b1d6c7ad62fa41c1d006c7f6 | Add Permissions | 14975877 | 230 days 22 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00349455 | ||
0xc8b62435ab39bb9eb556cda978617bffefe304631d1e9bbcd31dd6cc096d59a7 | Add Permissions | 14973463 | 231 days 8 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.0015101 | ||
0xcd06b15d9b6ef32febcf1e2edc6e06d19c7a5af0e13dd0373afa1726043adf53 | Add Permissions | 14829373 | 255 days 10 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.0018557 | ||
0x04723970464ac2d36f5f2977e561f4d3f77f8434ba526ccc8bc24578b5b77099 | Add Permissions | 14571838 | 296 days 5 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00713681 | ||
0x45b27cd94618e06b9c74eedecd79f348ed925428482af363241d33f3f414f8dd | Add Permissions | 14571832 | 296 days 5 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00633695 | ||
0xb6b171cc7a2218090570f0dd32bfac5cee07192cc98b962c7ad12b6c526c1d65 | Add Permissions | 14571550 | 296 days 6 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00450298 | ||
0xaffd10a63a67b3591fb35b9fc50ee5e450d4af34625d3325f898885ff8523b9c | Add Permissions | 14392779 | 324 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00582863 | ||
0x1d0e001fa047f13809cdc42315fdb4ffa8ec9ef9469428e651b11447b86b6c96 | Add Permissions | 14392775 | 324 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00581175 | ||
0x4b3b5d19e5dfb0fcdd315d8d30c8e680edbc1909dae6bb6896d3edb48c465662 | Add Permissions | 14392772 | 324 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00889669 | ||
0x282a5a446b47dc59d27e62cb980d2b7cf578737a70331112572877379e74ceb5 | Add Permissions | 14392772 | 324 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00884353 | ||
0x2cd67ee0cd58b7dda57689b10e2c85d0b985fbe99855afb8a3dabd57861fd8e5 | Add Permissions | 14392772 | 324 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00530495 | ||
0x39acdea3e236a0aa9ccbd1e0711fddf57d295e38808a65a90dc76ea69f792cc1 | Add Permissions | 14211984 | 352 days 4 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00406528 | ||
0x636f2950772d1e3d3753c1485497c58f01f2c0de861d59e52e8547b4400fa8a1 | Add Permissions | 14211659 | 352 days 5 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00866089 | ||
0xf03613970f33b2cc1e8856020c6d3d7cb8f6a5ce893d1f2c5481adfab446954f | Add Permissions | 14180608 | 357 days 52 mins ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00795329 | ||
0x3c3e5e689fafedd47c371183606e0cbdaf1c011bdb3ff9224c7eef9f722fcea2 | Add Permissions | 14116565 | 366 days 22 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.02375664 | ||
0x090c457b3f353678f69b62c7447c512f70b052d332d88bf0b5c759298dbd40df | Add Permissions | 14116564 | 366 days 22 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.01261134 | ||
0x2daa6368fbf01e57f540ebe4b41eccb7ddba0c20b957aee2d5c971c911b06cfa | Add Permissions | 14116562 | 366 days 22 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.01132751 | ||
0x4f1dcfd21b959cb7a28813e8b8d15403b62ef19141851262bb89f06f62658b41 | Add Permissions | 14115384 | 367 days 2 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.0140836 | ||
0x3451c8a8249f9630df25037107db2529b9fbd8b7ae850980b3b08996f151b34d | Add Permissions | 14115383 | 367 days 2 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.01254034 | ||
0x1688ee484bfee286e2d659b3aa92454cdcb106bcc40aa488f0c5990c71f9bcc6 | Add Permissions | 14115383 | 367 days 2 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.0210293 | ||
0x9293f16b18e8dcb16fb99518f5d0a7dfb3ed090a5f7dc37c43021bf14e536fa1 | Add Permissions | 14115197 | 367 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00566445 | ||
0x99efc409403f98c29dd95e6a8e31131c111dbf43774929da9e0ccf4e74816186 | Add Permissions | 14115157 | 367 days 3 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00693947 | ||
0x2fd3b6d7d2bef6b354557831adeab3ee4c8018d03b1ec15c03b4c897c2bf140d | Add Permissions | 14032118 | 379 days 23 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00958743 | ||
0xfe31fbbabf665ada95856cbda7e3f64c05ab5db82a49496b43f57c9e074d7c1d | Add Permissions | 14032118 | 379 days 23 hrs ago | IN | 0xf4a1f5fea79c3609514a417425971fadc10ecfbe | 0 Ether | 0.00462247 |
[ Download CSV Export ]
View more zero value Internal Transactions in Advanced View mode
Contract Name:
PermissionManager
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.6.12; import {IPermissionManager} from '../../interfaces/IPermissionManager.sol'; import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol'; /** * @title PermissionManager contract * @notice Implements basic whitelisting functions for different actors of the permissioned protocol * @author Aave **/ contract PermissionManager is IPermissionManager, Ownable { struct UserData { uint256 permissions; address permissionAdmin; } mapping(address => UserData) _users; mapping(address => uint256) _permissionsAdmins; uint256 public constant MAX_NUM_OF_ROLES = 256; modifier onlyPermissionAdmins(address user) { require(_permissionsAdmins[user] > 0, 'CALLER_NOT_PERMISSIONS_ADMIN'); _; } ///@inheritdoc IPermissionManager function addPermissionAdmins(address[] calldata admins) external override onlyOwner { for (uint256 i = 0; i < admins.length; i++) { _permissionsAdmins[admins[i]] = 1; emit PermissionsAdminSet(admins[i], true); } } ///@inheritdoc IPermissionManager function removePermissionAdmins(address[] calldata admins) external override onlyOwner { for (uint256 i = 0; i < admins.length; i++) { _permissionsAdmins[admins[i]] = 0; emit PermissionsAdminSet(admins[i], false); } } ///@inheritdoc IPermissionManager function addPermissions(uint256[] calldata roles, address[] calldata users) external override onlyPermissionAdmins(msg.sender) { require(roles.length == users.length, 'INCONSISTENT_ARRAYS_LENGTH'); for (uint256 i = 0; i < users.length; i++) { uint256 role = roles[i]; address user = users[i]; require(role < MAX_NUM_OF_ROLES, 'INVALID_ROLE'); uint256 permissions = _users[user].permissions; address permissionAdmin = _users[user].permissionAdmin; require( (permissions != 0 && permissionAdmin == msg.sender) || _users[user].permissionAdmin == address(0), 'INVALID_PERMISSIONADMIN' ); if (permissions == 0) { _users[user].permissionAdmin = msg.sender; } _users[user].permissions = permissions | (1 << role); emit RoleSet(user, role, msg.sender, true); } } ///@inheritdoc IPermissionManager function removePermissions(uint256[] calldata roles, address[] calldata users) external override onlyPermissionAdmins(msg.sender) { require(roles.length == users.length, 'INCONSISTENT_ARRAYS_LENGTH'); for (uint256 i = 0; i < users.length; i++) { uint256 role = roles[i]; address user = users[i]; require(role < MAX_NUM_OF_ROLES, 'INVALID_ROLE'); uint256 permissions = _users[user].permissions; address permissionAdmin = _users[user].permissionAdmin; require( (permissions != 0 && permissionAdmin == msg.sender) || _users[user].permissionAdmin == address(0), 'INVALID_PERMISSIONADMIN' ); _users[user].permissions = permissions & ~(1 << role); if (_users[user].permissions == 0) { //all permission have been removed _users[user].permissionAdmin = address(0); } emit RoleSet(user, role, msg.sender, false); } } ///@inheritdoc IPermissionManager function getUserPermissions(address user) external view override returns (uint256[] memory, uint256) { uint256[] memory roles = new uint256[](256); uint256 rolesCount = 0; uint256 userPermissions = _users[user].permissions; for (uint256 i = 0; i < 256; i++) { if ((userPermissions >> i) & 1 > 0) { roles[rolesCount] = i; rolesCount++; } } return (roles, rolesCount); } ///@inheritdoc IPermissionManager function isInRole(address user, uint256 role) external view override returns (bool) { return (_users[user].permissions >> role) & 1 > 0; } ///@inheritdoc IPermissionManager function isInAllRoles(address user, uint256[] calldata roles) external view override returns (bool) { for (uint256 i = 0; i < roles.length; i++) { if ((_users[user].permissions >> roles[i]) & 1 == 0) { return false; } } return true; } ///@inheritdoc IPermissionManager function isInAnyRole(address user, uint256[] calldata roles) external view override returns (bool) { for (uint256 i = 0; i < roles.length; i++) { if ((_users[user].permissions >> roles[i]) & 1 > 0) { return true; } } return false; } ///@inheritdoc IPermissionManager function isPermissionsAdmin(address admin) public view override returns (bool) { return _permissionsAdmins[admin] > 0; } ///@inheritdoc IPermissionManager function getUserPermissionAdmin(address user) external view override returns (address) { return _users[user].permissionAdmin; } ///@inheritdoc IPermissionManager function isUserPermissionAdminValid(address user) external view override returns (bool) { return _permissionsAdmins[_users[user].permissionAdmin] > 0; } }
pragma solidity 0.6.12; interface IPermissionManager { event RoleSet(address indexed user, uint256 indexed role, address indexed whiteLister, bool set); event PermissionsAdminSet(address indexed user, bool set); /** * @dev Allows owner to add new permission admins * @param admins The addresses to promote to permission admin **/ function addPermissionAdmins(address[] calldata admins) external; /** * @dev Allows owner to remove permission admins * @param admins The addresses to demote as permission admin **/ function removePermissionAdmins(address[] calldata admins) external; /** * @dev Allows owner to whitelist a set of addresses for multiple roles * @param roles The list of roles to assign * @param users The list of users to add to the corresponding role **/ function addPermissions(uint256[] calldata roles, address[] calldata users) external; /** * @dev Allows owner to remove permissions on a set of addresses * @param roles The list of roles to remove * @param users The list of users to remove from the corresponding role **/ function removePermissions(uint256[] calldata roles, address[] calldata users) external; /** * @dev Returns the permissions configuration for a specific user * @param user The address of the user * @return the set of permissions states for the user **/ function getUserPermissions(address user) external view returns (uint256[] memory, uint256); /** * @dev Used to query if a certain user has a certain role * @param user The address of the user * @return True if the user is in the specific role **/ function isInRole(address user, uint256 role) external view returns (bool); /** * @dev Used to query if a certain user has the permissions admin role * @param user The address of the user * @return True if the user is a permissions admin, false otherwise **/ function isPermissionsAdmin(address user) external view returns (bool); /** * @dev Used to query if a certain user satisfies certain roles * @param user The address of the user * @param roles The roles to check * @return True if the user has all the roles, false otherwise **/ function isInAllRoles(address user, uint256[] calldata roles) external view returns (bool); /** * @dev Used to query if a certain user is in at least one of the roles specified * @param user The address of the user * @return True if the user has all the roles, false otherwise **/ function isInAnyRole(address user, uint256[] calldata roles) external view returns (bool); /** * @dev Used to query if a certain user is in at least one of the roles specified * @param user The address of the user * @return the address of the permissionAdmin of the user **/ function getUserPermissionAdmin(address user) external view returns (address); /** * @dev Used to query if the permission admin of a certain user is valid * @param user The address of the user * @return true if the permission admin of user is valid, false otherwise **/ function isUserPermissionAdminValid(address user) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import './Context.sol'; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 100 }, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"PermissionsAdminSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"role","type":"uint256"},{"indexed":true,"internalType":"address","name":"whiteLister","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"RoleSet","type":"event"},{"inputs":[],"name":"MAX_NUM_OF_ROLES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"name":"addPermissionAdmins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"roles","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"addPermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPermissionAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPermissions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"roles","type":"uint256[]"}],"name":"isInAllRoles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"roles","type":"uint256[]"}],"name":"isInAnyRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"isInRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPermissionsAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isUserPermissionAdminValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"name":"removePermissionAdmins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"roles","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"removePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6111488061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100d55760003560e01c80638857a624116100875780638857a624146102fd5780638cadc3341461036b5780638da5cb5b14610429578063be5de6af14610431578063c9c8836014610457578063ca553a7a1461047d578063ea6c64fb146104eb578063f2fde38b146105a9576100d5565b80631cea0e8c146100da57806325fde6631461011c5780633e734f551461019d578063643148251461022f5780636d38f7841461025b578063715018a6146102d957806377133d81146102e3575b600080fd5b610100600480360360208110156100f057600080fd5b50356001600160a01b03166105cf565b604080516001600160a01b039092168252519081900360200190f35b6101426004803603602081101561013257600080fd5b50356001600160a01b03166105f1565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610188578181015183820152602001610170565b50505050905001935050505060405180910390f35b61021b600480360360408110156101b357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101dd57600080fd5b8201836020820111156101ef57600080fd5b803590602001918460208302840111600160201b8311171561021057600080fd5b509092509050610680565b604080519115158252519081900360200190f35b61021b6004803603604081101561024557600080fd5b506001600160a01b0381351690602001356106f4565b61021b6004803603604081101561027157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029b57600080fd5b8201836020820111156102ad57600080fd5b803590602001918460208302840111600160201b831117156102ce57600080fd5b50909250905061071b565b6102e161078d565b005b6102eb61082f565b60408051918252519081900360200190f35b6102e16004803603602081101561031357600080fd5b810190602081018135600160201b81111561032d57600080fd5b82018360208201111561033f57600080fd5b803590602001918460208302840111600160201b8311171561036057600080fd5b509092509050610835565b6102e16004803603604081101561038157600080fd5b810190602081018135600160201b81111561039b57600080fd5b8201836020820111156103ad57600080fd5b803590602001918460208302840111600160201b831117156103ce57600080fd5b919390929091602081019035600160201b8111156103eb57600080fd5b8201836020820111156103fd57600080fd5b803590602001918460208302840111600160201b8311171561041e57600080fd5b50909250905061094a565b610100610be0565b61021b6004803603602081101561044757600080fd5b50356001600160a01b0316610bef565b61021b6004803603602081101561046d57600080fd5b50356001600160a01b0316610c0c565b6102e16004803603602081101561049357600080fd5b810190602081018135600160201b8111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111600160201b831117156104e057600080fd5b509092509050610c3d565b6102e16004803603604081101561050157600080fd5b810190602081018135600160201b81111561051b57600080fd5b82018360208201111561052d57600080fd5b803590602001918460208302840111600160201b8311171561054e57600080fd5b919390929091602081019035600160201b81111561056b57600080fd5b82018360208201111561057d57600080fd5b803590602001918460208302840111600160201b8311171561059e57600080fd5b509092509050610d4d565b6102e1600480360360208110156105bf57600080fd5b50356001600160a01b0316610fd0565b6001600160a01b03908116600090815260016020819052604090912001541690565b604080516101008082526120208201909252606091600091839160208201612000803683375050506001600160a01b03851660009081526001602052604081205491925090815b61010081101561067457600182821c161561066c578084848151811061065a57fe5b60209081029190910101526001909201915b600101610638565b50919350915050915091565b6000805b828110156106e75783838281811061069857fe5b9050602002013560016000876001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116600014156106df5760009150506106ed565b600101610684565b50600190505b9392505050565b6001600160a01b038216600090815260016020819052604090912054821c16151592915050565b6000805b8281101561078257600084848381811061073557fe5b9050602002013560016000886001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116111561077a5760019150506106ed565b60010161071f565b506000949350505050565b6107956110c8565b6000546001600160a01b039081169116146107e5576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61010081565b61083d6110c8565b6000546001600160a01b0390811691161461088d576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b81811015610945576001600260008585858181106108aa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055508282828181106108ea57fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600160405180821515815260200191505060405180910390a2600101610890565b505050565b336000818152600260205260409020546109ab576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b8382146109fc576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610a1557fe5b9050602002013590506000858584818110610a2c57fe5b905060200201356001600160a01b031690506101008210610a83576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610abe57506001600160a01b03811633145b80610ae557506001600160a01b038381166000908152600160208190526040909120015416155b610b30576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020819052604090912090851b19831690819055610b84576001600160a01b03831660009081526001602081905260409091200180546001600160a01b03191690555b60408051600081529051339186916001600160a01b038716917fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94919081900360200190a45050600190920191506109ff9050565b505050505050565b6000546001600160a01b031690565b6001600160a01b0316600090815260026020526040902054151590565b6001600160a01b03908116600090815260016020818152604080842090920154909316825260029092522054151590565b610c456110c8565b6000546001600160a01b03908116911614610c95576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b8181101561094557600060026000858585818110610cb257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550828282818110610cf257fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600060405180821515815260200191505060405180910390a2600101610c98565b33600081815260026020526040902054610dae576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b838214610dff576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610e1857fe5b9050602002013590506000858584818110610e2f57fe5b905060200201356001600160a01b031690506101008210610e86576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610ec157506001600160a01b03811633145b80610ee857506001600160a01b038381166000908152600160208190526040909120015416155b610f33576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b81610f65576001600160a01b03831660009081526001602081905260409091200180546001600160a01b031916331790555b6001600160a01b03831660008181526001602081815260409283902082891b87179055825191825291513393889390927fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94929081900390910190a4505060019092019150610e029050565b610fd86110c8565b6000546001600160a01b03908116911614611028576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d5760405162461bcd60e51b81526004018080602001828103825260268152602001806110cd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220aee55fd2ffe4c1ae4ebcf66d0cd51779458160aebfc82117874fa1cd3a9ae4b664736f6c634300060c0033
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
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.