Cara Deploy Token ERC-20 Baru di Lisk
Panduan ini menjelaskan cara mendepoy token ERC-20 baru di Lisk. Jika Anda ingin bridge token yang sudah ada dari Ethereum, silakan lihat panduan Menjembatani Token L1 ke Lisk.
Kita akan menggunakan Remix IDE untuk pengembangan smart contract di panduan ini, tetapi silahkan memilih framework pengembangan smart contract pilihan kalian untuk mengimplementasikan contract token Anda.
1. Buka Remix
Buka Remix di browser Anda.
2. Buat File Baru
Di dalam folder contracts
, klik tombol 📄 ("Create new file") untuk membuat file Solidity kosong yang baru.
Anda dapat memberi nama file ini sesuai keinginan, misalnya MyNFT.sol
.
3. Salin Contoh Contract
Salin contoh contract berikut ke dalam file baru Anda untuk mendeploy contract NFT sederhana, atau gantikan dengan contract Anda sendiri yang ingin Anda deploy:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
uint256 public currentTokenId;
constructor() ERC721("My NFT", "MNFT") {}
function mint(address recipient) public returns (uint256) {
uint256 newItemId = ++currentTokenId;
_safeMint(recipient, newItemId);
return newItemId;
}
}
4. Kompilasi contract
Pastikan bahwa versi compiler di Remix IDE cocok dengan versi compiler yang disebutkan dalam smart contract: pragma solidity ^0.8.28;
.
Tekan tombol play berwarna hijau di bagian atas untuk mengkompilasi contract.
5. Test contract
Untuk test contract, kami menggunakan plugin Solidity Unit Testing dari Remix IDE. Jika Anda belum pernah menggunakan plugin ini sebelumnya dan tidak melihat ikon tanda centang ganda di sidebar, Anda harus terlebih dahulu mengaktifkannya dari Remix plugin manager.
Untuk mulai test, buat folder baru bernama tests
di level root Remix workspace Anda.
Ini adalah direktori default untuk test.
Jika Anda ingin mengubah direktori test, Anda dapat melakukannya dengan klik ikon tanda centang ganda dan menentukan path di kolom Test directory
.
Selanjutnya, buka file Solidity yang ingin Anda test, lalu beralih ke plugin "Solidity Unit Testing" dan klik tombol Generate
.
Ini akan membuat file test (misalnya myNFT_test.sol) di direktori tests.
File ini berisi informasi tentang pengembangan test untuk sebuah contract.
Di bawah ini adalah contoh file test generik myNFT_test.sol
:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
// Import ini secara otomatis diinject oleh Remix
import "remix_tests.sol";
// Import ini diperlukan untuk menggunakan cpmtext transaksi kustom
// Meskipun mungkin gagal kompilasi di plugin 'Solidity Compiler'
// Tapi akan berfungsi dengan baik di plugin 'Solidity Unit Testing'
import "remix_accounts.sol";
import "../contracts/MyNFT.sol";
// Nama file harus diakhiri dengan '_test.sol', file ini dapat berisi lebih dari satu contract testSuite
contract testSuite {
/// 'beforeAll' jalan sebelum semua test lainnya
/// Fungsi khusus lainnya adalah: 'beforeEach', 'beforeAll', 'afterEach' & 'afterAll'
function beforeAll() public {
// <inisiasi contract>
Assert.equal(uint(1), uint(1), "1 should be equal to 1");
}
function checkSuccess() public {
// Gunakan metode 'Assert': https://remix-ide.readthedocs.io/en/latest/assert_library.html
Assert.ok(2 == 2, 'should be true');
Assert.greaterThan(uint(2), uint(1), "2 should be greater than to 1");
Assert.lesserThan(uint(2), uint(3), "2 should be lesser than to 3");
}
function checkSuccess2() public pure returns (bool) {
// Gunakan nilai return (true atau false) untuk test contract
return true;
}
function checkFailure() public {
Assert.notEqual(uint(1), uint(1), "1 should not be equal to 1");
}
/// Context Transaksi Kustom: https://remix-ide.readthedocs.io/en/latest/unittesting.html#customization
/// #sender: account-1
/// #value: 100
function checkSenderAndValue() public payable {
// indeks akun bervariasi 0-9, nilai dalam wei
Assert.equal(msg.sender, TestsAccounts.getAccount(1), "Invalid sender");
Assert.equal(msg.value, 100, "Invalid value");
}
}
Ambil template yang dibuat secara otomatis sebagai dasar untuk membuat unit test yang memadai yang memverifikasi perilaku contract Anda dalam berbagai skenario. Remix inject library assert bawaan untuk pengetesan. Anda dapat mengunjungi library assert di dokumen Remix. Selain itu, Remix memungkinkan penggunaan fungsi khusus dalam file test untuk membuat pengetesan lebih struktural.
Fungsi-fungsi tersebut adalah:
beforeEach()
- Berjalan sebelum setiap testbeforeAll()
- Berjalan sebelum semua testafterEach()
- Berjalan setelah setiap testafterAll()
- Berjalan setelah semua test
Untuk NFT contract baru kami, kami menambahkan test berikut:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
// Import ini secara otomatis disuntikkan oleh Remix
import "remix_tests.sol";
// Import ini diperlukan untuk menggunakan context transaksi kustom
// Meskipun mungkin gagal kompilasi di plugin 'Solidity Compiler'
// Tapi akan berfungsi dengan baik di plugin 'Solidity Unit Testing'
import "remix_accounts.sol";
import "../contracts/MyNFT.sol";
// Nama file harus diakhiri dengan '_test.sol', file ini dapat berisi lebih dari satu contract testSuite
contract testSuite {
MyNFT nft;
function beforeAll() public {
nft = new MyNFT();
}
// Test fungsionalitas minting
function testMint() public {
// Simpan ID token awal
uint256 initialTokenId = nft.currentTokenId();
// Cetak NFT baru ke alamat contract ini
uint256 newTokenId = nft.mint(TestsAccounts.getAccount(2));
// Periksa apakah ID token bertambah
Assert.equal(newTokenId, initialTokenId + 1, "Token ID should increment by 1");
// Periksa currentTokenId diperbarui
Assert.equal(nft.currentTokenId(), newTokenId, "currentTokenId should match new
token ID");
// Periksa kepemilikan
Assert.equal(nft.ownerOf(newTokenId), TestsAccounts.getAccount(2), "Contract
should own the minted NFT");
}
// Test minting ke alamat tertentu
function testMintToAddress() public {
// Mint NFT ke alamat test
uint256 newTokenId = nft.mint(TestsAccounts.getAccount(1));
// Periksa kepemilikan
Assert.equal(nft.ownerOf(newTokenId), TestsAccounts.getAccount(1), "Test address
should own the minted NFT");
// Periksa saldo token
Assert.equal(nft.balanceOf(TestsAccounts.getAccount(1)), 1, "Test address should
have 1 NFT");
}
}
Ada beberapa cara untuk menyesuaikan test solidity Anda. Sebagai contoh, Anda dapat menyesuaikan compiler dan context transaksi.
Setelah Anda selesai menulis test, pilih file test dan klik Run
untuk mengeksekusi test.
Eksekusi akan berjalan di environment terpisah.
Setelah menyelesaikan eksekusi satu file, ringkasan test akan ditampilkan:
Result for tests/myNFT_test.sol
Passed: 2
Failed: 0
Time Taken: 0.06s
6. Deploy contract
Buka tab Deploy & run transactions
(ini seperti logo Ethereum dengan panah mengarah ke kanan).
Pastikan environment telah diset menjadi "Injected Provider", wallet Anda terhubung ke jaringan Lisk atau Lisk Sepolia, dan Remix memiliki akses ke wallet.
Lalu, pilih contract MyNFT
dari menu dropdown deployment dan klik tombol Deploy
berwarna oranye untuk deploy contract dan mengkonfirmasi deployment contract di wallet Anda yang terhubung.
Periksa pesan log di Remix; seharusnya ada alamat contract yang muncul. Tempel alamat ini ke Blockscout untuk melihat contract di Lisk blockchain explorer: https://sepolia-blockscout.lisk.com/address/0x73e7a94dD5760d862F6FD9f8ea5D4245Bb143446.
Jika Anda memilih untuk deploy di Lisk Mainnet, Anda harus tempel alamat ke https://blockscout.lisk.com.
7. Verifikasi contract
Jika Anda ingin berinteraksi dengan contract Anda melalui block explorer, Anda harus memverifikasinya terlebih dahulu. Contract di atas sudah diverifikasi, jadi Anda seharusnya sudah dapat melihatnya di block explorer. Untuk selebihnya dari panduan ini, kita akan menjelaskan cara memverifikasi contract menggunakan Remix di Lisk Sepolia Testnet.
Anda bisa menerapkan langkah yang sama untuk verifikasi sebuah contract di Lisk Mainnet, cukup gunakan https://blockscout.lisk.com dari pada https://sepolia-blockscout.lisk.com pada langkah kedua.
- Di Remix, klik kanan pada contract yang ingin Anda verifikasi dan pilih
Flatten
. Ini akan membuat file baru bernamaMyNFT_flattened.sol
. - Sekarang, ubah ke contract yang baru saja di deploy di https://sepolia-blockscout.lisk.com/
- Pergi ke tab contract dan klik tombol
Verify and Publish
berwarna biru.- (Opsional) Pilih lisensi untuk contract Anda.
- Pilih
Solidity (Single file)
sebagai metode verifikasi. - Pilih versi compiler yang sesuai dengan contract Anda.
- Nonaktifkan code optimization.
- Salin source code yang telah diflatten dari Remix dan tempel ke dalam kolom
Enter the Solidity Contract Code
.
- Pastikan semua informasi sudah benar, lalu klik tombol
Verify and Publish
untuk memverifikasi contract Anda.
Setelah verifikasi berhasil, tab kode akan menampilkan ikon ✅, dan source code akan bisa dilihat.