Mendeploy Smart Contract dengan Remix
Pada halaman ini, Anda akan belajar bagaimana cara membuat, mendeploy, dan memverifikasi smart contract menggunakan Remix IDE ke Lisk Sepolia testnet.
Remix Online IDE adalah alat yang kuat untuk mengembangkan, mendeploy, mendebug, dan menguji smart contract Ethereum dan smart contract yang kompatibel dengan EVM. Tidak memerlukan pengaturan tambahan dan dapat langsung diakses melalui browser di https://remix.ethereum.org/.
Prasyarat
Dana Wallet
Mendeploy smart contract ke blockchain memerlukan biaya gas. Maka, Anda perlu mendanai wallet dengan ETH untuk menutupi biaya gas.
Dalam panduan ini, Anda akan mendeploy smart contract ke Lisk Sepolia Testnet.
Anda bisa melakukan deposit token yang diperlukan menggunakan Lisk Bridge.
Jika wallet Anda tidak memiliki SepoliaETH
yang cukup, Anda bisa menggunakan faucet Ethereum Sepolia Testnet yang tersedia seperti https://sepoliafaucet.com untuk mendapatkan Testnet ETH gratis.
Setelah itu, gunakan Lisk Bridge untuk mentransfer token dari Ethereum Sepolia Testnet ke Lisk Sepolia Testnet.
Anda juga dapat mendeploy smart contract di Lisk Mainnet dengan proses yang sama. Sebelum mendeploy ke Mainnet, pastikan wallet Anda memiliki ETH yang cukup.
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.
Berinteraksi dengan Smart Contract
Setelah smart contract terverifikasi, Anda dapat menggunakan tab Read Contract
dan Write Contract
untuk berinteraksi dengan smart contract yang telah dideploy melalui Blockscout: https://sepolia-blockscout.lisk.com/address/0x73e7a94dD5760d862F6FD9f8ea5D4245Bb143446?tab=contract.
Jangan lupa untuk memperbarui alamat kontrak dalam URL Blockscout.
Anda juga perlu menghubungkan wallet terlebih dahulu dengan menekan tombol Connect Wallet
.