More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 55,739 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw From St... | 36464094 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464093 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464091 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464089 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464088 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464086 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464084 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464082 | 17 hrs ago | IN | 0 xDAI | 0.00016689 | ||||
Withdraw From St... | 36464081 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464080 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464078 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464077 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464075 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464073 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464071 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464069 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464067 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464066 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464065 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464064 | 17 hrs ago | IN | 0 xDAI | 0.00016689 | ||||
Withdraw From St... | 36464062 | 17 hrs ago | IN | 0 xDAI | 0.00020437 | ||||
Withdraw From St... | 36464061 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464060 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464058 | 17 hrs ago | IN | 0 xDAI | 0.00016692 | ||||
Withdraw From St... | 36464056 | 17 hrs ago | IN | 0 xDAI | 0.00016692 |
View more zero value Internal Transactions in Advanced View mode
Loading...
Loading
Contract Name:
StakeRegistry
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at gnosisscan.io on 2022-12-19 */ // Sources flattened with hardhat v2.11.2 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/utils/introspection/[email protected] // pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/access/[email protected] // pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * 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, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) 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 See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @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 override 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 override { require(hasRole(getRoleAdmin(role), _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 override { require(hasRole(getRoleAdmin(role), _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 override { 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, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/[email protected] // pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overloaded; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File @openzeppelin/contracts/security/[email protected] // pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File src/Staking.sol // SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.1; /** * @title Staking contract for the Swarm storage incentives * @author The Swarm Authors * @dev Allows users to stake tokens in order to be eligible for the Redistribution Schelling co-ordination game. * Stakes are not withdrawable unless the contract is paused, e.g. in the event of migration to a new staking * contract. Stakes are frozen or slashed by the Redistribution contract in response to violations of the * protocol. */ contract StakeRegistry is AccessControl, Pausable { /** * @dev Emitted when a stake is created or updated by `owner` of the `overlay` by `stakeamount`, during `lastUpdatedBlock`. */ event StakeUpdated(bytes32 indexed overlay, uint256 stakeAmount, address owner, uint256 lastUpdatedBlock); /** * @dev Emitted when a stake for overlay `slashed` is slashed by `amount`. */ event StakeSlashed(bytes32 slashed, uint256 amount); /** * @dev Emitted when a stake for overlay `frozen` for `time` blocks. */ event StakeFrozen(bytes32 slashed, uint256 time); struct Stake { // Overlay of the node that is being staked bytes32 overlay; // Amount of tokens staked uint256 stakeAmount; // Owner of `overlay` address owner; // Block height the stake was updated uint256 lastUpdatedBlockNumber; // Used to indicate presents in stakes struct bool isValue; } // Associate every stake id with overlay data. mapping(bytes32 => Stake) public stakes; // Role allowed to pause bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); // Role allowed to freeze and slash entries bytes32 public constant REDISTRIBUTOR_ROLE = keccak256("REDISTRIBUTOR_ROLE"); // Swarm network ID uint64 NetworkId; // Address of the staked ERC20 token address public bzzToken; /** * @param _bzzToken Address of the staked ERC20 token * @param _NetworkId Swarm network ID */ constructor(address _bzzToken, uint64 _NetworkId) { NetworkId = _NetworkId; bzzToken = _bzzToken; _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(PAUSER_ROLE, msg.sender); } /** * @dev Checks to see if `overlay` is frozen. * @param overlay Overlay of staked overlay * * Returns a boolean value indicating whether the operation succeeded. */ function overlayNotFrozen(bytes32 overlay) internal view returns (bool) { return stakes[overlay].lastUpdatedBlockNumber < block.number; } /** * @dev Returns the current `stakeAmount` of `overlay`. * @param overlay Overlay of node */ function stakeOfOverlay(bytes32 overlay) public view returns (uint256) { return stakes[overlay].stakeAmount; } /** * @dev Returns the current usable `stakeAmount` of `overlay`. * Checks whether the stake is currently frozen. * @param overlay Overlay of node */ function usableStakeOfOverlay(bytes32 overlay) public view returns (uint256) { return overlayNotFrozen(overlay) ? stakes[overlay].stakeAmount : 0; } /** * @dev Returns the `lastUpdatedBlockNumber` of `overlay`. */ function lastUpdatedBlockNumberOfOverlay(bytes32 overlay) public view returns (uint256) { return stakes[overlay].lastUpdatedBlockNumber; } /** * @dev Returns the eth address of the owner of `overlay`. * @param overlay Overlay of node */ function ownerOfOverlay(bytes32 overlay) public view returns (address) { return stakes[overlay].owner; } /** * @dev Please both Endians 🥚. * @param input Eth address used for overlay calculation. */ function reverse(uint64 input) internal pure returns (uint64 v) { v = input; // swap bytes v = ((v & 0xFF00FF00FF00FF00) >> 8) | ((v & 0x00FF00FF00FF00FF) << 8); // swap 2-byte long pairs v = ((v & 0xFFFF0000FFFF0000) >> 16) | ((v & 0x0000FFFF0000FFFF) << 16); // swap 4-byte long pairs v = (v >> 32) | (v << 32); } /** * @notice Create a new stake or update an existing one. * @dev At least `_initialBalancePerChunk*2^depth` number of tokens need to be preapproved for this contract. * @param _owner Eth address used for overlay calculation. * @param nonce Nonce that was used for overlay calculation. * @param amount Deposited amount of ERC20 tokens. */ function depositStake( address _owner, bytes32 nonce, uint256 amount ) external whenNotPaused { require(_owner == msg.sender, "only owner can update stake"); bytes32 overlay = keccak256(abi.encodePacked(_owner, reverse(NetworkId), nonce)); uint256 updatedAmount = amount; if (stakes[overlay].isValue) { require(overlayNotFrozen(overlay), "overlay currently frozen"); updatedAmount = amount + stakes[overlay].stakeAmount; } require(ERC20(bzzToken).transferFrom(msg.sender, address(this), amount), "failed transfer"); emit StakeUpdated(overlay, updatedAmount, _owner, block.number); stakes[overlay] = Stake({ owner: _owner, overlay: overlay, stakeAmount: updatedAmount, lastUpdatedBlockNumber: block.number, isValue: true }); } /** * @dev Withdraw stake only when the staking contract is paused, * can only be called by the owner specific to the associated `overlay` * @param overlay The overlay to withdraw from * @param amount The amount of ERC20 tokens to be withdrawn */ function withdrawFromStake(bytes32 overlay, uint256 amount) external whenPaused { require(stakes[overlay].owner == msg.sender, "only owner can withdraw stake"); uint256 withDrawLimit = amount; if (amount > stakes[overlay].stakeAmount) { withDrawLimit = stakes[overlay].stakeAmount; } if (withDrawLimit < stakes[overlay].stakeAmount) { stakes[overlay].stakeAmount -= withDrawLimit; stakes[overlay].lastUpdatedBlockNumber = block.number; require(ERC20(bzzToken).transfer(msg.sender, withDrawLimit), "failed withdrawal"); } else { delete stakes[overlay]; require(ERC20(bzzToken).transfer(msg.sender, withDrawLimit), "failed withdrawal"); } } /** * @dev Freeze an existing stake, can only be called by the redistributor * @param overlay the overlay selected * @param time penalty length in blocknumbers */ function freezeDeposit(bytes32 overlay, uint256 time) external { require(hasRole(REDISTRIBUTOR_ROLE, msg.sender), "only redistributor can freeze stake"); if (stakes[overlay].isValue) { emit StakeFrozen(overlay, time); stakes[overlay].lastUpdatedBlockNumber = block.number + time; } } /** * @dev Slash an existing stake, can only be called by the `redistributor` * @param overlay the overlay selected * @param amount the amount to be slashed */ function slashDeposit(bytes32 overlay, uint256 amount) external { require(hasRole(REDISTRIBUTOR_ROLE, msg.sender), "only redistributor can slash stake"); emit StakeSlashed(overlay, amount); if (stakes[overlay].isValue) { if (stakes[overlay].stakeAmount > amount) { stakes[overlay].stakeAmount -= amount; stakes[overlay].lastUpdatedBlockNumber = block.number; } else { delete stakes[overlay]; } } } /** * @dev Pause the contract. The contract is provably stopped by renouncing the pauser role and the admin role after pausing, can only be called by the `PAUSER` */ function pause() public { require(hasRole(PAUSER_ROLE, msg.sender), "only pauser can pause"); _pause(); } /** * @dev Unpause the contract, can only be called by the pauser when paused */ function unPause() public { require(hasRole(PAUSER_ROLE, msg.sender), "only pauser can unpause"); _unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_bzzToken","type":"address"},{"internalType":"uint64","name":"_NetworkId","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":false,"internalType":"bytes32","name":"slashed","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StakeFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"slashed","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"overlay","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"lastUpdatedBlock","type":"uint256"}],"name":"StakeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REDISTRIBUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bzzToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"freezeDeposit","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":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","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":"bytes32","name":"overlay","type":"bytes32"}],"name":"lastUpdatedBlockNumberOfOverlay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"}],"name":"ownerOfOverlay","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"slashDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"}],"name":"stakeOfOverlay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"stakes","outputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"},{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"lastUpdatedBlockNumber","type":"uint256"},{"internalType":"bool","name":"isValue","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"}],"name":"usableStakeOfOverlay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"overlay","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFromStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200165f3803806200165f833981016040819052620000349162000184565b6001805460ff19169055600380546001600160401b0319166001600160401b03831617600160401b600160e01b031916680100000000000000006001600160a01b0385160217905562000089600033620000bd565b620000b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620000bd565b5050620001d6565b620000c98282620000cd565b5050565b620000d9828262000157565b620000c9576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200011362000180565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b3390565b6000806040838503121562000197578182fd5b82516001600160a01b0381168114620001ae578283fd5b60208401519092506001600160401b0381168114620001cb578182fd5b809150509250929050565b61147980620001e66000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806391d14854116100b8578063abe385431161007c578063abe3854314610283578063d547741f14610296578063e34c4527146102a9578063e63ab1e9146102bc578063ede41302146102c4578063f7b188a5146102d757610142565b806391d148541461023a578063a0d22b211461024d578063a217fddf14610260578063a6471a1d14610268578063a6ce31d41461027057610142565b8063420fc4db1161010a578063420fc4db146101cb57806348962b93146101e05780635c975abb146101f3578063837fd16a146101fb5780638456cb591461020e5780638fee64071461021657610142565b806301ffc9a7146101475780631ed2cd4014610170578063248a9ca3146101855780632f2ff15d146101a557806336568abe146101b8575b600080fd5b61015a610155366004610fb5565b6102df565b6040516101679190611065565b60405180910390f35b61018361017e366004610ef8565b61030c565b005b610198610193366004610f51565b61057d565b6040516101679190611070565b6101836101b3366004610f69565b610592565b6101836101c6366004610f69565b6105d0565b6101d3610612565b6040516101679190611014565b6101986101ee366004610f51565b610628565b61015a61063d565b610183610209366004610f94565b610646565b6101836106ff565b610229610224366004610f51565b61074f565b604051610167959493929190611087565b61015a610248366004610f69565b61078b565b6101d361025b366004610f51565b6107b4565b6101986107d3565b6101986107d8565b61018361027e366004610f94565b6107fc565b610198610291366004610f51565b61092f565b6101836102a4366004610f69565b61095b565b6101836102b7366004610f94565b610983565b610198610bf7565b6101986102d2366004610f51565b610c1b565b610183610c30565b60006001600160e01b03198216637965db0b60e01b1480610304575061030482610c7e565b90505b919050565b61031461063d565b1561033a5760405162461bcd60e51b815260040161033190611213565b60405180910390fd5b6001600160a01b03831633146103625760405162461bcd60e51b815260040161033190611330565b600354600090849061037d9067ffffffffffffffff16610c97565b8460405160200161039093929190610fdd565b60408051601f19818403018152918152815160209283012060008181526002909352912060040154909150829060ff1615610409576103ce82610cf6565b6103ea5760405162461bcd60e51b8152600401610331906112f9565b60008281526002602052604090206001015461040690846113fe565b90505b6003546040516323b872dd60e01b8152600160401b9091046001600160a01b0316906323b872dd9061044390339030908890600401611028565b602060405180830381600087803b15801561045d57600080fd5b505af1158015610471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104959190610f2a565b6104b15760405162461bcd60e51b815260040161033190611367565b817f61e979698346a2aa868a3a9f08d30c846174841dc9b074bbf2a82d20554bc6828287436040516104e5939291906113df565b60405180910390a26040805160a08101825283815260208082019384526001600160a01b03978816828401908152436060840190815260016080850181815260009889526002948590529590972093518455945195830195909555935193810180546001600160a01b031916949097169390931790955551600382015592516004909301805460ff1916931515939093179092555050565b60009081526020819052604090206001015490565b6105a661059e8361057d565b610248610d0d565b6105c25760405162461bcd60e51b81526004016103319061110f565b6105cc8282610d11565b5050565b6105d8610d0d565b6001600160a01b0316816001600160a01b0316146106085760405162461bcd60e51b815260040161033190611390565b6105cc8282610d96565b600354600160401b90046001600160a01b031681565b60009081526002602052604090206001015490565b60015460ff1690565b6106707f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb08283361078b565b61068c5760405162461bcd60e51b815260040161033190611274565b60008281526002602052604090206004015460ff16156105cc577f340439a63c1ee2404f5b7010cab559b4dcbfc28b8baab9acade354fd688ae2b982826040516106d7929190611079565b60405180910390a16106e981436113fe565b6000838152600260205260409020600301555050565b6107297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361078b565b6107455760405162461bcd60e51b8152600401610331906110e0565b61074d610e19565b565b6002602081905260009182526040909120805460018201549282015460038301546004909301549193926001600160a01b039091169160ff1685565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260026020819052604090912001546001600160a01b031690565b600081565b7f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb082881565b6108267f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb08283361078b565b6108425760405162461bcd60e51b8152600401610331906112b7565b7f0956b50d4d586f6b9c90800d4e713bd2b866e044decd047e6d70ea20314ab3088282604051610873929190611079565b60405180910390a160008281526002602052604090206004015460ff16156105cc576000828152600260205260409020600101548110156108ee57600082815260026020526040812060010180548392906108cf908490611416565b90915550506000828152600260205260409020436003909101556105cc565b50600090815260026020819052604082208281556001810183905590810180546001600160a01b03191690556003810191909155600401805460ff19169055565b600061093a82610cf6565b610945576000610304565b5060009081526002602052604090206001015490565b61096761059e8361057d565b6106085760405162461bcd60e51b8152600401610331906111c3565b61098b61063d565b6109a75760405162461bcd60e51b81526004016103319061115e565b600082815260026020819052604090912001546001600160a01b031633146109e15760405162461bcd60e51b81526004016103319061123d565b6000828152600260205260409020600101548190811115610a1057506000828152600260205260409020600101545b600083815260026020526040902060010154811015610b0e5760008381526002602052604081206001018054839290610a4a908490611416565b9091555050600083815260026020526040908190204360039182015554905163a9059cbb60e01b8152600160401b9091046001600160a01b03169063a9059cbb90610a9b903390859060040161104c565b602060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190610f2a565b610b095760405162461bcd60e51b8152600401610331906110b5565b610bf2565b60008381526002602081905260408083208381556001810184905591820180546001600160a01b03191690556003808301939093556004918201805460ff191690559154915163a9059cbb60e01b8152600160401b9092046001600160a01b03169163a9059cbb91610b8491339186910161104c565b602060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190610f2a565b610bf25760405162461bcd60e51b8152600401610331906110b5565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60009081526002602052604090206003015490565b610c5a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361078b565b610c765760405162461bcd60e51b81526004016103319061118c565b61074d610e8a565b6001600160e01b031981166301ffc9a760e01b14919050565b600881811b67ff00ff00ff00ff001666ff00ff00ff00ff9290911c9190911617601081811b67ffff0000ffff00001665ffff0000ffff9290911c9190911617602081811b6bffffffffffffffff000000001691901c63ffffffff161790565b600090815260026020526040902060030154431190565b3390565b610d1b828261078b565b6105cc576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610d52610d0d565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610da0828261078b565b156105cc576000828152602081815260408083206001600160a01b03851684529091529020805460ff19169055610dd5610d0d565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b610e2161063d565b15610e3e5760405162461bcd60e51b815260040161033190611213565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e73610d0d565b604051610e809190611014565b60405180910390a1565b610e9261063d565b610eae5760405162461bcd60e51b81526004016103319061115e565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e73610d0d565b80356001600160a01b038116811461030757600080fd5b600080600060608486031215610f0c578283fd5b610f1584610ee1565b95602085013595506040909401359392505050565b600060208284031215610f3b578081fd5b81518015158114610f4a578182fd5b9392505050565b600060208284031215610f62578081fd5b5035919050565b60008060408385031215610f7b578182fd5b82359150610f8b60208401610ee1565b90509250929050565b60008060408385031215610fa6578182fd5b50508035926020909101359150565b600060208284031215610fc6578081fd5b81356001600160e01b031981168114610f4a578182fd5b60609390931b6bffffffffffffffffffffffff1916835260c09190911b6001600160c01b0319166014830152601c820152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b918252602082015260400190565b94855260208501939093526001600160a01b0391909116604084015260608301521515608082015260a00190565b60208082526011908201527019985a5b1959081dda5d1a191c985dd85b607a1b604082015260600190565b6020808252601590820152746f6e6c79207061757365722063616e20706175736560581b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526017908201527f6f6e6c79207061757365722063616e20756e7061757365000000000000000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f6f6e6c79206f776e65722063616e207769746864726177207374616b65000000604082015260600190565b60208082526023908201527f6f6e6c792072656469737472696275746f722063616e20667265657a65207374604082015262616b6560e81b606082015260800190565b60208082526022908201527f6f6e6c792072656469737472696275746f722063616e20736c617368207374616040820152616b6560f01b606082015260800190565b60208082526018908201527f6f7665726c61792063757272656e746c792066726f7a656e0000000000000000604082015260600190565b6020808252601b908201527f6f6e6c79206f776e65722063616e20757064617465207374616b650000000000604082015260600190565b6020808252600f908201526e3330b4b632b2103a3930b739b332b960891b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b9283526001600160a01b03919091166020830152604082015260600190565b600082198211156114115761141161142d565b500190565b6000828210156114285761142861142d565b500390565b634e487b7160e01b600052601160045260246000fdfea26469706673582212206ee473f6157c2e65bd6850ee32bf929b451b38748a56f686d4c4f0022865de1664736f6c63430008010033000000000000000000000000dbf3ea6f5bee45c02255b2c26a16f300502f68da0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c806391d14854116100b8578063abe385431161007c578063abe3854314610283578063d547741f14610296578063e34c4527146102a9578063e63ab1e9146102bc578063ede41302146102c4578063f7b188a5146102d757610142565b806391d148541461023a578063a0d22b211461024d578063a217fddf14610260578063a6471a1d14610268578063a6ce31d41461027057610142565b8063420fc4db1161010a578063420fc4db146101cb57806348962b93146101e05780635c975abb146101f3578063837fd16a146101fb5780638456cb591461020e5780638fee64071461021657610142565b806301ffc9a7146101475780631ed2cd4014610170578063248a9ca3146101855780632f2ff15d146101a557806336568abe146101b8575b600080fd5b61015a610155366004610fb5565b6102df565b6040516101679190611065565b60405180910390f35b61018361017e366004610ef8565b61030c565b005b610198610193366004610f51565b61057d565b6040516101679190611070565b6101836101b3366004610f69565b610592565b6101836101c6366004610f69565b6105d0565b6101d3610612565b6040516101679190611014565b6101986101ee366004610f51565b610628565b61015a61063d565b610183610209366004610f94565b610646565b6101836106ff565b610229610224366004610f51565b61074f565b604051610167959493929190611087565b61015a610248366004610f69565b61078b565b6101d361025b366004610f51565b6107b4565b6101986107d3565b6101986107d8565b61018361027e366004610f94565b6107fc565b610198610291366004610f51565b61092f565b6101836102a4366004610f69565b61095b565b6101836102b7366004610f94565b610983565b610198610bf7565b6101986102d2366004610f51565b610c1b565b610183610c30565b60006001600160e01b03198216637965db0b60e01b1480610304575061030482610c7e565b90505b919050565b61031461063d565b1561033a5760405162461bcd60e51b815260040161033190611213565b60405180910390fd5b6001600160a01b03831633146103625760405162461bcd60e51b815260040161033190611330565b600354600090849061037d9067ffffffffffffffff16610c97565b8460405160200161039093929190610fdd565b60408051601f19818403018152918152815160209283012060008181526002909352912060040154909150829060ff1615610409576103ce82610cf6565b6103ea5760405162461bcd60e51b8152600401610331906112f9565b60008281526002602052604090206001015461040690846113fe565b90505b6003546040516323b872dd60e01b8152600160401b9091046001600160a01b0316906323b872dd9061044390339030908890600401611028565b602060405180830381600087803b15801561045d57600080fd5b505af1158015610471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104959190610f2a565b6104b15760405162461bcd60e51b815260040161033190611367565b817f61e979698346a2aa868a3a9f08d30c846174841dc9b074bbf2a82d20554bc6828287436040516104e5939291906113df565b60405180910390a26040805160a08101825283815260208082019384526001600160a01b03978816828401908152436060840190815260016080850181815260009889526002948590529590972093518455945195830195909555935193810180546001600160a01b031916949097169390931790955551600382015592516004909301805460ff1916931515939093179092555050565b60009081526020819052604090206001015490565b6105a661059e8361057d565b610248610d0d565b6105c25760405162461bcd60e51b81526004016103319061110f565b6105cc8282610d11565b5050565b6105d8610d0d565b6001600160a01b0316816001600160a01b0316146106085760405162461bcd60e51b815260040161033190611390565b6105cc8282610d96565b600354600160401b90046001600160a01b031681565b60009081526002602052604090206001015490565b60015460ff1690565b6106707f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb08283361078b565b61068c5760405162461bcd60e51b815260040161033190611274565b60008281526002602052604090206004015460ff16156105cc577f340439a63c1ee2404f5b7010cab559b4dcbfc28b8baab9acade354fd688ae2b982826040516106d7929190611079565b60405180910390a16106e981436113fe565b6000838152600260205260409020600301555050565b6107297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361078b565b6107455760405162461bcd60e51b8152600401610331906110e0565b61074d610e19565b565b6002602081905260009182526040909120805460018201549282015460038301546004909301549193926001600160a01b039091169160ff1685565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260026020819052604090912001546001600160a01b031690565b600081565b7f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb082881565b6108267f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb08283361078b565b6108425760405162461bcd60e51b8152600401610331906112b7565b7f0956b50d4d586f6b9c90800d4e713bd2b866e044decd047e6d70ea20314ab3088282604051610873929190611079565b60405180910390a160008281526002602052604090206004015460ff16156105cc576000828152600260205260409020600101548110156108ee57600082815260026020526040812060010180548392906108cf908490611416565b90915550506000828152600260205260409020436003909101556105cc565b50600090815260026020819052604082208281556001810183905590810180546001600160a01b03191690556003810191909155600401805460ff19169055565b600061093a82610cf6565b610945576000610304565b5060009081526002602052604090206001015490565b61096761059e8361057d565b6106085760405162461bcd60e51b8152600401610331906111c3565b61098b61063d565b6109a75760405162461bcd60e51b81526004016103319061115e565b600082815260026020819052604090912001546001600160a01b031633146109e15760405162461bcd60e51b81526004016103319061123d565b6000828152600260205260409020600101548190811115610a1057506000828152600260205260409020600101545b600083815260026020526040902060010154811015610b0e5760008381526002602052604081206001018054839290610a4a908490611416565b9091555050600083815260026020526040908190204360039182015554905163a9059cbb60e01b8152600160401b9091046001600160a01b03169063a9059cbb90610a9b903390859060040161104c565b602060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190610f2a565b610b095760405162461bcd60e51b8152600401610331906110b5565b610bf2565b60008381526002602081905260408083208381556001810184905591820180546001600160a01b03191690556003808301939093556004918201805460ff191690559154915163a9059cbb60e01b8152600160401b9092046001600160a01b03169163a9059cbb91610b8491339186910161104c565b602060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190610f2a565b610bf25760405162461bcd60e51b8152600401610331906110b5565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60009081526002602052604090206003015490565b610c5a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3361078b565b610c765760405162461bcd60e51b81526004016103319061118c565b61074d610e8a565b6001600160e01b031981166301ffc9a760e01b14919050565b600881811b67ff00ff00ff00ff001666ff00ff00ff00ff9290911c9190911617601081811b67ffff0000ffff00001665ffff0000ffff9290911c9190911617602081811b6bffffffffffffffff000000001691901c63ffffffff161790565b600090815260026020526040902060030154431190565b3390565b610d1b828261078b565b6105cc576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610d52610d0d565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610da0828261078b565b156105cc576000828152602081815260408083206001600160a01b03851684529091529020805460ff19169055610dd5610d0d565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b610e2161063d565b15610e3e5760405162461bcd60e51b815260040161033190611213565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e73610d0d565b604051610e809190611014565b60405180910390a1565b610e9261063d565b610eae5760405162461bcd60e51b81526004016103319061115e565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e73610d0d565b80356001600160a01b038116811461030757600080fd5b600080600060608486031215610f0c578283fd5b610f1584610ee1565b95602085013595506040909401359392505050565b600060208284031215610f3b578081fd5b81518015158114610f4a578182fd5b9392505050565b600060208284031215610f62578081fd5b5035919050565b60008060408385031215610f7b578182fd5b82359150610f8b60208401610ee1565b90509250929050565b60008060408385031215610fa6578182fd5b50508035926020909101359150565b600060208284031215610fc6578081fd5b81356001600160e01b031981168114610f4a578182fd5b60609390931b6bffffffffffffffffffffffff1916835260c09190911b6001600160c01b0319166014830152601c820152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b918252602082015260400190565b94855260208501939093526001600160a01b0391909116604084015260608301521515608082015260a00190565b60208082526011908201527019985a5b1959081dda5d1a191c985dd85b607a1b604082015260600190565b6020808252601590820152746f6e6c79207061757365722063616e20706175736560581b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526017908201527f6f6e6c79207061757365722063616e20756e7061757365000000000000000000604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f6f6e6c79206f776e65722063616e207769746864726177207374616b65000000604082015260600190565b60208082526023908201527f6f6e6c792072656469737472696275746f722063616e20667265657a65207374604082015262616b6560e81b606082015260800190565b60208082526022908201527f6f6e6c792072656469737472696275746f722063616e20736c617368207374616040820152616b6560f01b606082015260800190565b60208082526018908201527f6f7665726c61792063757272656e746c792066726f7a656e0000000000000000604082015260600190565b6020808252601b908201527f6f6e6c79206f776e65722063616e20757064617465207374616b650000000000604082015260600190565b6020808252600f908201526e3330b4b632b2103a3930b739b332b960891b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b9283526001600160a01b03919091166020830152604082015260600190565b600082198211156114115761141161142d565b500190565b6000828210156114285761142861142d565b500390565b634e487b7160e01b600052601160045260246000fdfea26469706673582212206ee473f6157c2e65bd6850ee32bf929b451b38748a56f686d4c4f0022865de1664736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dbf3ea6f5bee45c02255b2c26a16f300502f68da0000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _bzzToken (address): 0xdBF3Ea6F5beE45c02255B2c26a16F300502F68da
Arg [1] : _NetworkId (uint64): 1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dbf3ea6f5bee45c02255b2c26a16f300502f68da
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
26904:8031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6503:217;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31077:946;;;;;;:::i;:::-;;:::i;:::-;;7140:123;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7525:232::-;;;;;;:::i;:::-;;:::i;8744:218::-;;;;;;:::i;:::-;;:::i;28349:23::-;;;:::i;:::-;;;;;;;:::i;29209:124::-;;;;;;:::i;:::-;;:::i;25166:86::-;;;:::i;33299:343::-;;;;;;:::i;:::-;;:::i;34564:128::-;;;:::i;27976:39::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;6812:139::-;;;;;;:::i;:::-;;:::i;30053:118::-;;;;;;:::i;:::-;;:::i;5268:49::-;;;:::i;28172:76::-;;;:::i;33839:528::-;;;;;;:::i;:::-;;:::i;29520:162::-;;;;;;:::i;:::-;;:::i;8002:235::-;;;;;;:::i;:::-;;:::i;32313:786::-;;;;;;:::i;:::-;;:::i;28054:62::-;;;:::i;29772:152::-;;;;;;:::i;:::-;;:::i;34798:134::-;;;:::i;6503:217::-;6588:4;-1:-1:-1;;;;;;6612:47:0;;-1:-1:-1;;;6612:47:0;;:100;;;6676:36;6700:11;6676:23;:36::i;:::-;6605:107;;6503:217;;;;:::o;31077:946::-;25492:8;:6;:8::i;:::-;25491:9;25483:38;;;;-1:-1:-1;;;25483:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;31222:20:0;::::1;31232:10;31222:20;31214:60;;;;-1:-1:-1::0;;;31214:60:0::1;;;;;;;:::i;:::-;31348:9;::::0;31287:15:::1;::::0;31332:6;;31340:18:::1;::::0;31348:9:::1;;31340:7;:18::i;:::-;31360:5;31315:51;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;31315:51:0;;::::1;::::0;;;;;;31305:62;;31315:51:::1;31305:62:::0;;::::1;::::0;31380:21:::1;31427:15:::0;;;:6:::1;:15:::0;;;;;:23:::1;;::::0;31305:62;;-1:-1:-1;31404:6:0;;31427:23:::1;;31423:185;;;31475:25;31492:7;31475:16;:25::i;:::-;31467:62;;;;-1:-1:-1::0;;;31467:62:0::1;;;;;;;:::i;:::-;31569:15;::::0;;;:6:::1;:15;::::0;;;;:27:::1;;::::0;31560:36:::1;::::0;:6;:36:::1;:::i;:::-;31544:52;;31423:185;31634:8;::::0;31628:63:::1;::::0;-1:-1:-1;;;31628:63:0;;-1:-1:-1;;;31634:8:0;;::::1;-1:-1:-1::0;;;;;31634:8:0::1;::::0;31628:28:::1;::::0;:63:::1;::::0;31657:10:::1;::::0;31677:4:::1;::::0;31684:6;;31628:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31620:91;;;;-1:-1:-1::0;;;31620:91:0::1;;;;;;;:::i;:::-;31742:7;31729:58;31751:13;31766:6;31774:12;31729:58;;;;;;;;:::i;:::-;;;;;;;;31818:197;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;31818:197:0;;::::1;::::0;;;;;;31963:12:::1;31818:197:::0;;;;;;31999:4:::1;31818:197:::0;;;;;;-1:-1:-1;31800:15:0;;;:6:::1;:15:::0;;;;;;;;:215;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31800:215:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;31800:215:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;;31077:946:0:o;7140:123::-;7206:7;7233:12;;;;;;;;;;:22;;;;7140:123::o;7525:232::-;7618:41;7626:18;7639:4;7626:12;:18::i;:::-;7646:12;:10;:12::i;7618:41::-;7610:101;;;;-1:-1:-1;;;7610:101:0;;;;;;;:::i;:::-;7724:25;7735:4;7741:7;7724:10;:25::i;:::-;7525:232;;:::o;8744:218::-;8851:12;:10;:12::i;:::-;-1:-1:-1;;;;;8840:23:0;:7;-1:-1:-1;;;;;8840:23:0;;8832:83;;;;-1:-1:-1;;;8832:83:0;;;;;;;:::i;:::-;8928:26;8940:4;8946:7;8928:11;:26::i;28349:23::-;;;-1:-1:-1;;;28349:23:0;;-1:-1:-1;;;;;28349:23:0;;:::o;29209:124::-;29271:7;29298:15;;;:6;:15;;;;;:27;;;;29209:124::o;25166:86::-;25237:7;;;;25166:86;:::o;33299:343::-;33381:39;28217:31;33409:10;33381:7;:39::i;:::-;33373:87;;;;-1:-1:-1;;;33373:87:0;;;;;;;:::i;:::-;33477:15;;;;:6;:15;;;;;:23;;;;;33473:162;;;33522:26;33534:7;33543:4;33522:26;;;;;;;:::i;:::-;;;;;;;;33604:19;33619:4;33604:12;:19;:::i;:::-;33563:15;;;;:6;:15;;;;;:38;;:60;33299:343;;:::o;34564:128::-;34607:32;28092:24;34628:10;34607:7;:32::i;:::-;34599:66;;;;-1:-1:-1;;;34599:66:0;;;;;;;:::i;:::-;34676:8;:6;:8::i;:::-;34564:128::o;27976:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27976:39:0;;;;;;;:::o;6812:139::-;6890:4;6914:12;;;;;;;;;;;-1:-1:-1;;;;;6914:29:0;;;;;;;;;;;;;;;6812:139::o;30053:118::-;30115:7;30142:15;;;:6;:15;;;;;;;;:21;;-1:-1:-1;;;;;30142:21:0;;30053:118::o;5268:49::-;5313:4;5268:49;:::o;28172:76::-;28217:31;28172:76;:::o;33839:528::-;33922:39;28217:31;33950:10;33922:7;:39::i;:::-;33914:86;;;;-1:-1:-1;;;33914:86:0;;;;;;;:::i;:::-;34016:29;34029:7;34038:6;34016:29;;;;;;;:::i;:::-;;;;;;;;34060:15;;;;:6;:15;;;;;:23;;;;;34056:304;;;34104:15;;;;:6;:15;;;;;:27;;;:36;-1:-1:-1;34100:249:0;;;34161:15;;;;:6;:15;;;;;:27;;:37;;34192:6;;34161:15;:37;;34192:6;;34161:37;:::i;:::-;;;;-1:-1:-1;;34217:15:0;;;;:6;:15;;;;;34258:12;34217:38;;;;:53;34100:249;;;-1:-1:-1;34318:15:0;;;;:6;:15;;;;;;;34311:22;;;;;;;;;;;;;;-1:-1:-1;;;;;;34311:22:0;;;;;;;;;;;;;;-1:-1:-1;;34311:22:0;;;33839:528::o;29520:162::-;29588:7;29615:25;29632:7;29615:16;:25::i;:::-;:59;;29673:1;29615:59;;;-1:-1:-1;29643:15:0;;;;:6;:15;;;;;:27;;;;29520:162::o;8002:235::-;8096:41;8104:18;8117:4;8104:12;:18::i;8096:41::-;8088:102;;;;-1:-1:-1;;;8088:102:0;;;;;;;:::i;32313:786::-;25769:8;:6;:8::i;:::-;25761:41;;;;-1:-1:-1;;;25761:41:0;;;;;;;:::i;:::-;32412:15:::1;::::0;;;:6:::1;:15;::::0;;;;;;;:21:::1;::::0;-1:-1:-1;;;;;32412:21:0::1;32437:10;32412:35;32404:77;;;;-1:-1:-1::0;;;32404:77:0::1;;;;;;;:::i;:::-;32492:21;32546:15:::0;;;:6:::1;:15;::::0;;;;:27:::1;;::::0;32516:6;;32537:36;::::1;32533:112;;;-1:-1:-1::0;32606:15:0::1;::::0;;;:6:::1;:15;::::0;;;;:27:::1;;::::0;32533:112:::1;32677:15;::::0;;;:6:::1;:15;::::0;;;;:27:::1;;::::0;32661:43;::::1;32657:435;;;32721:15;::::0;;;:6:::1;:15;::::0;;;;:27:::1;;:44:::0;;32752:13;;32721:15;:44:::1;::::0;32752:13;;32721:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;32780:15:0::1;::::0;;;:6:::1;:15;::::0;;;;;;32821:12:::1;32780:38;::::0;;::::1;:53:::0;32862:8;32856:51;;-1:-1:-1;;;32856:51:0;;-1:-1:-1;;;32862:8:0;;::::1;-1:-1:-1::0;;;;;32862:8:0::1;::::0;32856:24:::1;::::0;:51:::1;::::0;32881:10:::1;::::0;32893:13;;32856:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32848:81;;;;-1:-1:-1::0;;;32848:81:0::1;;;;;;;:::i;:::-;32657:435;;;32969:15;::::0;;;:6:::1;:15;::::0;;;;;;;32962:22;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;32962:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;32962:22:0::1;::::0;;33013:8;;33007:51;;-1:-1:-1;;;33007:51:0;;-1:-1:-1;;;33013:8:0;;::::1;-1:-1:-1::0;;;;;33013:8:0::1;::::0;33007:24:::1;::::0;:51:::1;::::0;33032:10:::1;::::0;33044:13;;33007:51:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32999:81;;;;-1:-1:-1::0;;;32999:81:0::1;;;;;;;:::i;:::-;25813:1;32313:786:::0;;:::o;28054:62::-;28092:24;28054:62;:::o;29772:152::-;29851:7;29878:15;;;:6;:15;;;;;:38;;;;29772:152::o;34798:134::-;34843:32;28092:24;34864:10;34843:7;:32::i;:::-;34835:68;;;;-1:-1:-1;;;34835:68:0;;;;;;;:::i;:::-;34914:10;:8;:10::i;2713:157::-;-1:-1:-1;;;;;;2822:40:0;;-1:-1:-1;;;2822:40:0;2713:157;;;:::o;30299:389::-;30486:1;30458:29;;;;;30463:18;30424:29;;;;;;;;30423:65;30604:2;30576:30;;;;;30581:18;30541:30;;;;;;;;30540:67;30677:2;30672:7;;;;;30660;;;;;30659:21;;30299:389::o;28932:151::-;28998:4;29022:15;;;:6;:15;;;;;:38;;;29063:12;-1:-1:-1;;28932:151:0:o;698:98::-;778:10;698:98;:::o;9992:229::-;10067:22;10075:4;10081:7;10067;:22::i;:::-;10062:152;;10106:6;:12;;;;;;;;;;;-1:-1:-1;;;;;10106:29:0;;;;;;;;;:36;;-1:-1:-1;;10106:36:0;10138:4;10106:36;;;10189:12;:10;:12::i;:::-;-1:-1:-1;;;;;10162:40:0;10180:7;-1:-1:-1;;;;;10162:40:0;10174:4;10162:40;;;;;;;;;;9992:229;;:::o;10229:230::-;10304:22;10312:4;10318:7;10304;:22::i;:::-;10300:152;;;10375:5;10343:12;;;;;;;;;;;-1:-1:-1;;;;;10343:29:0;;;;;;;;;:37;;-1:-1:-1;;10343:37:0;;;10427:12;:10;:12::i;:::-;-1:-1:-1;;;;;10400:40:0;10418:7;-1:-1:-1;;;;;10400:40:0;10412:4;10400:40;;;;;;;;;;10229:230;;:::o;25966:118::-;25492:8;:6;:8::i;:::-;25491:9;25483:38;;;;-1:-1:-1;;;25483:38:0;;;;;;;:::i;:::-;26036:4:::1;26026:14:::0;;-1:-1:-1;;26026:14:0::1;::::0;::::1;::::0;;26056:20:::1;26063:12;:10;:12::i;:::-;26056:20;;;;;;:::i;:::-;;;;;;;;25966:118::o:0;26225:120::-;25769:8;:6;:8::i;:::-;25761:41;;;;-1:-1:-1;;;25761:41:0;;;;;;;:::i;:::-;26284:7:::1;:15:::0;;-1:-1:-1;;26284:15:0::1;::::0;;26315:22:::1;26324:12;:10;:12::i;14:175:1:-:0;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:334;;;;340:2;328:9;319:7;315:23;311:32;308:2;;;361:6;353;346:22;308:2;389:31;410:9;389:31;:::i;:::-;379:41;467:2;452:18;;439:32;;-1:-1:-1;518:2:1;503:18;;;490:32;;298:230;-1:-1:-1;;;298:230:1:o;533:297::-;;653:2;641:9;632:7;628:23;624:32;621:2;;;674:6;666;659:22;621:2;711:9;705:16;764:5;757:13;750:21;743:5;740:32;730:2;;791:6;783;776:22;730:2;819:5;611:219;-1:-1:-1;;;611:219:1:o;835:190::-;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;-1:-1:-1;996:23:1;;905:120;-1:-1:-1;905:120:1:o;1030:266::-;;;1159:2;1147:9;1138:7;1134:23;1130:32;1127:2;;;1180:6;1172;1165:22;1127:2;1221:9;1208:23;1198:33;;1250:40;1286:2;1275:9;1271:18;1250:40;:::i;:::-;1240:50;;1117:179;;;;;:::o;1301:258::-;;;1430:2;1418:9;1409:7;1405:23;1401:32;1398:2;;;1451:6;1443;1436:22;1398:2;-1:-1:-1;;1479:23:1;;;1549:2;1534:18;;;1521:32;;-1:-1:-1;1388:171:1:o;1564:306::-;;1675:2;1663:9;1654:7;1650:23;1646:32;1643:2;;;1696:6;1688;1681:22;1643:2;1727:23;;-1:-1:-1;;;;;;1779:32:1;;1769:43;;1759:2;;1831:6;1823;1816:22;1875:402;2078:2;2074:15;;;;-1:-1:-1;;2070:53:1;2058:66;;2180:3;2158:16;;;;-1:-1:-1;;;;;;2154:51:1;2149:2;2140:12;;2133:73;2231:2;2222:12;;2215:28;2268:2;2259:12;;2048:229::o;2282:203::-;-1:-1:-1;;;;;2446:32:1;;;;2428:51;;2416:2;2401:18;;2383:102::o;2490:375::-;-1:-1:-1;;;;;2748:15:1;;;2730:34;;2800:15;;;;2795:2;2780:18;;2773:43;2847:2;2832:18;;2825:34;;;;2680:2;2665:18;;2647:218::o;2870:274::-;-1:-1:-1;;;;;3062:32:1;;;;3044:51;;3126:2;3111:18;;3104:34;3032:2;3017:18;;2999:145::o;3149:187::-;3314:14;;3307:22;3289:41;;3277:2;3262:18;;3244:92::o;3341:177::-;3487:25;;;3475:2;3460:18;;3442:76::o;3523:248::-;3697:25;;;3753:2;3738:18;;3731:34;3685:2;3670:18;;3652:119::o;3776:499::-;4029:25;;;4085:2;4070:18;;4063:34;;;;-1:-1:-1;;;;;4133:32:1;;;;4128:2;4113:18;;4106:60;4197:2;4182:18;;4175:34;4253:14;4246:22;4240:3;4225:19;;4218:51;4016:3;4001:19;;3983:292::o;4280:341::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:1;4540:18;;4533:47;4612:2;4597:18;;4454:167::o;4626:345::-;4828:2;4810:21;;;4867:2;4847:18;;;4840:30;-1:-1:-1;;;4901:2:1;4886:18;;4879:51;4962:2;4947:18;;4800:171::o;4976:411::-;5178:2;5160:21;;;5217:2;5197:18;;;5190:30;5256:34;5251:2;5236:18;;5229:62;-1:-1:-1;;;5322:2:1;5307:18;;5300:45;5377:3;5362:19;;5150:237::o;5392:344::-;5594:2;5576:21;;;5633:2;5613:18;;;5606:30;-1:-1:-1;;;5667:2:1;5652:18;;5645:50;5727:2;5712:18;;5566:170::o;5741:347::-;5943:2;5925:21;;;5982:2;5962:18;;;5955:30;6021:25;6016:2;6001:18;;5994:53;6079:2;6064:18;;5915:173::o;6093:412::-;6295:2;6277:21;;;6334:2;6314:18;;;6307:30;6373:34;6368:2;6353:18;;6346:62;-1:-1:-1;;;6439:2:1;6424:18;;6417:46;6495:3;6480:19;;6267:238::o;6510:340::-;6712:2;6694:21;;;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6785:2:1;6770:18;;6763:46;6841:2;6826:18;;6684:166::o;6855:353::-;7057:2;7039:21;;;7096:2;7076:18;;;7069:30;7135:31;7130:2;7115:18;;7108:59;7199:2;7184:18;;7029:179::o;7213:399::-;7415:2;7397:21;;;7454:2;7434:18;;;7427:30;7493:34;7488:2;7473:18;;7466:62;-1:-1:-1;;;7559:2:1;7544:18;;7537:33;7602:3;7587:19;;7387:225::o;7617:398::-;7819:2;7801:21;;;7858:2;7838:18;;;7831:30;7897:34;7892:2;7877:18;;7870:62;-1:-1:-1;;;7963:2:1;7948:18;;7941:32;8005:3;7990:19;;7791:224::o;8020:348::-;8222:2;8204:21;;;8261:2;8241:18;;;8234:30;8300:26;8295:2;8280:18;;8273:54;8359:2;8344:18;;8194:174::o;8373:351::-;8575:2;8557:21;;;8614:2;8594:18;;;8587:30;8653:29;8648:2;8633:18;;8626:57;8715:2;8700:18;;8547:177::o;8729:339::-;8931:2;8913:21;;;8970:2;8950:18;;;8943:30;-1:-1:-1;;;9004:2:1;8989:18;;8982:45;9059:2;9044:18;;8903:165::o;9073:411::-;9275:2;9257:21;;;9314:2;9294:18;;;9287:30;9353:34;9348:2;9333:18;;9326:62;-1:-1:-1;;;9419:2:1;9404:18;;9397:45;9474:3;9459:19;;9247:237::o;9671:345::-;9873:25;;;-1:-1:-1;;;;;9934:32:1;;;;9929:2;9914:18;;9907:60;9998:2;9983:18;;9976:34;9861:2;9846:18;;9828:188::o;10021:128::-;;10092:1;10088:6;10085:1;10082:13;10079:2;;;10098:18;;:::i;:::-;-1:-1:-1;10134:9:1;;10069:80::o;10154:125::-;;10222:1;10219;10216:8;10213:2;;;10227:18;;:::i;:::-;-1:-1:-1;10264:9:1;;10203:76::o;10284:127::-;10345:10;10340:3;10336:20;10333:1;10326:31;10376:4;10373:1;10366:15;10400:4;10397:1;10390:15
Swarm Source
ipfs://6ee473f6157c2e65bd6850ee32bf929b451b38748a56f686d4c4f0022865de16
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
GNO | 100.00% | $0.265466 | 83,237.6456 | $22,096.76 |
[ 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.