Berinteraksi dengan kontrak eksternal
Kontrak pintar dapat berinteraksi dengan kontrak lain di blockchain Ethereum, memungkinkan mereka untuk memanggil fungsi, membaca variabel, dan mengirim Ether atau token. Salah satu cara untuk memfasilitasi interaksi ini adalah dengan menggunakan Web3j, sebuah perpustakaan Java ringan untuk bekerja dengan Ethereum. Web3j dapat menghasilkan kode pembungkus kontrak pintar secara otomatis, memungkinkan penyebaran yang mulus dan interaksi dengan kontrak pintar dari JVM.
Untuk berinteraksi dengan kontrak eksternal menggunakan Web3j, Anda harus terlebih dahulu mengkompilasi kontrak pintar Anda dan membuat kode pembungkus. Anda kemudian dapat membuat dan menerapkan kontrak pintar Anda atau menggunakan kontrak yang ada, sehingga mudah untuk bertransaksi dengan dan memanggil metode kontrak pintar secara langsung.
Peristiwa dan log
Acara sangat penting untuk melacak dan memantau aktivitas kontrak pintar di blockchain. Mereka memberikan cara untuk mengeluarkan log yang dapat disimpan dan kemudian diambil oleh sistem di luar rantai. Acara membuat lebih mudah melacak acara kontrak tertentu atau perubahan dalam variabel status, yang sangat membantu untuk dApps (aplikasi terdesentralisasi) yang memerlukan pembaruan real-time.
Log adalah catatan yang dipancarkan oleh peristiwa dan disimpan di blockchain. Mereka adalah bagian penting dari ekosistem Ethereum, karena memungkinkan komunikasi efisien antara smart contract dan sistem di luar rantai. Log juga diindeks, sehingga memudahkan aplikasi untuk menyaring dan mencari peristiwa atau titik data tertentu.
Contoh: Menerapkan kontrak pintar menggunakan Remix dan MetaMask
Langkah 1: Buka Remix IDE
Pertama, buka Remix IDE (https://remix.ethereum.org/) di browser web Anda.
Langkah 2: Buat file baru
Klik tombol “+” di sudut kiri atas IDE untuk membuat Ruang Kerja Kosong baru. Kemudian klik Halaman “Berkas Baru” untuk membuat Berkas baru
Namai file “Auction.sol”.
Langkah 3: Tentukan kontrak
Salin dan tempel kode berikut ke file "Auction.sol" yang baru:
TypeScript// SPDX-License-Identifier: MIT// Tentukan soliditas versionpragma solidity ^0.8.0;// Tentukan kontrak lelangkontrak lelang { // Deklarasikan variabel negara alamat pemilik publik yang harus dibayar; // Pemilik kontrak (dapat membatalkan lelang) uint public startBlock; // Nomor blok tempat lelang dimulai uint public endBlock; // Nomor blok tempat lelang berakhir string ipfsHash publik; // IPFS hash untuk barang yang dilelang bool public canceled; Apakah lelang telah dibatalkan bool publik berakhir; Apakah lelang telah berakhir uint public highestBid; Tawaran tertinggi sejauh ini ditujukan kepada publik yang harus dibayar, Penawar tertinggi; Alamat penawar tertinggi // Menyatakan acara acara AuctionCanceled(); Peristiwa yang dipancarkan saat lelang dibatalkan peristiwa HighestBidIncrease(alamat penawar, jumlah ut); Peristiwa yang dipancarkan saat tawaran tertinggi baru ditetapkan peristiwa AuctionEnded(alamat pemenang, jumlah uint); Peristiwa yang dipancarkan saat lelang berakhir // Deklarasikan pemetaan pemetaan (alamat = > uint256) saldo publik; Fungsi konstruktor constructor() { owner = payable(msg.sender); // Atur pemilik ke alamat yang menyebarkan kontrak startBlock = block.number; // Atur blok awal ke nomor blok saat ini endBlock = startBlock + 40320; // Atur blok akhir menjadi 1 minggu (40320 blok) setelah blok awal ipfsHash = ""; Inisialisasi hash IPFS ke string kosong } // Fungsi untuk menempatkan fungsi tawaran placeBid() public payable {require(block.number >= startBlock && block.number <= endBlock, "Auction is not active."); // Periksa apakah lelang aktif require(msg.value > highestBid, "Sudah ada tawaran yang lebih tinggi."); // Periksa apakah tawaran baru lebih tinggi dari tawaran tertinggi saat ini membutuhkan (!canceled, "Lelang dibatalkan."); // Periksa apakah lelang belum dibatalkan Jika ada penawar tertinggi sebelumnya, tambahkan jumlah tawaran mereka ke saldo mereka jika (highestBidder!= address(0)) { balances[highestBidder] += highestBid; } // Tetapkan tawaran tertinggi baru dan penawar tertinggiBid = msg.value; penawar tertinggi = hutang (msg.sender); Memancarkan peristiwa untuk menandakan tawaran tertinggi baru telah ditetapkan memancarkan HighestBidIncrease(msg.sender, msg.value); } // Fungsi untuk membatalkan fungsi lelang cancelAuction() public { require(msg.sender == owner, "Only the owner can cancel the auction."); // Periksa apakah pengirim adalah pemilik require(!ended, "Auction has already ended."); // Periksa apakah lelang belum berakhir // Tetapkan bendera yang dibatalkan dan pancarkan acara untuk menandakan lelang telah dibatalkan dibatalkan = true; memancarkan LelangDibatalkan(); } // Berfungsi untuk mengakhiri fungsi lelang endAuction() public { require(block.number > endBlock, "Auction is not over yet."); // Periksa apakah lelang sudah berakhir require(!canceled, "Auction is canceled."); // Periksa apakah lelang belum dibatalkan require(!ended, "Auction has already ended."); // Periksa apakah lelang belum berakhir // Tetapkan bendera berakhir dan pancarkan acara untuk menandakan lelang telah berakhir = true; memancarkan LelangAkhir (penawar tertinggi, tawaran tertinggi); Transfer jumlah tawaran tertinggi ke pemilik pemilik.transfer (tawaran tertinggi); Jika ada penawar tertinggi sebelumnya, tambahkan jumlah tawaran mereka ke saldo mereka jika (highestBidder!= address(0)) { balances[highestBidder] += highestBid; } } // Fungsi untuk mengatur hash IPFS untuk item yang dilelang fungsi setIpfsHash (hash memori string) publik { require(msg.sender == pemilik, "Hanya pemilik yang dapat mengatur hash IPFS."); // Periksa apakah pengirim adalah pemilik ipfsHash = hash; // Atur hash IPFS ke nilai yang disediakan }}
Kode ini mendefinisikan Lelang
kontrak, yang memungkinkan pengguna untuk menempatkan penawaran pada suatu barang dan mengakhiri lelang setelah periode tertentu. Kontrak juga memiliki fungsi untuk membatalkan lelang dan fungsi untuk mengatur hash IPFS untuk barang yang dilelang.
Langkah 4: Kompilasi kontrak
Klik tab “Solidity Compiler” di menu sebelah kiri. Di bawah “Compile Auction.sol”, klik tombol “Compile”. Kontrak seharusnya berhasil dikompilasi, dan Anda akan melihat tanda centang hijau di sebelah “Auction.sol” dalam penjelajah file.
Langkah 5: Menerapkan kontrak
Klik tab "Deploy & Run Transactions" di menu sebelah kiri. Di bawah "Environment", pilih "Injected Web3" sebagai lingkungan. Di bawah "Kontrak", pilih "Lelang" sebagai kontrak yang akan dideploy. Klik tombol "Deploy".
Langkah 6: Berinteraksi dengan kontrak
Setelah kontrak diterapkan, Anda dapat berinteraksi dengannya menggunakan berbagai fungsi yang didefinisikan dalam kontrak. Misalnya, Anda dapat memanggil placeBid()
fungsi untuk menempatkan penawaran pada barang
Dengan menggunakan Remix dan MetaMask, Anda dapat dengan mudah mendeploy dan berinteraksi dengan smart contracts di jaringan Ethereum, memungkinkan pengembangan dan pengujian aplikasi terdesentralisasi dalam lingkungan yang ramah pengguna.
Sorotan
Kontrak pintar dapat berinteraksi dengan kontrak lain di blockchain Ethereum, memungkinkan pemanggilan fungsi, pembacaan variabel, dan transfer Ether atau token.
Web3j adalah perpustakaan Java ringan yang memfasilitasi interaksi dengan Ethereum. Ini dapat menghasilkan kode pembungkus smart contract secara otomatis untuk implementasi yang mulus dan interaksi dengan kontrak dari JVM.
Acara penting untuk melacak dan memantau aktivitas kontrak di blockchain. Mereka mengeluarkan log yang dapat disimpan dan diambil oleh sistem di luar rantai, memungkinkan pembaruan real-time untuk dApps.
Log, yang merupakan catatan yang dipancarkan oleh acara, memainkan peran penting dalam komunikasi efisien antara kontrak pintar dan sistem di luar rantai. Mereka diindeks, memungkinkan untuk penyaringan dan pencarian yang mudah dari acara atau titik data tertentu.
Contoh yang diberikan menunjukkan proses penerapan kontrak pintar menggunakan Remix IDE dan MetaMask. Ini mencakup langkah-langkah seperti membuat file baru, mendefinisikan kontrak, menyusunnya, menyebarkannya, dan berinteraksi dengan fungsinya.
Berinteraksi dengan kontrak eksternal
Kontrak pintar dapat berinteraksi dengan kontrak lain di blockchain Ethereum, memungkinkan mereka untuk memanggil fungsi, membaca variabel, dan mengirim Ether atau token. Salah satu cara untuk memfasilitasi interaksi ini adalah dengan menggunakan Web3j, sebuah perpustakaan Java ringan untuk bekerja dengan Ethereum. Web3j dapat menghasilkan kode pembungkus kontrak pintar secara otomatis, memungkinkan penyebaran yang mulus dan interaksi dengan kontrak pintar dari JVM.
Untuk berinteraksi dengan kontrak eksternal menggunakan Web3j, Anda harus terlebih dahulu mengkompilasi kontrak pintar Anda dan membuat kode pembungkus. Anda kemudian dapat membuat dan menerapkan kontrak pintar Anda atau menggunakan kontrak yang ada, sehingga mudah untuk bertransaksi dengan dan memanggil metode kontrak pintar secara langsung.
Peristiwa dan log
Acara sangat penting untuk melacak dan memantau aktivitas kontrak pintar di blockchain. Mereka memberikan cara untuk mengeluarkan log yang dapat disimpan dan kemudian diambil oleh sistem di luar rantai. Acara membuat lebih mudah melacak acara kontrak tertentu atau perubahan dalam variabel status, yang sangat membantu untuk dApps (aplikasi terdesentralisasi) yang memerlukan pembaruan real-time.
Log adalah catatan yang dipancarkan oleh peristiwa dan disimpan di blockchain. Mereka adalah bagian penting dari ekosistem Ethereum, karena memungkinkan komunikasi efisien antara smart contract dan sistem di luar rantai. Log juga diindeks, sehingga memudahkan aplikasi untuk menyaring dan mencari peristiwa atau titik data tertentu.
Contoh: Menerapkan kontrak pintar menggunakan Remix dan MetaMask
Langkah 1: Buka Remix IDE
Pertama, buka Remix IDE (https://remix.ethereum.org/) di browser web Anda.
Langkah 2: Buat file baru
Klik tombol “+” di sudut kiri atas IDE untuk membuat Ruang Kerja Kosong baru. Kemudian klik Halaman “Berkas Baru” untuk membuat Berkas baru
Namai file “Auction.sol”.
Langkah 3: Tentukan kontrak
Salin dan tempel kode berikut ke file "Auction.sol" yang baru:
TypeScript// SPDX-License-Identifier: MIT// Tentukan soliditas versionpragma solidity ^0.8.0;// Tentukan kontrak lelangkontrak lelang { // Deklarasikan variabel negara alamat pemilik publik yang harus dibayar; // Pemilik kontrak (dapat membatalkan lelang) uint public startBlock; // Nomor blok tempat lelang dimulai uint public endBlock; // Nomor blok tempat lelang berakhir string ipfsHash publik; // IPFS hash untuk barang yang dilelang bool public canceled; Apakah lelang telah dibatalkan bool publik berakhir; Apakah lelang telah berakhir uint public highestBid; Tawaran tertinggi sejauh ini ditujukan kepada publik yang harus dibayar, Penawar tertinggi; Alamat penawar tertinggi // Menyatakan acara acara AuctionCanceled(); Peristiwa yang dipancarkan saat lelang dibatalkan peristiwa HighestBidIncrease(alamat penawar, jumlah ut); Peristiwa yang dipancarkan saat tawaran tertinggi baru ditetapkan peristiwa AuctionEnded(alamat pemenang, jumlah uint); Peristiwa yang dipancarkan saat lelang berakhir // Deklarasikan pemetaan pemetaan (alamat = > uint256) saldo publik; Fungsi konstruktor constructor() { owner = payable(msg.sender); // Atur pemilik ke alamat yang menyebarkan kontrak startBlock = block.number; // Atur blok awal ke nomor blok saat ini endBlock = startBlock + 40320; // Atur blok akhir menjadi 1 minggu (40320 blok) setelah blok awal ipfsHash = ""; Inisialisasi hash IPFS ke string kosong } // Fungsi untuk menempatkan fungsi tawaran placeBid() public payable {require(block.number >= startBlock && block.number <= endBlock, "Auction is not active."); // Periksa apakah lelang aktif require(msg.value > highestBid, "Sudah ada tawaran yang lebih tinggi."); // Periksa apakah tawaran baru lebih tinggi dari tawaran tertinggi saat ini membutuhkan (!canceled, "Lelang dibatalkan."); // Periksa apakah lelang belum dibatalkan Jika ada penawar tertinggi sebelumnya, tambahkan jumlah tawaran mereka ke saldo mereka jika (highestBidder!= address(0)) { balances[highestBidder] += highestBid; } // Tetapkan tawaran tertinggi baru dan penawar tertinggiBid = msg.value; penawar tertinggi = hutang (msg.sender); Memancarkan peristiwa untuk menandakan tawaran tertinggi baru telah ditetapkan memancarkan HighestBidIncrease(msg.sender, msg.value); } // Fungsi untuk membatalkan fungsi lelang cancelAuction() public { require(msg.sender == owner, "Only the owner can cancel the auction."); // Periksa apakah pengirim adalah pemilik require(!ended, "Auction has already ended."); // Periksa apakah lelang belum berakhir // Tetapkan bendera yang dibatalkan dan pancarkan acara untuk menandakan lelang telah dibatalkan dibatalkan = true; memancarkan LelangDibatalkan(); } // Berfungsi untuk mengakhiri fungsi lelang endAuction() public { require(block.number > endBlock, "Auction is not over yet."); // Periksa apakah lelang sudah berakhir require(!canceled, "Auction is canceled."); // Periksa apakah lelang belum dibatalkan require(!ended, "Auction has already ended."); // Periksa apakah lelang belum berakhir // Tetapkan bendera berakhir dan pancarkan acara untuk menandakan lelang telah berakhir = true; memancarkan LelangAkhir (penawar tertinggi, tawaran tertinggi); Transfer jumlah tawaran tertinggi ke pemilik pemilik.transfer (tawaran tertinggi); Jika ada penawar tertinggi sebelumnya, tambahkan jumlah tawaran mereka ke saldo mereka jika (highestBidder!= address(0)) { balances[highestBidder] += highestBid; } } // Fungsi untuk mengatur hash IPFS untuk item yang dilelang fungsi setIpfsHash (hash memori string) publik { require(msg.sender == pemilik, "Hanya pemilik yang dapat mengatur hash IPFS."); // Periksa apakah pengirim adalah pemilik ipfsHash = hash; // Atur hash IPFS ke nilai yang disediakan }}
Kode ini mendefinisikan Lelang
kontrak, yang memungkinkan pengguna untuk menempatkan penawaran pada suatu barang dan mengakhiri lelang setelah periode tertentu. Kontrak juga memiliki fungsi untuk membatalkan lelang dan fungsi untuk mengatur hash IPFS untuk barang yang dilelang.
Langkah 4: Kompilasi kontrak
Klik tab “Solidity Compiler” di menu sebelah kiri. Di bawah “Compile Auction.sol”, klik tombol “Compile”. Kontrak seharusnya berhasil dikompilasi, dan Anda akan melihat tanda centang hijau di sebelah “Auction.sol” dalam penjelajah file.
Langkah 5: Menerapkan kontrak
Klik tab "Deploy & Run Transactions" di menu sebelah kiri. Di bawah "Environment", pilih "Injected Web3" sebagai lingkungan. Di bawah "Kontrak", pilih "Lelang" sebagai kontrak yang akan dideploy. Klik tombol "Deploy".
Langkah 6: Berinteraksi dengan kontrak
Setelah kontrak diterapkan, Anda dapat berinteraksi dengannya menggunakan berbagai fungsi yang didefinisikan dalam kontrak. Misalnya, Anda dapat memanggil placeBid()
fungsi untuk menempatkan penawaran pada barang
Dengan menggunakan Remix dan MetaMask, Anda dapat dengan mudah mendeploy dan berinteraksi dengan smart contracts di jaringan Ethereum, memungkinkan pengembangan dan pengujian aplikasi terdesentralisasi dalam lingkungan yang ramah pengguna.
Sorotan
Kontrak pintar dapat berinteraksi dengan kontrak lain di blockchain Ethereum, memungkinkan pemanggilan fungsi, pembacaan variabel, dan transfer Ether atau token.
Web3j adalah perpustakaan Java ringan yang memfasilitasi interaksi dengan Ethereum. Ini dapat menghasilkan kode pembungkus smart contract secara otomatis untuk implementasi yang mulus dan interaksi dengan kontrak dari JVM.
Acara penting untuk melacak dan memantau aktivitas kontrak di blockchain. Mereka mengeluarkan log yang dapat disimpan dan diambil oleh sistem di luar rantai, memungkinkan pembaruan real-time untuk dApps.
Log, yang merupakan catatan yang dipancarkan oleh acara, memainkan peran penting dalam komunikasi efisien antara kontrak pintar dan sistem di luar rantai. Mereka diindeks, memungkinkan untuk penyaringan dan pencarian yang mudah dari acara atau titik data tertentu.
Contoh yang diberikan menunjukkan proses penerapan kontrak pintar menggunakan Remix IDE dan MetaMask. Ini mencakup langkah-langkah seperti membuat file baru, mendefinisikan kontrak, menyusunnya, menyebarkannya, dan berinteraksi dengan fungsinya.