Address Contract Verified
Address
0xbD10395244dEAf0CD4F16D0F6770271e0d0683AD
Balance
0 ETH
Nonce
1
Code Size
3536 bytes
Creator
0xB5d1B0bD...dcEd at tx 0xeb896491...3f6cb2
Indexed Transactions
0
Contract Bytecode
3536 bytes
0x608060405234801561000f575f5ffd5b5060043610610111575f3560e01c8063715018a61161009e578063baa51f861161006e578063baa51f861461022e578063ce606ee014610250578063d1af0c7d14610263578063d56d229d14610276578063de320cc114610288575f5ffd5b8063715018a614610203578063725cedd31461020b578063a694fc3a14610213578063abcd5d8414610226575f5ffd5b80632fcbb5a2116100e45780632fcbb5a21461017b57806337c909ec146101a65780634e795b1c146101b05780635c975abb146101cf57806363c28db1146101e3575f5ffd5b806306fbedbe146101155780630962ef79146101305780632778cfba146101455780632e17de7814610168575b5f5ffd5b61011d600181565b6040519081526020015b60405180910390f35b61014361013e366004610bd4565b61029b565b005b610158610153366004610bff565b6104a8565b6040519015158152602001610127565b610143610176366004610bd4565b61050a565b60025461018e906001600160a01b031681565b6040516001600160a01b039091168152602001610127565b61011d6201437081565b61011d6101be366004610bd4565b60056020525f908152604090205481565b60035461015890600160a01b900460ff1681565b6101f66101f1366004610c29565b61061c565b6040516101279190610c4b565b610143610685565b61011d610709565b610143610221366004610bd4565b610799565b6101436109c4565b61015861023c366004610bd4565b60066020525f908152604090205460ff1681565b60035461018e906001600160a01b031681565b60015461018e906001600160a01b031681565b5f5461018e906001600160a01b031681565b610143610296366004610c29565b610aa8565b6102a533826104a8565b6102ed5760405162461bcd60e51b81526020600482015260146024820152732737ba1039ba30b5b2b210313c9039b2b73232b960611b60448201526064015b60405180910390fd5b5f81815260056020526040902054610309906201437090610ca1565b42101561034a5760405162461bcd60e51b815260206004820152600f60248201526e436f6f6c646f776e2061637469766560881b60448201526064016102e4565b5f610353610709565b90505f811161039b5760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320617661696c61626c6560601b60448201526064016102e4565b5f828152600560205260409081902042905560015460025491516323b872dd60e01b81526001600160a01b03918216926323b872dd926103e49291169033908690600401610cb4565b6020604051808303815f875af1158015610400573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104249190610cd8565b6104695760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b60448201526064016102e4565b604080518381526020810183905233917fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e325910160405180910390a25050565b6001600160a01b0382165f908152600460205260408120815b81548110156104fe57838282815481106104dd576104dd610cf7565b905f5260205f200154036104f657600192505050610504565b6001016104c1565b505f9150505b92915050565b61051433826104a8565b6105575760405162461bcd60e51b81526020600482015260146024820152732737ba1039ba30b5b2b210313c9039b2b73232b960611b60448201526064016102e4565b6105613382610b14565b5f818152600660209081526040808320805460ff191690556005909152808220829055905490516323b872dd60e01b81526001600160a01b03909116906323b872dd906105b690309033908690600401610cb4565b5f604051808303815f87803b1580156105cd575f5ffd5b505af11580156105df573d5f5f3e3d5ffd5b50506040518381523392507f963148346e3c93bb3eb4b4c296e2e13321ff22bf1118c91686cb1bfe4adcd91891506020015b60405180910390a250565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561067957602002820191905f5260205f20905b815481526020019060010190808311610665575b50505050509050919050565b6003546001600160a01b031633146106cf5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b60448201526064016102e4565b600380546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce905f90a1565b6001546002546040516370a0823160e01b81526001600160a01b0391821660048201525f92839216906370a0823190602401602060405180830381865afa158015610756573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077a9190610d0b565b90506064610789600183610d22565b6107939190610d39565b91505090565b600354600160a01b900460ff16156107e75760405162461bcd60e51b815260206004820152601160248201527014dd185ada5b99c81a5cc81c185d5cd959607a1b60448201526064016102e4565b5f546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa15801561082d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108519190610d58565b6001600160a01b0316146108995760405162461bcd60e51b815260206004820152600f60248201526e2737ba103a37b5b2b71037bbb732b960891b60448201526064016102e4565b5f8181526006602052604090205460ff16156108e85760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481cdd185ad95960921b60448201526064016102e4565b5f546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061091b90339030908690600401610cb4565b5f604051808303815f87803b158015610932575f5ffd5b505af1158015610944573d5f5f3e3d5ffd5b5050335f818152600460209081526040808320805460018082018355918552838520018890558784526005835281842042908190556006845293829020805460ff191690911790558051878152918201929092529193507f36b3725f1783bad4ff05b7f4c077c3aa68eeb23a4d054ba189db4d01ac278d39925001610611565b6002546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c792074686520636f6d6d756e6974792077616c6c65742063616e20617060448201526470726f766560d81b60648201526084016102e4565b6001546002546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610a659291169030905f1990600401610cb4565b6020604051808303815f875af1158015610a81573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa59190610cd8565b50565b6003546001600160a01b03163314610af25760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b60448201526064016102e4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f908152600460205260408120905b8154811015610bce5782828281548110610b4957610b49610cf7565b905f5260205f20015403610bc65781548290610b6790600190610d73565b81548110610b7757610b77610cf7565b905f5260205f200154828281548110610b9257610b92610cf7565b905f5260205f20018190555081805480610bae57610bae610d86565b600190038181905f5260205f20015f90559055610bce565b600101610b2d565b50505050565b5f60208284031215610be4575f5ffd5b5035919050565b6001600160a01b0381168114610aa5575f5ffd5b5f5f60408385031215610c10575f5ffd5b8235610c1b81610beb565b946020939093013593505050565b5f60208284031215610c39575f5ffd5b8135610c4481610beb565b9392505050565b602080825282518282018190525f918401906040840190835b81811015610c82578351835260209384019390920191600101610c64565b509095945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561050457610504610c8d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215610ce8575f5ffd5b81518015158114610c44575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610d1b575f5ffd5b5051919050565b808202811582820484141761050457610504610c8d565b5f82610d5357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610d68575f5ffd5b8151610c4481610beb565b8181038181111561050457610504610c8d565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212206279b1612d27f04a086cff69c49571686aecd250bb86c66d03f122e88f76900f64736f6c634300081c0033
Verified Source Code Full Match
Compiler: v0.8.28+commit.7893614a
EVM: cancun
Optimization: Yes (200 runs)
AuthentiBeesStaking.sol 127 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function balanceOf(address account) external view returns (uint256);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
interface AuthenticallyCryptoNFT {
function ownerOf(uint256 tokenId) external view returns (address);
function transferFrom(address from, address to, uint256 tokenId) external;
function balanceOf(address owner) external view returns (uint256);
}
contract AuthentiBeesStaking {
AuthenticallyCryptoNFT public nftContract;
IERC20 public rewardsToken;
address public communityRewardsWallet;
address public contractOwner;
bool public paused;
uint256 public constant CLAIM_COOLDOWN = 23 hours;
uint256 public constant REWARD_PERCENT = 1; // 1% of communityRewardsWallet balance
mapping(address => uint256[]) private stakedTokens;
mapping(uint256 => uint256) public stakingTime;
mapping(uint256 => bool) public isStaked;
event NFTStaked(address indexed staker, uint256 tokenId, uint256 timestamp);
event NFTUnstaked(address indexed staker, uint256 tokenId);
event RewardsClaimed(address indexed staker, uint256 tokenId, uint256 amount);
event OwnershipRenounced();
modifier onlyOwner() {
require(msg.sender == contractOwner, "Not the owner");
_;
}
// Constructor now sets NFT contract and rewards wallet
constructor(address _nftContract, address _communityRewardsWallet) {
contractOwner = msg.sender;
nftContract = AuthenticallyCryptoNFT(_nftContract);
communityRewardsWallet = _communityRewardsWallet;
}
function setRewardsToken(address _rewardsToken) external onlyOwner {
rewardsToken = IERC20(_rewardsToken);
}
function renounceOwnership() external onlyOwner {
contractOwner = address(0);
emit OwnershipRenounced();
}
function approveMaxTokens() external {
require(msg.sender == communityRewardsWallet, "Only the community wallet can approve");
rewardsToken.transferFrom(communityRewardsWallet, address(this), type(uint256).max);
}
function stake(uint256 tokenId) external {
require(!paused, "Staking is paused");
require(nftContract.ownerOf(tokenId) == msg.sender, "Not token owner");
require(!isStaked[tokenId], "Already staked");
nftContract.transferFrom(msg.sender, address(this), tokenId);
stakedTokens[msg.sender].push(tokenId);
stakingTime[tokenId] = block.timestamp;
isStaked[tokenId] = true;
emit NFTStaked(msg.sender, tokenId, block.timestamp);
}
function unstake(uint256 tokenId) external {
require(isTokenStaked(msg.sender, tokenId), "Not staked by sender");
removeStakedToken(msg.sender, tokenId);
isStaked[tokenId] = false;
delete stakingTime[tokenId];
nftContract.transferFrom(address(this), msg.sender, tokenId);
emit NFTUnstaked(msg.sender, tokenId);
}
function claimRewards(uint256 tokenId) external {
require(isTokenStaked(msg.sender, tokenId), "Not staked by sender");
require(block.timestamp >= stakingTime[tokenId] + CLAIM_COOLDOWN, "Cooldown active");
uint256 rewardAmount = calculateReward();
require(rewardAmount > 0, "No rewards available");
stakingTime[tokenId] = block.timestamp; // Reset cooldown
require(
rewardsToken.transferFrom(communityRewardsWallet, msg.sender, rewardAmount),
"Reward transfer failed"
);
emit RewardsClaimed(msg.sender, tokenId, rewardAmount);
}
function calculateReward() public view returns (uint256) {
uint256 walletBalance = rewardsToken.balanceOf(communityRewardsWallet);
return (walletBalance * REWARD_PERCENT) / 100;
}
function isTokenStaked(address staker, uint256 tokenId) public view returns (bool) {
uint256[] storage userTokens = stakedTokens[staker];
for (uint256 i = 0; i < userTokens.length; i++) {
if (userTokens[i] == tokenId) return true;
}
return false;
}
function getStakedTokens(address _user) external view returns (uint256[] memory) {
return stakedTokens[_user];
}
function removeStakedToken(address staker, uint256 tokenId) internal {
uint256[] storage tokens = stakedTokens[staker];
for (uint256 i = 0; i < tokens.length; i++) {
if (tokens[i] == tokenId) {
tokens[i] = tokens[tokens.length - 1];
tokens.pop();
break;
}
}
}
}
Read Contract
CLAIM_COOLDOWN 0x37c909ec → uint256
REWARD_PERCENT 0x06fbedbe → uint256
calculateReward 0x725cedd3 → uint256
communityRewardsWallet 0x2fcbb5a2 → address
contractOwner 0xce606ee0 → address
getStakedTokens 0x63c28db1 → uint256[]
isStaked 0xbaa51f86 → bool
isTokenStaked 0x2778cfba → bool
nftContract 0xd56d229d → address
paused 0x5c975abb → bool
rewardsToken 0xd1af0c7d → address
stakingTime 0x4e795b1c → uint256
Write Contract 6 functions
These functions modify contract state and require a wallet transaction to execute.
approveMaxTokens 0xabcd5d84
No parameters
claimRewards 0x0962ef79
uint256 tokenId
renounceOwnership 0x715018a6
No parameters
setRewardsToken 0xde320cc1
address _rewardsToken
stake 0xa694fc3a
uint256 tokenId
unstake 0x2e17de78
uint256 tokenId
Recent Transactions
No transactions found for this address