Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Sabanjure, kita bakal tliti kanthi rinci ciri-ciri utama basa Pindhah lan apa bedane utama karo basa liyane sing wis populer kanggo kontrak cerdas - Solidity (ing platform Ethereum). Materi kasebut adhedhasar panelitian whitepaper 26 kaca online sing kasedhiya.

Pambuka

Move minangka basa bytecode eksekusi sing digunakake kanggo nglakokake transaksi pangguna lan kontrak cerdas. Wigati dicathet rong titik:

  1. Nalika Mov minangka basa bytecode sing bisa langsung dileksanakake ing mesin virtual Move, Solidity (basa kontrak cerdas Ethereum) minangka basa tingkat luwih dhuwur sing pisanan dikompilasi karo bytecode sadurunge dieksekusi ing EVM (Ethereum Virtual Machine).
  2. Pindhah bisa digunakake ora mung kanggo ngetrapake kontrak cerdas, nanging uga kanggo transaksi kustom (luwih saka mengko), dene Solidity minangka basa khusus kontrak cerdas.


Terjemahan ditindakake dening tim proyek INDEX Protocol. Kita wis nerjemahake materi gedhe njlentrehke project Libra, saiki wektune kanggo ndeleng basa Pindhah kanthi luwih rinci. Terjemahan kasebut ditindakake bebarengan karo Habrauser coolsiu

Fitur utama Move yaiku kemampuan kanggo nemtokake jinis sumber daya khusus kanthi semantik adhedhasar logika linear: sumber daya ora bisa disalin utawa dibusak sacara implisit, mung dipindhah. Fungsional, iki padha karo kemampuan basa Rust. Nilai ing Rust mung bisa diutus kanggo siji jeneng ing wektu. Nemtokake nilai menyang jeneng sing beda ndadekake ora kasedhiya ing jeneng sadurunge.

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Contone, cuplikan kode ing ngisor iki bakal nyebabake kesalahan: Panganggone nilai pamindhahan 'x'. Iki amarga ora ana koleksi sampah ing Rust. Nalika variabel metu saka ruang lingkup, memori sing dirujuk uga dibebasake. Cukup, mung bisa ana siji "pemilik" data kasebut. Ing conto iki x minangka pemilik asli banjur y dadi pemilik anyar. Waca liyane babagan prilaku iki ing kene.

Perwakilan aset digital ing sistem terbuka

Ana rong sifat aset fisik sing angel diwakili kanthi digital:

  • Kasar (Kekirangan, asline kekurangan). Jumlah aset (emisi) ing sistem kudu dikontrol. Duplikasi aset sing ana saiki kudu dilarang, lan nggawe sing anyar minangka operasi sing istimewa.
  • Kontrol akses... Peserta sistem kudu bisa nglindhungi aset kanthi nggunakake kabijakan kontrol akses.

Kaloro ciri kasebut, sing alami kanggo aset fisik, kudu diterapake kanggo obyek digital yen pengin dianggep minangka aset. Contone, logam langka - duwe kelangkaan alami, lan mung sampeyan sing bisa ngakses (umpamane nyandhet ing tangan) lan sampeyan bisa adol utawa mbuwang.

Kanggo nggambarake kepiye carane tekan rong properti kasebut, ayo miwiti karo ukara ing ngisor iki:

Saran # 1: Aturan sing Paling Sederhana Tanpa Kalah lan Kontrol Akses

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

  • G [K]: = n nuduhake nganyari nomer sing bisa diakses kunci К ing negara global blokade, kanthi makna anyar n.
  • transaksi ⟨Alice, 100⟩ tegese nyetel saldo akun Alice dadi 100.

Solusi ing ndhuwur duwe sawetara masalah utama:

  • Alice bisa nampa dhuwit recehan tanpa wates kanthi mung ngirim transaksi ⟨Alice, 100⟩.
  • Koin sing dikirim Alice menyang Bob ora ana gunane, amarga Bob bisa ngirim dhuwit recehan tanpa wates kanthi teknik sing padha.

Saran # 2: Ngelingi defisit

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Saiki kita ngawasi kahanan supaya jumlah koin Ka paling ora padha n sadurunge transaksi transfer. Nanging, nalika iki ngatasi masalah kekurangan, ora ana informasi babagan sapa sing bisa ngirim koin Alice (saiki, sapa wae sing bisa nindakake iki, sing utama yaiku ora nglanggar aturan matesi jumlah kasebut).

Proposal # 3: Nggabungke kelangkaan lan kontrol akses

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Kita ngatasi masalah iki kanthi mekanisme tandha tangan digital verifikasi_sig sadurunge mriksa saldo, tegese Alice nggunakake kunci pribadi kanggo mlebu transaksi lan negesake manawa dheweke duwit receh.

