Lanjut ke konten utama

Kontrak Pintar Hello World untuk Pemula

solidityhardhatalchemykontrak pintarmemulaimenyebarkan
Pemula
✍️elanh
📆 31 Maret 2021
⏱️11 bacaan singkat minute read

Jika Anda baru dalam pengembangan rantai blok dan tidak tahu harus mulai dari mana, atau jika Anda hanya ingin memahami cara menyebarkan dan berinteraksi dengan kontrak pintar, panduan ini cocok untuk Anda. Kami akan memandu pembuatan dan menyebarkan kontrak pintar sederhana di jaringan uji Ropsten menggunakan dompet virtual (MetaMask(opens in a new tab)), Solidity(opens in a new tab), Hardhat(opens in a new tab), dan Alchemy(opens in a new tab) (jangan khawatir jika Anda belum mengerti beberapa hal ini, kami akan menjelaskannya).

Di bagian 2 dari tutorial ini kita akan membahas bagaimana kita dapat berinteraksi dengan kontrak pintar kita setelah disebarkan, dan di bagian 3 kita akan membahas cara mempublikasikannya di Etherscan.

Jika Anda memiliki pertanyaan, silakan berdiskusi di Discord Alchemy(opens in a new tab)!

Langkah 1: Hubungkan ke jaringan Ethereum

Ada banyak cara untuk membuat permintaan ke rantai Ethereum. Untuk mempermudah, kita akan menggunakan akun gratis di Alchemy, platform pengembang rantai blok dan API yang memungkinkan kita untuk berkomunikasi dengan rantai Ethereum tanpa harus menjalankan simpul kita sendiri. Platform ini juga memiliki perangkat pengembang untuk pemantauan dan analitik yang akan kita manfaatkan dalam tutorial ini untuk memahami apa yang terjadi di balik layar dalam penyebaran kontrak pintar kita. Jika Anda belum memiliki akun Alchemy, Anda dapat mendaftar gratis di sini(opens in a new tab).

Langkah 2: Buat aplikasi Anda (dan kunci API)

Setelah Anda membuat akun Alchemy, Anda dapat membuat kunci API dengan membuat aplikasi. Ini akan memungkinkan kita untuk membuat permintaan ke jaringan pengujian Ropsten. Jika Anda tidak terbiasa dengan jaringan uji, lihat laman ini.

  1. Arahkan ke halaman "Buat Aplikasi" di Dasbor Alchemy Anda dengan mengarahkan kursor ke "Aplikasi" di bar navigasi dan mengklik "Buat Aplikasi"

Buat aplikasi Hello world

  1. Beri nama aplikasi Anda "Hello World", berikan deskripsi singkat, pilih "Staging" untuk Lingkungan (digunakan untuk pembukuan aplikasi Anda), dan pilih "Ropsten" untuk jaringan Anda.

buat tampilan aplikasi hello world

  1. Klik "Buat aplikasi" dan selesai! Aplikasi Anda seharusnya muncul dalam tabel di bawah ini.

Langkah 3: Buat akun Ethereum (alamat)

Kita memerlukan akun Ethereum untuk mengirim dan menerima transaksi. Untuk tutorial ini, kita akan menggunakan MetaMask, dompet virtual dalam peramban yang digunakan untuk mengelola alamat akun Ethereum Anda. Selengkapnya tentang transaksi.

Anda dapat mengunduh dan membuat akun MetaMask secara gratis di sini(opens in a new tab). Saat Anda membuat akun, atau jika Anda sudah memiliki akun, pastikan untuk beralih ke "Jaringan Pengujian Ropsten" di kanan atas (sehingga kita tidak berurusan dengan uang asli).

contoh metamask ropsten

Langkah 4: Tambahkan ether dari Keran

Untuk menyebarkan kontrak pintar kita ke jaringan uji, kita memerlukan beberapa ETH palsu. Untuk mendapatkan ETH, Anda dapat beralih ke keran Ropsten(opens in a new tab) dan memasukkan alamat akun Ropsten Anda, lalu klik "Kirim ETH Ropsten." Mungkin perlu beberapa saat untuk menerima ETH palsu Anda karena kepadatan jaringan. Anda seharusnya akan melihat ETH dalam akun MetaMask Anda dengan segera!

Langkah 5: Periksa Saldo Anda

