Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Teras, urang bakal ngémutan sacara rinci ciri-ciri utama basa Pindah sareng naon bédana konci na sareng basa anu sanés, anu parantos populér pikeun kontrak pinter - Solidity (dina platform Ethereum). Bahanna dumasar kana ulikan ngeunaan whitepaper 26-halaman online anu sayogi.

perkenalan

Move mangrupikeun basa bytecode anu tiasa dieksekusi anu dianggo pikeun ngaéksekusi transaksi pangguna sareng kontrak pinter. Perhatikeun dua titik:

  1. Sedengkeun Pindah mangrupikeun basa bytecode anu tiasa langsung dilaksanakeun dina mesin virtual Pindah, Solidity (basa kontrak pinter Ethereum) mangrupikeun bahasa tingkat luhur anu munggaran disusun kana bytecode sateuacan dieksekusi dina EVM (Ethereum Virtual Machine).
  2. Pindahkeun tiasa dianggo henteu ngan ukur pikeun nerapkeun kontrak pinter, tapi ogé pikeun transaksi khusus (langkung seueur ngeunaan ieu engké), sedengkeun Solidity mangrupikeun basa kontrak-pinter hungkul.


Tarjamahan dilaksanakeun ku tim proyék INDEX Protocol. Kami parantos narjamahkeun bahan badag ngajéntrékeun proyék Libra, ayeuna waktuna pikeun nempo basa Pindahkeun dina leuwih jéntré saeutik. Tarjamahan dilaksanakeun babarengan sareng Habrauser tiiseun

Fitur konci Move nyaéta kamampuhan pikeun nangtukeun jenis sumberdaya custom kalawan semantik dumasar kana logika linier: sumberdaya a moal bisa ditiron atawa implicitly dihapus, ngan dipindahkeun. Sacara fungsional, ieu sami sareng kamampuan basa Rust. Nilai dina Rust ngan ukur tiasa ditugaskeun ka hiji nami dina hiji waktos. Napelkeun nilai kana ngaran béda ngajadikeun eta sadia dina ngaran saméméhna.

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Salaku conto, potongan kode di handap ieu bakal buang kasalahan: Pamakéan nilai dipindahkeun 'x'. Ieu kusabab teu aya ngumpulkeun sampah di Karat. Nalika variabel kaluar tina ruang lingkup, mémori anu aranjeunna tingali tiasa dibébaskeun ogé. Sacara sederhana, ngan ukur tiasa aya hiji "pamilik" data. Dina conto ieu x nyaéta anu bogana asli teras y janten nu boga anyar. Baca langkung seueur ngeunaan kabiasaan ieu di dieu.

Répréséntasi aset digital dina sistem kabuka

Aya dua sipat aset fisik anu sesah digitus sacara digital:

  • Kakuatan (Kakirangan, aslina kakirangan). Jumlah aset (émisi) dina sistem kedah dikawasa. Duplikasi aset anu aya kedah dilarang, sareng nyiptakeun anu énggal mangrupikeun operasi anu istimewa.
  • Kontrol aksés... Pamilon sistem kedah tiasa ngajaga aset nganggo kabijakan kontrol aksés.

Dua ciri ieu, anu alami pikeun aset fisik, kedah dilaksanakeun pikeun objék digital upami urang hoyong nganggap éta salaku aset. Salaku conto, logam langka ngagaduhan kakirangan alami, sareng ngan anjeun gaduh aksés ka dinya (contona, dina panangan anjeun) sareng anjeun tiasa ngajual atanapi nyéépkeunnana.

Pikeun ngagambarkeun kumaha urang dugi ka dua sipat ieu, hayu urang mimitian ku kalimat ieu:

Saran # 1: Aturan Anu Sederhana Tanpa Kalangkangan sareng Kontrol Akses

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

  • G [K]: = n nandakeun pembaruan pikeun nomer anu tiasa diaksés ku konci К dina kaayaan global blok, kalayan hartos anyar n.
  • urus ⟨Alice, 100⟩ hartosna netepkeun kasaimbangan akun Alice kana 100.

