以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

加密貨幣:伯克利女程序員硬核詳解 Libra 編程語言 Move 的主要特征及基本語法

Author:

Time:1900/1/1 0:00:00

原文標題:《WhitepaperDeepDive—Move:FacebookLibraBlockchain’sNewProgrammingLanguage》作者:LeeTingTing,加州大學伯克利分校區塊鏈實驗室研究學者,TuringChain聯合創始人兼首席技術官編譯:Guoxi責編:Aholiab

LeeTingTing,加州大學伯克利分校區塊鏈實驗室研究學者,TuringChain聯合創始人兼首席技術官

自去年礦難以來,業界充滿了對區塊鏈唱衰的聲音,鏈圈有很多人都開始對區塊鏈的價值產生懷疑。而Facebook不斷爆出的區塊鏈項目的消息可謂是給鏈圈打了一劑強心針,盼望著,盼望著,今年6月,Facebook發布了加密貨幣Libra的白皮書并上線了官網。可以預見,Libra離落地不遠了。

Libra以非營利組織的形式管理,其創始成員包括大名鼎鼎的銀行卡巨頭Visa,萬事達,以及傳統在線支付巨頭PayPal,頗有挑戰當下全球金融貨幣體系的趨勢。

Libra最近越來越火。不少開發人員已經開始跟進Libra項目,希望在這個全球性的區塊鏈項目中搶占先機。而Libra的編程語言Move則是開發人員眼中的重中之重。

為了幫助開發人員做好入門工作,加州大學伯克利分校區塊鏈實驗室研究學者,TuringChain聯合創始人兼首席技術官LeeTingTing從開發人員的角度分析了Move語言的典型特征以及它與以太坊Solidity的異同,為我們帶來了這篇Move語言的入門指南。

Move語言的白皮書長達26頁,本篇文章是對該白皮書的精華介紹,文中也會直接放出一些白皮書上的原文。Move是Facebook公司為其加密貨幣產品Libra開發的全新編程語言。

作為開發人員和區塊鏈社區愛好者,希望通過這篇文章幫助你快速入門Move語言。

關于Move

Move是一種用于實現Libra自定義交易和智能合約的可執行的字節碼語言。

它與以太坊Solidity語言有以下兩個區別:

Move是一種字節碼語言,它可以直接在Move虛擬機中運行,而以太坊的Solidity語言是一種更高級別的語言,它需要先編譯成字節碼再加入到以太坊虛擬機中運行。

加州大學伯克利分校舉辦ZKP/Web3黑客馬拉松:金色財經報道,Oasis創始人兼加州大學伯克利分校計算機科學教授宋曉冬發布推文表示,伯克利正在舉辦ZKP/web3黑客馬拉松,3月1日至5月2日向公眾開放。[2023/3/1 12:35:56]

Move語言不僅可以用來實現智能合約,還可以用來實現自定義交易,而Solidity語言只能用來實現以太坊中的智能合約。

Move語言的一個關鍵特性是它能夠定義受線性邏輯啟發的帶語義的自定義資源類型。在這種情況下資源永遠不會被復制或被隱式丟棄,它只能在程序的存儲位置之間轉移。

這是一個與Rust語言類似的特性。Rust語言中的數值一次只能分配給一個命名。如果你將某個數值分配給其他命名則將無法再使用之前的命名訪問到該數值。

就比如說,下面這段代碼將會輸出一個錯誤:使用轉移了的值「x」。

這是因為Rust語言沒有垃圾回收機制。當變量超出范圍時,變量引用的內存也會被釋放。

這樣解釋有點麻煩,為了簡單起見,我們可以這樣來理解,每個數據在同一時間內只能有一個「所有者」。在這個例子中,x是數據初始的所有者,后來y也成了數據的所有者,所以程序會報錯,如下面代碼所示。

在開放系統中編碼數字資產

將現實世界中的物理資產編碼成區塊鏈上的數字資產,主要存在兩大難題:

稀缺性:區塊鏈系統中資產的供應應該受到嚴格管控。應該禁止復制現有的資產,同時也應該禁止普通用戶隨意創建新資產。

訪問控制:區塊鏈系統中的參與者應該能夠使用訪問控制策略保護自己的資產。

這也是所有數字資產都需要實現的兩個關鍵特性,這些特性被認為是現實世界中物理資產的自然表征。就比如說,現實世界中稀有金屬就是很稀缺的,在現實世界中你只能花屬于自己的錢,換句話說就是自己有訪問權限的錢。