Untuk memeriksa ulang apakah saldo kita ada di sana, mari buat permintaan eth_getBalance(opens in a new tab) dengan menggunakan peralatan komposer Alchemy(opens in a new tab). Ini akan mengembalikan jumlah ETH dalam dompet kita. Setelah Anda memasukkan alamat akun MetaMask Anda dan klik "Kirim Permintaan", Anda akan melihat respons seperti ini:

1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }
📋 Salin

CATATAN: Hasil dalam wei bukan ETH. Wei digunakan sebagai denominasi terkecil dari ether. Konversi dari wei ke ETH adalah: 1 eth = 1018 wei. Jadi jika kita mengubah 0x2B5E3AF16B1880000 ke desimal kita mendapatkan 5*10¹⁸ yang sama dengan 5 ETH.

Fiuh! Uang palsu kita ada di sana 🤑.

Langkah 6: Inisialisasi proyek kami

Pertama, kita perlu membuat folder untuk proyek kita. Navigasikan ke barisan perintah dan ketik:

1mkdir hello-world
2cd hello-world

Sekarang karena kita ada di dalam folder proyek kita, kita akan menggunakan npm init untuk menginisialisasi proyek. Jika Anda belum menginstal npm, ikuti petunjuk ini(opens in a new tab) (kita juga membutuhkan Node.js jadi unduh juga!).

1npm init

Tidak masalah bagaimana Anda menjawab pertanyaan tentang pemasangan, berikut adalah cara kami melakukannya untuk referensi:

1package name: (hello-world)
2version: (1.0.0)
3description: hello world smart contract
4entry point: (index.js)
5test command:
6git repository:
7keywords:
8author:
9license: (ISC)
10About to write to /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "hello world smart contract",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \\"Error: no test specified\\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22}
Tampilkan semua

Setujui package.json dan kita siap untuk beraksi!

Langkah 7: Unduh Hardhat(opens in a new tab){#step-7}

Hardhat adalah lingkungan pengembangan untuk mengkompilasi, menyebarkan, menguji, dan men-debug perangkat lunak Ethereum Anda. Lingkungan ini membantu pengembang saat membangun kontrak pintar dan dApps secara lokal sebelum menyebarkannya ke rantai sebenarnya.

Di dalam proyek hello-world kita jalankan:

1npm install --save-dev hardhat

Lihat halaman ini untuk detail lebih lanjut tentang petunjuk penginstalan(opens in a new tab).

Langkah 8: Buat proyek Hardhat

Di dalam folder proyek kita jalankan:

1npx hardhat

Lalu Anda seharusnya melihat pesan selamat datang dan opsi untuk memilih apa yang ingin Anda lakukan. Pilih "buat hardhat.config.js kosong":

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Welcome to Hardhat v2.0.11 👷‍?
11
12What do you want to do? …
13Create a sample project
14❯ Create an empty hardhat.config.js
15Quit
Tampilkan semua

Ini akan menghasilkan berkas hardhat.config.js untuk kita yang merupakan tempat di mana kita akan menentukan semua penyiapan untuk proyek kita (pada langkah 13).

Langkah 9: Tambahkan folder proyek

Agar proyek kami tetap teratur, kita akan membuat dua folder baru. Navigasikan ke direktori akar dari proyek Anda dalam barisan perintah dan ketik:

1mkdir contracts
2mkdir scripts
  • contracts/ adalah tempat kita menyimpan berkas kode kontrak pintar hello world kita
  • scripts/ adalah tempat kita menyimpan skrip untuk menyebar dan berinteraksi dengan kontrak kita

Langkah 10: Tulis kontrak kita

Anda mungkin bertanya pada diri sendiri, kapan kita akan menulis kode?? Nah, kita sudah sampai disini, pada langkah 10.

Buka proyek hello-world di editor favorit Anda (kami menyukai VSCode(opens in a new tab)). Kontrak pintar ditulis dalam bahasa yang disebut Solidity dan inilah yang akan kita gunakan untuk menulis kontrak pintar HelloWorld.sol kita.‌

  1. Arahkan ke folder "kontrak" dan buat berkas baru bernama HelloWorld.sol
  2. Di bawah ini adalah contoh kontrak pintar Hello World dari Yayasan Ethereum yang akan kita gunakan untuk tutorial ini. Salin dan tempel konten di bawah ini ke berkas HelloWorld.sol Anda, dan pastikan untuk membaca komentar untuk memahami apa yang dilakukan kontrak ini:
1// Tentukan versi Solidity, gunakan pembuatan versi semantik.
2// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Defines a contract named `HelloWorld`.
6// Satu kontrak adalah koleksi dari fungsi dan data (statenya). Setelah disebarkan, sebuah kontrak tinggal di alamat spesifik pada blockchain Ethereum. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Declares a state variable `message` of type `string`.
10 // Variabel state adalah variabel yang nilainya secara permanen disimpan dalam penyimpanan kontrak. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
11 string public message;
12
13 // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
14 // Pembangun digunakan untuk menjalankan data kontrak. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
18 message = initMessage;
19 }
20
21 // A public function that accepts a string argument and updates the `message` storage variable.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
Tampilkan semua
📋 Salin

