
Fitur-Fitur yang Bisa Ditambahkan ke Token Digital Kosmonuts
Lanjut…. sebelumnya kosmonuts sudah bikin basic token, berikutnya yuk tambahin fitur-fitur yang mungkin dibutuhin.
1. Minting (Mencetak Token Baru)
Fitur ini memungkinkan kosmonuts mencetak token baru setelah token pertama kali dibuat. Cocok banget kalau kosmonuts mau nambah pasokan token di masa depan.
Cara Tambahkan:
- Tambahkan fungsi
mint
di smart contract kosmonuts :function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); }
- Pastikan kosmonuts menambahkan modifier
onlyOwner
agar hanya pemilik contract yang bisa mencetak token.
2. Burning (Membakar Token)
Fitur ini memungkinkan pengguna atau pemilik contract untuk “membakar” (menghapus) token dari sirkulasi. Berguna banget kalau kosmonuts mau mengurangi pasokan token.
Cara Tambahkan:
- Tambahkan fungsi
burn
di smart contract kosmonuts :function burn(uint256 amount) public { _burn(msg.sender, amount); }
3. Pausable (Menghentikan Sementara Transaksi)
Fitur ini memungkinkan kosmonuts menghentikan sementara semua transaksi token. Misalnya, kalau ada masalah keamanan atau maintenance.
Cara Tambahkan:
- Import library
Pausable
dari OpenZeppelin:import "@openzeppelin/contracts/security/Pausable.sol";
- Tambahkan modifier
whenNotPaused
ke fungsi transfer:function transfer(address to, uint256 amount) public whenNotPaused override returns (bool) { return super.transfer(to, amount); }
- Tambahkan fungsi
pause
danunpause
:function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); }
4. Cap (Batas Maksimal Supply)
Fitur ini membatasi jumlah maksimal token yang bisa dicetak. Cocok buat token yang nggak mau inflasi.
Cara Tambahkan:
- Gunakan library
ERC20Capped
dari OpenZeppelin:import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
- Modifikasi constructor untuk menambahkan cap:
constructor(uint256 cap) ERC20("MyToken", "MTK") ERC20Capped(cap * 10 ** decimals()) { _mint(msg.sender, cap * 10 ** decimals()); }
5. Allowance dan TransferFrom (Transfer dengan Izin)
Fitur ini memungkinkan pengguna mengizinkan orang lain untuk mentransfer token atas nama mereka. Berguna banget buat aplikasi DeFi.
Cara Tambahkan:
- Fungsi ini sudah otomatis ada di ERC20, tapi kosmonuts bisa modifikasi sesuai kebutuhan:
function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, allowance(sender, msg.sender) - amount); return true; }
6. Role-Based Access Control (RBAC)
Fitur ini memungkinkan kosmonuts mengatur siapa saja yang bisa mengakses fungsi tertentu di smart contract. Misalnya, hanya admin yang bisa mencetak token.
Cara Tambahkan:
- Import library
AccessControl
dari OpenZeppelin:import "@openzeppelin/contracts/access/AccessControl.sol";
- Tambahkan role dan atur hak akses:
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor() ERC20("MyToken", "MTK") { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(MINTER_ROLE, msg.sender); } function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); }
7. Snapshot (Mengambil “Foto” Saldo Token)
Fitur ini memungkinkan kosmonuts mengambil “foto” saldo token pengguna di waktu tertentu. Berguna buat sistem airdrop atau voting.
Cara Tambahkan:
- Import library
ERC20Snapshot
dari OpenZeppelin:import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
- Modifikasi contract kosmonuts :
contract MyToken is ERC20Snapshot { constructor() ERC20("MyToken", "MTK") {} function snapshot() public onlyOwner { _snapshot(); } }
8. Upgradeable Contract (Kontrak yang Bisa Di-Upgrade)
Fitur ini memungkinkan kosmonuts meng-upgrade smart contract tanpa kehilangan data. Cocok buat proyek yang masih berkembang.
Cara Tambahkan:
- Gunakan library
@openzeppelin/contracts-upgradeable
:import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
- Modifikasi contract kosmonuts :
contract MyToken is ERC20Upgradeable { function initialize() public initializer { __ERC20_init("MyToken", "MTK"); _mint(msg.sender, 1000000 * 10 ** decimals()); } }
Cara Deploy Fitur-Fitur Ini di Remix
- Buka Remix IDE di https://remix.ethereum.org/.
- Compile smart contract kosmonuts .
- Deploy ke jaringan BSC Testnet atau Mainnet.
- Interaksi dengan contract menggunakan panel Deployed Contracts.
Tips Tambahan
- Test Dulu: Selalu tes smart contract kosmonuts di Testnet sebelum deploy ke Mainnet.
- Verifikasi Contract: Setelah deploy, verifikasi contract kosmonuts di BscScan.
- Baca Dokumentasi: OpenZeppelin punya dokumentasi lengkap di https://docs.openzeppelin.com/.
Done.