Solusi di luhur gaduh sababaraha masalah utama:

  • Alice tiasa nampi sajumlah koin anu teu terbatas ku ngan saukur ngirim urus ⟨Alice, 100⟩.
  • Koin anu dikirimkeun Alice ka Bob henteu aya gunana, sabab Bob tiasa ngintunkeun dirina koin sajumlah terbatas nganggo téknik anu sami.

Saran # 2: Ngitung deficit

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Ayeuna urang ngawaskeun kaayaan sahingga jumlah koin Ka éta sahenteuna sami n sateuacan transaksi transfer. Nanging, sanaos ieu ngajawab masalah kakirangan, teu aya inpormasi ngeunaan saha anu tiasa ngirim koin Alice (kanggo ayeuna, saha waé anu tiasa ngalakukeun ieu, anu utamina nyaéta henteu ngalanggar aturan ngawatesan jumlahna).

Usul # 3: Ngagabungkeun kakirangan sareng aksés aksés

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Kami ngarengsekeun masalah ieu ku mékanisme tanda tangan digital verifikasi_sig sateuacan mariksa kasaimbangan, anu hartosna yén Alice nganggo konci swasta na pikeun nandatanganan transaksi sareng mastikeun yén anjeunna mangrupikeun koin na.

Bahasa pamrograman Blockchain

Bahasa blok anu aya nyanghareupan masalah-masalah ieu (sadayana diungkulan dina Pindahkeun (catetan: hanjakalna, panulis tulisan ngan ukur pikaresepeun pikeun Ethereum dina babandinganana, janten matak ngan ukur nyandak aranjeunna dina kontéks ieu. Salaku conto, kaseueuran ieu ogé direngsekeun dina EOS.)):

Répréséntasi teu langsung pikeun aset. Hiji aset disandikeun nganggo integer, tapi integer henteu sami sareng aset. Kanyataanna, euweuh tipe atawa nilai ngalambangkeun Bitcoin / Éter / <Sakur koin>! Hal ieu ngajadikeun program nulis nu make aset hésé tur rawan kasalahan. Pola sapertos ngirimkeun aset ka/ti prosedur atanapi nyimpen aset dina struktur butuh dukungan khusus tina basa.

Defisitna henteu tiasa dilegakeun... Basa ngan ukur ngagambarkeun hiji aset langka. Salaku tambahan, ubar-ubaran ngalawan kakuranganana dikuatkeun langsung kana semantik basa éta sorangan. Pamekar, upami anjeunna hoyong ngadamel aset khusus, kedah sacara ati-ati ngendalikeun sadaya aspek sumberdaya éta nyalira. Ieu persis masalah kontrak pinter Ethereum.

Pangguna ngaluarkeun asetna, token ERC-20, ngagunakeun bilangan bulat pikeun nangtukeun duanana nilai sareng total pasokanna. Iraha wae token anyar didamel, kode kontrak pinter kedah mandiri mastikeun patuh kana aturan émisi. Salaku tambahan, presentasi henteu langsung pikeun aset ngakibatkeun, dina sababaraha kasus, kasalahan serius - duplikasi, belanja ganda atanapi bahkan kaleungitan aset lengkep.

Kurangna aksés aksés fléksibel... Hiji-hijina kawijakan kontrol aksés anu dianggo ayeuna nyaéta skéma tandatangan anu nganggo kriptografi asimétri. Sapertos panyalindungan kakirangan, kawijakan kendali aksés anu kalebet dina semantik basa. Tapi kumaha manjangkeun basa pikeun ngamungkinkeun para programer ngartikeun kabijakan kendali aksésna nyalira sering janten tugas anu rumit pisan.

Ieu ogé leres dina Ethereum, dimana kontrak pinter henteu ngagaduhan dukungan kriptografi asli pikeun kontrol aksés. Pamekar kedah nyetél kontrol aksés sacara manual, contona, nganggo modifier ngan Owner.

Sanaos kuring kipas ageung tina Ethereum, kuring yakin yén sipat aset kedah dirojong sacara asli ku basa pikeun tujuan kaamanan. Khususna, nransferkeun Éter kana kontrak pinter ngalibatkeun kiriman dinamis, anu parantos ngenalkeun kelas bug anyar anu katelah kerentanan re-entrancy. Dispatch dinamis di dieu hartina logika palaksanaan kode bakal ditangtukeun dina runtime (dinamis) tinimbang dina waktos compile (statis).

