一個(gè)賬戶是一個(gè)人可讀的,存在區(qū)塊鏈上的id。每筆transaction都需要在某個(gè)賬戶所配置的authority下評(píng)估permissions。每個(gè)被命名的permission都有一個(gè)閾值,只有滿足后, 簽名的transaction才能在authority下被認(rèn)為有效。Transactions是通過一個(gè)加載了已解鎖的錢包客戶端簽名的。錢包是一個(gè)保護(hù)并使用您的keys的軟件。這些keys不一定要為區(qū)塊鏈上某賬戶authority所permissioned。
1. 錢包
錢包是保存keys的客戶端,而這些keys不一定和這些賬戶permissions相關(guān)。理想情況下錢包有一個(gè)上鎖狀態(tài)(加密)和一個(gè)解鎖(解密)狀態(tài)且被一個(gè)強(qiáng)熵的密碼保護(hù)。EOSIO/eos倉庫又一個(gè)叫做eosc的命令行工具,錢包就是其中一部分的功能。
2. 賬戶
賬戶是一個(gè)保存在區(qū)塊鏈上,具可讀性的名字。通過permissions配置,賬戶可被一個(gè)體所擁有,也可為一群個(gè)體共同擁有。轉(zhuǎn)賬或者向區(qū)塊鏈推送transaction都需要賬戶。
3. Authorities 和 Permissions
Authorities 決定特定message是否被正確授權(quán)。
每個(gè)賬戶都有兩個(gè)原生具名的permissions
-
ownerauthority代表一個(gè)賬戶的所有權(quán)。只有少數(shù)transactions需要此authority,但任何需要改動(dòng)owner authority的message都需要??偟膩碚f,我們建議把owner冷儲(chǔ)存起來,不要和任何人共享。owner可以用來恢復(fù)另一個(gè)可能已經(jīng)被損害的(compromised)permission. -
activeauthority可用來轉(zhuǎn)賬資金、給區(qū)塊生產(chǎn)者投票及進(jìn)行另一些高級(jí)的賬戶改動(dòng)。
除了原生 permissions外, 賬戶可有自定義的具名permissions,以擴(kuò)展對(duì)賬戶的管理功能。自定義permissions是非常靈活的,可以用于各種各樣的場(chǎng)景。這很大程度上取決于開發(fā)者社區(qū) Much of this is up to the developer community in how they are employed, and what conventions if any, are adopted.
任何authority的Permission都可以被分配給一個(gè)或多個(gè)公鑰或一個(gè)有效的賬戶名。
4. Putting it all Together
下面是上面所提到的概念的集合及一些如何在實(shí)際中使用他們的簡(jiǎn)單例子。
4.1 默認(rèn)賬戶配置 (Single-Sig)
這是某賬戶創(chuàng)建后如何配置的例子。該賬戶的owner和active permissions都各自有一個(gè)key, 兩個(gè)keys的權(quán)重都是1且閾值也是1。默認(rèn)配置需要一個(gè)簽名來授權(quán)對(duì)于原生permissions的message。
@bob account authorities
| Permission | Account | Weight | Threshold |
|---|---|---|---|
| owner | 1 | ||
| EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch | 1 | ||
| active | 1 | ||
| EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX | 1 |
在@bob賬戶這個(gè)例子中,依表格所示,@bob's的owner key的權(quán)重是1,在該authority下推送一個(gè)transaction所需要的閾值也是1。
如果需要在owner的authority下推送一個(gè)transaction,只需要@bob用它的owner key簽名一個(gè)transaction,此transaction即可被認(rèn)為有效。這個(gè)key將被儲(chǔ)存在一個(gè)wallet中,并用eosc來管理。
4.2 Multi-sig 賬戶及自定義Permissions
下面的例子是一個(gè)虛構(gòu)的名叫@multisig的賬戶。在此場(chǎng)景下,兩個(gè)用戶被授予owner 和 active permissions,而有三個(gè)用戶加權(quán)不同地被授予自定義的publish permission。
@multisig account authorities
| Permission | Account | Weight | Threshold |
|---|---|---|---|
| owner | 2 | ||
| @bob | 1 | ||
| @stacy | 1 | ||
| active | 1 | ||
| @bob | 1 | ||
| @stacy | 1 | ||
| publish | 2 | ||
| @bob | 2 | ||
| @stacy | 2 | ||
| EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqtQBcEnysYDFTEbUpi6y | 1 |
在此場(chǎng)景下,要修改owner permission的加權(quán)閾值為2,也就是說因?yàn)槊糠奖旧砑訖?quán)都是1, 所有用戶需要都簽名該transaction它才能被完全授權(quán)。
而要發(fā)送一個(gè)需要active authority的transaction,加權(quán)閾值是1。這意味著只需要一個(gè)具有active authority的賬戶簽名即可授權(quán)該message。
還有一個(gè)叫publish的自定名稱permission。比如這個(gè)publish permission是用來通過一個(gè)理論上的博客App向@multisig的博客發(fā)布文章的。這個(gè)publish permission的加權(quán)閾值是2,而@bob@* 和 @stacy的加權(quán)都是2,public key的加權(quán)是1。這樣的話@bob和@stacy都不需要額外簽名就可以發(fā)布,但public key 則需要一個(gè)額外簽名才能使一個(gè)在public permission下的message通過授權(quán)。
上面的permissions表展現(xiàn)了@bob 和 @stacy作為賬戶的擁有者,具有類似于主席或者編輯的特權(quán)。盡管這個(gè)簡(jiǎn)單的例子也有局限性(尤其是可擴(kuò)展性上),并不是一個(gè)好的設(shè)計(jì),但它卻充分展現(xiàn)了EOS權(quán)限系統(tǒng)的靈活性。
注意上面的表格中,permissions可以使用account name也可以使用一個(gè)key。乍看之下這可能不重要,但是這確實(shí)增加了靈活性。
備注
- @bob 和 @stacy可同時(shí)被顯式地設(shè)置成用戶的擁有者。
- @bob 和 @stacy 都有對(duì)于 publish權(quán)限的特權(quán)。