Bahasa pemrograman Blockchain

Basa blok sing ana saiki nemoni masalah ing ngisor iki (kabeh mau ditanggulangi ing Pindhah (cathetan: sayangΓ©, panganggit artikel kasebut mung narik kawigaten Ethereum nalika mbandhingake, mula mung kudu dianut ing konteks kasebut. Contone, umume sing uga dirampungake ing EOS.)):

Perwakilan aset ora langsung. Aset dienkode nggunakake integer, nanging integer ora padha karo aset. Nyatane, ora ana jinis utawa nilai sing makili Bitcoin/Ether/<Sembarang Koin>! Iki nggawe program nulis sing nggunakake aset angel lan rawan kesalahan. Pola kayata ngirim aset menyang/saka prosedur utawa nyimpen aset ing struktur mbutuhake dhukungan khusus saka basa kasebut.

Defisit ora bisa ditambahi... Basa nuduhake mung siji aset langka. Kajaba iku, obat-obatan sing nglawan kekirangan dipasang kanthi langsung menyang basa semantik saka basa kasebut. Pengembang, yen pengin nggawe aset khusus, kudu ngontrol kabeh aspek sumber daya kanthi tliti. Iki pancen dadi masalah saka kontrak cerdas Ethereum.

Pangguna ngetokake aset, token ERC-20, nggunakake ongko kanggo nemtokake nilai lan total pasokan. Kapan token anyar digawe, kode kontrak cerdas kudu independen verifikasi kepatuhan karo aturan emisi. Kajaba iku, presentasi aset kanthi ora langsung nyebabake, ing sawetara kasus, ana kesalahan serius - duplikasi, mbuwang kaping pindho utawa malah kelangan total aset.

Kurang kontrol akses sing fleksibel... Siji-sijine kebijakan kontrol akses sing digunakake saiki yaiku skema teken nggunakake kriptografi asimetris. Kaya proteksi kelangkaan, kabijakan kontrol akses ditempelake ing basa semantik. Nanging carane nggedhekake basa supaya para programer bisa nemtokake kabijakan kontrol akses dhewe asring dadi tugas sing angel banget.

Iki uga bener ing Ethereum, ing ngendi kontrak pinter ora duwe dhukungan kriptografi asli kanggo kontrol akses. Pangembang kudu nyetel kontrol akses kanthi manual, contone, nggunakake modifier mung Owner.

Sanajan aku seneng banget karo Ethereum, aku percaya yen properti aset kudu didhukung asli dening basa kasebut kanggo tujuan keamanan. Utamane, nransfer Ether menyang kontrak cerdas kalebu pengiriman dinamis, sing wis ngenalake kelas bug anyar sing dikenal minangka kerentanan mlebu maneh. Dynamic dispatch ing kene tegese logika eksekusi kode bakal ditemtokake nalika runtime (dinamis) tinimbang ing wektu kompilasi (statis).

Dadi, ing Solidity, nalika kontrak A nelpon fungsi ing kontrak B, kontrak B bisa mbukak kode sing ora dimaksudake dening pangembang kontrak A, sing bisa nyebabake kerentanan mlebu maneh (kontrak A ora sengaja tumindak minangka kontrak B kanggo mbatalake dhuwit sadurunge saldo akun bener-bener dikurangi).

Pindhah Dasar Desain Basa

Sumber dhisik dhisik

