// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/// @title Звёздный поток изобилия (Starflow of Abundance, SFA)
/// @dev Базовый ERC20-токен с ограниченной эмиссией и владельцем
contract StarflowOfAbundance is ERC20, Ownable {
uint256 public constant MAX_SUPPLY = 1_000_000_000 * 10**18; // 1 млрд токенов
uint8 private _decimals = 18;
/// @dev Конструктор: задаёт имя, символ и первоначальную эмиссию
constructor() ERC20("Starflow of Abundance", "SFA") {
_mint(msg.sender, MAX_SUPPLY);
}
/// @dev Возвращает количество десятичных знаков
function decimals() public view override returns (uint8) {
return _decimals;
}
/// @dev Позволяет владельцу сжечь часть токенов (только владелец)
function burn(uint256 amount) public onlyOwner {
_burn(msg.sender, amount);
}
/// @dev Позволяет владельцу перевести токены без комиссии (только владелец)
function emergencyWithdraw(address to, uint256 amount) public onlyOwner {
_transfer(msg.sender, to, amount);
}
}
transfer, balanceOf, approve
burnnpm install @openzeppelin/contracts
npx hardhat run scripts/deploy.js --network <имя_сети>
Pausable
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/// @title Звёздный поток изобилия (Starflow of Abundance, SFA)
/// @dev Базовый ERC20-токен с ограниченной эмиссией и владельцем
contract StarflowOfAbundance is ERC20, Ownable {
uint256 public constant MAX_SUPPLY = 1_000_000_000 * 10**18; // 1 млрд токенов
uint8 private _decimals = 18;
}
transfer, balanceOf, approve
burnnpm install @openzeppelin/contracts
npx hardhat run scripts/deploy.js --network <имя_сети>
Pausable