當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] Facebook推出Libra項(xiàng)目產(chǎn)生了刷屏級(jí)的影響,一時(shí)間信息爆炸,觀點(diǎn)紛至。關(guān)于Libra具體操作模式、落地場(chǎng)景、影響面、如何與監(jiān)管交互等討論已經(jīng)很多。這次,我們想為關(guān)注國(guó)際區(qū)塊鏈發(fā)展的開發(fā)

Facebook推出Libra項(xiàng)目產(chǎn)生了刷屏級(jí)的影響,一時(shí)間信息爆炸,觀點(diǎn)紛至。關(guān)于Libra具體操作模式、落地場(chǎng)景、影響面、如何與監(jiān)管交互等討論已經(jīng)很多。這次,我們想為關(guān)注國(guó)際區(qū)塊鏈發(fā)展的開發(fā)者、愛好者們帶來點(diǎn)不一樣的!

百度超級(jí)鏈XUPER致力于國(guó)產(chǎn)自研的區(qū)塊鏈技術(shù)研發(fā),并積極推動(dòng)區(qū)塊鏈的商業(yè)化落地。在底層區(qū)塊鏈技術(shù)上擁有120余篇專利保護(hù),在超級(jí)節(jié)點(diǎn)、鏈內(nèi)并行、立體網(wǎng)絡(luò)、可插拔共識(shí)機(jī)制等技術(shù)上實(shí)現(xiàn)國(guó)產(chǎn)自主創(chuàng)新。

保持一直以來對(duì)區(qū)塊鏈技術(shù)關(guān)注,百度的研發(fā)工程師們發(fā)現(xiàn),Libra采用了一種全新的move語言,其核心是從設(shè)計(jì)上防止數(shù)字資產(chǎn)被復(fù)制,降低了出現(xiàn)意外漏洞或安全事件的風(fēng)險(xiǎn)。

Libra白皮書中關(guān)于move語言的描述

Libra 區(qū)塊鏈的三項(xiàng)決策:

1. 設(shè)計(jì)和使用 Move 編程語言。

2. 使用拜占庭容錯(cuò) (BFT) 共識(shí)機(jī)制。

3. 采用和迭代改善已廣泛采用的區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)。

“Move”是一種新的編程語言,用于在 Libra 區(qū)塊鏈中實(shí)現(xiàn)自定義交易邏輯和“智能合約”。由于 Libra 的目標(biāo)是每天 為數(shù)十億人服務(wù),因此 Move 的設(shè)計(jì)首先考慮到安全性和可靠性。Move 是從迄今為止發(fā)生的與智能合約相關(guān)的安 全事件中吸取經(jīng)驗(yàn)而創(chuàng)造的一種編程語言,能從本質(zhì)上令人更加輕松地編寫符合作者意圖的代碼,從而降低了出現(xiàn) 意外漏洞或安全事件的風(fēng)險(xiǎn)。具體而言,Move 從設(shè)計(jì)上可防止數(shù)字資產(chǎn)被復(fù)制。它使得將數(shù)字資產(chǎn)限制為與真實(shí)資 產(chǎn)具有相同屬性的“資源類型”成為現(xiàn)實(shí):每個(gè)資源只有唯一的所有者,資源只能花費(fèi)一次,并限制創(chuàng)建新資源。Move 語言還便于自動(dòng)驗(yàn)證交易是否滿足特定屬性,例如,僅更改付款人和收款人帳戶余額的付款交易。通過優(yōu)先實(shí)現(xiàn)這 些特性,Move 可幫助保持 Libra 區(qū)塊鏈的安全性。通過減輕關(guān)鍵交易代碼的開發(fā)難度,Move 可以可靠地執(zhí)行 Libra 生態(tài)系統(tǒng)的管理政策,例如對(duì) Libra 貨幣和驗(yàn)證者節(jié)點(diǎn)網(wǎng)絡(luò)的管理。Move 將加快 Libra 區(qū)塊鏈協(xié)議以及在此基礎(chǔ)上 構(gòu)建的任何金融創(chuàng)新的演變。我們預(yù)計(jì)將在一段時(shí)間后向開發(fā)者開放創(chuàng)建合約的權(quán)限,以支持 Move 的演變和驗(yàn)證。

下面進(jìn)入百度研發(fā)工程師帶來的move語言介紹

Move是一門強(qiáng)類型的字節(jié)碼語言,基于棧式虛擬機(jī)設(shè)計(jì),受Linear Logic類型系統(tǒng)的啟發(fā),將資源(數(shù)字資產(chǎn))作為第一等公民,借助所有權(quán)轉(zhuǎn)移和最多一次可變引用等規(guī)則保證資產(chǎn)安全。名字Move的來歷也就自然而然可以理解了。

