EOS學習(二):賬號與許可權
帳戶是儲存在區塊鏈中的人類可讀識別符號。每個交易都根據配置的帳戶許可權對其許可權進行評估。每個命名的許可權都有一個閾值,在滿足該閾值的條件下才能觸發易簽名。事務通過加解鎖錢包的客戶端來簽署。錢包是保護和利用你的金鑰的軟體。這些金鑰可能會或可能不會被授予區塊鏈上的賬戶許可權。
錢包
錢包是儲存金鑰的客戶,這些金鑰可能與一個或多個帳戶的許可權相關或不相關。理想情況下,錢包具有受高階密碼保護的鎖定(加密)和解鎖(解密)狀態。EOSIO / EOS儲存庫捆綁了一個名為cleos的命令列介面客戶端,它與一個名為keosd的輕客戶端進行互動。
賬戶
帳戶是儲存在區塊鏈中的具有可讀性的名稱。它由個人或一組人擁有,具體取決於許可權配置。需要賬戶才能在區塊鏈上實現轉賬將交易或其他操作。
授權與許可權
授權決定了某個操作是否被正確的賦予許可權。每個賬戶都兩個原生態的許可屬性:
- 擁有者許可:擁有者許可代表著賬戶的所有權。雖然只有少數交易需要這種許可權,但最值得注意的是對擁有者許可權作出任何改變的行為。建議所有者保持冷備份並且不與任何人共享。所有者許可用來恢復和取代已被洩露的另一個許可權。
- 活動許可:活動許可權用於資金轉賬、投票給活動發起者並進行更高級別的賬戶更改。
除了原生態許可之外,帳戶還可設定自定義許可從而擴充套件帳戶管理。自定義許可權非常靈活且地址空間巨大,從而實現非常多的可能的應用場景。這很大程度上取決於開發人員如何使用它們以及採用什麼約定(如果有的話)。任何給定許可權的許可權可以分配給一個或多個公用金鑰或有效的帳戶名稱。
組合使用
以下就是將上述概念組合在一起使用的案例。
預設賬號配置(單一簽名)
每個賬戶在建立之初就是預設的是唯一的鍵(key)可用來做擁有者許可和活動許可。這個鍵擁有1的權重以及閾值也為1.預設的配置可以通過單一簽名來授權原生態的活動許可。
@bob 賬號授權
許可 | 賬號 | 權重 | 閾值 |
---|---|---|---|
擁有者 | 1 | ||
EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch | 1 | ||
活動 | 1 | ||
EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX | 1 |
在@bob賬號的例子中,@bob的擁有者賬號具有許可權重1,並且要求閾值達到1時才能發起一筆交易。
@bob只要
多人簽名與自定義許可
下面這個例子使用了一個虛構叫做“@multisig”的賬號名稱。在這個場景中,兩個使用者被同時授予擁有者許可和活動許可不同的權值。
@multisig 賬號授權
許可 | 賬號 | 權重 | 閾值 |
---|---|---|---|
擁有者 | 2 | ||
@bob | 1 | ||
@stacy | 1 | ||
活動 | 1 | ||
@bob | 1 | ||
@stacy | 1 | ||
釋出 | 2 | ||
@bob | 2 | ||
@stacy | 2 | ||
EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqt... | 1 |
在這個例子中,如果要對擁有者許可進行調整,需要達到閾值2以上。這就意味著擁有權重為1的參與者必須都參與簽名才能使得讓交易得到充分的授權。
當進行活動授權時,該閾值為1,這就意味著只需一個權重為1的參與方參與授權即可實現許可授權。
這裡還有個稱之為“釋出”的自定義許可型別。在這個例子中,我們假設是在一個blog的DAPP應用中授權釋出部落格。釋出許可的閾值為2,@bob和@stacy都擁有2的權重,還有一個公鑰擁有1的權重。這就意味著@bob和@stacy無需其他額外的簽名即可執行釋出許可,而公鑰必須取得其他人的共同簽名才能執行釋出許可。
上面的例子說明,@bob和@stacy作為擁有者,幣普通的修改者擁有更高的優先權。儘管這個原始示例在可擴充套件性方面有特別的限制,並不一定是一個好的設計,但它充分證明了EOSIO許可權系統的靈活性。
此外,請注意上表中的許可權是可以同時使用帳戶名稱或公鑰進行設定的。雖然看起來微不足道,但它確實提出了一些額外的靈活性。
附加說明
- @bob和@stacy可以顯式註明定義為該賬號的擁有者。
- 在沒有@bob和@stacy授權的情況下,公鑰是無法發起一個釋出授權的。
- @bob或@stacy可以在沒有其他賬號附加授權的情況下,獨立發起釋出授權。