為了更好地闡述這兩個關鍵特性是如何實現的,讓我們先從以下三個示例說起:

示例1:不考慮稀缺性和訪問控制的最簡單的規則

左邊為交易腳本的格式,右邊為區塊鏈狀態的評估規則

加州大學伯克利分校將拍賣諾貝爾獎得主研究數據的NFT:金色財經報道,加州大學伯克利分校表示,與諾貝爾獎獲得者的基因編輯和癌癥免疫療法發明相關的數據將在下周作為NFT出售。使免疫療法科學家James Allison獲得了2018年諾貝爾生理學或醫學獎的數據NFT銷售將于6月2日起在基于以太坊的NFT拍賣平臺Foundation上進行。使Jennifer Doudna教授獲得2020年諾貝爾化學獎的數據拍賣將在隨后進行。該大學將保留收益的85%,并用部分資金來抵消鑄造NFT所產生的能源成本。該大學還將獲得隨后出售的NFT收益的10%。大部分收入將用于資助該大學的教育和研究,包括其區塊鏈中心Blockchain at Berkeley的工作。[2021/5/28 22:51:06]

G:=n表示使用加密貨幣數額n來更新賬戶K在區塊鏈全局狀態中存儲的加密貨幣余額。

transaction?Alice,100?表示將Alice的賬戶余額設置為100。

上述的實現方式存在兩個很嚴重的問題:

Alice可以通過不斷發起交易transaction?Alice,100?讓自己擁有無限多的加密貨幣。

Alice與Bob之間的加密貨幣轉賬也變得毫無意義,因為Bob也可以使用相同的手段向自己發送無限多的加密貨幣。

示例2:在數字資產中加入稀缺性

左邊為交易腳本的格式,右邊為區塊鏈狀態的評估規則

現在我們強制要求在交易發起時發起方Ka的賬戶余額至少為交易的金額n。

雖然這種實現方式可以解決稀缺性的問題,但是現在還存在一個問題,就是你可以將任何人的加密貨幣余額轉給自己,這是因為我們還沒有加入對誰能發起交易的檢查,也就是對加密貨幣所有權的檢查。

示例3:在數字資產中同時加入稀缺性和訪問控制

左邊為交易腳本的格式,右邊為區塊鏈狀態的評估規則

為了實現加密貨幣的訪問控制,我們可以在稀缺性檢查之前使用數字簽名機制verify_sig來檢查所交易加密貨幣的所有者,這意味著Alice可以使用她的私鑰來簽署交易并證明她是所交易加密貨幣的所有者。

健康創業公司Snark Health加入加州大學伯克利分校區塊鏈孵化器,旨在對抗新冠病:加州大學伯克利分校的DLT孵化器項目伯克利區塊鏈Xcelerator,已經將健康創業公司Snark Health納入其春季團隊。Snark Health尋求通過為數據驅動的討論和共享經驗建立框架來對抗新冠病(COVID-19),旨在快速傳播信息以改善患者治療結果。Snark平臺旨在促進個人、非政府組織和地方、州和國家各級政府機構之間交流有關新冠肺炎的最佳做法和信息。Snark目前正在推出一個非結構化的補充服務數據系統,用于向無法使用智能手機或互聯網的社區分發信息。該公司計劃開發“虛擬健康社區”和用于臨床研究的分布式框架。Snark網站還概述了開發加密貨幣的計劃,這種貨幣將允許醫生和病人通過參與Snark的數據貨幣化計劃(被稱為Hippocratic Coin)來賺錢。(Cointelegraph)[2020/3/30]

現有的區塊鏈編程語言

現有的區塊鏈編程語言往往都會被以下問題所困擾,令人欣慰的是,Move語言完美地解決了所有這些問題。主要體現在以下兩方面。

間接地表示資產。有些區塊鏈編程語言使用整數對數字資產進行編碼。這種編碼方式十分牽強,因為這些整數值與數字資產根本就不是一回事。事實上,這些區塊鏈中并沒有任何類型或數值來表示比特幣/以太幣/山寨幣!這使得編寫與數字資產交互的智能合約變得十分笨拙且容易出錯。在這些區塊鏈中實現諸如資產轉入/轉出以及將資產存儲在數據結構中這樣的操作都需要特殊的語言支持。

