Pendahuluan

Belakangan ini sedang banyak bermunculan blockchain-blockchain yang dapat menjalankan smart contract baik itu EVM maupun non-EVM seperti Polygon, Arbitrum, Solana, Polkadot, dll. Disamping itu komunitas dan ekosistem untuk smart contract juga berkembang pesat sehingga banyak proyek-proyek berbasis smart contract yang bermunculan. Ada beberapa macam bahasa pemrograman untuk membuat smart contract, namun untuk sekarang smart contract dengan bahasa pemrograman Solidity pada jaringan berbasis EVM masih menjadi primadona. Selain lebih mudah dipahami, ekosistem Solidity dan EVM sudah stabil dan matang sehingga lebih mudah bagi developer untuk saling berkolaborasi.

Token ERC-20 sendiri adalah standar smart contract yang dibuat berdasarkan EIP-20. Secara umum standar contract ini bertujuan untuk merepresentasikan aset fungible (seperti uang) pada jaringan blockchain.

Setup Hardhat

Buatlah sebuah project hardhat dengan menjalankan perintah

mkdir <project-name>
cd <project-name>
npx hardhat init

Pada project kali ini kita akan menggunakan typescript, tapi ini bisa disesuaikan dengan preferensi dan kebutuhan kalian Hardhat Installation

Install Openzeppelin

Openzeppelin adalah library yang digunakan untuk melakukan pengembangan smart contract yang aman karena pada library ini sudah ada contract-contract yang umum digunakan misalnya Ownable Access Control. Jika ingin membuat semuanya dari awal boleh saja tapi ada baiknya jika menggunakan library ini karena setiap logic pada kontrak sudah dipastikan minim bug.

Jalankan perintah

npm install @openzeppelin/contracts

Untuk langkah setup hardhat dan openzeppelin yang lebih jelas bisa dilihat disini: Cara menggunakan hardhat dan openzeppelin

Openzeppelin Wizard

Keuntungan lain dari menggunakan Openzeppelin adalah adanya Openzeppelin Wizard untuk membuat boilerplate contract yang umum seperti token ERC-20.

Openzeppelin Wizard

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract SomeToken is ERC20, Ownable {
    constructor() ERC20("Some Token", "SMT") {
        _mint(msg.sender, 1000 * 10 ** decimals());
    }

    function decimals() public override view returns(uint8) {
        return 6;
    }
}

Ini adalah code dari smart contract ERC-20 yang akan digunakan. Token tersebut bernama Some Token dengan simbol SMT. Supply dari token ini adalah 1000 SMT yang mana jumlahnya tidak bisa ditambah maupun dikurangi. Untuk decimals yang digunakan diubah menjadi 6 dimana secara default adalah 18.

Deploy Script

Untuk melakukan deployment contract ke suatu jaringan blockchain, kita perlu membuat deployment script. Script ini bisa dibuat menggunakan javascript maupun typescript. Pada kasus kali ini akan menggunakan typescript.

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import * as dotenv from "dotenv";
dotenv.config();

const config: HardhatUserConfig = {
  solidity: "0.8.19",
  networks: {
    mumbai: {
      url: process.env.RPC_URL,
      accounts: [process.env.PRIVATE_KEY || '']
    }
  },
};

export default config;

Tambahkan konfigurasi network mumbai. RPC_URL bisa didapatkan pada beberapa node provider yang umum seperti Infura dan Alchemy. Serta pastikan account dengan PRIVATE_KEY tersebut sudah memiliki saldo MATIC untuk melakukan deployment.

touch scripts/deploy-token.ts

Buat file baru dengan nama deploy-token.ts pada directory scripts. Nama file bisa disesuaikan dengan kebutuhan.

import { ethers } from "hardhat";

async function main() {
	const SomeToken = await ethers.getContractFactory("SomeToken");
	const someToken = await SomeToken.deploy();

	await someToken.waitForDeployment();

	console.log(`deployed to: ${someToken.target}`);
}

main().catch((error) => {
	console.error(error);
	process.exitCode = 1;
})

Kemudian jalankan script ke jaringan yang diinginkan dengan cara

npx hardhat run scripts/deploy-token.ts --network mumbai

Simpulan

Token ERC-20 sangat berguna untuk melakukan tokenisasi aset fungible karena cara kerjanya yang mirip seperti cara kerja uang pada dunia nyata. Bisa dicetak, diedarkan maupun dimusnahkan. Semoga bermanfaat :)