Overview
CRO Balance
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
ORBToken
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2024-02-08 */ // Sources flattened with hardhat v2.8.4 https://hardhat.org // File contracts/Dependencies/CheckContract.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.11; contract CheckContract { /** * Check that the account is an already deployed non-destroyed contract. * See: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol#L12 */ function checkContract(address _account) internal view { require(_account != address(0), "Account cannot be zero address"); uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(_account) } require(size > 0, "Account code size cannot be zero"); } } // File contracts/Dependencies/SafeMath.sol pragma solidity 0.6.11; /** * Based on OpenZeppelin's SafeMath: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol * * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/Dependencies/IERC20.sol pragma solidity 0.6.11; /** * Based on the OpenZeppelin IER20 interface: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol * * @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); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); /** * @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); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); /** * @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 contracts/Dependencies/IERC2612.sol pragma solidity 0.6.11; /** * @dev Interface of the ERC2612 standard as defined in the EIP. * * Adds the {permit} method, which can be used to change one's * {IERC20-allowance} without having to send a transaction, by signing a * message. This allows users to spend tokens without having to hold coins. * * See https://eips.ethereum.org/EIPS/eip-2612. * * Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/ */ interface IERC2612 { /** * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev Returns the current ERC2612 nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases `owner`'s nonce by one. This * prevents a signature from being used multiple times. * * `owner` can limit the time a Permit is valid for by setting `deadline` to * a value in the near future. The deadline argument can be set to uint(-1) to * create Permits that effectively never expire. */ function nonces(address owner) external view returns (uint256); function version() external view returns (string memory); function permitTypeHash() external view returns (bytes32); function domainSeparator() external view returns (bytes32); } // File contracts/Interfaces/IORBToken.sol pragma solidity 0.6.11; interface IORBToken is IERC20, IERC2612 { // --- Functions --- function getDeploymentStartTime() external view returns (uint256); } // File @openzeppelin/contracts-upgradeable/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @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 coin 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); } } } } // File @openzeppelin/contracts-upgradeable/proxy/[email protected] // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } // File @openzeppelin/contracts-upgradeable/utils/[email protected] 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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } 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; } uint256[50] private __gap; } // File @openzeppelin/contracts-upgradeable/access/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File contracts/Interfaces/IStabilityPoolIssuance.sol pragma solidity 0.6.11; interface IStabilityPoolIssuance { event TotalEsORBIssuedUpdated(uint _totalAmount); function setAddresses(address _orbTokenAddress, address _esORBTokenAddress, address _stabilityPoolAddress, address _vestingVaultAddress) external; function issueEsORB() external returns (uint); function sendEsORB(address _account, uint _amount) external; event SetRewardRate(uint newRate); event SetVestingVaultAddress(address vestingVaultAddress); } // File contracts/Interfaces/IEsORBToken.sol pragma solidity 0.6.11; interface IEsORBToken { /** * @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 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); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; /** * @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); event SetMinter(address indexed minter, bool isActive); event SetHandler(address indexed handler, bool isActive); } // File contracts/ORB/StabilityPoolIssuance.sol pragma solidity 0.6.11; contract StabilityPoolIssuance is IStabilityPoolIssuance, Initializable, OwnableUpgradeable, CheckContract { using SafeMath for uint; string constant public NAME = "StabilityPoolIssuance"; uint constant public DECIMAL_PRECISION = 1e18; IORBToken public orbToken; IEsORBToken public esORBToken; address public stabilityPoolAddress; address public vestingVaultAddress; uint256 public lastRewardTimestamp; uint256 public rewardRate; uint256 public totalEsORBIssued; // when resetting reward rate, we will need to update the pending reward into this variable uint256 public issuanceDelta; /** * @dev Initialize contract with this function * @param _orbTokenAddress Address of ORB token * @param _esORBTokenAddress Address of esORB token * @param _stabilityPoolAddress Address of Stability Pool * @param _vestingVaultAddress Address of Vesting Vault */ function setAddresses( address _orbTokenAddress, address _esORBTokenAddress, address _stabilityPoolAddress, address _vestingVaultAddress ) external initializer override { checkContract(_orbTokenAddress); checkContract(_esORBTokenAddress); checkContract(_stabilityPoolAddress); require(_vestingVaultAddress != address(0), "vestingVaultAddress cannot be zero address"); orbToken = IORBToken(_orbTokenAddress); esORBToken = IEsORBToken(_esORBTokenAddress); stabilityPoolAddress = _stabilityPoolAddress; vestingVaultAddress = _vestingVaultAddress; __Ownable_init(); } /** * @notice issueEsORB token to stability pool */ function issueEsORB() external override returns (uint) { _requireCallerIsStabilityPool(); if (block.timestamp <= lastRewardTimestamp) { return 0; } uint issuance = (block.timestamp - lastRewardTimestamp) * rewardRate + issuanceDelta; totalEsORBIssued = totalEsORBIssued + issuance; lastRewardTimestamp = block.timestamp; // reset it to 0 issuanceDelta = 0; emit TotalEsORBIssuedUpdated(totalEsORBIssued); return issuance; } /** * @notice Send EsORB to user * @param _account Address to receive esORB token * @param _amount Amount of EsORB to send */ function sendEsORB(address _account, uint _amount) external override { _requireCallerIsStabilityPool(); esORBToken.mint(_account, _amount); // send ORB to vesting vault for future vesting require(orbToken.transfer(vestingVaultAddress, _amount), "StabilityPoolIssuance: fail to transfer ORB"); } /** * @notice Admin function to set reward rate * @param newRate New reward rate */ function setRewardRate(uint newRate) public onlyOwner { require(newRate > 0, "StabilityPoolIssuance: reward rate should not be 0"); // start reward if (lastRewardTimestamp == 0) { lastRewardTimestamp = block.timestamp; } // need to collect pending reward before changing the rate issuanceDelta = (block.timestamp - lastRewardTimestamp) * rewardRate; lastRewardTimestamp = block.timestamp; rewardRate = newRate; emit SetRewardRate(newRate); } /** * @notice Admin function to set vestingVault address * @param _vestingVaultAddress vestingVault address */ function setVestingVaultAddress(address _vestingVaultAddress) public onlyOwner { require(_vestingVaultAddress != address(0), "vestingVaultAddress cannot be zero address"); vestingVaultAddress = _vestingVaultAddress; emit SetVestingVaultAddress(_vestingVaultAddress); } function _requireCallerIsStabilityPool() internal view { require(msg.sender == stabilityPoolAddress, "StabilityPoolIssuance: caller is not SP"); } } // File contracts/Dependencies/ECDSA.sol pragma solidity ^0.6.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { revert("ECDSA: invalid signature 's' value"); } if (v != 27 && v != 28) { revert("ECDSA: invalid signature 'v' value"); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File contracts/ORB/ORBToken.sol pragma solidity 0.6.11; /* * Based upon OpenZeppelin's ERC20 contract: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol * * and their EIP2612 (ERC20Permit / ERC712) functionality: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/53516bc555a454862470e7860a9b5254db4d00f5/contracts/token/ERC20/ERC20Permit.sol * * * --- Functionality added specific to the ORBToken --- * * 1) Transfer protection: blacklist of addresses that are invalid recipients (i.e. core Orby contracts) in external * transfer() and transferFrom() calls. The purpose is to protect users from losing tokens by mistakenly sending ORB directly to a Orby * core contract, when they should rather call the right function. * * 2) sendToORBStaking(): callable only by Orby core contracts, which move ORB tokens from user -> ORBStaking contract. * * 3) Supply hard-capped at 1 billion * * 4) CommunityIssuance and LockupContractFactory addresses are set at deployment */ contract ORBToken is CheckContract, IORBToken { using SafeMath for uint256; // --- ERC20 Data --- string constant internal _NAME = "ORB"; string constant internal _SYMBOL = "ORB"; string constant internal _VERSION = "1"; uint8 constant internal _DECIMALS = 18; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint private _totalSupply; // --- EIP 2612 Data --- // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 private constant _PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); bytes32 private constant _TYPE_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f; // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; mapping (address => uint256) private _nonces; // --- ORBToken specific data --- uint public constant ONE_YEAR_IN_SECONDS = 31536000; // 60 * 60 * 24 * 365 // uint for use with SafeMath uint internal _1_BILLION = 1e27; // 1e9 * 1e18 = 1e27 uint internal immutable deploymentStartTime; address public immutable stabilityPoolIssuanceAddress; // --- Functions --- constructor ( address _stabilityPoolIssuanceAddress, address _stakingPoolAddress, address _teamAddress, address _idoAddress, address _ecosystemReserveAddress, address _marketingAddress, address _liquidityManagementAddress ) public { checkContract(_stabilityPoolIssuanceAddress); // TOODO: Verify that team address will be smart contract // checkContract(_teamAddress); deploymentStartTime = block.timestamp; stabilityPoolIssuanceAddress = _stabilityPoolIssuanceAddress; bytes32 hashedName = keccak256(bytes(_NAME)); bytes32 hashedVersion = keccak256(bytes(_VERSION)); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = _chainID(); _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion); // --- Initial ORB allocations --- // Team 20% 2 year linear vesting contract uint teamEntitlement = _1_BILLION.mul(20).div(100); _mint(_teamAddress, teamEntitlement); // IDO 1% address given by Finance team uint idoEntitlement = _1_BILLION.mul(1).div(100); _mint(_idoAddress, idoEntitlement); // Ecosystem Treasury 20% address given by Finance team uint ecosystemReserveEntitlement = _1_BILLION.mul(20).div(100); _mint(_ecosystemReserveAddress, ecosystemReserveEntitlement); // Marketing and partnership 10% address given by Finance team uint marketingEntitlement = _1_BILLION.mul(10).div(100); _mint(_marketingAddress, marketingEntitlement); // Stability Pool Incentives 15% stabilityPoolIssuance uint stabilityPoolIncentivesEntitlement = _1_BILLION.mul(15).div(100); _mint(_stabilityPoolIssuanceAddress, stabilityPoolIncentivesEntitlement); // Staking Pool Incentives 10% // staking pool contract or an EOA address given by finance team if staking pool is not deployed at MVP uint stakingPoolEntitlement = _1_BILLION.mul(10).div(100); _mint(_stakingPoolAddress, stakingPoolEntitlement); // Liquidity Management 24% unclear uint farmIncentivesEntitlement = _1_BILLION.mul(24).div(100); _mint(_liquidityManagementAddress, farmIncentivesEntitlement); } // --- External functions --- function totalSupply() external view override returns (uint256) { return _totalSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function getDeploymentStartTime() external view override returns (uint256) { return deploymentStartTime; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // --- EIP 2612 functionality --- function domainSeparator() public view override returns (bytes32) { if (_chainID() == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function permit ( address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s ) external override { require(deadline >= now, 'ORB: expired deadline'); bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator(), keccak256(abi.encode( _PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner]++, deadline)))); bytes memory signature = abi.encodePacked(r, s, v); address recoveredAddress = ECDSA.recover(digest, signature); _approve(owner, spender, amount); } function nonces(address owner) external view override returns (uint256) { // FOR EIP 2612 return _nonces[owner]; } // --- Internal operations --- function _chainID() private pure returns (uint256 chainID) { assembly { chainID := chainid() } } function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) { return keccak256(abi.encode(typeHash, name, version, _chainID(), address(this))); } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); _requireValidRecipient(recipient); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal { 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); } // --- 'require' functions --- function _requireValidRecipient(address _recipient) internal view { require( _recipient != address(0) && _recipient != address(this), "ORB: Cannot transfer tokens directly to the ORB token contract or the zero address" ); require( _recipient != stabilityPoolIssuanceAddress, "ORB: Cannot transfer tokens directly to the stability issuance" ); } // --- Optional functions --- function name() external view override returns (string memory) { return _NAME; } function symbol() external view override returns (string memory) { return _SYMBOL; } function decimals() external view override returns (uint8) { return _DECIMALS; } function version() external view override returns (string memory) { return _VERSION; } function permitTypeHash() external view override returns (bytes32) { return _PERMIT_TYPEHASH; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stabilityPoolIssuanceAddress","type":"address"},{"internalType":"address","name":"_stakingPoolAddress","type":"address"},{"internalType":"address","name":"_teamAddress","type":"address"},{"internalType":"address","name":"_idoAddress","type":"address"},{"internalType":"address","name":"_ecosystemReserveAddress","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_liquidityManagementAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ONE_YEAR_IN_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDeploymentStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"permitTypeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stabilityPoolIssuanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101406040526b033b2e3c9fd0803ce80000006004553480156200002257600080fd5b50604051620018e8380380620018e8833981810160405260e08110156200004857600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949593949293919290919062000089876001600160e01b036200033c16565b42610100526001600160601b0319606088901b1661012052604080518082018252600381526227a92160e91b602091820152815180830190925260018252603160f81b9101527fb60dfd2d76b37248d06a548f402532200b7a08f600ece90f63c05723c91cf2a860c08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660e08190526200012e6001600160e01b03620003f116565b60a052620001677f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83836001600160e01b03620003f516565b608081815250506000620001a760646200019360146004546200045660201b6200085c1790919060201c565b620004bd60201b620008bc1790919060201c565b9050620001be88826001600160e01b036200050716565b6000620001e360646200019360016004546200045660201b6200085c1790919060201c565b9050620001fa88826001600160e01b036200050716565b60006200021f60646200019360146004546200045660201b6200085c1790919060201c565b90506200023688826001600160e01b036200050716565b60006200025b606462000193600a6004546200045660201b6200085c1790919060201c565b90506200027288826001600160e01b036200050716565b600062000297606462000193600f6004546200045660201b6200085c1790919060201c565b9050620002ae8e826001600160e01b036200050716565b6000620002d3606462000193600a6004546200045660201b6200085c1790919060201c565b9050620002ea8e826001600160e01b036200050716565b60006200030f60646200019360186004546200045660201b6200085c1790919060201c565b9050620003268a826001600160e01b036200050716565b505050505050505050505050505050506200070a565b6001600160a01b03811662000398576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e742063616e6e6f74206265207a65726f20616464726573730000604482015290519081900360640190fd5b803b80620003ed576040805162461bcd60e51b815260206004820181905260248201527f4163636f756e7420636f64652073697a652063616e6e6f74206265207a65726f604482015290519081900360640190fd5b5050565b4690565b60008383836200040d6001600160e01b03620003f116565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6000826200046757506000620004b7565b828202828482816200047557fe5b0414620004b45760405162461bcd60e51b8152600401808060200182810382526021815260200180620018c76021913960400191505060405180910390fd5b90505b92915050565b6000620004b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200060860201b60201c565b6001600160a01b03821662000563576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200057f81600254620006af60201b620008fe1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005b2918390620008fe620006af821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183620006985760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200065c57818101518382015260200162000642565b50505050905090810190601f1680156200068a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620006a557fe5b0495945050505050565b600082820183811015620004b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60805160a05160c05160e051610100516101205160601c61116b6200075c6000398061083a5280610ef05250806104ef52508061080d5250806107ec5250806107725250806107a2525061116b6000f3fe608060405234801561001057600080fd5b50600436106101115760003560e01c806370a08231116100ad578063d505accf11610071578063d505accf14610329578063dd62ed3e1461037c578063e7c8fed4146103aa578063f698da25146103b2578063fa3985d4146103ba57610111565b806370a08231146102855780637ecebe00146102ab57806395d89b4114610116578063a457c2d7146102d1578063a9059cbb146102fd57610111565b806306fdde0314610116578063095ea7b31461019357806310ce43bd146101d357806318160ddd146101ed57806323b872dd146101f5578063313ce5671461022b57806339509351146102495780633c84b7c21461027557806354fd4d501461027d575b600080fd5b61011e6103de565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610158578181015183820152602001610140565b50505050905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bf600480360360408110156101a957600080fd5b506001600160a01b0381351690602001356103fc565b604080519115158252519081900360200190f35b6101db610413565b60408051918252519081900360200190f35b6101db610437565b6101bf6004803603606081101561020b57600080fd5b506001600160a01b0381358116916020810135909116906040013561043d565b6102336104ac565b6040805160ff9092168252519081900360200190f35b6101bf6004803603604081101561025f57600080fd5b506001600160a01b0381351690602001356104b1565b6101db6104ed565b61011e610511565b6101db6004803603602081101561029b57600080fd5b50356001600160a01b031661052c565b6101db600480360360208110156102c157600080fd5b50356001600160a01b0316610547565b6101bf600480360360408110156102e757600080fd5b506001600160a01b038135169060200135610562565b6101bf6004803603604081101561031357600080fd5b506001600160a01b0381351690602001356105b7565b61037a600480360360e081101561033f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356105c4565b005b6101db6004803603604081101561039257600080fd5b506001600160a01b038135811691602001351661073b565b6101db610766565b6101db61076e565b6103c2610838565b604080516001600160a01b039092168252519081900360200190f35b60408051808201909152600381526227a92160e91b60208201525b90565b6000610409338484610958565b5060015b92915050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990565b60025490565b600061044a848484610a44565b6104a2843361049d856040518060600160405280602881526020016110a0602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff610b6416565b610958565b5060019392505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161040991859061049d908663ffffffff6108fe16565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805180820190915260018152603160f81b602082015290565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526003602052604090205490565b6000610409338461049d85604051806060016040528060258152602001611111602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff610b6416565b6000610409338484610a44565b42841015610611576040805162461bcd60e51b81526020600482015260156024820152744f52423a206578706972656420646561646c696e6560581b604482015290519081900360640190fd5b600061061b61076e565b6001600160a01b03808a16600081815260036020908152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948d166060850152608084018c905260a084019490945260c08084018b90528451808503909101815260e08401855280519082012061190160f01b6101008501526101028401959095526101228084019590955283518084039095018552610142830184528451940193909320610162820187905261018282018690526001600160f81b031960f889901b166101a283015282516101838184030181526101a3909201909252909250906107228383610bfb565b905061072f8a8a8a610958565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6301e1338081565b60007f0000000000000000000000000000000000000000000000000000000000000000610799610dd3565b14156107c657507f00000000000000000000000000000000000000000000000000000000000000006103f9565b6108317f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610dd7565b90506103f9565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008261086b5750600061040d565b8282028284828161087857fe5b04146108b55760405162461bcd60e51b81526004018080602001828103825260218152602001806110416021913960400191505060405180910390fd5b9392505050565b60006108b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e2d565b6000828201838110156108b5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b03831661099d5760405162461bcd60e51b81526004018080602001828103825260248152602001806110ed6024913960400191505060405180910390fd5b6001600160a01b0382166109e25760405162461bcd60e51b8152600401808060200182810382526022815260200180610f636022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a895760405162461bcd60e51b81526004018080602001828103825260258152602001806110c86025913960400191505060405180910390fd5b610a9282610e92565b610ad581604051806060016040528060268152602001610fd7602691396001600160a01b038616600090815260208190526040902054919063ffffffff610b6416565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610b0a908263ffffffff6108fe16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610bf35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bb8578181015183820152602001610ba0565b50505050905090810190601f168015610be55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008151604114610c53576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6fa2a8918ca85bafe22016d0b997e4df60600160ff1b03821115610cba5760405162461bcd60e51b8152600401808060200182810382526022815260200180610ffd6022913960400191505060405180910390fd5b8060ff16601b14158015610cd257508060ff16601c14155b15610d0e5760405162461bcd60e51b815260040180806020018281038252602281526020018061101f6022913960400191505060405180910390fd5b60408051600080825260208083018085528a905260ff85168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa158015610d66573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610dc9576040805162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015290519081900360640190fd5b9695505050505050565b4690565b6000838383610de4610dd3565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b60008183610e7c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610bb8578181015183820152602001610ba0565b506000838581610e8857fe5b0495945050505050565b6001600160a01b03811615801590610eb357506001600160a01b0381163014155b610eee5760405162461bcd60e51b8152600401808060200182810382526052815260200180610f856052913960600191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610f5f5760405162461bcd60e51b815260040180806020018281038252603e815260200180611062603e913960400191505060405180910390fd5b5056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573734f52423a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f20746865204f524220746f6b656e20636f6e7472616374206f7220746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f52423a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f207468652073746162696c6974792069737375616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094933623354af9963e43f79be20dc656eea618f0dcf079129a61df76beb9378264736f6c634300060b0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000436ad059e170e7ed1252d3d3f19d0fb6ec16a5880000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101115760003560e01c806370a08231116100ad578063d505accf11610071578063d505accf14610329578063dd62ed3e1461037c578063e7c8fed4146103aa578063f698da25146103b2578063fa3985d4146103ba57610111565b806370a08231146102855780637ecebe00146102ab57806395d89b4114610116578063a457c2d7146102d1578063a9059cbb146102fd57610111565b806306fdde0314610116578063095ea7b31461019357806310ce43bd146101d357806318160ddd146101ed57806323b872dd146101f5578063313ce5671461022b57806339509351146102495780633c84b7c21461027557806354fd4d501461027d575b600080fd5b61011e6103de565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610158578181015183820152602001610140565b50505050905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bf600480360360408110156101a957600080fd5b506001600160a01b0381351690602001356103fc565b604080519115158252519081900360200190f35b6101db610413565b60408051918252519081900360200190f35b6101db610437565b6101bf6004803603606081101561020b57600080fd5b506001600160a01b0381358116916020810135909116906040013561043d565b6102336104ac565b6040805160ff9092168252519081900360200190f35b6101bf6004803603604081101561025f57600080fd5b506001600160a01b0381351690602001356104b1565b6101db6104ed565b61011e610511565b6101db6004803603602081101561029b57600080fd5b50356001600160a01b031661052c565b6101db600480360360208110156102c157600080fd5b50356001600160a01b0316610547565b6101bf600480360360408110156102e757600080fd5b506001600160a01b038135169060200135610562565b6101bf6004803603604081101561031357600080fd5b506001600160a01b0381351690602001356105b7565b61037a600480360360e081101561033f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356105c4565b005b6101db6004803603604081101561039257600080fd5b506001600160a01b038135811691602001351661073b565b6101db610766565b6101db61076e565b6103c2610838565b604080516001600160a01b039092168252519081900360200190f35b60408051808201909152600381526227a92160e91b60208201525b90565b6000610409338484610958565b5060015b92915050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990565b60025490565b600061044a848484610a44565b6104a2843361049d856040518060600160405280602881526020016110a0602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff610b6416565b610958565b5060019392505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161040991859061049d908663ffffffff6108fe16565b7f0000000000000000000000000000000000000000000000000000000065bcf01d90565b6040805180820190915260018152603160f81b602082015290565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526003602052604090205490565b6000610409338461049d85604051806060016040528060258152602001611111602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff610b6416565b6000610409338484610a44565b42841015610611576040805162461bcd60e51b81526020600482015260156024820152744f52423a206578706972656420646561646c696e6560581b604482015290519081900360640190fd5b600061061b61076e565b6001600160a01b03808a16600081815260036020908152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948d166060850152608084018c905260a084019490945260c08084018b90528451808503909101815260e08401855280519082012061190160f01b6101008501526101028401959095526101228084019590955283518084039095018552610142830184528451940193909320610162820187905261018282018690526001600160f81b031960f889901b166101a283015282516101838184030181526101a3909201909252909250906107228383610bfb565b905061072f8a8a8a610958565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6301e1338081565b60007f0000000000000000000000000000000000000000000000000000000000000019610799610dd3565b14156107c657507faf74c1ec62caf06cb3a50de2fb721ad72e14f89c76339f800a29d5bc02ab3d606103f9565b6108317f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fb60dfd2d76b37248d06a548f402532200b7a08f600ece90f63c05723c91cf2a87fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6610dd7565b90506103f9565b7f000000000000000000000000436ad059e170e7ed1252d3d3f19d0fb6ec16a58881565b60008261086b5750600061040d565b8282028284828161087857fe5b04146108b55760405162461bcd60e51b81526004018080602001828103825260218152602001806110416021913960400191505060405180910390fd5b9392505050565b60006108b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e2d565b6000828201838110156108b5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b03831661099d5760405162461bcd60e51b81526004018080602001828103825260248152602001806110ed6024913960400191505060405180910390fd5b6001600160a01b0382166109e25760405162461bcd60e51b8152600401808060200182810382526022815260200180610f636022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a895760405162461bcd60e51b81526004018080602001828103825260258152602001806110c86025913960400191505060405180910390fd5b610a9282610e92565b610ad581604051806060016040528060268152602001610fd7602691396001600160a01b038616600090815260208190526040902054919063ffffffff610b6416565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610b0a908263ffffffff6108fe16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610bf35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bb8578181015183820152602001610ba0565b50505050905090810190601f168015610be55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008151604114610c53576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6fa2a8918ca85bafe22016d0b997e4df60600160ff1b03821115610cba5760405162461bcd60e51b8152600401808060200182810382526022815260200180610ffd6022913960400191505060405180910390fd5b8060ff16601b14158015610cd257508060ff16601c14155b15610d0e5760405162461bcd60e51b815260040180806020018281038252602281526020018061101f6022913960400191505060405180910390fd5b60408051600080825260208083018085528a905260ff85168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa158015610d66573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610dc9576040805162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015290519081900360640190fd5b9695505050505050565b4690565b6000838383610de4610dd3565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b60008183610e7c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610bb8578181015183820152602001610ba0565b506000838581610e8857fe5b0495945050505050565b6001600160a01b03811615801590610eb357506001600160a01b0381163014155b610eee5760405162461bcd60e51b8152600401808060200182810382526052815260200180610f856052913960600191505060405180910390fd5b7f000000000000000000000000436ad059e170e7ed1252d3d3f19d0fb6ec16a5886001600160a01b0316816001600160a01b03161415610f5f5760405162461bcd60e51b815260040180806020018281038252603e815260200180611062603e913960400191505060405180910390fd5b5056fe45524332303a20617070726f766520746f20746865207a65726f20616464726573734f52423a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f20746865204f524220746f6b656e20636f6e7472616374206f7220746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f52423a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f207468652073746162696c6974792069737375616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094933623354af9963e43f79be20dc656eea618f0dcf079129a61df76beb9378264736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000436ad059e170e7ed1252d3d3f19d0fb6ec16a5880000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d90000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
-----Decoded View---------------
Arg [0] : _stabilityPoolIssuanceAddress (address): 0x436aD059e170E7eD1252D3D3F19D0Fb6EC16a588
Arg [1] : _stakingPoolAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
Arg [2] : _teamAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
Arg [3] : _idoAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
Arg [4] : _ecosystemReserveAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
Arg [5] : _marketingAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
Arg [6] : _liquidityManagementAddress (address): 0x3eb3299ba27b5ae831330814A6D99f7bFBC897D9
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000436ad059e170e7ed1252d3d3f19d0fb6ec16a588
Arg [1] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Arg [2] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Arg [3] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Arg [4] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Arg [5] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Arg [6] : 0000000000000000000000003eb3299ba27b5ae831330814a6d99f7bfbc897d9
Deployed Bytecode Sourcemap
36830:9645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45945:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41771:163;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41771:163:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46363:109;;;:::i;:::-;;;;;;;;;;;;;;;;41076:102;;;:::i;41942:311::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41942:311:0;;;;;;;;;;;;;;;;;:::i;46153:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42261:219;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42261:219:0;;;;;;;;:::i;41315:120::-;;;:::i;46255:100::-;;;:::i;41186:121::-;;;;;;;;;;;;;;;;-1:-1:-1;41186:121:0;-1:-1:-1;;;;;41186:121:0;;:::i;43790:128::-;;;;;;;;;;;;;;;;-1:-1:-1;43790:128:0;-1:-1:-1;;;;;43790:128:0;;:::i;42488:270::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42488:270:0;;;;;;;;:::i;41443:167::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41443:167:0;;;;;;;;:::i;43097:685::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43097:685:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41618:145;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41618:145:0;;;;;;;;;;:::i;38259:51::-;;;:::i;42807:282::-;;;:::i;38493:53::-;;;:::i;:::-;;;;-1:-1:-1;;;;;38493:53:0;;;;;;;;;;;;;;45945:94;46026:5;;;;;;;;;;;;-1:-1:-1;;;46026:5:0;;;;45945:94;;:::o;41771:163::-;41848:4;41867:37;41876:10;41888:7;41897:6;41867:8;:37::i;:::-;-1:-1:-1;41922:4:0;41771:163;;;;;:::o;46363:109::-;37477:66;46363:109;:::o;41076:102::-;41158:12;;41076:102;:::o;41942:311::-;42042:4;42059:36;42069:6;42077:9;42088:6;42059:9;:36::i;:::-;42106:117;42115:6;42123:10;42135:87;42171:6;42135:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42135:19:0;;;;;;:11;:19;;;;;;;;42155:10;42135:31;;;;;;;;;:87;;:35;:87;:::i;:::-;42106:8;:117::i;:::-;-1:-1:-1;42241:4:0;41942:311;;;;;:::o;46153:94::-;37122:2;46153:94;:::o;42261:219::-;42380:10;42352:4;42401:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;42401:32:0;;;;;;;;;;42352:4;;42371:79;;42392:7;;42401:48;;42438:10;42401:48;:36;:48;:::i;41315:120::-;41408:19;41315:120;:::o;46255:100::-;46339:8;;;;;;;;;;;;-1:-1:-1;;;46339:8:0;;;;46255:100;:::o;41186:121::-;-1:-1:-1;;;;;41281:18:0;41254:7;41281:18;;;;;;;;;;;;41186:121::o;43790:128::-;-1:-1:-1;;;;;43896:14:0;43853:7;43896:14;;;:7;:14;;;;;;;43790:128::o;42488:270::-;42584:4;42603:125;42612:10;42624:7;42633:94;42670:15;42633:94;;;;;;;;;;;;;;;;;42645:10;42633:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;42633:32:0;;;;;;;;;;;:94;;:36;:94;:::i;41443:167::-;41523:4;41540:40;41550:10;41562:9;41573:6;41540:9;:40::i;43097:685::-;43344:3;43332:8;:15;;43324:49;;;;;-1:-1:-1;;;43324:49:0;;;;;;;;;;;;-1:-1:-1;;;43324:49:0;;;;;;;;;;;;;;;43384:14;43453:17;:15;:17::i;:::-;-1:-1:-1;;;;;43570:14:0;;;43511:16;43570:14;;;:7;:14;;;;;;;;:16;;;;;;;;43482:115;;37477:66;43482:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43472:126;;;;;;-1:-1:-1;;;43411:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43401:199;;;;;;;;43636:25;;;;;;;;;;;;-1:-1:-1;;;;;;43636:25:0;;;;;;;;;;;;;;;;;;;;;;;;;43401:199;;-1:-1:-1;43636:25:0;43699:32;43401:199;43636:25;43699:13;:32::i;:::-;43672:59;;43742:32;43751:5;43758:7;43767:6;43742:8;:32::i;:::-;43097:685;;;;;;;;;;:::o;41618:145::-;-1:-1:-1;;;;;41728:18:0;;;41701:7;41728:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;41618:145::o;38259:51::-;38302:8;38259:51;:::o;42807:282::-;42864:7;42902:16;42888:10;:8;:10::i;:::-;:30;42884:198;;;-1:-1:-1;42942:24:0;42935:31;;42884:198;43006:64;37693:66;43040:12;43054:15;43006:21;:64::i;:::-;42999:71;;;;38493:53;;;:::o;3187:471::-;3245:7;3490:6;3486:47;;-1:-1:-1;3520:1:0;3513:8;;3486:47;3557:5;;;3561:1;3557;:5;:1;3581:5;;;;;:10;3573:56;;;;-1:-1:-1;;;3573:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3649:1;3187:471;-1:-1:-1;;;3187:471:0:o;4126:132::-;4184:7;4211:39;4215:1;4218;4211:39;;;;;;;;;;;;;;;;;:3;:39::i;1815:181::-;1873:7;1905:5;;;1929:6;;;;1921:46;;;;;-1:-1:-1;;;1921:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;45079:338;-1:-1:-1;;;;;45173:19:0;;45165:68;;;;-1:-1:-1;;;45165:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45252:21:0;;45244:68;;;;-1:-1:-1;;;45244:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45325:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45377:32;;;;;;;;;;;;;;;;;45079:338;;;:::o;44322:433::-;-1:-1:-1;;;;;44420:20:0;;44412:70;;;;-1:-1:-1;;;44412:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44493:33;44516:9;44493:22;:33::i;:::-;44559:71;44581:6;44559:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44559:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;44539:17:0;;;:9;:17;;;;;;;;;;;:91;;;;44664:20;;;;;;;:32;;44689:6;44664:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;44641:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;44712:35;;;;;;;44641:20;;44712:35;;;;;;;;;;;;;44322:433;;;:::o;2744:192::-;2830:7;2866:12;2858:6;;;;2850:29;;;;-1:-1:-1;;;2850:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2902:5:0;;;2744:192::o;33095:2110::-;33173:7;33236:9;:16;33256:2;33236:22;33232:96;;33275:41;;;-1:-1:-1;;;33275:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33232:96;33689:4;33674:20;;33668:27;33735:4;33720:20;;33714:27;33789:4;33774:20;;33768:27;33397:9;33760:36;-1:-1:-1;;;;;34706:79:0;;34702:156;;;34802:44;;-1:-1:-1;;;34802:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34702:156;34874:1;:7;;34879:2;34874:7;;:18;;;;;34885:1;:7;;34890:2;34885:7;;34874:18;34870:95;;;34909:44;;-1:-1:-1;;;34909:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34870:95;35079:24;;;35062:14;35079:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35062:14;;35079:24;;;;;;;-1:-1:-1;;35079:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35079:24:0;;-1:-1:-1;;35079:24:0;;;-1:-1:-1;;;;;;;35122:20:0;;35114:57;;;;;-1:-1:-1;;;35114:57:0;;;;;;;;;;;;-1:-1:-1;;;35114:57:0;;;;;;;;;;;;;;;35191:6;33095:2110;-1:-1:-1;;;;;;33095:2110:0:o;43964:132::-;44069:9;;44043:46::o;44104:210::-;44206:7;44254:8;44264:4;44270:7;44279:10;:8;:10::i;:::-;44243:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44299:4;44243:62;;;;;;;;;;;;;;;;;;;;;;;;44233:73;;;;;;44104:210;-1:-1:-1;;;;44104:210:0:o;4788:345::-;4874:7;4976:12;4969:5;4961:28;;;;-1:-1:-1;;;4961:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:9;5016:1;5012;:5;;;;;;;4788:345;-1:-1:-1;;;;;4788:345:0:o;45463:437::-;-1:-1:-1;;;;;45562:24:0;;;;;;:68;;-1:-1:-1;;;;;;45603:27:0;;45625:4;45603:27;;45562:68;45540:200;;;;-1:-1:-1;;;45540:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45787:28;-1:-1:-1;;;;;45773:42:0;:10;-1:-1:-1;;;;;45773:42:0;;;45751:141;;;;-1:-1:-1;;;45751:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45463:437;:::o
Swarm Source
ipfs://94933623354af9963e43f79be20dc656eea618f0dcf079129a61df76beb93782
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.2194 | 1.8302 | $0.401536 |
Loading...
Loading
Loading...
Loading
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.