第2课

Pencatatan dan Barang Perdagangan

Dalam pelajaran ini, kami akan memperluas kontrak Barang untuk menangani pencatatan dan perdagangan barang di pasar kami. Kita akan belajar tentang cara menambah, membuat daftar, dan menghapus barang, serta dasar-dasar jual beli barang. Kami juga akan mempelajari cara menerapkan kontrak kami dan berinteraksi dengannya di Remix IDE.

Membangun Kontrak Pasar

Kami sekarang akan mengubah kontrak Item sederhana menjadi kontrak Marketplace yang lebih kompleks. Kontrak Marketplace akan menyimpan daftar barang yang dijual, menyediakan cara bagi pengguna untuk membuat daftar barang baru untuk dijual, dan menyediakan cara bagi pengguna untuk membeli barang.

Untuk melakukan ini, kami akan menambahkan beberapa fitur baru ke kontrak kami:

  1. Setiap barang kini akan memiliki alamat seller , yang mewakili pemilik barang tersebut.

  2. Kami akan memperkenalkan fungsi baru listItemForSale yang memungkinkan pengguna membuat daftar item baru untuk dijual.

  3. Kami akan memperkenalkan fungsi buyItem baru yang memungkinkan pengguna membeli suatu item.

Berikut tampilan kontrak Marketplace :