三個(gè)大特點(diǎn)

1. first-class resouces. 用資源表示數(shù)字資產(chǎn)是一等公民,然后通過語法借助borrow check等思路在合約編譯期間保證資產(chǎn)的不可雙花,不可消失,必有歸屬性;

2. flexibility 通過交易腳本來定義單個(gè)交易里面的一次性(不可重用)合約邏輯,交易腳本定義了合約的main函數(shù),可以插入多個(gè)module實(shí)現(xiàn)復(fù)雜邏輯和可重用邏輯。合約的結(jié)構(gòu)原語modules/resources/procedure,類比與面向?qū)ο蟮腸lass/object/method,同時(shí)通過module做合約資源的聲明周期管理,極大的提升了合約可復(fù)用性和安全性。

3. 強(qiáng)類型的字節(jié)碼,在字節(jié)碼層面的靜態(tài)代碼檢查保證運(yùn)行時(shí)的大多數(shù)錯(cuò)誤都在編譯期間被發(fā)現(xiàn)。Move沒有動(dòng)態(tài)指派(dynamic dispath),函數(shù)調(diào)用完全是在編譯期間確定,沒有什么類似c++的RTTI的機(jī)制,這樣驗(yàn)證工具可以快速構(gòu)建調(diào)用圖驗(yàn)證,borrow check保證資源任何時(shí)候只有一個(gè)muttable引用,這樣寫操作就可以被嚴(yán)格檢驗(yàn)。保證足夠安全。

Move實(shí)例介紹

先舉個(gè)Move寫的合約例子:

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));

}

合約接受2個(gè)參數(shù)轉(zhuǎn)賬接收人payee和轉(zhuǎn)賬金額amount。0x0表示賬戶地址,Currency表示module, 0x0.Currency.Coin表示資源類型,0x0.Currency.withdraw_from_sender這個(gè)procedure(過程)返回一個(gè)0x0.Currency.Coin類型的值coin,然后通過deposit這個(gè)過程,將coin轉(zhuǎn)移到payee的地址下面去。 借助于linear logic的轉(zhuǎn)移原則, 限制資源(數(shù)字資產(chǎn)的)的不可重用(只能轉(zhuǎn)移一次),不可復(fù)制(不能copy資源)以及不可丟失(轉(zhuǎn)移之后必有地址接受)。

Move通過一個(gè)地址到賬戶的map來表示global state。如下:

包含3個(gè)賬戶的global state的示意圖

在一個(gè)賬戶里面,可以包含多個(gè)module或者resouces,但是不能同名,雖然不能同名,但是可以在一個(gè)賬戶里面,同時(shí)持有2個(gè)地址下面相同類型名的實(shí)例。例如:

resource TwoCoins { c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin })

例如聲明一個(gè)名叫Coin資源如下:

module Currency {

resource Coin { value: u64 }

// 。..

}

默認(rèn)情況下,Coin是private的,外部需要通過module暴露的其他接口(實(shí)際操作的語義最終也只能是move)才能被訪問,并且權(quán)限完全由module的創(chuàng)建者控制。

deposit的實(shí)現(xiàn)如下:

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);

}

詳細(xì)解釋為:

1. move(to_deposit)將銷毀sender的to_deposit這個(gè)資源,并且將其存儲(chǔ)在一個(gè)局部變量to_deposit_value上;

2. 在接受人的空間下面創(chuàng)建一個(gè)引用coin_ref,然后創(chuàng)建一個(gè)存儲(chǔ)coin_ref的value的可變引用coin_value_ref,

3. 取出coin_value_ref的value,將其跟to_deposit_value相加,將結(jié)果存回到coin_value_ref。

其中注意的是,Unpack《T》是Move內(nèi)嵌的用戶銷毀類型為T的變量,然后返回T的具體字段的值的procedure。BorrowGlobal返回一個(gè)Coin的資源的引用。

然后在看下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);

}

幾乎是deposit的逆過程,流程如下:

1. 獲得轉(zhuǎn)賬發(fā)起方的地址,然后獲得其Coin資源的實(shí)際的value, code_value;

2. 從coin_value減去amount個(gè)幣;

3. 然后條用Pack創(chuàng)建一個(gè)新的Coin資源并且傳回去。

綜上可以看到,BorrowGlobal可以驗(yàn)證account是否有權(quán)限獲得一個(gè)資源的引用(意味著馬上要進(jìn)行修改),然后通過Unpack實(shí)際的資源的value然后銷毀資源,或者Pack來新建新的資源。然后上面各種語法&mut之類的,建議大家看看rust就好懂了。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