稀缺性是不可擴展的。這些語言往往只能表示一種稀缺資產。除此之外,稀缺性保護直接在語言語義中進行硬編碼。開發人員如果想要創建一個自定義的資產,遺憾的是他得不到該語言的一絲幫助,他將不得不重復造輪子,重新實現資產的稀缺性。

相信你可能已經看出來了,這些正是以太坊智能合約中存在的問題。ERC-20通證等自定義資產使用整數來表示資產和總供應量。每當生成新的通證時,智能合約代碼必須手動檢查交易是否滿足稀缺性。

此外,資產的間接表示會給區塊鏈帶來很多的問題,就比如說資產復制、資產重復使用、資產意外丟失等漏洞。

加州大學伯克利分校將推出區塊鏈在線課程:據ethnews消息,從下個月開始,加州大學伯克利分校將加入其他教育機構的行列,推出專注于區塊鏈技術的在線課程,結業者將獲得認證證書。[2018/6/20]

當然,除了上面兩點以外,還包括:訪問控制不夠靈活。

這些區塊鏈強制執行的訪問控制策略只有基于公鑰的數字簽名方案。與稀缺性保護一樣,訪問控制策略也被深深嵌入到語言語義中。

如果開發人員想要設置自定義的訪問控制策略,那么他還是會陷入重復造輪子的困境。

以太坊也存在這樣的問題。以太坊智能合約缺乏對使用公鑰私鑰密碼學實現訪問控制的本地語言支持。面對這種需求。開發人員不得不手動編寫訪問控制,就比如說使用OnlyOwner函數。

盡管我是以太坊的忠實粉絲,但我堅持認為以太坊在這些資產屬性方面存在欠缺。從安全方面考慮,這些資產屬性本應得到原生的語言支持。

特別是,將以太坊轉移到智能合約中需要用到動態分派(dynamicdispatch,處理編程語言的語言方法調用的一種計算機制),這又會帶來一類新的漏洞:可重入性漏洞。

這里的動態分派意味著代碼的執行邏輯將在代碼運行時確定,而不是在代碼編譯時確定。

因此,在Solidity語言中,當智能合約A調用智能合約B的函數時,智能合約B可能會運行智能合約A的設計者從未預料到的代碼,這可能會導致可重入性的漏洞。

Move語言的設計目標

一流的資源

從較高的層次上來說,Move語言中模塊/資源/程序之間的關系類似于面向對象語言中的類/對象/方法之間的關系。

Move語言中的模塊類似于其他區塊鏈語言中的智能合約。模塊聲明資源類型和程序,而這些資源類型和程序編碼用于創建,銷毀和更新所聲明資源的規則。

模塊/資源/程序只是Move語言中的一些術語。下文中我們將會用一個例子來介紹它們。

靈活性

Move通過交易腳本為Libra增加了很多靈活性。每筆Libra交易都包含一個交易腳本,該腳本實際上是交易的核心。

加州伯克利利用區塊鏈技術籌集社區資金的項目獲得當地市議會投票通過:據CCN消息,本周二周二,加利福尼亞州伯克利的市議會官員一致投票贊成副市長探索區塊鏈技術的應用以及利用“初始社區發行”(initial community offering)籌集資金以代替傳統的公債發行。[2018/5/4]

交易腳本可以用來執行一次性的行為,也可以用來執行可重用的行為。

從上面我們可以看出,Move的交易腳本通過同時支持一次性的行為和可重用的行為為Libra引入了更多的靈活性,而以太坊只能執行可重用的行為。

以太坊被稱為「可重用」的原因是智能合約中的函數可以被多次執行。

安全性

Move的可執行格式是一種類型化的字節碼,它比匯編語言更高級但比源語言更低級。在區塊鏈上字節碼驗證器會檢查字節碼的資源,類型以及內存安全性,然后字節碼解釋器會直接執行字節碼。這種設定使得Move在提供與源語言相關聯的安全保證的同時,省去了將源編譯器添加到可信計算基礎(TrustedComputingBase,TCB)以及編譯到交易執行的關鍵路徑的成本。

將Move構建成一種字節碼語言確實是一種非常簡潔的設計。由于它不需要像Solidity一樣從源代碼編譯成字節碼,因此不必擔心編譯器中可能出現的故障或漏洞。

可驗證性

