Naik Gelombang Web 3.0

Pengembang Christophe Verdot berbicara tentang kursus online ' Mastering Web 3.0 with Waves ', yang baru saja ia lewati.



Ceritakan sedikit tentang diri Anda. Apa yang membuat Anda tertarik dengan kursus ini?

Saya telah terlibat dalam pengembangan web selama sekitar 15 tahun, terutama sebagai freelancer.

Mengembangkan aplikasi web register jangka panjang untuk negara-negara berkembang yang ditugaskan oleh satu kelompok perbankan, saya dihadapkan dengan tugas mengintegrasikan sertifikasi blockchain ke dalamnya. Pada waktu itu, saya tidak tahu banyak tentang sertifikasi blockchain, meskipun saya sudah tertarik dengan teknologi crypto - terutama sebagai investor.

Akibatnya, fungsi ini tidak diimplementasikan, tetapi, berpikir bahwa organisasi dan bank tertarik pada solusi seperti itu untuk aplikasi mereka, saya mulai mempelajari masalah ini dan segera meluncurkan proyek Signature Chain .

Saya mengembangkan versi beta-nya, yang sudah tersedia di jaringan utama. Tidak ada [Bahasa pemrograman gelombang] yang pada saat itu naik, dan saya melakukan semuanya dengan cara paling sederhana menggunakan transaksi terjemahan dengan JSON yang tertanam. Tetapi tujuan utamanya adalah untuk menambahkan fungsionalitas yang lebih maju setelah peluncuran Ride. Dan ini adalah alasan utama saya bergabung dengan kursus: tahap selanjutnya dalam pengembangan proyek melibatkan pembuatan aplikasi desentralisasi (dApp).

Aspek kursus mana yang tampak paling sederhana bagi Anda dan mana yang paling sulit?

Yang paling sederhana adalah kami punya cukup waktu untuk semua tugas. Arti kursus adalah belajar sesuatu, dan tidak bersaing satu sama lain. Penjelasannya sangat mudah diakses, dan ilustrasinya sederhana namun komprehensif. Ini membantu memvisualisasikan dan memahami berbagai topik.

Ketika menyelesaikan tugas, kami didorong untuk berpikir secara mandiri dan kadang-kadang untuk mempelajari sesuatu sendiri. Ini adalah cara terbaik untuk mempelajari sesuatu dan memahami ide-ide yang dibahas di kelas.

Beberapa kali saya tidak sepenuhnya memahami bagian teoretis sampai saya mulai menulis kode sambil menyelesaikan tugas. Kami tidak diizinkan untuk melakukan 'copy / paste', semua kode harus ditulis sendiri, dan ini juga membantu untuk lebih memahami segalanya.

Bagian yang paling sulit adalah bahwa pertanyaan dalam penugasan dengan beberapa jawaban tidak selalu jelas. Bahasa Inggris saya tidak sempurna, dan pertanyaannya ditulis oleh orang yang bukan penutur asli, jadi terkadang ada kesalahpahaman.

Mungkin bagian oracle dan NFT dari kursus bisa lebih detail. Tetapi, bagaimanapun juga, tujuan utama kursus adalah untuk menarik minat pengembang. Kemudian, untuk memahami sepenuhnya semua aspeknya, tentu saja perlu meluangkan waktu untuk bereksperimen dan berlatih.

Ceritakan lebih lanjut tentang solusi yang Anda kerjakan selama kursus - 'Kupon Bazaar'? Bisakah saya melihat contoh kode?

Ya, kami mengerjakan 'Kupon Bazaar', ini adalah pasar tempat orang menjual dan membeli kupon memberi mereka hak untuk membeli barang dan jasa dengan harga lebih rendah. Setiap kupon diwakili oleh aset digital, yang menawarkan diskon khusus dari pemasok.



Itu perlu untuk mengembangkan beberapa komponen aplikasi. Pertama, penting untuk membuat sistem untuk mendaftarkan pemasok dan mengelola kupon. Kemudian kami membutuhkan fungsi verifikasi dan kemampuan untuk mencari kupon oleh pengguna.



Selama kursus, kami juga menambahkan beberapa fitur baru, termasuk sistem pemungutan suara dan fitur yang memungkinkan kami memverifikasi dan memasukkan daftar hitam pemasok.

Pertama, kami memeriksa perbedaan antara aset pintar, akun pintar, dan akun dApp dan dasar-dasar bekerja dengan fungsi verifier. Fitur verifikasi memungkinkan Anda untuk mengubah perilaku akun default. Secara default, mereka memverifikasi tanda tangan transaksi, tetapi fungsi verifikasi memungkinkan Anda untuk mengatur "aturan" lainnya.