Ini adalah kontrak pintar super sederhana yang menyimpan pesan saat dibuat dan dapat diperbarui dengan memanggil fungsi update.

Langkah 11: Hubungkan MetaMask & Alchemy ke proyek Anda

Kita telah membuat dompet MetaMask, akun Alchemy, dan menulis kontrak pintar kitar, sekarang saatnya untuk menghubungkan ketiganya.

Setiap transaksi yang dikirim dari dompet virtual Anda memerlukan tanda tangan menggunakan kunci pribadi unik Anda. Untuk menyediakan program kita dengan izin ini, kita dapat menyimpan kunci pribadi kita (dan kunci API Alchemy) dengan aman dalam sebuah berkas lingkungan.

Untuk mempelajari lebih lanjut tentang mengirim transaksi, lihat tutorial ini tentang mengirim transaksi dengan menggunakan web3.

Pertama-tama, instal paket dotenv ke dalam direktori proyek Anda:

1npm install dotenv --save

Kemudian, buat sebuah berkas .env dalam direktori akar proyek kita, dan tambahkan kunci pribadi MetaMask dan URL API Alchemy HTTP-nya.

dapatkan kunci api alchemy

Salin URL API Alchemy

Berkas .env Anda akan terlihat seperti ini:

1API_URL = "https://eth-ropsten.alchemyapi.io/v2/your-api-key"
2PRIVATE_KEY = "your-metamask-private-key"

Untuk betul-betul menghubungkannya ke kode kita, kita akan mereferensikan variabel-variabel ini dalam berkas hardhat.config.js kita pada langkah ke-13.

Don't commit .env! Please make sure never to share or expose your .env file with anyone, as you are compromising your secrets in doing so. If you are using version control, add your .env to a gitignore(opens in a new tab) file.

Langkah 12: Instal Ethers.js

Ethers.js adalah pustaka yang mempermudah interaksi dan pembuatan permintaan ke Ethereum dengan membungkus metode JSON-RPC standar dengan metode yang lebih ramah pengguna.

Hardhat menjadikannya sangat mudah untuk mengintegrasikan Plugin(opens in a new tab) untuk perangkat tambahan dan fungsionalitas yang diperluas. Kita akan mengambil manfaat dari plugin Ethers(opens in a new tab) untuk penyebaran kontrak (Ethers.js(opens in a new tab) memiliki beberapa metode penyebaran kontrak yang sangat bersih).

Dalam direktori proyek Anda, ketik:

1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

Kita juga memerlukan ethers dalam hardhat.config.js kita di langkah selanjutnya.

Langkah 13: Perbarui hardhat.config.js

Kita sejauh ini telah menambahkan beberapa dependensi dan plugin, kini kita perlu memperbarui hardhat.config.js agar proyek kita mengenali mereka.

