欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

move語言怎么用

本篇內(nèi)容主要講解“move語言怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“move語言怎么用”吧!

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)遼陽免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

move語言的特點(diǎn)

Libra的目標(biāo)是打造一個(gè)全球話的金融和貨幣的平臺(tái),從而賦能地球上的幾十億人。那么作為Libra的move語言就需要在安全性和可編程性上面提供大力的支持。

為了實(shí)現(xiàn)這樣的目標(biāo),move遵從如下四大設(shè)計(jì)原則:

資源優(yōu)先

在區(qū)塊鏈中我們需要通過程序來存取數(shù)字資產(chǎn),這個(gè)數(shù)字資產(chǎn)和普通程序中的變量(如booleans,integers,strings)有著明顯的區(qū)別。我們需要一個(gè)特別的方式來表示區(qū)塊鏈中的數(shù)字資產(chǎn)。

Move語言中的resource就是特別為數(shù)字資產(chǎn)定義的,它有這樣的特點(diǎn):

resource是不能被拷貝和隱式銷毀的,它只能在不同的用戶之間移動(dòng)。這個(gè)特性是在Move的類型定義中已經(jīng)聲明了的。除了這個(gè)特殊的限制,resource和其他普通的資源一樣,可以存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中,可以作為參數(shù)傳給過程等。

資源優(yōu)先的概念為程序員寫出安全和有效的代碼提供了非常大的幫助。

Libra coin就是一種resource,因?yàn)樗鼘⒑同F(xiàn)實(shí)世界的貨幣相對(duì)應(yīng),所以它可以被創(chuàng)建,修改,或者銷毀。我們需要做的就是通過modules來控制好操作coin的權(quán)限。

move中的modules有點(diǎn)像以太坊中的智能合約,module聲明了resource類型和過程(業(yè)務(wù)邏輯:如何創(chuàng)建,移動(dòng),銷毀coin)。module中的定義的type和過程可以被其他的module進(jìn)行調(diào)用。

靈活性

move的靈活性體現(xiàn)在可以通過transaction腳本來自由組合各種transaction來實(shí)現(xiàn)不同的功能,一個(gè)腳本可以調(diào)用多個(gè)transaction,

在move中modules/resources/procedures的關(guān)系有點(diǎn)像面向?qū)ο蟪绦蛘Z言中classes/objects/methods的關(guān)系。

安全性

move定義了資源的安全性,類型的安全性和內(nèi)存的安全性,任何違背這些安全性的操作都會(huì)被拒絕。

一般來說,有兩種方式來實(shí)現(xiàn)這個(gè)功能:1.在高級(jí)別的語言定義上,通過編譯器來檢查這些異常。 2. 在低級(jí)別的虛擬機(jī)匯編語言上檢查這些異常。

move是這兩種方式中間的一種方式:Move執(zhí)行的字節(jié)碼比匯編語言要高級(jí)一點(diǎn),但是又比編程語言又低級(jí)一點(diǎn)。move的字節(jié)碼提交到鏈上后,會(huì)被字節(jié)碼驗(yàn)證器校驗(yàn),然后經(jīng)由字節(jié)碼解釋器執(zhí)行。

可驗(yàn)證性

最好的驗(yàn)證方式就是將字節(jié)碼提交到鏈上進(jìn)行真實(shí)的驗(yàn)證,但這樣很明顯會(huì)加重鏈的負(fù)擔(dān),影響交易的速度,所以在move中我們盡可能多的在鏈上做輕量級(jí)的驗(yàn)證,而在語言級(jí)別做線下的靜態(tài)驗(yàn)證。

Move語句初探

本節(jié)我們會(huì)通過一個(gè)例子來詳細(xì)的講解Move語言的具體特性。本節(jié)的例子是使用move IR來編寫的,這是一個(gè)實(shí)驗(yàn)性的版本,正式的move語言還在編寫中。

點(diǎn)對(duì)點(diǎn)支付交易腳本

public main(payee: address, amount: u64) {
let coin: 0x0.Currency.Coin = 0x0.Currency.withdraw_from_sender(copy(amount));
0x0.Currency.deposit(copy(payee), move(coin));
}

上面是一段簡單的交易腳本,main方法有兩個(gè)輸入,一個(gè)是地址,一個(gè)是要支付的數(shù)目。

邏輯其實(shí)很簡單,從發(fā)送者的賬戶里面減去amount, 然后將它轉(zhuǎn)給接收者。

0x0是module的存儲(chǔ)地址,Currency是module的名字,0x0.Currency.Coin 代表的就是資源了。

在上面的章節(jié)中我們講到了,coin是resource,只能move不能copy,嘗試將move(coin)替換成copy(coin)會(huì)報(bào)錯(cuò)。

其他的非resource的資源像是payee和amout可以被move也可以被copy.

如果我們添加這樣一行:

0x0.Currency.deposit(copy(some_other_payee), move(coin))

則coin將會(huì)被使用兩次,這在邏輯上是有問題的,在Move語言中,

