Overview
ETH Balance
ETH Value
$0.00Latest 25 from a total of 4,460 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Swap | 28222669 | 2 days ago | IN | 0 ETH | 0.00000403 | ||||
| Swap | 28199011 | 3 days ago | IN | 0 ETH | 0.00000383 | ||||
| Swap | 27998229 | 8 days ago | IN | 0 ETH | 0.00000339 | ||||
| Swap | 27958347 | 8 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27915433 | 9 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27867114 | 11 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27781014 | 13 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27694942 | 15 days ago | IN | 0 ETH | 0.00000271 | ||||
| Swap | 27651797 | 16 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27608691 | 17 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27565575 | 18 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27531519 | 18 days ago | IN | 0 ETH | 0.00000393 | ||||
| Swap | 27519278 | 19 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27476371 | 20 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27396416 | 22 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27319669 | 24 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27312258 | 24 days ago | IN | 0 ETH | 0.00000339 | ||||
| Swap | 27247783 | 26 days ago | IN | 0 ETH | 0.00000271 | ||||
| Swap | 27175692 | 28 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 27141554 | 29 days ago | IN | 0 ETH | 0.00000285 | ||||
| Swap | 27104711 | 30 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27070981 | 31 days ago | IN | 0 ETH | 0.00000323 | ||||
| Swap | 27035719 | 32 days ago | IN | 0 ETH | 0.00000271 | ||||
| Swap | 27000939 | 33 days ago | IN | 0 ETH | 0.00000322 | ||||
| Swap | 26963937 | 34 days ago | IN | 0 ETH | 0.00000322 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28318735 | 5 hrs ago | 0 ETH | ||||
| 28318735 | 5 hrs ago | 0 ETH | ||||
| 28318735 | 5 hrs ago | 0 ETH | ||||
| 28318726 | 5 hrs ago | 0 ETH | ||||
| 28318726 | 5 hrs ago | 0 ETH | ||||
| 28318726 | 5 hrs ago | 0 ETH | ||||
| 28318718 | 5 hrs ago | 0 ETH | ||||
| 28318718 | 5 hrs ago | 0 ETH | ||||
| 28318718 | 5 hrs ago | 0 ETH | ||||
| 28318708 | 5 hrs ago | 0 ETH | ||||
| 28318708 | 5 hrs ago | 0 ETH | ||||
| 28318708 | 5 hrs ago | 0 ETH | ||||
| 28318700 | 5 hrs ago | 0 ETH | ||||
| 28318700 | 5 hrs ago | 0 ETH | ||||
| 28318700 | 5 hrs ago | 0 ETH | ||||
| 28287464 | 25 hrs ago | 0 ETH | ||||
| 28287464 | 25 hrs ago | 0 ETH | ||||
| 28287464 | 25 hrs ago | 0 ETH | ||||
| 28281163 | 29 hrs ago | 0 ETH | ||||
| 28281163 | 29 hrs ago | 0 ETH | ||||
| 28281163 | 29 hrs ago | 0 ETH | ||||
| 28281154 | 29 hrs ago | 0 ETH | ||||
| 28281154 | 29 hrs ago | 0 ETH | ||||
| 28281154 | 29 hrs ago | 0 ETH | ||||
| 28281145 | 29 hrs ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Farm
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-3.0-only
import "interface/IAgency.sol";
import "interface/IERC20Mintable.sol";
import "interface/IGauge.sol";
import "./lib/ABDKMath64x64.sol";
import "./lib/TransferHelper.sol";
/// @title Contract for Dyson user to earn extra rewards.
/// A Pair and a Gauge contract together form a pool.
/// This contract will record reward related info about each pools.
/// Each Pair will trigger `Farm.grantSP` upon user deposit,
/// it will add to user's SP balance.
/// User can call `Farm.swap` to swap SP token to gov token, i.e., DYSON token.
contract Farm {
using ABDKMath64x64 for *;
using TransferHelper for address;
int128 private constant MAX_AP_RATIO = 2**64;
uint private constant BONUS_BASE_UNIT = 1e18;
/// @notice Cooldown before user can swap his SP to gov token
uint private constant CD = 6000;
IAgency public immutable agency;
/// @notice Governance token, i.e., DYSON token
IERC20Mintable public immutable gov;
address public owner;
/// @member weight A parameter in the exchange formula when converting localSP to globalSP or converting globalSP to DYSON.
/// The higher the weight, the lower the reward
/// @member rewardRate Pool reward rate. The higher the rate, the faster the reserve grows
/// @member lastUpdateTime Last time the pool reserve is updated
/// @member lastReserve The pool reserve amount when last updated
/// @member gauge Gauge contract of the pool which records the pool's weight and rewardRate
struct Pool {
uint weight;
uint rewardRate;
uint lastUpdateTime;
uint lastReserve;
address gauge;
}
/// @notice The special pool for gov token
Pool public globalPool;
/// Param poolId Id of the pool. Note that pool id is the address of Pair contract
mapping(address => Pool) public pools;
/// @notice User's SP balance
mapping(address => uint) public balanceOf;
/// @notice Timestamp when user's cooldown ends
mapping(address => uint) public cooldown;
event TransferOwnership(address newOwner);
event RateUpdated(address indexed poolId, uint rewardRate, uint weight);
event GrantSP(address indexed user, address indexed poolId, uint amountIn, uint amountOut);
event Swap(address indexed user, address indexed parent, uint amountIn, uint amountOut);
constructor(address _owner, address _agency, address _gov) {
require(_owner != address(0), "owner cannot be zero");
owner = _owner;
agency = IAgency(_agency);
gov = IERC20Mintable(_gov);
}
modifier onlyOwner() {
require(msg.sender == owner, "forbidden");
_;
}
function transferOwnership(address _owner) external onlyOwner {
require(_owner != address(0), "owner cannot be zero");
owner = _owner;
emit TransferOwnership(_owner);
}
/// @notice rescue token stucked in this contract
/// @param tokenAddress Address of token to be rescued
/// @param to Address that will receive token
/// @param amount Amount of token to be rescued
function rescueERC20(address tokenAddress, address to, uint256 amount) onlyOwner external {
tokenAddress.safeTransfer(to, amount);
}
/// @dev Set the Gauge contract for given pool
/// @param poolId Pool Id, i.e., address of the Pair contract
/// @param gauge address of the Gauge contract
function setPool(address poolId, address gauge) external onlyOwner {
Pool storage pool = pools[poolId];
pool.gauge = gauge;
pool.lastReserve = getCurrentPoolReserve(poolId);
pool.lastUpdateTime = block.timestamp;
pool.rewardRate = IGauge(gauge).nextRewardRate();
pool.weight = IGauge(gauge).weight();
emit RateUpdated(poolId, pool.rewardRate, pool.weight);
}
/// @dev Update given pool's `weight` and `rewardRate`, triggered by the pool's Gauge contract
/// @param poolId Pool Id, i.e., address of the Pair contract
/// @param rewardRate New `rewardRate`
/// @param weight New `weight`
function setPoolRewardRate(address poolId, uint rewardRate, uint weight) external {
Pool storage pool = pools[poolId];
require(pool.gauge == msg.sender, "not gauge");
pool.lastReserve = getCurrentPoolReserve(poolId);
pool.lastUpdateTime = block.timestamp;
pool.rewardRate = rewardRate;
pool.weight = weight;
emit RateUpdated(poolId, rewardRate, weight);
}
/// @notice Update gov token pool's `rewardRate` and `weight`
/// @param rewardRate New `rewardRate`
/// @param weight New `weight`
function setGlobalRewardRate(uint rewardRate, uint weight) external onlyOwner {
globalPool.lastReserve = getCurrentGlobalReserve();
globalPool.lastUpdateTime = block.timestamp;
globalPool.rewardRate = rewardRate;
globalPool.weight = weight;
emit RateUpdated(address(this), rewardRate, weight);
}
/// @notice Get current reserve amount of given pool
/// @param poolId Pool Id, i.e., address of the Pair contract
/// @return reserve Current reserve amount
function getCurrentPoolReserve(address poolId) public view returns (uint reserve) {
Pool storage pool = pools[poolId];
reserve = (block.timestamp - pool.lastUpdateTime) * pool.rewardRate + pool.lastReserve;
}
/// @notice Get current reserve amount of gov token pool
/// @return reserve Current reserve amount
function getCurrentGlobalReserve() public view returns (uint reserve) {
reserve = (block.timestamp - globalPool.lastUpdateTime) * globalPool.rewardRate + globalPool.lastReserve;
}
/// @dev Calculate reward amount with given amount, reserve amount and weight:
/// reward = reserve * (1 - 2^(-amount/w))
/// @param _reserve Reserve amount
/// @param _amount LocalSP or GlobalSP amount
/// @param _w Weight
/// @return reward Reward amount in either globalSP or gov token
function _calcRewardAmount(uint _reserve, uint _amount, uint _w) internal pure returns (uint reward) {
int128 r = _amount.divu(_w);
int128 e = (-r).exp_2();
reward = (MAX_AP_RATIO - e).mulu(_reserve);
}
/// @notice Triggered by Pair contract to grant user SP upon user deposit
/// If user also stake his sGov token, i.e., sDYSON token in the pool's Gauge contract, he will receive bouns localSP.
/// @dev The pool's `lastReserve` and `lastUpdateTime` are updated each time `grantSP` is triggered
/// @param to User's address
/// @param amount Amount of localSP
function grantSP(address to, uint amount) external {
if(agency.whois(to) == 0) return;
Pool storage pool = pools[msg.sender];
// check pool bonus
uint bonus = IGauge(pool.gauge).bonus(to);
if (bonus > 0) amount = amount * (bonus + BONUS_BASE_UNIT) / BONUS_BASE_UNIT;
// swap localSP to globalSP
uint reserve = getCurrentPoolReserve(msg.sender);
uint SPAmount = _calcRewardAmount(reserve, amount, pool.weight);
pool.lastReserve = reserve - SPAmount;
pool.lastUpdateTime = block.timestamp;
balanceOf[to] += SPAmount;
emit GrantSP(to, msg.sender, amount, SPAmount);
}
/// @notice Swap given `user`'s SP to gov token.
/// This can be done by a third party.
/// User can only swap if his cooldown has ended. Cooldown time depends on user's generation in the referral system.
/// User need to register in the referral system to be able to swap.
/// User's referrer will receive 1/3 of user's SP upon swap.
function swap(address user) external returns (uint amountOut) {
require(block.timestamp > cooldown[user], "cd");
if(agency.whois(user) == 0) return 0;
(address ref, uint gen) = agency.userInfo(user);
cooldown[user] = block.timestamp + (gen + 1) * CD;
// swap sp to token
uint reserve = getCurrentGlobalReserve();
uint amountIn = balanceOf[user];
balanceOf[user] = 0;
require(amountIn > 0 ,"no sp");
amountOut = _calcRewardAmount(reserve, amountIn, globalPool.weight);
globalPool.lastReserve = reserve - amountOut;
globalPool.lastUpdateTime = block.timestamp;
// referral
balanceOf[ref] += amountIn / 3;
// mint token
gov.mint(user, amountOut);
emit Swap(user, ref, amountIn, amountOut);
}
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IAgency {
struct Agent {
address owner;
uint gen;
uint birth;
uint parentId;
uint[] childrenId;
}
event TransferOwnership(address newOwner);
event Register(uint indexed referrer, uint referee);
event Sign(address indexed signer, bytes32 digest);
function REGISTER_ONCE_TYPEHASH() external view returns (bytes32);
function REGISTER_PARENT_TYPEHASH() external view returns (bytes32);
function MAX_NUM_CHILDREN() external view returns (uint);
function REGISTER_DELAY() external view returns (uint);
function TRANSFER_CD() external view returns (uint);
function agentNFT() external view returns (address);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function whois(address agent) external view returns (uint);
function oneTimeCodes(address once) external view returns (bool);
function presign(address agent, bytes32 digest) external view returns (bool);
function isController(address agent) external view returns (bool);
function owner() external view returns (address);
function userInfo(address agent) external view returns (address ref, uint gen);
function transfer(address from, address to, uint id) external returns (bool);
function totalSupply() external view returns (uint);
function getAgent(uint id) external view returns (address, uint, uint, uint, uint[] memory);
function transferOwnership(address owner) external;
function addController(address _controller) external;
function removeController(address _controller) external;
function rescueERC20(address tokenAddress, address to, uint256 amount) external;
function adminAdd(address newUser) external returns (uint id);
function register(bytes memory parentSig, bytes memory onceSig, uint deadline) payable external returns (uint id);
function sign(bytes32 digest) external;
function getHashTypedData(bytes32 structHash) external view returns (bytes32);
function transferCooldown(uint id) external view returns (uint);
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
import "./IERC20.sol";
interface IERC20Mintable is IERC20 {
function mint(address to, uint amount) external returns (bool);
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IGauge {
event TransferOwnership(address newOwner);
event Deposit(address indexed user, uint indexed week, uint amount);
event ApplyWithdrawal(address indexed user, uint indexed week, uint amount);
event Withdraw(address indexed user, uint amount);
struct Checkpoint {
uint week;
uint amount;
}
function farm() external view returns (address);
function SGOV() external view returns (address);
function poolId() external view returns (address);
function genesis() external view returns (uint);
function weight() external view returns (uint);
function totalSupply() external view returns (uint);
function base() external view returns (uint);
function slope() external view returns (uint);
function thisWeek() external view returns (uint);
function owner() external view returns (address);
function numCheckpoints(address account) external view returns (uint);
function checkpoints(address account, uint index) external view returns (uint week, uint amount);
function pendingWithdrawal(address account) external view returns (uint);
function weekToWithdraw(address account) external view returns (uint);
function transferOwnership(address _owner) external;
function rescueERC20(address tokenAddress, address to, uint256 amount) external;
function setParams(uint _weight, uint _base, uint _slope) external;
function balanceOf(address account) external view returns (uint);
function balanceOfAt(address account, uint week) external view returns (uint);
function totalSupplyAt(uint week) external view returns (uint);
function tick() external;
function nextRewardRate() external view returns (uint newRewardRate);
function deposit(uint amount, address to) external;
function applyWithdrawal(uint amount) external;
function withdraw() external returns (uint amount);
function bonus(address user) external view returns (uint _bonus);
}pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-2.0
library ABDKMath64x64 {
/*
* Minimum value signed 64.64-bit fixed point number may have.
* -2^127
*/
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000;
/*
* Maximum value signed 64.64-bit fixed point number may have.
* 2^127-1
*/
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
/**
* Calculate x * y rounding down, where x is signed 64.64 fixed point number
* and y is unsigned 256-bit integer number. Revert on overflow.
*
* @param x signed 64.64 fixed point number
* @param y unsigned 256-bit integer number
* @return unsigned 256-bit integer number
*/
function mulu (int128 x, uint256 y) internal pure returns (uint256) {
unchecked {
if (y == 0) return 0;
require (x >= 0);
uint256 lo = (uint256 (int256 (x)) * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) >> 64;
uint256 hi = uint256 (int256 (x)) * (y >> 128);
require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
hi <<= 64;
require (hi <=
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - lo);
return hi + lo;
}
}
/**
* Calculate x / y rounding towards zero, where x and y are unsigned 256-bit
* integer numbers. Revert on overflow or when y is zero.
*
* @param x unsigned 256-bit integer number
* @param y unsigned 256-bit integer number
* @return signed 64.64-bit fixed point number
*/
function divu (uint256 x, uint256 y) internal pure returns (int128) {
unchecked {
require (y != 0);
uint128 result = divuu (x, y);
require (result <= uint128 (MAX_64x64));
return int128 (result);
}
}
/**
* Calculate binary exponent of x. Revert on overflow.
*
* @param x signed 64.64-bit fixed point number
* @return signed 64.64-bit fixed point number
*/
function exp_2 (int128 x) internal pure returns (int128) {
unchecked {
require (x < 0x400000000000000000); // Overflow
if (x < -0x400000000000000000) return 0; // Underflow
uint256 result = 0x80000000000000000000000000000000;
if (x & 0x8000000000000000 > 0)
result = result * 0x16A09E667F3BCC908B2FB1366EA957D3E >> 128;
if (x & 0x4000000000000000 > 0)
result = result * 0x1306FE0A31B7152DE8D5A46305C85EDEC >> 128;
if (x & 0x2000000000000000 > 0)
result = result * 0x1172B83C7D517ADCDF7C8C50EB14A791F >> 128;
if (x & 0x1000000000000000 > 0)
result = result * 0x10B5586CF9890F6298B92B71842A98363 >> 128;
if (x & 0x800000000000000 > 0)
result = result * 0x1059B0D31585743AE7C548EB68CA417FD >> 128;
if (x & 0x400000000000000 > 0)
result = result * 0x102C9A3E778060EE6F7CACA4F7A29BDE8 >> 128;
if (x & 0x200000000000000 > 0)
result = result * 0x10163DA9FB33356D84A66AE336DCDFA3F >> 128;
if (x & 0x100000000000000 > 0)
result = result * 0x100B1AFA5ABCBED6129AB13EC11DC9543 >> 128;
if (x & 0x80000000000000 > 0)
result = result * 0x10058C86DA1C09EA1FF19D294CF2F679B >> 128;
if (x & 0x40000000000000 > 0)
result = result * 0x1002C605E2E8CEC506D21BFC89A23A00F >> 128;
if (x & 0x20000000000000 > 0)
result = result * 0x100162F3904051FA128BCA9C55C31E5DF >> 128;
if (x & 0x10000000000000 > 0)
result = result * 0x1000B175EFFDC76BA38E31671CA939725 >> 128;
if (x & 0x8000000000000 > 0)
result = result * 0x100058BA01FB9F96D6CACD4B180917C3D >> 128;
if (x & 0x4000000000000 > 0)
result = result * 0x10002C5CC37DA9491D0985C348C68E7B3 >> 128;
if (x & 0x2000000000000 > 0)
result = result * 0x1000162E525EE054754457D5995292026 >> 128;
if (x & 0x1000000000000 > 0)
result = result * 0x10000B17255775C040618BF4A4ADE83FC >> 128;
if (x & 0x800000000000 > 0)
result = result * 0x1000058B91B5BC9AE2EED81E9B7D4CFAB >> 128;
if (x & 0x400000000000 > 0)
result = result * 0x100002C5C89D5EC6CA4D7C8ACC017B7C9 >> 128;
if (x & 0x200000000000 > 0)
result = result * 0x10000162E43F4F831060E02D839A9D16D >> 128;
if (x & 0x100000000000 > 0)
result = result * 0x100000B1721BCFC99D9F890EA06911763 >> 128;
if (x & 0x80000000000 > 0)
result = result * 0x10000058B90CF1E6D97F9CA14DBCC1628 >> 128;
if (x & 0x40000000000 > 0)
result = result * 0x1000002C5C863B73F016468F6BAC5CA2B >> 128;
if (x & 0x20000000000 > 0)
result = result * 0x100000162E430E5A18F6119E3C02282A5 >> 128;
if (x & 0x10000000000 > 0)
result = result * 0x1000000B1721835514B86E6D96EFD1BFE >> 128;
if (x & 0x8000000000 > 0)
result = result * 0x100000058B90C0B48C6BE5DF846C5B2EF >> 128;
if (x & 0x4000000000 > 0)
result = result * 0x10000002C5C8601CC6B9E94213C72737A >> 128;
if (x & 0x2000000000 > 0)
result = result * 0x1000000162E42FFF037DF38AA2B219F06 >> 128;
if (x & 0x1000000000 > 0)
result = result * 0x10000000B17217FBA9C739AA5819F44F9 >> 128;
if (x & 0x800000000 > 0)
result = result * 0x1000000058B90BFCDEE5ACD3C1CEDC823 >> 128;
if (x & 0x400000000 > 0)
result = result * 0x100000002C5C85FE31F35A6A30DA1BE50 >> 128;
if (x & 0x200000000 > 0)
result = result * 0x10000000162E42FF0999CE3541B9FFFCF >> 128;
if (x & 0x100000000 > 0)
result = result * 0x100000000B17217F80F4EF5AADDA45554 >> 128;
if (x & 0x80000000 > 0)
result = result * 0x10000000058B90BFBF8479BD5A81B51AD >> 128;
if (x & 0x40000000 > 0)
result = result * 0x1000000002C5C85FDF84BD62AE30A74CC >> 128;
if (x & 0x20000000 > 0)
result = result * 0x100000000162E42FEFB2FED257559BDAA >> 128;
if (x & 0x10000000 > 0)
result = result * 0x1000000000B17217F7D5A7716BBA4A9AE >> 128;
if (x & 0x8000000 > 0)
result = result * 0x100000000058B90BFBE9DDBAC5E109CCE >> 128;
if (x & 0x4000000 > 0)
result = result * 0x10000000002C5C85FDF4B15DE6F17EB0D >> 128;
if (x & 0x2000000 > 0)
result = result * 0x1000000000162E42FEFA494F1478FDE05 >> 128;
if (x & 0x1000000 > 0)
result = result * 0x10000000000B17217F7D20CF927C8E94C >> 128;
if (x & 0x800000 > 0)
result = result * 0x1000000000058B90BFBE8F71CB4E4B33D >> 128;
if (x & 0x400000 > 0)
result = result * 0x100000000002C5C85FDF477B662B26945 >> 128;
if (x & 0x200000 > 0)
result = result * 0x10000000000162E42FEFA3AE53369388C >> 128;
if (x & 0x100000 > 0)
result = result * 0x100000000000B17217F7D1D351A389D40 >> 128;
if (x & 0x80000 > 0)
result = result * 0x10000000000058B90BFBE8E8B2D3D4EDE >> 128;
if (x & 0x40000 > 0)
result = result * 0x1000000000002C5C85FDF4741BEA6E77E >> 128;
if (x & 0x20000 > 0)
result = result * 0x100000000000162E42FEFA39FE95583C2 >> 128;
if (x & 0x10000 > 0)
result = result * 0x1000000000000B17217F7D1CFB72B45E1 >> 128;
if (x & 0x8000 > 0)
result = result * 0x100000000000058B90BFBE8E7CC35C3F0 >> 128;
if (x & 0x4000 > 0)
result = result * 0x10000000000002C5C85FDF473E242EA38 >> 128;
if (x & 0x2000 > 0)
result = result * 0x1000000000000162E42FEFA39F02B772C >> 128;
if (x & 0x1000 > 0)
result = result * 0x10000000000000B17217F7D1CF7D83C1A >> 128;
if (x & 0x800 > 0)
result = result * 0x1000000000000058B90BFBE8E7BDCBE2E >> 128;
if (x & 0x400 > 0)
result = result * 0x100000000000002C5C85FDF473DEA871F >> 128;
if (x & 0x200 > 0)
result = result * 0x10000000000000162E42FEFA39EF44D91 >> 128;
if (x & 0x100 > 0)
result = result * 0x100000000000000B17217F7D1CF79E949 >> 128;
if (x & 0x80 > 0)
result = result * 0x10000000000000058B90BFBE8E7BCE544 >> 128;
if (x & 0x40 > 0)
result = result * 0x1000000000000002C5C85FDF473DE6ECA >> 128;
if (x & 0x20 > 0)
result = result * 0x100000000000000162E42FEFA39EF366F >> 128;
if (x & 0x10 > 0)
result = result * 0x1000000000000000B17217F7D1CF79AFA >> 128;
if (x & 0x8 > 0)
result = result * 0x100000000000000058B90BFBE8E7BCD6D >> 128;
if (x & 0x4 > 0)
result = result * 0x10000000000000002C5C85FDF473DE6B2 >> 128;
if (x & 0x2 > 0)
result = result * 0x1000000000000000162E42FEFA39EF358 >> 128;
if (x & 0x1 > 0)
result = result * 0x10000000000000000B17217F7D1CF79AB >> 128;
result >>= uint256 (int256 (63 - (x >> 64)));
require (result <= uint256 (int256 (MAX_64x64)));
return int128 (int256 (result));
}
}
/**
* Calculate x / y rounding towards zero, where x and y are unsigned 256-bit
* integer numbers. Revert on overflow or when y is zero.
*
* @param x unsigned 256-bit integer number
* @param y unsigned 256-bit integer number
* @return unsigned 64.64-bit fixed point number
*/
function divuu (uint256 x, uint256 y) private pure returns (uint128) {
unchecked {
require (y != 0);
uint256 result;
if (x <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
result = (x << 64) / y;
else {
uint256 msb = 192;
uint256 xc = x >> 192;
if (xc >= 0x100000000) { xc >>= 32; msb += 32; }
if (xc >= 0x10000) { xc >>= 16; msb += 16; }
if (xc >= 0x100) { xc >>= 8; msb += 8; }
if (xc >= 0x10) { xc >>= 4; msb += 4; }
if (xc >= 0x4) { xc >>= 2; msb += 2; }
if (xc >= 0x2) msb += 1; // No need to shift xc anymore
result = (x << 255 - msb) / ((y - 1 >> msb - 191) + 1);
require (result <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
uint256 hi = result * (y >> 128);
uint256 lo = result * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
uint256 xh = x >> 192;
uint256 xl = x << 64;
if (xl < lo) xh -= 1;
xl -= lo; // We rely on overflow behavior here
lo = hi << 128;
if (xl < lo) xh -= 1;
xl -= lo; // We rely on overflow behavior here
assert (xh == hi >> 128);
result += xl / y;
}
require (result <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
return uint128 (result);
}
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-2.0
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'transferHelper: approve failed');
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'transferHelper: transfer failed');
}
function safeTransferFrom(address token, address from, address to, uint value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'transferHelper: transferFrom failed');
}
function safeTransferETH(address to, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'transferHelper: ETH transfer failed');
}
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"interface/=src/interface/",
"util/=src/util/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_agency","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"poolId","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"GrantSP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"poolId","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"RateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"parent","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"inputs":[],"name":"agency","outputs":[{"internalType":"contract IAgency","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentGlobalReserve","outputs":[{"internalType":"uint256","name":"reserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolId","type":"address"}],"name":"getCurrentPoolReserve","outputs":[{"internalType":"uint256","name":"reserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalPool","outputs":[{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"lastReserve","type":"uint256"},{"internalType":"address","name":"gauge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"contract IERC20Mintable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"grantSP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pools","outputs":[{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"lastReserve","type":"uint256"},{"internalType":"address","name":"gauge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"}],"name":"setGlobalRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolId","type":"address"},{"internalType":"address","name":"gauge","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolId","type":"address"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"}],"name":"setPoolRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001f9438038062001f948339810160408190526200003491620000d8565b6001600160a01b0383166200008f5760405162461bcd60e51b815260206004820152601460248201527f6f776e65722063616e6e6f74206265207a65726f000000000000000000000000604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b039485161790559082166080521660a05262000122565b80516001600160a01b0381168114620000d357600080fd5b919050565b600080600060608486031215620000ee57600080fd5b620000f984620000bb565b92506200010960208501620000bb565b91506200011960408501620000bb565b90509250925092565b60805160a051611e30620001646000396000818161013001526105a70152600081816101c30152818161037d0152818161041b01526108aa0152611e306000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b2118a8d11610066578063b2118a8d146102b4578063b222e0c2146102c7578063f2fde38b146102e7578063f531c1fa146102fa57600080fd5b806370a08231146102285780638da5cb5b146102485780639975ac2f1461025b578063a4063dbc1461026e57600080fd5b80634dfb841e116100d35780634dfb841e146101e55780634e847fc7146101fa57806352edeea11461020d57806353c487181461022057600080fd5b806303438dd01461010557806312d43a511461012b578063391157841461016a5780633b91ee26146101be575b600080fd5b610118610113366004611b28565b61030d565b6040519081526020015b60405180910390f35b6101527f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610122565b60015460025460035460045460055461018d94939291906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610122565b6101527f000000000000000000000000000000000000000000000000000000000000000081565b6101f86101f3366004611b45565b610674565b005b6101f8610208366004611b67565b6106f6565b6101f861021b366004611ba0565b61088b565b610118610a85565b610118610236366004611b28565b60076020526000908152604090205481565b600054610152906001600160a01b031681565b610118610269366004611b28565b610ab6565b61018d61027c366004611b28565b60066020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b6101f86102c2366004611bcc565b610b02565b6101186102d5366004611b28565b60086020526000908152604090205481565b6101f86102f5366004611b28565b610b45565b6101f8610308366004611c0d565b610c10565b6001600160a01b038116600090815260086020526040812054421161035e5760405162461bcd60e51b815260206004820152600260248201526118d960f21b60448201526064015b60405180910390fd5b604051632a5ccc1f60e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632a5ccc1f90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e89190611c42565b6000036103f757506000919050565b604051630cacd00160e11b81526001600160a01b03838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690631959a002906024016040805180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190611c5b565b9092509050611770610498826001611c9f565b6104a29190611cb2565b6104ac9042611c9f565b6001600160a01b0385166000908152600860205260408120919091556104d0610a85565b6001600160a01b03861660009081526007602052604081208054919055909150806105255760405162461bcd60e51b815260206004820152600560248201526406e6f2073760dc1b6044820152606401610355565b6105358282600160000154610cd3565b94506105418583611cc9565b6004554260039081556105549082611cf2565b6001600160a01b0385166000908152600760205260408120805490919061057c908490611c9f565b90915550506040516340c10f1960e01b81526001600160a01b038781166004830152602482018790527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044016020604051808303816000875af11580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190611d14565b50836001600160a01b0316866001600160a01b03167ffa2dda1cc1b86e41239702756b13effbc1a092b5c57e3ad320fbe4f3b13fe2358388604051610663929190918252602082015260400190565b60405180910390a350505050919050565b6000546001600160a01b0316331461069e5760405162461bcd60e51b815260040161035590611d36565b6106a6610a85565b6004554260035560028290556001819055604080518381526020810183905230917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a25050565b6000546001600160a01b031633146107205760405162461bcd60e51b815260040161035590611d36565b6001600160a01b0382811660009081526006602052604090206004810180546001600160a01b0319169284169290921790915561075c83610ab6565b8160030181905550428160020181905550816001600160a01b031663715fda7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611c42565b8160010181905550816001600160a01b031663a1aab33f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108399190611c42565b80825560018201546040805191825260208201929092526001600160a01b038516917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a2505050565b604051632a5ccc1f60e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632a5ccc1f90602401602060405180830381865afa1580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109159190611c42565b600003610920575050565b33600090815260066020526040808220600480820154925163d8cb4aa360e01b81526001600160a01b0387811692820192909252919392169063d8cb4aa390602401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611c42565b905080156109d557670de0b6b3a76400006109be8183611c9f565b6109c89085611cb2565b6109d29190611cf2565b92505b60006109e033610ab6565b905060006109f382868660000154610cd3565b90506109ff8183611cc9565b60038501554260028501556001600160a01b03861660009081526007602052604081208054839290610a32908490611c9f565b9091555050604080518681526020810183905233916001600160a01b038916917f56536211b22c049bb6a07a838731505301d35c7502ae3f2c7a54fc7b03248258910160405180910390a3505050505050565b6004546002546003546000929190610a9d9042611cc9565b610aa79190611cb2565b610ab19190611c9f565b905090565b6001600160a01b0381166000908152600660205260408120600381015460018201546002830154610ae79042611cc9565b610af19190611cb2565b610afb9190611c9f565b9392505050565b6000546001600160a01b03163314610b2c5760405162461bcd60e51b815260040161035590611d36565b610b406001600160a01b0384168383610d24565b505050565b6000546001600160a01b03163314610b6f5760405162461bcd60e51b815260040161035590611d36565b6001600160a01b038116610bbc5760405162461bcd60e51b81526020600482015260146024820152736f776e65722063616e6e6f74206265207a65726f60601b6044820152606401610355565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49060200160405180910390a150565b6001600160a01b03808416600090815260066020526040902060048101549091163314610c6b5760405162461bcd60e51b81526020600482015260096024820152686e6f7420676175676560b81b6044820152606401610355565b610c7484610ab6565b60038201554260028201556001810183905581815560408051848152602081018490526001600160a01b038616917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a250505050565b600080610ce08484610e3f565b90506000610cf8610cf083611d59565b600f0b610e82565b9050610d1a86610d118368010000000000000000611d7f565b600f0b90611940565b9695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610d809190611db5565b6000604051808303816000865af19150503d8060008114610dbd576040519150601f19603f3d011682016040523d82523d6000602084013e610dc2565b606091505b5091509150818015610dec575080511580610dec575080806020019051810190610dec9190611d14565b610e385760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657248656c7065723a207472616e73666572206661696c6564006044820152606401610355565b5050505050565b600081600003610e4e57600080fd5b6000610e5a84846119ab565b905060016001607f1b036001600160801b0382161115610e7957600080fd5b90505b92915050565b60006840000000000000000082600f0b12610e9c57600080fd5b683fffffffffffffffff1982600f0b1215610eb957506000919050565b6001607f1b60006780000000000000008416600f0b1315610eeb5770016a09e667f3bcc908b2fb1366ea957d3e0260801c5b60008367400000000000000016600f0b1315610f18577001306fe0a31b7152de8d5a46305c85edec0260801c5b60008367200000000000000016600f0b1315610f45577001172b83c7d517adcdf7c8c50eb14a791f0260801c5b60008367100000000000000016600f0b1315610f725770010b5586cf9890f6298b92b71842a983630260801c5b60008367080000000000000016600f0b1315610f9f577001059b0d31585743ae7c548eb68ca417fd0260801c5b60008367040000000000000016600f0b1315610fcc57700102c9a3e778060ee6f7caca4f7a29bde80260801c5b60008367020000000000000016600f0b1315610ff95770010163da9fb33356d84a66ae336dcdfa3f0260801c5b60008367010000000000000016600f0b131561102657700100b1afa5abcbed6129ab13ec11dc95430260801c5b600083668000000000000016600f0b13156110525770010058c86da1c09ea1ff19d294cf2f679b0260801c5b600083664000000000000016600f0b131561107e577001002c605e2e8cec506d21bfc89a23a00f0260801c5b600083662000000000000016600f0b13156110aa57700100162f3904051fa128bca9c55c31e5df0260801c5b600083661000000000000016600f0b13156110d6577001000b175effdc76ba38e31671ca9397250260801c5b600083660800000000000016600f0b131561110257700100058ba01fb9f96d6cacd4b180917c3d0260801c5b600083660400000000000016600f0b131561112e5770010002c5cc37da9491d0985c348c68e7b30260801c5b600083660200000000000016600f0b131561115a577001000162e525ee054754457d59952920260260801c5b600083660100000000000016600f0b13156111865770010000b17255775c040618bf4a4ade83fc0260801c5b6000836580000000000016600f0b13156111b1577001000058b91b5bc9ae2eed81e9b7d4cfab0260801c5b6000836540000000000016600f0b13156111dc57700100002c5c89d5ec6ca4d7c8acc017b7c90260801c5b6000836520000000000016600f0b13156112075770010000162e43f4f831060e02d839a9d16d0260801c5b6000836510000000000016600f0b131561123257700100000b1721bcfc99d9f890ea069117630260801c5b6000836508000000000016600f0b131561125d5770010000058b90cf1e6d97f9ca14dbcc16280260801c5b6000836504000000000016600f0b1315611288577001000002c5c863b73f016468f6bac5ca2b0260801c5b6000836502000000000016600f0b13156112b357700100000162e430e5a18f6119e3c02282a50260801c5b6000836501000000000016600f0b13156112de577001000000b1721835514b86e6d96efd1bfe0260801c5b60008364800000000016600f0b131561130857700100000058b90c0b48c6be5df846c5b2ef0260801c5b60008364400000000016600f0b13156113325770010000002c5c8601cc6b9e94213c72737a0260801c5b60008364200000000016600f0b131561135c577001000000162e42fff037df38aa2b219f060260801c5b60008364100000000016600f0b13156113865770010000000b17217fba9c739aa5819f44f90260801c5b60008364080000000016600f0b13156113b0577001000000058b90bfcdee5acd3c1cedc8230260801c5b60008364040000000016600f0b13156113da57700100000002c5c85fe31f35a6a30da1be500260801c5b60008364020000000016600f0b13156114045770010000000162e42ff0999ce3541b9fffcf0260801c5b60008364010000000016600f0b131561142e57700100000000b17217f80f4ef5aadda455540260801c5b600083638000000016600f0b13156114575770010000000058b90bfbf8479bd5a81b51ad0260801c5b600083634000000016600f0b1315611480577001000000002c5c85fdf84bd62ae30a74cc0260801c5b600083632000000016600f0b13156114a957700100000000162e42fefb2fed257559bdaa0260801c5b600083631000000016600f0b13156114d2577001000000000b17217f7d5a7716bba4a9ae0260801c5b600083630800000016600f0b13156114fb57700100000000058b90bfbe9ddbac5e109cce0260801c5b600083630400000016600f0b13156115245770010000000002c5c85fdf4b15de6f17eb0d0260801c5b600083630200000016600f0b131561154d577001000000000162e42fefa494f1478fde050260801c5b600083630100000016600f0b13156115765770010000000000b17217f7d20cf927c8e94c0260801c5b6000836280000016600f0b131561159e577001000000000058b90bfbe8f71cb4e4b33d0260801c5b6000836240000016600f0b13156115c657700100000000002c5c85fdf477b662b269450260801c5b6000836220000016600f0b13156115ee5770010000000000162e42fefa3ae53369388c0260801c5b6000836210000016600f0b131561161657700100000000000b17217f7d1d351a389d400260801c5b6000836208000016600f0b131561163e5770010000000000058b90bfbe8e8b2d3d4ede0260801c5b6000836204000016600f0b1315611666577001000000000002c5c85fdf4741bea6e77e0260801c5b6000836202000016600f0b131561168e57700100000000000162e42fefa39fe95583c20260801c5b6000836201000016600f0b13156116b6577001000000000000b17217f7d1cfb72b45e10260801c5b60008361800016600f0b13156116dd57700100000000000058b90bfbe8e7cc35c3f00260801c5b60008361400016600f0b13156117045770010000000000002c5c85fdf473e242ea380260801c5b60008361200016600f0b131561172b577001000000000000162e42fefa39f02b772c0260801c5b60008361100016600f0b13156117525770010000000000000b17217f7d1cf7d83c1a0260801c5b60008361080016600f0b1315611779577001000000000000058b90bfbe8e7bdcbe2e0260801c5b60008361040016600f0b13156117a057700100000000000002c5c85fdf473dea871f0260801c5b60008361020016600f0b13156117c75770010000000000000162e42fefa39ef44d910260801c5b60008361010016600f0b13156117ee57700100000000000000b17217f7d1cf79e9490260801c5b600083608016600f0b13156118145770010000000000000058b90bfbe8e7bce5440260801c5b600083604016600f0b131561183a577001000000000000002c5c85fdf473de6eca0260801c5b600083602016600f0b131561186057700100000000000000162e42fefa39ef366f0260801c5b600083601016600f0b1315611886577001000000000000000b17217f7d1cf79afa0260801c5b600083600816600f0b13156118ac57700100000000000000058b90bfbe8e7bcd6d0260801c5b600083600416600f0b13156118d25770010000000000000002c5c85fdf473de6b20260801c5b600083600216600f0b13156118f8577001000000000000000162e42fefa39ef3580260801c5b600083600116600f0b131561191e5770010000000000000000b17217f7d1cf79ab0260801c5b600f83810b60401d603f03900b1c60016001607f1b03811115610e7c57600080fd5b60008160000361195257506000610e7c565b600083600f0b121561196357600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b0381111561199257600080fd5b60401b81198111156119a357600080fd5b019392505050565b6000816000036119ba57600080fd5b60006001600160c01b0384116119e55782604085901b816119dd576119dd611cdc565b049050611afc565b60c084811c64010000000081106119fe576020918201911c5b620100008110611a10576010918201911c5b6101008110611a21576008918201911c5b60108110611a31576004918201911c5b60048110611a41576002918201911c5b60028110611a50576001820191505b60bf820360018603901c6001018260ff0387901b81611a7157611a71611cdc565b0492506001600160801b03831115611a8857600080fd5b608085901c83026001600160801b038616840260c088901c604089901b82811015611ab4576001820391505b608084901b92900382811015611acb576001820391505b829003608084901c8214611ae157611ae1611de4565b888181611af057611af0611cdc565b04870196505050505050505b6001600160801b03811115610e7957600080fd5b6001600160a01b0381168114611b2557600080fd5b50565b600060208284031215611b3a57600080fd5b8135610e7981611b10565b60008060408385031215611b5857600080fd5b50508035926020909101359150565b60008060408385031215611b7a57600080fd5b8235611b8581611b10565b91506020830135611b9581611b10565b809150509250929050565b60008060408385031215611bb357600080fd5b8235611bbe81611b10565b946020939093013593505050565b600080600060608486031215611be157600080fd5b8335611bec81611b10565b92506020840135611bfc81611b10565b929592945050506040919091013590565b600080600060608486031215611c2257600080fd5b8335611c2d81611b10565b95602085013595506040909401359392505050565b600060208284031215611c5457600080fd5b5051919050565b60008060408385031215611c6e57600080fd5b8251611c7981611b10565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e7c57610e7c611c89565b8082028115828204841417610e7c57610e7c611c89565b81810381811115610e7c57610e7c611c89565b634e487b7160e01b600052601260045260246000fd5b600082611d0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d2657600080fd5b81518015158114610e7957600080fd5b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b600081600f0b60016001607f1b03198103611d7657611d76611c89565b60000392915050565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff19811260016001607f1b0382131715610e7c57610e7c611c89565b6000825160005b81811015611dd65760208186018101518583015201611dbc565b506000920191825250919050565b634e487b7160e01b600052600160045260246000fdfea264697066735822122029cf062b34baec1e8222eb66ef99e1b1d41f96fcf6c4c606f7de4df2321e2a1a64736f6c634300081100330000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b400000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b2118a8d11610066578063b2118a8d146102b4578063b222e0c2146102c7578063f2fde38b146102e7578063f531c1fa146102fa57600080fd5b806370a08231146102285780638da5cb5b146102485780639975ac2f1461025b578063a4063dbc1461026e57600080fd5b80634dfb841e116100d35780634dfb841e146101e55780634e847fc7146101fa57806352edeea11461020d57806353c487181461022057600080fd5b806303438dd01461010557806312d43a511461012b578063391157841461016a5780633b91ee26146101be575b600080fd5b610118610113366004611b28565b61030d565b6040519081526020015b60405180910390f35b6101527f00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b8381565b6040516001600160a01b039091168152602001610122565b60015460025460035460045460055461018d94939291906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610122565b6101527f0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b481565b6101f86101f3366004611b45565b610674565b005b6101f8610208366004611b67565b6106f6565b6101f861021b366004611ba0565b61088b565b610118610a85565b610118610236366004611b28565b60076020526000908152604090205481565b600054610152906001600160a01b031681565b610118610269366004611b28565b610ab6565b61018d61027c366004611b28565b60066020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b6101f86102c2366004611bcc565b610b02565b6101186102d5366004611b28565b60086020526000908152604090205481565b6101f86102f5366004611b28565b610b45565b6101f8610308366004611c0d565b610c10565b6001600160a01b038116600090815260086020526040812054421161035e5760405162461bcd60e51b815260206004820152600260248201526118d960f21b60448201526064015b60405180910390fd5b604051632a5ccc1f60e01b81526001600160a01b0383811660048301527f0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b41690632a5ccc1f90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e89190611c42565b6000036103f757506000919050565b604051630cacd00160e11b81526001600160a01b03838116600483015260009182917f0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b41690631959a002906024016040805180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190611c5b565b9092509050611770610498826001611c9f565b6104a29190611cb2565b6104ac9042611c9f565b6001600160a01b0385166000908152600860205260408120919091556104d0610a85565b6001600160a01b03861660009081526007602052604081208054919055909150806105255760405162461bcd60e51b815260206004820152600560248201526406e6f2073760dc1b6044820152606401610355565b6105358282600160000154610cd3565b94506105418583611cc9565b6004554260039081556105549082611cf2565b6001600160a01b0385166000908152600760205260408120805490919061057c908490611c9f565b90915550506040516340c10f1960e01b81526001600160a01b038781166004830152602482018790527f00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b8316906340c10f19906044016020604051808303816000875af11580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190611d14565b50836001600160a01b0316866001600160a01b03167ffa2dda1cc1b86e41239702756b13effbc1a092b5c57e3ad320fbe4f3b13fe2358388604051610663929190918252602082015260400190565b60405180910390a350505050919050565b6000546001600160a01b0316331461069e5760405162461bcd60e51b815260040161035590611d36565b6106a6610a85565b6004554260035560028290556001819055604080518381526020810183905230917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a25050565b6000546001600160a01b031633146107205760405162461bcd60e51b815260040161035590611d36565b6001600160a01b0382811660009081526006602052604090206004810180546001600160a01b0319169284169290921790915561075c83610ab6565b8160030181905550428160020181905550816001600160a01b031663715fda7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611c42565b8160010181905550816001600160a01b031663a1aab33f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108399190611c42565b80825560018201546040805191825260208201929092526001600160a01b038516917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a2505050565b604051632a5ccc1f60e01b81526001600160a01b0383811660048301527f0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b41690632a5ccc1f90602401602060405180830381865afa1580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109159190611c42565b600003610920575050565b33600090815260066020526040808220600480820154925163d8cb4aa360e01b81526001600160a01b0387811692820192909252919392169063d8cb4aa390602401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611c42565b905080156109d557670de0b6b3a76400006109be8183611c9f565b6109c89085611cb2565b6109d29190611cf2565b92505b60006109e033610ab6565b905060006109f382868660000154610cd3565b90506109ff8183611cc9565b60038501554260028501556001600160a01b03861660009081526007602052604081208054839290610a32908490611c9f565b9091555050604080518681526020810183905233916001600160a01b038916917f56536211b22c049bb6a07a838731505301d35c7502ae3f2c7a54fc7b03248258910160405180910390a3505050505050565b6004546002546003546000929190610a9d9042611cc9565b610aa79190611cb2565b610ab19190611c9f565b905090565b6001600160a01b0381166000908152600660205260408120600381015460018201546002830154610ae79042611cc9565b610af19190611cb2565b610afb9190611c9f565b9392505050565b6000546001600160a01b03163314610b2c5760405162461bcd60e51b815260040161035590611d36565b610b406001600160a01b0384168383610d24565b505050565b6000546001600160a01b03163314610b6f5760405162461bcd60e51b815260040161035590611d36565b6001600160a01b038116610bbc5760405162461bcd60e51b81526020600482015260146024820152736f776e65722063616e6e6f74206265207a65726f60601b6044820152606401610355565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49060200160405180910390a150565b6001600160a01b03808416600090815260066020526040902060048101549091163314610c6b5760405162461bcd60e51b81526020600482015260096024820152686e6f7420676175676560b81b6044820152606401610355565b610c7484610ab6565b60038201554260028201556001810183905581815560408051848152602081018490526001600160a01b038616917f6778305c6589874c7b48651fd6414793c4ac2fdf49403e5270649e087046a83b910160405180910390a250505050565b600080610ce08484610e3f565b90506000610cf8610cf083611d59565b600f0b610e82565b9050610d1a86610d118368010000000000000000611d7f565b600f0b90611940565b9695505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610d809190611db5565b6000604051808303816000865af19150503d8060008114610dbd576040519150601f19603f3d011682016040523d82523d6000602084013e610dc2565b606091505b5091509150818015610dec575080511580610dec575080806020019051810190610dec9190611d14565b610e385760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657248656c7065723a207472616e73666572206661696c6564006044820152606401610355565b5050505050565b600081600003610e4e57600080fd5b6000610e5a84846119ab565b905060016001607f1b036001600160801b0382161115610e7957600080fd5b90505b92915050565b60006840000000000000000082600f0b12610e9c57600080fd5b683fffffffffffffffff1982600f0b1215610eb957506000919050565b6001607f1b60006780000000000000008416600f0b1315610eeb5770016a09e667f3bcc908b2fb1366ea957d3e0260801c5b60008367400000000000000016600f0b1315610f18577001306fe0a31b7152de8d5a46305c85edec0260801c5b60008367200000000000000016600f0b1315610f45577001172b83c7d517adcdf7c8c50eb14a791f0260801c5b60008367100000000000000016600f0b1315610f725770010b5586cf9890f6298b92b71842a983630260801c5b60008367080000000000000016600f0b1315610f9f577001059b0d31585743ae7c548eb68ca417fd0260801c5b60008367040000000000000016600f0b1315610fcc57700102c9a3e778060ee6f7caca4f7a29bde80260801c5b60008367020000000000000016600f0b1315610ff95770010163da9fb33356d84a66ae336dcdfa3f0260801c5b60008367010000000000000016600f0b131561102657700100b1afa5abcbed6129ab13ec11dc95430260801c5b600083668000000000000016600f0b13156110525770010058c86da1c09ea1ff19d294cf2f679b0260801c5b600083664000000000000016600f0b131561107e577001002c605e2e8cec506d21bfc89a23a00f0260801c5b600083662000000000000016600f0b13156110aa57700100162f3904051fa128bca9c55c31e5df0260801c5b600083661000000000000016600f0b13156110d6577001000b175effdc76ba38e31671ca9397250260801c5b600083660800000000000016600f0b131561110257700100058ba01fb9f96d6cacd4b180917c3d0260801c5b600083660400000000000016600f0b131561112e5770010002c5cc37da9491d0985c348c68e7b30260801c5b600083660200000000000016600f0b131561115a577001000162e525ee054754457d59952920260260801c5b600083660100000000000016600f0b13156111865770010000b17255775c040618bf4a4ade83fc0260801c5b6000836580000000000016600f0b13156111b1577001000058b91b5bc9ae2eed81e9b7d4cfab0260801c5b6000836540000000000016600f0b13156111dc57700100002c5c89d5ec6ca4d7c8acc017b7c90260801c5b6000836520000000000016600f0b13156112075770010000162e43f4f831060e02d839a9d16d0260801c5b6000836510000000000016600f0b131561123257700100000b1721bcfc99d9f890ea069117630260801c5b6000836508000000000016600f0b131561125d5770010000058b90cf1e6d97f9ca14dbcc16280260801c5b6000836504000000000016600f0b1315611288577001000002c5c863b73f016468f6bac5ca2b0260801c5b6000836502000000000016600f0b13156112b357700100000162e430e5a18f6119e3c02282a50260801c5b6000836501000000000016600f0b13156112de577001000000b1721835514b86e6d96efd1bfe0260801c5b60008364800000000016600f0b131561130857700100000058b90c0b48c6be5df846c5b2ef0260801c5b60008364400000000016600f0b13156113325770010000002c5c8601cc6b9e94213c72737a0260801c5b60008364200000000016600f0b131561135c577001000000162e42fff037df38aa2b219f060260801c5b60008364100000000016600f0b13156113865770010000000b17217fba9c739aa5819f44f90260801c5b60008364080000000016600f0b13156113b0577001000000058b90bfcdee5acd3c1cedc8230260801c5b60008364040000000016600f0b13156113da57700100000002c5c85fe31f35a6a30da1be500260801c5b60008364020000000016600f0b13156114045770010000000162e42ff0999ce3541b9fffcf0260801c5b60008364010000000016600f0b131561142e57700100000000b17217f80f4ef5aadda455540260801c5b600083638000000016600f0b13156114575770010000000058b90bfbf8479bd5a81b51ad0260801c5b600083634000000016600f0b1315611480577001000000002c5c85fdf84bd62ae30a74cc0260801c5b600083632000000016600f0b13156114a957700100000000162e42fefb2fed257559bdaa0260801c5b600083631000000016600f0b13156114d2577001000000000b17217f7d5a7716bba4a9ae0260801c5b600083630800000016600f0b13156114fb57700100000000058b90bfbe9ddbac5e109cce0260801c5b600083630400000016600f0b13156115245770010000000002c5c85fdf4b15de6f17eb0d0260801c5b600083630200000016600f0b131561154d577001000000000162e42fefa494f1478fde050260801c5b600083630100000016600f0b13156115765770010000000000b17217f7d20cf927c8e94c0260801c5b6000836280000016600f0b131561159e577001000000000058b90bfbe8f71cb4e4b33d0260801c5b6000836240000016600f0b13156115c657700100000000002c5c85fdf477b662b269450260801c5b6000836220000016600f0b13156115ee5770010000000000162e42fefa3ae53369388c0260801c5b6000836210000016600f0b131561161657700100000000000b17217f7d1d351a389d400260801c5b6000836208000016600f0b131561163e5770010000000000058b90bfbe8e8b2d3d4ede0260801c5b6000836204000016600f0b1315611666577001000000000002c5c85fdf4741bea6e77e0260801c5b6000836202000016600f0b131561168e57700100000000000162e42fefa39fe95583c20260801c5b6000836201000016600f0b13156116b6577001000000000000b17217f7d1cfb72b45e10260801c5b60008361800016600f0b13156116dd57700100000000000058b90bfbe8e7cc35c3f00260801c5b60008361400016600f0b13156117045770010000000000002c5c85fdf473e242ea380260801c5b60008361200016600f0b131561172b577001000000000000162e42fefa39f02b772c0260801c5b60008361100016600f0b13156117525770010000000000000b17217f7d1cf7d83c1a0260801c5b60008361080016600f0b1315611779577001000000000000058b90bfbe8e7bdcbe2e0260801c5b60008361040016600f0b13156117a057700100000000000002c5c85fdf473dea871f0260801c5b60008361020016600f0b13156117c75770010000000000000162e42fefa39ef44d910260801c5b60008361010016600f0b13156117ee57700100000000000000b17217f7d1cf79e9490260801c5b600083608016600f0b13156118145770010000000000000058b90bfbe8e7bce5440260801c5b600083604016600f0b131561183a577001000000000000002c5c85fdf473de6eca0260801c5b600083602016600f0b131561186057700100000000000000162e42fefa39ef366f0260801c5b600083601016600f0b1315611886577001000000000000000b17217f7d1cf79afa0260801c5b600083600816600f0b13156118ac57700100000000000000058b90bfbe8e7bcd6d0260801c5b600083600416600f0b13156118d25770010000000000000002c5c85fdf473de6b20260801c5b600083600216600f0b13156118f8577001000000000000000162e42fefa39ef3580260801c5b600083600116600f0b131561191e5770010000000000000000b17217f7d1cf79ab0260801c5b600f83810b60401d603f03900b1c60016001607f1b03811115610e7c57600080fd5b60008160000361195257506000610e7c565b600083600f0b121561196357600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b0381111561199257600080fd5b60401b81198111156119a357600080fd5b019392505050565b6000816000036119ba57600080fd5b60006001600160c01b0384116119e55782604085901b816119dd576119dd611cdc565b049050611afc565b60c084811c64010000000081106119fe576020918201911c5b620100008110611a10576010918201911c5b6101008110611a21576008918201911c5b60108110611a31576004918201911c5b60048110611a41576002918201911c5b60028110611a50576001820191505b60bf820360018603901c6001018260ff0387901b81611a7157611a71611cdc565b0492506001600160801b03831115611a8857600080fd5b608085901c83026001600160801b038616840260c088901c604089901b82811015611ab4576001820391505b608084901b92900382811015611acb576001820391505b829003608084901c8214611ae157611ae1611de4565b888181611af057611af0611cdc565b04870196505050505050505b6001600160801b03811115610e7957600080fd5b6001600160a01b0381168114611b2557600080fd5b50565b600060208284031215611b3a57600080fd5b8135610e7981611b10565b60008060408385031215611b5857600080fd5b50508035926020909101359150565b60008060408385031215611b7a57600080fd5b8235611b8581611b10565b91506020830135611b9581611b10565b809150509250929050565b60008060408385031215611bb357600080fd5b8235611bbe81611b10565b946020939093013593505050565b600080600060608486031215611be157600080fd5b8335611bec81611b10565b92506020840135611bfc81611b10565b929592945050506040919091013590565b600080600060608486031215611c2257600080fd5b8335611c2d81611b10565b95602085013595506040909401359392505050565b600060208284031215611c5457600080fd5b5051919050565b60008060408385031215611c6e57600080fd5b8251611c7981611b10565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e7c57610e7c611c89565b8082028115828204841417610e7c57610e7c611c89565b81810381811115610e7c57610e7c611c89565b634e487b7160e01b600052601260045260246000fd5b600082611d0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d2657600080fd5b81518015158114610e7957600080fd5b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b600081600f0b60016001607f1b03198103611d7657611d76611c89565b60000392915050565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff19811260016001607f1b0382131715610e7c57610e7c611c89565b6000825160005b81811015611dd65760208186018101518583015201611dbc565b506000920191825250919050565b634e487b7160e01b600052600160045260246000fdfea264697066735822122029cf062b34baec1e8222eb66ef99e1b1d41f96fcf6c4c606f7de4df2321e2a1a64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b400000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
-----Decoded View---------------
Arg [0] : _owner (address): 0x7e6d097A7D948454eA253d3610bD93bB9c508B3a
Arg [1] : _agency (address): 0x3a666DbA5DDE8dAABFaAf2A931ac41f55f1Ac6b4
Arg [2] : _gov (address): 0x65e413F21BF468Fed23996A8E701dD67FDf22B83
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a
Arg [1] : 0000000000000000000000003a666dba5dde8daabfaaf2a931ac41f55f1ac6b4
Arg [2] : 00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
Loading...
Loading
Loading...
Loading
OVERVIEW
This contract manages all business logic related to Dyson Point calculations and controls the minting of DYSN tokens.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.