深刻理解eos帳戶體系 active和action

在eos中,帳戶是一個很是重要的概念。 帳戶分爲兩部分組成 一種是active 一種是action. 智能合約本質上來說就是一個action加上一個回饋腳本程序。任何智能合約都有這倆個部分組成。安全

那麼有一個問題出現了: 對不一樣帳戶所作的事情不一樣, 有一些敏感的操做就要求最高權限才能使用。架構

用戶帳戶能夠自定義分級 :建立帳戶eos默認分爲owner和active 。不過爲了方便起見,通常設置兩個相同。 active就是以前說的操做智能合約的權限。權限是基於權重管理的。
在這個權限下面的action能夠作任何事情。權限區分使用/ 區分或者.來進行區分。app

智能合約帳戶分級和分組:這裏須要主要若是用戶擁有了某種權限。 就能夠執行當前所在組的全部操做。it

權限和帳戶action的映射關係: 帳戶 active action 權限io

合約即帳戶 帳戶及合約。 action active 即權限和動做兩部分組成。基礎

原文:名詞解釋:本篇文章出現不少 「Action」 和 「Active」,Action (動做)爲 EOS 中帳戶能夠接受的動做,也就是別人能夠對你作什麼;Active 爲 EOS 帳戶權限的一種。權限

在 EOS 裏,不管是真人用戶仍是智能合約,本質上都是一個帳戶(Account)。或者說,真人帳戶也是一個智能合約,均可以對外聲明別人能夠對他作什麼動做(好比社交合約裏的發帖),EOS 官方稱之爲 「Action」。好比某個帳戶能夠聲明一個叫 「SayHi」 的 Action,別的帳戶就可使用 Active 權限(這裏能夠參考以前的文章)對他執行 SayHi 動做。帳戶還能夠聲明對 Action 的迴應方式,好比別人對他 SayHi 後能夠回送一個金幣什麼的。因此 EOS 裏 「智能合約」 的定義就是:帳戶定義的 Action,以及對 Action 的迴應腳本(程序)。任何智能合約都是由這兩個要素組成的。map

這種架構天然而然引起了一個問題:對於複雜的智能合約帳戶,有些 Action 功能比較簡單,好比就是一個查詢,安全性要求不高,便利性要求高。還有些 Action 很是敏感,好比提現,便利性要求不高,安全性要很是高。用戶帳戶使用本身的 Active 權限就能夠執行全部智能合約的 Action,顯然是不合理的。EOS 爲了解決這個問題,採起了三步:1.(用戶)帳戶自定義分級權限。2.(智能合約)帳戶 Action 分級。3.用戶權限與智能合約 Action 之間的映射(mapping)。再次強調,這裏只是爲了表達方便,將帳戶分爲「用戶」與「智能合約」,其實這兩者在 EOS 裏沒有區別。用戶自己就是智能合約,智能合約也是其餘智能合約的「用戶」。程序

(用戶)帳戶自定義分級權限
EOS 裏,帳戶默認會有兩種權限:Owner 和 Active。Owner 是最高權限,Active 就是以前提到的操做智能合約權限。全部權限都是基於權重和閾值管理的(詳見以前的文章 URL)。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。

做者:許小笛

溝通交流:1354439

相關文章
相關標籤/搜索