Source Code
Latest 25 from a total of 220 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Incinerate | 43121374 | 4 hrs ago | IN | 0 ETH | 0.00001125 | ||||
| Incinerate | 43106973 | 12 hrs ago | IN | 0 ETH | 0.00001127 | ||||
| Incinerate | 43092572 | 20 hrs ago | IN | 0 ETH | 0.00001126 | ||||
| Incinerate | 43078171 | 28 hrs ago | IN | 0 ETH | 0.00001133 | ||||
| Incinerate | 43063770 | 36 hrs ago | IN | 0 ETH | 0.00001124 | ||||
| Transfer | 43063510 | 36 hrs ago | IN | 0.00000001 ETH | 0.00000033 | ||||
| Incinerate | 43049369 | 44 hrs ago | IN | 0 ETH | 0.00001125 | ||||
| Incinerate | 43034968 | 2 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 43020567 | 2 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 43006166 | 2 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42991765 | 3 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42977364 | 3 days ago | IN | 0 ETH | 0.00001125 | ||||
| Incinerate | 42962963 | 3 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42948562 | 4 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42934161 | 4 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42919760 | 4 days ago | IN | 0 ETH | 0.00001149 | ||||
| Incinerate | 42905359 | 5 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42890958 | 5 days ago | IN | 0 ETH | 0.00001126 | ||||
| Incinerate | 42876557 | 5 days ago | IN | 0 ETH | 0.00000944 | ||||
| Incinerate | 42862156 | 6 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42847755 | 6 days ago | IN | 0 ETH | 0.00001127 | ||||
| Incinerate | 42833354 | 6 days ago | IN | 0 ETH | 0.00001156 | ||||
| Incinerate | 42818953 | 7 days ago | IN | 0 ETH | 0.00001124 | ||||
| Incinerate | 42804552 | 7 days ago | IN | 0 ETH | 0.00001182 | ||||
| Incinerate | 42790151 | 7 days ago | IN | 0 ETH | 0.00001136 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Incinerator
Compiler Version
v0.8.33+commit.64118f21
Optimization Enabled:
No with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/// @title Incinerator 🔥
/// @notice A public CLAWD token burner. Anyone can call incinerate() once every cooldown period.
/// Each call burns a set amount of CLAWD and rewards the caller.
/// @dev The contract must hold CLAWD tokens. Owner can configure parameters.
contract Incinerator is Ownable {
using SafeERC20 for IERC20;
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
IERC20 public immutable CLAWD_TOKEN;
uint256 public burnAmount; // Amount burned per call (e.g. 10M CLAWD)
uint256 public callerReward; // Reward to caller per call (e.g. 10k CLAWD)
uint256 public cooldownSeconds; // Time between calls (e.g. 8 hours)
uint256 public lastIncinerateTime;
uint256 public totalBurned;
uint256 public totalCalls;
// Track callers
mapping(address => uint256) public callerBurnCount;
mapping(address => uint256) public callerTotalBurned;
event Incinerated(
address indexed caller,
uint256 amountBurned,
uint256 callerRewardPaid,
uint256 timestamp
);
event ParametersUpdated(
uint256 burnAmount,
uint256 callerReward,
uint256 cooldownSeconds
);
constructor(
address _clawdToken,
uint256 _burnAmount,
uint256 _callerReward,
uint256 _cooldownSeconds
) Ownable(msg.sender) {
CLAWD_TOKEN = IERC20(_clawdToken);
burnAmount = _burnAmount;
callerReward = _callerReward;
cooldownSeconds = _cooldownSeconds;
// Allow first call immediately
// We don't set lastIncinerateTime, so it defaults to 0
// The check uses a special case for first call
}
/// @notice Burn CLAWD tokens and reward the caller. Anyone can call this.
function incinerate() external {
require(
totalCalls == 0 || block.timestamp >= lastIncinerateTime + cooldownSeconds,
"Cooldown not elapsed"
);
uint256 contractBalance = CLAWD_TOKEN.balanceOf(address(this));
uint256 totalNeeded = burnAmount + callerReward;
require(contractBalance >= totalNeeded, "Not enough CLAWD in contract");
lastIncinerateTime = block.timestamp;
totalBurned += burnAmount;
totalCalls += 1;
callerBurnCount[msg.sender] += 1;
callerTotalBurned[msg.sender] += burnAmount;
// Burn tokens by sending to dead address
CLAWD_TOKEN.safeTransfer(DEAD, burnAmount);
// Reward the caller
CLAWD_TOKEN.safeTransfer(msg.sender, callerReward);
emit Incinerated(msg.sender, burnAmount, callerReward, block.timestamp);
}
/// @notice Time remaining until next incineration is possible
function timeUntilNextBurn() external view returns (uint256) {
if (totalCalls == 0) return 0; // First call always allowed
if (block.timestamp >= lastIncinerateTime + cooldownSeconds) {
return 0;
}
return (lastIncinerateTime + cooldownSeconds) - block.timestamp;
}
/// @notice Check if incinerate() can be called right now
function canIncinerate() external view returns (bool) {
if (totalCalls > 0 && block.timestamp < lastIncinerateTime + cooldownSeconds) return false;
uint256 contractBalance = CLAWD_TOKEN.balanceOf(address(this));
return contractBalance >= burnAmount + callerReward;
}
/// @notice CLAWD balance held by this contract
function clawdBalance() external view returns (uint256) {
return CLAWD_TOKEN.balanceOf(address(this));
}
/// @notice Owner can update parameters
function setParameters(
uint256 _burnAmount,
uint256 _callerReward,
uint256 _cooldownSeconds
) external onlyOwner {
burnAmount = _burnAmount;
callerReward = _callerReward;
cooldownSeconds = _cooldownSeconds;
emit ParametersUpdated(_burnAmount, _callerReward, _cooldownSeconds);
}
/// @notice Owner can withdraw tokens in case of emergency
function emergencyWithdraw(address token, uint256 amount) external onlyOwner {
IERC20(token).safeTransfer(owner(), amount);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
import {IERC1363} from "../../../interfaces/IERC1363.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC-20 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 {
/**
* @dev An operation with an ERC-20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @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 {
if (!_safeTransfer(token, to, value, true)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @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 {
if (!_safeTransferFrom(token, from, to, value, true)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {
return _safeTransfer(token, to, value, false);
}
/**
* @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {
return _safeTransferFrom(token, from, to, value, false);
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*
* NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
* only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
* set here.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
if (!_safeApprove(token, spender, value, false)) {
if (!_safeApprove(token, spender, 0, true)) revert SafeERC20FailedOperation(address(token));
if (!_safeApprove(token, spender, value, true)) revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
* has no code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
* Oppositely, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
* once without retrying, and relies on the returned value to be true.
*
* Reverts if the returned value is other than `true`.
*/
function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity `token.transfer(to, value)` call, 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 to The recipient of the tokens
* @param value The amount of token to transfer
* @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.
*/
function _safeTransfer(IERC20 token, address to, uint256 value, bool bubble) private returns (bool success) {
bytes4 selector = IERC20.transfer.selector;
assembly ("memory-safe") {
let fmp := mload(0x40)
mstore(0x00, selector)
mstore(0x04, and(to, shr(96, not(0))))
mstore(0x24, value)
success := call(gas(), token, 0, 0x00, 0x44, 0x00, 0x20)
// if call success and return is true, all is good.
// otherwise (not success or return is not true), we need to perform further checks
if iszero(and(success, eq(mload(0x00), 1))) {
// if the call was a failure and bubble is enabled, bubble the error
if and(iszero(success), bubble) {
returndatacopy(fmp, 0x00, returndatasize())
revert(fmp, returndatasize())
}
// if the return value is not true, then the call is only successful if:
// - the token address has code
// - the returndata is empty
success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))
}
mstore(0x40, fmp)
}
}
/**
* @dev Imitates a Solidity `token.transferFrom(from, to, value)` call, 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 from The sender of the tokens
* @param to The recipient of the tokens
* @param value The amount of token to transfer
* @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.
*/
function _safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value,
bool bubble
) private returns (bool success) {
bytes4 selector = IERC20.transferFrom.selector;
assembly ("memory-safe") {
let fmp := mload(0x40)
mstore(0x00, selector)
mstore(0x04, and(from, shr(96, not(0))))
mstore(0x24, and(to, shr(96, not(0))))
mstore(0x44, value)
success := call(gas(), token, 0, 0x00, 0x64, 0x00, 0x20)
// if call success and return is true, all is good.
// otherwise (not success or return is not true), we need to perform further checks
if iszero(and(success, eq(mload(0x00), 1))) {
// if the call was a failure and bubble is enabled, bubble the error
if and(iszero(success), bubble) {
returndatacopy(fmp, 0x00, returndatasize())
revert(fmp, returndatasize())
}
// if the return value is not true, then the call is only successful if:
// - the token address has code
// - the returndata is empty
success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))
}
mstore(0x40, fmp)
mstore(0x60, 0)
}
}
/**
* @dev Imitates a Solidity `token.approve(spender, value)` call, 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 spender The spender of the tokens
* @param value The amount of token to transfer
* @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.
*/
function _safeApprove(IERC20 token, address spender, uint256 value, bool bubble) private returns (bool success) {
bytes4 selector = IERC20.approve.selector;
assembly ("memory-safe") {
let fmp := mload(0x40)
mstore(0x00, selector)
mstore(0x04, and(spender, shr(96, not(0))))
mstore(0x24, value)
success := call(gas(), token, 0, 0x00, 0x44, 0x00, 0x20)
// if call success and return is true, all is good.
// otherwise (not success or return is not true), we need to perform further checks
if iszero(and(success, eq(mload(0x00), 1))) {
// if the call was a failure and bubble is enabled, bubble the error
if and(iszero(success), bubble) {
returndatacopy(fmp, 0x00, returndatasize())
revert(fmp, returndatasize())
}
// if the return value is not true, then the call is only successful if:
// - the token address has code
// - the returndata is empty
success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))
}
mstore(0x40, fmp)
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)
pragma solidity >=0.6.2;
import {IERC20} from "./IERC20.sol";
import {IERC165} from "./IERC165.sol";
/**
* @title IERC1363
* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
*
* Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
*/
interface IERC1363 is IERC20, IERC165 {
/*
* Note: the ERC-165 identifier for this interface is 0xb0202a11.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @param data Additional data with no specified format, sent in call to `spender`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)
pragma solidity >=0.4.16;
import {IERC20} from "../token/ERC20/IERC20.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)
pragma solidity >=0.4.16;
import {IERC165} from "../utils/introspection/IERC165.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/solidity-bytes-utils/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solidity-bytes-utils/=lib/solidity-bytes-utils/contracts/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_clawdToken","type":"address"},{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_callerReward","type":"uint256"},{"internalType":"uint256","name":"_cooldownSeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callerRewardPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Incinerated","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":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callerReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cooldownSeconds","type":"uint256"}],"name":"ParametersUpdated","type":"event"},{"inputs":[],"name":"CLAWD_TOKEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"callerBurnCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"callerTotalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canIncinerate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clawdBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"incinerate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastIncinerateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_callerReward","type":"uint256"},{"internalType":"uint256","name":"_cooldownSeconds","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeUntilNextBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCalls","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a060405234801561000f575f5ffd5b5060405161139c38038061139c83398181016040528101906100319190610256565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009991906102c9565b60405180910390fd5b6100b18161010460201b60201c565b508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050826001819055508160028190555080600381905550505050506102e2565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101f2826101c9565b9050919050565b610202816101e8565b811461020c575f5ffd5b50565b5f8151905061021d816101f9565b92915050565b5f819050919050565b61023581610223565b811461023f575f5ffd5b50565b5f815190506102508161022c565b92915050565b5f5f5f5f6080858703121561026e5761026d6101c5565b5b5f61027b8782880161020f565b945050602061028c87828801610242565b935050604061029d87828801610242565b92505060606102ae87828801610242565b91505092959194509250565b6102c3816101e8565b82525050565b5f6020820190506102dc5f8301846102ba565b92915050565b60805161107f61031d5f395f81816104300152818161050f0152818161062e0152818161080a0152818161085701526108f8015261107f5ff3fe608060405234801561000f575f5ffd5b506004361061011f575f3560e01c80638da5cb5b116100ab578063b8221bc41161006f578063b8221bc4146102d3578063bbd1d251146102f1578063d621bda0146102fb578063d89135cd14610319578063f2fde38b146103375761011f565b80638da5cb5b1461022d5780639497c7c71461024b57806395ccea671461027b5780639e3910e714610297578063a7364a1e146102b55761011f565b8063486a7e6b116100f2578063486a7e6b146101995780635a1ab780146101b75780635bf1220b146101d55780636318544a14610205578063715018a6146102235761011f565b806303fd2a451461012357806334c5d2ce146101415780633af3f24f1461015d5780633cc89a401461017b575b5f5ffd5b61012b610353565b6040516101389190610c60565b60405180910390f35b61015b60048036038101906101569190610cb0565b610359565b005b6101656103b6565b6040516101729190610d0f565b60405180910390f35b6101836103bc565b6040516101909190610d0f565b60405180910390f35b6101a16103c2565b6040516101ae9190610d0f565b60405180910390f35b6101bf6103c8565b6040516101cc9190610d0f565b60405180910390f35b6101ef60048036038101906101ea9190610d52565b610419565b6040516101fc9190610d0f565b60405180910390f35b61020d61042e565b60405161021a9190610dd8565b60405180910390f35b61022b610452565b005b610235610465565b6040516102429190610c60565b60405180910390f35b61026560048036038101906102609190610d52565b61048c565b6040516102729190610d0f565b60405180910390f35b61029560048036038101906102909190610df1565b6104a1565b005b61029f6104df565b6040516102ac9190610e49565b60405180910390f35b6102bd6105c1565b6040516102ca9190610d0f565b60405180910390f35b6102db6105c7565b6040516102e89190610d0f565b60405180910390f35b6102f96105cd565b005b6103036108f5565b6040516103109190610d0f565b60405180910390f35b610321610993565b60405161032e9190610d0f565b60405180910390f35b610351600480360381019061034c9190610d52565b610999565b005b61dead81565b610361610a1d565b8260018190555081600281905550806003819055507f4dd522c050b46ef5e852ea87e7cd136b049dcb37740ad38386fbbb5cd30aa9248383836040516103a993929190610e62565b60405180910390a1505050565b60065481565b60025481565b60015481565b5f5f600654036103da575f9050610416565b6003546004546103ea9190610ec4565b42106103f8575f9050610416565b426003546004546104099190610ec4565b6104139190610ef7565b90505b90565b6008602052805f5260405f205f915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61045a610a1d565b6104635f610aa4565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007602052805f5260405f205f915090505481565b6104a9610a1d565b6104db6104b4610465565b828473ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b5050565b5f5f6006541180156104ff57506003546004546104fc9190610ec4565b42105b1561050c575f90506105be565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105669190610c60565b602060405180830381865afa158015610581573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a59190610f3e565b90506002546001546105b79190610ec4565b8110159150505b90565b60045481565b60035481565b5f60065414806105ec57506003546004546105e89190610ec4565b4210155b61062b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062290610fc3565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106859190610c60565b602060405180830381865afa1580156106a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c49190610f3e565b90505f6002546001546106d79190610ec4565b90508082101561071c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107139061102b565b60405180910390fd5b4260048190555060015460055f8282546107369190610ec4565b92505081905550600160065f82825461074f9190610ec4565b92505081905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107a39190610ec4565b9250508190555060015460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107f89190610ec4565b9250508190555061084e61dead6001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b61089b336002547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f4031bacf83d7fecf501f3155733de67666127c4b8539af98c2a1ddda6e4595f3600154600254426040516108e993929190610e62565b60405180910390a25050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161094f9190610c60565b602060405180830381865afa15801561096a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098e9190610f3e565b905090565b60055481565b6109a1610a1d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a11575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a089190610c60565b60405180910390fd5b610a1a81610aa4565b50565b610a25610bb8565b73ffffffffffffffffffffffffffffffffffffffff16610a43610465565b73ffffffffffffffffffffffffffffffffffffffff1614610aa257610a66610bb8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a999190610c60565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b728383836001610bbf565b610bb357826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610baa9190610c60565b60405180910390fd5b505050565b5f33905090565b5f5f63a9059cbb60e01b9050604051815f525f1960601c86166004528460245260205f60445f5f8b5af1925060015f51148316610c13578383151615610c07573d5f823e3d81fd5b5f873b113d1516831692505b806040525050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c4a82610c21565b9050919050565b610c5a81610c40565b82525050565b5f602082019050610c735f830184610c51565b92915050565b5f5ffd5b5f819050919050565b610c8f81610c7d565b8114610c99575f5ffd5b50565b5f81359050610caa81610c86565b92915050565b5f5f5f60608486031215610cc757610cc6610c79565b5b5f610cd486828701610c9c565b9350506020610ce586828701610c9c565b9250506040610cf686828701610c9c565b9150509250925092565b610d0981610c7d565b82525050565b5f602082019050610d225f830184610d00565b92915050565b610d3181610c40565b8114610d3b575f5ffd5b50565b5f81359050610d4c81610d28565b92915050565b5f60208284031215610d6757610d66610c79565b5b5f610d7484828501610d3e565b91505092915050565b5f819050919050565b5f610da0610d9b610d9684610c21565b610d7d565b610c21565b9050919050565b5f610db182610d86565b9050919050565b5f610dc282610da7565b9050919050565b610dd281610db8565b82525050565b5f602082019050610deb5f830184610dc9565b92915050565b5f5f60408385031215610e0757610e06610c79565b5b5f610e1485828601610d3e565b9250506020610e2585828601610c9c565b9150509250929050565b5f8115159050919050565b610e4381610e2f565b82525050565b5f602082019050610e5c5f830184610e3a565b92915050565b5f606082019050610e755f830186610d00565b610e826020830185610d00565b610e8f6040830184610d00565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ece82610c7d565b9150610ed983610c7d565b9250828201905080821115610ef157610ef0610e97565b5b92915050565b5f610f0182610c7d565b9150610f0c83610c7d565b9250828203905081811115610f2457610f23610e97565b5b92915050565b5f81519050610f3881610c86565b92915050565b5f60208284031215610f5357610f52610c79565b5b5f610f6084828501610f2a565b91505092915050565b5f82825260208201905092915050565b7f436f6f6c646f776e206e6f7420656c61707365640000000000000000000000005f82015250565b5f610fad601483610f69565b9150610fb882610f79565b602082019050919050565b5f6020820190508181035f830152610fda81610fa1565b9050919050565b7f4e6f7420656e6f75676820434c41574420696e20636f6e7472616374000000005f82015250565b5f611015601c83610f69565b915061102082610fe1565b602082019050919050565b5f6020820190508181035f83015261104281611009565b905091905056fea26469706673582212202206b3e3d1b0138334aca30e91ec2c868714fac899f23b99eb022fd5645dfef064736f6c634300082100330000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b07000000000000000000000000000000000000000000084595161401484a00000000000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000007080
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061011f575f3560e01c80638da5cb5b116100ab578063b8221bc41161006f578063b8221bc4146102d3578063bbd1d251146102f1578063d621bda0146102fb578063d89135cd14610319578063f2fde38b146103375761011f565b80638da5cb5b1461022d5780639497c7c71461024b57806395ccea671461027b5780639e3910e714610297578063a7364a1e146102b55761011f565b8063486a7e6b116100f2578063486a7e6b146101995780635a1ab780146101b75780635bf1220b146101d55780636318544a14610205578063715018a6146102235761011f565b806303fd2a451461012357806334c5d2ce146101415780633af3f24f1461015d5780633cc89a401461017b575b5f5ffd5b61012b610353565b6040516101389190610c60565b60405180910390f35b61015b60048036038101906101569190610cb0565b610359565b005b6101656103b6565b6040516101729190610d0f565b60405180910390f35b6101836103bc565b6040516101909190610d0f565b60405180910390f35b6101a16103c2565b6040516101ae9190610d0f565b60405180910390f35b6101bf6103c8565b6040516101cc9190610d0f565b60405180910390f35b6101ef60048036038101906101ea9190610d52565b610419565b6040516101fc9190610d0f565b60405180910390f35b61020d61042e565b60405161021a9190610dd8565b60405180910390f35b61022b610452565b005b610235610465565b6040516102429190610c60565b60405180910390f35b61026560048036038101906102609190610d52565b61048c565b6040516102729190610d0f565b60405180910390f35b61029560048036038101906102909190610df1565b6104a1565b005b61029f6104df565b6040516102ac9190610e49565b60405180910390f35b6102bd6105c1565b6040516102ca9190610d0f565b60405180910390f35b6102db6105c7565b6040516102e89190610d0f565b60405180910390f35b6102f96105cd565b005b6103036108f5565b6040516103109190610d0f565b60405180910390f35b610321610993565b60405161032e9190610d0f565b60405180910390f35b610351600480360381019061034c9190610d52565b610999565b005b61dead81565b610361610a1d565b8260018190555081600281905550806003819055507f4dd522c050b46ef5e852ea87e7cd136b049dcb37740ad38386fbbb5cd30aa9248383836040516103a993929190610e62565b60405180910390a1505050565b60065481565b60025481565b60015481565b5f5f600654036103da575f9050610416565b6003546004546103ea9190610ec4565b42106103f8575f9050610416565b426003546004546104099190610ec4565b6104139190610ef7565b90505b90565b6008602052805f5260405f205f915090505481565b7f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0781565b61045a610a1d565b6104635f610aa4565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007602052805f5260405f205f915090505481565b6104a9610a1d565b6104db6104b4610465565b828473ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b5050565b5f5f6006541180156104ff57506003546004546104fc9190610ec4565b42105b1561050c575f90506105be565b5f7f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105669190610c60565b602060405180830381865afa158015610581573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a59190610f3e565b90506002546001546105b79190610ec4565b8110159150505b90565b60045481565b60035481565b5f60065414806105ec57506003546004546105e89190610ec4565b4210155b61062b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062290610fc3565b60405180910390fd5b5f7f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106859190610c60565b602060405180830381865afa1580156106a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c49190610f3e565b90505f6002546001546106d79190610ec4565b90508082101561071c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107139061102b565b60405180910390fd5b4260048190555060015460055f8282546107369190610ec4565b92505081905550600160065f82825461074f9190610ec4565b92505081905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107a39190610ec4565b9250508190555060015460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107f89190610ec4565b9250508190555061084e61dead6001547f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0773ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b61089b336002547f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0773ffffffffffffffffffffffffffffffffffffffff16610b659092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f4031bacf83d7fecf501f3155733de67666127c4b8539af98c2a1ddda6e4595f3600154600254426040516108e993929190610e62565b60405180910390a25050565b5f7f0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b0773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161094f9190610c60565b602060405180830381865afa15801561096a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098e9190610f3e565b905090565b60055481565b6109a1610a1d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a11575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a089190610c60565b60405180910390fd5b610a1a81610aa4565b50565b610a25610bb8565b73ffffffffffffffffffffffffffffffffffffffff16610a43610465565b73ffffffffffffffffffffffffffffffffffffffff1614610aa257610a66610bb8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a999190610c60565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b728383836001610bbf565b610bb357826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610baa9190610c60565b60405180910390fd5b505050565b5f33905090565b5f5f63a9059cbb60e01b9050604051815f525f1960601c86166004528460245260205f60445f5f8b5af1925060015f51148316610c13578383151615610c07573d5f823e3d81fd5b5f873b113d1516831692505b806040525050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c4a82610c21565b9050919050565b610c5a81610c40565b82525050565b5f602082019050610c735f830184610c51565b92915050565b5f5ffd5b5f819050919050565b610c8f81610c7d565b8114610c99575f5ffd5b50565b5f81359050610caa81610c86565b92915050565b5f5f5f60608486031215610cc757610cc6610c79565b5b5f610cd486828701610c9c565b9350506020610ce586828701610c9c565b9250506040610cf686828701610c9c565b9150509250925092565b610d0981610c7d565b82525050565b5f602082019050610d225f830184610d00565b92915050565b610d3181610c40565b8114610d3b575f5ffd5b50565b5f81359050610d4c81610d28565b92915050565b5f60208284031215610d6757610d66610c79565b5b5f610d7484828501610d3e565b91505092915050565b5f819050919050565b5f610da0610d9b610d9684610c21565b610d7d565b610c21565b9050919050565b5f610db182610d86565b9050919050565b5f610dc282610da7565b9050919050565b610dd281610db8565b82525050565b5f602082019050610deb5f830184610dc9565b92915050565b5f5f60408385031215610e0757610e06610c79565b5b5f610e1485828601610d3e565b9250506020610e2585828601610c9c565b9150509250929050565b5f8115159050919050565b610e4381610e2f565b82525050565b5f602082019050610e5c5f830184610e3a565b92915050565b5f606082019050610e755f830186610d00565b610e826020830185610d00565b610e8f6040830184610d00565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ece82610c7d565b9150610ed983610c7d565b9250828201905080821115610ef157610ef0610e97565b5b92915050565b5f610f0182610c7d565b9150610f0c83610c7d565b9250828203905081811115610f2457610f23610e97565b5b92915050565b5f81519050610f3881610c86565b92915050565b5f60208284031215610f5357610f52610c79565b5b5f610f6084828501610f2a565b91505092915050565b5f82825260208201905092915050565b7f436f6f6c646f776e206e6f7420656c61707365640000000000000000000000005f82015250565b5f610fad601483610f69565b9150610fb882610f79565b602082019050919050565b5f6020820190508181035f830152610fda81610fa1565b9050919050565b7f4e6f7420656e6f75676820434c41574420696e20636f6e7472616374000000005f82015250565b5f611015601c83610f69565b915061102082610fe1565b602082019050919050565b5f6020820190508181035f83015261104281611009565b905091905056fea26469706673582212202206b3e3d1b0138334aca30e91ec2c868714fac899f23b99eb022fd5645dfef064736f6c63430008210033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b07000000000000000000000000000000000000000000084595161401484a00000000000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000007080
-----Decoded View---------------
Arg [0] : _clawdToken (address): 0x9f86dB9fc6f7c9408e8Fda3Ff8ce4e78ac7a6b07
Arg [1] : _burnAmount (uint256): 10000000000000000000000000
Arg [2] : _callerReward (uint256): 10000000000000000000000
Arg [3] : _cooldownSeconds (uint256): 28800
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000009f86db9fc6f7c9408e8fda3ff8ce4e78ac7a6b07
Arg [1] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [2] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000007080
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$13,837.73
Net Worth in ETH
6.919639
Token Allocations
CLAWD
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $0.00006 | 229,710,000 | $13,837.73 |
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.