My Name Tag:
Not Available
[ Download CSV Export ]
OVERVIEW
Pana DAO Staking Pools is a standard contract, collection of various farms/assets where users can stake those assets and earn streaming Pana.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
StakingPools
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.7.5; import "../interfaces/IPanaAuthority.sol"; abstract contract PanaAccessControlled { /* ========== EVENTS ========== */ event AuthorityUpdated(IPanaAuthority indexed authority); string UNAUTHORIZED = "UNAUTHORIZED"; // save gas /* ========== STATE VARIABLES ========== */ IPanaAuthority public authority; /* ========== Constructor ========== */ constructor(IPanaAuthority _authority) { authority = _authority; emit AuthorityUpdated(_authority); } /* ========== MODIFIERS ========== */ modifier onlyGovernor() { require(msg.sender == authority.governor(), UNAUTHORIZED); _; } modifier onlyGuardian() { require(msg.sender == authority.guardian(), UNAUTHORIZED); _; } modifier onlyPolicy() { require(msg.sender == authority.policy(), UNAUTHORIZED); _; } modifier onlyVault() { require(msg.sender == authority.vault(), UNAUTHORIZED); _; } /* ========== GOV ONLY ========== */ function setAuthority(IPanaAuthority _newAuthority) external onlyGovernor { authority = _newAuthority; emit AuthorityUpdated(_newAuthority); } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity >=0.7.5; interface IPanaAuthority { /* ========== EVENTS ========== */ event GovernorPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GuardianPushed(address indexed from, address indexed to, bool _effectiveImmediately); event PolicyPushed(address indexed from, address indexed to, bool _effectiveImmediately); event VaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event DistributionVaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GovernorPulled(address indexed from, address indexed to); event GuardianPulled(address indexed from, address indexed to); event PolicyPulled(address indexed from, address indexed to); event VaultPulled(address indexed from, address indexed to); event DistributionVaultPulled(address indexed from, address indexed to); /* ========== VIEW ========== */ function governor() external view returns (address); function guardian() external view returns (address); function policy() external view returns (address); function vault() external view returns (address); function distributionVault() external view returns (address); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.10; import "../libraries/SafeERC20.sol"; import "../access/PanaAccessControlled.sol"; // The StakingPools contract distributes Pana tokens to the users who stake certain tokens here. // It is a fork of Giddy's GiddyChef contract which in turn is a fork of MasterChef by SushiSwap. contract StakingPools is PanaAccessControlled { using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of Pana // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accPanaPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws tokens to a pool. Here's what happens: // 1. The pool's `accPanaPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 token; // Address of a deposit token contract. uint256 allocPoint; // How many allocation points assigned to this pool. uint256 lastRewardTime; // Last block time that Pana distribution occurs. uint256 accPanaPerShare; // Accumulated Pana per share, times 1e12. See below. } IERC20 public immutable PANA; // Pana tokens distributed per second. uint256 public panaPerSecond; uint256 public constant MaxAllocPoint = 4000; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes 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; // The block time when Pana mining starts. uint256 public startTime; // The block time when Pana mining stops. uint256 public endTime; // Escrow that holds rewards address public escrow; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); constructor( address _pana, address _escrow, uint256 _panaPerSecond, uint256 _startTime, uint256 _endTime, address _authority ) PanaAccessControlled(IPanaAuthority(_authority)) { require(_pana != address(0), "Zero address: PANA"); PANA = IERC20(_pana); escrow = _escrow; panaPerSecond = _panaPerSecond; startTime = _startTime; endTime = _endTime; totalAllocPoint = 0; } function poolLength() external view returns (uint256) { return poolInfo.length; } function checkForDuplicate(IERC20 _token) internal view { uint256 length = poolInfo.length; for (uint256 _pid = 0; _pid < length; _pid++) { require(poolInfo[_pid].token != _token, "Pool already exists!"); } } // Sets new escrow address function setEscrow(address _escrow) external onlyGovernor { escrow = _escrow; } // Add a new pool. function add(uint256 _allocPoint, IERC20 _token) external onlyGovernor { require(_allocPoint <= MaxAllocPoint, "Too many alloc points!"); checkForDuplicate(_token); // ensure you can't add duplicate pools massUpdatePools(); uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime; totalAllocPoint = totalAllocPoint + _allocPoint; poolInfo.push(PoolInfo({ token: _token, allocPoint: _allocPoint, lastRewardTime: lastRewardTime, accPanaPerShare: 0 })); } // Update the given pool's allocation point. function set(uint256 _pid, uint256 _allocPoint) external onlyGovernor { require(_allocPoint <= MaxAllocPoint, "Too many alloc points!"); massUpdatePools(); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; } // Return reward multiplier over the given _from to _to timestamp. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { _from = _from > startTime ? _from : startTime; if (_to < startTime || _from >= endTime) { return 0; } else if (_to <= endTime) { return _to - _from; } else { return endTime - _from; } } // View function to see pending Pana on frontend. function pendingPana(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accPanaPerShare = pool.accPanaPerShare; uint256 supply = pool.token.balanceOf(address(this)); if (block.timestamp > pool.lastRewardTime && supply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 panaReward = multiplier * panaPerSecond * pool.allocPoint / totalAllocPoint; accPanaPerShare = accPanaPerShare + panaReward * 1e12 / supply; } return user.amount * accPanaPerShare / 1e12 - user.rewardDebt; } function poolBalances(address _user) external view returns (uint256[] memory) { uint256 length = poolInfo.length; uint256[] memory poolBalanceData = new uint256[](length); for (uint256 _pid = 0; _pid < length; ++_pid) { UserInfo storage user = userInfo[_pid][_user]; poolBalanceData[_pid] = user.amount; } return poolBalanceData; } // View function to see pending Pana on frontend. function pendingPanaForUser(address _user) external view returns (uint256[] memory) { uint256 length = poolInfo.length; uint256[] memory pendingPanaValues = new uint256[](length); for (uint256 _pid = 0; _pid < length; ++_pid) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accPanaPerShare = pool.accPanaPerShare; uint256 supply = pool.token.balanceOf(address(this)); if (block.timestamp > pool.lastRewardTime && supply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 panaReward = multiplier * panaPerSecond * pool.allocPoint / totalAllocPoint; accPanaPerShare = accPanaPerShare + panaReward * 1e12 / supply; } pendingPanaValues[_pid] = user.amount * accPanaPerShare / 1e12 - user.rewardDebt; } return pendingPanaValues; } // 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 supply = pool.token.balanceOf(address(this)); if (supply == 0) { pool.lastRewardTime = block.timestamp; return; } uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 panaReward = multiplier * panaPerSecond * pool.allocPoint / totalAllocPoint; pool.accPanaPerShare = pool.accPanaPerShare + panaReward * 1e12 / supply; pool.lastRewardTime = block.timestamp; } // Deposit tokens to staking. function deposit(uint256 _pid, uint256 _amount) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); uint256 pending = user.amount * pool.accPanaPerShare / 1e12 - user.rewardDebt; user.amount = user.amount + _amount; user.rewardDebt = user.amount * pool.accPanaPerShare / 1e12; if(pending > 0) { PANA.safeTransferFrom(escrow, msg.sender, pending); } pool.token.safeTransferFrom(address(msg.sender), address(this), _amount); emit Deposit(msg.sender, _pid, _amount); } // Withdraw tokens from staking. function withdraw(uint256 _pid, uint256 _amount) external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "Insufficient funds"); updatePool(_pid); uint256 pending = user.amount * pool.accPanaPerShare / 1e12 - user.rewardDebt; user.amount = user.amount - _amount; user.rewardDebt = user.amount * pool.accPanaPerShare / 1e12; if(pending > 0) { PANA.safeTransferFrom(escrow, msg.sender, pending); } pool.token.safeTransfer(address(msg.sender), _amount); emit Withdraw(msg.sender, _pid, _amount); } function harvestAll() public { uint256 length = poolInfo.length; uint calc; uint pending; UserInfo storage user; PoolInfo storage pool; uint totalPending; for (uint256 pid = 0; pid < length; ++pid) { user = userInfo[pid][msg.sender]; if (user.amount > 0) { pool = poolInfo[pid]; updatePool(pid); calc = user.amount * pool.accPanaPerShare / 1e12; pending = calc - user.rewardDebt; user.rewardDebt = calc; if(pending > 0) { totalPending += pending; } } } if (totalPending > 0) { PANA.safeTransferFrom(escrow, msg.sender, totalPending); } } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint oldUserAmount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.token.safeTransfer(address(msg.sender), oldUserAmount); emit EmergencyWithdraw(msg.sender, _pid, oldUserAmount); } function setStartTime(uint256 _newStartTime) external onlyGovernor { require(startTime > block.timestamp, "Already started"); require(_newStartTime > block.timestamp, "New time in the past"); startTime = _newStartTime; } function setEndTime(uint256 _newEndTime) external onlyGovernor { require(endTime > block.timestamp, "Already ended"); require(_newEndTime > block.timestamp, "New end time in the past"); endTime = _newEndTime; } function setPanaPerSecond(uint256 _panaPerSecond) external onlyGovernor { panaPerSecond = _panaPerSecond; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.7.5; import {IERC20} from "../interfaces/IERC20.sol"; /// @notice Safe IERC20 and ETH transfer library that safely handles missing return values. /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol) /// Taken from Solmate library SafeERC20 { function safeTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED"); } function safeTransfer( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transfer.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } function safeApprove( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.approve.selector, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED"); } function safeTransferETH(address to, uint256 amount) internal { (bool success, ) = to.call{value: amount}(new bytes(0)); require(success, "ETH_TRANSFER_FAILED"); } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 800 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"inputs":[{"internalType":"address","name":"_pana","type":"address"},{"internalType":"address","name":"_escrow","type":"address"},{"internalType":"uint256","name":"_panaPerSecond","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IPanaAuthority","name":"authority","type":"address"}],"name":"AuthorityUpdated","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":"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"}],"name":"EmergencyWithdraw","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":"MaxAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PANA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract IPanaAuthority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"harvestAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"panaPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingPana","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingPanaForUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"poolBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accPanaPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPanaAuthority","name":"_newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newEndTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_escrow","type":"address"}],"name":"setEscrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_panaPerSecond","type":"uint256"}],"name":"setPanaPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStartTime","type":"uint256"}],"name":"setStartTime","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":"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":"rewardDebt","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
60e0604052600c60a08190526b15539055551213d49256915160a21b60c09081526200002f91600091906200013a565b503480156200003d57600080fd5b5060405162002087380380620020878339810160408190526200006091620001fd565b600180546001600160a01b0319166001600160a01b0383169081179091556040518291907f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a2506001600160a01b038616620000fb5760405162461bcd60e51b81526020600482015260126024820152715a65726f20616464726573733a2050414e4160701b604482015260640160405180910390fd5b506001600160a01b03948516608052600880546001600160a01b03191694909516939093179093556002556006919091556007556000600555620002a0565b828054620001489062000263565b90600052602060002090601f0160209004810192826200016c5760008555620001b7565b82601f106200018757805160ff1916838001178555620001b7565b82800160010185558215620001b7579182015b82811115620001b75782518255916020019190600101906200019a565b50620001c5929150620001c9565b5090565b5b80821115620001c55760008155600101620001ca565b80516001600160a01b0381168114620001f857600080fd5b919050565b60008060008060008060c087890312156200021757600080fd5b6200022287620001e0565b95506200023260208801620001e0565b94506040870151935060608701519250608087015191506200025760a08801620001e0565b90509295509295509295565b600181811c908216806200027857607f821691505b602082108114156200029a57634e487b7160e01b600052602260045260246000fd5b50919050565b608051611db6620002d1600039600081816102cc01528181610b4401528181610ffd01526117360152611db66000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806378e97925116100f9578063b55d269411610097578063ccb98ffc11610071578063ccb98ffc146103f0578063e2bbb15814610403578063e2fdcc1714610416578063f4b83c4c1461042957600080fd5b8063b55d2694146103b7578063bf7e214f146103ca578063c10c3546146103dd57600080fd5b80638ed955b9116100d35780638ed955b9146103355780639155ccc81461033d57806393f1a40b1461035d578063af7ac3d9146103a457600080fd5b806378e97925146103065780637a9e5e4b1461030f5780638dbb1e3a1461032257600080fd5b80633e0a322d116101665780635312ea8e116101405780635312ea8e146102a3578063630b5ba1146102b657806367df6019146102be57806377e93ca8146102c757600080fd5b80633e0a322d1461026a578063441a3e701461027d57806351eb05a61461029057600080fd5b806317caf6f1116101a257806317caf6f1146102325780631ab06ee51461023b5780632b8bbbe81461024e5780633197cbb61461026157600080fd5b8063081e3eda146101c957806312cfa125146101e05780631526fe27146101f5575b600080fd5b6003545b6040519081526020015b60405180910390f35b6101f36101ee366004611ab6565b610432565b005b610208610203366004611ab6565b6104ec565b604080516001600160a01b03909516855260208501939093529183015260608201526080016101d7565b6101cd60055481565b6101f3610249366004611acf565b610530565b6101f361025c366004611b09565b6106a6565b6101cd60075481565b6101f3610278366004611ab6565b6108d6565b6101f361028b366004611acf565b610a27565b6101f361029e366004611ab6565b610bc3565b6101f36102b1366004611ab6565b610cf3565b6101f3610d92565b6101cd60025481565b6102ee7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d7565b6101cd60065481565b6101f361031d366004611b39565b610dbd565b6101cd610330366004611acf565b610ec0565b6101f3610f24565b61035061034b366004611b39565b61102f565b6040516101d79190611b5d565b61038f61036b366004611b09565b60046020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101d7565b6101cd6103b2366004611b09565b6110e3565b6103506103c5366004611b39565b611252565b6001546102ee906001600160a01b031681565b6101f36103eb366004611b39565b611440565b6101f36103fe366004611ab6565b61151b565b6101f3610411366004611acf565b61166c565b6008546102ee906001600160a01b031681565b6101cd610fa081565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190611ba1565b6001600160a01b0316336001600160a01b0316146000906104e65760405162461bcd60e51b81526004016104dd9190611bbe565b60405180910390fd5b50600255565b600381815481106104fc57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a79190611ba1565b6001600160a01b0316336001600160a01b0316146000906105db5760405162461bcd60e51b81526004016104dd9190611bbe565b50610fa081111561062e5760405162461bcd60e51b815260206004820152601660248201527f546f6f206d616e7920616c6c6f6320706f696e7473210000000000000000000060448201526064016104dd565b610636610d92565b806003838154811061064a5761064a611c66565b9060005260206000209060040201600101546005546106699190611c92565b6106739190611ca9565b600581905550806003838154811061068d5761068d611c66565b9060005260206000209060040201600101819055505050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d9190611ba1565b6001600160a01b0316336001600160a01b0316146000906107515760405162461bcd60e51b81526004016104dd9190611bbe565b50610fa08211156107a45760405162461bcd60e51b815260206004820152601660248201527f546f6f206d616e7920616c6c6f6320706f696e7473210000000000000000000060448201526064016104dd565b6107ad816117ab565b6107b5610d92565b600060065442116107c8576006546107ca565b425b9050826005546107da9190611ca9565b600555604080516080810182526001600160a01b0393841681526020810194855290810191825260006060820181815260038054600181018255925291517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b6004909202918201805473ffffffffffffffffffffffffffffffffffffffff1916919095161790935592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c830155517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d82015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e90910155565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d9190611ba1565b6001600160a01b0316336001600160a01b0316146000906109815760405162461bcd60e51b81526004016104dd9190611bbe565b5042600654116109d35760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792073746172746564000000000000000000000000000000000060448201526064016104dd565b428111610a225760405162461bcd60e51b815260206004820152601460248201527f4e65772074696d6520696e20746865207061737400000000000000000000000060448201526064016104dd565b600655565b600060038381548110610a3c57610a3c611c66565b6000918252602080832086845260048083526040808620338752909352919093208054929091029092019250831115610ab75760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e742066756e6473000000000000000000000000000060448201526064016104dd565b610ac084610bc3565b6000816001015464e8d4a5100084600301548460000154610ae19190611cc1565b610aeb9190611ce0565b610af59190611c92565b8254909150610b05908590611c92565b808355600384015464e8d4a5100091610b1e9190611cc1565b610b289190611ce0565b60018301558015610b6e57600854610b6e906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163384611855565b8254610b84906001600160a01b03163386611986565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050505050565b600060038281548110610bd857610bd8611c66565b9060005260206000209060040201905080600201544211610bf7575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611d02565b905080610c7557504260029091015550565b6000610c85836002015442610ec0565b90506000600554846001015460025484610c9f9190611cc1565b610ca99190611cc1565b610cb39190611ce0565b905082610cc58264e8d4a51000611cc1565b610ccf9190611ce0565b8460030154610cde9190611ca9565b60038501555050426002909201919091555050565b600060038281548110610d0857610d08611c66565b60009182526020808320858452600480835260408086203380885294528520805486825560018201969096559302018054909450919291610d55916001600160a01b039091169083611986565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a350505050565b60035460005b81811015610db957610da981610bc3565b610db281611d1b565b9050610d98565b5050565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611ba1565b6001600160a01b0316336001600160a01b031614600090610e685760405162461bcd60e51b81526004016104dd9190611bbe565b506001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b60006006548311610ed357600654610ed5565b825b9250600654821080610ee957506007548310155b15610ef657506000610f1e565b6007548211610f1057610f098383611c92565b9050610f1e565b82600754610f099190611c92565b92915050565b600354600080808080805b86811015610fe55760008181526004602090815260408083203384529091529020805490945015610fd55760038181548110610f6d57610f6d611c66565b90600052602060002090600402019250610f8681610bc3565b6003830154845464e8d4a5100091610f9d91611cc1565b610fa79190611ce0565b9550836001015486610fb99190611c92565b6001850187905594508415610fd557610fd28583611ca9565b91505b610fde81611d1b565b9050610f2f565b50801561102757600854611027906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163384611855565b505050505050565b60035460609060008167ffffffffffffffff81111561105057611050611d36565b604051908082528060200260200182016040528015611079578160200160208202803683370190505b50905060005b828110156110db5760008181526004602090815260408083206001600160a01b03891684529091529020805483518490849081106110bf576110bf611c66565b6020908102919091010152506110d481611d1b565b905061107f565b509392505050565b600080600384815481106110f9576110f9611c66565b60009182526020808320878452600480835260408086206001600160a01b038a8116885294528086209482029092016003810154815493516370a0823160e01b8152309381019390935290965093949291909116906370a0823190602401602060405180830381865afa158015611174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111989190611d02565b90508360020154421180156111ac57508015155b1561121a5760006111c1856002015442610ec0565b905060006005548660010154600254846111db9190611cc1565b6111e59190611cc1565b6111ef9190611ce0565b9050826112018264e8d4a51000611cc1565b61120b9190611ce0565b6112159085611ca9565b935050505b6001830154835464e8d4a5100090611233908590611cc1565b61123d9190611ce0565b6112479190611c92565b979650505050505050565b60035460609060008167ffffffffffffffff81111561127357611273611d36565b60405190808252806020026020018201604052801561129c578160200160208202803683370190505b50905060005b828110156110db576000600382815481106112bf576112bf611c66565b60009182526020808320858452600480835260408086206001600160a01b038d8116885294528086209482029092016003810154815493516370a0823160e01b8152309381019390935290965093949291909116906370a0823190602401602060405180830381865afa15801561133a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135e9190611d02565b905083600201544211801561137257508015155b156113e0576000611387856002015442610ec0565b905060006005548660010154600254846113a19190611cc1565b6113ab9190611cc1565b6113b59190611ce0565b9050826113c78264e8d4a51000611cc1565b6113d19190611ce0565b6113db9085611ca9565b935050505b6001830154835464e8d4a51000906113f9908590611cc1565b6114039190611ce0565b61140d9190611c92565b86868151811061141f5761141f611c66565b602002602001018181525050505050508061143990611d1b565b90506112a2565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b79190611ba1565b6001600160a01b0316336001600160a01b0316146000906114eb5760405162461bcd60e51b81526004016104dd9190611bbe565b506008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600160009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190611ba1565b6001600160a01b0316336001600160a01b0316146000906115c65760405162461bcd60e51b81526004016104dd9190611bbe565b5042600754116116185760405162461bcd60e51b815260206004820152600d60248201527f416c726561647920656e6465640000000000000000000000000000000000000060448201526064016104dd565b4281116116675760405162461bcd60e51b815260206004820152601860248201527f4e657720656e642074696d6520696e207468652070617374000000000000000060448201526064016104dd565b600755565b60006003838154811061168157611681611c66565b600091825260208083208684526004808352604080862033875290935291909320910290910191506116b284610bc3565b6000816001015464e8d4a51000846003015484600001546116d39190611cc1565b6116dd9190611ce0565b6116e79190611c92565b82549091506116f7908590611ca9565b808355600384015464e8d4a51000916117109190611cc1565b61171a9190611ce0565b6001830155801561176057600854611760906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163384611855565b8254611777906001600160a01b0316333087611855565b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610bb4565b60035460005b8181101561185057826001600160a01b0316600382815481106117d6576117d6611c66565b60009182526020909120600490910201546001600160a01b0316141561183e5760405162461bcd60e51b815260206004820152601460248201527f506f6f6c20616c7265616479206578697374732100000000000000000000000060448201526064016104dd565b8061184881611d1b565b9150506117b1565b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17905291516000928392908816916118ce9190611d4c565b6000604051808303816000865af19150503d806000811461190b576040519150601f19603f3d011682016040523d82523d6000602084013e611910565b606091505b509150915081801561193a57508051158061193a57508080602001905181019061193a9190611d87565b6110275760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016104dd565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905291516000928392908716916119f79190611d4c565b6000604051808303816000865af19150503d8060008114611a34576040519150601f19603f3d011682016040523d82523d6000602084013e611a39565b606091505b5091509150818015611a63575080511580611a63575080806020019051810190611a639190611d87565b611aaf5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016104dd565b5050505050565b600060208284031215611ac857600080fd5b5035919050565b60008060408385031215611ae257600080fd5b50508035926020909101359150565b6001600160a01b0381168114611b0657600080fd5b50565b60008060408385031215611b1c57600080fd5b823591506020830135611b2e81611af1565b809150509250929050565b600060208284031215611b4b57600080fd5b8135611b5681611af1565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015611b9557835183529284019291840191600101611b79565b50909695505050505050565b600060208284031215611bb357600080fd5b8151611b5681611af1565b600060208083526000845481600182811c915080831680611be057607f831692505b858310811415611bfe57634e487b7160e01b85526022600452602485fd5b878601838152602001818015611c1b5760018114611c2c57611c57565b60ff19861682528782019650611c57565b60008b81526020902060005b86811015611c5157815484820152908501908901611c38565b83019750505b50949998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611ca457611ca4611c7c565b500390565b60008219821115611cbc57611cbc611c7c565b500190565b6000816000190483118215151615611cdb57611cdb611c7c565b500290565b600082611cfd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d1457600080fd5b5051919050565b6000600019821415611d2f57611d2f611c7c565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000825160005b81811015611d6d5760208186018101518583015201611d53565b81811115611d7c576000828501525b509190910192915050565b600060208284031215611d9957600080fd5b81518015158114611b5657600080fdfea164736f6c634300080a000a000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d000000000000000000000000a178776d7b05931e31b2b955dd97436f08046cfe0000000000000000000000000000000000000000000000000807f7f3d17642200000000000000000000000000000000000000000000000000000000062fa6d8000000000000000000000000000000000000000000000000000000000634ad900000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d000000000000000000000000a178776d7b05931e31b2b955dd97436f08046cfe0000000000000000000000000000000000000000000000000807f7f3d17642200000000000000000000000000000000000000000000000000000000062fa6d8000000000000000000000000000000000000000000000000000000000634ad900000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
-----Decoded View---------------
Arg [0] : _pana (address): 0x369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : _escrow (address): 0xa178776d7b05931e31b2b955dd97436f08046cfe
Arg [2] : _panaPerSecond (uint256): 578703703703700000
Arg [3] : _startTime (uint256): 1660579200
Arg [4] : _endTime (uint256): 1665849600
Arg [5] : _authority (address): 0xcc654fbb3c1b12be82d36bc9c7e1ce075a422f80
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000369eb8197062093a20402935d3a707b4ae414e9d
Arg [1] : 000000000000000000000000a178776d7b05931e31b2b955dd97436f08046cfe
Arg [2] : 0000000000000000000000000000000000000000000000000807f7f3d1764220
Arg [3] : 0000000000000000000000000000000000000000000000000000000062fa6d80
Arg [4] : 00000000000000000000000000000000000000000000000000000000634ad900
Arg [5] : 000000000000000000000000cc654fbb3c1b12be82d36bc9c7e1ce075a422f80
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.