Ku kituna, dina Solidity, nalika kontrak A nelepon hiji fungsi dina kontrak B, kontrak B bisa ngajalankeun kode nu teu dimaksudkeun ku developer kontrak A, nu bisa ngakibatkeun re-entry kerentanan (kontrak A ngahaja tindakan minangka kontrak B pikeun narik duit saméméh balances akun sabenerna deducted).

Pindahkeun Dasar Desain Basa

Sumberdaya urutan kahiji

Dina tingkat anu luhur, interaksi antara modul / sumber / prosedur dina basa Pindah mirip pisan sareng hubungan antara kelas / obyék sareng metode dina basa OOP.
Modul gerak mirip sareng kontrak pinter dina blokchain sanés. Modul nyatakeun jinis sumber sareng prosedur anu ngahartikeun aturan pikeun nyiptakeun, ngancurkeun, sareng ngamutahirkeun sumber daya anu dinyatakeun. Tapi sadayana ieu ngan ukur konvénsi ("jargon”) Dina Pindahkeun. Urang bakal ngagambarkeun titik ieu sakedik engké.

Kalenturan

Move nambihan kalenturan ka Libra ngaliwatan skrip. Unggal urus di Libra ngawengku naskah, nu dasarna prosedur inti urus. Skrip tiasa ngalakukeun salah sahiji tindakan anu ditangtukeun, contona, pamayaran ka daptar panarima anu khusus, atanapi nganggo deui sumber daya sanés - contona, ku nelepon prosedur dimana logika umumna ditangtukeun. Ieu sababna skrip transaksi Move nawiskeun kalenturan anu langkung ageung. Skrip tiasa nganggo paripolah sakali sareng ngulang, sedengkeun Ethereum ngan ukur tiasa ngalaksanakeun skrip anu tiasa diulang (nelepon hiji metode dina metode kontrak pinter). Alesanna disebut "bisa dianggo deui" sabab fungsi kontrak pinter tiasa dilaksanakeun sababaraha kali. (Catetan: Intina di dieu pisan halus. Di hiji sisi, skrip transaksi dina bentuk pseudo-bytecode ogé aya dina Bitcoin. Di sisi anu sanés, sakumaha anu kuring ngartos, Move ngalegaan basa ieu, nyatana, ka tingkat basa kontrak pinter anu lengkep.).

kasalametan

Format laksana Pindahkeun nyaéta bytecode, nyaéta, di hiji sisi, basa tingkat anu langkung luhur tibatan basa rakitan, tapi tingkat anu langkung handap tina kode sumber. Bytecode dipariksa dina run-time (on-chain) pikeun sumberdaya, jenis jeung kaamanan memori ngagunakeun verifier bytecode, lajeng dieksekusi ku juru. Pendekatan ieu ngamungkinkeun Pindahkeun nyayogikeun kaamanan kode sumber, tapi tanpa prosés kompilasi sareng kabutuhan pikeun nambihan kompiler kana sistem. Ngadamel Pindahkeun basa bytecode mangrupikeun solusi anu saé. Teu perlu disusun tina sumber, sakumaha dina kasus Solidity, sarta teu perlu salempang ngeunaan kamungkinan gagal atawa serangan dina infrastruktur compiler.

Verifiability

Kami ditujukeun pikeun ngalaksanakeun pamariksaan sagampangna, sabab sadayana ieu dilakukeun dina ranté (catetan: online, nalika ngajalankeun unggal transaksi, janten naon waé anu tunduh nyababkeun perlambatan sadaya jaringan), kumaha oge, mimitina desain basa geus siap ngagunakeun off-ranté alat verifikasi statik. Sanajan ieu leuwih hade, pikeun ayeuna ngembangkeun alat verifikasi (salaku toolkit misah) geus ditunda pikeun mangsa nu bakal datang, sarta ayeuna ngan verifikasi dinamis dina run-time (on-chain) dirojong.

Modularitas

Modul mindahkeun nyayogikeun abstraksi data sareng lokalisasi operasi kritis kana sumber daya. Enkapsulasi anu disayogikeun ku modul, digabungkeun sareng panangtayungan anu disayogikeun ku sistem tipe Pindah, mastikeun yén pasipatan anu disetél dina jinis modul henteu tiasa dilanggar ku kode di luar modul. Ieu desain abstraksi anu dipikir-pikir, anu hartosna data dina kontrak ngan ukur tiasa dirobih dina lingkup kontrak, tapi henteu sacara éksternal.

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Ihtisar mindahkeun

Conto naskah transaksi nunjukkeun yén tindakan jahat atanapi ceroboh ku programer di luar modul moal tiasa kompromi kaamanan sumberdaya modul. Teras, urang bakal ningali conto kumaha modul, sumber daya, sareng prosedur dianggo pikeun program blokir Libra.

Pamayaran peer-to-peer

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Jumlah koin dieusian dina jumlah bakal dibikeun ti kasaimbangan pangirim ka panarima.
Aya sababaraha hal anyar di dieu (disorot beureum):

  • 0x0: alamat tina akun dimana modul na disimpen
  • duit nu dipake di sahiji nagara: nami modul
  • duit kencring: jinis sumberdaya
  • Nilai koin anu dipulang ku prosedur nyaéta nilai sumberdaya tipe 0x0. Currency.Coin
  • mindahkeun (): nilai teu tiasa dianggo deui
  • nyalin (): nilai tiasa dianggo engké

Parse kodeu: dina léngkah munggaran, anu ngirimkeun prosedur anu namina mundur_from_sender tina modul anu disimpen di 0x0. Kaayaan. Dina lengkah kadua, pangirim mindahkeun dana ka panarima ku cara mindahkeun nilai sumberdaya koin kana prosedur deposit modul. 0x0. Kaayaan.

Ieu tilu conto kasalahan dina kode anu bakal ditolak ku cék:
Duplikasi dana ku ngarobah telepon mindahkeun (koin) dina nyalin (koin). Sumberdaya ngan bisa dipindahkeun. Nyobian duplikat kuantitas sumberdaya (contona, ku nelepon nyalin (koin) dina conto di luhur) bakal ngahasilkeun kasalahan nalika mariksa bytecode.

Anggo deui dana ku ngahususkeun mindahkeun (koin) dua kali . Nambahkeun hiji garis 0x0.Currency.deposit (salinan (some_other_payee), mindahkeun (koin)) contona, di luhur bakal ngidinan pangirim pikeun "méakkeun" koin dua kali - kahiji kalina jeung payee, sarta kadua ku sababaraha_lain_payee. Ieu mangrupikeun kabiasaan anu teu pikaresepeun anu teu mungkin ku aset fisik. Kabeneran, Move bakal nampik program ieu.

Leungitna dana alatan panolakan mindahkeun (koin). Upami anjeun henteu mindahkeun sumberdaya (contona, ku ngahapus garis anu ngandung mindahkeun (koin)), kasalahan verifikasi bytecode bakal dialungkeun. Ieu ngajaga programer Pindahkeun tina leungitna dana anu teu kahaja atanapi jahat.

modul Mata Artos

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Unggal akun bisa ngandung 0 atawa leuwih modul (ditémbongkeun salaku rectangles) jeung hiji atawa leuwih nilai sumberdaya (ditémbongkeun salaku silinder). Contona, hiji akun di 0x0 ngandung modul 0x0. Kaayaan jeung nilai tipe sumberdaya 0x0.Currency.Coin. Rekening di alamat 0x1 gaduh dua sumber sareng hiji modul; Rekening di alamat 0x2 boga dua modul jeung hiji nilai sumberdaya.

Momen Nekotory:

  • Skrip transaksi nyaéta atom - boh éta dieksekusi lengkep atanapi henteu pisan.
  • Modul mangrupikeun sapotong kode anu umurna panjang anu tiasa diaksés sacara global.
  • Kaayaan global terstruktur salaku tabel hash, dimana koncina nyaéta alamat akun
  • Akun tiasa ngandung henteu langkung ti hiji nilai sumberdaya tina jinis anu dipasihkeun sareng henteu langkung ti hiji modul kalayan nami anu dipasihkeun (akun di 0x0 teu tiasa ngandung sumberdaya tambahan 0x0.Currency.Coin atawa modul séjén ngaranna duit nu dipake di sahiji nagara)
  • Alamat modul anu dinyatakeun mangrupikeun bagian tina jinis (0x0.Currency.Coin и 0x1.Currency.Coin mangrupakeun tipe misah nu teu bisa dipaké silih tukeur)
  • Programer bisa nyimpen sababaraha instansi tipe ieu sumberdaya dina akun ku nangtukeun sumberdaya custom maranéhanana - (sumberdaya TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • Anjeun tiasa ngarujuk kana sumberdaya anu namina tanpa konflik, contona anjeun tiasa ngarujuk kana dua sumber anu nganggo TwoCoins.c1 и TwoCoins.c2.

pengumuman sumberdaya koin

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook
Modul ngaranna duit nu dipake di sahiji nagara jeung tipe sumberdaya ngaranna duit kencring

Momen Nekotory:

  • duit kencring mangrupa struktur jeung hiji widang tipe u64 (64-bit unsigned integer)
  • Prosedur modul wungkul duit nu dipake di sahiji nagara bisa nyieun atawa ngancurkeun nilai tipe duit kencring.
  • modul jeung Aksara séjén ngan bisa nulis atawa rujukan widang nilai ngaliwatan prosedur umum disadiakeun ku modul.

Diobral tina deposit

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Prosedur ieu narima sumberdaya a duit kencring salaku input sarta ngagabungkeun deui kalawan sumberdaya duit kencringdisimpen dina akun panarima:

  1. Ngancurkeun koin sumberdaya input sareng ngarékam nilaina.
  2. Narima tumbu ka sumberdaya unik Coin disimpen dina akun panarima.
  3. Ngarobah nilai Jumlah Koin ku nilai diliwatan dina parameter nalika nelepon prosedur.

Momen Nekotory:

  • Unpack, BorrowGlobal - prosedur diwangun-di
  • Ngabongkar bungkusan Ieu hiji-hijina jalan pikeun mupus sumberdaya tipe T. Prosedur nyokot sumberdaya salaku input, ngancurkeun eta, sarta mulih nilai pakait sareng widang sumberdaya urang.
  • BorrowGlobal nyokot alamat salaku input sarta mulih rujukan ka conto unik tina T diterbitkeun (milik) ku alamat éta
  • & mut koin ieu link ka sumberdaya nu duit kencring

Palaksanaan withdraw_from_sender

Lebetkeun kana Pindahkeun - basa pamrograman blockchain Libra Facebook

Prosedur ieu:

  1. Kéngingkeun tautan ka sumber daya anu unik duit kencring, numbu ka akun nu ngirim
  2. Ngurangan nilai sumberdaya duit kencring via link pikeun jumlah dieusian
  3. Nyiptakeun sareng ngabalikeun sumber daya énggal duit kencring kalawan kasaimbangan diropéa.

Momen Nekotory:

  • neundeun duit bisa disababkeun ku saha, tapi mundur_from_sender ngan boga aksés ka koin tina akun nelepon
  • GetTxnSenderAddress sarupa jeung msg.pangirim dina Solidity
  • NolakKecuali sarupa jeung ngabutuhkeun dina Solidity. Upami cék ieu gagal, urus bakal dieureunkeun sareng sadaya parobihan digulung deui.
  • Pek Éta ogé mangrupikeun prosedur anu diwangun anu nyiptakeun sumber daya énggal tina tipe T.
  • Sakumaha ogé Ngabongkar bungkusan, Pek ngan bisa disebut di jero modul mana sumberdaya digambarkeun T

kacindekan

Urang nalungtik ciri utama basa Pindahkeun, dibandingkeun jeung Ethereum, sarta ogé jadi akrab jeung sintaksis dasar Aksara. Tungtungna, kuring nyarankeun pisan pariksa kaluar kertas bodas aslina. Éta kalebet seueur detil ngeunaan prinsip desain basa program, ogé seueur tautan anu mangpaat.

sumber: www.habr.com

Tambahkeun komentar