Soliditas 
 // Pengenal Lisensi SPDX: soliditas pragma MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Tentukan struktur baru untuk Item 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Array untuk menampung semua item 
 Item[] item publik; 

 // Event yang akan dikeluarkan ketika item baru dibuat 
 event NewItem(uint itemId, string itemName, uint itemPrice, alamat penjual); 

 // Event yang akan dikeluarkan saat item terdaftar untuk dijual 
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller); 

 // Event yang akan dikeluarkan saat item dibeli 
 event ItemBought(uint itemId, string itemName, uint itemPrice, alamat penjual, alamat pembeli); 

 // Berfungsi untuk membuat item baru namun tidak langsung mencantumkannya untuk dijual 
 fungsi createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Berfungsi untuk membuat daftar item untuk dijual 
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Fungsi untuk membeli suatu barang 
 fungsi buyItem(uint _itemId) hutang publik {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Dalam kontrak ini, kami memiliki:

  1. Struktur Item yang sekarang menyertakan alamat seller dan boolean forSale . seller adalah pemilik barang tersebut, dan forSale menunjukkan apakah barang tersebut saat ini terdaftar untuk dijual.

  2. Fungsi createItem yang membuat item baru dan menetapkan msg.sender sebagai penjual. msg.sender adalah variabel global dalam Solidity yang mewakili alamat orang (atau kontrak pintar) yang disebut fungsi saat ini. Namun, barang tersebut tidak langsung terdaftar untuk dijual.

  3. Fungsi listItemForSale yang memungkinkan penjual suatu item mencantumkannya untuk dijual. Kami menggunakan fungsi require untuk memastikan bahwa hanya penjual yang dapat mencantumkan barang yang akan dijual.

  4. Fungsi buyItem yang memungkinkan seseorang membeli suatu item. Fungsinya memeriksa apakah barang tersebut untuk dijual, pembeli bukan penjual, dan harga yang dikirim benar. Jika kondisi ini terpenuhi, fungsi akan mengirimkan uang ke penjual dan menandai barang tersebut sebagai tidak untuk dijual.

Menyebarkan dan Berinteraksi dengan Kontrak Marketplace

Setelah menulis kontrak Marketplace , langkah selanjutnya adalah mengkompilasi dan menerapkannya. Anda dapat menggunakan plugin Solidity Compiler di Remix untuk mengkompilasi kontrak, seperti yang kita lakukan di Pelajaran 1.

Untuk menerapkan kontrak, buka plugin Deploy & Run Transactions (yang memiliki ikon kubus) di panel kanan. Pilih lingkungan yang sesuai (JavaScript VM untuk simulasi), pilih kontrak Marketplace dari dropdown Kontrak, dan klik tombol Deploy.

Setelah kontrak diterapkan, kontrak tersebut akan muncul di bagian Kontrak yang Dikerahkan. Anda dapat memperluasnya untuk melihat variabel dan fungsi status publiknya. Anda dapat membuat, membuat daftar, dan membeli item dengan memanggil fungsi-fungsi ini.

Untuk membuat item, masukkan nama dan harga, lalu klik tombol createItem . Untuk mencantumkan item yang akan dijual, masukkan ID item dan klik tombol listItemForSale . Untuk membeli item, masukkan ID item, kirimkan jumlah Ether yang benar, dan klik tombol buyItem .

Selamat! Anda sekarang tahu cara membuat pasar dasar terdesentralisasi di blockchain Ethereum.

Pada pelajaran berikutnya, kita akan meningkatkan pasar kita dengan menambahkan fungsi untuk menghapus barang dari penjualan dan memperbarui harga suatu barang. Pantau terus!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第2课

Pencatatan dan Barang Perdagangan

Dalam pelajaran ini, kami akan memperluas kontrak Barang untuk menangani pencatatan dan perdagangan barang di pasar kami. Kita akan belajar tentang cara menambah, membuat daftar, dan menghapus barang, serta dasar-dasar jual beli barang. Kami juga akan mempelajari cara menerapkan kontrak kami dan berinteraksi dengannya di Remix IDE.

Membangun Kontrak Pasar

Kami sekarang akan mengubah kontrak Item sederhana menjadi kontrak Marketplace yang lebih kompleks. Kontrak Marketplace akan menyimpan daftar barang yang dijual, menyediakan cara bagi pengguna untuk membuat daftar barang baru untuk dijual, dan menyediakan cara bagi pengguna untuk membeli barang.

Untuk melakukan ini, kami akan menambahkan beberapa fitur baru ke kontrak kami:

  1. Setiap barang kini akan memiliki alamat seller , yang mewakili pemilik barang tersebut.

  2. Kami akan memperkenalkan fungsi baru listItemForSale yang memungkinkan pengguna membuat daftar item baru untuk dijual.

  3. Kami akan memperkenalkan fungsi buyItem baru yang memungkinkan pengguna membeli suatu item.

Berikut tampilan kontrak Marketplace :

Soliditas 
 // Pengenal Lisensi SPDX: soliditas pragma MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Tentukan struktur baru untuk Item 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Array untuk menampung semua item 
 Item[] item publik; 

 // Event yang akan dikeluarkan ketika item baru dibuat 
 event NewItem(uint itemId, string itemName, uint itemPrice, alamat penjual); 

 // Event yang akan dikeluarkan saat item terdaftar untuk dijual 
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller); 

 // Event yang akan dikeluarkan saat item dibeli 
 event ItemBought(uint itemId, string itemName, uint itemPrice, alamat penjual, alamat pembeli); 

 // Berfungsi untuk membuat item baru namun tidak langsung mencantumkannya untuk dijual 
 fungsi createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Berfungsi untuk membuat daftar item untuk dijual 
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Fungsi untuk membeli suatu barang 
 fungsi buyItem(uint _itemId) hutang publik {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Dalam kontrak ini, kami memiliki:

  1. Struktur Item yang sekarang menyertakan alamat seller dan boolean forSale . seller adalah pemilik barang tersebut, dan forSale menunjukkan apakah barang tersebut saat ini terdaftar untuk dijual.

  2. Fungsi createItem yang membuat item baru dan menetapkan msg.sender sebagai penjual. msg.sender adalah variabel global dalam Solidity yang mewakili alamat orang (atau kontrak pintar) yang disebut fungsi saat ini. Namun, barang tersebut tidak langsung terdaftar untuk dijual.

  3. Fungsi listItemForSale yang memungkinkan penjual suatu item mencantumkannya untuk dijual. Kami menggunakan fungsi require untuk memastikan bahwa hanya penjual yang dapat mencantumkan barang yang akan dijual.

  4. Fungsi buyItem yang memungkinkan seseorang membeli suatu item. Fungsinya memeriksa apakah barang tersebut untuk dijual, pembeli bukan penjual, dan harga yang dikirim benar. Jika kondisi ini terpenuhi, fungsi akan mengirimkan uang ke penjual dan menandai barang tersebut sebagai tidak untuk dijual.

Menyebarkan dan Berinteraksi dengan Kontrak Marketplace

Setelah menulis kontrak Marketplace , langkah selanjutnya adalah mengkompilasi dan menerapkannya. Anda dapat menggunakan plugin Solidity Compiler di Remix untuk mengkompilasi kontrak, seperti yang kita lakukan di Pelajaran 1.

Untuk menerapkan kontrak, buka plugin Deploy & Run Transactions (yang memiliki ikon kubus) di panel kanan. Pilih lingkungan yang sesuai (JavaScript VM untuk simulasi), pilih kontrak Marketplace dari dropdown Kontrak, dan klik tombol Deploy.

Setelah kontrak diterapkan, kontrak tersebut akan muncul di bagian Kontrak yang Dikerahkan. Anda dapat memperluasnya untuk melihat variabel dan fungsi status publiknya. Anda dapat membuat, membuat daftar, dan membeli item dengan memanggil fungsi-fungsi ini.

Untuk membuat item, masukkan nama dan harga, lalu klik tombol createItem . Untuk mencantumkan item yang akan dijual, masukkan ID item dan klik tombol listItemForSale . Untuk membeli item, masukkan ID item, kirimkan jumlah Ether yang benar, dan klik tombol buyItem .

Selamat! Anda sekarang tahu cara membuat pasar dasar terdesentralisasi di blockchain Ethereum.

Pada pelajaran berikutnya, kita akan meningkatkan pasar kita dengan menambahkan fungsi untuk menghapus barang dari penjualan dan memperbarui harga suatu barang. Pantau terus!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。