{-# STDLIB_VERSION 3 #-} {-# CONTENT_TYPE DAPP #-} {-# SCRIPT_TYPE ACCOUNT #-} letownerPublicKey = base58'H8ndsHjBha6oJBQQx33zqbP5wi8sQP7hwgjzWUv3q95M' @Verifier(tx) funcverify() = { matchtx { cases: SetScriptTransaction=>sigVerify(tx.bodyBytes, tx.proofs[0], ownerPublicKey) cased: DataTransaction=>true case_ =>false } } 

Lalu kami mulai menambahkan kupon. Kami menggunakan salah satu fungsi paling penting dari dApp, yang memungkinkan kami untuk menulis data apa pun ke blockchain dalam bentuk pasangan nilai-kunci - suatu transaksi data. Kami menggabungkannya dengan transaksi baru, invokeScript, yang digunakan untuk memanggil fungsi yang disebut di dApp dari luar blockchain.

Jenis transaksi data yang kami gunakan selama kursus adalah menambahkan kupon ke pasar:

 letdatajson = { "title": "t-shirt with , vote 1", "coupon_price": 10000000, "old_price": 1000000000, "new_price": 100000000, "address": "Universe", "description": "I want you to make love, not war, i know you've heard it before", "image": "https://bit.ly/2EXTghg" } it('add item', asyncfunction(){ letts = invokeScript({ dApp: dappAddress, call:{ function:"addItem", args:[ { type:"string", value: datajson.title }, { type:"integer", value: datajson.coupon_price }, { type:"string", value: JSON.stringify(datajson) } ]}, payment: [] }, accountSupplierSeed) lettx = awaitbroadcast(ts) awaitwaitForTx(tx.id) }) 

Untuk memproses data ini dengan fungsi addItem dan untuk mengembangkan fungsi pembelian dan opsi lain, kami menggunakan fungsi yang disebut pengguna dapat menelepon dari luar blockchain. Akibatnya, dapat melakukan berbagai tugas, misalnya, melakukan transfer dana, menulis atau memperbarui data di gudang data dApp, dll.

Berikut adalah contoh fungsi yang dipanggil yang digunakan dalam fungsi addItem:

 @Callable(i) funcaddItem(title: String, price: Int, data: String) = { letsupplierAddress = toBase58String(i.caller.bytes) letitem = getKeyItem(supplierAddress, title) if( price <= 0) thenthrow("purchase amount cannot be less than item price") elseif( getValueItemSupplier(item) !=NONE ) thenthrow("an item is already exist") else{ WriteSet([ DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data) ]) } } 

Kemudian, kami mengembangkan sistem pemungutan suara yang memungkinkan kami memberikan suara untuk promosi atau penghapusan produk tertentu. Untuk mencegah pengaruh eksternal pada proses pemungutan suara, dia menggunakan skema 'Komit-Mengungkapkan'.

Fase komit digunakan untuk mengumpulkan suara terenkripsi menggunakan fungsi hash dan garam.

Fase "mengungkapkan" digunakan untuk mengumpulkan suara terenkripsi dan membandingkan hash mereka.

Berikut adalah contoh fungsi yang disebut digunakan di sini:

 @Callable(i) funcvoteCommit(item: String, hash: String) = { letuser = toBase58String(i.caller.bytes) letcommits = getValueCommitsCount(item) letstatus = getValueItemStatus(item) if( commits >=VOTERS) thenthrow("reached max num of voters") elseif(getValueCommit(item, user) !=NONE) thenthrow("user has already participated") elseif(getKeyItemSupplier(item) ==NONE) thenthrow("item does not exist") elseif(status !=NONE && status !=VOTING) thenthrow("voting is not possible") else{ WriteSet([ DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitsCount(item), commits +1), DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING) ]) } } > 

Apa lagi yang Anda pelajari dari kursus?

Kursus ini juga termasuk tokenization dan non-fungible token (NFT) - token yang mewakili sesuatu yang unik dan karenanya tidak dapat dipertukarkan.

Pelajaran terakhir adalah tentang nubuat. Karena blockchain tidak dapat menerima data dari dunia luar, kami memerlukan oracle untuk mengirim data ini ke sana.

Untuk pasar kami, diperlukan oracle untuk memverifikasi dan, jika perlu, daftar hitam pemasok yang, misalnya, tidak menerima kupon yang dijual.

Berikut ini sebuah contoh:

 funcgetExtValueItemWhiteListStatus(item:String) = { item +"_verifier_status" } letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv" letVERIFIED = "verified" letBLACKLISTED = "blacklist" @Callable(i) funcsetstatus(supplier: String, status: String) = { letaccount = toBase58String(i.caller.bytes) if( account !=verifier ) thenthrow("only oracle verifier are able to manage whitelist") elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("wrong status") else{ WriteSet([ DataEntry(getExtValueItemWhiteListStatus(supplier), status) ]) } } 

Apa yang paling berguna bagimu?

Bagian yang paling berguna adalah tugas. Berkat mereka, materi kuliah menjadi lebih jelas, dan pengetahuan yang baru saja diperoleh dikonsolidasikan dengan coba-coba. Pekerjaan praktis dengan IDE , explorer dan oracle sangat berguna.

Bagaimana Anda berencana untuk menggunakan apa yang telah Anda pelajari dalam praktik?

Sejak awal, saya berharap kursus membantu membawa proyek saya ke tingkat yang baru. Idenya adalah untuk menulis kode sign-web.app di RIDE sekarang. Versi yang ada sudah memiliki fungsi sertifikasi dokumen, tetapi berkat RIDE, ini dapat ditingkatkan secara signifikan. Versi baru akan lebih fleksibel dan mudah dipahami, akan memiliki lebih banyak fungsi, termasuk sertifikasi email, perjanjian antara beberapa pihak, dll.

Kursus ini juga menyediakan makanan untuk dipikirkan, dan saya punya banyak ide baru. Saya yakin hasilnya akan terwujud di masa depan.

Source: https://habr.com/ru/post/id462831/


All Articles