我們的方法是盡可能多地在區塊鏈上執行核心安全屬性的輕量級驗證,但同時我們也在Move語言中加入了對鏈下高級靜態驗證工具的支持。

從這里我們可以看出Move更傾向于執行靜態驗證而不是在區塊鏈上執行驗證工作。盡管如此,正如白皮書末尾所述,Libra團隊未來將會開發完善驗證工具。

模塊化

Move模塊強制執行數據抽象并本地化執行資源的關鍵性操作。模塊啟用的封裝與Move類型系統強制執行的保護相結合,強強聯手可以確保模塊外部的代碼不能違反模塊類型規定的屬性。

這是一個非常好的數據抽象設計!這意味著智能合約中的數據只能在智能合約范圍內修改,而不能在外部修改。

Move語言實操

這個交易腳本的示例說明了模塊外部的惡意開發人員或粗心的開發人員不可能違反模塊資源的關鍵安全不變性。

這一部分中我們將討論在進行Move語言開發時,實際使用到的模塊、資源和程序分別是什么東西。

點對點支付交易腳本

Move語言的點對點支付交易腳本,如下面代碼所示:

amount表示所交易加密貨幣的金額,這些加密貨幣將從交易的發起方轉移給接收方payee。

代碼中有幾個新的符號,其中紅色的小字是我記的筆記:

0x0:存儲模塊的帳戶地址

currency:模塊的名稱

coin:資源類型

程序返回的coin值是一個類型為0x0.Currency.Coin的資源值

move:該值不能再次使用

copy:該值可以再次使用

代碼功能解讀:

在第一步中,發送方從存儲在0x0.Currency的模塊中調用了名為withdraw_from_sender的程序。

在第二步中,發送方通過將加密貨幣的資源值轉移到0x0.Currency模塊的存款程序中從而將資金轉移給收款人。

以下是三種會報錯的代碼示例:

1.通過將轉移加密貨幣move(coin)替換為復制加密貨幣copy(coin)來復制加密貨幣。

資源值只能被轉移。嘗試復制資源值將在字節碼驗證時引起錯誤。

因為coin是一個資源值,所以它只能被轉移。

2.通過兩次轉移加密貨幣move(coin)來重復使用加密貨幣。

在上述的示例代碼中加入一行:

0x0.Currency.deposit,move)

就可以讓發送方兩次花費同一筆加密貨幣,第一次交易的收款人是payee,第二次交易的收款人是some_other_payee。現實生活中的物理資產可以完全杜絕雙重支付,幸運的是,Move也可以做到。

3.忘記執行轉移加密貨幣move(coin)導致加密貨幣丟失。

忘記轉移資源將觸發字節碼驗證錯誤。這種機制可以保護Move開發人員不會有意或無意地丟失資源。

貨幣Currency模塊模塊入門:Move語言的執行模型三個賬戶的區塊鏈全局狀態示例

每個帳戶可以擁有零個或多個模塊和一個或多個資源值。就比如說,地址0x0處的帳戶擁有一個名為0x0.Currency的模塊和一個0x0.Currency.Coin類型的資源值。地址0x1處的帳戶擁有兩個資源值和一個模塊;地址0x2處的帳戶擁有兩個模塊和一個資源值。

需要注意的是:

交易腳本的執行只有兩種結果:成功或是失敗,不會存在中間的狀態。

模塊是在區塊鏈全局狀態中發布的長期存在的代碼。

區塊鏈全局狀態的結構為從帳戶地址到帳戶的映射。

帳戶最多只能包含一個給定類型的資源值,并且最多只能包含一個具有給定名稱的模塊。

所聲明模塊的地址是類型的一部分。

開發人員仍然可以通過自定義的包裝器資源來實現一個帳戶擁有多個給定資源類型的實例。(resourceTwoCoins{c1:0x0.Currency.Coin,c2:0x0.Currency.Coin})

開發人員仍然可以通過名稱引用資源而不會產生任何沖突,就比如說,你可以使用TwoCoins.c1和TwoCoins.c2這兩個名稱引用這兩個資源。

聲明加密貨幣資源:

在名為Currency的模塊中定義一個由模塊管理的名為Coin的資源類型。

需要注意的是:

Coin是一種結構類型,其字段容許的值類型為u64。

只有Currency模塊的程序能夠創建或銷毀coin類型的值。

其他模塊和交易腳本只能通過模塊提供的公共可訪問的程序來寫入或引用值字段。

