Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 7 from a total of 7 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Remove Admin Rol... | 18519611 | 837 days ago | IN | 0 ETH | 0.00093031 | ||||
| Remove Admin Rol... | 11744221 | 1850 days ago | IN | 0 ETH | 0.00189663 | ||||
| Add Admin Role | 11653658 | 1864 days ago | IN | 0 ETH | 0.01041376 | ||||
| Add Whitelist Ro... | 11639354 | 1866 days ago | IN | 0 ETH | 0.00670059 | ||||
| Add Whitelist Ro... | 11634578 | 1867 days ago | IN | 0 ETH | 0.02419657 | ||||
| Add Whitelist Ro... | 11634329 | 1867 days ago | IN | 0 ETH | 0.01861275 | ||||
| Add Whitelist Ro... | 11614731 | 1870 days ago | IN | 0 ETH | 0.01305809 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CudosAccessControls
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
import "@openzeppelin/contracts/access/AccessControl.sol";
contract CudosAccessControls is AccessControl {
// Role definitions
bytes32 public constant WHITELISTED_ROLE = keccak256("WHITELISTED_ROLE");
bytes32 public constant SMART_CONTRACT_ROLE = keccak256("SMART_CONTRACT_ROLE");
// Events
event AdminRoleGranted(
address indexed beneficiary,
address indexed caller
);
event AdminRoleRemoved(
address indexed beneficiary,
address indexed caller
);
event WhitelistRoleGranted(
address indexed beneficiary,
address indexed caller
);
event WhitelistRoleRemoved(
address indexed beneficiary,
address indexed caller
);
event SmartContractRoleGranted(
address indexed beneficiary,
address indexed caller
);
event SmartContractRoleRemoved(
address indexed beneficiary,
address indexed caller
);
modifier onlyAdminRole() {
require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "CudosAccessControls: sender must be an admin");
_;
}
constructor() public {
_setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
}
/////////////
// Lookups //
/////////////
function hasAdminRole(address _address) external view returns (bool) {
return hasRole(DEFAULT_ADMIN_ROLE, _address);
}
function hasWhitelistRole(address _address) external view returns (bool) {
return hasRole(WHITELISTED_ROLE, _address);
}
function hasSmartContractRole(address _address) external view returns (bool) {
return hasRole(SMART_CONTRACT_ROLE, _address);
}
///////////////
// Modifiers //
///////////////
function addAdminRole(address _address) external onlyAdminRole {
_setupRole(DEFAULT_ADMIN_ROLE, _address);
emit AdminRoleGranted(_address, _msgSender());
}
function removeAdminRole(address _address) external onlyAdminRole {
revokeRole(DEFAULT_ADMIN_ROLE, _address);
emit AdminRoleRemoved(_address, _msgSender());
}
function addWhitelistRole(address _address) external onlyAdminRole {
_setupRole(WHITELISTED_ROLE, _address);
emit WhitelistRoleGranted(_address, _msgSender());
}
function removeWhitelistRole(address _address) external onlyAdminRole {
revokeRole(WHITELISTED_ROLE, _address);
emit WhitelistRoleRemoved(_address, _msgSender());
}
function addSmartContractRole(address _address) external onlyAdminRole {
_setupRole(SMART_CONTRACT_ROLE, _address);
emit SmartContractRoleGranted(_address, _msgSender());
}
function removeSmartContractRole(address _address) external onlyAdminRole {
revokeRole(SMART_CONTRACT_ROLE, _address);
emit SmartContractRoleRemoved(_address, _msgSender());
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "../utils/EnumerableSet.sol";
import "../utils/Address.sol";
import "../GSN/Context.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context {
using EnumerableSet for EnumerableSet.AddressSet;
using Address for address;
struct RoleData {
EnumerableSet.AddressSet members;
bytes32 adminRole;
}
mapping (bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view returns (bool) {
return _roles[role].members.contains(account);
}
/**
* @dev Returns the number of accounts that have `role`. Can be used
* together with {getRoleMember} to enumerate all bearers of a role.
*/
function getRoleMemberCount(bytes32 role) public view returns (uint256) {
return _roles[role].members.length();
}
/**
* @dev Returns one of the accounts that have `role`. `index` must be a
* value between 0 and {getRoleMemberCount}, non-inclusive.
*
* Role bearers are not sorted in any particular way, and their ordering may
* change at any point.
*
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
* you perform all queries on the same block. See the following
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
* for more information.
*/
function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
return _roles[role].members.at(index);
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) public virtual {
require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) public virtual {
require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) public virtual {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
_roles[role].adminRole = adminRole;
}
function _grantRole(bytes32 role, address account) private {
if (_roles[role].members.add(account)) {
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) private {
if (_roles[role].members.remove(account)) {
emit RoleRevoked(role, account, _msgSender());
}
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping (bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) { // Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
// When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
// so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.
bytes32 lastvalue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastvalue;
// Update the index for the moved value
set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
require(set._values.length > index, "EnumerableSet: index out of bounds");
return set._values[index];
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(value)));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint256(_at(set._inner, index)));
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/*
* @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;
}
}{
"metadata": {
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AdminRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AdminRoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"SmartContractRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"SmartContractRoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"WhitelistRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"WhitelistRoleRemoved","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SMART_CONTRACT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addSmartContractRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWhitelistRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasAdminRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasSmartContractRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasWhitelistRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeSmartContractRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhitelistRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50620000286000620000226200002e565b62000032565b62000142565b3390565b6200003e828262000042565b5050565b60008281526020818152604090912062000067918390620009bf620000bb821b17901c565b156200003e57620000776200002e565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620000d2836001600160a01b038416620000db565b90505b92915050565b6000620000e983836200012a565b6200012157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000d5565b506000620000d5565b60009081526001919091016020526040902054151590565b610dcd80620001526000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063857d2608116100ad578063c395fcb311610071578063c395fcb31461032a578063ca15c87314610350578063d547741f1461036d578063dccfe31014610399578063e12d8647146103bf57610121565b8063857d2608146102895780638a845fc0146102915780639010d07c146102b757806391d14854146102f6578063a217fddf1461032257610121565b806336568abe116100f457806336568abe146101e35780633f16431a1461020f5780636595171c146102355780636b9691711461025b5780637a3226ec1461028157610121565b8063113b0ab214610126578063248a9ca3146101605780632da7952f1461018f5780632f2ff15d146101b5575b600080fd5b61014c6004803603602081101561013c57600080fd5b50356001600160a01b03166103e5565b604080519115158252519081900360200190f35b61017d6004803603602081101561017657600080fd5b5035610405565b60408051918252519081900360200190f35b61014c600480360360208110156101a557600080fd5b50356001600160a01b031661041a565b6101e1600480360360408110156101cb57600080fd5b50803590602001356001600160a01b0316610434565b005b6101e1600480360360408110156101f957600080fd5b50803590602001356001600160a01b03166104a0565b6101e16004803603602081101561022557600080fd5b50356001600160a01b0316610501565b6101e16004803603602081101561024b57600080fd5b50356001600160a01b03166105ab565b6101e16004803603602081101561027157600080fd5b50356001600160a01b0316610648565b61017d6106f2565b61017d610704565b6101e1600480360360208110156102a757600080fd5b50356001600160a01b0316610716565b6102da600480360360408110156102cd57600080fd5b50803590602001356107c0565b604080516001600160a01b039092168252519081900360200190f35b61014c6004803603604081101561030c57600080fd5b50803590602001356001600160a01b03166107df565b61017d6107f7565b61014c6004803603602081101561034057600080fd5b50356001600160a01b03166107fc565b61017d6004803603602081101561036657600080fd5b5035610808565b6101e16004803603604081101561038357600080fd5b50803590602001356001600160a01b031661081f565b6101e1600480360360208110156103af57600080fd5b50356001600160a01b0316610878565b6101e1600480360360208110156103d557600080fd5b50356001600160a01b0316610915565b60006103ff600080516020610ccd833981519152836107df565b92915050565b60009081526020819052604090206002015490565b60006103ff600080516020610d1d833981519152836107df565b600082815260208190526040902060020154610457906104526109d4565b6107df565b6104925760405162461bcd60e51b815260040180806020018281038252602f815260200180610c9e602f913960400191505060405180910390fd5b61049c82826109d8565b5050565b6104a86109d4565b6001600160a01b0316816001600160a01b0316146104f75760405162461bcd60e51b815260040180806020018281038252602f815260200180610d69602f913960400191505060405180910390fd5b61049c8282610a41565b61050e60006104526109d4565b6105495760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610561600080516020610ccd83398151915282610492565b6105696109d4565b6001600160a01b0316816001600160a01b03167f1d5f9ec24c6f91be922ea13ceaad919ad6554a41b5c26087f96289a9baf98ad260405160405180910390a350565b6105b860006104526109d4565b6105f35760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6105fe600082610492565b6106066109d4565b6001600160a01b0316816001600160a01b03167f2570ac42fd8b322dc453ada624dc2ed0e9bdd67f16f201a25bbd30468f2aa18760405160405180910390a350565b61065560006104526109d4565b6106905760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6106a8600080516020610d1d83398151915282610492565b6106b06109d4565b6001600160a01b0316816001600160a01b03167f8ae27309b6f5c359f35ab839030b8f4fbbc5653014ccb7ebe7a03dd0ccf590af60405160405180910390a350565b600080516020610d1d83398151915281565b600080516020610ccd83398151915281565b61072360006104526109d4565b61075e5760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610776600080516020610ccd8339815191528261081f565b61077e6109d4565b6001600160a01b0316816001600160a01b03167fe5f1aa9e528307345194b88b24a32401c13926e0823060f1049d9b26c0bb62b260405160405180910390a350565b60008281526020819052604081206107d89083610aaa565b9392505050565b60008281526020819052604081206107d89083610ab6565b600081565b60006103ff81836107df565b60008181526020819052604081206103ff90610acb565b60008281526020819052604090206002015461083d906104526109d4565b6104f75760405162461bcd60e51b8152600401808060200182810382526030815260200180610ced6030913960400191505060405180910390fd5b61088560006104526109d4565b6108c05760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6108cb60008261081f565b6108d36109d4565b6001600160a01b0316816001600160a01b03167f21ba1239795d4e22874e3dc55f0a9d7b65bfb23069d32965d7c23be9524ccf9560405160405180910390a350565b61092260006104526109d4565b61095d5760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610975600080516020610d1d8339815191528261081f565b61097d6109d4565b6001600160a01b0316816001600160a01b03167f5044b7ccbb24783d3ce8215b2e2b51f62c06e9d7706ce98b8a4ed550ceae891b60405160405180910390a350565b60006107d8836001600160a01b038416610ad6565b3390565b60008281526020819052604090206109f090826109bf565b1561049c576109fd6109d4565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020610a599082610b20565b1561049c57610a666109d4565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006107d88383610b35565b60006107d8836001600160a01b038416610b99565b60006103ff82610bb1565b6000610ae28383610b99565b610b18575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ff565b5060006103ff565b60006107d8836001600160a01b038416610bb5565b81546000908210610b775760405162461bcd60e51b8152600401808060200182810382526022815260200180610c7c6022913960400191505060405180910390fd5b826000018281548110610b8657fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b60008181526001830160205260408120548015610c715783546000198083019190810190600090879083908110610be857fe5b9060005260206000200154905080876000018481548110610c0557fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080610c3557fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506103ff565b60009150506103ff56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e749d49f397ae9ef1a834b569acb967799a367061e305932181a44f5773da873bfd416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b658429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b494375646f73416363657373436f6e74726f6c733a2073656e646572206d75737420626520616e2061646d696e416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a26469706673582212201cb9ac5e18631aed059380c4fa48ec55f10a45705572a0672992df2bf4e1393264736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063857d2608116100ad578063c395fcb311610071578063c395fcb31461032a578063ca15c87314610350578063d547741f1461036d578063dccfe31014610399578063e12d8647146103bf57610121565b8063857d2608146102895780638a845fc0146102915780639010d07c146102b757806391d14854146102f6578063a217fddf1461032257610121565b806336568abe116100f457806336568abe146101e35780633f16431a1461020f5780636595171c146102355780636b9691711461025b5780637a3226ec1461028157610121565b8063113b0ab214610126578063248a9ca3146101605780632da7952f1461018f5780632f2ff15d146101b5575b600080fd5b61014c6004803603602081101561013c57600080fd5b50356001600160a01b03166103e5565b604080519115158252519081900360200190f35b61017d6004803603602081101561017657600080fd5b5035610405565b60408051918252519081900360200190f35b61014c600480360360208110156101a557600080fd5b50356001600160a01b031661041a565b6101e1600480360360408110156101cb57600080fd5b50803590602001356001600160a01b0316610434565b005b6101e1600480360360408110156101f957600080fd5b50803590602001356001600160a01b03166104a0565b6101e16004803603602081101561022557600080fd5b50356001600160a01b0316610501565b6101e16004803603602081101561024b57600080fd5b50356001600160a01b03166105ab565b6101e16004803603602081101561027157600080fd5b50356001600160a01b0316610648565b61017d6106f2565b61017d610704565b6101e1600480360360208110156102a757600080fd5b50356001600160a01b0316610716565b6102da600480360360408110156102cd57600080fd5b50803590602001356107c0565b604080516001600160a01b039092168252519081900360200190f35b61014c6004803603604081101561030c57600080fd5b50803590602001356001600160a01b03166107df565b61017d6107f7565b61014c6004803603602081101561034057600080fd5b50356001600160a01b03166107fc565b61017d6004803603602081101561036657600080fd5b5035610808565b6101e16004803603604081101561038357600080fd5b50803590602001356001600160a01b031661081f565b6101e1600480360360208110156103af57600080fd5b50356001600160a01b0316610878565b6101e1600480360360208110156103d557600080fd5b50356001600160a01b0316610915565b60006103ff600080516020610ccd833981519152836107df565b92915050565b60009081526020819052604090206002015490565b60006103ff600080516020610d1d833981519152836107df565b600082815260208190526040902060020154610457906104526109d4565b6107df565b6104925760405162461bcd60e51b815260040180806020018281038252602f815260200180610c9e602f913960400191505060405180910390fd5b61049c82826109d8565b5050565b6104a86109d4565b6001600160a01b0316816001600160a01b0316146104f75760405162461bcd60e51b815260040180806020018281038252602f815260200180610d69602f913960400191505060405180910390fd5b61049c8282610a41565b61050e60006104526109d4565b6105495760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610561600080516020610ccd83398151915282610492565b6105696109d4565b6001600160a01b0316816001600160a01b03167f1d5f9ec24c6f91be922ea13ceaad919ad6554a41b5c26087f96289a9baf98ad260405160405180910390a350565b6105b860006104526109d4565b6105f35760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6105fe600082610492565b6106066109d4565b6001600160a01b0316816001600160a01b03167f2570ac42fd8b322dc453ada624dc2ed0e9bdd67f16f201a25bbd30468f2aa18760405160405180910390a350565b61065560006104526109d4565b6106905760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6106a8600080516020610d1d83398151915282610492565b6106b06109d4565b6001600160a01b0316816001600160a01b03167f8ae27309b6f5c359f35ab839030b8f4fbbc5653014ccb7ebe7a03dd0ccf590af60405160405180910390a350565b600080516020610d1d83398151915281565b600080516020610ccd83398151915281565b61072360006104526109d4565b61075e5760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610776600080516020610ccd8339815191528261081f565b61077e6109d4565b6001600160a01b0316816001600160a01b03167fe5f1aa9e528307345194b88b24a32401c13926e0823060f1049d9b26c0bb62b260405160405180910390a350565b60008281526020819052604081206107d89083610aaa565b9392505050565b60008281526020819052604081206107d89083610ab6565b600081565b60006103ff81836107df565b60008181526020819052604081206103ff90610acb565b60008281526020819052604090206002015461083d906104526109d4565b6104f75760405162461bcd60e51b8152600401808060200182810382526030815260200180610ced6030913960400191505060405180910390fd5b61088560006104526109d4565b6108c05760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b6108cb60008261081f565b6108d36109d4565b6001600160a01b0316816001600160a01b03167f21ba1239795d4e22874e3dc55f0a9d7b65bfb23069d32965d7c23be9524ccf9560405160405180910390a350565b61092260006104526109d4565b61095d5760405162461bcd60e51b815260040180806020018281038252602c815260200180610d3d602c913960400191505060405180910390fd5b610975600080516020610d1d8339815191528261081f565b61097d6109d4565b6001600160a01b0316816001600160a01b03167f5044b7ccbb24783d3ce8215b2e2b51f62c06e9d7706ce98b8a4ed550ceae891b60405160405180910390a350565b60006107d8836001600160a01b038416610ad6565b3390565b60008281526020819052604090206109f090826109bf565b1561049c576109fd6109d4565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020610a599082610b20565b1561049c57610a666109d4565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006107d88383610b35565b60006107d8836001600160a01b038416610b99565b60006103ff82610bb1565b6000610ae28383610b99565b610b18575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ff565b5060006103ff565b60006107d8836001600160a01b038416610bb5565b81546000908210610b775760405162461bcd60e51b8152600401808060200182810382526022815260200180610c7c6022913960400191505060405180910390fd5b826000018281548110610b8657fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b60008181526001830160205260408120548015610c715783546000198083019190810190600090879083908110610be857fe5b9060005260206000200154905080876000018481548110610c0557fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080610c3557fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506103ff565b60009150506103ff56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e749d49f397ae9ef1a834b569acb967799a367061e305932181a44f5773da873bfd416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b658429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b494375646f73416363657373436f6e74726f6c733a2073656e646572206d75737420626520616e2061646d696e416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a26469706673582212201cb9ac5e18631aed059380c4fa48ec55f10a45705572a0672992df2bf4e1393264736f6c634300060c0033
Deployed Bytecode Sourcemap
118:2818:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1593:139;;;;;;;;;;;;;;;;-1:-1:-1;1593:139:4;-1:-1:-1;;;;;1593:139:4;;:::i;:::-;;;;;;;;;;;;;;;;;;4280:112:1;;;;;;;;;;;;;;;;-1:-1:-1;4280:112:1;;:::i;:::-;;;;;;;;;;;;;;;;1455:132:4;;;;;;;;;;;;;;;;-1:-1:-1;1455:132:4;-1:-1:-1;;;;;1455:132:4;;:::i;4642:223:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4642:223:1;;;;;;-1:-1:-1;;;;;4642:223:1;;:::i;:::-;;5816:205;;;;;;;;;;;;;;;;-1:-1:-1;5816:205:1;;;;;;-1:-1:-1;;;;;5816:205:1;;:::i;2541:192:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2541:192:4;-1:-1:-1;;;;;2541:192:4;;:::i;1799:175::-;;;;;;;;;;;;;;;;-1:-1:-1;1799:175:4;-1:-1:-1;;;;;1799:175:4;;:::i;2164:181::-;;;;;;;;;;;;;;;;-1:-1:-1;2164:181:4;-1:-1:-1;;;;;2164:181:4;;:::i;194:72::-;;;:::i;272:78::-;;;:::i;2739:195::-;;;;;;;;;;;;;;;;-1:-1:-1;2739:195:4;-1:-1:-1;;;;;2739:195:4;;:::i;3963:136:1:-;;;;;;;;;;;;;;;;-1:-1:-1;3963:136:1;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3963:136:1;;;;;;;;;;;;;;2948:137;;;;;;;;;;;;;;;;-1:-1:-1;2948:137:1;;;;;;-1:-1:-1;;;;;2948:137:1;;:::i;1725:49::-;;;:::i;1319:130:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1319:130:4;-1:-1:-1;;;;;1319:130:4;;:::i;3253:125:1:-;;;;;;;;;;;;;;;;-1:-1:-1;3253:125:1;;:::i;5099:226::-;;;;;;;;;;;;;;;;-1:-1:-1;5099:226:1;;;;;;-1:-1:-1;;;;;5099:226:1;;:::i;1980:178:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1980:178:4;-1:-1:-1;;;;;1980:178:4;;:::i;2351:184::-;;;;;;;;;;;;;;;;-1:-1:-1;2351:184:4;-1:-1:-1;;;;;2351:184:4;;:::i;1593:139::-;1664:4;1687:38;-1:-1:-1;;;;;;;;;;;1716:8:4;1687:7;:38::i;:::-;1680:45;1593:139;-1:-1:-1;;1593:139:4:o;4280:112:1:-;4337:7;4363:12;;;;;;;;;;:22;;;;4280:112::o;1455:132:4:-;1522:4;1545:35;-1:-1:-1;;;;;;;;;;;1571:8:4;1545:7;:35::i;4642:223:1:-;4733:6;:12;;;;;;;;;;:22;;;4725:45;;4757:12;:10;:12::i;:::-;4725:7;:45::i;:::-;4717:105;;;;-1:-1:-1;;;4717:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4833:25;4844:4;4850:7;4833:10;:25::i;:::-;4642:223;;:::o;5816:205::-;5913:12;:10;:12::i;:::-;-1:-1:-1;;;;;5902:23:1;:7;-1:-1:-1;;;;;5902:23:1;;5894:83;;;;-1:-1:-1;;;5894:83:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5988:26;6000:4;6006:7;5988:11;:26::i;2541:192:4:-;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2622:41:::1;-1:-1:-1::0;;;;;;;;;;;2654:8:4::1;2622:10;:41::i;:::-;2713:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;2678:48:4::1;2703:8;-1:-1:-1::0;;;;;2678:48:4::1;;;;;;;;;;;2541:192:::0;:::o;1799:175::-;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1872:40:::1;1770:4:1;1903:8:4::0;1872:10:::1;:40::i;:::-;1954:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;1927:40:4::1;1944:8;-1:-1:-1::0;;;;;1927:40:4::1;;;;;;;;;;;1799:175:::0;:::o;2164:181::-;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2241:38:::1;-1:-1:-1::0;;;;;;;;;;;2270:8:4::1;2241:10;:38::i;:::-;2325:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;2294:44:4::1;2315:8;-1:-1:-1::0;;;;;2294:44:4::1;;;;;;;;;;;2164:181:::0;:::o;194:72::-;-1:-1:-1;;;;;;;;;;;194:72:4;:::o;272:78::-;-1:-1:-1;;;;;;;;;;;272:78:4;:::o;2739:195::-;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2823:41:::1;-1:-1:-1::0;;;;;;;;;;;2855:8:4::1;2823:10;:41::i;:::-;2914:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;2879:48:4::1;2904:8;-1:-1:-1::0;;;;;2879:48:4::1;;;;;;;;;;;2739:195:::0;:::o;3963:136:1:-;4036:7;4062:12;;;;;;;;;;:30;;4086:5;4062:23;:30::i;:::-;4055:37;3963:136;-1:-1:-1;;;3963:136:1:o;2948:137::-;3017:4;3040:12;;;;;;;;;;:38;;3070:7;3040:29;:38::i;1725:49::-;1770:4;1725:49;:::o;1319:130:4:-;1382:4;1405:37;1382:4;1433:8;1405:7;:37::i;3253:125:1:-;3316:7;3342:12;;;;;;;;;;:29;;:27;:29::i;5099:226::-;5191:6;:12;;;;;;;;;;:22;;;5183:45;;5215:12;:10;:12::i;5183:45::-;5175:106;;;;-1:-1:-1;;;5175:106:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1980:178:4;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2056:40:::1;1770:4:1;2087:8:4::0;2056:10:::1;:40::i;:::-;2138:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;2111:40:4::1;2128:8;-1:-1:-1::0;;;;;2111:40:4::1;;;;;;;;;;;1980:178:::0;:::o;2351:184::-;1062:41;1770:4:1;1090:12:4;:10;:12::i;1062:41::-;1054:98;;;;-1:-1:-1;;;1054:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2431:38:::1;-1:-1:-1::0;;;;;;;;;;;2460:8:4::1;2431:10;:38::i;:::-;2515:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;2484:44:4::1;2505:8;-1:-1:-1::0;;;;;2484:44:4::1;;;;;;;;;;;2351:184:::0;:::o;6429:141:3:-;6499:4;6522:41;6527:3;-1:-1:-1;;;;;6547:14:3;;6522:4;:41::i;598:104:0:-;685:10;598:104;:::o;7023:184:1:-;7096:6;:12;;;;;;;;;;:33;;7121:7;7096:24;:33::i;:::-;7092:109;;;7177:12;:10;:12::i;:::-;-1:-1:-1;;;;;7150:40:1;7168:7;-1:-1:-1;;;;;7150:40:1;7162:4;7150:40;;;;;;;;;;7023:184;;:::o;7213:188::-;7287:6;:12;;;;;;;;;;:36;;7315:7;7287:27;:36::i;:::-;7283:112;;;7371:12;:10;:12::i;:::-;-1:-1:-1;;;;;7344:40:1;7362:7;-1:-1:-1;;;;;7344:40:1;7356:4;7344:40;;;;;;;;;;7213:188;;:::o;7650:147:3:-;7724:7;7766:22;7770:3;7782:5;7766:3;:22::i;6966:156::-;7046:4;7069:46;7079:3;-1:-1:-1;;;;;7099:14:3;;7069:9;:46::i;7203:115::-;7266:7;7292:19;7300:3;7292:7;:19::i;1640:404::-;1703:4;1724:21;1734:3;1739:5;1724:9;:21::i;:::-;1719:319;;-1:-1:-1;1761:23:3;;;;;;;;:11;:23;;;;;;;;;;;;;1941:18;;1919:19;;;:12;;;:19;;;;;;:40;;;;1973:11;;1719:319;-1:-1:-1;2022:5:3;2015:12;;6738:147;6811:4;6834:44;6842:3;-1:-1:-1;;;;;6862:14:3;;6834:7;:44::i;4452:201::-;4546:18;;4519:7;;4546:26;-1:-1:-1;4538:73:3;;;;-1:-1:-1;;;4538:73:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:3;:11;;4640:5;4628:18;;;;;;;;;;;;;;;;4621:25;;4452:201;;;;:::o;3805:127::-;3878:4;3901:19;;;:12;;;;;:19;;;;;;:24;;;3805:127::o;4013:107::-;4095:18;;4013:107::o;2212:1512::-;2278:4;2415:19;;;:12;;;:19;;;;;;2449:15;;2445:1273;;2878:18;;-1:-1:-1;;2830:14:3;;;;2878:22;;;;2806:21;;2878:3;;:22;;3160;;;;;;;;;;;;;;3140:42;;3303:9;3274:3;:11;;3286:13;3274:26;;;;;;;;;;;;;;;;;;;:38;;;;3378:23;;;3420:1;3378:12;;;:23;;;;;;3404:17;;;3378:43;;3527:17;;3378:3;;3527:17;;;;;;;;;;;;;;;;;;;;;;3619:3;:12;;:19;3632:5;3619:19;;;;;;;;;;;3612:26;;;3660:4;3653:11;;;;;;;;2445:1273;3702:5;3695:12;;;;
Swarm Source
ipfs://1cb9ac5e18631aed059380c4fa48ec55f10a45705572a0672992df2bf4e13932
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.