Kontrak Cerdas Gelombang. Pengalaman pertama

gambar

Pada bulan April 2018, tim Waves mempresentasikan kontrak pintar yang tidak lengkap.

Beberapa saat kemudian, ketika Waves hackathon diumumkan, saya memutuskan bahwa sudah waktunya untuk melibatkan diri dalam teknologi baru. Di bawah potongan Anda akan menemukan informasi terperinci tentang kontrak pintar yang memenangkan tempat ketiga di hackathon.

Artikel ini akan berguna bagi pengembang untuk menerapkan kontrak pintar mereka sendiri dan berkenalan dengan teknologi.

Ide


Gagasan proyek ini adalah untuk secara otomatis mendistribusikan gaji pengembang perangkat lunak menggunakan Github, sebanding dengan pekerjaan yang dilakukan. Tugas utama, tugas yang diselesaikan oleh kontrak pintar pada saat yang sama, menghilangkan kebutuhan untuk mempercayai program distribusi uang, dan bahkan memungkinkan pengguna tanpa keterampilan pemrograman untuk memverifikasi distribusi dana yang benar sebelum mentransfer uang.

Tumpukan teknologi


Html dan JavaScript ( perpustakaan Node.js Waves), sumber terbuka di GitHub dan demonstrasi proyek di Firebase Hosting

Prosesnya


  1. Pengguna memilih repositori GitHub dan menentukan jumlah total gaji
  2. Pengguna melakukan pembayaran 0,01 Waves (sekitar 0,02 dolar) untuk menyimpan data di blockchain dan membuat kontrak pintar
  3. Pengguna memeriksa kebenaran data dan kemudian mentransfer jumlah gaji ke alamat kontrak pintar
  4. Gaji dibagi antara pengembang

Pengembangan


Titik masuk terbaik untuk pengembang pemula adalah konsol demo , yang berisi contoh yang baik dan konsol untuk kode pengujian. Selama pengembangan, lebih baik menggunakan blockchain tes , di mana Anda bisa mendapatkan 10 gelombang uji gratis dengan satu klik . Meskipun Google masih tidak menemukan banyak contoh karena kebaruan teknologi, kontrak pintar didokumentasikan dengan baik dan berisi semua informasi yang diperlukan.

Perpustakaan NodeJs (1.4.0) sudah berfungsi dengan baik di browser (dengan pengecualian membuat Alias), tetapi, sayangnya, BUKAN kompatibel dengan Fungsi Google atau React Native yet (Pengembang gelombang berjanji untuk segera memperbaikinya).

Kontrak pintar


Kontrak pintar dibuat untuk satu akun dan memeriksa setiap tindakan dengan akun ini (dengan pengecualian transfer uang yang masuk):

let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false } 

Penguraian baris demi baris yang cerdas


 let signature = base58'${currentWallet.keyPair.publicKey}'; 

Di sini kami menyimpan kunci publik dompet (JavaScript Anda harus berisi variabelWallet saat ini dibuat menggunakan perintah Waves.Seed.create ()), sehingga hanya akun kontrak pintar dompet (Proyek Rewarding Pintar dalam kasus kami) yang dapat mentransfer dana.

 match tx { case tx:TransferTransaction => {some validations} case _ => false } 

Ini adalah konstruksi dasar dari setiap kontrak pintar Waves. Ini memberi tahu kami bahwa kontrak ini melarang aktivitas apa pun selain mentransfer dana (TransferTransaction). Dengan demikian, setelah membuat kontrak, tidak mungkin untuk mengubah data pada pengembang (DataTransaction) atau mengubah kontrak pintar itu sendiri (SetScript).

 let employerAddress = addressFromPublicKey(tx.senderPk); 

Ia menggunakan metode dasar addressFromPublicKey dari perpustakaan bawaan untuk mendapatkan alamat pembuat permintaan dari kunci publiknya.

 let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); 

Metode dasar addressFromRecipient mendapatkan alamat penerima dana

 let salary = extract(getLong(employerAddress, dateKey)); 

Metode getLong dasar memberi kami data yang disimpan di blockchain di alamat pembuat permintaan, yang merupakan jumlah gaji pengembang. Kontrak dapat mengakses data yang disimpan di blockchain Waves (dan TIDAK dapat mengakses data yang terletak di situs web atau server pihak ketiga).

 if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false 

Di sinilah verifikasi jumlah dan tanda tangan yang benar. Benar berarti transaksi akan diizinkan, dan salah berarti transaksi ditolak. Dengan demikian, selama transfer uang dari akun ini, diverifikasi bahwa uang itu akan dikirim hanya ke dompet pengembang dan dalam jumlah yang sudah disimpan dalam rantai blok, dalam format pasangan kunci yang mudah dibaca (alamat sebagai kunci dan jumlah sebagai nilai), yang memungkinkan percaya pada program, periksa semua data sendiri selama 5-10 detik sebelum mentransfer gaji.

Demonstrasi online dari proyek pada blockchain tes, tersedia di sini
Di sini Anda dapat melihat kode proyek.

Saya harap artikel ini informatif dan bermanfaat bagi Anda untuk menulis kontrak cerdas pertama Anda.

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


All Articles