1. 程式人生 > >EOS智慧合約開發(九)EOS的許可權和許可

EOS智慧合約開發(九)EOS的許可權和許可

今天我們探討EOS的許可權和許可問題

1.基本概念

我們先了解下EOS.IO許可權模型的三個基本概念:

  1.  Wallets(錢包)——錢包是EOS.IO提供的用於管理金鑰對的客戶端,錢包支援鎖定和密碼解鎖。
  2. Accounts (賬戶)——賬戶是公示在區塊鏈上的人工易讀(不是公鑰或短地址!!!)的名字。
  3. Authorities and Permissions(許可權及授權驗證)——每個賬戶都內建owner和active許可權,owner冷藏用於恢復其他許可權。一般轉賬操作,都使用active許可權就可以了。

1.1許可權(Permission)定義的目標

EOSIO的賬戶許可權定義的目標在

白皮書中這樣敘述:

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允許賬戶持有者部分讓度許可權,而且許可權受讓者是用自己持有的金鑰簽名,以便明確區分授權行為是如何發生的。

2.賬戶(Account)如何生成

許可權是建立在賬戶的基礎之上的,那麼賬戶又是如何產生的呢?
首先要明確的一點是:

無論賬戶還是許可權,它們一定是通過簽名交易(signed transaction)來定義並在區塊鏈中公示的。——這是其他節點在執行合約時進行許可權驗證(Authorities)的基礎。

來看看利用EOSIO的命令互動,如何生成一個新賬戶:

$ cleos create account eosio tester EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA

命令的說明及返回在這裡
返回JSON文字比較長,不過讀懂它的每一部分含義你也就理解了EOSIO許可權模型的設計思路。這裡我們先看看與本文相關的幾處:

  1. 每個賬戶預設攜帶owneractive兩個許可權,分別對應一對金鑰(*其中owner金鑰冷藏儲存,通常用active來幹活,方便用owner恢復active)
  2. 該命令用賬戶eosioactive許可權簽名提交了一個交易
  3. 交易呼叫了內建合約eosnewaccount行為
  4. 命令傳入的公鑰分別作為新產生的tester賬戶的owner和active許可權公鑰

這裡一定有人會問:那麼這個最初的賬戶eosio是由什麼賬戶來簽名生成的呢?——它是在啟動區塊鏈時,在創世區塊的配置config.ini中直接定義的。

可以檢視config.ini檔案

producer-name = eosio

 3. Authorities (授權)和 Permissions(許可)

Authorities 決定特定message是否被正確授權。

每個賬戶都有兩個原生具名的permissions

  • owner authority代表一個賬戶的所有權。只有少數transactions需要此authority,但任何需要改動owner authority的message都需要。總的來說,我們建議把owner冷儲存起來,不要和任何人共享。owner可以用來恢復另一個可能已經被損害的(compromised)permission.

  • active authority可用來轉賬資金、給區塊生產者投票及進行另一些高階的賬戶改動

除了原生 permissions外, 賬戶可有自定義的具體名稱的permissions,以擴充套件對賬戶的管理功能。自定義permissions是非常靈活的,可以用於各種各樣的場景。這很大程度上取決於開發者社群 Much of this is up to the developer community in how they are employed, and what conventions if any, are adopted.

任何authority的Permission都可以被分配給一個或多個公鑰或一個有效的賬戶名

4.utting it all Together(把他們放一起)

我們用簡單的Demo來說明一下。

4.1 預設賬戶配置 (Single-Sig)

這是某賬戶建立後如何配置的例子。該賬戶的owneractive permissions都各自有一個key, 兩個keys的權重都是1且閾值也是1。預設配置需要一個簽名來授權對於原生permissions的message。

@bob account authorities

Permission Account Weight Threshold
Owner 1
EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch 1
active 1
EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX 1

@bob賬戶這個例子中,依表格所示,@bob's的owner key的權重是1,在該authority下推送一個transaction所需要的閾值也是1。

如果需要在owner的authority下推送一個transaction,只需要@bob用它的owner key簽名一個transaction,此transaction即可被認為有效。這個key將被儲存在一個wallet中,並用eosc來管理。

4.2 Multi-sig 賬戶及自定義Permissions

