Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 472 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Leftover Share V... | 16367072 | 741 days ago | IN | 0 ETH | 0.00116568 | ||||
Leftover Share V... | 16258369 | 756 days ago | IN | 0 ETH | 0.00079437 | ||||
Leftover Share V... | 16247037 | 758 days ago | IN | 0 ETH | 0.00084374 | ||||
Leftover Share V... | 16242842 | 758 days ago | IN | 0 ETH | 0.00123541 | ||||
Leftover Share V... | 16234303 | 759 days ago | IN | 0 ETH | 0.00151299 | ||||
Leftover Share V... | 16233146 | 760 days ago | IN | 0 ETH | 0.00087005 | ||||
Leftover Share V... | 16224741 | 761 days ago | IN | 0 ETH | 0.00081104 | ||||
Leftover Share V... | 16221861 | 761 days ago | IN | 0 ETH | 0.00114838 | ||||
Discard Leftover... | 16210617 | 763 days ago | IN | 0 ETH | 0.00052675 | ||||
Leftover Share V... | 16208430 | 763 days ago | IN | 0 ETH | 0.00079945 | ||||
Leftover Share V... | 16206651 | 763 days ago | IN | 0 ETH | 0.00089322 | ||||
Discard Leftover... | 16190948 | 765 days ago | IN | 0 ETH | 0.00089156 | ||||
Leftover Share V... | 16185170 | 766 days ago | IN | 0 ETH | 0.00112102 | ||||
Leftover Share V... | 16184960 | 766 days ago | IN | 0 ETH | 0.00167188 | ||||
Leftover Share V... | 16170063 | 768 days ago | IN | 0 ETH | 0.00576101 | ||||
Leftover Share V... | 16168842 | 769 days ago | IN | 0 ETH | 0.00105895 | ||||
Leftover Share V... | 16165405 | 769 days ago | IN | 0 ETH | 0.0008178 | ||||
Leftover Share V... | 16113038 | 776 days ago | IN | 0 ETH | 0.00074098 | ||||
Leftover Share V... | 16097124 | 779 days ago | IN | 0 ETH | 0.00072891 | ||||
Leftover Share V... | 16090685 | 779 days ago | IN | 0 ETH | 0.00061962 | ||||
Leftover Share V... | 16089495 | 780 days ago | IN | 0 ETH | 0.00054818 | ||||
Leftover Share V... | 16075047 | 782 days ago | IN | 0 ETH | 0.00079447 | ||||
Leftover Share V... | 16063519 | 783 days ago | IN | 0 ETH | 0.00070268 | ||||
Leftover Share V... | 16055543 | 784 days ago | IN | 0 ETH | 0.00069509 | ||||
Leftover Share V... | 16054277 | 785 days ago | IN | 0 ETH | 0.00067503 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ExchangeGovernance
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../libraries/ExchangeConstants.sol"; import "../libraries/LiquidVoting.sol"; import "../libraries/SafeCast.sol"; import "../utils/BalanceAccounting.sol"; import "./BaseGovernanceModule.sol"; contract ExchangeGovernance is BaseGovernanceModule, BalanceAccounting { using Vote for Vote.Data; using LiquidVoting for LiquidVoting.Data; using VirtualVote for VirtualVote.Data; using SafeCast for uint256; event LeftoverGovernanceShareUpdate(address indexed user, uint256 vote, bool isDefault, uint256 amount); event LeftoverReferralShareUpdate(address indexed user, uint256 vote, bool isDefault, uint256 amount); LiquidVoting.Data private _leftoverGovernanceShare; constructor(address _mothership) public BaseGovernanceModule(_mothership) { _leftoverGovernanceShare.data.result = ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE.toUint104(); } function parameters() external view returns(uint256 govShare, uint256 refShare) { govShare = _leftoverGovernanceShare.data.current(); refShare = ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(govShare); } function leftoverGovernanceShare() external view returns(uint256) { return _leftoverGovernanceShare.data.current(); } function leftoverGovernanceShareVotes(address user) external view returns(uint256) { return _leftoverGovernanceShare.votes[user].get(ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE); } function virtualLeftoverGovernanceShare() external view returns(uint104, uint104, uint48) { return (_leftoverGovernanceShare.data.oldResult, _leftoverGovernanceShare.data.result, _leftoverGovernanceShare.data.time); } // function leftoverReferralShare() external view returns(uint256) { return ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(_leftoverGovernanceShare.data.current()); } function leftoverReferralShareVotes(address user) external view returns(uint256) { return ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(_leftoverGovernanceShare.votes[user].get(ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE)); } function virtualLeftoverReferralShare() external view returns(uint104, uint104, uint48) { return ( ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(_leftoverGovernanceShare.data.oldResult).toUint104(), ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(_leftoverGovernanceShare.data.result).toUint104(), _leftoverGovernanceShare.data.time ); } /// function leftoverShareVote(uint256 govShare) external { uint256 refShare = ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(govShare, "Governance share is too high"); uint256 balance = balanceOf(msg.sender); uint256 supply = totalSupply(); _leftoverGovernanceShare.updateVote( msg.sender, _leftoverGovernanceShare.votes[msg.sender], Vote.init(govShare), balance, supply, ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE, _emitLeftoverGovernanceShareVoteUpdate ); _emitLeftoverReferralShareVoteUpdate(msg.sender, refShare, false, balance); } function discardLeftoverShareVote() external { uint256 balance = balanceOf(msg.sender); uint256 supply = totalSupply(); _leftoverGovernanceShare.updateVote( msg.sender, _leftoverGovernanceShare.votes[msg.sender], Vote.init(), balance, supply, ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE, _emitLeftoverGovernanceShareVoteUpdate ); _emitLeftoverReferralShareVoteUpdate(msg.sender, ExchangeConstants._DEFAULT_LEFTOVER_REF_SHARE, true, balance); } function _notifyStakeChanged(address account, uint256 newBalance) internal override { uint256 balance = _set(account, newBalance); if (newBalance == balance) { return; } Vote.Data memory govShareVote = _leftoverGovernanceShare.votes[account]; uint256 refShare = ExchangeConstants._LEFTOVER_TOTAL_SHARE.sub(govShareVote.get(ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE)); uint256 supply = totalSupply(); _leftoverGovernanceShare.updateBalance( account, govShareVote, balance, newBalance, supply, ExchangeConstants._DEFAULT_LEFTOVER_GOV_SHARE, _emitLeftoverGovernanceShareVoteUpdate ); _emitLeftoverReferralShareVoteUpdate( account, refShare, govShareVote.isDefault(), newBalance ); } function _emitLeftoverGovernanceShareVoteUpdate(address user, uint256 newDefaultShare, bool isDefault, uint256 balance) private { emit LeftoverGovernanceShareUpdate(user, newDefaultShare, isDefault, balance); } function _emitLeftoverReferralShareVoteUpdate(address user, uint256 newDefaultShare, bool isDefault, uint256 balance) private { emit LeftoverReferralShareUpdate(user, newDefaultShare, isDefault, balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; library ExchangeConstants { uint256 internal constant _LEFTOVER_TOTAL_SHARE = 1e18; // 100% uint256 internal constant _DEFAULT_LEFTOVER_GOV_SHARE = 0.8e18; // 80% uint256 internal constant _DEFAULT_LEFTOVER_REF_SHARE = 0.2e18; // 20% }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "@openzeppelin/contracts/math/SafeMath.sol"; import "./SafeCast.sol"; import "./VirtualVote.sol"; import "./Vote.sol"; library LiquidVoting { using SafeMath for uint256; using SafeCast for uint256; using Vote for Vote.Data; using VirtualVote for VirtualVote.Data; struct Data { VirtualVote.Data data; uint256 _weightedSum; uint256 _defaultVotes; mapping(address => Vote.Data) votes; } function updateVote( LiquidVoting.Data storage self, address user, Vote.Data memory oldVote, Vote.Data memory newVote, uint256 balance, uint256 totalSupply, uint256 defaultVote, function(address, uint256, bool, uint256) emitEvent ) internal { return _update(self, user, oldVote, newVote, balance, balance, totalSupply, defaultVote, emitEvent); } function updateBalance( LiquidVoting.Data storage self, address user, Vote.Data memory oldVote, uint256 oldBalance, uint256 newBalance, uint256 newTotalSupply, uint256 defaultVote, function(address, uint256, bool, uint256) emitEvent ) internal { return _update(self, user, oldVote, newBalance == 0 ? Vote.init() : oldVote, oldBalance, newBalance, newTotalSupply, defaultVote, emitEvent); } function _update( LiquidVoting.Data storage self, address user, Vote.Data memory oldVote, Vote.Data memory newVote, uint256 oldBalance, uint256 newBalance, uint256 newTotalSupply, uint256 defaultVote, function(address, uint256, bool, uint256) emitEvent ) private { uint256 oldWeightedSum = self._weightedSum; uint256 newWeightedSum = oldWeightedSum; uint256 oldDefaultVotes = self._defaultVotes; uint256 newDefaultVotes = oldDefaultVotes; if (oldVote.isDefault()) { newDefaultVotes = newDefaultVotes.sub(oldBalance); } else { newWeightedSum = newWeightedSum.sub(oldBalance.mul(oldVote.get(defaultVote))); } if (newVote.isDefault()) { newDefaultVotes = newDefaultVotes.add(newBalance); } else { newWeightedSum = newWeightedSum.add(newBalance.mul(newVote.get(defaultVote))); } if (newWeightedSum != oldWeightedSum) { self._weightedSum = newWeightedSum; } if (newDefaultVotes != oldDefaultVotes) { self._defaultVotes = newDefaultVotes; } { uint256 newResult = newTotalSupply == 0 ? defaultVote : newWeightedSum.add(newDefaultVotes.mul(defaultVote)).div(newTotalSupply); VirtualVote.Data memory data = self.data; if (newResult != data.result) { VirtualVote.Data storage sdata = self.data; (sdata.oldResult, sdata.result, sdata.time) = ( data.current().toUint104(), newResult.toUint104(), block.timestamp.toUint48() ); } } if (!newVote.eq(oldVote)) { self.votes[user] = newVote; } emitEvent(user, newVote.get(defaultVote), newVote.isDefault(), newBalance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; library SafeCast { function toUint216(uint256 value) internal pure returns (uint216) { require(value < 2**216, "value does not fit in 216 bits"); return uint216(value); } function toUint104(uint256 value) internal pure returns (uint104) { require(value < 2**104, "value does not fit in 104 bits"); return uint104(value); } function toUint48(uint256 value) internal pure returns (uint48) { require(value < 2**48, "value does not fit in 48 bits"); return uint48(value); } function toUint40(uint256 value) internal pure returns (uint40) { require(value < 2**40, "value does not fit in 40 bits"); return uint40(value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "@openzeppelin/contracts/math/SafeMath.sol"; contract BalanceAccounting { using SafeMath for uint256; uint256 private _totalSupply; mapping(address => uint256) private _balances; function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function _mint(address account, uint256 amount) internal virtual { _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); } function _burn(address account, uint256 amount) internal virtual { _balances[account] = _balances[account].sub(amount, "Burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); } function _set(address account, uint256 amount) internal virtual returns(uint256 oldAmount) { oldAmount = _balances[account]; if (oldAmount != amount) { _balances[account] = amount; _totalSupply = _totalSupply.add(amount).sub(oldAmount); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../interfaces/IGovernanceModule.sol"; abstract contract BaseGovernanceModule is IGovernanceModule { address public immutable mothership; modifier onlyMothership { require(msg.sender == mothership, "Access restricted to mothership"); _; } constructor(address _mothership) public { mothership = _mothership; } function notifyStakesChanged(address[] calldata accounts, uint256[] calldata newBalances) external override onlyMothership { require(accounts.length == newBalances.length, "Arrays length should be equal"); for(uint256 i = 0; i < accounts.length; ++i) { _notifyStakeChanged(accounts[i], newBalances[i]); } } function notifyStakeChanged(address account, uint256 newBalance) external override onlyMothership { _notifyStakeChanged(account, newBalance); } function _notifyStakeChanged(address account, uint256 newBalance) internal virtual; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "@openzeppelin/contracts/math/Math.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; library VirtualVote { using SafeMath for uint256; uint256 private constant _VOTE_DECAY_PERIOD = 1 days; struct Data { uint104 oldResult; uint104 result; uint48 time; } function current(VirtualVote.Data memory self) internal view returns(uint256) { uint256 timePassed = Math.min(_VOTE_DECAY_PERIOD, block.timestamp.sub(self.time)); uint256 timeRemain = _VOTE_DECAY_PERIOD.sub(timePassed); return uint256(self.oldResult).mul(timeRemain).add( uint256(self.result).mul(timePassed) ).div(_VOTE_DECAY_PERIOD); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; library Vote { struct Data { uint256 value; } function eq(Vote.Data memory self, Vote.Data memory vote) internal pure returns(bool) { return self.value == vote.value; } function init() internal pure returns(Vote.Data memory data) { return Vote.Data({ value: 0 }); } function init(uint256 vote) internal pure returns(Vote.Data memory data) { return Vote.Data({ value: vote + 1 }); } function isDefault(Data memory self) internal pure returns(bool) { return self.value == 0; } function get(Data memory self, uint256 defaultVote) internal pure returns(uint256) { if (self.value > 0) { return self.value - 1; } return defaultVote; } function get(Data memory self, function() external view returns(uint256) defaultVoteFn) internal view returns(uint256) { if (self.value > 0) { return self.value - 1; } return defaultVoteFn(); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IGovernanceModule { function notifyStakeChanged(address account, uint256 newBalance) external; function notifyStakesChanged(address[] calldata accounts, uint256[] calldata newBalances) external; }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_mothership","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"vote","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDefault","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LeftoverGovernanceShareUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"vote","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDefault","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LeftoverReferralShareUpdate","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discardLeftoverShareVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leftoverGovernanceShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"leftoverGovernanceShareVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leftoverReferralShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"leftoverReferralShareVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"govShare","type":"uint256"}],"name":"leftoverShareVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mothership","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"notifyStakeChanged","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"newBalances","type":"uint256[]"}],"name":"notifyStakesChanged","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"parameters","outputs":[{"internalType":"uint256","name":"govShare","type":"uint256"},{"internalType":"uint256","name":"refShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"virtualLeftoverGovernanceShare","outputs":[{"internalType":"uint104","name":"","type":"uint104"},{"internalType":"uint104","name":"","type":"uint104"},{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"virtualLeftoverReferralShare","outputs":[{"internalType":"uint104","name":"","type":"uint104"},{"internalType":"uint104","name":"","type":"uint104"},{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b506040516115293803806115298339818101604052602081101561003357600080fd5b5051606081901b6001600160601b031916608052610063670b1a2bc2ec500000610094602090811b610a1217901c565b600280546001600160681b0392909216600160681b02600160681b600160d01b0319909216919091179055506100f2565b6000600160681b82106100ee576040805162461bcd60e51b815260206004820152601e60248201527f76616c756520646f6573206e6f742066697420696e2031303420626974730000604482015290519081900360640190fd5b5090565b60805160601c61141061011960003980610430528061057d528061081b52506114106000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c57806394f4b1621161006657806394f4b16214610269578063ad33334814610271578063e44f53d314610333578063fa3f88ae14610366576100ea565b806370a08231146101f85780637bcf84c01461022b5780638903573014610248576100ea565b80632fce8dea116100c85780632fce8dea1461018457806331f866af1461018c5780634187b7d6146101bf5780634aded6ce146101f0576100ea565b806310d97a18146100ef57806318160ddd1461012f57806327a2743314610149575b600080fd5b6100f761036e565b604080516cffffffffffffffffffffffffff948516815292909316602083015265ffffffffffff168183015290519081900360600190f35b610137610412565b60408051918252519081900360200190f35b6101826004803603604081101561015f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610418565b005b6100f76104ca565b610137600480360360208110156101a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661051d565b6101c761057b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61013761059f565b6101376004803603602081101561020e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610618565b6101826004803603602081101561024157600080fd5b5035610640565b610250610707565b6040805192835260208301919091528051918290030190f35b610137610793565b6101826004803603604081101561028757600080fd5b8101906020810181356401000000008111156102a257600080fd5b8201836020820111156102b457600080fd5b803590602001918460208302840111640100000000831117156102d657600080fd5b9193909290916020810190356401000000008111156102f457600080fd5b82018360208201111561030657600080fd5b8035906020019184602083028401116401000000008311171561032857600080fd5b509092509050610803565b6101376004803603602081101561034957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610973565b6101826109b8565b600254600090819081906103a39061039e90670de0b6b3a7640000906cffffffffffffffffffffffffff16610a94565b610a12565b6002546103dd9061039e90670de0b6b3a7640000906d010000000000000000000000000090046cffffffffffffffffffffffffff16610a94565b60025491959094507a01000000000000000000000000000000000000000000000000000090910465ffffffffffff1692509050565b60005490565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104bc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416363657373207265737472696374656420746f206d6f746865727368697000604482015290519081900360640190fd5b6104c68282610b0b565b5050565b6002546cffffffffffffffffffffffffff808216926d01000000000000000000000000008304909116917a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832081519283019091525481526105759061056690670b1a2bc2ec500000610bbe565b670de0b6b3a764000090610a94565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff16918101919091526000906106139061056690610bf8565b905090565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000610694826040518060400160405280601c81526020017f476f7665726e616e636520736861726520697320746f6f206869676800000000815250670de0b6b3a7640000610c989092919063ffffffff16565b905060006106a133610618565b905060006106ad610412565b336000818152600560209081526040918290208251918201909252905481529192506106f4916106dc87610d49565b60029291908686670b1a2bc2ec500000610d68610dc8565b6107013384600085610de3565b50505050565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff1691810191909152600090819061077990610bf8565b915061078d670de0b6b3a764000083610a94565b90509091565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff169181019190915260009061061390610bf8565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416363657373207265737472696374656420746f206d6f746865727368697000604482015290519081900360640190fd5b82811461091557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f417272617973206c656e6774682073686f756c6420626520657175616c000000604482015290519081900360640190fd5b60005b8381101561096c5761096485858381811061092f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1684848481811061095857fe5b90506020020135610b0b565b600101610918565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560209081526040808320815192830190915254815261057590670b1a2bc2ec500000610bbe565b60006109c333610618565b905060006109cf610412565b336000818152600560209081526040918290208251918201909252905481529192506109fd916106dc610e43565b6104c6336702c68af0bb140000600185610de3565b60006d01000000000000000000000000008210610a9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f76616c756520646f6573206e6f742066697420696e2031303420626974730000604482015290519081900360640190fd5b5090565b600082821115610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610b178383610e5e565b905080821415610b2757506104c6565b610b2f611386565b5073ffffffffffffffffffffffffffffffffffffffff83166000908152600560209081526040808320815192830190915254815290610b7961056683670b1a2bc2ec500000610bbe565b90506000610b85610412565b9050610ba260028785878986670b1a2bc2ec500000610d68610ed3565b610bb68683610bb086610ef7565b88610de3565b505050505050565b815160009015610bf2575081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610575565b50919050565b600080610c2662015180610c21856040015165ffffffffffff1642610a9490919063ffffffff16565b610efc565b90506000610c376201518083610a94565b9050610c9062015180610c8a610c698588602001516cffffffffffffffffffffffffff16610f1490919063ffffffff16565b8751610c84906cffffffffffffffffffffffffff1686610f14565b90610f87565b90610ffb565b949350505050565b60008184841115610d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d06578181015183820152602001610cee565b50505050905090810190601f168015610d335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b610d51611386565b506040805160208101909152600182018152919050565b604080518481528315156020820152808201839052905173ffffffffffffffffffffffffffffffffffffffff8616917f2f2c318dd3a1bee02ade0f8f05d9c8f392f7988aa993cc619153bf068801d259919081900360600190a250505050565b610dd988888888888989898961107c565b5050505050505050565b604080518481528315156020820152808201839052905173ffffffffffffffffffffffffffffffffffffffff8616917fc81c61c2c3ce128e7b0962cbb5ffd5d975dcefcca05b54345474f37943743b7a919081900360600190a250505050565b610e4b611386565b5060408051602081019091526000815290565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020548181146105755773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812083905554610eca908290610ec49085610f87565b90610a94565b60005592915050565b610dd98888888715610ee55789610eed565b610eed610e43565b898989898961107c565b511590565b6000818310610f0b5781610f0d565b825b9392505050565b600082610f2357506000610575565b82820282848281610f3057fe5b0414610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806113ba6021913960400191505060405180910390fd5b600082820183811015610f0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821161106b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161107457fe5b049392505050565b600189015460028a01548190806110928b610ef7565b156110a8576110a1818a610a94565b90506110c9565b6110c66110bf6110b88d89610bbe565b8b90610f14565b8490610a94565b92505b6110d28a610ef7565b156110e8576110e18189610f87565b9050611109565b6111066110ff6110f88c89610bbe565b8a90610f14565b8490610f87565b92505b8383146111185760018d018390555b8181146111275760028d018190555b6000871561114c5761114788610c8a611140858b610f14565b8790610f87565b61114e565b865b9050611158611399565b50604080516060810182528f546cffffffffffffffffffffffffff80821683526d0100000000000000000000000000820416602083018190527a01000000000000000000000000000000000000000000000000000090910465ffffffffffff169282019290925290821461129b578e6111d361039e83610bf8565b6111dc84610a12565b6111e542611308565b835479ffffffffffffffffffffffffffffffffffffffffffffffffffff167a01000000000000000000000000000000000000000000000000000065ffffffffffff9290921691909102177fffffffffffff00000000000000000000000000ffffffffffffffffffffffffff166d01000000000000000000000000006cffffffffffffffffffffffffff92831602177fffffffffffffffffffffffffffffffffffffff000000000000000000000000001691161790555b506112a890508a8c61137f565b6112d85773ffffffffffffffffffffffffffffffffffffffff8c16600090815260038e01602052604090208a5190555b6112f98c6112e68c89610bbe565b6112ef8d610ef7565b8b8963ffffffff16565b50505050505050505050505050565b600066010000000000008210610a9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f76616c756520646f6573206e6f742066697420696e2034382062697473000000604482015290519081900360640190fd5b5190511490565b6040518060200160405280600081525090565b60408051606081018252600080825260208201819052918101919091529056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206161f442c3a95796cfd0294dae5874ccbe10de5941ed80840630bd3fd04b4bae64736f6c634300060c0033000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c57806394f4b1621161006657806394f4b16214610269578063ad33334814610271578063e44f53d314610333578063fa3f88ae14610366576100ea565b806370a08231146101f85780637bcf84c01461022b5780638903573014610248576100ea565b80632fce8dea116100c85780632fce8dea1461018457806331f866af1461018c5780634187b7d6146101bf5780634aded6ce146101f0576100ea565b806310d97a18146100ef57806318160ddd1461012f57806327a2743314610149575b600080fd5b6100f761036e565b604080516cffffffffffffffffffffffffff948516815292909316602083015265ffffffffffff168183015290519081900360600190f35b610137610412565b60408051918252519081900360200190f35b6101826004803603604081101561015f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610418565b005b6100f76104ca565b610137600480360360208110156101a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661051d565b6101c761057b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61013761059f565b6101376004803603602081101561020e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610618565b6101826004803603602081101561024157600080fd5b5035610640565b610250610707565b6040805192835260208301919091528051918290030190f35b610137610793565b6101826004803603604081101561028757600080fd5b8101906020810181356401000000008111156102a257600080fd5b8201836020820111156102b457600080fd5b803590602001918460208302840111640100000000831117156102d657600080fd5b9193909290916020810190356401000000008111156102f457600080fd5b82018360208201111561030657600080fd5b8035906020019184602083028401116401000000008311171561032857600080fd5b509092509050610803565b6101376004803603602081101561034957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610973565b6101826109b8565b600254600090819081906103a39061039e90670de0b6b3a7640000906cffffffffffffffffffffffffff16610a94565b610a12565b6002546103dd9061039e90670de0b6b3a7640000906d010000000000000000000000000090046cffffffffffffffffffffffffff16610a94565b60025491959094507a01000000000000000000000000000000000000000000000000000090910465ffffffffffff1692509050565b60005490565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba16146104bc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416363657373207265737472696374656420746f206d6f746865727368697000604482015290519081900360640190fd5b6104c68282610b0b565b5050565b6002546cffffffffffffffffffffffffff808216926d01000000000000000000000000008304909116917a010000000000000000000000000000000000000000000000000000900465ffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832081519283019091525481526105759061056690670b1a2bc2ec500000610bbe565b670de0b6b3a764000090610a94565b92915050565b7f000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba81565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff16918101919091526000906106139061056690610bf8565b905090565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000610694826040518060400160405280601c81526020017f476f7665726e616e636520736861726520697320746f6f206869676800000000815250670de0b6b3a7640000610c989092919063ffffffff16565b905060006106a133610618565b905060006106ad610412565b336000818152600560209081526040918290208251918201909252905481529192506106f4916106dc87610d49565b60029291908686670b1a2bc2ec500000610d68610dc8565b6107013384600085610de3565b50505050565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff1691810191909152600090819061077990610bf8565b915061078d670de0b6b3a764000083610a94565b90509091565b604080516060810182526002546cffffffffffffffffffffffffff80821683526d010000000000000000000000000082041660208301527a010000000000000000000000000000000000000000000000000000900465ffffffffffff169181019190915260009061061390610bf8565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba16146108a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f416363657373207265737472696374656420746f206d6f746865727368697000604482015290519081900360640190fd5b82811461091557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f417272617973206c656e6774682073686f756c6420626520657175616c000000604482015290519081900360640190fd5b60005b8381101561096c5761096485858381811061092f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1684848481811061095857fe5b90506020020135610b0b565b600101610918565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560209081526040808320815192830190915254815261057590670b1a2bc2ec500000610bbe565b60006109c333610618565b905060006109cf610412565b336000818152600560209081526040918290208251918201909252905481529192506109fd916106dc610e43565b6104c6336702c68af0bb140000600185610de3565b60006d01000000000000000000000000008210610a9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f76616c756520646f6573206e6f742066697420696e2031303420626974730000604482015290519081900360640190fd5b5090565b600082821115610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610b178383610e5e565b905080821415610b2757506104c6565b610b2f611386565b5073ffffffffffffffffffffffffffffffffffffffff83166000908152600560209081526040808320815192830190915254815290610b7961056683670b1a2bc2ec500000610bbe565b90506000610b85610412565b9050610ba260028785878986670b1a2bc2ec500000610d68610ed3565b610bb68683610bb086610ef7565b88610de3565b505050505050565b815160009015610bf2575081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610575565b50919050565b600080610c2662015180610c21856040015165ffffffffffff1642610a9490919063ffffffff16565b610efc565b90506000610c376201518083610a94565b9050610c9062015180610c8a610c698588602001516cffffffffffffffffffffffffff16610f1490919063ffffffff16565b8751610c84906cffffffffffffffffffffffffff1686610f14565b90610f87565b90610ffb565b949350505050565b60008184841115610d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d06578181015183820152602001610cee565b50505050905090810190601f168015610d335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b610d51611386565b506040805160208101909152600182018152919050565b604080518481528315156020820152808201839052905173ffffffffffffffffffffffffffffffffffffffff8616917f2f2c318dd3a1bee02ade0f8f05d9c8f392f7988aa993cc619153bf068801d259919081900360600190a250505050565b610dd988888888888989898961107c565b5050505050505050565b604080518481528315156020820152808201839052905173ffffffffffffffffffffffffffffffffffffffff8616917fc81c61c2c3ce128e7b0962cbb5ffd5d975dcefcca05b54345474f37943743b7a919081900360600190a250505050565b610e4b611386565b5060408051602081019091526000815290565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020548181146105755773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812083905554610eca908290610ec49085610f87565b90610a94565b60005592915050565b610dd98888888715610ee55789610eed565b610eed610e43565b898989898961107c565b511590565b6000818310610f0b5781610f0d565b825b9392505050565b600082610f2357506000610575565b82820282848281610f3057fe5b0414610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806113ba6021913960400191505060405180910390fd5b600082820183811015610f0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821161106b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161107457fe5b049392505050565b600189015460028a01548190806110928b610ef7565b156110a8576110a1818a610a94565b90506110c9565b6110c66110bf6110b88d89610bbe565b8b90610f14565b8490610a94565b92505b6110d28a610ef7565b156110e8576110e18189610f87565b9050611109565b6111066110ff6110f88c89610bbe565b8a90610f14565b8490610f87565b92505b8383146111185760018d018390555b8181146111275760028d018190555b6000871561114c5761114788610c8a611140858b610f14565b8790610f87565b61114e565b865b9050611158611399565b50604080516060810182528f546cffffffffffffffffffffffffff80821683526d0100000000000000000000000000820416602083018190527a01000000000000000000000000000000000000000000000000000090910465ffffffffffff169282019290925290821461129b578e6111d361039e83610bf8565b6111dc84610a12565b6111e542611308565b835479ffffffffffffffffffffffffffffffffffffffffffffffffffff167a01000000000000000000000000000000000000000000000000000065ffffffffffff9290921691909102177fffffffffffff00000000000000000000000000ffffffffffffffffffffffffff166d01000000000000000000000000006cffffffffffffffffffffffffff92831602177fffffffffffffffffffffffffffffffffffffff000000000000000000000000001691161790555b506112a890508a8c61137f565b6112d85773ffffffffffffffffffffffffffffffffffffffff8c16600090815260038e01602052604090208a5190555b6112f98c6112e68c89610bbe565b6112ef8d610ef7565b8b8963ffffffff16565b50505050505050505050505050565b600066010000000000008210610a9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f76616c756520646f6573206e6f742066697420696e2034382062697473000000604482015290519081900360640190fd5b5190511490565b6040518060200160405280600081525090565b60408051606081018252600080825260208201819052918101919091529056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206161f442c3a95796cfd0294dae5874ccbe10de5941ed80840630bd3fd04b4bae64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba
-----Decoded View---------------
Arg [0] : _mothership (address): 0xA0446D8804611944F1B527eCD37d7dcbE442caba
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0446d8804611944f1b527ecd37d7dcbe442caba
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.