區塊鏈程式設計
隨著區塊鏈的發展,代表所有權的機制也在發展。 位元幣是使用「未用交易輸出」或utxo定義的所有權模型構建的 。
尤其是,libra團隊基於受線性型別:資源啟發的新所有權模型,為其movevm定義了新的程式設計模型。
資源是一種直接用程式語言表示資產所有權的新方法。 工程師經常使用「所有權」一詞作為隱喻,以跟蹤哪個**負責管理某種資料結構或系統資源。
這種隱喻在程式設計環境中最常見,在這種環境中,記憶體管理沒有完全從程式設計師那裡抽象出來,並且說**「擁有」乙個物件就是說**必須管理和釋放分配給該物件的記憶體。
資源擴充套件了這個想法,因此我們可以利用某些機制來管理以前的程式語言中的隱喻「所有權」,並使用它來管理對本地數字資產的真實所有權。
來自move簡介 :
move的主要功能是能夠定義自定義資源型別。最後兩點非常重要:資源型別用於對具有豐富可程式設計性的安全數字資產進行編碼。
移動型別系統為資源提供了特殊的安全保證。
移動資源永遠不能被複製,重用或丟棄。
資源型別只能由定義該型別的模組建立或銷毀。
這些保證是由move虛擬機器靜態執行的[...]
天秤座貨幣是作為一種資源型別實現的,並且在該語言中沒有特殊的地位;
每個move資源都享有相同的保護。
1.資源物件的特殊狀態必須由執行時(「移動虛擬機器」)強制執行; 如果它們只是編譯器的抽象,那麼惡意**很容易破壞價值保證。
2.但是! 如果確實執行了這些規則,則可以允許將網路中最重要的資產-本機令牌安全地儲存在由使用者提交的**控制的資料結構中。 強大!
考慮資源的最簡單方法是通過使用諸如cryptokitty之類的不可替代令牌(nft)進行示例思考。每個cryptokitty是不可分割的,不可複製的,並且可以具有乙個直接所有者,該所有者直接與resource程式設計構造匹配。
在以太坊(ethereum)等ledger模型中,所有cryptokitties都作為乙個巨型列表儲存在單個智慧型合約中。
通過將每個所有者的帳戶id儲存在**分類帳中來跟蹤每個kitty的所有權,而更改kitty所有權的唯一方法是聯絡該**分類帳,並要求其更新與該kitty相關的帳戶id。
contract kittyledger
priv let kitties:
fun transfer (kittyid: int , newowner: accountid )
}}transaction(signer: account)
在資源模型中,kitty本身表示為乙個resource物件,它直接儲存在擁有它的帳戶中。 就像在現實世界中一樣,所有權是通過擁有來表示的。
您無需檢視**分類帳即可檢視您是否擁有某物,可以將其儲存在帳戶中,也可以不用。 而且,如果您擁有它,則可以轉移它或以其他方式對其進行控制,如果您沒有 ,則無法捕獲或更改它。
contract cryptokitties
// the resource objects that can be stored in the collection
resource cryptokitty {}
}transaction(signer: account)
注意:為了專注於分類帳模型和直接所有權模型之間的差異,以上兩個示例都忽略了訪問控制,定義每個變數以及實時**需要擔心的其他因素等問題。
簡而言之,將某物標記為「資源」告訴程式設計環境該資料結構代表有形的價值,並且與該資料結構互動的所有**都需要遵循一系列特殊規則,以維持該資料結構的價值。 。
那麼,這些規則是什麼?
1.每個資源在任何給定時間都恰好存在於乙個地方。不能通過程式設計錯誤或惡意**來複製或意外刪除資源。
2.資源的所有權由其儲存位置定義。無需諮詢**分類帳即可確定所有權。
3.對資源上方法的訪問僅限於所有者。例如,只有cryptokitty的所有者才能發起繁殖操作,從而導致新kitty的誕生。
如引言中所述,智慧型合約特別適合於管理有價值資產的所有權,但是大多數程式語言(即使是專門為智慧型合約設計的語言)也沒有用於管理所有權的任何本機抽象。 在協議級別包括這樣的抽象顯然是乙個巨大的勝利。
但是,使用資源還有其他一些次要的好處,每個優點本身都很重要:
可擴充套件的智慧型合約平台需要某種方式來收取「州租金」,以便儲存在區塊鏈上的資料被支付或從工作集中刪除。
使用分類賬模型,很難知道應該由誰支付租金。 例如,cryptokitties合同代表著數以萬計的玩家,擁有近200萬只kitty和超過111mb的鏈上資料。 以太坊無法向所有這些kitty所有者公平地收取租金。
通過資源型別使用直接所有權模型,每只貓咪都會與該人的其他資產一起儲存在其所有者的帳戶內。 誰需要為此儲存付費,責任很明確。 此外,個人使用者(在其客戶端軟體的幫助下)可以存檔未使用的資產,以降低成本並減少網路負載。
將分類帳模型用於所有權會限制可用的所有者關係的種類。 例如,erc-721為nft定義了一種所有權模型,該模型假定只有以太坊位址才能擁有nft。 但是,資產本身擁有其他資產的想法(例如,擁有一副漂亮太陽鏡的cryptokitty)在某些用例中非常有趣,並且需要建立新的規範(erc-998)。
erc-998非常強大,但它也比erc-721複雜得多。 正確實施它非常困難,並且將其功能追溯應用於現有erc-721資產實際上是不可能的。
直接所有權模型允許將使用「資源型別」建模的任何資產安全地儲存在系統中的任何位置,包括在其他資產「內部」(如果適用)。
所有的安全性和價值保證都可以由執行時系統維護,同時為開發人員提供了創造性的靈活性,而又不會帶來過多的複雜性。
資源型別提供了從基於功能的安全性模型中實施「功能」概念所需的所***。 功能是定義安全系統的強大機制,可以使遵守最小特權原則 (安全系統中的常見最佳實踐)更加容易。
基於功能的安全性模型通常被認為更容易推理(增強了安全性),同時具有更大的靈活性。
以太坊歷史上最著名的智慧型合約錯誤是由於重入問題引起的,solidity開發人員需要時刻保持警惕,以防止引入容易受到重入攻擊的邏輯流。
幸運的是,在resource物件上定義的方法不能成為任何可重入漏洞利用的受害者。
這似乎是乙個大膽的主張! 但是,它自然地遵循資源的定義方式:每個資源都有乙個所有者,只有資源的所有者才能在其上呼叫方法。 如果resource方法是「堆疊上的」,則我們知道對該物件的單個所有權引用已在使用中; 我們從該方法內部呼叫的任何**(無論是間接呼叫)根本不可能再次獲得對該物件的引用以進行可重入方法呼叫。
當然,直接使用全域性共享狀態(繞過resource物件的使用)仍然可以建立易受重入錯誤影響的**。
這就是為什麼慣用的cadence樣式將對所有共享狀態使用resources的原因; 精通資源的精明合約作者無需再考慮可重入的錯誤!
去年,在對更好的智慧型合約語言進行了學術
研究之後 ,flow開發團隊正在調查在區塊鏈環境中使用線性型別。 幾乎在同一時間,天秤座團隊發布了最初的公告,包括movevm的技術細節。
資源型別的強大功能令我們震驚,它是flow智慧型合約程式語言cadence的定義功能之一。 資源提供了比evm或wasm更為豐富的可組合性選項,並且非常適合數字資產(尤其是nft!)。
cadence具有舒適的,符合人體工程學的語法,非常易於閱讀。 它使用強大的靜態型別系統來最大程度地減少執行時錯誤,並允許所有方法,介面和事務包括前置條件和後置條件以強制執行預期的行為。 我們認為,這將導致一種語言,比任何其他替代方法更易於學習,更易於審核,最終最終將提高生產力。
您可以在flow playground上試用cadence,該服務今天提供,**為play.onflow.org
翻譯自:區塊鏈程式設計
區塊鏈 資源
學習資源彙總 一 位元幣 1.1 位元幣 必看經典 1.2 書籍推薦 精通位元幣 技術原理乾貨 1.3 pow演算法理論簡介 theproof of work concept 1.4 介紹文章 位元幣的原理及運作機制 入門推薦 二 區塊鏈 2.1 書籍推薦 區塊鏈技術指南 乾貨講解全面 2.2 書籍...
舌尖上的區塊鏈 校園食品區塊鏈溯源
當今社會經濟飛速發展,人們生活水平不斷提高,也加速了食品生產的快速發展和各類新型食用產品,當然也隨之出現了一系列食品安全問題。食品是人類生存的第一需要,食品安全直接關係著人民群眾的生活,影響我們每乙個人的健康,更關係著子孫後代的幸福和民族的興旺昌盛。食品安全問題,是乙個公眾關注度很高的社會問題,尤其...
區塊鏈節點和區塊區別 區塊鏈的「區塊」和「鏈」
2017年以來,區塊鏈大火,但是其技術相對生澀。很多 紛紛用通俗易懂的漫畫方式,簡單明瞭的體現出來了區塊鏈的區別和特點。區塊鏈由以前的一人記賬,變成了大家一起記賬的模式,讓賬目和交易更加安全,這就是分布式資料儲存。此外,區塊鏈相關的技術除了分布式儲存,還有去中心化 智慧型合約 加密演算法等等。分布式...