move(coin)方法在使用一次過后會(huì)變得不可用,從而導(dǎo)致第二次move失敗,從而有效的保障了應(yīng)用邏輯。

coin只能也必須移動(dòng)一次,如果把move(coin)刪除,同樣會(huì)的到一個(gè)錯(cuò)誤。這樣做的目的是有效的避免程序員的疏忽導(dǎo)致的應(yīng)用邏輯錯(cuò)誤。

Currency Module

上面我們定義了一個(gè)Currency的module。這里我們講一下Currency是怎么實(shí)現(xiàn)的。

Libra有兩種程序,一種是transaction腳本,一種是module,腳本會(huì)去調(diào)用module里面的過程來更新全局狀態(tài)。

transaction腳本是一種只能執(zhí)行一次的腳本,執(zhí)行完之后就不能再用了,而module是發(fā)布在全局狀態(tài)里面的長期存在的代碼。

全局狀態(tài)是一個(gè)賬戶地址到賬戶的映射,如下圖所示,0x0,0x1,0x2都是賬戶的地址。

move語言怎么用

每個(gè)地址里面可以包含任意個(gè)module和資源。例如0x0地址的賬戶包含了一個(gè)module:0x0.Currency和一個(gè)resource:0x0.Currency.Coin.

知道了賬戶的結(jié)構(gòu)之后,我們看下module是怎么定義資源的:

module Currency {resource Coin { value: u64 }// ...}

上面的代碼定義了一個(gè)Coin的resource,它有一個(gè)value字段,類型是u64。

接下來我們看下存儲(chǔ)這個(gè)操作是怎么定義的:

public deposit(payee: address, to_deposit: Coin) {let to_deposit_value: u64 = Unpack<Coin>(move(to_deposit));let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(payee));let coin_value_ref: &mut u64 = &mut move(coin_ref).value;let coin_value: u64 = *move(coin_value_ref);*move(coin_value_ref) = move(coin_value) + move(to_deposit_value);}

這個(gè)過程主要做了這樣幾件事情:

  1. 銷毀輸入的Coin,并且記錄下它的值。

  2. 獲取存在payee中的Coin的reference。

  3. 把輸入的Coin加到payee上。

Unpack<T> 是唯一的銷毀T的方式,unpack會(huì)銷毀T,然后返回T對(duì)應(yīng)的值。

BorrowGlobal<T> 接收一個(gè)地址作為參數(shù),然后返回一個(gè)指向該地址里的T實(shí)例的引用。

同樣的,我們看下withdraw_from_sender 是怎么實(shí)現(xiàn)的:

public withdraw_from_sender(amount: u64): Coin {let transaction_sender_address: address = GetTxnSenderAddress();let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(transaction_sender_address));let coin_value_ref: &mut u64 = &mut move(coin_ref).value;let coin_value: u64 = *move(coin_value_ref);RejectUnless(copy(coin_value) >= copy(amount));*move(coin_value_ref) = move(coin_value) - copy(amount);let new_coin: Coin = Pack<Coin>(move(amount));return move(new_coin);}

這個(gè)過程做了這樣3件事情:

  1. 獲得發(fā)送者地址里面coin的唯一引用。

  2. 減去相應(yīng)的數(shù)量。

  3. 創(chuàng)建并返回一個(gè)新的coin。

其中Pack<T>是Unpack<T>的反向操作。用來創(chuàng)建T資源。

到此,相信大家對(duì)“move語言怎么用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享文章:move語言怎么用
瀏覽地址:http://aaarwkj.com/article42/jpooec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、ChatGPT網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
国产成年人免费小视频| 亚洲av永久国产剧情| 国产在线视频不卡一线路| 免费的黄色片带中文字幕| 国产精品美女丝袜久久久| 国产精品成人av在线网站| 亚洲成在人线免费观看| 亚洲精品一区二区av| 欧美日韩精品久久影院| 日韩中文字幕乱码卡一| 国产熟女精品自拍嫩草| 亚洲热久久国产经典视频| av毛片高清在线观看| 国产一区二区视频在线| 国产av一区二区三区中文| 亚洲精品黄色在线观看| 国产高跟丝袜女王调教| 亚洲三级伦理在线视频| 国产成人免费自拍一区| 欧美日韩另类国产综合| 亚洲一区二区三区黄色| 日日添夜夜躁欧美一区二区| 小仙女精品经典三级永久| 中文字幕人妻熟人妻熟丝| 亚洲一区二区三区日韩精品| 成人中文字幕日韩电影| 欧美日韩亚洲精品内裤| 中文字幕免费日本在线| 色老头视频一区二区三区| 东京一区二区三区四区黄片| 精品人妻一区二区三区四| 精品国产91久久粉嫩懂色| 亚洲少妇午夜福利视频| 国产成人综合在线观看网站| 久久精品亚洲毛片美女极品| 亚洲欧美综合日韩综合久久久 | 国产精品日韩欧美亚洲| 国产成人亚洲欧美激情| 国产交换精品一区二区三区| 精品国产不卡在线观看| 亚洲成人日韩成人av|