More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 487 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 18485034 | 382 days ago | IN | 0 ETH | 0.00280897 | ||||
Claim | 18485022 | 382 days ago | IN | 0 ETH | 0.00240527 | ||||
Stake | 18484742 | 382 days ago | IN | 0 ETH | 0.00372674 | ||||
Withdraw | 17582221 | 509 days ago | IN | 0 ETH | 0.00174034 | ||||
Claim | 17582219 | 509 days ago | IN | 0 ETH | 0.0011878 | ||||
Withdraw | 17577408 | 509 days ago | IN | 0 ETH | 0.00142694 | ||||
Claim | 17577407 | 509 days ago | IN | 0 ETH | 0.00156219 | ||||
Withdraw | 17577403 | 509 days ago | IN | 0 ETH | 0.00135735 | ||||
Claim | 17577402 | 509 days ago | IN | 0 ETH | 0.00116147 | ||||
Withdraw | 17575859 | 510 days ago | IN | 0 ETH | 0.00142072 | ||||
Claim | 17575857 | 510 days ago | IN | 0 ETH | 0.00155539 | ||||
Claim | 17575852 | 510 days ago | IN | 0 ETH | 0.00151493 | ||||
Claim | 17575843 | 510 days ago | IN | 0 ETH | 0.00133041 | ||||
Claim | 17575769 | 510 days ago | IN | 0 ETH | 0.00149154 | ||||
Claim | 17575497 | 510 days ago | IN | 0 ETH | 0.00149337 | ||||
Claim | 17574655 | 510 days ago | IN | 0 ETH | 0.00085785 | ||||
Claim | 17574621 | 510 days ago | IN | 0 ETH | 0.00098983 | ||||
Claim | 17574605 | 510 days ago | IN | 0 ETH | 0.00092384 | ||||
Claim | 17574600 | 510 days ago | IN | 0 ETH | 0.00113524 | ||||
Withdraw | 17571048 | 510 days ago | IN | 0 ETH | 0.00116584 | ||||
Claim | 17571045 | 510 days ago | IN | 0 ETH | 0.00127635 | ||||
Withdraw | 17571023 | 510 days ago | IN | 0 ETH | 0.00132129 | ||||
Claim | 17571021 | 510 days ago | IN | 0 ETH | 0.00141253 | ||||
Withdraw | 17570660 | 510 days ago | IN | 0 ETH | 0.00101039 | ||||
Claim | 17570658 | 510 days ago | IN | 0 ETH | 0.00132691 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
18485034 | 382 days ago | 0 ETH | |||||
18485022 | 382 days ago | 0 ETH | |||||
18484742 | 382 days ago | 0 ETH | |||||
18484742 | 382 days ago | 0 ETH | |||||
18484640 | 382 days ago | 0 ETH | |||||
17582221 | 509 days ago | 0 ETH | |||||
17582219 | 509 days ago | 0 ETH | |||||
17577408 | 509 days ago | 0 ETH | |||||
17577407 | 509 days ago | 0 ETH | |||||
17577407 | 509 days ago | 0 ETH | |||||
17577403 | 509 days ago | 0 ETH | |||||
17577402 | 509 days ago | 0 ETH | |||||
17577402 | 509 days ago | 0 ETH | |||||
17575859 | 510 days ago | 0 ETH | |||||
17575857 | 510 days ago | 0 ETH | |||||
17575857 | 510 days ago | 0 ETH | |||||
17575852 | 510 days ago | 0 ETH | |||||
17575852 | 510 days ago | 0 ETH | |||||
17575843 | 510 days ago | 0 ETH | |||||
17575843 | 510 days ago | 0 ETH | |||||
17575769 | 510 days ago | 0 ETH | |||||
17575769 | 510 days ago | 0 ETH | |||||
17575497 | 510 days ago | 0 ETH | |||||
17575497 | 510 days ago | 0 ETH | |||||
17574655 | 510 days ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x66057c96...77d5A341a The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
EsgSHIP
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 300 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity >=0.5.16; pragma experimental ABIEncoderV2; import "./EIP20Interface.sol"; import "./SafeMath.sol"; import "./LendingWhiteList.sol"; import "./EnumerableSet.sol"; import "./owned.sol"; contract EsgSHIP is owned, LendingWhiteList { using SafeMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private _set; /// @notice ESG token EIP20Interface public esg; /// @notice Emitted when referral set referral event SetReferral(address referralAddress); /// @notice Emitted when ESG is staked event EsgStaked(address account, uint amount); /// @notice Emitted when ESG is withdrawn event EsgWithdrawn(address account, uint amount); /// @notice Emitted when ESG is claimed event EsgClaimed(address account, uint amount); // @notice The rate every day. uint256 public dayEsgRate; // @notice A checkpoint for staking struct Checkpoint { uint256 deposit_time; //last check time uint256 total_staked; uint256 bonus_unclaimed; } // @notice staking struct of every account mapping (address => Checkpoint) public stakings; mapping (address => EnumerableSet.AddressSet) inviteelist;//1:n struct User { address referrer_addr; } mapping (address => User) referrerlist;//1:1 // @notice total stake amount uint256 public total_deposited; uint256 public referrer_rate; uint256 public ship_rate; uint256 public referrer_limit_num; uint256 public referrer_reward_limit_num; uint256 public ship_reward_limit_num; constructor(address esgAddress) public { owner = msg.sender; dayEsgRate = 1.37e15; referrer_rate = 2e17; ship_rate = 8e16; referrer_limit_num = 1e21; referrer_reward_limit_num = 1e21; ship_reward_limit_num = 1e23; esg = EIP20Interface(esgAddress); } function setInvitee(address inviteeAddress) public returns (bool) { require(inviteeAddress != address(0), "inviteeAddress should not be 0x0."); EnumerableSet.AddressSet storage es = inviteelist[msg.sender]; User storage user = referrerlist[inviteeAddress]; require(user.referrer_addr == address(0), "This account had been invited!"); Checkpoint storage cpt = stakings[inviteeAddress]; require(cpt.total_staked == 0, "This account had staked!"); Checkpoint storage cp = stakings[msg.sender]; if(isWhitelisted(msg.sender)){ EnumerableSet.add(es, inviteeAddress); user.referrer_addr = msg.sender; }else{ if(cp.total_staked >= referrer_limit_num){ EnumerableSet.add(es, inviteeAddress); user.referrer_addr = msg.sender; }else{ return false; } } emit SetReferral(inviteeAddress); return true; } function getInviteelist(address referrerAddress) public view returns (address[] memory) { require(referrerAddress != address(0), "referrerAddress should not be 0x0."); EnumerableSet.AddressSet storage es = inviteelist[referrerAddress]; uint256 _length = EnumerableSet.length(es); address[] memory _inviteelist = new address[](_length); for(uint i=0; i<EnumerableSet.length(es); i++){ _inviteelist[i] = EnumerableSet.at(es,i); } return _inviteelist; } function getReferrer(address inviteeAddress) public view returns (address) { require(inviteeAddress != address(0), "inviteeAddress should not be 0x0."); User storage user = referrerlist[inviteeAddress]; return user.referrer_addr; } /** * @notice Stake ESG token to contract * @param amount The amount of address to be staked * @return Success indicator for whether staked */ function stake(uint256 amount) public returns (bool) { require(amount > 0, "No zero."); require(amount <= esg.balanceOf(msg.sender), "Insufficient ESG token."); Checkpoint storage cp = stakings[msg.sender]; esg.transferFrom(msg.sender, address(this), amount); if(cp.deposit_time > 0) { uint256 bonus = block.timestamp.sub(cp.deposit_time).mul(cp.total_staked).mul(dayEsgRate).div(1e18).div(86400); cp.bonus_unclaimed = cp.bonus_unclaimed.add(bonus); cp.total_staked = cp.total_staked.add(amount); cp.deposit_time = block.timestamp; }else { cp.total_staked = amount; cp.deposit_time = block.timestamp; } total_deposited = total_deposited.add(amount); emit EsgStaked(msg.sender, amount); return true; } /** * @notice withdraw all ESG token staked in contract * @return Success indicator for success */ function withdraw() public returns (bool) { Checkpoint storage cp = stakings[msg.sender]; uint256 amount = cp.total_staked; uint256 bonus = block.timestamp.sub(cp.deposit_time).mul(cp.total_staked).mul(dayEsgRate).div(1e18).div(86400); cp.bonus_unclaimed = cp.bonus_unclaimed.add(bonus); cp.total_staked = 0; cp.deposit_time = 0; total_deposited = total_deposited.sub(amount); esg.transfer(msg.sender, amount); emit EsgWithdrawn(msg.sender, amount); return true; } /** * @notice claim all ESG token bonus in contract * @return Success indicator for success */ function claim() public returns (bool) { User storage user = referrerlist[msg.sender]; address _referrer_addr = user.referrer_addr; uint256 incentive; uint256 incentive_holder; Checkpoint storage cp = stakings[msg.sender]; Checkpoint storage cpt = stakings[_referrer_addr]; uint256 amount = cp.bonus_unclaimed; if(cp.deposit_time > 0) { uint256 bonus = block.timestamp.sub(cp.deposit_time).mul(cp.total_staked).mul(dayEsgRate).div(1e18).div(86400); amount = amount.add(bonus); cp.bonus_unclaimed = 0; cp.deposit_time = block.timestamp; }else{ //has beed withdrawn cp.bonus_unclaimed = 0; } if(total_deposited >= ship_reward_limit_num){ incentive_holder = amount.mul(ship_rate).div(1e18); if(_referrer_addr != address(0)){ if(cpt.total_staked >= referrer_reward_limit_num){ incentive = amount.mul(referrer_rate).div(1e18); esg.transfer(_referrer_addr, incentive); } esg.transfer(owner, incentive_holder); esg.transfer(msg.sender, amount); }else { esg.transfer(owner, incentive_holder); esg.transfer(msg.sender, amount.sub(incentive_holder)); } }else { if(_referrer_addr != address(0)){ if(cpt.total_staked >= referrer_reward_limit_num){ incentive = amount.mul(referrer_rate).div(1e18); esg.transfer(_referrer_addr, incentive); } esg.transfer(msg.sender, amount); }else { esg.transfer(msg.sender, amount); } } emit EsgClaimed (msg.sender, amount); return true; } // set the dayrate function setDayEsgRate(uint256 dayRateMantissa) public{ require(msg.sender == owner, "only owner can set this value."); dayEsgRate = dayRateMantissa; } // set referrerRate function setReferrerRate(uint256 referrerRateMantissa) public{ require(msg.sender == owner, "only owner can set this value."); referrer_rate = referrerRateMantissa; } // set shipRate function setShipRate(uint256 shipRateMantissa) public{ require(msg.sender == owner, "only owner can set this value."); ship_rate = shipRateMantissa; } // set referrerLimitNum function setReferrerLimitNum(uint256 referrerLimitNum) public{ require(msg.sender == owner, "only owner can set this value."); referrer_limit_num = referrerLimitNum; } // set referrerRewardLimitNum function setReferrerRewardLimitNum(uint256 referrerRewardLimitNum) public{ require(msg.sender == owner, "only owner can set this value."); referrer_reward_limit_num = referrerRewardLimitNum; } // set shipRewardLimitNum function setShipRewardLimitNum(uint256 shipRewardLimitNum) public{ require(msg.sender == owner, "only owner can set this value."); ship_reward_limit_num = shipRewardLimitNum; } function _withdrawERC20Token(address tokenAddress) external onlyOwner { require(tokenAddress != address(0), "invalid address"); uint256 tokenAmount = esg.balanceOf(address(this)); if(tokenAmount > 0) esg.transfer(msg.sender, tokenAmount); else revert("insufficient ERC20 tokens"); } /** * @notice Returns the balance of ESG an account has staked * @param account The address of the account * @return balance of ESG */ function getStakingBalance(address account) external view returns (uint256) { Checkpoint memory cp = stakings[account]; return cp.total_staked; } /** * @notice Return the unclaimed bonus ESG of staking * @param account The address of the account * @return The amount of unclaimed ESG */ function getUnclaimedEsg(address account) public view returns (uint256) { Checkpoint memory cp = stakings[account]; uint256 amount = cp.bonus_unclaimed; if(cp.deposit_time > 0) { uint256 bonus = block.timestamp.sub(cp.deposit_time).mul(cp.total_staked).mul(dayEsgRate).div(1e18).div(86400); amount = amount.add(bonus); } return amount; } /** * @notice Return the APY of staking * @return The APY multiplied 1e18 */ function getStakingAPYMantissa() public view returns (uint256) { return dayEsgRate.mul(365); } /** * @notice Return the address of the ESG token * @return The address of ESG */ function getEsgAddress() public view returns (address) { return address(esg); } }
pragma solidity >=0.5.16; contract owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require (msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } }
pragma solidity ^0.5.16; // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol // Subject to the MIT license. /** * @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 addition of two unsigned integers, reverting with custom message on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction underflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ 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 multiplication of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b, string memory errorMessage) 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, errorMessage); 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. */ 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns(uint256 y) { uint256 z = ((add(x, 1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z), z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns(uint256) { return (mul(x, x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns(uint256) { if (x == 0) return (0); else if (y == 0) return (1); else { uint256 z = x; for (uint256 i = 1; i < y; i++) z = mul(z, x); return (z); } } }
pragma solidity >=0.5.16; import "./EnumerableSet.sol"; import "./owned.sol"; contract LendingWhiteList is owned { using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private _whitelist; event AddedToWhitelist(address indexed account); event RemovedFromWhitelist(address indexed account); constructor() public { } modifier onlyWhitelisted { require(isWhitelisted(msg.sender), "LendingWhiteList: caller is not in whitelist"); _; } function add(address _address) public onlyOwner returns(bool) { require(_address != address(0), "LendingWhiteList: _address is the zero address"); EnumerableSet.add(_whitelist, _address); emit AddedToWhitelist(_address); return true; } function remove(address _address) public onlyOwner returns(bool) { require(_address != address(0), "LendingWhiteList: _address is the zero address"); EnumerableSet.remove(_whitelist, _address); emit RemovedFromWhitelist(_address); return true; } function isWhitelisted(address _address) public view returns(bool) { return EnumerableSet.contains(_whitelist, _address); } }
pragma solidity >=0.5.16; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } }
pragma solidity ^0.5.16; /** * @title ERC 20 Token Standard Interface * https://eips.ethereum.org/EIPS/eip-20 */ interface EIP20Interface { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); /** * @notice Get the total number of tokens in circulation * @return The supply of tokens */ function totalSupply() external view returns (uint256); /** * @notice Gets the balance of the specified address * @param owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address owner) external view returns (uint256 balance); /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint256 amount) external returns (bool success); /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint256 amount) external returns (bool success); /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved (-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint256 amount) external returns (bool success); /** * @notice Get the current allowance from `owner` for `spender` * @param owner The address of the account which owns the tokens to be spent * @param spender The address of the account which may transfer tokens * @return The number of tokens allowed to be spent (-1 means infinite) */ function allowance(address owner, address spender) external view returns (uint256 remaining); event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 300 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"esgAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EsgClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EsgStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EsgWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referralAddress","type":"address"}],"name":"SetReferral","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"_withdrawERC20Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dayEsgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"esg","outputs":[{"internalType":"contract EIP20Interface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEsgAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"}],"name":"getInviteelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"getReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStakingAPYMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUnclaimedEsg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrer_limit_num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrer_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrer_reward_limit_num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"remove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"dayRateMantissa","type":"uint256"}],"name":"setDayEsgRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"setInvitee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"referrerLimitNum","type":"uint256"}],"name":"setReferrerLimitNum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"referrerRateMantissa","type":"uint256"}],"name":"setReferrerRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"referrerRewardLimitNum","type":"uint256"}],"name":"setReferrerRewardLimitNum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"shipRateMantissa","type":"uint256"}],"name":"setShipRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"shipRewardLimitNum","type":"uint256"}],"name":"setShipRewardLimitNum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ship_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ship_reward_limit_num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakings","outputs":[{"internalType":"uint256","name":"deposit_time","type":"uint256"},{"internalType":"uint256","name":"total_staked","type":"uint256"},{"internalType":"uint256","name":"bonus_unclaimed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637a4562fb1161010f578063d326a6c9116100a2578063e4aceddf11610071578063e4aceddf146103c2578063f2e31e81146103ca578063f2fde38b146103dd578063f8115d83146103f0576101e5565b8063d326a6c914610388578063dc6e13e114610390578063de560cca146103b2578063e28dfe52146103ba576101e5565b8063bc35651c116100de578063bc35651c1461033a578063bd6e3ac31461034d578063bfede9ba14610360578063cac0652214610373576101e5565b80637a4562fb146103045780638da5cb5b1461030c578063a694fc3a14610314578063b04ef9c214610327576101e5565b80633ccfd60b116101875780634e71d92d116101565780634e71d92d146102ce5780634fa77a48146102d65780634fff4709146102e9578063552d64f4146102f1576101e5565b80633ccfd60b146102965780634a9fefc71461029e5780634e0aebbe146102be5780634e64aab6146102c6576101e5565b806330143c6c116101c357806330143c6c1461024657806336d8a8931461024e57806339fcaa4c1461026e5780633af32abf14610283576101e5565b80630a3b0a4f146101ea5780631df6ec121461021357806329092d0e14610233575b600080fd5b6101fd6101f8366004611876565b610403565b60405161020a9190611d4f565b60405180910390f35b610226610221366004611876565b610493565b60405161020a9190611e4c565b6101fd610241366004611876565b610555565b6102266105db565b61026161025c366004611876565b6105e1565b60405161020a9190611d3e565b61028161027c3660046118ba565b6106ae565b005b6101fd610291366004611876565b6106dd565b6101fd6106f0565b6102b16102ac366004611876565b61083f565b60405161020a9190611cd1565b610226610886565b61022661088c565b6101fd610892565b6101fd6102e4366004611876565b610e24565b610226610f73565b6102816102ff366004611876565b610f79565b6102266110e5565b6102b16110eb565b6101fd6103223660046118ba565b6110fa565b610226610335366004611876565b611337565b6102816103483660046118ba565b611384565b61028161035b3660046118ba565b6113b3565b61028161036e3660046118ba565b6113e2565b61037b611411565b60405161020a9190611d5d565b610226611420565b6103a361039e366004611876565b61143d565b60405161020a93929190611e5a565b61022661145e565b6102b1611464565b610226611473565b6102816103d83660046118ba565b611479565b6102816103eb366004611876565b6114a8565b6102816103fe3660046118ba565b6114ed565b600080546001600160a01b0316331461041b57600080fd5b6001600160a01b03821661044a5760405162461bcd60e51b815260040161044190611dac565b60405180910390fd5b61045560018361151c565b506040516001600160a01b038316907fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0390600090a25060015b919050565b600061049d611829565b506001600160a01b0382166000908152600760209081526040918290208251606081018452815480825260018301549382019390935260029091015492810183905291901561054e5760006105386201518061052c670de0b6b3a764000061052c60065461052089602001516105208b600001514261153190919063ffffffff16565b9063ffffffff61157316565b9063ffffffff6115ad16565b905061054a828263ffffffff6115ef16565b9150505b9392505050565b600080546001600160a01b0316331461056d57600080fd5b6001600160a01b0382166105935760405162461bcd60e51b815260040161044190611dac565b61059e600183611614565b506040516001600160a01b038316907fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75790600090a2506001919050565b600d5481565b60606001600160a01b0382166106095760405162461bcd60e51b815260040161044190611ddc565b6001600160a01b03821660009081526008602052604081209061062b82611629565b9050606081604051908082528060200260200182016040528015610659578160200160208202803883390190505b50905060005b61066884611629565b8110156106a5576106798482611634565b82828151811061068557fe5b6001600160a01b039092166020928302919091019091015260010161065f565b50949350505050565b6000546001600160a01b031633146106d85760405162461bcd60e51b815260040161044190611dbc565b600f55565b60006106ea600183611640565b92915050565b33600090815260076020526040812060018101546006548254849161073991620151809161052c91670de0b6b3a76400009183916105209089908290429063ffffffff61153116565b6002840154909150610751908263ffffffff6115ef16565b60028401556000600184018190558355600a54610774908363ffffffff61153116565b600a5560055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906107a99033908690600401611d15565b602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107fb919081019061189c565b507f32b18a663d6a49ec24c56b0b6a4019af7b097bbd7f0930bcb8670ba002109088338360405161082d929190611d15565b60405180910390a16001935050505090565b60006001600160a01b0382166108675760405162461bcd60e51b815260040161044190611e2c565b506001600160a01b039081166000908152600960205260409020541690565b60065481565b600b5481565b336000908152600960209081526040808320805460079093528184206001600160a01b03909316808552918420600284015484549294869384939192901561093357600061090e6201518061052c670de0b6b3a764000061052c6006546105208a600101546105208c600001544261153190919063ffffffff16565b9050610920828263ffffffff6115ef16565b60006002860155428555915061093b9050565b600060028401555b600f54600a5410610c6157610967670de0b6b3a764000061052c600c548461157390919063ffffffff16565b93506001600160a01b03861615610b4057600e54826001015410610a2d576109a6670de0b6b3a764000061052c600b548461157390919063ffffffff16565b60055460405163a9059cbb60e01b81529196506001600160a01b03169063a9059cbb906109d99089908990600401611d30565b602060405180830381600087803b1580156109f357600080fd5b505af1158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2b919081019061189c565b505b60055460005460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92610a63929116908890600401611d30565b602060405180830381600087803b158015610a7d57600080fd5b505af1158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab5919081019061189c565b5060055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610ae89033908590600401611d15565b602060405180830381600087803b158015610b0257600080fd5b505af1158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b3a919081019061189c565b50610c5c565b60055460005460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92610b76929116908890600401611d30565b602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bc8919081019061189c565b506005546001600160a01b031663a9059cbb33610beb848863ffffffff61153116565b6040518363ffffffff1660e01b8152600401610c08929190611d15565b602060405180830381600087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c5a919081019061189c565b505b610ddd565b6001600160a01b03861615610d5757600e54826001015410610d2557610c9e670de0b6b3a764000061052c600b548461157390919063ffffffff16565b60055460405163a9059cbb60e01b81529196506001600160a01b03169063a9059cbb90610cd19089908990600401611d30565b602060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d23919081019061189c565b505b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c089033908590600401611d15565b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d899033908590600401611d15565b602060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ddb919081019061189c565b505b7f33fc5cbbab043468d397f2d10aea907885d46e24cdc8758828f08deb1738cf143382604051610e0e929190611d15565b60405180910390a1600197505050505050505090565b60006001600160a01b038216610e4c5760405162461bcd60e51b815260040161044190611e2c565b3360009081526008602090815260408083206001600160a01b03868116855260099093529220805490911615610e945760405162461bcd60e51b815260040161044190611e3c565b6001600160a01b0384166000908152600760205260409020600181015415610ece5760405162461bcd60e51b815260040161044190611d9c565b33600081815260076020526040902090610ee7906106dd565b15610f0c57610ef6848761151c565b5082546001600160a01b03191633178355610f30565b600d54816001015410610f2357610ef6848761151c565b600094505050505061048e565b7f7b57a333749628b79c0989800fe7069e65a2cd4aeaea4fe57c024e9cb1b7533f86604051610f5f9190611cd1565b60405180910390a150600195945050505050565b600e5481565b6000546001600160a01b03163314610f9057600080fd5b6001600160a01b038116610fb65760405162461bcd60e51b815260040161044190611dcc565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610fe7903090600401611cd1565b60206040518083038186803b158015610fff57600080fd5b505afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103791908101906118d8565b905080156110c95760055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906110719033908590600401611d15565b602060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110c3919081019061189c565b506110e1565b60405162461bcd60e51b815260040161044190611e1c565b5050565b600f5481565b6000546001600160a01b031681565b600080821161111b5760405162461bcd60e51b815260040161044190611dfc565b6005546040516370a0823160e01b81526001600160a01b03909116906370a082319061114b903390600401611cdf565b60206040518083038186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061119b91908101906118d8565b8211156111ba5760405162461bcd60e51b815260040161044190611e0c565b336000818152600760205260409081902060055491516323b872dd60e01b815290926001600160a01b03909216916323b872dd916111ff919030908890600401611ced565b602060405180830381600087803b15801561121957600080fd5b505af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611251919081019061189c565b508054156112d35760006112936201518061052c670de0b6b3a764000061052c60065461052088600101546105208a600001544261153190919063ffffffff16565b60028301549091506112ab908263ffffffff6115ef16565b600283015560018201546112c5908563ffffffff6115ef16565b6001830155504281556112de565b600181018390554281555b600a546112f1908463ffffffff6115ef16565b600a556040517f610d6fd9e2e4aaee6b7c85effc30243d3830d3ef8d920a414478e183dca1969c906113269033908690611d15565b60405180910390a150600192915050565b6000611341611829565b50506001600160a01b0316600090815260076020908152604091829020825160608101845281548152600182015492810183905260029091015492019190915290565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260040161044190611dbc565b600c55565b6000546001600160a01b031633146113dd5760405162461bcd60e51b815260040161044190611dbc565b600e55565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260040161044190611dbc565b600d55565b6005546001600160a01b031681565b6006546000906114389061016d63ffffffff61157316565b905090565b60076020526000908152604090208054600182015460029092015490919083565b600a5481565b6005546001600160a01b031690565b600c5481565b6000546001600160a01b031633146114a35760405162461bcd60e51b815260040161044190611dbc565b600655565b6000546001600160a01b031633146114bf57600080fd5b6001600160a01b038116156114ea57600080546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b031633146115175760405162461bcd60e51b815260040161044190611dbc565b600b55565b600061054e836001600160a01b038416611655565b600061054e83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f770081525061169f565b600082611582575060006106ea565b8282028284828161158f57fe5b041461054e5760405162461bcd60e51b815260040161044190611dec565b600061054e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116cb565b60008282018381101561054e5760405162461bcd60e51b815260040161044190611d8c565b600061054e836001600160a01b038416611702565b60006106ea826117c8565b600061054e83836117cc565b600061054e836001600160a01b038416611811565b60006116618383611811565b611697575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106ea565b5060006106ea565b600081848411156116c35760405162461bcd60e51b81526004016104419190611d6b565b505050900390565b600081836116ec5760405162461bcd60e51b81526004016104419190611d6b565b5060008385816116f857fe5b0495945050505050565b600081815260018301602052604081205480156117be578354600019808301919081019060009087908390811061173557fe5b906000526020600020015490508087600001848154811061175257fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061178257fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106ea565b60009150506106ea565b5490565b815460009082106117ef5760405162461bcd60e51b815260040161044190611d7c565b8260000182815481106117fe57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b60405180606001604052806000815260200160008152602001600081525090565b80356106ea81611ef3565b80516106ea81611f07565b80356106ea81611f10565b80516106ea81611f10565b60006020828403121561188857600080fd5b6000611894848461184a565b949350505050565b6000602082840312156118ae57600080fd5b60006118948484611855565b6000602082840312156118cc57600080fd5b60006118948484611860565b6000602082840312156118ea57600080fd5b6000611894848461186b565b60006119028383611919565b505060200190565b61191381611ea7565b82525050565b61191381611e88565b600061192d82611e7b565b6119378185611e7f565b935061194283611e75565b8060005b8381101561197057815161195a88826118f6565b975061196583611e75565b925050600101611946565b509495945050505050565b61191381611e93565b61191381611eae565b600061199882611e7b565b6119a28185611e7f565b93506119b2818560208601611eb9565b6119bb81611ee9565b9093019392505050565b60006119d2602283611e7f565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e815261647360f01b602082015260400192915050565b6000611a16601b83611e7f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611a4f601883611e7f565b7f54686973206163636f756e7420686164207374616b6564210000000000000000815260200192915050565b6000611a88602e83611e7f565b7f4c656e64696e6757686974654c6973743a205f6164647265737320697320746881526d65207a65726f206164647265737360901b602082015260400192915050565b6000611ad8601e83611e7f565b7f6f6e6c79206f776e65722063616e2073657420746869732076616c75652e0000815260200192915050565b6000611b11600f83611e7f565b6e696e76616c6964206164647265737360881b815260200192915050565b6000611b3c602283611e7f565b7f7265666572726572416464726573732073686f756c64206e6f74206265203078815261181760f11b602082015260400192915050565b6000611b80602183611e7f565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000611bc3600883611e7f565b672737903d32b9379760c11b815260200192915050565b6000611be7601783611e7f565b7f496e73756666696369656e742045534720746f6b656e2e000000000000000000815260200192915050565b6000611c20601983611e7f565b7f696e73756666696369656e7420455243323020746f6b656e7300000000000000815260200192915050565b6000611c59602183611e7f565b7f696e7669746565416464726573732073686f756c64206e6f74206265203078308152601760f91b602082015260400192915050565b6000611c9c601e83611e7f565b7f54686973206163636f756e7420686164206265656e20696e7669746564210000815260200192915050565b61191381611ea4565b602081016106ea8284611919565b602081016106ea828461190a565b60608101611cfb828661190a565b611d086020830185611919565b6118946040830184611cc8565b60408101611d23828561190a565b61054e6020830184611cc8565b60408101611d238285611919565b6020808252810161054e8184611922565b602081016106ea828461197b565b602081016106ea8284611984565b6020808252810161054e818461198d565b602080825281016106ea816119c5565b602080825281016106ea81611a09565b602080825281016106ea81611a42565b602080825281016106ea81611a7b565b602080825281016106ea81611acb565b602080825281016106ea81611b04565b602080825281016106ea81611b2f565b602080825281016106ea81611b73565b602080825281016106ea81611bb6565b602080825281016106ea81611bda565b602080825281016106ea81611c13565b602080825281016106ea81611c4c565b602080825281016106ea81611c8f565b602081016106ea8284611cc8565b60608101611e688286611cc8565b611d086020830185611cc8565b60200190565b5190565b90815260200190565b60006106ea82611e98565b151590565b6001600160a01b031690565b90565b60006106ea825b60006106ea82611e88565b60005b83811015611ed4578181015183820152602001611ebc565b83811115611ee3576000848401525b50505050565b601f01601f191690565b611efc81611e88565b81146114ea57600080fd5b611efc81611e93565b611efc81611ea456fea365627a7a723158203cfde807d71a689b159b013e1a6d78cc6be32b7e70dac675d1583919b57edae16c6578706572696d656e74616cf564736f6c63430005100040
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.