Address Contract Partially Verified
Address
0x9F30Ff63Bc38f4ed781863bD8435fBf544afE03f
Balance
0 ETH
Nonce
1
Code Size
3141 bytes
Creator
0x29255Fc5...3F3B at tx 0xb32a0ccd...d9d65d
Indexed Transactions
0
Contract Bytecode
3141 bytes
0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c8063715018a6116100885780639168ae72116100635780639168ae721461019b578063bed9d861146101ff578063f2fde38b14610207578063faf5625f1461021a575f80fd5b8063715018a6146101705780638bdf67f2146101785780638da5cb5b1461018b575f80fd5b80633a4b66f1116100c35780633a4b66f11461014e57806341c6138314610156578063485d38341461015f5780634e71d92d14610168575f80fd5b806305e1f2a8146100e95780631f4c74fd1461012d5780633086536214610144575b5f80fd5b6101107f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d81565b6040516001600160a01b0390911681526020015b60405180910390f35b61013660015481565b604051908152602001610124565b61014c61022a565b005b61014c610388565b61013660025481565b61013661070881565b61014c6104d1565b61014c61072c565b61014c610186366004610b37565b610760565b5f546001600160a01b0316610110565b6101d76101a9366004610b4e565b60036020525f90815260409020805460019091015460ff808216916101008104821691620100009091041684565b6040805194855292151560208501529015159183019190915215156060820152608001610124565b61014c610874565b61014c610215366004610b4e565b610a55565b61013668056bc75e2d6310000081565b5f546001600160a01b0316331461025c5760405162461bcd60e51b815260040161025390610b7b565b60405180910390fd5b5f60025460015461026d9190610bc4565b90505f81116102ad5760405162461bcd60e51b815260206004820152600c60248201526b139bdd1a1a5b99c81b19599d60a21b6044820152606401610253565b60025460015560405163a9059cbb60e01b8152336004820152602481018290527f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d6001600160a01b03169063a9059cbb906044016020604051808303815f875af115801561031d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103419190610bdd565b6103855760405162461bcd60e51b815260206004820152601560248201527413dddb995c881dda5d1a191c985dc819985a5b1959605a1b6044820152606401610253565b50565b335f908152600360205260409020600181015460ff16156103dc5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481cdd185ad95960921b6044820152606401610253565b6040516323b872dd60e01b815233600482015230602482015268056bc75e2d6310000060448201527f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d6001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610454573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104789190610bdd565b6104bc5760405162461bcd60e51b815260206004820152601560248201527414dd185ad9481d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610253565b4281556001908101805460ff19169091179055565b335f908152600360205260409020600181015460ff166105205760405162461bcd60e51b815260206004820152600a602482015269139bdd081cdd185ad95960b21b6044820152606401610253565b6001810154610100900460ff161561056c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610253565b805461057b9061070890610bfc565b4210156105bf5760405162461bcd60e51b8152602060048201526012602482015271546f6f206561726c7920746f20636c61696d60701b6044820152606401610253565b60015468056bc75e2d631000006002546105d99190610bfc565b111561061e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610253565b60018101805461ff0019166101001790556002805468056bc75e2d6310000091905f9061064c908490610bfc565b909155505060405163a9059cbb60e01b815233600482015268056bc75e2d6310000060248201527f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d6001600160a01b03169063a9059cbb906044016020604051808303815f875af11580156106c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e79190610bdd565b6103855760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401610253565b5f546001600160a01b031633146107555760405162461bcd60e51b815260040161025390610b7b565b61075e5f610ae8565b565b5f546001600160a01b031633146107895760405162461bcd60e51b815260040161025390610b7b565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d6001600160a01b0316906323b872dd906064016020604051808303815f875af11580156107f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081d9190610bdd565b61085b5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610253565b8060015f82825461086c9190610bfc565b909155505050565b335f908152600360205260409020600181015460ff166108c35760405162461bcd60e51b815260206004820152600a602482015269139bdd081cdd185ad95960b21b6044820152606401610253565b600181015462010000900460ff16156109125760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903bb4ba34323930bbb760791b6044820152606401610253565b80546109219061070890610bfc565b4210156109685760405162461bcd60e51b8152602060048201526015602482015274546f6f206561726c7920746f20776974686472617760581b6044820152606401610253565b60018101805462ff000019166201000017905560405163a9059cbb60e01b815233600482015268056bc75e2d6310000060248201526001600160a01b037f000000000000000000000000e9942930a2e3a8a096a8a9637d62219f3159cf4d169063a9059cbb906044016020604051808303815f875af11580156109ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a119190610bdd565b6103855760405162461bcd60e51b815260206004820152601560248201527414dd185ad9481dda5d1a191c985dc819985a5b1959605a1b6044820152606401610253565b5f546001600160a01b03163314610a7e5760405162461bcd60e51b815260040161025390610b7b565b6001600160a01b038116610ae35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610253565b610385815b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610b47575f80fd5b5035919050565b5f60208284031215610b5e575f80fd5b81356001600160a01b0381168114610b74575f80fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd757610bd7610bb0565b92915050565b5f60208284031215610bed575f80fd5b81518015158114610b74575f80fd5b80820180821115610bd757610bd7610bb056fea264697066735822122011ef090c6867fd0c0b043a0fea380fc3368681cbda93e9f6f44cef6b0f85ab2a64736f6c63430008140033
Verified Source Code Partial Match
Compiler: v0.8.20+commit.a1b79de6
EVM: shanghai
Optimization: Yes (200 runs)
KukaStaking1M.sol 123 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// --- Minimal Context (used by Ownable) ---
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
// --- Ownable ---
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor(address initialOwner) {
require(initialOwner != address(0), "Owner address cannot be zero");
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// --- IERC20 Interface ---
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// --- KUKA Staking Contract ---
contract KukaStaking1M is Ownable {
IERC20 public immutable kuka;
uint256 public constant STAKE_AMOUNT = 100 * 1e18;
uint256 public constant LOCK_DURATION = 30 minutes;
uint256 public totalRewardsDeposited;
uint256 public totalClaims;
struct StakeInfo {
uint256 startTime;
bool hasStaked;
bool hasClaimed;
bool hasWithdrawn;
}
mapping(address => StakeInfo) public stakers;
constructor(address _kukaToken, address _owner) Ownable(_owner) {
kuka = IERC20(_kukaToken);
}
function depositRewards(uint256 amount) external onlyOwner {
require(kuka.transferFrom(msg.sender, address(this), amount), "Transfer failed");
totalRewardsDeposited += amount;
}
function stake() external {
StakeInfo storage info = stakers[msg.sender];
require(!info.hasStaked, "Already staked");
require(kuka.transferFrom(msg.sender, address(this), STAKE_AMOUNT), "Stake transfer failed");
info.startTime = block.timestamp;
info.hasStaked = true;
}
function claim() external {
StakeInfo storage info = stakers[msg.sender];
require(info.hasStaked, "Not staked");
require(!info.hasClaimed, "Already claimed");
require(block.timestamp >= info.startTime + LOCK_DURATION, "Too early to claim");
require(totalClaims + STAKE_AMOUNT <= totalRewardsDeposited, "Insufficient rewards");
info.hasClaimed = true;
totalClaims += STAKE_AMOUNT;
require(kuka.transfer(msg.sender, STAKE_AMOUNT), "Reward transfer failed");
}
function withdrawStake() external {
StakeInfo storage info = stakers[msg.sender];
require(info.hasStaked, "Not staked");
require(!info.hasWithdrawn, "Already withdrawn");
require(block.timestamp >= info.startTime + LOCK_DURATION, "Too early to withdraw");
info.hasWithdrawn = true;
require(kuka.transfer(msg.sender, STAKE_AMOUNT), "Stake withdraw failed");
}
function withdrawRemainingRewards() external onlyOwner {
uint256 remaining = totalRewardsDeposited - totalClaims;
require(remaining > 0, "Nothing left");
totalRewardsDeposited = totalClaims;
require(kuka.transfer(msg.sender, remaining), "Owner withdraw failed");
}
}
Read Contract
LOCK_DURATION 0x485d3834 → uint256
STAKE_AMOUNT 0xfaf5625f → uint256
kuka 0x05e1f2a8 → address
owner 0x8da5cb5b → address
stakers 0x9168ae72 → uint256, bool, bool, bool
totalClaims 0x41c61383 → uint256
totalRewardsDeposited 0x1f4c74fd → uint256
Write Contract 7 functions
These functions modify contract state and require a wallet transaction to execute.
claim 0x4e71d92d
No parameters
depositRewards 0x8bdf67f2
uint256 amount
renounceOwnership 0x715018a6
No parameters
stake 0x3a4b66f1
No parameters
transferOwnership 0xf2fde38b
address newOwner
withdrawRemainingRewards 0x30865362
No parameters
withdrawStake 0xbed9d861
No parameters
Recent Transactions
No transactions found for this address