Kontrak pintar adalah blok kode yang berada di blockchain. Ini seperti akun Ethereum tetapi ada perbedaan penting antara akun eksternal dan kontrak pintar. Tidak seperti kontrak pintar, akun eksternal dapat terhubung ke beberapa jaringan Ethereum (Rinkebey, Kovan, main, dll.) sedangkan kontrak pintar hanya khusus untuk satu jaringan individu (jaringan yang digunakan). Saat kontrak pintar disebarkan, itu membuat sebuah instance (akun kontrak) di jaringan. Seseorang dapat membuat beberapa contoh kontrak pintar di jaringan atau beberapa jaringan. Penyebaran kontrak pintar dilakukan dengan mengirimkan transaksi ke jaringan dengan bytecode.
Menyebarkan Ke Jaringan Lokal
Emulator dapat digunakan untuk menyebarkan kontrak pintar di jaringan lokal, mis. Ganache-cli. Ini menangani semuanya dan pengguna tidak perlu khawatir tentang keamanan dan jumlah gas yang diperlukan untuk transaksi karena semuanya terjadi di jaringan uji lokal. Yang harus dilakukan hanyalah meneruskan penyedia ganache sebagai argumen ke instance web3 (web3 memfasilitasi koneksi antara jaringan blockchain dan aplikasi js).
Menyebarkan Ke Jaringan Ethereum Yang Sebenarnya
Sebelum menyebarkan kontrak pintar ke jaringan Ethereum yang sebenarnya, pastikan akun tersebut memiliki beberapa eter di dalamnya. Menyebarkan kontrak seperti mengirim transaksi dan membutuhkan sejumlah gas untuk diproses. Tidak seperti penerapan di jaringan lokal, transaksi akan membutuhkan waktu untuk diselesaikan (antara 15 detik hingga 5 menit). Web3 digunakan untuk berinteraksi dengan jaringan dengan cara yang sama seperti yang dilakukan dalam penerapan lokal kecuali menyesuaikan penyedia yang akan diteruskan ke instance web3. Alih-alih membuat simpul kami sendiri yang terhubung ke jaringan Ethereum, seseorang dapat menggunakan Infura. Ini adalah API publik yang memberikan akses ke node Infura yang sudah dihosting di jaringan Ethereum. Cukup mendaftar ke Infura dan dapatkan titik akhir yang akan digunakan dalam kode untuk menerapkan kontrak pintar.
example.sol- Di bawah ini adalah contoh kode soliditas yang digunakan untuk pengujian. Yang dilakukannya hanyalah menetapkan variabel publik sebagai alamat pengirim.
- Kepadatan
// Solidity program to implement // the above approach pragma solidity ^0.8.4; // Creating a contract named Example contract Example { // Public variable of type address address public manager; // Constructor function to set manager // as address of sender constructor() { manager = msg.sender; } } |
Langkah 1- Instal dependensi yang diperlukan dengan menjalankan perintah berikut-
npm i [email protected] [email protected] [email protected]
Pastikan untuk menginstal versi yang sama agar skrip berikut berhasil dijalankan.
Langkah 2- Daftar Infura dan buat proyek di jaringan Ethereum tertentu untuk mendapatkan akses ke titik akhir. Titik akhir akan diminta untuk menerapkan kontrak pintar pada simpul infura yang sudah dihosting di jaringan Ethereum. Untuk membuat proyek di infura-
- Klik buat proyek baru.
- Beri nama.
- Pilih jaringan untuk menerapkan kontrak pintar.
- Maksimal 3 proyek dapat dibuat di infura secara gratis.
Langkah 3 – Dapatkan akses ke Bytecode dan ABI (Kompilasi kontrak pintar). Kompiler soliditas memberikan sebagian besar kode sebagai output, seseorang dapat mencetak output ke konsol jika diperlukan. Hanya bagian yang relevan (relevan untuk penerapan) yaitu, bytecode dan antarmuka yang diekstraksi dari output dalam skrip berikut.
Compile.js- Di bawah ini adalah file javascript.
- Javascript
// Javascript file to implement // the above approach const path = require( "path" ); const fs = require( "fs" ); const solc = require( "solc" ); // remember to change line 8 to your // own file path. Make sure you have your // own file name or contract name in line // 13, 28 and 30 as well. const examplePath = path.resolve(__dirname, "contracts" , "example.sol" ); const source = fs.readFileSync(examplePath, "utf-8" ); var input = { language: 'Solidity' , sources: { 'example.sol' : { content: source } }, settings: { outputSelection: { '*' : { '*' : [ '*' ] } } } }; var output = JSON.parse(solc.compile(JSON.stringify(input))); var interface = output.contracts[ "example.sol" ][ "example" ].abi; var bytecode = output.contracts[ 'example.sol' ][ "example" ].evm.bytecode.object; module.exports = { interface, bytecode }; |
Langkah 4 – Tambahkan ekstensi Metamask ke google chrome dari toko web chrome.
Langkah 5 – Setelah memiliki akses ke bytecode dan antarmuka, yang diperlukan hanyalah membuat penyedia dengan frasa mnemonik dan titik akhir infura sendiri menggunakan penyedia truffle-hdwallet yang telah diinstal sebelumnya. Buat instance web3 dan berikan penyedia sebagai argumen. Terakhir, gunakan metode penerapan dengan bytecode sebagai argumen untuk menerapkan kontrak pintar.
menyebarkan.js
- Javascript
const HDWalletProvider = require( "truffle-hdwallet-provider" ); // Web3 constructor function. const Web3 = require( "web3" ); // Get bytecode and ABI after compiling // solidity code. const { interface, bytecode } = require( "file-path" ); const provider = new HDWalletProvider( "mnemonic phrase" , // Remember to change this to your own phrase! "-" // Remember to change this to your own endpoint! ); // Create an instance of Web3 and pass the // provider as an argument. const web3 = new Web3(provider); const deploy = async () => { // Get access to all accounts linked to mnemonic // Make sure you have metamask installed. const accounts = await web3.eth.getAccounts(); console.log( "Attempting to deploy from account" , accounts[0]); // Pass initial gas and account to use in the send function const result = await new web3.eth.Contract(interface) .deploy({ data: bytecode }) .send({ gas: "1000000" , from: accounts[0]}); console.log( "Contract deployed to" , result.options.address); }; deploy(); // The purpose of creating a function and // calling it at the end - // so that we can use async await instead // of using promises |
Keluaran:
Kontrak disebarkan ke 0x8716443863c87ee791C1ee15289e61503Ad4443c
Sekarang kontrak digunakan di jaringan, fungsinya dapat diuji menggunakan remix IDE atau seseorang dapat membuat antarmuka untuk berinteraksi dengan kontrak pintar di jaringan.
Berinteraksi dengan Kontrak Cerdas yang Diterapkan Menggunakan Remix IDE
Remix dapat digunakan untuk terhubung ke jaringan Ethereum yang sebenarnya dan berinteraksi dengan kontrak pintar yang digunakan. Ini adalah cara termudah untuk berinteraksi dengan kontrak pintar yang diterapkan tanpa harus membuat tampilan depan yang mewah.
Langkah 1- Buka Remix IDE di browser chrome dan salin kode soliditas kontrak pintar yang diterapkan dan tempel di file Ballot.sol di IDE. Beralih ke kompiler soliditas dengan mengklik ikon “S” di bilah sisi dan kompilasi.
Langkah 2- Arahkan ke Deploy dan jalankan transaksi dari sidebar dan pilih web3 yang disuntikkan dari dropdown lingkungan. Ini adalah contoh web3 yang disuntikkan oleh metamask ke browser Anda. Ini juga memiliki akses ke semua akun.
Langkah 3- Alih-alih menyebarkan kontrak pintar, salin alamat kontrak pintar yang sudah digunakan di bidang “Di Alamat”. Tombol ini dinonaktifkan sampai Anda memasukkan alamat yang valid. Setelah tombol diklik, daftar fungsi dari kontrak pintar Anda dapat dilihat. Seseorang dapat berinteraksi dengan kontrak pintar yang digunakan menggunakan tombol fungsi ini. Karena “example.sol” hanya memiliki satu variabel, manajer. Mengklik tombol ini akan memberikan alamat akun yang digunakan sebagai output.