This contract's source code is verified! Compiler
0.8.28+commit.7893614a
File 1 of 9: Context.sol
abstract contract Context {
function _msgSender ( ) internal view virtual returns (address ) {
return msg .sender ;
}
} File 2 of 9: ERC6909.sol
pragma solidity ^0.8.0;
import {IERC6909Claims } from "./interfaces/external/IERC6909Claims.sol" ;
abstract contract ERC6909 is IERC6909Claims {
mapping (address owner = > mapping (address operator = > bool isOperator)) public isOperator;
mapping (address owner = > mapping (uint256 id = > uint256 balance)) public balance;
mapping (address owner = > mapping (address spender = > mapping (uint256 id = > uint256 amount))) public _allowance;
function transfer (address receiver, uint256 id, uint256 amount ) public virtual returns (bool ) {
balance[msg .sender ][id] - = amount;
balance[receiver][id] + = amount;
emit Transfer(msg .sender , msg .sender , receiver, id, amount);
return true ;
}
function transferFrom (address sender, address receiver, uint256 id, uint256 amount ) public virtual returns (bool ) {
if (msg .sender ! = sender & & ! isOperator[sender][msg .sender ]) {
uint256 allowed = _allowance[sender][msg .sender ][id];
if (allowed ! = type (uint256 ).max ) _allowance[sender][msg .sender ][id] = allowed - amount;
}
balance[sender][id] - = amount;
balance[receiver][id] + = amount;
emit Transfer(msg .sender , sender, receiver, id, amount);
return true ;
}
function approve (address spender, uint256 id, uint256 amount ) public virtual returns (bool ) {
_allowance[msg .sender ][spender][id] = amount;
emit Approval(msg .sender , spender, id, amount);
return true ;
}
function setOperator (address operator, bool approved ) public virtual returns (bool ) {
isOperator[msg .sender ][operator] = approved;
emit OperatorSet(msg .sender , operator, approved);
return true ;
}
function supportsInterface (bytes4 interfaceId ) public view virtual returns (bool ) {
return interfaceId = = 0x01ffc9a7
| | interfaceId = = 0x0f632fb3 ;
}
function _mint (address receiver, uint256 id, uint256 amount ) internal virtual {
balance[receiver][id] + = amount;
emit Transfer(msg .sender , address (0 ), receiver, id, amount);
}
function _burn (address sender, uint256 id, uint256 amount ) internal virtual {
balance[sender][id] - = amount;
emit Transfer(msg .sender , sender, address (0 ), id, amount);
}
} File 3 of 9: IERC20.sol
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 ) ;
event Transfer (address indexed from , address indexed to, uint256 value ) ;
event Approval (address indexed owner, address indexed spender, uint256 value ) ;
} File 4 of 9: IERC6909Claims.sol
pragma solidity ^0.8.0;
interface IERC6909Claims {
event OperatorSet (address indexed owner, address indexed operator, bool approved ) ;
event Approval (address indexed owner, address indexed spender, uint256 indexed id, uint256 amount ) ;
event Transfer (address caller, address indexed from , address indexed to, uint256 indexed id, uint256 amount ) ;
function balance (address owner, uint256 id ) external view returns (uint256 amount ) ;
function _allowance (address owner, address spender, uint256 id ) external view returns (uint256 amount ) ;
function isOperator (address owner, address spender ) external view returns (bool approved ) ;
function transfer (address receiver, uint256 id, uint256 amount ) external returns (bool ) ;
function transferFrom (address sender, address receiver, uint256 id, uint256 amount ) external returns (bool ) ;
function approve (address spender, uint256 id, uint256 amount ) external returns (bool ) ;
function setOperator (address operator, bool approved ) external returns (bool ) ;
} File 5 of 9: IUniswapFactory.sol
interface IUniswapFactory {
function createPair (address tokenA, address tokenB ) external returns (address pair ) ;
}File 6 of 9: IUniswapRouter.sol
interface IUniswapRouter {
function swapExactTokensForETHSupportingFeeOnTransferTokens (
uint amountIn,
uint amountOutMin,
address [] calldata path,
address to,
uint deadline
) external ;
function factory ( ) external pure returns (address ) ;
function WETH ( ) external pure returns (address ) ;
function addLiquidityETH (
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity ) ;
function swapExactETHForTokens (uint amountOutMin, address [] calldata path, address to, uint deadline )
external
payable
returns (uint [] memory amounts ) ;
function swapExactTokensForETH (uint amountIn, uint amountOutMin, address [] calldata path, address to, uint deadline )
external
returns (uint [] memory amounts ) ;
function swapETHForExactTokens (uint amountOut, address [] calldata path, address to, uint deadline )
external
payable
returns (uint [] memory amounts ) ;
}File 7 of 9: Ownable.sol
import {Context } from "./Context.sol" ;
contract Ownable is Context {
address private _owner;
event OwnershipTransferred (address indexed previousOwner, address indexed newOwner ) ;
constructor ( ) {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address (0 ), msgSender);
}
function owner ( ) public view returns (address ) {
return _owner;
}
modifier onlyOwner ( ) {
require (_owner = = _msgSender(), "Ownable: caller is not the owner" );
_ ;
}
function renounceOwnership ( ) public virtual onlyOwner {
emit OwnershipTransferred(_owner, address (0 ));
_owner = address (0 );
}
} File 8 of 9: SafeMath.sol
library SafeMath {
function add (uint256 a, uint256 b ) internal pure returns (uint256 ) {
uint256 c = a + b;
require (c > = a, "SafeMath: addition overflow" );
return c;
}
function sub (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return sub(a, b, "SafeMath: subtraction overflow" );
}
function sub (uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256 ) {
require (b < = a, errorMessage);
uint256 c = a - b;
return c;
}
function mul (uint256 a, uint256 b ) internal pure returns (uint256 ) {
if (a = = 0 ) {
return 0 ;
}
uint256 c = a * b;
require (c / a = = b, "SafeMath: multiplication overflow" );
return c;
}
function div (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return div(a, b, "SafeMath: division by zero" );
}
function div (uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256 ) {
require (b > 0 , errorMessage);
uint256 c = a / b;
return c;
}
} File 9 of 9: Token.sol
pragma solidity 0.8.28;
import {ERC6909 } from "./ERC6909.sol" ;
import {Context } from "./inherited/external/Context.sol" ;
import {Ownable } from "./inherited/external/Ownable.sol" ;
import {IUniswapRouter } from "./interfaces/external/IUniswapRouter.sol" ;
import {IUniswapFactory } from "./interfaces/external/IUniswapFactory.sol" ;
import {IERC20 } from "./interfaces/external/IERC20.sol" ;
import {SafeMath } from "./libraries/external/SafeMath.sol" ;
contract ERCV4 is ERC6909 , Context , IERC20 , Ownable {
using SafeMath for uint256 ;
mapping (address = > uint256 ) private _balances;
mapping (address = > mapping (address = > uint256 )) private _allowances;
mapping (address = > bool ) private _isExcludedFromFee;
address payable private _taxWallet;
uint256 private _initialBuyTax = 15 ;
uint256 private _initialSellTax = 19 ;
uint256 private _finalBuyTax = 0 ;
uint256 private _finalSellTax = 0 ;
uint256 private _reduceBuyTaxAt = 25 ;
uint256 private _reduceSellTaxAt = 25 ;
uint256 private _preventSwapBefore = 1 ;
uint256 private _transferTax = 0 ;
uint256 private _buyCount = 0 ;
string private constant _name = unicode"ERC 6909" ;
string private constant _symbol = unicode"ERC6909" ;
uint8 private constant _decimals = 9 ;
uint256 private constant _tTotal = 69090 * 10 * * _decimals;
uint256 public _maxTxAmount = 1381 * 10 * * _decimals;
uint256 public _maxWalletSize = 1381 * 10 * * _decimals;
uint256 public _taxSwapThreshold= 690 * 10 * * _decimals;
uint256 public _maxTaxSwap= 690 * 10 * * _decimals;
IUniswapRouter private uniswapV2Router;
address private uniswapV2Pair;
bool private tradingOpen;
bool private inSwap = false ;
bool private swapEnabled = false ;
uint256 private sellCount = 0 ;
uint256 private lastSellBlock = 0 ;
uint256 private firstBlock = 0 ;
event MaxTxAmountUpdated (uint _maxTxAmount ) ;
event TransferTaxUpdated (uint _tax ) ;
event ClearToken (address TokenAddressCleared, uint256 Amount ) ;
modifier lockTheSwap {
inSwap = true ;
_ ;
inSwap = false ;
}
constructor ( ) payable {
_taxWallet = payable (_msgSender());
_balances[_msgSender()] = _tTotal;
_isExcludedFromFee[owner()] = true ;
_isExcludedFromFee[address (this )] = true ;
_isExcludedFromFee[_taxWallet] = true ;
emit Transfer(address (0 ), _msgSender(), _tTotal);
}
function name ( ) public pure returns (string memory ) {
return _name;
}
function symbol ( ) public pure returns (string memory ) {
return _symbol;
}
function decimals ( ) public pure returns (uint8 ) {
return _decimals;
}
function totalSupply ( ) public pure override returns (uint256 ) {
return _tTotal;
}
function balanceOf (address account ) public view override returns (uint256 ) {
return _balances[account];
}
function transfer (address recipient, uint256 amount ) public override returns (bool ) {
_transfer(_msgSender(), recipient, amount);
return true ;
}
function allowance (address owner, address spender ) public view override returns (uint256 ) {
return _allowances[owner][spender];
}
function approve (address spender, uint256 amount ) public override returns (bool ) {
_approve(_msgSender(), spender, amount);
return true ;
}
function transferFrom (address sender, address recipient, uint256 amount ) public override returns (bool ) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance" ));
return true ;
}
function _approve (address owner, address spender, uint256 amount ) private {
require (owner ! = address (0 ), "ERC20: approve from the zero address" );
require (spender ! = address (0 ), "ERC20: approve to the zero address" );
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer (address from , address to, uint256 amount ) private {
require (from ! = address (0 ), "ERC20: transfer from the zero address" );
require (to ! = address (0 ), "ERC20: transfer to the zero address" );
require (amount > 0 , "Transfer amount must be greater than zero" );
uint256 taxAmount= 0 ;
if (from ! = owner() & & to ! = owner()) {
if (_buyCount = = 0 ){
taxAmount = amount.mul((_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax).div(100 );
}
if (_buyCount > 0 ){
taxAmount = amount.mul(_transferTax).div(100 );
}
if (block .number = = firstBlock){
require (_buyCount < 40 , "Exceeds buys on the first block." );
}
if (from = = uniswapV2Pair & & to ! = address (uniswapV2Router) & & ! _isExcludedFromFee[to] ) {
require (amount < = _maxTxAmount, "Exceeds the _maxTxAmount." );
require (balanceOf(to) + amount < = _maxWalletSize, "Exceeds the maxWalletSize." );
taxAmount = amount.mul((_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax).div(100 );
_buyCount+ + ;
}
if (to = = uniswapV2Pair & & from ! = address (this ) ){
taxAmount= amount.mul((_buyCount > _reduceSellTaxAt) ? _finalSellTax : _initialSellTax).div(100 );
}
uint256 contractTokenBalance = balanceOf(address (this ));
if (! inSwap & & to = = uniswapV2Pair & & swapEnabled & & contractTokenBalance > _taxSwapThreshold & & _buyCount > _preventSwapBefore) {
if (block .number > lastSellBlock) {
sellCount= 0 ;
}
require (sellCount < 4 );
swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
uint256 contractETHBalance = address (this ).balance ;
if (contractETHBalance > 0 ) {
sendETHToFee(address (this ).balance );
}
sellCount+ + ;
lastSellBlock = block .number ;
}
}
if (taxAmount > 0 ){
_balances[address (this )] = _balances[address (this )].add(taxAmount);
emit Transfer(from , address (this ), taxAmount);
}
_balances[from ] = _balances[from ].sub(amount);
_balances[to] = _balances[to].add(amount.sub(taxAmount));
emit Transfer(from , to, amount.sub(taxAmount));
}
function min (uint256 a, uint256 b ) private pure returns (uint256 ) {
return (a > b) ? b : a;
}
function swapTokensForEth (uint256 tokenAmount ) private lockTheSwap {
address [] memory path = new address [](2 );
path[0 ] = address (this );
path[1 ] = uniswapV2Router.WETH();
_approve(address (this ), address (uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0 ,
path,
address (this ),
block .timestamp
);
}
function removeLimit ( ) external onlyOwner {
_maxTxAmount = _tTotal;
_maxWalletSize = _tTotal;
emit MaxTxAmountUpdated(_tTotal);
}
function removeTransferTax ( ) external onlyOwner {
_transferTax = 0 ;
emit TransferTaxUpdated(0 );
}
function sendETHToFee (uint256 amount ) private {
_taxWallet.transfer (amount);
}
function openTrading ( ) external onlyOwner ( ) {
require (! tradingOpen, "trading is already open" );
uniswapV2Router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
_approve(address (this ), address (uniswapV2Router), _tTotal);
uniswapV2Pair = IUniswapFactory(uniswapV2Router.factory()).createPair(address (this ), uniswapV2Router.WETH());
uniswapV2Router.addLiquidityETH{value : address (this ).balance }(address (this ), balanceOf(address (this )), 0 , 0 , owner(), block .timestamp );
IERC20(uniswapV2Pair).approve(address (uniswapV2Router), type (uint ).max );
swapEnabled = true ;
tradingOpen = true ;
firstBlock = block .number ;
}
receive ( ) external payable {}
function reduceFee (uint256 _newFee ) external {
require (_msgSender() = = _taxWallet);
require (_newFee < = _finalBuyTax & & _newFee < = _finalSellTax);
_finalBuyTax = _newFee;
_finalSellTax = _newFee;
}
function clearStuckToken (address tokenAddress, uint256 tokens ) external returns (bool success ) {
require (_msgSender() = = _taxWallet);
if (tokens = = 0 ){
tokens= IERC20(tokenAddress).balanceOf(address (this ));
}
emit ClearToken(tokenAddress, tokens);
return IERC20(tokenAddress).transfer (_taxWallet, tokens);
}
function manualSend ( ) external {
require (_msgSender() = = _taxWallet);
uint256 ethBalance = address (this ).balance ;
require (ethBalance > 0 , "Contract balance must be greater than zero" );
sendETHToFee(ethBalance);
}
function manualSwap ( ) external {
require (_msgSender() = = _taxWallet);
uint256 tokenBalance = balanceOf(address (this ));
if (tokenBalance > 0 ){
swapTokensForEth(tokenBalance);
}
uint256 ethBalance = address (this ).balance ;
if (ethBalance > 0 ){
sendETHToFee(ethBalance);
}
}
} {
"compilationTarget" : {
"ERC6909/Token.sol" : "ERCV4"
} ,
"evmVersion" : "cancun" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"TokenAddressCleared","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"ClearToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"OperatorSet","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"TransferTaxUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"_allowance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearStuckToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"reduceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]