Ing level dhuwur, interaksi antarane modul / sumber / prosedur ing basa Pindhah meh padha karo hubungane antarane kelas / obyek lan metode ing basa OOP.
Modul pamindhahan padha karo kontrak cerdas ing blok liyane. Modul kasebut ngumumake jinis sumber lan prosedur sing netepake aturan kanggo nggawe, ngrusak, lan nganyari sumber daya sing diumumake. Nanging kabeh mau mung konvensi ("jargon”) Ing Gerakan. Kita bakal nggambarake titik iki mengko mengko.

Keluwesan

Pindhah nambah keluwesan kanggo Libra liwat skrip. Saben transaksi ing Libra kalebu skrip, sing sejatine minangka prosedur inti transaksi kasebut. Skrip bisa nindakake salah siji saka tumindak tartamtu, contone, pembayaran menyang dhaftar tartamtu saka panampa, utawa nggunakake maneh sumber daya liyane - contone, nelpon prosedur kang logika umum kasebut. Mulane skrip transaksi Move nawakake keluwesan sing luwih gedhe. Skrip bisa nggunakake prilaku siji-wektu lan bola-bali, dene Ethereum mung bisa nglakokake skrip sing bisa diulang (nelpon siji metode kanthi metode kontrak cerdas). Alesan kasebut diarani "bisa digunakake maneh" amarga fungsi kontrak cerdas bisa dileksanakake kaping pirang-pirang. (cathetan: Titik ing kene subtle banget. Ing tangan siji, skrip transaksi ing wangun pseudo-bytecode uga ana ing Bitcoin. Ing sisih liya, kaya sing dakngerteni, Move ngembangake basa iki, nyatane, nganti tingkat basa kontrak cerdas sing lengkap.).

Keamanan

Format eksekusi Move yaiku bytecode, yaiku, ing tangan siji, basa tingkat sing luwih dhuwur tinimbang basa assembly, nanging tingkat sing luwih murah tinimbang kode sumber. Bytecode dicenthang ing run-time (on-chain) kanggo sumber daya, jinis lan safety memori nggunakake verifier bytecode, banjur dieksekusi dening juru. Pendekatan iki ngidini Pindhah kanggo nyedhiyani keamanan kode sumber, nanging tanpa proses kompilasi lan perlu kanggo nambah compiler kanggo sistem. Nggawe Pindhah basa bytecode minangka solusi sing apik banget. Ora perlu dikompilasi saka sumber, kaya kasus Solidity, lan ora perlu kuwatir babagan kemungkinan gagal utawa serangan ing infrastruktur compiler.

Verifikasi

Kita ngarahake mriksa kanthi gampang, amarga kabeh iki ditindakake kanthi rantai (cathetan: online, sajrone nglakokake saben transaksi, dadi keterlambatan nyebabake kelambatan jaringan), Nanging, wiwitane desain basa wis siyap nggunakake alat verifikasi statis sing ora ana rantai. Sanajan iki luwih disenengi, kanggo saiki pangembangan alat verifikasi (minangka toolkit kapisah) wis ditundha kanggo mangsa ngarep, lan saiki mung verifikasi dinamis ing run-time (on-chain) sing didhukung.

Modularitas

Modul pamindhahan nyedhiyakake abstraksi data lan lokalisasi operasi kritis tumrap sumber daya. Enkapsulasi sing diwenehake dening modul, digabungake karo proteksi sing diwenehake dening sistem tipe Pindhah, njamin manawa properti sing disetel ing jinis modul ora bisa dilanggar kode ing njaba modul. Iki minangka desain abstraksi sing cukup dipikirake, tegese data ing njero kontrak mung bisa diganti ing framework kontrak, nanging ora ing njaba.

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Ringkesan pamindhahan

Conto skrip transaksi nuduhake manawa tumindak jahat utawa ceroboh dening programer ing njaba modul ora bisa kompromi keamanan sumber daya modul. Sabanjure, kita bakal ndeleng conto carane modul, sumber daya, lan prosedur digunakake kanggo program blokir Libra.

Pembayaran Peer-to-Peer

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Jumlah dhuwit recehan sing ditemtokake ing jumlah bakal ditransfer saka imbangan pangirim menyang panampa.
Ana sawetara perkara anyar ing kene (disorot nganggo abang):

  • 0x0: alamat akun sing disimpen modul
  • Currency: jeneng modul
  • Coin: jinis sumber
  • Nilai koin sing bali kanthi prosedur kasebut yaiku nilai sumber saka tipe 0x0. Currency.Coin
  • ngalih (): regane ora bisa digunakake maneh
  • nyalin (): regane bisa digunakake mengko

Ngurai kode: ing langkah pertama, pangirim telpon prosedur sing dijenengi withdraw_from_sender saka modul sing disimpen ing 0x0. Saiki. Ing langkah kapindho, pangirim nransfer dana menyang panampa kanthi mindhah nilai sumber koin menyang prosedur simpenan modul 0x0. Saiki.

Ing ngisor iki ana telung conto kesalahan ing kode sing bakal ditolak kanthi mriksa:
Gandakan dana kanthi ngganti telpon pamindhahan (koin) ing nyalin (koin). Sumber daya mung bisa dipindhah. Nyoba duplikat jumlah sumber daya (contone, kanthi nelpon nyalin (koin) ing conto ing ndhuwur) bakal nyebabake kesalahan nalika mriksa bytecode.

Nggunakake maneh dana kanthi nemtokake pamindhahan (koin) kaping pindho . Nambahake baris 0x0.Currency.deposit (salinan (some_other_payee), mindhah (coin)) contone, ing ndhuwur bakal ngidini pangirim kanggo "nglampahi" dhuwit recehan kaping pindho - pisanan karo payee, lan kaloro karo sawetara_liyane_payee. Iki minangka prilaku sing ora dikarepake sing ora bisa ditindakake kanthi aset fisik. Untunge, Move bakal nolak program iki.

Mundhut dana amarga nolak pamindhahan (koin). Yen sampeyan ora mindhah sumber daya (contone, kanthi mbusak baris sing ngemot pamindhahan (koin)), kesalahan verifikasi bytecode bakal dibuwang. Iki nglindhungi programer Move saka mundhut dana sing ora disengaja utawa ala.

Modul mata uang

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Saben akun bisa ngemot 0 utawa luwih modul (ditampilake minangka persegi panjang) lan siji utawa luwih nilai sumber daya (ditampilake minangka silinder). Contone, akun ing 0x0 ngandhut modul 0x0. Saiki lan nilai saka jinis sumber daya 0x0.Currency.Coin. Akun ing alamat 0x1 nduweni rong sumber lan siji modul; Akun ing alamat 0x2 wis loro modul lan siji Nilai sumber.

Momen Nekotory:

  • Skrip transaksi iku atom - bisa ditindakake kanthi lengkap utawa ora.
  • Modul minangka potongan kode sing umure dawa sing bisa diakses sacara global.
  • Negara global wis kabentuk minangka tabel hash, sing kuncine yaiku alamat akun
  • Akun bisa ngemot ora luwih saka siji nilai sumber saka jinis tartamtu lan ora luwih saka siji modul kanthi jeneng tartamtu (akun ing 0x0 ora bisa ngemot sumber daya tambahan 0x0.Currency.Coin utawa modul liyane jenenge Currency)
  • Alamat modul sing diumumake minangka bagean saka jinis (0x0.Currency.Coin ΠΈ 0x1.Currency.Coin minangka jinis kapisah sing ora bisa digunakake bebarengan)
  • Programer bisa nyimpen macem-macem jinis sumber daya iki ing akun kanthi nemtokake sumber daya khusus - (sumber TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Sampeyan bisa ngrujuk menyang sumber kanthi jeneng tanpa konflik, contone, sampeyan bisa ngrujuk menyang rong sumber nggunakake TwoCoins.c1 ΠΈ TwoCoins.c2.

Pengumuman sumber koin

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook
Jeneng modul Currency lan jinis sumber daya jenenge Coin

Momen Nekotory:

  • Coin minangka struktur kanthi siji jinis lapangan u64 (64-bit unsigned integer)
  • Mung prosedur modul Currency bisa nggawe utawa ngrusak nilai saka jinis Coin.
  • Modul lan skrip liyane mung bisa nulis utawa ngrujuk lapangan nilai liwat prosedur umum sing diwenehake dening modul kasebut.

Sale simpenan

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Prosedur iki nampa sumber daya Coin minangka input lan gabungke karo sumber daya Coindisimpen ing akun panampa:

  1. Ngancurake Koin sumber daya input lan ngrekam regane.
  2. Nampa link menyang sumber Coin unik sing disimpen ing akun panampa.
  3. Ngganti nilai saka jumlah dhuwit recehan dening Nilai liwati ing parameter nalika nelpon prosedur.

Momen Nekotory:

  • Mbukak paket, BorrowGlobal - tata cara dibangun ing
  • Mbukak bungkus Iki mung cara kanggo mbusak sumber saka jinis T. Prosedur njupuk sumber minangka input, numpes, lan ngasilake nilai sing digandhengake karo kolom sumber.
  • BorrowGlobal njupuk alamat minangka input lan ngasilake referensi menyang conto unik saka T sing diterbitake (diduweni) dening alamat kasebut
  • &mut Coin iki link kanggo sumber Coin

Implementasi withdraw_from_sender

Nyilem menyang Pindhah - Basa pemrograman blockchain Libra Facebook

Prosedur iki:

  1. Njaluk link menyang sumber unik Coin, disambung menyang akun pangirim
  2. Ngurangi nilai sumber daya Coin liwat link kanggo jumlah kasebut
  3. Nggawe lan ngasilake sumber daya anyar Coin karo imbangan dianyari.

Momen Nekotory:

  • simpenan bisa disebabake dening sapa wae, nanging withdraw_from_sender mung nduweni akses menyang dhuwit recehan saka akun nelpon
  • GetTxnSenderAddress padha karo msg.pengirim ing Solidity
  • NolakKajaba padha karo mbutuhake ing Solidity. Yen mriksa iki gagal, transaksi bakal mandheg lan kabeh owah-owahan bakal mbalek maneh.
  • Pack iku uga prosedur sing dibangun sing nggawe sumber daya anyar saka jinis T.
  • Uga Mbukak bungkus, Pack mung bisa disebut nang modul ngendi sumber diterangake T

kesimpulan

Kita nliti karakteristik utama basa Move, dibandhingake karo Ethereum, lan uga dadi akrab karo sintaks dhasar skrip. Akhire, aku Highly Rekomendasi mriksa metu kertas putih asli. Iki kalebu akeh rincian babagan prinsip desain basa pemrograman, uga akeh tautan sing migunani.

Source: www.habr.com

Add a comment