解讀EOS.IO的賬戶和權(quán)限模型之一——權(quán)限定義

基本概念

先看看這篇文章,了解下EOS.IO權(quán)限模型的三個基本概念:

  • Wallets(錢包)——錢包是EOS.IO提供的用于管理密鑰對的客戶端,錢包支持鎖定和密碼解鎖。
  • Accounts (賬戶)——賬戶是公示在區(qū)塊鏈上的人工易讀(不是公鑰或短地址?。。。┑拿?。
  • Authorities and Permissions(權(quán)限及授權(quán)驗證)——每個賬戶都內(nèi)置owneractive權(quán)限,owner冷藏用于恢復(fù)其他權(quán)限。

權(quán)限(Permission)定義的目標

EOSIO的賬戶權(quán)限定義的目標在白皮書中這樣敘述:

EOS.IO software allows each account to define a mapping between a Named Message Handler Group of any account and their own Named Permission Level. For example, an account holder could map the account holder's social media application to the account holder's "Friend" permission group. With this mapping, any friend could post as the account holder on the account holder's social media. Even though they would post as the account holder, they would still use their own keys to sign the message. This means it is always possible to identify which friends used the account and in what way.

這段話明確了EOSIO允許賬戶持有者部分讓度權(quán)限,而且權(quán)限受讓者是用自己持有的密鑰簽名,以便明確區(qū)分授權(quán)行為是如何發(fā)生的。

賬戶(Account)如何生成

權(quán)限是建立在賬戶的基礎(chǔ)之上的,那么賬戶又是如何產(chǎn)生的呢?
首先要明確的一點是:
無論賬戶還是權(quán)限,它們一定是通過簽名交易(signed transaction)來定義并在區(qū)塊鏈中公示的。——這是其他節(jié)點在執(zhí)行合約時進行權(quán)限驗證(Authorities)的基礎(chǔ)。

來看看利用EOSIO的命令交互,如何生成一個新賬戶:
$ eosc create account inita tester EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA
命令的說明及返回在這里
返回JSON文本比較長,不過讀懂它的每一部分含義你也就理解了EOSIO權(quán)限模型的設(shè)計思路。這里我們先看看與本文相關(guān)的幾處:

  • 每個賬戶默認攜帶owneractive兩個權(quán)限,分別對應(yīng)一對密鑰(*其中owner密鑰冷藏保存,通常用active來干活,方便用owner恢復(fù)active
  • 該命令用賬戶initaactive權(quán)限簽名提交了一個交易
  • 交易調(diào)用了內(nèi)置合約eosnewaccount行為
  • 命令傳入的公鑰分別作為新產(chǎn)生的tester賬戶的owneractive權(quán)限公鑰

這里一定有人會問:那么這個最初的賬戶inita是由什么賬戶來簽名生成的呢?——它是在啟動區(qū)塊鏈時,在創(chuàng)世區(qū)塊的配置config.ini中直接定義的。
參考文檔在這里

權(quán)限(Permission)如何定義

上面我們看到,對于賬戶默認攜帶的owneractive權(quán)限,只需要在建立賬戶時指定就好。那么賬戶如何自定義權(quán)限呢?
這里 后續(xù)的Create or Modify Permissions 章節(jié)。
權(quán)限定義的關(guān)鍵在于那個描述權(quán)重的JSON:

{
  "threshold"       : 100,    /*An integer that defines cumulative signature weight required for authorization*/
  "keys"            : [],     /*An array made up of individual permissions defined with an EOS PUBLIC KEY*/
  "accounts"        : []      /*An array made up of individual permissions defined with an EOS ACCOUNT*/
}
  • threshold給出滿足此權(quán)限驗證至少要達到(當然比它高也滿足驗證)的權(quán)重。
  • keys 定義了在本權(quán)限定義中,可獲得的權(quán)重的密鑰集合。
  • accounts定義了可獲得權(quán)重的賬戶+權(quán)限公鑰簽名集合。
    即是說,后兩者是以不同的形式給出可獲得權(quán)重的簽名集合,實施中可根據(jù)具體情況靈活運用。
    另外可以看出,目前的權(quán)限定義采用了覆蓋的形式,即:對同一權(quán)限的重復(fù)定義,后者會覆蓋前者。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 草案:2017 年 6 月 26 日 (@dayzh (https://steemit.com/@dayzh)) ...
    區(qū)塊鏈生存指南閱讀 2,542評論 0 4
  • 1. 賬戶與錢包1.1 創(chuàng)造并管理錢包1.2 生成EOS Keys并導(dǎo)入1.3 備份您的錢包1.4 創(chuàng)建賬戶 2....
    cenkai88閱讀 4,156評論 1 7
  • 家是港灣,愛是退路,愿大家都能找到自由與幸福。 ①親密且獨立 在親密關(guān)系中,我們不該將戀人當作自己的理想父母去索取...
    鯊魚小姐閱讀 276評論 2 3
  • 今天是中秋節(jié),祝大家中秋節(jié)快樂。 估計今天是中秋節(jié)吧,所以對家里的那個女人——媽媽,無敵想念。今年中秋節(jié)小周和弟弟...
    獨立周閱讀 191評論 0 1
  • 特價機票都這么吭么?再也不想做春秋的了,惡心他媽給惡心開門惡心到家啦……整理心情,拍個美照,迎接上海美博會
    杜奡閱讀 225評論 0 2

友情鏈接更多精彩內(nèi)容