Address Contract Verified
Address
0xc4354d345459a8e6F80ACd1FB202062EE4878C78
Balance
0 ETH
Nonce
1
Code Size
3981 bytes
Creator
0x19092089...F509 at tx 0x8e342259...53c8b2
Indexed Transactions
0 (1 on-chain, 1.2% indexed)
Contract Bytecode
3981 bytes
0x60806040526004361015610011575f80fd5b5f3560e01c806326fae0d314610134578063310e5cf51461012f578063441a3e701461012a57806349e0a4aa146101255780635312ea8e146101205780635eb8e4521461011b5780638456cb59146101165780638da5cb5b146101115780639a72e4ab1461010c578063a694fc3a14610107578063a9fb763c14610102578063b24cf5d7146100fd578063bedb86fb146100f8578063d73caf4c146100f3578063e4979395146100ee578063ee97f7f3146100e9578063f2fde38b146100e45763f7c618c1146100df575f80fd5b610ab3565b6109ce565b6109a6565b61097e565b610961565b61091c565b610848565b6106be565b61051b565b6104c1565b61049a565b610478565b6103d2565b610368565b6102e1565b61021e565b6101a1565b61014e565b6001600160a01b0381160361014a57565b5f80fd5b3461014a57602036600319011261014a5760043561016b81610139565b61017f60018060a01b035f54163314610af7565b600180546001600160a01b0319166001600160a01b0392909216919091179055005b3461014a575f602036600319011261014a576004356101ca60018060a01b035f54163314610af7565b6001546001600160a01b031690813b1561014a575f9160248392604051948593849263310e5cf560e01b845260048401525af180156102195761020b575080f35b61021791505f90610b56565b005b610b7d565b3461014a57604036600319011261014a576004356024359061024a60018060a01b035f54163314610af7565b6001546001600160a01b0316803b1561014a57604051630441a3e760e41b81526004810183905260248101849052905f908290604490829084905af18015610219576102c7575b5060405191825233917f56be67a54226e3a39c5d1a710d2afc912ca5df1d89054cfeb3e65b47509ee9099080602081015b0390a3005b806102d55f6102db93610b56565b8061046e565b5f610291565b3461014a57602036600319011261014a57600154604051631526fe2760e01b81526004803590820152906001600160a01b031660c082602481845afa801561021957610217925f91610334575b50610d5f565b610356915060c03d60c011610361575b61034e8183610b56565b810190610b88565b50505050505f61032e565b503d610344565b3461014a575f602036600319011261014a5760043561039160018060a01b035f54163314610af7565b6001546001600160a01b031690813b1561014a575f91602483926040519485938492632989754760e11b845260048401525af180156102195761020b575080f35b3461014a57604036600319011261014a576004356024356103f281610139565b61040660018060a01b035f54163314610af7565b600154604051631526fe2760e01b8152600481019390935260c090839060249082906001600160a01b03165afa801561021957610217925f9161044a575b50610e63565b610463915060c03d60c0116103615761034e8183610b56565b50505050505f610444565b5f91031261014a57565b3461014a575f36600319011261014a57602060ff600454166040519015158152f35b3461014a575f36600319011261014a575f546040516001600160a01b039091168152602090f35b3461014a57602036600319011261014a576102176004356104e181610139565b6104f560018060a01b035f54163314610af7565b7f000000000000000000000000044ca854fa227e27e07652b7f6a6b578703f3945610e63565b3461014a57602036600319011261014a5760043561054461053e60045460ff1690565b15610bbf565b600154610561906001600160a01b03165b6001600160a01b031690565b604051631526fe2760e01b815260048101839052919060c083602481845afa8015610219575f935f91610693575b5061059b901515610bf3565b6040516370a0823160e01b815230600482015292602090849060249082906001600160a01b03165afa928315610219575f93610662575b506105de831515610c3d565b803b1561014a57604051631c57762b60e31b81526004810183905260248101849052905f908290604490829084905af180156102195761064e575b5060405191825233917f1b52f0db6b5f755caa8f232eebe353a340637e6c55969d84b3ee0cee945aa4339080602081016102c2565b806102d55f61065c93610b56565b5f610619565b61068591935060203d60201161068c575b61067d8183610b56565b810190610c2e565b915f6105d2565b503d610673565b61059b94506106b1915060c03d60c0116103615761034e8183610b56565b505050509390939061058f565b3461014a57602036600319011261014a57600254600435906106ea906001600160a01b03161515610c7e565b610704620151806106fd60035442610cca565b1015610ceb565b600154610719906001600160a01b0316610555565b803b1561014a5760405163d332a78160e01b815260048101839052905f908290602490829084905af1801561021957610834575b506040516370a0823160e01b81523060048201526020816024816001600160a01b037f000000000000000000000000044ca854fa227e27e07652b7f6a6b578703f3945165afa908115610219575f91610815575b506107ad811515610d1f565b6002546107c490610555906001600160a01b031681565b803b1561014a57604051631e2720ff60e01b815260048101839052905f908290602490829084905af1801561021957610801575b61021742600355565b806102d55f61080f93610b56565b806107f8565b61082e915060203d60201161068c5761067d8183610b56565b816107a1565b806102d55f61084293610b56565b8061074d565b3461014a57602036600319011261014a5760043561086581610139565b61087960018060a01b035f54163314610af7565b6001600160a01b031680156108cd57600280546001600160a01b03191682179055610217906001600160a01b03167f000000000000000000000000044ca854fa227e27e07652b7f6a6b578703f3945610d5f565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207769746864726177206164647265737300000000000000006044820152606490fd5b8015150361014a57565b3461014a57602036600319011261014a5760043561093981610912565b61094d60018060a01b035f54163314610af7565b60ff80196004541691151516176004555f80f35b3461014a575f36600319011261014a576020600354604051908152f35b3461014a575f36600319011261014a576002546040516001600160a01b039091168152602090f35b3461014a575f36600319011261014a576001546040516001600160a01b039091168152602090f35b3461014a57602036600319011261014a576004356109eb81610139565b5f5490610a026001600160a01b0383163314610af7565b6001600160a01b0381168015610a6357610217926001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f55565b60405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a206e6577206f776e6572206973207a65726f206164647265604482015261737360f01b6064820152608490fd5b3461014a575f36600319011261014a576040517f000000000000000000000000044ca854fa227e27e07652b7f6a6b578703f39456001600160a01b03168152602090f35b15610afe57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610b7857604052565b610b42565b6040513d5f823e3d90fd5b91908260c091031261014a578151610b9f81610139565b9160208101519160408201519160608101519160a0608083015192015190565b15610bc657565b60405162461bcd60e51b8152602060048201526005602482015264706175736560d81b6044820152606490fd5b15610bfa57565b60405162461bcd60e51b815260206004820152600c60248201526b1a5b9d985b1a59081c1bdbdb60a21b6044820152606490fd5b9081602091031261014a575190565b15610c4457565b60405162461bcd60e51b81526020600482015260126024820152716e6f20746f6b656e7320746f207374616b6560701b6044820152606490fd5b15610c8557565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420526577617264506f6f6c20616464726573730000000000006044820152606490fd5b91908203918211610cd757565b634e487b7160e01b5f52601160045260245ffd5b15610cf257565b60405162461bcd60e51b8152602060048201526005602482015264312064617960d81b6044820152606490fd5b15610d2657565b60405162461bcd60e51b81526020600482015260116024820152704e6f207265776172642062616c616e636560781b6044820152606490fd5b60405163095ea7b360e01b60208201526001600160a01b0390921660248301525f196044808401919091528252610de09190610d9c606483610b56565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020604051610dcd604082610b56565b81815201526001600160a01b0316610ebb565b805180610deb575050565b816020918101031261014a5760200151610e0481610912565b15610e0b57565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b60405163095ea7b360e01b60208201526001600160a01b0390921660248301525f6044808401919091528252610de09190610d9c606483610b56565b67ffffffffffffffff8111610b7857601f01601f191660200190565b803b15610f1257815f92918360208194519301915af1903d15610f0a573d91610ee383610e9f565b92610ef16040519485610b56565b83523d5f602085013e5b610f085750602081519101fd5b565b606091610efb565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fdfea264697066735822122019bb4bf1f59de1da41c70d4e7d12c0079477c256e64ff41cf8c342f861c051eb64736f6c634300081e0033
Verified Source Code Full Match
Compiler: v0.8.30+commit.73712a01
EVM: prague
Optimization: Yes (200 runs)
MasterChef.fund.sol 217 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title MasterChefFund
* @notice 辅助 MasterChef 的资金管理合约。
* - 任何人都可以触发质押,将本合约持有的指定池子的所有 LP 代币质押到 MasterChef。
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function decimals() external view returns (uint8);
}
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call(data);
if (success) return returndata;
assembly {
revert(add(returndata, 32), mload(returndata))
}
revert(errorMessage);
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "Ownable: new owner is zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface IMasterChef {
function powerPerPrice() external view returns (uint256);
function token() external view returns (IERC20);
function takerWithdraw(uint256 pid) external;
function poolInfo(
uint256 pid
)
external
view
returns (
IERC20 lpToken,
uint256 decimals,
uint256 totalPower,
uint256 allocPoint,
uint256 lastRewardTime,
uint256 accSushiPerShare
);
function deposit(uint256 pid, uint256 amount) external;
function withdraw(uint256 pid, uint256 powerAmount) external;
function emergencyWithdraw(uint256 pid) external;
function joinNode(uint256 _nodeId) external;
}
interface iRewardPoolManager {
function depositReward(uint256 amount) external;
}
contract MasterChefFund is Ownable {
using SafeERC20 for IERC20;
IMasterChef public master = IMasterChef(0xE85a0d630Ce1c69aA9c37802A7DD87045e636d70);
IERC20 public immutable rewardToken;
address public RewardPoolManagerAddress = 0x2F47Fad6F16aD87bc5Bd9f837C98e1d6D169A8d4;
uint256 public LastRewardTime;
event OperatorUpdated(address indexed operator, bool allowed);
event Staked(uint256 indexed pid, uint256 amount, address indexed caller);
event UnStaked(uint256 indexed pid, uint256 amount, address indexed caller);
event Refunded(
uint256 indexed pid,
address indexed user,
uint256 refundAmount,
uint256 rewardReturned
);
bool public pause = true;
constructor() {
rewardToken = master.token();
rewardToken.safeApprove(RewardPoolManagerAddress, type(uint256).max);
}
function setRewardPoolAddress(address _RewardPoolAddress) external onlyOwner {
require(_RewardPoolAddress != address(0), "Invalid withdraw address");
RewardPoolManagerAddress = _RewardPoolAddress;
rewardToken.safeApprove(RewardPoolManagerAddress, type(uint256).max);
}
function setMaster(address _master) external onlyOwner {
master = IMasterChef(_master);
}
function setPause(bool _pause) external onlyOwner {
pause = _pause;
}
function rewardUnsafeApprove(address addr) external onlyOwner
{
rewardToken.safeApprove(addr, 0);
}
function LpUnsafeApprove(uint256 pid,address addr) external onlyOwner
{
(IERC20 lpToken, , , , , ) = master.poolInfo(pid);
lpToken.safeApprove(addr, 0);
}
function safeApprove(uint256 pid) external
{
(IERC20 lpToken, , , , , ) = master.poolInfo(pid);
lpToken.safeApprove(address(master), type(uint256).max);
}
// 质押:将本合约持有的该池子所有 LP 代币质押到 MasterChef
function stake(uint256 pid) external {
// 暂停的时候不能存入,万一需要迁移质押合约
require(pause == false,"pause");
(IERC20 lpToken, uint256 decimals, , , , ) = master.poolInfo(pid);
require(decimals > 0, "invalid pool");
uint256 balance = lpToken.balanceOf(address(this));
require(balance > 0, "no tokens to stake");
master.deposit(pid, balance);
emit Staked(pid, balance, msg.sender);
}
function joinNode(uint256 _nodeId) external onlyOwner {
master.joinNode(_nodeId);
}
function withdraw(uint256 pid,uint256 amount) external onlyOwner {
master.withdraw(pid, amount);
emit UnStaked(pid, amount, msg.sender);
}
function emergencyWithdraw(uint256 pid) external onlyOwner {
master.emergencyWithdraw(pid);
}
// 领取奖励并存入奖励池合约
function reward(uint256 pid) external {
require(RewardPoolManagerAddress != address(0), "Invalid RewardPool address");
require(block.timestamp - LastRewardTime >= 86400,"1 day");
master.takerWithdraw(pid);
uint256 bal = rewardToken.balanceOf(address(this));
require(bal > 0, "No reward balance");
iRewardPoolManager(RewardPoolManagerAddress).depositReward(bal);
LastRewardTime = block.timestamp;
}
}
Read Contract
LastRewardTime 0xd73caf4c → uint256
RewardPoolManagerAddress 0xe4979395 → address
master 0xee97f7f3 → address
owner 0x8da5cb5b → address
pause 0x8456cb59 → bool
rewardToken 0xf7c618c1 → address
Write Contract 12 functions
These functions modify contract state and require a wallet transaction to execute.
LpUnsafeApprove 0x5eb8e452
uint256 pid
address addr
emergencyWithdraw 0x5312ea8e
uint256 pid
joinNode 0x310e5cf5
uint256 _nodeId
reward 0xa9fb763c
uint256 pid
rewardUnsafeApprove 0x9a72e4ab
address addr
safeApprove 0x49e0a4aa
uint256 pid
setMaster 0x26fae0d3
address _master
setPause 0xbedb86fb
bool _pause
setRewardPoolAddress 0xb24cf5d7
address _RewardPoolAddress
stake 0xa694fc3a
uint256 pid
transferOwnership 0xf2fde38b
address newOwner
withdraw 0x441a3e70
uint256 pid
uint256 amount
Recent Transactions
This address has 1 on-chain transactions, but only 1.2% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →