Lanjut ke konten utama

Bagaimana mengimplementasikan pasar ERC-721

kontrak pintarerc-721soliditytoken
Tingkat menengah
Alberto Cuesta Cañada
Hackernoon(opens in a new tab)
19 Maret 2020
5 bacaan singkat minute read

Dalam artikel ini, saya akan menunjukkan Anda cara mengodekan Craiglist untuk blockchain Ethereum.

Sebelum Gumtree, Ebay, dan Craiglist ada, kebanyakan papan iklan baris terbuat dari gabus atau kertas. Papan iklan baris ada di koridor sekolah, koran, lampu jalan, dan bagian muka toko.

Semuanya berubah dengan internet. Jumlah orang yang bisa melihat papan iklan baris tertentu bertambah banyak berkali-kali lipat. Dengan begitu, pasar yang diwakilinya menjadi lebih efisien dan berskala global. Ebay adalah perusahaan yang sangat besar yang asal usulnya dapat dilacak dari papan iklan baris fisik ini.

Dengan blockchain, pasar-pasar ini akan berubah sekali lagi, berikut caranya.

Monetisasi

Model bisnis papan iklan baris blockchain publik akan berbeda dari jenis Ebay dan perusahaan lainnya.

Pertama, ada sudut desentralisasi. Platform yang telah ada harus mempertahankan server mereka sendiri. Platform terdesentralisasi dikelola oleh penggunanya, sehingga pemilik platform tidak perlu mengeluarkan biaya pengoperasian platform inti sepeserpun.

Lalu ada front end, situs web, atau antarmuka yang memberi akses ke platform. Di sini ada banyak pilihan. Para pemilik platform bisa membatasi akses dan memaksa setiap orang menggunakan antarmuka mereka, dengan memungut biaya. Pemilik platform juga bisa memutuskan untuk membuka akses (Kekuatan bagi Orang-Orang!) dan membiarkan siapa pun membangun antarmuka pada platform tersebut. Atau pemilik bisa memutuskan pendekatan apa pun di tengah-tengah esktrem ini.

Pemimpin perusahaan dengan visi yang lebih banyak dari saya akan tahu bagaimana memonetisasi ini. Menurut saya, ini berbeda dari status quo dan mungkin menguntungkan.

Lagipula, ada aspek otomatisasi dan pembayaran. Beberapa hal bisa sangat tertokenisasi(opens in a new tab) dan diperdagangkan secara efektif dalam papan iklan baris. Aset yang ditokenisasi mudah dipindahkan dalam blockchain. Metode pembayaran sangat kompleks juga bisa dengan mudah diimplementasikan dalam blockchain.

Saya baru saja mencium kesempatan bisnis di sini. Papan iklan baris yang tanpa biaya pengoperasian bisa dengan mudah diimplementasikan, dengan jalur pembayaran kompleks yang dimasukkan dalam tiap transaksi. Saya yakin seseorang akan menemukan ide tentang bagaimana menggunakan ini.

Saya hanya senang membangunnya. Mari kita lihat kodenya.

Implementasi

Beberapa waktu lalu kami memulai sebuah repository sumber terbuka(opens in a new tab) dengan implementasi percontohan dalam kasus bisnis dan hal lainnya, silakan dilihat.

Kode untuk Papan Iklan Baris Ethereum(opens in a new tab) ini ada di sana, silakan pakai dan manfaatkan sesuka Anda. Hanya perhatikan bahwa kode belum diaudit dan Anda perlu melakukan uji kelayakan sebelum membiarkan uang masuk ke dalamnya.

Dasar-dasar papan ini tidaklah rumit. Semua iklan dalam papan ini hanya akan berbentuk struktur dengan beberapa bidang:

1struct Trade {
2 address poster;
3 uint256 item;
4 uint256 price;
5 bytes32 status; // Open, Executed, Cancelled
6}
Salin

Jadi ada seseorang yang membuat postingan iklan. Item untuk dijual. Harga untuk itemnya. Status perdagangan yang bisa dibuka, dieksekusi, atau dibatalkan.

Semua perdagangan ini akan disimpan dalam satu pemetaan. Karena semua hal dalam Solidity tampak seperti sebuah pemetaan. Juga karena itu praktis.

1mapping(uint256 => Trade) public trades;
Salin

Menggunakan pemetaan juga berarti kita harus menemukan id untuk setiap iklan sebelum membuat postingannya, dan kita juga harus mengetahui id sebuah iklan sebelum bisa mengoperasikannya. Ada beberapa cara menangani ini baik dalam kontrak pintar atau dalam front-end. Silakan bertanya jika Anda memerlukan beberapa petunjuk.

Selanjutnya hadir pertanyaan item seperti apa yang kita tangani, dan mata uang apa yang digunakan untuk pembayaran transaksi.

Untuk itemnya, kita hanya akan meminta mereka mengimplementasikan antarmuka ERC-721(opens in a new tab), yang sebenarnya hanyalah cara mewakili item dunia nyata dalam blockchain, meskipun ini paling cocok digunakan untuk aset digital(opens in a new tab). Kita akan menentukan kontrak ERC721 kita dalam pembangun, yang berarti aset apa pun dalam papan iklan baris harus ditokenisasi sebelumnya.

Untuk pembayaran, kita akan melakukan hal yang serupa. Kebanyakan proyek blockchain menentukan mata uang kripto ERC-20(opens in a new tab) mereka sendiri. Beberapa lainnya lebih suka menggunakan jenis arus utama seperti DAI. Dalam papan iklan baris ini, Anda hanya perlu memutuskan dalam pembangunan, mata uang apa yang Anda pakai. Mudah.

1constructor (
2 address _currencyTokenAddress, address _itemTokenAddress
3) public {
4 currencyToken = IERC20(_currencyTokenAddress);
5 itemToken = IERC721(_itemTokenAddress);
6 tradeCounter = 0;
7}
Salin

Kita hampir selesai. Kita sudah mendapatkan iklan, item untuk diperdagangkan, dan mata uang untuk pembayaran. Membuat iklan berarti memasukkan satu item dalam escrow untuk menunjukkan Anda pemilik item tersebut dan Anda belum mempostingnya dua kali, mungkin di papan yang berbeda.

Kode di bawah ini persis melakukan itu. Memasukkan itemnya dalam escrow, membuat iklan, melakukan beberapa pembenahan.

1function openTrade(uint256 _item, uint256 _price)
2 public
3{
4 itemToken.transferFrom(msg.sender, address(this), _item);
5 trades[tradeCounter] = Trade({
6 poster: msg.sender,
7 item: _item,
8 price: _price,
9 status: "Open"
10 });
11 tradeCounter += 1;
12 emit TradeStatusChange(tradeCounter - 1, "Open");
13}
Tampilkan semua
Salin

Untuk menerima perdagangan berarti memilih satu iklan (perdagangan), membayar harganya, menerima itemnya. Kode di bawah ini mengambil satu perdagangan. Memeriksa ketersediaanya. Membayar itemnya. Mengambil itemnya. Memperbarui iklannya.

1function executeTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(trade.status == "Terbuka", "Perdagangan tidak Terbuka.");
6 currencyToken.transferFrom(msg.sender, trade.poster, trade.price);
7 itemToken.transferFrom(address(this), msg.sender, trade.item);
8 trades[_trade].status = "Tereksekusi";
9 emit TradeStatusChange(_trade, "Tereksekusi");
10}
Tampilkan semua
Salin

Akhirnya, kita memiliki satu opsi bagi penjual untuk membatalkan perdagangan sebelum seorang pembeli menerimanya. Dalam beberapa model, iklan - sebagai gantinya iklan-iklan ini akan ditayangkan selama beberapa saat sebelum kedaluwarsa. Pilihan Anda, tergantung pada desain pasar Anda.

Kode di bawah sangat mirip dengan yang digunakan untuk mengeksekusi perdagangan, hanya bedanya tidak ada mata uang yang berpindah tangan dan item kembali ke poster iklan.

1function cancelTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(
6 msg.sender == trade.poster,
7 "Perdagangan hanya dapat dibatalkan oleh pemilik postingan."
8 );
9 require(trade.status == "Terbuka", "Perdagangan tidak Terbuka.");
10 itemToken.transferFrom(address(this), trade.poster, trade.item);
11 trades[_trade].status = "Dibatalkan";
12 emit TradeStatusChange(_trade, "Dibatalkan");
13}
Tampilkan semua
Salin

Selesai. Anda sampai pada bagian akhir implementasi. Cukup mengejutkan melihat betapa ringkasnya beberapa konsep bisnis saat diekspresikan dalam kode, dan ini adalah salah kasus itu. Simak kontrak lengkapnya di repo kami(opens in a new tab).

Kesimpulan

Papan iklan baris adalah konfigurasi pasar umum yang berskala besar dengan internet, menjadi model bisnis yang sangat populer dengan beberapa pemenang monopoli.

Papan iklan baris juga merupakan peralatan yang mudah direplikasi dalam lingkungan blockchain, dengan fitur sangat spesifik yang akan membuat tantangan terhadap perusahaan raksasa yang telah ada menjadi mungkin.

Dalam artikel ini, saya mencoba menghubungkan kenyataan bisnis dari papan iklan baris dengan implementasi teknologikal. Pengetahuan ini akan membantu Anda membuat visi dan roadmap untuk implementasi jika Anda memiliki kemampuan yang tepat.

Seperti biasanya, jika Anda ingin membuat apa pun yang menyenangkan dan mau menerima beberapa saran, silakan hubungi saya(opens in a new tab)! Saya selalu senang bisa membantu.

Terakhir diedit: @nhsz(opens in a new tab), 15 Agustus 2023

Apakah tutorial ini membantu?