More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 30 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Market For R... | 14266721 | 935 days ago | IN | 0 ETH | 0.00714628 | ||||
Set Flywheel Rew... | 14266719 | 935 days ago | IN | 0 ETH | 0.00670096 | ||||
Accrue | 14265379 | 935 days ago | IN | 0 ETH | 0.01163045 | ||||
Add Market For R... | 14264984 | 936 days ago | IN | 0 ETH | 0.01532581 | ||||
Claim | 14264669 | 936 days ago | IN | 0 ETH | 0.00141332 | ||||
Accrue | 14264622 | 936 days ago | IN | 0 ETH | 0.00214538 | ||||
Claim | 14264432 | 936 days ago | IN | 0 ETH | 0.0020106 | ||||
Accrue | 14264429 | 936 days ago | IN | 0 ETH | 0.0099218 | ||||
Claim | 14264388 | 936 days ago | IN | 0 ETH | 0.00558317 | ||||
Accrue | 14264387 | 936 days ago | IN | 0 ETH | 0.02206359 | ||||
Add Market For R... | 14264367 | 936 days ago | IN | 0 ETH | 0.00601759 | ||||
Add Market For R... | 14264367 | 936 days ago | IN | 0 ETH | 0.00601759 | ||||
Add Market For R... | 14264360 | 936 days ago | IN | 0 ETH | 0.00423152 | ||||
Accrue | 14264356 | 936 days ago | IN | 0 ETH | 0.00186238 | ||||
Claim | 14264027 | 936 days ago | IN | 0 ETH | 0.00357744 | ||||
Accrue | 14264018 | 936 days ago | IN | 0 ETH | 0.01813544 | ||||
Claim | 14263841 | 936 days ago | IN | 0 ETH | 0.00224261 | ||||
Accrue | 14263838 | 936 days ago | IN | 0 ETH | 0.01399146 | ||||
Claim | 14260753 | 936 days ago | IN | 0 ETH | 0.00229187 | ||||
Accrue | 14260751 | 936 days ago | IN | 0 ETH | 0.00738269 | ||||
Claim | 14260705 | 936 days ago | IN | 0 ETH | 0.00304584 | ||||
Accrue | 14260702 | 936 days ago | IN | 0 ETH | 0.01077059 | ||||
Add Market For R... | 14252114 | 937 days ago | IN | 0 ETH | 0.00721113 | ||||
Add Market For R... | 14252113 | 937 days ago | IN | 0 ETH | 0.0077268 | ||||
Add Market For R... | 14252111 | 937 days ago | IN | 0 ETH | 0.00908564 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FuseFlywheelCore
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-17 */ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.10; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol) /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol) abstract contract Auth { event OwnerUpdated(address indexed user, address indexed newOwner); event AuthorityUpdated(address indexed user, Authority indexed newAuthority); address public owner; Authority public authority; constructor(address _owner, Authority _authority) { owner = _owner; authority = _authority; emit OwnerUpdated(msg.sender, _owner); emit AuthorityUpdated(msg.sender, _authority); } modifier requiresAuth() { require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED"); _; } function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) { Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas. // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be // aware that this makes protected functions uncallable even to the owner if the authority is out of order. return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner; } function setAuthority(Authority newAuthority) public virtual { // We check if the caller is the owner first because we want to ensure they can // always swap out the authority even if it's reverting or using up a lot of gas. require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig)); authority = newAuthority; emit AuthorityUpdated(msg.sender, newAuthority); } function setOwner(address newOwner) public virtual requiresAuth { owner = newOwner; emit OwnerUpdated(msg.sender, newOwner); } } /// @notice A generic interface for a contract which provides authorization data to an Auth instance. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol) /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol) interface Authority { function canCall( address user, address target, bytes4 functionSig ) external view returns (bool); } /** @title Rewards Module for Flywheel @notice The rewards module is a minimal interface for determining the quantity of rewards accrued to a flywheel market. Different module strategies include: * a static reward rate per second * a decaying reward rate * a dynamic just-in-time reward stream * liquid governance reward delegation */ interface IFlywheelRewards { function getAccruedRewards(ERC20 market, uint32 lastUpdatedTimestamp) external returns (uint256 rewards); } /** @title Balance Booster Module for Flywheel @notice An optional module for virtually boosting user balances. This allows a Flywheel Core to plug into some balance boosting logic. Boosting logic can be associated with referrals, vote-escrow, or other strategies. It can even be used to model exotic strategies like borrowing. */ interface IFlywheelBooster { function boostedTotalSupply(ERC20 market) external view returns(uint256); function boostedBalanceOf(ERC20 market, address user) external view returns(uint256); } /** @title Flywheel Core Incentives Manager @notice Flywheel is a general framework for managing token incentives. It is comprised of the Core (this contract), Rewards module, and optional Booster module. Core is responsible for maintaining reward accrual through reward indexes. It delegates the actual accrual logic to the Rewards Module. For maximum accuracy and to avoid exploits, rewards accrual should be notified atomically through the accrue hook. Accrue should be called any time tokens are transferred, minted, or burned. */ contract FlywheelCore is Auth { event AddMarket(address indexed newMarket); event FlywheelRewardsUpdate(address indexed oldFlywheelRewards, address indexed newFlywheelRewards); event AccrueRewards(ERC20 indexed cToken, address indexed owner, uint rewardsDelta, uint rewardsIndex); event ClaimRewards(address indexed owner, uint256 amount); struct RewardsState { /// @notice The market's last updated index uint224 index; /// @notice The timestamp the index was last updated at uint32 lastUpdatedTimestamp; } /// @notice The token to reward ERC20 public immutable rewardToken; /// @notice the rewards contract for managing streams IFlywheelRewards public flywheelRewards; /// @notice optional booster module for calculating virtual balances on markets IFlywheelBooster public immutable flywheelBooster; /// @notice the fixed point factor of flywheel uint224 public constant ONE = 1e18; /// @notice The market index and last updated per market mapping(ERC20 => RewardsState) public marketState; /// @notice user index per market mapping(ERC20 => mapping(address => uint224)) public userIndex; /// @notice The accrued but not yet transferred rewards for each user mapping(address => uint256) public rewardsAccrued; /// @dev immutable flag for short-circuiting boosting logic bool internal immutable applyBoosting; constructor( ERC20 _rewardToken, IFlywheelRewards _flywheelRewards, IFlywheelBooster _flywheelBooster, address _owner, Authority _authority ) Auth(_owner, _authority) { rewardToken = _rewardToken; flywheelRewards = _flywheelRewards; flywheelBooster = _flywheelBooster; applyBoosting = address(_flywheelBooster) != address(0); } /// @notice initialize a new market function addMarketForRewards(ERC20 market) external requiresAuth { marketState[market] = RewardsState({ index: ONE, lastUpdatedTimestamp: uint32(block.timestamp) }); emit AddMarket(address(market)); } /// @notice swap out the flywheel rewards contract function setFlywheelRewards(IFlywheelRewards newFlywheelRewards) external requiresAuth { address oldFlywheelRewards = address(flywheelRewards); flywheelRewards = newFlywheelRewards; emit FlywheelRewardsUpdate(oldFlywheelRewards, address(newFlywheelRewards)); } /// @notice accrue rewards for a single user on a market function accrue(ERC20 market, address user) public returns (uint256) { RewardsState memory state = marketState[market]; if (state.index == 0) return 0; state = accrueMarket(market, state); return accrueUser(market, user, state); } /// @notice accrue rewards for two users on a market function accrue(ERC20 market, address user, address secondUser) public returns (uint256, uint256) { RewardsState memory state = marketState[market]; if (state.index == 0) return (0, 0); state = accrueMarket(market, state); return (accrueUser(market, user, state), accrueUser(market, secondUser, state)); } /// @notice claim rewards for a given owner function claim(address owner) external { uint256 accrued = rewardsAccrued[owner]; if (accrued != 0) { rewardsAccrued[owner] = 0; rewardToken.transfer(owner, accrued); emit ClaimRewards(owner, accrued); } } /// @notice accumulate global rewards on a market function accrueMarket(ERC20 market, RewardsState memory state) private returns(RewardsState memory rewardsState) { // calculate accrued rewards through module uint256 marketRewardsAccrued = flywheelRewards.getAccruedRewards(market, state.lastUpdatedTimestamp); rewardsState = state; if (marketRewardsAccrued > 0) { // use the booster or token supply to calculate reward index denominator uint256 supplyTokens = applyBoosting ? flywheelBooster.boostedTotalSupply(market): market.totalSupply(); // accumulate rewards per token onto the index, multiplied by fixed-point factor rewardsState = RewardsState({ index: state.index + uint224(marketRewardsAccrued * ONE / supplyTokens), lastUpdatedTimestamp: uint32(block.timestamp) }); marketState[market] = rewardsState; } } /// @notice accumulate rewards on a market for a specific user function accrueUser(ERC20 market, address user, RewardsState memory state) private returns (uint256) { // load indices uint224 supplyIndex = state.index; uint224 supplierIndex = userIndex[market][user]; // sync user index to global userIndex[market][user] = supplyIndex; // if user hasn't yet accrued rewards, grant them interest from the market beginning if they have a balance // zero balances will have no effect other than syncing to global index if (supplierIndex == 0) { supplierIndex = ONE; } uint224 deltaIndex = supplyIndex - supplierIndex; // use the booster or token balance to calculate reward balance multiplier uint256 supplierTokens = applyBoosting ? flywheelBooster.boostedBalanceOf(market, user) : market.balanceOf(user); // accumulate rewards by multiplying user tokens by rewardsPerToken index and adding on unclaimed uint256 supplierDelta = supplierTokens * deltaIndex / ONE; uint256 supplierAccrued = rewardsAccrued[user] + supplierDelta; rewardsAccrued[user] = supplierAccrued; emit AccrueRewards(market, user, supplierDelta, supplyIndex); return supplierAccrued; } } contract FuseFlywheelCore is FlywheelCore { bool public constant isRewardsDistributor = true; constructor( ERC20 _rewardToken, IFlywheelRewards _flywheelRewards, IFlywheelBooster _flywheelBooster, address _owner, Authority _authority ) FlywheelCore(_rewardToken, _flywheelRewards, _flywheelBooster, _owner, _authority) {} function flywheelPreSupplierAction(ERC20 market, address supplier) external { accrue(market, supplier); } function flywheelPreBorrowerAction(ERC20 market, address borrower) external {} function flywheelPreTransferAction(ERC20 market, address src, address dst) external { accrue(market, src, dst); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IFlywheelRewards","name":"_flywheelRewards","type":"address"},{"internalType":"contract IFlywheelBooster","name":"_flywheelBooster","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract Authority","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ERC20","name":"cToken","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsIndex","type":"uint256"}],"name":"AccrueRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarket","type":"address"}],"name":"AddMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldFlywheelRewards","type":"address"},{"indexed":true,"internalType":"address","name":"newFlywheelRewards","type":"address"}],"name":"FlywheelRewardsUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"inputs":[],"name":"ONE","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"accrue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"secondUser","type":"address"}],"name":"accrue","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"}],"name":"addMarketForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flywheelBooster","outputs":[{"internalType":"contract IFlywheelBooster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"flywheelPreBorrowerAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"supplier","type":"address"}],"name":"flywheelPreSupplierAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"flywheelPreTransferAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flywheelRewards","outputs":[{"internalType":"contract IFlywheelRewards","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"name":"marketState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"lastUpdatedTimestamp","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IFlywheelRewards","name":"newFlywheelRewards","type":"address"}],"name":"setFlywheelRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userIndex","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040516200120d3803806200120d833981016040819052620000349162000129565b600080546001600160a01b03199081166001600160a01b0385811691821784556001805490931690851617909155604051879287928792879287928492849233917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506001600160a01b03928316608052600280546001600160a01b031916928416929092179091551660a0819052151560c05250620001a99350505050565b6001600160a01b03811681146200012657600080fd5b50565b600080600080600060a086880312156200014257600080fd5b85516200014f8162000110565b6020870151909550620001628162000110565b6040870151909450620001758162000110565b6060870151909350620001888162000110565b60808701519092506200019b8162000110565b809150509295509295909350565b60805160a05160c051611018620001f5600039600081816109d30152610bdf0152600081816102b001528181610a7c0152610c98015260008181610384015261049401526110186000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ab5497d7116100ad578063c2ee3a0811610071578063c2ee3a0814610323578063cc6bc10114610332578063e6e162e81461035a578063f046ee5c1461036c578063f7c618c11461037f57600080fd5b8063ab5497d7146102ab578063abc6d72d146102d2578063b006340d146102ea578063b9be44ac146102fd578063bf7e214f1461031057600080fd5b80637a9e5e4b116100f45780637a9e5e4b146101d05780637fb5ad38146101e35780638da5cb5b146102115780638fb009131461023c578063a7a9a62c1461024f57600080fd5b8063116139d31461013157806313af4035146101825780631c9161e0146101975780631e83409a146101aa5780634e081c95146101bd575b600080fd5b61016561013f366004610dea565b60046020908152600092835260408084209091529082529020546001600160e01b031681565b6040516001600160e01b0390911681526020015b60405180910390f35b610195610190366004610e23565b6103a6565b005b6101956101a5366004610dea565b61042c565b6101956101b8366004610e23565b61043b565b6101956101cb366004610e47565b61054b565b6101956101de366004610e23565b61055d565b6102036101f1366004610e23565b60056020526000908152604090205481565b604051908152602001610179565b600054610224906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b61019561024a366004610e23565b610647565b61028761025d366004610e23565b6003602052600090815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b604080516001600160e01b03909316835263ffffffff909116602083015201610179565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6102da600181565b6040519015158152602001610179565b6101956102f8366004610e23565b6106cb565b61020361030b366004610dea565b610781565b600154610224906001600160a01b031681565b610165670de0b6b3a764000081565b610345610340366004610e47565b6107f7565b60408051928352602083019190915201610179565b610195610368366004610dea565b5050565b600254610224906001600160a01b031681565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6103bc336000356001600160e01b031916610880565b6103e15760405162461bcd60e51b81526004016103d890610e92565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6104368282610781565b505050565b6001600160a01b0381166000908152600560205260409020548015610368576001600160a01b03828116600081815260056020526040808220919091555163a9059cbb60e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156104df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105039190610eb8565b50816001600160a01b03167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc678260405161053f91815260200190565b60405180910390a25050565b6105568383836107f7565b5050505050565b6000546001600160a01b03163314806105f2575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906105b190339030906001600160e01b03196000351690600401610eda565b602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190610eb8565b6105fb57600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b61065d336000356001600160e01b031916610880565b6106795760405162461bcd60e51b81526004016103d890610e92565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fc88394d92ca818942c423842b933c023fc08dbdb030fcaf02ac41b89e2d1d9f690600090a35050565b6106e1336000356001600160e01b031916610880565b6106fd5760405162461bcd60e51b81526004016103d890610e92565b604080518082018252670de0b6b3a7640000815263ffffffff42811660208084019182526001600160a01b0386166000818152600390925285822094519251909316600160e01b026001600160e01b03929092169190911790925591517fc3dfb88ee5301cecf05761fb2728064e5b641524346ae69b9ba80394631bf11f9190a250565b6001600160a01b03821660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff1692820192909252906107d65760009150506107f1565b6107e0848261092a565b90506107ed848483610b74565b9150505b92915050565b6001600160a01b03831660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff16928201929092528291610850576000809250925050610878565b61085a868261092a565b9050610867868683610b74565b610872878684610b74565b92509250505b935093915050565b6001546000906001600160a01b0316801580159061090a575060405163b700961360e01b81526001600160a01b0382169063b7009613906108c990879030908890600401610eda565b602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190610eb8565b806107ed57506000546001600160a01b0385811691161491505092915050565b6040805180820190915260008082526020820152600254602083015160405163b334db7b60e01b81526001600160a01b03868116600483015263ffffffff9092166024820152600092919091169063b334db7b906044016020604051808303816000875af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c49190610f07565b83925090508015610b6d5760007f0000000000000000000000000000000000000000000000000000000000000000610a5d57846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190610f07565b610ae7565b604051631e1932fb60e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690631e1932fb90602401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae79190610f07565b604080518082019091529091508082610b08670de0b6b3a764000086610f36565b610b129190610f55565b8651610b1e9190610f77565b6001600160e01b03908116825263ffffffff4281166020938401526001600160a01b03891660009081526003845260409020845193850151909116600160e01b02929091169190911790559250505b5092915050565b80516001600160a01b038481166000908152600460209081526040808320938716835292905290812080546001600160e01b038085166001600160e01b03198316179092559192911680610bcd5750670de0b6b3a76400005b6000610bd98284610fa2565b905060007f0000000000000000000000000000000000000000000000000000000000000000610c71576040516370a0823160e01b81526001600160a01b0388811660048301528916906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190610f07565b610d03565b604051631a50ef2f60e01b81526001600160a01b03898116600483015288811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a50ef2f90604401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190610f07565b90506000670de0b6b3a7640000610d236001600160e01b03851684610f36565b610d2d9190610f55565b6001600160a01b03891660009081526005602052604081205491925090610d55908390610fca565b6001600160a01b03808b16600081815260056020526040908190208490555192935091908c16907f35a61f3c719e8f59f636c336e563ba74f667fadafcc80d709231ca8bb59eecce90610dbd9086908b909182526001600160e01b0316602082015260400190565b60405180910390a39998505050505050505050565b6001600160a01b0381168114610de757600080fd5b50565b60008060408385031215610dfd57600080fd5b8235610e0881610dd2565b91506020830135610e1881610dd2565b809150509250929050565b600060208284031215610e3557600080fd5b8135610e4081610dd2565b9392505050565b600080600060608486031215610e5c57600080fd5b8335610e6781610dd2565b92506020840135610e7781610dd2565b91506040840135610e8781610dd2565b809150509250925092565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600060208284031215610eca57600080fd5b81518015158114610e4057600080fd5b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610f1957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610f5057610f50610f20565b500290565b600082610f7257634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160e01b03828116848216808303821115610f9957610f99610f20565b01949350505050565b60006001600160e01b0383811690831681811015610fc257610fc2610f20565b039392505050565b60008219821115610fdd57610fdd610f20565b50019056fea2646970667358221220484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb3464736f6c634300080a0033000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ab5497d7116100ad578063c2ee3a0811610071578063c2ee3a0814610323578063cc6bc10114610332578063e6e162e81461035a578063f046ee5c1461036c578063f7c618c11461037f57600080fd5b8063ab5497d7146102ab578063abc6d72d146102d2578063b006340d146102ea578063b9be44ac146102fd578063bf7e214f1461031057600080fd5b80637a9e5e4b116100f45780637a9e5e4b146101d05780637fb5ad38146101e35780638da5cb5b146102115780638fb009131461023c578063a7a9a62c1461024f57600080fd5b8063116139d31461013157806313af4035146101825780631c9161e0146101975780631e83409a146101aa5780634e081c95146101bd575b600080fd5b61016561013f366004610dea565b60046020908152600092835260408084209091529082529020546001600160e01b031681565b6040516001600160e01b0390911681526020015b60405180910390f35b610195610190366004610e23565b6103a6565b005b6101956101a5366004610dea565b61042c565b6101956101b8366004610e23565b61043b565b6101956101cb366004610e47565b61054b565b6101956101de366004610e23565b61055d565b6102036101f1366004610e23565b60056020526000908152604090205481565b604051908152602001610179565b600054610224906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b61019561024a366004610e23565b610647565b61028761025d366004610e23565b6003602052600090815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b604080516001600160e01b03909316835263ffffffff909116602083015201610179565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6102da600181565b6040519015158152602001610179565b6101956102f8366004610e23565b6106cb565b61020361030b366004610dea565b610781565b600154610224906001600160a01b031681565b610165670de0b6b3a764000081565b610345610340366004610e47565b6107f7565b60408051928352602083019190915201610179565b610195610368366004610dea565b5050565b600254610224906001600160a01b031681565b6102247f000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5281565b6103bc336000356001600160e01b031916610880565b6103e15760405162461bcd60e51b81526004016103d890610e92565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6104368282610781565b505050565b6001600160a01b0381166000908152600560205260409020548015610368576001600160a01b03828116600081815260056020526040808220919091555163a9059cbb60e01b81526004810191909152602481018390527f000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd529091169063a9059cbb906044016020604051808303816000875af11580156104df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105039190610eb8565b50816001600160a01b03167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc678260405161053f91815260200190565b60405180910390a25050565b6105568383836107f7565b5050505050565b6000546001600160a01b03163314806105f2575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906105b190339030906001600160e01b03196000351690600401610eda565b602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190610eb8565b6105fb57600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b61065d336000356001600160e01b031916610880565b6106795760405162461bcd60e51b81526004016103d890610e92565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fc88394d92ca818942c423842b933c023fc08dbdb030fcaf02ac41b89e2d1d9f690600090a35050565b6106e1336000356001600160e01b031916610880565b6106fd5760405162461bcd60e51b81526004016103d890610e92565b604080518082018252670de0b6b3a7640000815263ffffffff42811660208084019182526001600160a01b0386166000818152600390925285822094519251909316600160e01b026001600160e01b03929092169190911790925591517fc3dfb88ee5301cecf05761fb2728064e5b641524346ae69b9ba80394631bf11f9190a250565b6001600160a01b03821660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff1692820192909252906107d65760009150506107f1565b6107e0848261092a565b90506107ed848483610b74565b9150505b92915050565b6001600160a01b03831660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff16928201929092528291610850576000809250925050610878565b61085a868261092a565b9050610867868683610b74565b610872878684610b74565b92509250505b935093915050565b6001546000906001600160a01b0316801580159061090a575060405163b700961360e01b81526001600160a01b0382169063b7009613906108c990879030908890600401610eda565b602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190610eb8565b806107ed57506000546001600160a01b0385811691161491505092915050565b6040805180820190915260008082526020820152600254602083015160405163b334db7b60e01b81526001600160a01b03868116600483015263ffffffff9092166024820152600092919091169063b334db7b906044016020604051808303816000875af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c49190610f07565b83925090508015610b6d5760007f0000000000000000000000000000000000000000000000000000000000000000610a5d57846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190610f07565b610ae7565b604051631e1932fb60e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690631e1932fb90602401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae79190610f07565b604080518082019091529091508082610b08670de0b6b3a764000086610f36565b610b129190610f55565b8651610b1e9190610f77565b6001600160e01b03908116825263ffffffff4281166020938401526001600160a01b03891660009081526003845260409020845193850151909116600160e01b02929091169190911790559250505b5092915050565b80516001600160a01b038481166000908152600460209081526040808320938716835292905290812080546001600160e01b038085166001600160e01b03198316179092559192911680610bcd5750670de0b6b3a76400005b6000610bd98284610fa2565b905060007f0000000000000000000000000000000000000000000000000000000000000000610c71576040516370a0823160e01b81526001600160a01b0388811660048301528916906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190610f07565b610d03565b604051631a50ef2f60e01b81526001600160a01b03898116600483015288811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a50ef2f90604401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190610f07565b90506000670de0b6b3a7640000610d236001600160e01b03851684610f36565b610d2d9190610f55565b6001600160a01b03891660009081526005602052604081205491925090610d55908390610fca565b6001600160a01b03808b16600081815260056020526040908190208490555192935091908c16907f35a61f3c719e8f59f636c336e563ba74f667fadafcc80d709231ca8bb59eecce90610dbd9086908b909182526001600160e01b0316602082015260400190565b60405180910390a39998505050505050505050565b6001600160a01b0381168114610de757600080fd5b50565b60008060408385031215610dfd57600080fd5b8235610e0881610dd2565b91506020830135610e1881610dd2565b809150509250929050565b600060208284031215610e3557600080fd5b8135610e4081610dd2565b9392505050565b600080600060608486031215610e5c57600080fd5b8335610e6781610dd2565b92506020840135610e7781610dd2565b91506040840135610e8781610dd2565b809150509250925092565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600060208284031215610eca57600080fd5b81518015158114610e4057600080fd5b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610f1957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610f5057610f50610f20565b500290565b600082610f7257634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160e01b03828116848216808303821115610f9957610f99610f20565b01949350505050565b60006001600160e01b0383811690831681811015610fc257610fc2610f20565b039392505050565b60008219821115610fdd57610fdd610f20565b50019056fea2646970667358221220484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb3464736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xD533a949740bb3306d119CC777fa900bA034cd52
Arg [1] : _flywheelRewards (address): 0x0000000000000000000000000000000000000000
Arg [2] : _flywheelBooster (address): 0x0000000000000000000000000000000000000000
Arg [3] : _owner (address): 0xB290f2F3FAd4E540D0550985951Cdad2711ac34A
Arg [4] : _authority (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
17142:740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12268:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12268:62:0;;;;;;-1:-1:-1;;;;;741:32:1;;;723:51;;711:2;696:18;12268:62:0;;;;;;;;8825:151;;;;;;:::i;:::-;;:::i;:::-;;17537:121;;;;;;:::i;:::-;;:::i;14492:283::-;;;;;;:::i;:::-;;:::i;17752:127::-;;;;;;:::i;:::-;;:::i;8375:442::-;;;;;;:::i;:::-;;:::i;12414:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2034:25:1;;;2022:2;2007:18;12414:49:0;1888:177:1;7404:20:0;;;;;-1:-1:-1;;;;;7404:20:0;;;;;;-1:-1:-1;;;;;2234:32:1;;;2216:51;;2204:2;2189:18;7404:20:0;2070:203:1;13378:296:0;;;;;;:::i;:::-;;:::i;12171:49::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12171:49:0;;;-1:-1:-1;;;12171:49:0;;;;;;;;;;-1:-1:-1;;;;;3023:32:1;;;3005:51;;3104:10;3092:23;;;3087:2;3072:18;;3065:51;2978:18;12171:49:0;2833:289:1;11956:49:0;;;;;17193:48;;17237:4;17193:48;;;;;3524:14:1;;3517:22;3499:41;;3487:2;3472:18;17193:48:0;3359:187:1;13054:260:0;;;;;;:::i;:::-;;:::i;13744:275::-;;;;;;:::i;:::-;;:::i;7433:26::-;;;;;-1:-1:-1;;;;;7433:26:0;;;12066:34;;12096:4;12066:34;;14085:350;;;;;;:::i;:::-;;:::i;:::-;;;;3950:25:1;;;4006:2;3991:18;;3984:34;;;;3923:18;14085:350:0;3776:248:1;17666:78:0;;;;;;:::i;:::-;14531:244;14492:283;;11823:39;;;;;-1:-1:-1;;;;;11823:39:0;;;11721:34;;;;;8825:151;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;;;;;;;;;8900:5:::1;:16:::0;;-1:-1:-1;;;;;;8900:16:0::1;-1:-1:-1::0;;;;;8900:16:0;::::1;::::0;;::::1;::::0;;8934:34:::1;::::0;8900:16;;8947:10:::1;::::0;8934:34:::1;::::0;8900:5;8934:34:::1;8825:151:::0;:::o;17537:121::-;17624:24;17631:6;17639:8;17624:6;:24::i;:::-;;17537:121;;:::o;14492:283::-;-1:-1:-1;;;;;14560:21:0;;14542:15;14560:21;;;:14;:21;;;;;;14598:12;;14594:174;;-1:-1:-1;;;;;14627:21:0;;;14651:1;14627:21;;;:14;:21;;;;;;:25;;;;14669:36;-1:-1:-1;;;14669:36:0;;;;;4997:51:1;;;;5064:18;;;5057:34;;;14669:11:0;:20;;;;;;4970:18:1;;14669:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14741:5;-1:-1:-1;;;;;14728:28:0;;14748:7;14728:28;;;;2034:25:1;;2022:2;2007:18;;1888:177;14728:28:0;;;;;;;;14531:244;14492:283;:::o;17752:127::-;17847:24;17854:6;17862:3;17867;17847:6;:24::i;:::-;;;17752:127;;;:::o;8375:442::-;8649:5;;-1:-1:-1;;;;;8649:5:0;8635:10;:19;;:76;;-1:-1:-1;8658:9:0;;:53;;-1:-1:-1;;;8658:53:0;;-1:-1:-1;;;;;8658:9:0;;;;:17;;:53;;8676:10;;8696:4;;-1:-1:-1;;;;;;8658:9:0;8703:7;;;8658:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8627:85;;;;;;8725:9;:24;;-1:-1:-1;;;;;;8725:24:0;-1:-1:-1;;;;;8725:24:0;;;;;;;;8767:42;;8784:10;;8767:42;;-1:-1:-1;;8767:42:0;8375:442;:::o;13378:296::-;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;13513:15:::1;::::0;;-1:-1:-1;;;;;13542:36:0;;::::1;-1:-1:-1::0;;;;;;13542:36:0;::::1;::::0;::::1;::::0;;;13596:70:::1;::::0;13513:15;::::1;::::0;13542:36;13513:15;;13596:70:::1;::::0;13476:26:::1;::::0;13596:70:::1;13465:209;13378:296:::0;:::o;13054:260::-;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;13152:110:::1;::::0;;;;::::1;::::0;;12096:4:::1;13152:110:::0;;::::1;13234:15;13152:110:::0;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;13130:19:0;::::1;-1:-1:-1::0;13130:19:0;;;:11:::1;:19:::0;;;;;;:132;;;;;;::::1;-1:-1:-1::0;;;13130:132:0::1;-1:-1:-1::0;;;;;13130:132:0;;;::::1;::::0;;;::::1;::::0;;;13280:26;;::::1;::::0;-1:-1:-1;13280:26:0::1;13054:260:::0;:::o;13744:275::-;-1:-1:-1;;;;;13852:19:0;;13804:7;13852:19;;;:11;:19;;;;;;;;13824:47;;;;;;;;;-1:-1:-1;;;;;13824:47:0;;;;;-1:-1:-1;;;13824:47:0;;;;;;;;;;;;;13884:30;;13913:1;13906:8;;;;;13884:30;13935:27;13948:6;13956:5;13935:12;:27::i;:::-;13927:35;;13980:31;13991:6;13999:4;14005:5;13980:10;:31::i;:::-;13973:38;;;13744:275;;;;;:::o;14085:350::-;-1:-1:-1;;;;;14222:19:0;;14165:7;14222:19;;;:11;:19;;;;;;;;14194:47;;;;;;;;;-1:-1:-1;;;;;14194:47:0;;;;;-1:-1:-1;;;14194:47:0;;;;;;;;;;;;14165:7;;14254:35;;14284:1;14287;14276:13;;;;;;;14254:35;14310:27;14323:6;14331:5;14310:12;:27::i;:::-;14302:35;;14356:31;14367:6;14375:4;14381:5;14356:10;:31::i;:::-;14389:37;14400:6;14408:10;14420:5;14389:10;:37::i;:::-;14348:79;;;;;14085:350;;;;;;;:::o;7821:546::-;7942:9;;7908:4;;-1:-1:-1;;;;;7942:9:0;8264:27;;;;;:77;;-1:-1:-1;8295:46:0;;-1:-1:-1;;;8295:46:0;;-1:-1:-1;;;;;8295:12:0;;;;;:46;;8308:4;;8322;;8329:11;;8295:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8263:96;;;-1:-1:-1;8354:5:0;;-1:-1:-1;;;;;8346:13:0;;;8354:5;;8346:13;8256:103;;;7821:546;;;;:::o;14838:932::-;-1:-1:-1;;;;;;;;;;;;;;;;;15046:15:0;;15088:26;;;;15046:69;;-1:-1:-1;;;15046:69:0;;-1:-1:-1;;;;;5992:32:1;;;15046:69:0;;;5974:51:1;6073:10;6061:23;;;6041:18;;;6034:51;15015:28:0;;15046:15;;;;;:33;;5947:18:1;;15046:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15143:5;;-1:-1:-1;15015:100:0;-1:-1:-1;15163:24:0;;15159:604;;15290:20;15313:13;:80;;15373:6;-1:-1:-1;;;;;15373:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15313:80;;;15329:42;;-1:-1:-1;;;15329:42:0;;-1:-1:-1;;;;;2234:32:1;;;15329:42:0;;;2216:51:1;15329:15:0;:34;;;;2189:18:1;;15329:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15519:183;;;;;;;;;15290:103;;-1:-1:-1;15519:183:0;15290:103;15580:26;12096:4;15580:20;:26;:::i;:::-;:41;;;;:::i;:::-;15558:11;;:64;;;;:::i;:::-;-1:-1:-1;;;;;15519:183:0;;;;;;15670:15;15519:183;;;;;;;-1:-1:-1;;;;;15717:19:0;;-1:-1:-1;15717:19:0;;;:11;:19;;;;;:34;;;;;;;;;-1:-1:-1;;;15717:34:0;;;;;;;;;;;15504:198;-1:-1:-1;;15159:604:0;14951:819;14838:932;;;;:::o;15846:1289::-;16005:11;;-1:-1:-1;;;;;16051:17:0;;;15938:7;16051:17;;;:9;:17;;;;;;;;:23;;;;;;;;;;;;;-1:-1:-1;;;;;16125:37:0;;;-1:-1:-1;;;;;;16125:37:0;;;;;;15938:7;;16005:11;16051:23;;16373:70;;-1:-1:-1;12096:4:0;16373:70;16455:18;16476:27;16490:13;16476:11;:27;:::i;:::-;16455:48;;16598:22;16623:13;:87;;16688:22;;-1:-1:-1;;;16688:22:0;;-1:-1:-1;;;;;2234:32:1;;;16688:22:0;;;2216:51:1;16688:16:0;;;;;2189:18:1;;16688:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16623:87;;;16639:46;;-1:-1:-1;;;16639:46:0;;-1:-1:-1;;;;;7534:15:1;;;16639:46:0;;;7516:34:1;7586:15;;;7566:18;;;7559:43;16639:15:0;:32;;;;7451:18:1;;16639:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16598:112;-1:-1:-1;16830:21:0;12096:4;16854:27;-1:-1:-1;;;;;16854:27:0;;16598:112;16854:27;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;16924:20:0;;16898:23;16924:20;;;:14;:20;;;;;;16830:57;;-1:-1:-1;16898:23:0;16924:36;;16830:57;;16924:36;:::i;:::-;-1:-1:-1;;;;;16981:20:0;;;;;;;:14;:20;;;;;;;:38;;;17037:55;16898:62;;-1:-1:-1;16981:20:0;17037:55;;;;;;;;17065:13;;17080:11;;7920:25:1;;;-1:-1:-1;;;;;7981:32:1;7976:2;7961:18;;7954:60;7908:2;7893:18;;7746:274;17037:55:0;;;;;;;;17112:15;15846:1289;-1:-1:-1;;;;;;;;;15846:1289:0:o;14:138:1:-;-1:-1:-1;;;;;96:31:1;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:415::-;238:6;246;299:2;287:9;278:7;274:23;270:32;267:52;;;315:1;312;305:12;267:52;354:9;341:23;373:38;405:5;373:38;:::i;:::-;430:5;-1:-1:-1;487:2:1;472:18;;459:32;500:40;459:32;500:40;:::i;:::-;559:7;549:17;;;157:415;;;;;:::o;785:254::-;844:6;897:2;885:9;876:7;872:23;868:32;865:52;;;913:1;910;903:12;865:52;952:9;939:23;971:38;1003:5;971:38;:::i;:::-;1028:5;785:254;-1:-1:-1;;;785:254:1:o;1044:563::-;1134:6;1142;1150;1203:2;1191:9;1182:7;1178:23;1174:32;1171:52;;;1219:1;1216;1209:12;1171:52;1258:9;1245:23;1277:38;1309:5;1277:38;:::i;:::-;1334:5;-1:-1:-1;1391:2:1;1376:18;;1363:32;1404:40;1363:32;1404:40;:::i;:::-;1463:7;-1:-1:-1;1522:2:1;1507:18;;1494:32;1535:40;1494:32;1535:40;:::i;:::-;1594:7;1584:17;;;1044:563;;;;;:::o;4482:336::-;4684:2;4666:21;;;4723:2;4703:18;;;4696:30;-1:-1:-1;;;4757:2:1;4742:18;;4735:42;4809:2;4794:18;;4482:336::o;5102:277::-;5169:6;5222:2;5210:9;5201:7;5197:23;5193:32;5190:52;;;5238:1;5235;5228:12;5190:52;5270:9;5264:16;5323:5;5316:13;5309:21;5302:5;5299:32;5289:60;;5345:1;5342;5335:12;5384:400;-1:-1:-1;;;;;5640:15:1;;;5622:34;;5692:15;;;;5687:2;5672:18;;5665:43;-1:-1:-1;;;;;;5744:33:1;;;5739:2;5724:18;;5717:61;5572:2;5557:18;;5384:400::o;6096:184::-;6166:6;6219:2;6207:9;6198:7;6194:23;6190:32;6187:52;;;6235:1;6232;6225:12;6187:52;-1:-1:-1;6258:16:1;;6096:184;-1:-1:-1;6096:184:1:o;6285:127::-;6346:10;6341:3;6337:20;6334:1;6327:31;6377:4;6374:1;6367:15;6401:4;6398:1;6391:15;6417:168;6457:7;6523:1;6519;6515:6;6511:14;6508:1;6505:21;6500:1;6493:9;6486:17;6482:45;6479:71;;;6530:18;;:::i;:::-;-1:-1:-1;6570:9:1;;6417:168::o;6590:217::-;6630:1;6656;6646:132;;6700:10;6695:3;6691:20;6688:1;6681:31;6735:4;6732:1;6725:15;6763:4;6760:1;6753:15;6646:132;-1:-1:-1;6792:9:1;;6590:217::o;6812:238::-;6852:3;-1:-1:-1;;;;;6919:10:1;;;6949;;;6979:12;;;6971:21;;6968:47;;;6995:18;;:::i;:::-;7031:13;;6812:238;-1:-1:-1;;;;6812:238:1:o;7055:231::-;7095:4;-1:-1:-1;;;;;7193:10:1;;;;7163;;7215:12;;;7212:38;;;7230:18;;:::i;:::-;7267:13;;7055:231;-1:-1:-1;;;7055:231:1:o;7613:128::-;7653:3;7684:1;7680:6;7677:1;7674:13;7671:39;;;7690:18;;:::i;:::-;-1:-1:-1;7726:9:1;;7613:128::o
Swarm Source
ipfs://484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb34
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.