下面的例子是一個虛構的名叫@multisig的賬戶。在此場景下,兩個使用者被授予owner active permissions,而有三個使用者加權不同地被授予自定義的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
  • 在此場景下,要修改owner permission的加權閾值為2,也就是說因為每方本身加權都是1, 所有使用者需要都簽名該transaction它才能被完全授權。
  • 而要傳送一個需要active authority的transaction,加權閾值是1。這意味著只需要一個具有active authority的賬戶簽名即可授權該message。
  • 還有一個叫publish自定名稱permission。這個publish permission的加權閾值是2,而@[email protected]* 和 @stacy的加權都是2public key的加權是1。這樣的話@bob@stacy都不需要額外簽名就可以釋出,但public key 則需要一個額外簽名才能使一個在public permission下的message通過授權。

上面的permissions表展現了@bob@stacy作為賬戶的擁有者,具有類似於主席或者編輯的特權。儘管這個簡單的例子也有侷限性(尤其是可擴充套件性上),並不是一個好的設計,但它卻充分展現了EOS許可權系統的靈活性。

注意上面的表格中,permissions可以使用account name也可以使用一個key。乍看之下這可能不重要,但是這確實增加了靈活性。

備註

  • @bob 和 @stacy可同時被顯式地設定成使用者的擁有者。
  • @bob 和 @stacy 都有對於 publish許可權的特權。

2018年7月31日整理於深圳

相關推薦

EOS智慧合約開發EOS許可權許可

今天我們探討EOS的許可權和許可問題 1.基本概念 我們先了解下EOS.IO許可權模型的三個基本概念:  Wallets(錢包)——錢包是EOS.IO提供的用於管理金鑰對的客戶端,錢包支援鎖定和密碼解鎖。 Accounts (賬戶)——賬戶是公示在區塊鏈上的人工易讀(

EOS智慧合約開發EOS智慧合約部署及除錯(附程式設計示例)

EOS的智慧合約裡面有一個action(動作)和transaction(交易)的概念。 對於我們開發以太坊開發者來說,基本上只有transaction的概念。如果我只要執行一種操作,而且是隻讀操作,就不需要簽名。如果需要劃資金,有一些寫的操作,那就需要使用者用

EOS智慧合約開發

一、 智慧合約功能 EOSIO智慧合約是在區塊鏈上註冊並在EOSIO節點上執行的軟體,實現了“合約”的功能,合約行動請求帳目儲存在區塊鏈中。智慧合約定義了介面(操作,引數,資料結構)和實現介面的程式碼。程式碼被編譯成規範的位元組碼格式,使節點可以檢

EOS智慧合約開發Ubuntu 安裝 Mongodb

上篇文章,我們講到了,使用EOS儲存資料使用MongoDB外掛,那麼我們今天看看MongoDB是如何安裝的。我參考了MongoDB官方文件,介紹兩種方式安裝,供大家參考。 方式一:從apt-get安裝 新增mongodb簽名到APT sudo apt-key adv --k

EOS智慧合約開發十八EOS資料分析history_plugin外掛MongoDB外掛區別

EOS資料 從EOS上線一段時間來看,他產生的Block已經遠遠超過了以太坊。以太坊在交易完成後,很容易過濾出交易資訊(如何獲取在我之前以太坊文章中有詳細描述)。EOS機制與以太坊有卻別,EOS如此大的資料量,我們就會問,EOS資料時如何獲取,查詢。今天我們就這個問題,給大家分析一下。

智慧合約開發4—— solidity例項

1.投票 這個合約比較複雜,但其中展示了很多的Solidity的特性。它實現了一個投票合約。電子投票的主要問題是如何給正確的人分配投票權,以及如何防止操縱。我們不會在這裡解決所有問題,但我們會展示如何進行委派投票,以便記票自動且完全透明。 idea 是為每個選票建立一個合約,為每個投票

OSGI企業應用開發整合SpringMybatis框架

上篇文章中,我們完成了在OSGI應用中整合Spring和Mybatis框架的準備工作,本節我們繼續Spring和Mybatis框架的整合。 一、解決OSGI整合Spring中的Placeholder問題 使用Spring框架的朋友應該都知道,我們可以在B

EOS智慧合約開發測試框架EOSFactory

EOS Factory是一個EOS智慧合約開發和測試框架。 自2017年秋季以來,Tokenika一直致力於建立基於Python的EOS智慧合約開發平臺,以便輕鬆建立,測試和部署智慧合約。隨著EOS的不斷髮展,我們已經習慣了其基礎程式碼的突然變化,並且隨著我們的進展而逐漸減少詛咒;)今天