實現存款操作

這段程序將Coin資源作為輸入,并將其與存儲在收款人payee帳戶中的Coin資源組合,具體的步驟如下:

銷毀輸入的加密貨幣并記錄其數值。

獲取對存儲在收款人帳戶下的Coin資源的唯一引用。

將程序傳遞過來的加密貨幣的數值加到收款人賬戶余額中,并更新收款人賬戶余額。

需要注意的是:

Unpack,BorrowGlobal是內置程序。

Unpack是唯一一種刪除類型為T的資源的方法。它將類型為T的資源作為輸入,刪除它,并返回綁定到資源字段的數值。

BorrowGlobal將地址作為輸入,并返回對該地址下唯一的T實例的引用。

&mutCoin是對Coin資源的可變引用,而不是對Coin。

實現撤銷存款withdraw_from_sender:

這個程序分為三步:

獲取對發送方帳戶下唯一的Coin類型資源的引用。

用輸入的數額減少引用的Coin的數值。

創建并返回值為更新后金額的新加密貨幣。

需要注意的是:

任何人都可以調用存款函數deposit,但撤銷存款函數withdraw_from_sender具有訪問控制策略,因而只能被加密貨幣的所有者調用。

獲取交易發起人賬戶函數GetTxnSenderAddress類似于Solidity語言中的msg.sender。

除非滿足什么條件否則就拒絕函數RejectUnless類似于Solidity語言中的require。如果此項檢查失敗,則當前交易腳本會停止執行,并且它執行的任何操作都不會更新區塊鏈全局狀態。

Pack也是一個內置程序,它主要用來創建一個T類型的新資源。

與Unpack一樣,Pack只能在資源T的聲明模塊中調用。

寫在最后

現在你已經了解了Move語言的主要特征,基本語法以及它與以太坊的差異。

最后,如果你想從事Move語言開發,我強烈建議你閱讀Move語言原始的白皮書。白皮書中包含許多Move語言的設計原則以及許多很好的參考資料。

Tags:MOVMOVE區塊鏈加密貨幣movr幣有前景嗎move幣判決玩區塊鏈掙的錢合法嗎加密貨幣是什么意思是傳銷

比特幣交易所
KING:巴比特首發 | 跨鏈的投資機遇和三池模型分析法

俗話說:火車一響,黃金萬兩,用在跨鏈上很合適,類似的話還有一句:要致富,先修路。跨鏈就是區塊鏈之間的公路和鐵路,通過把現有眾多的公鏈、即將出現的大量應用鏈連接起來,跨鏈技術有望釋放去中心化應用的.

1900/1/1 0:00:00
加密貨幣:2019年會迎來比特幣的高光時刻嗎?

比特幣從誕生之初的白菜價到如今的萬元美金之上,十年間歷經暴跌暴漲,從初始計算,如今的價格稱得上是保持了百萬倍漲幅.

1900/1/1 0:00:00
TER:澳本聰在法庭遭質疑:涉嫌偽造文件 數百億美元成謎

6月28日,自稱是比特幣創造者的澳大利亞計算機科學家CSW在佛羅里達西棕櫚灘的美國地方法院聽證會上面臨了嚴厲的盤問,因為他說自己無法提供一串早期比特幣的地址列表,其中存有數百億美元的財富.

1900/1/1 0:00:00
FRST:加密貨幣的天堂何在? 盤點7大對加密貨幣免稅的國家

加密貨幣作為一項新興事物,還沒有被很多國家所認可,所以加密貨幣如何征稅的具體方案離落地還很遠,但不少國家已經有了要對加密貨幣征稅的苗頭。不過也有一些國家直接做到了對加密貨幣免稅.

1900/1/1 0:00:00
ETH:保護用戶資產安全,Coinbase要成立專屬保險公司

7月10日,業內消息人士表示,加密貨幣交易所Coinbase正在保險經紀巨頭怡安的幫助下,就成立合規的專屬保險公司進行談判.

1900/1/1 0:00:00
加密貨幣:加密交易所的新戰場:高頻交易

一些加密貨幣交易所正在“悄悄地”為高頻交易鋪上了紅地毯,也讓不少交易員蠢蠢欲動。安置到了離交易所的計算機很近的地方,以縮短交易指令通過光纜以光速旅行的距離.

1900/1/1 0:00:00
ads