前言
EOS的賬戶和權(quán)限系統(tǒng)設(shè)計(jì)的比較復(fù)雜嵌纲,但擴(kuò)展性相當(dāng)好在抛。與比特幣或以太坊不同,最明顯的特點(diǎn)就是支持自定義賬戶權(quán)限和多簽名機(jī)制返吻。有必要單獨(dú)用篇文章進(jìn)行說明姑子。
本篇內(nèi)容大部分翻譯自官方文檔
官方文檔:
https://developers.eos.io/eosio-nodeos/docs/accounts-and-permissions
關(guān)于
wallet
和key
的說明見這篇文章
EOS開發(fā)(三)在私鏈創(chuàng)建管理錢包、生成導(dǎo)入密鑰對测僵、創(chuàng)建賬戶街佑,本篇著重說明account
和Permissions
概述
賬戶是儲存在區(qū)塊鏈上的一個(gè)人類可讀的標(biāo)識。每個(gè)賬戶都有兩個(gè)默認(rèn)權(quán)限捍靠,稱為owner
和active
沐旨。開發(fā)者們也可以提出自定義名稱的權(quán)限。每個(gè)權(quán)限的使用都有一個(gè)門檻榨婆,必須和其簽署交易要求的最低簽署人數(shù)相匹配(這句話不好理解磁携,后面會有例子說明)。
授權(quán)和權(quán)限
每個(gè)賬戶自帶兩個(gè)默認(rèn)權(quán)限
owner
表示對一個(gè)賬戶的所有權(quán)良风。只有很少的交易需要用到此權(quán)限谊迄,一般只會在修改賬戶權(quán)限的時(shí)候用到闷供。建議將此權(quán)限的私鑰放入冷錢包儲存。此權(quán)限可以重置其他權(quán)限统诺。active
權(quán)限用來進(jìn)行轉(zhuǎn)賬歪脏,為節(jié)點(diǎn)投票,以及其他高級別的賬戶修改
簡單來說粮呢,owner
權(quán)限可以執(zhí)行所有的操作唾糯,而active
權(quán)限則可以執(zhí)行除了更改owner
權(quán)限對應(yīng)的密鑰對以外的全部操作。
每一個(gè)權(quán)限都有一個(gè)父權(quán)限鬼贱。父權(quán)限擁有改變所有子權(quán)限的能力移怯。
除了自帶的權(quán)限外,每一個(gè)賬戶可以擁有自定義的權(quán)限这难,以便賬戶的擴(kuò)展性管理舟误。自定義權(quán)限不可思議的靈活,在執(zhí)行時(shí)可以產(chǎn)生出許多可能的用例姻乓。大多數(shù)情況下由開發(fā)者社區(qū)決定如何使用嵌溢,以及哪種會議決定是否使用。
自定義權(quán)限是隨意且無效的蹋岩,直到它們被關(guān)聯(lián)到某個(gè)行為上赖草。
權(quán)限可以由給定的授權(quán),指定為一個(gè)或多個(gè)公鑰或者一個(gè)有效的賬戶名組成
組合使用
下面的例子是對上面內(nèi)容的一些典型使用
默認(rèn)賬戶配置(單簽名)
下面是一個(gè)剛創(chuàng)建的賬號的配置信息剪个,它的owner
和active
權(quán)限都各有一個(gè)key
秧骑,每個(gè)key
的權(quán)限權(quán)重都為1
,門檻也是1
扣囊。所以默認(rèn)配置下乎折,授權(quán)簽署一個(gè)行為只需要一個(gè)key
進(jìn)行簽署。
@bob
的賬戶授權(quán)示例
Permission | Account | Weight | Threshold |
---|---|---|---|
owner | EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch | 1 | 1 |
active | EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX | 1 | 1 |
在此賬戶中侵歇,由于每個(gè)權(quán)限的授權(quán)門檻都為1
骂澄,且每個(gè)key
的權(quán)重也為1
,所以當(dāng)簽署某個(gè)交易時(shí)惕虑,只需要對應(yīng)的key
進(jìn)行簽署即可坟冲。
多簽名賬戶和自定義權(quán)限
下面的例子虛構(gòu)了一個(gè)名為@multisig
的賬戶。此方案中溃蔫,兩個(gè)用戶擁有此賬戶的owner
和active
權(quán)限健提。此外,還有一個(gè)名為publish
的權(quán)限酒唉,此權(quán)限由三個(gè)用戶擁有矩桂。
@multisig
的賬戶授權(quán)示例
由于owner
權(quán)限的門檻為2
沸移,而@bob
和@stacy
的權(quán)重僅為1
痪伦,所以如果要簽署owner
權(quán)限級別的交易侄榴,需要二者都要進(jìn)行簽署。
active
權(quán)限的門檻為1
网沾,@bob
和@stacy
的權(quán)重也為1
癞蚕,所以如果要簽署active
權(quán)限級別的交易,需要其中一人進(jìn)行簽署即可辉哥。
此賬戶還有一個(gè)名為publish
的自定義權(quán)限桦山。這里我們假設(shè)此權(quán)限的作用是通過某個(gè)博客的DApp
,通過@multisig
賬戶發(fā)布文章醋旦。此權(quán)限的門檻為2
恒水,而@bob
和@stacy
的權(quán)重為2
,而另一個(gè)公鑰的權(quán)重為1
饲齐。所以@bob
和@stacy
都可以分別單獨(dú)簽署此交易钉凌,而另一個(gè)公鑰需要加上@bob
或@stacy
其中一人,才可共同簽署此交易捂人。
因此御雕,上面的權(quán)限表暗示@bob
和@stacy
,作為帳戶的所有者滥搭,具有類似于主人或編輯者的高級權(quán)限酸纲。雖然這個(gè)原始示例在可伸縮性方面存在限制,并且不一定是一個(gè)好的設(shè)計(jì)瑟匆,但是它充分展示了EOSIO
權(quán)限系統(tǒng)的靈活特性闽坡。
此外,注意在上述表格中愁溜,權(quán)限可以同時(shí)使用帳戶名和密鑰進(jìn)行設(shè)置无午。乍一看,這似乎微不足道祝谚,但它確實(shí)提出了一些靈活性的附加維度宪迟。
其他
我們在使用以太坊或者比特幣時(shí),生成密鑰對交惯,公鑰就是地址次泽,表示賬戶。幣存放在公鑰中席爽,知道了你的私鑰就可以操作你的賬戶意荤,把幣轉(zhuǎn)走。一個(gè)賬戶只有一個(gè)實(shí)際控制人只锻,誰掌握著私鑰誰就有所有權(quán)限玖像。
而在eosio
中,賬戶由一個(gè)人類可讀的字符串組成齐饮,就像其他用戶名一樣捐寥。每個(gè)賬戶中有不同的權(quán)限笤昨,每個(gè)權(quán)限由一個(gè)或多個(gè)賬戶或者密鑰對組成。要使用某個(gè)權(quán)限握恳,需要該權(quán)限下一個(gè)或多個(gè)賬戶或者密鑰對進(jìn)行簽署(取決于權(quán)重和門檻)瞒窒。
將上面的例子簡化一下,我們可以為我們的賬戶乡洼,自定義一個(gè)發(fā)布博客文章的權(quán)限崇裁,并生成一個(gè)密鑰對。我們可以將此密鑰對中的私鑰交給某個(gè)人束昵,讓他幫我們發(fā)布文章拔稳。但他也只能用此賬號發(fā)布文章,并不能操作賬戶中的代幣锹雏,因?yàn)樗麤]有轉(zhuǎn)賬權(quán)限的私鑰壳炎。