eos智慧合約開發-01 ubuntu16.04搭建eos環境

EOS三個元件: • nodeos:服務端區塊鏈節點元件 • cleos:命令列介面,與區塊鏈互動,管理錢包,管理賬戶,在區塊鏈上呼叫方法。(很重要,相當於以太坊web3) • keosd:管理EOSIO錢包的元件。 編譯過程遇到問題如下: 1: clone

EOS系列二:EOS智慧合約開發學習心得

以幾個例項演繹開發過程。 =================================例項1==================================== 一、建立合約目錄,編寫合約c++程式碼 Shell cd /home/game/contracts

CoreThink主題開發使用H-ui開發博客主題之用戶個人主頁

.cn ref mas icon stat 用戶 個人 html sta 感謝H-ui、感謝CoreThink! 效果圖: 這裏使用table布局 /Theme/Blog/User/Index/home.html <extend name="$_home_p

星雲鏈智能合約開發:Mac下安裝的準備工作

星雲鏈開發環境安裝 nebulasio安裝 星雲鏈安裝 星雲鏈開發 智能合約開發 Homebrew安裝 包管理工具可以讓你安裝和更新程序變得更方便,目前在Mac系統中最受歡迎的包管理工具是 Homebrew. 我們安裝Homebrew是為了安裝星雲鏈開發環境時更方便快捷。 安裝方法 第一步

星雲鏈智能合約開發:Mac下安裝星雲鏈

Mac下安裝星雲鏈 星雲鏈智能合約開發 Golang環境搭建 版本用最新版:1.10.2 安裝 brew install go 配置環境變量 vi ~/.bash_profile 打開.bash_profile文件,按"i"鍵可進行編輯,添加: export GOROOT=/u

星雲鏈智能合約開發:運行星雲鏈

星雲鏈智能合約開發 安裝星雲鏈 創世區塊配置 在項目根目錄下的conf/default/genesis.conf,為創世區塊配置文件。 meta { # 每條鏈的唯一標識 # 每個區塊和交易只會屬於一條唯一的鏈,保證安全性 chain_id: 100 } consensus { #

星雲鏈智能合約開發:在星雲鏈上發送交易

星雲鏈智能合約開發 在星雲鏈上發送交易 準備賬戶 在星雲鏈上,每個地址表示一個唯一的賬戶,一一對應。 在發送交易前,我們需要準備兩個賬戶:一個賬戶用來發送代幣 (稱為"from") 和另一個賬戶來接受代幣 (稱為"to"). 發送者賬戶 在這裏,我們將會使用配置

星雲鏈智能合約開發:安裝Chrome錢包插件web錢包及其使用

星雲鏈智能合約開發 安裝星雲鏈Chrome錢包插件 安裝星雲鏈web錢包 安裝Chrome瀏覽器錢包插件 下載地址:https://github.com/ChengOrangeJu/WebExtensionWallet 第一步:clone項目或者下載zip包到本地 第二步:安裝 打開Chrom

星雲鏈智能合約開發:Dapp開發

星雲鏈智能合約開發 星雲鏈Dapp開發 星雲鏈智能合約Dapp開發 Dapp開發 安裝neb.js neb.js提供javascript開發的API接口 創建一個neb文件夾,在終端命令行中進入該文件夾,克隆neb.js git clone https://github.com/nebula

星雲鏈智能合約開發:智能合約中調用內置庫

星雲鏈智能合約開發 智能合約中調用內置庫 Nebulas智能合約開發 BigNumber BigNumber 模塊構建於 bignumber.js之上,用來處理任意精度的十進制和非十進制運算。合約可以直接使用 BigNumber 來處理交易和其他轉賬操作中涉及到的數值計算。 var value

Go語言開發、Go語言並發編程

col 計數器 yield res 兩個 -c time 放心 還在 Go語言開發(九)、Go語言並發編程 一、goroutine簡介 1、並發與並行簡介 並行(parallel):指在同一時刻,有多條指令在多個處理器上同時執行。並發(concurrency):指在同一時刻

EOS小白學習EOS的HTTP API

oot 沒有 uid ++ 討論 created ant mon pack 歡迎來到EOS小白學習系列,本系列會記錄EOS學習過程中的一些操作和細節,大餅果子非C++出身,如有錯誤,歡迎指出 接上一篇: 本篇將會列出EOS支持的HTTP API(chain和history