摘要:為了解決這個問題,采取了三步用戶賬戶自定義分級權限。用戶權限與智能合約之間的映射。圖中不難看出,權限是賬戶最高權限,可以執行權限。如果沒有發現任何符合的映射,會直接檢查本次執行是否滿足了權限,若不足,會檢查。
到底什么叫“智能合約”?
名詞解釋:本篇文章出現很多 “Action” 和 “Active”,Action (動作)為 EOS 中賬戶可以接受的動作,也就是別人可以對你做什么;Active 為 EOS 賬戶權限的一種。閱讀本文前建議先閱讀之前的文章:https://mp.weixin.qq.com/s/K6...
在 EOS 里,不論是真人用戶還是智能合約,本質上都是一個賬戶(Account)。或者說,真人賬戶也是一個智能合約,都可以對外聲明別人可以對他做什么動作(比如社交合約里的發帖),EOS 官方稱之為 “Action”。比如某個賬戶可以聲明一個叫 “SayHi” 的 Action,別的賬戶就可以使用 Active 權限(這里可以參考之前的文章)對他執行 SayHi 動作。賬戶還可以聲明對 Action 的回應方式,比如別人對他 SayHi 后可以回送一個金幣什么的。所以 EOS 里 “智能合約” 的定義就是:賬戶聲明的 Action,以及對 Action 的回應腳本(程序)。任何智能合約都是由這兩個要素組成的。
這種架構自然而然引發了一個問題:對于復雜的智能合約賬戶,有些 Action 功能比較簡單,比如就是一個查詢,安全性要求不高,便利性要求高。還有些 Action 非常敏感,比如提現,便利性要求不高,安全性要非常高。用戶賬戶使用自己的 Active 權限就可以執行所有智能合約的 Action,顯然是不合理的。EOS 為了解決這個問題,采取了三步:1.(用戶)賬戶自定義分級權限。2.(智能合約)賬戶 Action 分級。3.用戶權限與智能合約 Action 之間的映射(mapping)。再次強調,這里只是為了表達方便,將賬戶分為“用戶”與“智能合約”,其實這二者在 EOS 里沒有區別。用戶本身就是智能合約,智能合約也是其他智能合約的“用戶”。
(用戶)賬戶自定義分級權限EOS 里,賬戶默認會有兩種權限:Owner 和 Active。Owner 是最高權限,Active 就是之前提到的操作智能合約權限。所有權限都是基于權重和閾值管理的。EOS 在此基礎上,增加了分級并分組的自定義權限,如下圖所示。
途中箭頭方向就是指向“母權限”或者更高級權限。圖中不難看出,Owner 權限是賬戶最高權限,可以執行 Active 權限。Active 權限可以執行 Family 權限和 Lawyer 權限。 Family 權限可以執行 Friends 權限。反過來,低級權限不能代替執行更高級的權限。不同級別的權限用 "/" 或"." 分隔,比如圖中的 Friends 權限就可以表示為 “@User.Active.Family.Friends”。
(智能合約)賬戶 Action 分級與權限分級類似,賬戶 Action 也可以分級并分組,如下圖所示(圖中的 Message 也就是 Action)。
這個智能合約賬戶叫“@Exchange.Contract”,首先定義了 Withdraw(提現) Action,接下來是一組 Action 名叫 “Trade(交易)組”,組里有三個 Action:Buy(買入)、Sell(賣出)、Cancel(取消)。Action 同樣遵循“向下兼容”,也就是如果某用戶賬戶的某權限擁有“Trade組”的映射,就可以執行“Trade組”的所有 Action。不同級別的 Action 用 "/" 或"." 分隔,比如圖中的 Buy Action 就可以表示為 “@Exchange.Contract/Trade/Buy”。
權限與 Action 之間的映射最后一步,我們要將前兩步連接起來,也就決定什么權限能執行什么 Action,如下圖的左下部分。
首先看映射1,我們將 @Exchange.Contract 合約的所有 Action 映射到了 Family 權限,也就是使用 @User 用戶的 Family 權限(或者更高權限)可以執行 @Exchange.Contract 合約的所有 Action。映射2表示將 @Exchange.Contract 合約的 Withdraw(提現)Action 映射到了 Lawyer 權限,所以 Lawyer 權限可以執行 Withdraw Action。但無法執行其他 Action。3 表示 Trade 組并沒有特殊映射,不過因為 @Exchange.Contract 合約的所有 Action 都映射到了 Family 權限,可以直接通過 Family 權限執行,或者使用更高級的 Active 甚至 Owner 權限。
如果 @User 賬戶想執行 @Exchange.Contract/Trade/Buy 這個 Action,系統會檢查 @User 賬戶是否定義了 @Exchange.Contract/Trade/Buy 映射,沒有的話會檢查 @Exchange.Contract/Trade 映射,接著會檢查 @Exchange.Contract 映射,發現 @Exchange.Contract 映射到了 Family 權限,就會檢查本次執行是否滿足了 @User.Family 權限(達到閾值),若 Family 權限不足會檢查 @User.Active,接著會檢查 @User.Owner。
如果沒有發現任何符合的映射,會直接檢查本次執行是否滿足了 @User.Active 權限,若不足,會檢查 @User.Owner。
【許曉笛】EOS 上線前,先搞懂這兩個基本概念
圓方圓學院匯集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。
公開課地址:https://ke.qq.com/course/345101
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24434.html
摘要:的跟其他區塊鏈項目是類似的,都是一個基本功能本地儲存密鑰,僅此而已。公網上線后,一定要將存有密鑰的加密,并且將文件單獨備份好。字面意思是賬戶,但我覺得有個概念更適合法人。代幣就是由持有的。對于權限,則需要列表里至少兩個賬戶的授權才能行使。 如果你曾經嘗試在本地運行 EOS 測試節點,會發現編譯、運行并不是特別復雜,但官方教程里兩個概念很容易把人搞暈: Account(賬戶) 和 Wal...
摘要:所以想要實現真正實用的智能合約平臺,就要脫離比特幣系統的架構,尋找新的系統組織形式。比特幣和以太坊之所以設計了手續費機制,就是防止大量垃圾交易使得系統擁堵。 區塊鏈系統中,去中心化程度與效率之間天然地存在矛盾關系。 如果區塊鏈智能合約系統想追求類似比特幣的去中心化程度,理論上效率就會大打折扣。現實也是這樣的:比特幣每秒鐘只能處理7筆左右的交易,每一筆交易要用至少30分鐘才能確認,這種效...
摘要:再配合轉賬延時,為用戶找回被盜賬戶提供了時間上的可能。只能轉移走所有資產并丟棄這個賬戶。總結使用通過獨特的權限管理機制,結合延時加密和社會學手段,將賬戶被盜遺失的可能性將到了最低程度。 EOS 針對以下兩種情況設計了應急措施: 賬戶被盜(私鑰被盜或有權限的其他賬戶被盜) 賬戶遺失(私鑰遺失或有權限的其他賬戶遺失) 1.賬戶被盜 EOS 有可能會強制要求所有賬戶的 Owner 權限必...
摘要:所以最簡單的智能合約只需實現文件。我們看到文件中已經聲明了這個,并說明了這個的李嘉圖合約,大概意思是本合約的輸入為一串字符,本合約意圖是打印輸出,沒有其他效果。 Hello World! 稍微了解 EOS 系統,你就會知道 EOS 的智能合約基于 WebAssembly(WASM) 技術,這種技術在性能和跨平臺兼容性之間取得了很好的平衡,通過將原始代碼編譯成字節碼,使得代碼可以在多種平...
摘要:相關文章和視頻推薦許曉笛智能合約案例解析圓方圓學院匯集大批區塊鏈名師,打造精品的區塊鏈技術課程。 Daniel Larimer 在他的博客介紹了EOS新的智能合約架構(EOS團隊的開發速度實在是太嚇人,根本追不上)。他給出了最簡單的一個新幣種的智能合約代碼,僅有49行就能完成一個新幣種的開發,一個新的愛息歐就誕生了。讓我們一步一步實現吧。 首先實現私有成員,建立一個 account 結...
閱讀 2684·2021-10-22 09:55
閱讀 2008·2021-09-27 13:35
閱讀 1267·2021-08-24 10:02
閱讀 1478·2019-08-30 15:55
閱讀 1198·2019-08-30 14:13
閱讀 3471·2019-08-30 13:57
閱讀 1975·2019-08-30 11:07
閱讀 2447·2019-08-29 17:12