Perbarui hardhat.config.js Anda agar terlihat seperti ini:

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "ropsten",
12 networks: {
13 hardhat: {},
14 ropsten: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
Tampilkan semua

Langkah 14: Mengkompilasi kontrak kita

Untuk memastikan segalanya berjalan baik sejauh ini, mari kita kompilasikan kontrak kita. Tugas untuk mengompilasi merupakan salah satu tugas bawaan hardhat.

Dari barisan perintah jalankan:

1npx hardhat compile

Anda mungkin mendapat peringatan mengenai pengenal lisensi SPDX tidak tersedia di berkas sumber, tetapi tidak perlu mengkhawatirkannya — semoga semua yang lainnya berjalan dengan baik! Jika tidak, Anda selalu dapat mengirim pesan di discord Alchemy(opens in a new tab).

Langkah 15: Tulis skrip penyebaran kita

Kini setelah kontrak kita ditulis dan berkas konfigurasi kita siap, inilah waktunya menulis skrip penyebaran kontrak kita.

Arahkan ke folder skrip/ dan buat berkas baru yang disebut deploy.js, tambahkan konten berikut ke dalamnya:

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // Start deployment, returning a promise that resolves to a contract object
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("Contract deployed to address:", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
Tampilkan semua

Hardhat melakukan pekerjaan luar biasa dalam menjelaskan apa yang dilakukan masing-masing baris kode ini dalam Tutorial kontrak(opens in a new tab) mereka, kami telah mengadopsi penjelasan mereka di sini.

1const HelloWorld = await ethers.getContractFactory("HelloWorld");

ContractFactory di ethers.js adalah abstraksi yang digunakan untuk menyebarkan kontrak pintar baru, jadi HelloWorld di sini adalah factory untuk instance dari kontrak hello world kita. Saat menggunakan plugin hardhat-ethers, instance ContractFactory dan Contract terhubung ke penandatangan pertama secara default.

1const hello_world = await HelloWorld.deploy();

Memanggil deploy() pada ContractFactory akan memulai penyebaran, dan mengembalikan Promise yang menyelesaikan ke Contract. Ini adalah objek yang memiliki metode untuk setiap fungsi kontrak pintar kita.

Langkah 16: Menyebarkan kontrak kita

Akhirnya kita siap untuk menyebarkan kontrak pintar kita! Arahkan ke baris perintah dan jalankan:

1npx hardhat run scripts/deploy.js --network ropsten

Lalu, Anda seharusnya melihat sesuatu seperti ini:

1Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Jika kita pergi ke etherscan Ropsten(opens in a new tab) dan mencari akun kontrak kita, kita akan dapat melihat bahwa kontrak telah berhasil disebarkan. Transaksi akan terlihat seperti ini:

kontrak etherscan

From harus sesuai dengan alamat akun MetaMask Anda dan alamat To akan bertuliskan “Contract Creation” tetapi jika kita mengklik transaksi, kita akan melihat akun kontrak kita di bagian To:

transaksi etherscan

Selamat! Anda baru saja menyebarkan kontrak pintar ke rantai Ethereum 🎉

Untuk memahami apa yang terjadi di bawah hood, mari navigasikan ke tab Penjelajah dalam dasbor Alchemy(opens in a new tab) kita. Jika Anda memiliki beberapa aplikasi Alchemy, pastikan untuk memfilter berdasarkan aplikasi dan pilih "Hello World". penjelajah hello world

Di sini Anda akan melihat beberapa panggilan JSON-RPC yang dibuat Hardhat/Ethers untuk kita saat kita memanggil fungsi .deploy(). Dua hal penting untuk disebutkan di sini adalah eth_sendRawTransaction(opens in a new tab), yang merupakan permintaan untuk benar-benar menulis kontrak kita ke dalam rantai Ropsten, dan eth_getTransactionByHash(opens in a new tab) yang merupakan permintaan untuk membaca informasi tentang transaksi kita yang diberi hash (pola khas ketika transaksi). Untuk mempelajari lebih lanjut tentang mengirim transaksi, lihat tutorial ini tentang mengirim transaksi dengan menggunakan Web3

Demikian untuk bagian 1 dari tutorial ini, di bagian 2 kita akan benar-benar berinteraksi dengan kontrak pintar kita(opens in a new tab) dengan memperbarui pesan awal kita, dan di bagian 3 kita akan menyebarkan kontrak pintar kita ke Etherscan(opens in a new tab) sehingga semua orang akan tahu cara berinteraksi dengan kontrak itu.

Ingin mempelajari lebih lanjut tentang Alchemy? Lihat situs web(opens in a new tab) kami. Ingin tidak ketinggalan pembaruan? Berlangganan buletin kami di sini(opens in a new tab)! Pastikan juga untuk mengikuti Twitter(opens in a new tab) kami dan bergabunglah dengan Discord(opens in a new tab) kami.

Terakhir diedit: , 15 Agustus 2023

Apakah tutorial ini membantu?