refactor: clean up bridge contracts and simplify Zoo token implementations

This commit is contained in:
2026-02-13 15:07:24 -08:00
parent ed85d109f1
commit 5d5f8875e1
38 changed files with 207 additions and 452 deletions
+7 -2
View File
@@ -14,6 +14,9 @@ contract ETHVault is ERC20 {
uint256 amount
);
// Errors
error ZeroAddress();
constructor(string memory name, string memory symbol) ERC20(name, symbol) {}
// Function to receive ETH and mint shares
receive() external payable {}
@@ -24,6 +27,7 @@ contract ETHVault is ERC20 {
* @param receiver_ receiver's address
*/
function deposit(uint256 amount_, address receiver_) external payable {
if (receiver_ == address(0)) revert ZeroAddress();
require(msg.value > 0 && amount_ == msg.value, "Must send ETH");
// Calculate the number of shares to mint
uint256 shares = msg.value; // For simplicity, 1 ETH = 1 share
@@ -43,14 +47,15 @@ contract ETHVault is ERC20 {
address receiver_,
address owner_
) external {
if (receiver_ == address(0)) revert ZeroAddress();
require(amount_ <= address(this).balance, "Insufficient balance");
if (msg.sender != owner_) {
uint256 allowed = allowance(owner_, msg.sender);
require(allowed >= amount_, "Invalid alowance");
require(allowed >= amount_, "Invalid allowance");
}
_burn(owner_, amount_);
(bool success, ) = payable(receiver_).call{value: amount_}("");
require(success, "sending failed");
require(success, "ETH transfer failed");
emit Withdraw(msg.sender, receiver_, owner_, amount_);
}
}
+1 -1
View File
@@ -39,7 +39,7 @@ contract LuxVault is Ownable {
string memory a,
string memory b
) internal pure returns (string memory) {
return string(abi.encodePacked(a, b));
return string.concat(a, b);
}
/**
+31 -8
View File
@@ -2,6 +2,7 @@
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
@@ -13,6 +14,8 @@ import "./interfaces/IBridge.sol";
* @dev Manages token vaults for X-Chain bridging with support for ERC20, ERC721, and ERC1155
*/
contract XChainVault is Ownable {
using SafeERC20 for IERC20;
// Warp precompile address
address constant WARP_PRECOMPILE = 0x0200000000000000000000000000000000000000;
@@ -67,16 +70,29 @@ contract XChainVault is Ownable {
mapping(address => mapping(uint32 => address)) public wrappedTokens; // originalToken => chainId => wrappedToken
mapping(address => bool) public supportedTokens;
mapping(uint32 => bool) public supportedChains;
uint256 private nonce;
address public bridge;
// Maximum array length for ERC1155 batch operations to prevent DoS
uint256 public constant MAX_BATCH_SIZE = 100;
// Events for admin functions
event SupportedTokenUpdated(address indexed token, bool supported);
event SupportedChainUpdated(uint32 indexed chainId, bool supported);
event BridgeUpdated(address indexed oldBridge, address indexed newBridge);
// Errors
error ZeroAddress();
error BatchSizeTooLarge(uint256 size, uint256 max);
modifier onlyBridge() {
require(msg.sender == bridge, "Only bridge can call");
_;
}
constructor(address _bridge) Ownable(msg.sender) {
if (_bridge == address(0)) revert ZeroAddress();
bridge = _bridge;
}
@@ -93,8 +109,8 @@ contract XChainVault is Ownable {
require(supportedChains[destinationChainId], "Chain not supported");
require(amount > 0, "Amount must be greater than 0");
// Transfer tokens to vault
IERC20(token).transferFrom(msg.sender, address(this), amount);
// Transfer tokens to vault (using SafeERC20)
IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
// Generate vault ID
vaultId = keccak256(abi.encodePacked(
@@ -182,6 +198,7 @@ contract XChainVault is Ownable {
require(supportedChains[destinationChainId], "Chain not supported");
require(tokenIds.length == amounts.length, "Arrays length mismatch");
require(tokenIds.length > 0, "Empty arrays");
if (tokenIds.length > MAX_BATCH_SIZE) revert BatchSizeTooLarge(tokenIds.length, MAX_BATCH_SIZE);
// Transfer tokens to vault
IERC1155(token).safeBatchTransferFrom(
@@ -239,7 +256,7 @@ contract XChainVault is Ownable {
if (vault.tokenType == TokenType.ERC20) {
require(vault.amount >= amount, "Insufficient vault balance");
vault.amount -= amount;
IERC20(vault.originalToken).transfer(recipient, amount);
IERC20(vault.originalToken).safeTransfer(recipient, amount);
} else if (vault.tokenType == TokenType.ERC721) {
require(amount == 1, "Invalid amount for NFT");
vault.isActive = false;
@@ -308,21 +325,27 @@ contract XChainVault is Ownable {
* @dev Update supported tokens
*/
function setSupportedToken(address token, bool supported) external onlyOwner {
if (token == address(0)) revert ZeroAddress();
supportedTokens[token] = supported;
emit SupportedTokenUpdated(token, supported);
}
/**
* @dev Update supported chains
*/
function setSupportedChain(uint32 chainId, bool supported) external onlyOwner {
supportedChains[chainId] = supported;
emit SupportedChainUpdated(chainId, supported);
}
/**
* @dev Update bridge address
*/
function setBridge(address _bridge) external onlyOwner {
if (_bridge == address(0)) revert ZeroAddress();
address oldBridge = bridge;
bridge = _bridge;
emit BridgeUpdated(oldBridge, _bridge);
}
/**
+1 -1
View File
@@ -36,7 +36,7 @@ contract ZooVault is Ownable {
string memory a,
string memory b
) internal pure returns (string memory) {
return string(abi.encodePacked(a, b));
return string.concat(a, b);
}
/**
+3 -11
View File
@@ -13,20 +13,12 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract CYRUS is ERC20B {
string public constant _name = "Cyrus AI";
string public constant _symbol = "CYRUS";
string public constant TOKEN_NAME = "Cyrus AI";
string public constant TOKEN_SYMBOL = "CYRUS";
constructor() ERC20B(_name, _symbol) {}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
function decimals() public view virtual override returns (uint8) {
return 6;
}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
}
+5 -13
View File
@@ -2,31 +2,23 @@
pragma solidity ^0.8.20;
/**
███╗ ███╗███████╗██╗ █████╗ ███╗ ██╗██╗ █████╗
███╗ ███╗███████╗██╗ █████╗ ███╗ ██╗██╗ █████╗
████╗ ████║██╔════╝██║ ██╔══██╗████╗ ██║██║██╔══██╗
██╔████╔██║█████╗ ██║ ███████║██╔██╗ ██║██║███████║
██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║╚██╗██║██║██╔══██║
██║ ╚═╝ ██║███████╗███████╗██║ ██║██║ ╚████║██║██║ ██║
╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝
╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝
*/
import "../ERC20B.sol";
contract MELANIA is ERC20B {
string public constant _name = "Melania Meme";
string public constant _symbol = "MELANIA";
string public constant TOKEN_NAME = "Melania Meme";
string public constant TOKEN_SYMBOL = "MELANIA";
constructor() ERC20B(_name, _symbol) {}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
function decimals() public view virtual override returns (uint8) {
return 6;
}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
}
+6 -16
View File
@@ -2,33 +2,23 @@
pragma solidity ^0.8.20;
/**
███████╗██╗ ██████╗ ██████╗
██╔════╝██║ ██╔═══██╗██╔════╝
███████╗██╗ ██████╗ ██████╗
██╔════╝██║ ██╔═══██╗██╔════╝
███████╗██║ ██║ ██║██║ ███╗
╚════██║██║ ██║ ██║██║ ██║
███████║███████╗╚██████╔╝╚██████╔╝
╚══════╝╚══════╝ ╚═════╝ ╚═════╝
╚══════╝╚══════╝ ╚═════╝ ╚═════╝
*/
import "../ERC20B.sol";
contract SLOG is ERC20B {
string public constant _name = "Slog";
string public constant _symbol = "SLOG";
string public constant TOKEN_NAME = "Slog";
string public constant TOKEN_SYMBOL = "SLOG";
constructor() ERC20B(_name, _symbol) {
_mint(msg.sender, 1000000000 * 10 ** decimals());
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
function decimals() public view virtual override returns (uint8) {
return 6;
}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
}
+7 -15
View File
@@ -2,31 +2,23 @@
pragma solidity ^0.8.20;
/**
████████╗██████╗ ██╗ ██╗███╗ ███╗██████╗
████████╗██████╗ ██╗ ██╗███╗ ███╗██████╗
╚══██╔══╝██╔══██╗██║ ██║████╗ ████║██╔══██╗
██║ ██████╔╝██║ ██║██╔████╔██║██████╔╝
██║ ██╔══██╗██║ ██║██║╚██╔╝██║██╔═══╝
██║ ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
██║ ██╔══██╗██║ ██║██║╚██╔╝██║██╔═══╝
██║ ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
*/
import "../ERC20B.sol";
contract TRUMP is ERC20B {
string public constant _name = "OFFICIAL TRUMP";
string public constant _symbol = "TRUMP";
string public constant TOKEN_NAME = "OFFICIAL TRUMP";
string public constant TOKEN_SYMBOL = "TRUMP";
constructor() ERC20B(_name, _symbol) {}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
function decimals() public view virtual override returns (uint8) {
return 6;
}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/**
███████╗
╚══███╔╝
███╔╝
███╔╝
███╔╝
███╔╝
███████╗
╚══════╝
*/
@@ -13,20 +13,12 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract Z is ERC20B {
string public constant _name = "Z";
string public constant _symbol = "Z";
string public constant TOKEN_NAME = "Z";
string public constant TOKEN_SYMBOL = "Z";
constructor() ERC20B(_name, _symbol) {}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
function decimals() public view virtual override returns (uint8) {
return 6;
}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
}
+4 -12
View File
@@ -2,7 +2,7 @@
pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ █████╗ ██████╗ █████╗
███████╗ ██████╗ ██████╗ █████╗ ██████╗ █████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔══██╗██╔══██╗
███╔╝ ██║ ██║██║ ██║ ███████║██║ ██║███████║
███╔╝ ██║ ██║██║ ██║ ██╔══██║██║ ██║██╔══██║
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooADA is ERC20B {
string public constant _name = "Zoo ADA";
string public constant _symbol = "ZADA";
string public constant TOKEN_NAME = "Zoo ADA";
string public constant TOKEN_SYMBOL = "ZADA";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ █████╗ ██╗ ██╗ ██████╗ ███████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██║███║██╔════╝ ╚══███╔╝
███╔╝ ██║ ██║██║ ██║ ███████║██║╚██║███████╗ ███╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██║██║ ██║██╔═══██╗ ███╔╝
███╔╝ ██║ ██║██║ ██║ ███████║██║╚██║███████╗ ███╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██║██║ ██║██╔═══██╗ ███╔╝
███████╗╚██████╔╝╚██████╔╝ ██║ ██║██║ ██║╚██████╔╝███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooAI16Z is ERC20B {
string public constant _name = "Zoo AI16Z";
string public constant _symbol = "ZAI16Z";
string public constant TOKEN_NAME = "Zoo AI16Z";
string public constant TOKEN_SYMBOL = "ZAI16Z";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ █████╗ ██╗ ██╗ █████╗ ██╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██║ ██║██╔══██╗╚██╗██╔╝
███╔╝ ██║ ██║██║ ██║ ███████║██║ ██║███████║ ╚███╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██║╚██╗ ██╔╝██╔══██║ ██╔██╗
███╔╝ ██║ ██║██║ ██║ ███████║██║ ██║███████║ ╚███╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██║╚██╗ ██╔╝██╔══██║ ██╔██╗
███████╗╚██████╔╝╚██████╔╝ ██║ ██║ ╚████╔╝ ██║ ██║██╔╝ ██╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooAVAX is ERC20B {
string public constant _name = "Zoo AVAX";
string public constant _symbol = "ZAVAX";
string public constant TOKEN_NAME = "Zoo AVAX";
string public constant TOKEN_SYMBOL = "ZAVAX";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -4,25 +4,17 @@ pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗ ██╗ █████╗ ███████╗████████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██║ ██╔══██╗██╔════╝╚══██╔══╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ███████║███████╗ ██║
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██╔══██║╚════██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██████╔╝███████╗██║ ██║███████║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ███████║███████╗ ██║
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██╔══██║╚════██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██████╔╝███████╗██║ ██║███████║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝
*/
import "../ERC20B.sol";
contract ZooBLAST is ERC20B {
string public constant _name = "Zoo BLAST";
string public constant _symbol = "ZBLAST";
string public constant TOKEN_NAME = "Zoo BLAST";
string public constant TOKEN_SYMBOL = "ZBLAST";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -2,27 +2,19 @@
pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗ ███╗ ██╗██████╗
███████╗ ██████╗ ██████╗ ██████╗ ███╗ ██╗██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗████╗ ██║██╔══██╗
███╔╝ ██║ ██║██║ ██║ ██████╔╝██╔██╗ ██║██████╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║╚██╗██║██╔══██╗
███████╗╚██████╔╝╚██████╔╝ ██████╔╝██║ ╚████║██████╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝
*/
import "../ERC20B.sol";
contract ZooBNB is ERC20B {
string public constant _name = "Zoo BNB";
string public constant _symbol = "ZBNB";
string public constant TOKEN_NAME = "Zoo BNB";
string public constant TOKEN_SYMBOL = "ZBNB";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███╗ ███╗███████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗████╗ ████║██╔════╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔████╔██║█████╗
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██║██║╚██╔╝██║██╔══╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔████╔██║█████╗
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██║██║╚██╔╝██║██╔══╝
███████╗╚██████╔╝╚██████╔╝ ██████╔╝╚██████╔╝██║ ╚═╝ ██║███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooBOME is ERC20B {
string public constant _name = "Zoo BOME";
string public constant _symbol = "ZBOME";
string public constant TOKEN_NAME = "Zoo BOME";
string public constant TOKEN_SYMBOL = "ZBOME";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███╗ ██╗██╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗████╗ ██║██║ ██╔╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔██╗ ██║█████╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██║██║╚██╗██║██╔═██╗
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔██╗ ██║█████╔╝
███╔╝ ██║ ██║██║ ██║ ██╔══██╗██║ ██║██║╚██╗██║██╔═██╗
███████╗╚██████╔╝╚██████╔╝ ██████╔╝╚██████╔╝██║ ╚████║██║ ██╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooBONK is ERC20B {
string public constant _name = "Zoo BONK";
string public constant _symbol = "ZBONK";
string public constant TOKEN_NAME = "Zoo BONK";
string public constant TOKEN_SYMBOL = "ZBONK";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██████╗ ████████╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗╚══██╔══╝██╔════╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔══██╗ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██████╔╝ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔══██╗ ██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██████╔╝ ██║ ╚██████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooBTC is ERC20B {
string public constant _name = "Zoo BTC";
string public constant _symbol = "ZBTC";
string public constant TOKEN_NAME = "Zoo BTC";
string public constant TOKEN_SYMBOL = "ZBTC";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+6 -13
View File
@@ -1,27 +1,20 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗███████╗██╗ ██████╗
███████╗ ██████╗ ██████╗ ██████╗███████╗██╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝██╔════╝██║ ██╔═══██╗
███╔╝ ██║ ██║██║ ██║ ██║ █████╗ ██║ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██║ ██╔══╝ ██║ ██║ ██║
███████╗╚██████╔╝╚██████╔╝ ╚██████╗███████╗███████╗╚██████╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝╚══════╝╚══════╝ ╚═════╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝╚══════╝╚══════╝ ╚═════╝
*/
import "../ERC20B.sol";
contract ZooCELO is ERC20B {
string public constant _name = "Zoo CELO";
string public constant _symbol = "ZCELO";
string public constant TOKEN_NAME = "Zoo CELO";
string public constant TOKEN_SYMBOL = "ZCELO";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -4,16 +4,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooDOGS is ERC20B {
string public constant _name = "Zoo DOGS";
string public constant _symbol = "ZDOGS";
string public constant TOKEN_NAME = "Zoo DOGS";
string public constant TOKEN_SYMBOL = "ZDOGS";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooETH is ERC20B {
string public constant _name = "Zoo ETH";
string public constant _symbol = "ZETH";
string public constant TOKEN_NAME = "Zoo ETH";
string public constant TOKEN_SYMBOL = "ZETH";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooFTM is ERC20B {
string public constant _name = "Zoo FTM";
string public constant _symbol = "ZFTM";
string public constant TOKEN_NAME = "Zoo FTM";
string public constant TOKEN_SYMBOL = "ZFTM";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+6 -14
View File
@@ -2,27 +2,19 @@
pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝██║ ██║██╔═══██╗██╔════╝
███████╗ ██████╗ ██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝██║ ██║██╔═══██╗██╔════╝
███╔╝ ██║ ██║██║ ██║ █████╗ ██║ █╗ ██║██║ ██║██║ ███╗
███╔╝ ██║ ██║██║ ██║ ██╔══╝ ██║███╗██║██║ ██║██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚███╔███╔╝╚██████╔╝╚██████╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝
*/
import "../ERC20B.sol";
contract ZooFWOG is ERC20B {
string public constant _name = "Zoo FWOG";
string public constant _symbol = "ZFWOG";
string public constant TOKEN_NAME = "Zoo FWOG";
string public constant TOKEN_SYMBOL = "ZFWOG";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+4 -12
View File
@@ -2,7 +2,7 @@
pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██████╗ ██╗ ██████╗ █████╗
███████╗ ██████╗ ██████╗ ██████╗ ██╗ ██████╗ █████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝ ██║██╔════╝ ██╔══██╗
███╔╝ ██║ ██║██║ ██║ ██║ ███╗██║██║ ███╗███████║
███╔╝ ██║ ██║██║ ██║ ██║ ██║██║██║ ██║██╔══██║
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooGIGA is ERC20B {
string public constant _name = "Zoo GIGA";
string public constant _symbol = "ZGIGA";
string public constant TOKEN_NAME = "Zoo GIGA";
string public constant TOKEN_SYMBOL = "ZGIGA";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗██╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██║ ██║ ██║╚██╗██╔╝
███╔╝ ██║ ██║██║ ██║ ██║ ██║ ██║ ╚███╔╝
███╔╝ ██║ ██║██║ ██║ ██║ ██║ ██║ ██╔██╗
███╔╝ ██║ ██║██║ ██║ ██║ ██║ ██║ ╚███╔╝
███╔╝ ██║ ██║██║ ██║ ██║ ██║ ██║ ██╔██╗
███████╗╚██████╔╝╚██████╔╝ ███████╗╚██████╔╝██╔╝ ██╗
╚══════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooLUX is ERC20B {
string public constant _name = "Zoo LUX";
string public constant _symbol = "ZLUX";
string public constant TOKEN_NAME = "Zoo LUX";
string public constant TOKEN_SYMBOL = "ZLUX";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+4 -12
View File
@@ -7,22 +7,14 @@ pragma solidity ^0.8.20;
███╔╝ ██║ ██║██║ ██║ ██╔████╔██║█████╗ ██║ █╗ ██║
███╔╝ ██║ ██║██║ ██║ ██║╚██╔╝██║██╔══╝ ██║███╗██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚═╝ ██║███████╗╚███╔███╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝
*/
import "../ERC20B.sol";
contract ZooMEW is ERC20B {
string public constant _name = "Zoo MEW";
string public constant _symbol = "ZMEW";
string public constant TOKEN_NAME = "Zoo MEW";
string public constant TOKEN_SYMBOL = "ZMEW";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+6 -14
View File
@@ -2,27 +2,19 @@
pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ███╗ ███╗ ██████╗ ██████╗ ██████╗ ███████╗███╗ ██╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ████╗ ████║██╔═══██╗██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝
███████╗ ██████╗ ██████╗ ███╗ ███╗ ██████╗ ██████╗ ██████╗ ███████╗███╗ ██╗ ██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ████╗ ████║██╔═══██╗██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝
███╔╝ ██║ ██║██║ ██║ ██╔████╔██║██║ ██║██║ ██║██║ ██║█████╗ ██╔██╗ ██║██║ ███╗
███╔╝ ██║ ██║██║ ██║ ██║╚██╔╝██║██║ ██║██║ ██║██║ ██║██╔══╝ ██║╚██╗██║██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚═╝ ██║╚██████╔╝╚██████╔╝██████╔╝███████╗██║ ╚████║╚██████╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝
*/
import "../ERC20B.sol";
contract ZooMOODENG is ERC20B {
string public constant _name = "Zoo MOODENG";
string public constant _symbol = "ZMOODENG";
string public constant TOKEN_NAME = "Zoo MOODENG";
string public constant TOKEN_SYMBOL = "ZMOODENG";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -4,16 +4,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooMRB is ERC20B {
string public constant _name = "Zoo MoonRabbits";
string public constant _symbol = "ZMRB";
string public constant TOKEN_NAME = "Zoo MoonRabbits";
string public constant TOKEN_SYMBOL = "ZMRB";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -4,16 +4,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooNOT is ERC20B {
string public constant _name = "Zoo Notcoin";
string public constant _symbol = "ZNOT";
string public constant TOKEN_NAME = "Zoo Notcoin";
string public constant TOKEN_SYMBOL = "ZNOT";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -2,10 +2,10 @@
pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗██║
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██║
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗██║
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚██████╔╝███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooPOL is ERC20B {
string public constant _name = "Zoo POL";
string public constant _symbol = "ZPOL";
string public constant TOKEN_NAME = "Zoo POL";
string public constant TOKEN_SYMBOL = "ZPOL";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███╗ ██╗██╗ ██╗███████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗████╗ ██║██║ ██╔╝██╔════╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔██╗ ██║█████╔╝ █████╗
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██╔██╗ ██║█████╔╝ █████╗
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══╝
███████╗╚██████╔╝╚██████╔╝ ██║ ╚██████╔╝██║ ╚████║██║ ██╗███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooPONKE is ERC20B {
string public constant _name = "Zoo PONKE";
string public constant _symbol = "ZPONKE";
string public constant TOKEN_NAME = "Zoo PONKE";
string public constant TOKEN_SYMBOL = "ZPONKE";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -4,25 +4,17 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ████████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗██╔═══██╗██╔══██╗██╔════╝██╔══██╗╚══██╔══╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██████╔╝██║ ███████║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██╔═══╝ ██║ ██╔══██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚██████╔╝██║ ╚██████╗██║ ██║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██║ ██║██████╔╝██║ ███████║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║ ██║██╔═══╝ ██║ ██╔══██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ╚██████╔╝██║ ╚██████╗██║ ██║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝
*/
import "../ERC20B.sol";
contract ZooPopcat is ERC20B {
string public constant _name = "Zoo Popcat";
string public constant _symbol = "ZPOPCAT";
string public constant TOKEN_NAME = "Zoo Popcat";
string public constant TOKEN_SYMBOL = "ZPOPCAT";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -4,25 +4,17 @@ pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ██████╗ ███╗ ██╗██╗ ██╗████████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔══██╗████╗ ██║██║ ██║╚══██╔══╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██╔██╗ ██║██║ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║╚██╗██║██║ ██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ██║ ╚████║╚██████╔╝ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝
███╔╝ ██║ ██║██║ ██║ ██████╔╝██╔██╗ ██║██║ ██║ ██║
███╔╝ ██║ ██║██║ ██║ ██╔═══╝ ██║╚██╗██║██║ ██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║ ██║ ╚████║╚██████╔╝ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝
*/
import "../ERC20B.sol";
contract ZooPNUT is ERC20B {
string public constant _name = "Zoo PNUT";
string public constant _symbol = "ZPNUT";
string public constant TOKEN_NAME = "Zoo PNUT";
string public constant TOKEN_SYMBOL = "ZPNUT";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -4,16 +4,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooREDO is ERC20B {
string public constant _name = "Zoo Resistance Dog";
string public constant _symbol = "ZREDO";
string public constant TOKEN_NAME = "Zoo Resistance Dog";
string public constant TOKEN_SYMBOL = "ZREDO";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -2,10 +2,10 @@
pragma solidity ^0.8.20;
/*
███████╗ ██████╗ ██████╗ ███████╗ ██████╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝██╔═══██╗██║
███╔╝ ██║ ██║██║ ██║ ███████╗██║ ██║██║
███╔╝ ██║ ██║██║ ██║ ╚════██║██║ ██║██║
███████╗ ██████╗ ██████╗ ███████╗ ██████╗ ██╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██╔════╝██╔═══██╗██║
███╔╝ ██║ ██║██║ ██║ ███████╗██║ ██║██║
███╔╝ ██║ ██║██║ ██║ ╚════██║██║ ██║██║
███████╗╚██████╔╝╚██████╔╝ ███████║╚██████╔╝███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝
*/
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooSOL is ERC20B {
string public constant _name = "Zoo Solana";
string public constant _symbol = "ZSOL";
string public constant TOKEN_NAME = "Zoo Solana";
string public constant TOKEN_SYMBOL = "ZSOL";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooTON is ERC20B {
string public constant _name = "Zoo TON";
string public constant _symbol = "ZTON";
string public constant TOKEN_NAME = "Zoo TON";
string public constant TOKEN_SYMBOL = "ZTON";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+5 -13
View File
@@ -2,27 +2,19 @@
pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗
███████╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██║ ██║██╔════╝██╔══██╗
███╔╝ ██║ ██║██║ ██║ ██║ ██║███████╗██║ ██║
███╔╝ ██║ ██║██║ ██║ ██║ ██║╚════██║██║ ██║
███████╗╚██████╔╝╚██████╔╝ ╚██████╔╝███████║██████╔╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝
*/
import "../ERC20B.sol";
contract ZooUSD is ERC20B {
string public constant _name = "Zoo Dollar";
string public constant _symbol = "ZUSD";
string public constant TOKEN_NAME = "Zoo Dollar";
string public constant TOKEN_SYMBOL = "ZUSD";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+7 -15
View File
@@ -4,25 +4,17 @@ pragma solidity ^0.8.20;
/**
███████╗ ██████╗ ██████╗ ██╗ ██╗██╗███████╗
╚══███╔╝██╔═══██╗██╔═══██╗ ██║ ██║██║██╔════╝
███╔╝ ██║ ██║██║ ██║ ██║ █╗ ██║██║█████╗
███╔╝ ██║ ██║██║ ██║ ██║███╗██║██║██╔══╝
███████╗╚██████╔╝╚██████╔╝ ╚███╔███╔╝██║██║
╚══════╝ ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝╚═╝
███╔╝ ██║ ██║██║ ██║ ██║ █╗ ██║██║█████╗
███╔╝ ██║ ██║██║ ██║ ██║███╗██║██║██╔══╝
███████╗╚██████╔╝╚██████╔╝ ╚███╔███╔╝██║██║
╚══════╝ ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝╚═╝
*/
import "../ERC20B.sol";
contract ZooWIF is ERC20B {
string public constant _name = "Zoo WIF";
string public constant _symbol = "ZWIF";
string public constant TOKEN_NAME = "Zoo WIF";
string public constant TOKEN_SYMBOL = "ZWIF";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}
+3 -11
View File
@@ -13,16 +13,8 @@ pragma solidity ^0.8.20;
import "../ERC20B.sol";
contract ZooXDAI is ERC20B {
string public constant _name = "Zoo XDAI";
string public constant _symbol = "ZXDAI";
string public constant TOKEN_NAME = "Zoo XDAI";
string public constant TOKEN_SYMBOL = "ZXDAI";
constructor() ERC20B(_name, _symbol) {}
function mint(address account, uint256 amount) public {
_mint(account, amount);
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
constructor(address admin) ERC20B(TOKEN_NAME, TOKEN_SYMBOL, admin) {}
}