Source Code
Latest 25 from a total of 4,773 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 84399905 | 2 days ago | IN | 0 ETH | 0.00000843 | ||||
| Withdraw | 84398591 | 2 days ago | IN | 0 ETH | 0.00001105 | ||||
| Withdraw | 84397687 | 2 days ago | IN | 0 ETH | 0.00001103 | ||||
| Withdraw | 84304364 | 25 days ago | IN | 0 ETH | 0.00000616 | ||||
| Withdraw | 84175024 | 58 days ago | IN | 0 ETH | 0.00004114 | ||||
| Withdraw | 84081123 | 83 days ago | IN | 0 ETH | 0.00000609 | ||||
| Withdraw | 84029248 | 95 days ago | IN | 0 ETH | 0.00000608 | ||||
| Withdraw | 84029207 | 95 days ago | IN | 0 ETH | 0.00000608 | ||||
| Emergency Withdr... | 83931390 | 116 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83919906 | 119 days ago | IN | 0 ETH | 0.0000061 | ||||
| Withdraw | 83912189 | 120 days ago | IN | 0 ETH | 0.00000325 | ||||
| Emergency Withdr... | 83892662 | 125 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83840252 | 138 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83840246 | 138 days ago | IN | 0 ETH | 0.00000024 | ||||
| Emergency Withdr... | 83837573 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837557 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837547 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837473 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837470 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Emergency Withdr... | 83837326 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837183 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83837173 | 139 days ago | IN | 0 ETH | 0.00000024 | ||||
| Withdraw | 83755677 | 157 days ago | IN | 0 ETH | 0.00000608 | ||||
| Harvest | 83688791 | 176 days ago | IN | 0 ETH | 0.00000209 | ||||
| Withdraw | 83688780 | 176 days ago | IN | 0 ETH | 0.00000335 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MasterChef
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/IVestingMaster.sol";
// The Contract is a fork of MasterChef by SushiSwap
// The biggest change made is using per second instead of per block for rewards
// This is due to Arbitrum extremely inconsistent block times
// The other biggest change was the removal of the migration functions
//
// Note that it's ownable and the owner wields tremendous power. The ownership
// will be transferred to a governance smart contract once ARBS is sufficiently
// distributed and the community can show to govern itself.
//
// Have fun reading it. Hopefully it's bug-free.
contract MasterChef is Ownable {
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 boostAmount; // In order to give users higher reward
uint256 rewardDebt; // Reward debt.
uint256 lockStartTime;
uint256 lockEndTime;
}
// Info of each pool.
struct PoolInfo {
IERC20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. ARBSs to distribute per block.
uint256 lastRewardTime; // Last block time that ARBSs distribution occurs.
uint256 accArbsPerShare; // Accumulated ARBSs per share, times 1e12. See below.
bool lock;
uint256 maxLockDuration;
uint256 minLockDuration;
uint256 durationFactor;
uint256 boostWeight;
uint256 boostAmount;
}
// Arbswap Token
IERC20 public ARBS;
IVestingMaster public Vesting;
// Dev address.
address public devaddr;
// arbs tokens created per block.
uint256 public arbsPerSecond;
// set a max arbs per second, which can never be higher than 10 per second
uint256 public constant maxArbsPerSecond = 10e18;
uint256 public constant MaxAllocPoint = 40000000000000;
uint256 public constant PRECISION = 1e12;
uint256 public constant MAX_BOOST_WEIGHT = 50e12; // 5000%
uint256 public constant MIN_BOOST_WEIGHT = 1e12; //100%
// Info of each pool.
PoolInfo[] public poolInfo;
// Record whether pool is whitelist
mapping(uint256 => bool) isWhitelistPool;
// Record whether LP was added.
mapping(address => bool) public LPTokenAdded;
// Info of each user that stakes LP tokens.
mapping(uint256 => mapping(address => UserInfo)) public userInfo;
// Total allocation points. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block time when arbs mining starts.
uint256 public immutable startTime;
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event DepositLockPool(address indexed user, uint256 indexed pid, uint256 amount, uint256 boostAmount, uint256 start, uint256 end);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
event NewVesting(address indexed vesting);
event Harvest(address indexed user, uint256 pid, uint256 pending);
event NewArbsPerSecond(uint256 arbsPerSecond);
event NewWhitelist(uint256 pid, bool valid);
constructor(IERC20 _arbs, address _devaddr, uint256 _arbsPerSecond, uint256 _startTime) {
ARBS = _arbs;
devaddr = _devaddr;
arbsPerSecond = _arbsPerSecond;
startTime = _startTime;
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
function setVesting(address _vesting) external onlyOwner {
// Vesing can be zero address when we do not need vesting.
Vesting = IVestingMaster(_vesting);
emit NewVesting(_vesting);
}
function setWhitelistPool(uint256 _pid, bool _isValid) external onlyOwner {
isWhitelistPool[_pid] = _isValid;
emit NewWhitelist(_pid, _isValid);
}
// Changes arbs token reward per second, with a cap of maxarbs per second
// Good practice to update pools without messing up the contract
function setArbsPerSecond(uint256 _arbsPerSecond, bool _withUpdate) external onlyOwner {
require(_arbsPerSecond <= maxArbsPerSecond, "setArbsPerSecond: too many arbs!");
// This MUST be done or pool rewards will be calculated with new arbs per second
// This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests
if (_withUpdate) {
massUpdatePools();
}
arbsPerSecond = _arbsPerSecond;
emit NewArbsPerSecond(_arbsPerSecond);
}
// Add a new lp to the pool. Can only be called by the owner.
function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate, bool _lock, uint256 _maxLockDuration, uint256 _minLockDuration, uint256 _durationFactor, uint256 _boostWeight) external onlyOwner {
require(_allocPoint <= MaxAllocPoint, "add: too many alloc points!!");
if (_lock) {
require(_boostWeight >= MIN_BOOST_WEIGHT && _boostWeight <= MAX_BOOST_WEIGHT, "_boostWeight must be between MIN_BOOST_WEIGHT and MAX_BOOST_WEIGHT");
require(_minLockDuration > 0 && _maxLockDuration > _minLockDuration, "Invalid duration");
require(_durationFactor > 0, "_durationFactor can not be zero");
}
// ensure you can not add duplicate pools
require(!LPTokenAdded[address(_lpToken)], "Pool already exists!!!!");
LPTokenAdded[address(_lpToken)] = true;
if (_withUpdate) {
massUpdatePools();
}
uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime;
totalAllocPoint += _allocPoint;
poolInfo.push(PoolInfo({lpToken: _lpToken, allocPoint: _allocPoint, lastRewardTime: lastRewardTime, accArbsPerShare: 0, lock: _lock, maxLockDuration: _maxLockDuration, minLockDuration: _minLockDuration, durationFactor: _durationFactor, boostWeight: _boostWeight, boostAmount: 0}));
}
// Update the given pool's ARBS allocation point. Can only be called by the owner.
function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) external onlyOwner {
require(_allocPoint <= MaxAllocPoint, "add: too many alloc points!!");
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint;
poolInfo[_pid].allocPoint = _allocPoint;
}
function set(uint256 _pid, bool _withUpdate, uint256 _maxLockDuration, uint256 _minLockDuration, uint256 _durationFactor, uint256 _boostWeight) external onlyOwner {
PoolInfo storage pool = poolInfo[_pid];
require(pool.lock, "Not lock pool");
require(_boostWeight >= MIN_BOOST_WEIGHT && _boostWeight <= MAX_BOOST_WEIGHT, "_boostWeight must be between MIN_BOOST_WEIGHT and MAX_BOOST_WEIGHT");
require(_minLockDuration > 0 && _maxLockDuration > _minLockDuration, "Invalid duration");
require(_durationFactor > 0, "_durationFactor can not be zero");
if (_withUpdate) {
massUpdatePools();
}
pool.maxLockDuration = _maxLockDuration;
pool.minLockDuration = _minLockDuration;
pool.durationFactor = _durationFactor;
pool.boostWeight = _boostWeight;
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
_from = _from > startTime ? _from : startTime;
if (_to < startTime) {
return 0;
}
return _to - _from;
}
// View function to see pending ARBSs on frontend.
function pendingARBS(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accArbsPerShare = pool.accArbsPerShare;
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (pool.lock) {
lpSupply = pool.boostAmount;
}
if (block.timestamp > pool.lastRewardTime && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
uint256 arbsReward = (multiplier * arbsPerSecond * (pool.allocPoint)) / totalAllocPoint;
accArbsPerShare += (arbsReward * PRECISION) / lpSupply;
}
if (pool.lock) {
return (user.boostAmount * accArbsPerShare) / PRECISION - user.rewardDebt;
} else {
return (user.amount * accArbsPerShare) / PRECISION - user.rewardDebt;
}
}
// Update reward variables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.timestamp <= pool.lastRewardTime) {
return;
}
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (lpSupply == 0) {
pool.lastRewardTime = block.timestamp;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
uint256 arbsReward = (multiplier * arbsPerSecond * pool.allocPoint) / totalAllocPoint;
// ARBS.mintByLiquidityMining(devaddr, arbsReward / 10);
// ARBS.mintByLiquidityMining(address(this), arbsReward)
ARBS.safeTransfer(devaddr, arbsReward / 10);
if (pool.lock) {
lpSupply = pool.boostAmount;
}
pool.accArbsPerShare += (arbsReward * PRECISION) / lpSupply;
pool.lastRewardTime = block.timestamp;
}
// Deposit LP tokens to MasterChef flexiable pool for ARBS allocation.
function depositFlexible(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
require(!pool.lock, "Lock pool");
updatePool(_pid);
uint256 pending = (user.amount * pool.accArbsPerShare) / PRECISION - user.rewardDebt;
user.amount += _amount;
user.rewardDebt = (user.amount * pool.accArbsPerShare) / PRECISION;
if (pending > 0) {
safeArbsTransfer(msg.sender, pending);
emit Harvest(msg.sender, _pid, pending);
}
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
emit Deposit(msg.sender, _pid, _amount);
}
// Deposit LP tokens to MasterChef lock pool for ARBS allocation.
function depositLocked(uint256 _pid, uint256 _amount, uint256 _duration) public {
PoolInfo storage pool = poolInfo[_pid];
require(pool.lock, "Not lock pool");
UserInfo storage user = userInfo[_pid][msg.sender];
if (user.amount > 0) {
require(_amount > 0 || _duration > 0, "_amount and _duration can not be zero at the same time");
} else {
require(_amount > 0 && _duration > 0, "_amount and _duration can not be zero");
}
updatePool(_pid);
uint256 totalLockDuration = _duration;
if (user.lockEndTime >= block.timestamp) {
if (_amount > 0) {
user.lockStartTime = block.timestamp;
}
totalLockDuration += user.lockEndTime - user.lockStartTime;
} else {
user.lockStartTime = block.timestamp;
}
if (totalLockDuration < pool.minLockDuration) {
totalLockDuration = pool.minLockDuration;
}
if (totalLockDuration > pool.maxLockDuration) {
totalLockDuration = pool.maxLockDuration;
}
user.lockEndTime = user.lockStartTime + totalLockDuration;
uint256 pending = (user.boostAmount * pool.accArbsPerShare) / PRECISION - user.rewardDebt;
pool.boostAmount -= user.boostAmount;
user.amount += _amount;
user.boostAmount = (user.amount * totalLockDuration * pool.boostWeight) / pool.durationFactor / PRECISION;
user.rewardDebt = (user.boostAmount * pool.accArbsPerShare) / PRECISION;
pool.boostAmount += user.boostAmount;
if (pending > 0) {
safeArbsTransfer(msg.sender, pending);
emit Harvest(msg.sender, _pid, pending);
}
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
emit DepositLockPool(msg.sender, _pid, _amount, user.boostAmount, user.lockStartTime, user.lockEndTime);
}
// Harvest Arbs from pool.
function harvest(uint256 _pid) external {
UserInfo storage user = userInfo[_pid][msg.sender];
require(user.amount > 0, "No LP");
PoolInfo storage pool = poolInfo[_pid];
updatePool(_pid);
uint256 userReward;
if (pool.lock) {
userReward = (user.boostAmount * pool.accArbsPerShare) / PRECISION;
} else {
userReward = (user.amount * pool.accArbsPerShare) / PRECISION;
}
uint256 pending = userReward - user.rewardDebt;
user.rewardDebt = userReward;
if (pending > 0) {
safeArbsTransfer(msg.sender, pending);
}
emit Harvest(msg.sender, _pid, pending);
}
// Withdraw LP tokens from MasterChef.
function withdraw(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
if (pool.lock) {
require(user.lockEndTime < block.timestamp, "Still in lock");
}
require(user.amount >= _amount, "withdraw: not good");
updatePool(_pid);
uint256 pending;
if (pool.lock) {
pending = (user.boostAmount * pool.accArbsPerShare) / PRECISION - user.rewardDebt;
pool.boostAmount -= user.boostAmount;
} else {
pending = (user.amount * pool.accArbsPerShare) / PRECISION - user.rewardDebt;
}
user.amount -= _amount;
if (pool.lock) {
user.boostAmount = user.amount;
pool.boostAmount += user.boostAmount;
user.lockStartTime = 0;
user.lockEndTime = 0;
}
user.rewardDebt = (user.amount * pool.accArbsPerShare) / PRECISION;
if (pending > 0) {
safeArbsTransfer(msg.sender, pending);
emit Harvest(msg.sender, _pid, pending);
}
pool.lpToken.safeTransfer(address(msg.sender), _amount);
emit Withdraw(msg.sender, _pid, _amount);
}
// Withdraw without caring about rewards, Only for whitelist pool. EMERGENCY ONLY.
function emergencyWithdraw(uint256 _pid) public {
require(isWhitelistPool[_pid], "Not whitelist");
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
uint256 withdrawAmount = user.amount;
user.amount = 0;
user.rewardDebt = 0;
pool.lpToken.safeTransfer(address(msg.sender), withdrawAmount);
emit EmergencyWithdraw(msg.sender, _pid, withdrawAmount);
}
// Safe arbs transfer function, just in case if rounding error causes pool to not have enough ARBSs.
function safeArbsTransfer(address _to, uint256 _amount) internal {
uint256 arbsBal = ARBS.balanceOf(address(this));
uint256 amount = _amount;
if (_amount > arbsBal) {
amount = arbsBal;
}
if (address(Vesting) != address(0)) {
IERC20(address(ARBS)).safeTransfer(address(Vesting), amount);
Vesting.lock(msg.sender, amount);
} else {
IERC20(address(ARBS)).safeTransfer(_to, amount);
}
}
// Update dev address by the previous dev.
function dev(address _devaddr) public {
require(msg.sender == devaddr, "dev: wut?");
devaddr = _devaddr;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Compatible with tokens that require the approval to be set to
* 0 before setting it to a non-zero value.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
* Revert on invalid signature.
*/
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return
success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IVestingMaster {
struct LockedReward {
uint256 locked;
uint256 timestamp;
}
// ----------- Events -----------
event Lock(address indexed user, uint256 amount);
event Claim(address indexed user, uint256 amount);
// ----------- Farms only State changing api -----------
function lock(address, uint256) external;
// ----------- state changing API -----------
function claim() external;
// ----------- Getters -----------
function period() external view returns (uint256);
function lockedPeriodAmount() external view returns (uint256);
function vestingToken() external view returns (address);
function userLockedRewards(address account, uint256 idx) external view returns (uint256, uint256);
function totalLockedRewards() external view returns (uint256);
function getVestingAmount() external view returns (uint256, uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_arbs","type":"address"},{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"uint256","name":"_arbsPerSecond","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boostAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"}],"name":"DepositLockPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pending","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"arbsPerSecond","type":"uint256"}],"name":"NewArbsPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vesting","type":"address"}],"name":"NewVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"NewWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ARBS","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LPTokenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOOST_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BOOST_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Vesting","outputs":[{"internalType":"contract IVestingMaster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"bool","name":"_lock","type":"bool"},{"internalType":"uint256","name":"_maxLockDuration","type":"uint256"},{"internalType":"uint256","name":"_minLockDuration","type":"uint256"},{"internalType":"uint256","name":"_durationFactor","type":"uint256"},{"internalType":"uint256","name":"_boostWeight","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arbsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositFlexible","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"depositLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxArbsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingARBS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accArbsPerShare","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"},{"internalType":"uint256","name":"maxLockDuration","type":"uint256"},{"internalType":"uint256","name":"minLockDuration","type":"uint256"},{"internalType":"uint256","name":"durationFactor","type":"uint256"},{"internalType":"uint256","name":"boostWeight","type":"uint256"},{"internalType":"uint256","name":"boostAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_maxLockDuration","type":"uint256"},{"internalType":"uint256","name":"_minLockDuration","type":"uint256"},{"internalType":"uint256","name":"_durationFactor","type":"uint256"},{"internalType":"uint256","name":"_boostWeight","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_arbsPerSecond","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setArbsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vesting","type":"address"}],"name":"setVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_isValid","type":"bool"}],"name":"setWhitelistPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"boostAmount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"lockStartTime","type":"uint256"},{"internalType":"uint256","name":"lockEndTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a060405260006009553480156200001657600080fd5b50604051620026d3380380620026d38339810160408190526200003991620000ec565b620000443362000083565b600180546001600160a01b039586166001600160a01b031991821617909155600380549490951693169290921790925560049190915560805262000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000e957600080fd5b50565b600080600080608085870312156200010357600080fd5b84516200011081620000d3565b60208601519094506200012381620000d3565b6040860151606090960151949790965092505050565b60805161255b6200017860003960008181610382015281816109e501528181610a0c015281816114ef015281816115160152611540015261255b6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806378e979251161011a5780639ff587de116100ad578063cdb28d761161007c578063cdb28d76146104e1578063d49e77cd146104f4578063ddc6326214610507578063f2fde38b1461051a578063f4b83c4c1461052d57600080fd5b80639ff587de146104ae578063a7f91fd9146104c1578063aaf5eb68146102ba578063b13ef343146104ce57600080fd5b806390556976116100e957806390556976146103ef57806390d6e1ab1461040257806393f1a40b146104355780639e98838b146104a557600080fd5b806378e979251461037d5780638d88a90e146103a45780638da5cb5b146103b75780638dbb1e3a146103dc57600080fd5b8063441a3e701161019d578063630b5ba11161016c578063630b5ba11461033457806364482f791461033c5780636f6ff3bc1461034f578063715018a61461036257806371bfcfa31461036a57600080fd5b8063441a3e70146102e8578063494826c3146102fb57806351eb05a61461030e5780635312ea8e1461032157600080fd5b806317caf6f1116101d957806317caf6f1146102b157806320337ca7146102ba578063261ba679146102c65780632fb00db8146102d557600080fd5b80630550a3111461020b578063081e3eda1461022057806313e8e707146102375780631526fe271461024a575b600080fd5b61021e610219366004612147565b61053a565b005b6005545b6040519081526020015b60405180910390f35b61022461024536600461218c565b6105ea565b61025d6102583660046121b1565b61079c565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452911515608087015260a086015260c085015260e08401526101008301526101208201526101400161022e565b61022460095481565b61022464e8d4a5100081565b610224678ac7230489e8000081565b61021e6102e33660046121ca565b61080e565b61021e6102f6366004612241565b610c58565b61021e610309366004612147565b610edd565b61021e61031c3660046121b1565b610f37565b61021e61032f3660046121b1565b6110af565b61021e61119f565b61021e61034a366004612263565b6111ca565b61021e61035d36600461229c565b6112a7565b61021e6112f9565b61021e6103783660046122b9565b61130d565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b61021e6103b236600461229c565b611483565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161022e565b6102246103ea366004612241565b6114eb565b61021e6103fd366004612241565b61157f565b61042561041036600461229c565b60076020526000908152604090205460ff1681565b604051901515815260200161022e565b61047d61044336600461218c565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161022e565b61022460045481565b6001546103c4906001600160a01b031681565b610224652d79883d200081565b6002546103c4906001600160a01b031681565b61021e6104ef366004612309565b611703565b6003546103c4906001600160a01b031681565b61021e6105153660046121b1565b611aae565b61021e61052836600461229c565b611be5565b61022465246139ca800081565b610542611c5e565b678ac7230489e8000082111561059f5760405162461bcd60e51b815260206004820181905260248201527f736574417262735065725365636f6e643a20746f6f206d616e7920617262732160448201526064015b60405180910390fd5b80156105ad576105ad61119f565b60048290556040518281527f162550eac5c23b073adb991c7762f5988494800d45d2a5d275eb4d140134e53b906020015b60405180910390a15050565b6000806005848154811061060057610600612335565b600091825260208083208784526008825260408085206001600160a01b0389811687529352808520600a949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a0823190602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f919061234b565b600485015490915060ff16156106b6575060098301545b8360020154421180156106c857508015155b156107365760006106dd8560020154426114eb565b905060006009548660010154600454846106f7919061237a565b610701919061237a565b61070b9190612399565b90508261071d64e8d4a510008361237a565b6107279190612399565b61073190856123bb565b935050505b600484015460ff161561077d57826002015464e8d4a5100083856001015461075e919061237a565b6107689190612399565b61077291906123d3565b945050505050610796565b6002830154835464e8d4a510009061075e90859061237a565b92915050565b600581815481106107ac57600080fd5b60009182526020909120600a909102018054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b03909816995095979496939560ff909316949193909291908a565b610816611c5e565b65246139ca800088111561086c5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20746f6f206d616e7920616c6c6f6320706f696e74732121000000006044820152606401610596565b84156109475764e8d4a51000811015801561088d5750652d79883d20008111155b6108a95760405162461bcd60e51b8152600401610596906123ea565b6000831180156108b857508284115b6108f75760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610596565b600082116109475760405162461bcd60e51b815260206004820152601f60248201527f5f6475726174696f6e466163746f722063616e206e6f74206265207a65726f006044820152606401610596565b6001600160a01b03871660009081526007602052604090205460ff16156109b05760405162461bcd60e51b815260206004820152601760248201527f506f6f6c20616c726561647920657869737473212121210000000000000000006044820152606401610596565b6001600160a01b0387166000908152600760205260409020805460ff1916600117905585156109e1576109e161119f565b60007f00000000000000000000000000000000000000000000000000000000000000004211610a30577f0000000000000000000000000000000000000000000000000000000000000000610a32565b425b90508860096000828254610a4691906123bb565b909155505060408051610140810182526001600160a01b03998a168152602081019a8b529081019182526000606082018181529715156080830190815260a0830197885260c0830196875260e083019586526101008301948552610120830182815260058054600181018255935292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600a90930292830180546001600160a01b03191691909c1617909a5599517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db18b015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28a015594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db389015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48801805460ff191691151591909117905591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5870155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db6860155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db785015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db884015550517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db990910155565b600060058381548110610c6d57610c6d612335565b6000918252602080832086845260088252604080852033865290925292206004600a9092029092019081015490925060ff1615610ce75742816004015410610ce75760405162461bcd60e51b815260206004820152600d60248201526c5374696c6c20696e206c6f636b60981b6044820152606401610596565b8054831115610d2d5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b6044820152606401610596565b610d3684610f37565b600482015460009060ff1615610d9e57816002015464e8d4a5100084600301548460010154610d65919061237a565b610d6f9190612399565b610d7991906123d3565b90508160010154836009016000828254610d9391906123d3565b90915550610dd19050565b60028201546003840154835464e8d4a5100091610dba9161237a565b610dc49190612399565b610dce91906123d3565b90505b83826000016000828254610de591906123d3565b9091555050600483015460ff1615610e2857815460018301819055600984018054600090610e149084906123bb565b909155505060006003830181905560048301555b6003830154825464e8d4a5100091610e3f9161237a565b610e499190612399565b60028301558015610e8857610e5e3382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25b8254610e9e906001600160a01b03163386611de7565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050505050565b610ee5611c5e565b600082815260066020908152604091829020805460ff19168415159081179091558251858152918201527f703028f430257b20ed02870d47abc8a4f7676233bc126bd176335949d2803e2991016105de565b600060058281548110610f4c57610f4c612335565b90600052602060002090600a0201905080600201544211610f6b575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd7919061234b565b905080610fe957504260029091015550565b6000610ff98360020154426114eb565b90506000600954846001015460045484611013919061237a565b61101d919061237a565b6110279190612399565b600354909150611058906001600160a01b0316611045600a84612399565b6001546001600160a01b03169190611de7565b600484015460ff161561106d57836009015492505b8261107d64e8d4a510008361237a565b6110879190612399565b84600301600082825461109a91906123bb565b90915550504260029094019390935550505050565b60008181526006602052604090205460ff166110fd5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081dda1a5d195b1a5cdd609a1b6044820152606401610596565b60006005828154811061111257611112612335565b60009182526020808320858452600882526040808520338087529352842080548582556002820195909555600a909302018054909450919291611162916001600160a01b03919091169083611de7565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a350505050565b60055460005b818110156111c6576111b681610f37565b6111bf81612452565b90506111a5565b5050565b6111d2611c5e565b65246139ca80008211156112285760405162461bcd60e51b815260206004820152601c60248201527f6164643a20746f6f206d616e7920616c6c6f6320706f696e74732121000000006044820152606401610596565b80156112365761123661119f565b816005848154811061124a5761124a612335565b90600052602060002090600a02016001015460095461126991906123d3565b61127391906123bb565b600981905550816005848154811061128d5761128d612335565b90600052602060002090600a020160010181905550505050565b6112af611c5e565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8d0bc9dd72731d0219ff4d17b234753f44e08f21d14d07a528dcf3ebe7931f2090600090a250565b611301611c5e565b61130b6000611e4f565b565b611315611c5e565b60006005878154811061132a5761132a612335565b60009182526020909120600a90910201600481015490915060ff166113815760405162461bcd60e51b815260206004820152600d60248201526c139bdd081b1bd8dac81c1bdbdb609a1b6044820152606401610596565b64e8d4a51000821015801561139c5750652d79883d20008211155b6113b85760405162461bcd60e51b8152600401610596906123ea565b6000841180156113c757508385115b6114065760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610596565b600083116114565760405162461bcd60e51b815260206004820152601f60248201527f5f6475726174696f6e466163746f722063616e206e6f74206265207a65726f006044820152606401610596565b85156114645761146461119f565b6005810194909455600684019290925560078301556008909101555050565b6003546001600160a01b031633146114c95760405162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b6044820152606401610596565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60007f0000000000000000000000000000000000000000000000000000000000000000831161153a577f000000000000000000000000000000000000000000000000000000000000000061153c565b825b92507f000000000000000000000000000000000000000000000000000000000000000082101561156e57506000610796565b61157883836123d3565b9392505050565b60006005838154811061159457611594612335565b6000918252602080832086845260088252604080852033865290925292206004600a9092029092019081015490925060ff16156115ff5760405162461bcd60e51b8152602060048201526009602482015268131bd8dac81c1bdbdb60ba1b6044820152606401610596565b61160884610f37565b6000816002015464e8d4a5100084600301548460000154611629919061237a565b6116339190612399565b61163d91906123d3565b90508382600001600082825461165391906123bb565b90915550506003830154825464e8d4a510009161166f9161237a565b6116799190612399565b600283015580156116b85761168e3382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25b82546116cf906001600160a01b0316333087611e9f565b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610ece565b60006005848154811061171857611718612335565b60009182526020909120600a90910201600481015490915060ff1661176f5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081b1bd8dac81c1bdbdb609a1b6044820152606401610596565b6000848152600860209081526040808320338452909152902080541561180e57600084118061179e5750600083115b6118095760405162461bcd60e51b815260206004820152603660248201527f5f616d6f756e7420616e64205f6475726174696f6e2063616e206e6f74206265604482015275207a65726f206174207468652073616d652074696d6560501b6064820152608401610596565b611878565b60008411801561181e5750600083115b6118785760405162461bcd60e51b815260206004820152602560248201527f5f616d6f756e7420616e64205f6475726174696f6e2063616e206e6f74206265604482015264207a65726f60d81b6064820152608401610596565b61188185610f37565b6004810154839042116118c057841561189b574260038301555b816003015482600401546118af91906123d3565b6118b990826123bb565b90506118c7565b4260038301555b82600601548110156118da575060068201545b82600501548111156118ed575060058201545b8082600301546118fd91906123bb565b82600401819055506000826002015464e8d4a5100085600301548560010154611926919061237a565b6119309190612399565b61193a91906123d3565b9050826001015484600901600082825461195491906123d3565b909155505082548690849060009061196d9084906123bb565b909155505060078401546008850154845464e8d4a5100092919061199290869061237a565b61199c919061237a565b6119a69190612399565b6119b09190612399565b60018401819055600385015464e8d4a51000916119cd919061237a565b6119d79190612399565b600284015560018301546009850180546000906119f59084906123bb565b90915550508015611a3457611a0a3382611cb8565b60408051888152602081018390523391600080516020612506833981519152910160405180910390a25b8354611a4b906001600160a01b0316333089611e9f565b600183015460038401546004850154604080518a815260208101949094528301919091526060820152879033907f932c42744bf389fceab528d858168336aae1131298b71f5850d20bd5df97b7939060800160405180910390a350505050505050565b600081815260086020908152604080832033845290915290208054611afd5760405162461bcd60e51b815260206004820152600560248201526404e6f204c560dc1b6044820152606401610596565b600060058381548110611b1257611b12612335565b90600052602060002090600a02019050611b2b83610f37565b600481015460009060ff1615611b665764e8d4a5100082600301548460010154611b55919061237a565b611b5f9190612399565b9050611b8a565b6003820154835464e8d4a5100091611b7d9161237a565b611b879190612399565b90505b6000836002015482611b9c91906123d3565b6002850183905590508015611bb557611bb53382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25050505050565b611bed611c5e565b6001600160a01b038116611c525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610596565b611c5b81611e4f565b50565b6000546001600160a01b0316331461130b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610596565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d25919061234b565b90508181811115611d335750805b6002546001600160a01b031615611dca57600254600154611d61916001600160a01b03918216911683611de7565b60025460405163282d3fdf60e01b8152336004820152602481018390526001600160a01b039091169063282d3fdf90604401600060405180830381600087803b158015611dad57600080fd5b505af1158015611dc1573d6000803e3d6000fd5b50505050611de1565b600154611de1906001600160a01b03168583611de7565b50505050565b6040516001600160a01b038316602482015260448101829052611e4a90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed7565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052611de19085906323b872dd60e01b90608401611e13565b6000611f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fac9092919063ffffffff16565b9050805160001480611f4d575080806020019051810190611f4d919061246d565b611e4a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610596565b6060611fbb8484600085611fc3565b949350505050565b6060824710156120245760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610596565b600080866001600160a01b0316858760405161204091906124b6565b60006040518083038185875af1925050503d806000811461207d576040519150601f19603f3d011682016040523d82523d6000602084013e612082565b606091505b50915091506120938783838761209e565b979650505050505050565b6060831561210a578251612103576001600160a01b0385163b6121035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610596565b5081611fbb565b611fbb838381511561211f5781518083602001fd5b8060405162461bcd60e51b815260040161059691906124d2565b8015158114611c5b57600080fd5b6000806040838503121561215a57600080fd5b82359150602083013561216c81612139565b809150509250929050565b6001600160a01b0381168114611c5b57600080fd5b6000806040838503121561219f57600080fd5b82359150602083013561216c81612177565b6000602082840312156121c357600080fd5b5035919050565b600080600080600080600080610100898b0312156121e757600080fd5b8835975060208901356121f981612177565b9650604089013561220981612139565b9550606089013561221981612139565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b6000806040838503121561225457600080fd5b50508035926020909101359150565b60008060006060848603121561227857600080fd5b8335925060208401359150604084013561229181612139565b809150509250925092565b6000602082840312156122ae57600080fd5b813561157881612177565b60008060008060008060c087890312156122d257600080fd5b8635955060208701356122e481612139565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60008060006060848603121561231e57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561239457612394612364565b500290565b6000826123b657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123ce576123ce612364565b500190565b6000828210156123e5576123e5612364565b500390565b60208082526042908201527f5f626f6f7374576569676874206d757374206265206265747765656e204d494e60408201527f5f424f4f53545f57454947485420616e64204d41585f424f4f53545f57454947606082015261121560f21b608082015260a00190565b600060001982141561246657612466612364565b5060010190565b60006020828403121561247f57600080fd5b815161157881612139565b60005b838110156124a557818101518382015260200161248d565b83811115611de15750506000910152565b600082516124c881846020870161248a565b9190910192915050565b60208152600082518060208401526124f181604085016020870161248a565b601f01601f1916919091016040019291505056fe71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954a26469706673582212202b786ef8fbfb01ff7b32d647924479c2a3c630ce4aee7ec3a15b93d3900a513564736f6c634300080c0033000000000000000000000000898531b625d5f2cf57de991e690dd23bb4367dfa000000000000000000000000d7878bdcb6aae569dcd19bda1b29ca3ae4516e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000651a0800
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c806378e979251161011a5780639ff587de116100ad578063cdb28d761161007c578063cdb28d76146104e1578063d49e77cd146104f4578063ddc6326214610507578063f2fde38b1461051a578063f4b83c4c1461052d57600080fd5b80639ff587de146104ae578063a7f91fd9146104c1578063aaf5eb68146102ba578063b13ef343146104ce57600080fd5b806390556976116100e957806390556976146103ef57806390d6e1ab1461040257806393f1a40b146104355780639e98838b146104a557600080fd5b806378e979251461037d5780638d88a90e146103a45780638da5cb5b146103b75780638dbb1e3a146103dc57600080fd5b8063441a3e701161019d578063630b5ba11161016c578063630b5ba11461033457806364482f791461033c5780636f6ff3bc1461034f578063715018a61461036257806371bfcfa31461036a57600080fd5b8063441a3e70146102e8578063494826c3146102fb57806351eb05a61461030e5780635312ea8e1461032157600080fd5b806317caf6f1116101d957806317caf6f1146102b157806320337ca7146102ba578063261ba679146102c65780632fb00db8146102d557600080fd5b80630550a3111461020b578063081e3eda1461022057806313e8e707146102375780631526fe271461024a575b600080fd5b61021e610219366004612147565b61053a565b005b6005545b6040519081526020015b60405180910390f35b61022461024536600461218c565b6105ea565b61025d6102583660046121b1565b61079c565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452911515608087015260a086015260c085015260e08401526101008301526101208201526101400161022e565b61022460095481565b61022464e8d4a5100081565b610224678ac7230489e8000081565b61021e6102e33660046121ca565b61080e565b61021e6102f6366004612241565b610c58565b61021e610309366004612147565b610edd565b61021e61031c3660046121b1565b610f37565b61021e61032f3660046121b1565b6110af565b61021e61119f565b61021e61034a366004612263565b6111ca565b61021e61035d36600461229c565b6112a7565b61021e6112f9565b61021e6103783660046122b9565b61130d565b6102247f00000000000000000000000000000000000000000000000000000000651a080081565b61021e6103b236600461229c565b611483565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161022e565b6102246103ea366004612241565b6114eb565b61021e6103fd366004612241565b61157f565b61042561041036600461229c565b60076020526000908152604090205460ff1681565b604051901515815260200161022e565b61047d61044336600461218c565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161022e565b61022460045481565b6001546103c4906001600160a01b031681565b610224652d79883d200081565b6002546103c4906001600160a01b031681565b61021e6104ef366004612309565b611703565b6003546103c4906001600160a01b031681565b61021e6105153660046121b1565b611aae565b61021e61052836600461229c565b611be5565b61022465246139ca800081565b610542611c5e565b678ac7230489e8000082111561059f5760405162461bcd60e51b815260206004820181905260248201527f736574417262735065725365636f6e643a20746f6f206d616e7920617262732160448201526064015b60405180910390fd5b80156105ad576105ad61119f565b60048290556040518281527f162550eac5c23b073adb991c7762f5988494800d45d2a5d275eb4d140134e53b906020015b60405180910390a15050565b6000806005848154811061060057610600612335565b600091825260208083208784526008825260408085206001600160a01b0389811687529352808520600a949094029091016003810154815492516370a0823160e01b815230600482015291965093949291909116906370a0823190602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f919061234b565b600485015490915060ff16156106b6575060098301545b8360020154421180156106c857508015155b156107365760006106dd8560020154426114eb565b905060006009548660010154600454846106f7919061237a565b610701919061237a565b61070b9190612399565b90508261071d64e8d4a510008361237a565b6107279190612399565b61073190856123bb565b935050505b600484015460ff161561077d57826002015464e8d4a5100083856001015461075e919061237a565b6107689190612399565b61077291906123d3565b945050505050610796565b6002830154835464e8d4a510009061075e90859061237a565b92915050565b600581815481106107ac57600080fd5b60009182526020909120600a909102018054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b03909816995095979496939560ff909316949193909291908a565b610816611c5e565b65246139ca800088111561086c5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20746f6f206d616e7920616c6c6f6320706f696e74732121000000006044820152606401610596565b84156109475764e8d4a51000811015801561088d5750652d79883d20008111155b6108a95760405162461bcd60e51b8152600401610596906123ea565b6000831180156108b857508284115b6108f75760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610596565b600082116109475760405162461bcd60e51b815260206004820152601f60248201527f5f6475726174696f6e466163746f722063616e206e6f74206265207a65726f006044820152606401610596565b6001600160a01b03871660009081526007602052604090205460ff16156109b05760405162461bcd60e51b815260206004820152601760248201527f506f6f6c20616c726561647920657869737473212121210000000000000000006044820152606401610596565b6001600160a01b0387166000908152600760205260409020805460ff1916600117905585156109e1576109e161119f565b60007f00000000000000000000000000000000000000000000000000000000651a08004211610a30577f00000000000000000000000000000000000000000000000000000000651a0800610a32565b425b90508860096000828254610a4691906123bb565b909155505060408051610140810182526001600160a01b03998a168152602081019a8b529081019182526000606082018181529715156080830190815260a0830197885260c0830196875260e083019586526101008301948552610120830182815260058054600181018255935292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600a90930292830180546001600160a01b03191691909c1617909a5599517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db18b015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28a015594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db389015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48801805460ff191691151591909117905591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5870155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db6860155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db785015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db884015550517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db990910155565b600060058381548110610c6d57610c6d612335565b6000918252602080832086845260088252604080852033865290925292206004600a9092029092019081015490925060ff1615610ce75742816004015410610ce75760405162461bcd60e51b815260206004820152600d60248201526c5374696c6c20696e206c6f636b60981b6044820152606401610596565b8054831115610d2d5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b6044820152606401610596565b610d3684610f37565b600482015460009060ff1615610d9e57816002015464e8d4a5100084600301548460010154610d65919061237a565b610d6f9190612399565b610d7991906123d3565b90508160010154836009016000828254610d9391906123d3565b90915550610dd19050565b60028201546003840154835464e8d4a5100091610dba9161237a565b610dc49190612399565b610dce91906123d3565b90505b83826000016000828254610de591906123d3565b9091555050600483015460ff1615610e2857815460018301819055600984018054600090610e149084906123bb565b909155505060006003830181905560048301555b6003830154825464e8d4a5100091610e3f9161237a565b610e499190612399565b60028301558015610e8857610e5e3382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25b8254610e9e906001600160a01b03163386611de7565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050505050565b610ee5611c5e565b600082815260066020908152604091829020805460ff19168415159081179091558251858152918201527f703028f430257b20ed02870d47abc8a4f7676233bc126bd176335949d2803e2991016105de565b600060058281548110610f4c57610f4c612335565b90600052602060002090600a0201905080600201544211610f6b575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd7919061234b565b905080610fe957504260029091015550565b6000610ff98360020154426114eb565b90506000600954846001015460045484611013919061237a565b61101d919061237a565b6110279190612399565b600354909150611058906001600160a01b0316611045600a84612399565b6001546001600160a01b03169190611de7565b600484015460ff161561106d57836009015492505b8261107d64e8d4a510008361237a565b6110879190612399565b84600301600082825461109a91906123bb565b90915550504260029094019390935550505050565b60008181526006602052604090205460ff166110fd5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081dda1a5d195b1a5cdd609a1b6044820152606401610596565b60006005828154811061111257611112612335565b60009182526020808320858452600882526040808520338087529352842080548582556002820195909555600a909302018054909450919291611162916001600160a01b03919091169083611de7565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a350505050565b60055460005b818110156111c6576111b681610f37565b6111bf81612452565b90506111a5565b5050565b6111d2611c5e565b65246139ca80008211156112285760405162461bcd60e51b815260206004820152601c60248201527f6164643a20746f6f206d616e7920616c6c6f6320706f696e74732121000000006044820152606401610596565b80156112365761123661119f565b816005848154811061124a5761124a612335565b90600052602060002090600a02016001015460095461126991906123d3565b61127391906123bb565b600981905550816005848154811061128d5761128d612335565b90600052602060002090600a020160010181905550505050565b6112af611c5e565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8d0bc9dd72731d0219ff4d17b234753f44e08f21d14d07a528dcf3ebe7931f2090600090a250565b611301611c5e565b61130b6000611e4f565b565b611315611c5e565b60006005878154811061132a5761132a612335565b60009182526020909120600a90910201600481015490915060ff166113815760405162461bcd60e51b815260206004820152600d60248201526c139bdd081b1bd8dac81c1bdbdb609a1b6044820152606401610596565b64e8d4a51000821015801561139c5750652d79883d20008211155b6113b85760405162461bcd60e51b8152600401610596906123ea565b6000841180156113c757508385115b6114065760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606401610596565b600083116114565760405162461bcd60e51b815260206004820152601f60248201527f5f6475726174696f6e466163746f722063616e206e6f74206265207a65726f006044820152606401610596565b85156114645761146461119f565b6005810194909455600684019290925560078301556008909101555050565b6003546001600160a01b031633146114c95760405162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b6044820152606401610596565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60007f00000000000000000000000000000000000000000000000000000000651a0800831161153a577f00000000000000000000000000000000000000000000000000000000651a080061153c565b825b92507f00000000000000000000000000000000000000000000000000000000651a080082101561156e57506000610796565b61157883836123d3565b9392505050565b60006005838154811061159457611594612335565b6000918252602080832086845260088252604080852033865290925292206004600a9092029092019081015490925060ff16156115ff5760405162461bcd60e51b8152602060048201526009602482015268131bd8dac81c1bdbdb60ba1b6044820152606401610596565b61160884610f37565b6000816002015464e8d4a5100084600301548460000154611629919061237a565b6116339190612399565b61163d91906123d3565b90508382600001600082825461165391906123bb565b90915550506003830154825464e8d4a510009161166f9161237a565b6116799190612399565b600283015580156116b85761168e3382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25b82546116cf906001600160a01b0316333087611e9f565b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610ece565b60006005848154811061171857611718612335565b60009182526020909120600a90910201600481015490915060ff1661176f5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081b1bd8dac81c1bdbdb609a1b6044820152606401610596565b6000848152600860209081526040808320338452909152902080541561180e57600084118061179e5750600083115b6118095760405162461bcd60e51b815260206004820152603660248201527f5f616d6f756e7420616e64205f6475726174696f6e2063616e206e6f74206265604482015275207a65726f206174207468652073616d652074696d6560501b6064820152608401610596565b611878565b60008411801561181e5750600083115b6118785760405162461bcd60e51b815260206004820152602560248201527f5f616d6f756e7420616e64205f6475726174696f6e2063616e206e6f74206265604482015264207a65726f60d81b6064820152608401610596565b61188185610f37565b6004810154839042116118c057841561189b574260038301555b816003015482600401546118af91906123d3565b6118b990826123bb565b90506118c7565b4260038301555b82600601548110156118da575060068201545b82600501548111156118ed575060058201545b8082600301546118fd91906123bb565b82600401819055506000826002015464e8d4a5100085600301548560010154611926919061237a565b6119309190612399565b61193a91906123d3565b9050826001015484600901600082825461195491906123d3565b909155505082548690849060009061196d9084906123bb565b909155505060078401546008850154845464e8d4a5100092919061199290869061237a565b61199c919061237a565b6119a69190612399565b6119b09190612399565b60018401819055600385015464e8d4a51000916119cd919061237a565b6119d79190612399565b600284015560018301546009850180546000906119f59084906123bb565b90915550508015611a3457611a0a3382611cb8565b60408051888152602081018390523391600080516020612506833981519152910160405180910390a25b8354611a4b906001600160a01b0316333089611e9f565b600183015460038401546004850154604080518a815260208101949094528301919091526060820152879033907f932c42744bf389fceab528d858168336aae1131298b71f5850d20bd5df97b7939060800160405180910390a350505050505050565b600081815260086020908152604080832033845290915290208054611afd5760405162461bcd60e51b815260206004820152600560248201526404e6f204c560dc1b6044820152606401610596565b600060058381548110611b1257611b12612335565b90600052602060002090600a02019050611b2b83610f37565b600481015460009060ff1615611b665764e8d4a5100082600301548460010154611b55919061237a565b611b5f9190612399565b9050611b8a565b6003820154835464e8d4a5100091611b7d9161237a565b611b879190612399565b90505b6000836002015482611b9c91906123d3565b6002850183905590508015611bb557611bb53382611cb8565b60408051868152602081018390523391600080516020612506833981519152910160405180910390a25050505050565b611bed611c5e565b6001600160a01b038116611c525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610596565b611c5b81611e4f565b50565b6000546001600160a01b0316331461130b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610596565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d25919061234b565b90508181811115611d335750805b6002546001600160a01b031615611dca57600254600154611d61916001600160a01b03918216911683611de7565b60025460405163282d3fdf60e01b8152336004820152602481018390526001600160a01b039091169063282d3fdf90604401600060405180830381600087803b158015611dad57600080fd5b505af1158015611dc1573d6000803e3d6000fd5b50505050611de1565b600154611de1906001600160a01b03168583611de7565b50505050565b6040516001600160a01b038316602482015260448101829052611e4a90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed7565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052611de19085906323b872dd60e01b90608401611e13565b6000611f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fac9092919063ffffffff16565b9050805160001480611f4d575080806020019051810190611f4d919061246d565b611e4a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610596565b6060611fbb8484600085611fc3565b949350505050565b6060824710156120245760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610596565b600080866001600160a01b0316858760405161204091906124b6565b60006040518083038185875af1925050503d806000811461207d576040519150601f19603f3d011682016040523d82523d6000602084013e612082565b606091505b50915091506120938783838761209e565b979650505050505050565b6060831561210a578251612103576001600160a01b0385163b6121035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610596565b5081611fbb565b611fbb838381511561211f5781518083602001fd5b8060405162461bcd60e51b815260040161059691906124d2565b8015158114611c5b57600080fd5b6000806040838503121561215a57600080fd5b82359150602083013561216c81612139565b809150509250929050565b6001600160a01b0381168114611c5b57600080fd5b6000806040838503121561219f57600080fd5b82359150602083013561216c81612177565b6000602082840312156121c357600080fd5b5035919050565b600080600080600080600080610100898b0312156121e757600080fd5b8835975060208901356121f981612177565b9650604089013561220981612139565b9550606089013561221981612139565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b6000806040838503121561225457600080fd5b50508035926020909101359150565b60008060006060848603121561227857600080fd5b8335925060208401359150604084013561229181612139565b809150509250925092565b6000602082840312156122ae57600080fd5b813561157881612177565b60008060008060008060c087890312156122d257600080fd5b8635955060208701356122e481612139565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60008060006060848603121561231e57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561239457612394612364565b500290565b6000826123b657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123ce576123ce612364565b500190565b6000828210156123e5576123e5612364565b500390565b60208082526042908201527f5f626f6f7374576569676874206d757374206265206265747765656e204d494e60408201527f5f424f4f53545f57454947485420616e64204d41585f424f4f53545f57454947606082015261121560f21b608082015260a00190565b600060001982141561246657612466612364565b5060010190565b60006020828403121561247f57600080fd5b815161157881612139565b60005b838110156124a557818101518382015260200161248d565b83811115611de15750506000910152565b600082516124c881846020870161248a565b9190910192915050565b60208152600082518060208401526124f181604085016020870161248a565b601f01601f1916919091016040019291505056fe71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954a26469706673582212202b786ef8fbfb01ff7b32d647924479c2a3c630ce4aee7ec3a15b93d3900a513564736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000898531b625d5f2cf57de991e690dd23bb4367dfa000000000000000000000000d7878bdcb6aae569dcd19bda1b29ca3ae4516e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000651a0800
-----Decoded View---------------
Arg [0] : _arbs (address): 0x898531B625D5F2CF57De991E690dD23Bb4367DFa
Arg [1] : _devaddr (address): 0xD7878BdCB6aAe569dCD19BDa1b29ca3aE4516e04
Arg [2] : _arbsPerSecond (uint256): 0
Arg [3] : _startTime (uint256): 1696204800
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000898531b625d5f2cf57de991e690dd23bb4367dfa
Arg [1] : 000000000000000000000000d7878bdcb6aae569dcd19bda1b29ca3ae4516e04
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 00000000000000000000000000000000000000000000000000000000651a0800
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.