1. 程式人生 > >EOS學習(一):賬戶與錢包

EOS學習(一):賬戶與錢包

EOSIO賬戶與錢包概述

下圖給出了EOSIO中的賬戶(accounts)和錢包(wallets)的概念。


錢包用來儲存一組公鑰-私鑰的對。這些金鑰對將參與區塊鏈的上的操作簽名。keosd管理著錢包和其中的內容。我們通過cleos來使用這些錢包。

一個賬戶可視為線上的訪問憑證。nodeos管理著在區塊鏈上釋出賬戶以及與賬戶相關聯的行為。我們通過cleos與nodeos的互動,來實現賬戶的管理。

錢包與賬戶之間沒有天然的內在聯絡。賬戶並不知道錢包的存在,反之錢包也不知道賬戶的存在。所以,nodeos與keosd之間也沒有內在的關聯。他們(nodeos與keosd)基礎函式是有著本質的不同。(在部署配置過程中可能會模糊化他們之間的區別,所以在這裡特別提醒下)

在對一個交易進行簽名時,nodeos與keosd之間會發生互動。錢包通過將鎖定的鍵值本地化儲存的方式,實現以安全的方式活動簽名。cleos作為一箇中介,實現keosd(從本地獲取)鍵值到nodeos使用這些鍵進行賬戶(以及其他)區塊鏈簽名相關的操作。

建立和管理錢包

開啟終端並進入EOSIO的安裝目錄,我們使用cleos命令即可方便的與keosd和nodeos進行互動。

$ cd /path_to_eos/build/programs/cleos

我們要做的第一件事就是建立錢包。使用cleos的"wallet create"命令:

$ cleos wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"A MASTER PASSWORD"

此時keosd中建立了稱之為“default”(預設)的錢包,並提示要求輸入密碼(mater password)。該密碼是用來解鎖(解密)你的錢包檔案,請務必妥善保管。

錢包檔案被命名為"deafult.wallet"。預設情況下,keosd將此檔案儲存在"~/eosio-wallet"目錄下。這個目錄可以通過在keosd命令列中新增"--data-dir"引數來指定。

管理多個錢包和錢包名稱

cleos可以用來管理多個錢包。每個不同的錢包都通過不同的錢包密碼進行保護。下面的例子將展示如何通過"-n"(定義錢包明確)傳參建立另一個錢包。

$ cleos wallet create -n periwinkle
Creating wallet: periwinkle
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"A MASTER PASSWORD"
現在可以確認下我們使用特定的名字生成的錢包。
$ cleos wallet list
Wallets:
[
  "default *",
  "periwinkle *"
]

注意,當我們錢包被解鎖時,錢包名稱後面都會標記有"*"符號。我們使用"wallet create"生成錢包時,處於方便會預設解鎖我們的錢包。如果對第二個錢包進行加鎖,可以執行"wallet lock"命令:

$ cleos wallet lock -n periwinkle
Locked: 'periwinkle'
再次執行"wallet list"命令,我們可以看到第二個錢包的"*"符號消失了,這說明該錢包已經加鎖
$ cleos wallet list
Wallets:
[
  "default *",
  "periwinkle"
]

解鎖一個命名錢包需呼叫"wallet unlock -n",後面跟著錢包名稱。在執行過程中需輸入錢包的私鑰。我們也可以通過在命令列中增加"--password"以及主密碼的傳參,來直接完成私鑰驗證過程,但這樣會導致在console中將金鑰完整的顯示出來。

注:如果我們針對"default"錢包進行加解鎖的操作,則預設的無需使用"-n"傳參指定錢包名稱。

當我們重啟keosd,然後再次通過cleos檢視錢包資訊:

$ cleos wallet list
"/usr/local/bin/keosd" launched
Wallets:
[]

注:如果keosd未啟動,在使用cleos第一次與keosd互動時(比如,查詢錢包資訊),就好自動啟動keosd程序。

可以發現此時錢包資訊為空。這是因為錢包在使用之前(包括展示錢包列表)必須首先先開啟錢包。當keosd關閉時,錢包會被鎖定;當keosd被重啟後,錢包並未自動開啟。執行“wallet open”來開啟錢包。

$ cleos wallet open
$ cleos wallet list
Wallets:
[
  "default"
]

如果需要開啟其他非預設錢包,則需要新增"-n"來指定錢包名稱進行開啟錢包的操作。

生成和匯出EOSIO密碼

有多種方式可以建立EOSIO的密碼對,但這裡僅僅側重介紹"create key"命令。建立兩組公鑰/私鑰對,留意一下密碼對的通常的格式如下:

$cleos create key
Private key: 5K6tXmW7FQEBWqwG9fsAAjSMLgBMMDPjqE1ATFk2HGaHWjAjsgE
Public key: EOS7jZNeuZmqt4fAt4NLoZtLXTXDYEB3eo1QZgg7K19DKbyJaSPMr
$cleos create key
Private key: 5KYNz1WRZRt9882n1ebA2q5NYQ3oYvzxxAT48i2tyReYHnR49yu
Public key: EOS73bzXNHx481Kcg64g4YKS7FxSDYJVYZNiPVZutc3CbXQxW2czc

這些密碼對是隨意的密碼對,並無任何的授權。

接下來的操作,需要確認預設(default)錢包必須是開啟和解鎖狀態的。

cleos指令是可以串聯使用,實現default錢包的開啟與解鎖。甚至只需執行"cleos unlock"即可一步到位實現keosd的開啟、錢包開啟以及解鎖操作。比如執行:

$cleos wallet open unlock
Opened: default
password: Unlocked: default

我們現在使用"wallet import"將私鑰匯入錢包中。

$ cleos wallet import 5K6tXmW7FQEBWqwG9fsAAjSMLgBMMDPjqE1ATFk2HGaHWjAjsgE
imported private key for: EOS7jZNeuZmqt4fAt4NLoZtLXTXDYEB3eo1QZgg7K19DKbyJaSPMr
$ cleos wallet import 5KYNz1WRZRt9882n1ebA2q5NYQ3oYvzxxAT48i2tyReYHnR49yu
imported private key for: EOS73bzXNHx481Kcg64g4YKS7FxSDYJVYZNiPVZutc3CbXQxW2czc

匯入成功的情況下,cleos會提示正確的公鑰資訊。

我們可以通過輸入“wallet keys”指令,查閱上述資訊。

$ cleos wallet keys
[[
    "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
    "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
  ],[
    "EOS7jZNeuZmqt4fAt4NLoZtLXTXDYEB3eo1QZgg7K19DKbyJaSPMr",
    "5K6tXmW7FQEBWqwG9fsAAjSMLgBMMDPjqE1ATFk2HGaHWjAjsgE"
  ]
]

錢包檔案本身是加密的,當錢包加鎖時上述密碼對資訊會得到相應的保護。訪問這些密碼對資訊,需要藉助錢包的密碼。

備份錢包

為防止錢包檔案的損壞,一個良好的習慣是將錢包備份到一個U盤或其他媒介中去。錢包檔案採用高度加密的機制,以確保其中的密碼對難以訪問。

你可以在"data-dir"目錄中找到這些錢包檔案。如果你在啟動eos過程中未指定"--data-dir"引數,你的錢包檔案預設儲存在"~/eosio-wallet"目錄下。

$ cd eosio-wallet/
$ ll
總用量 12
-rw-r--r--. 1 root root 1533 5月  28 12:02 config.ini
-rw-------. 1 root root  439 5月  28 17:24 default.wallet
-rw-------. 1 root root  311 5月  28 16:19 periwinkle.wallet

可以將上述*.wallet檔案拷貝出來,儲存在安全的媒介中。

建立一個賬號

在區塊鏈上執行操作,需要使用到賬號。我們使用cleos向nodeos發起請求來建立賬號並且將賬號釋出到區塊鏈中。在執行建立賬號操作之前,我們必須確保nodeos處於執行狀態。在後面的例子中,我們需要在一臺機器上同時執行keosd和nodeos兩個程序,而上述兩個程序預設配置的埠都是8888,因此需要進行簡單修改確保keosd和nodeos執行在不同埠上。

通常有兩種方式可以將keosd的埠改為8899:

1. 進入錢包檔案所在的目錄,並將config.ini檔案中的埠改為8899,儲存配置檔案並重啟keosd。

$ cd ~/eosio-wallet
$ vim config.ini
# 修改埠為8899,儲存並退出vim
$ pkill keosd
$ keosd

2. 使用keosd命令列引數

$ pkill keosd
$ keosd --http-server-address=localhost:8899

或者通過cleos攜帶"--wallet-port=8899"執行錢包操作

$ cleos --wallet-port=8899 wallet unlock

要啟動nodeos,開啟一個終端視窗,找到nodeos可執行檔案所在的目錄,執行:

$ cd eos/build/programs/nodeos
$ nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

現在我們可以使用"cleos create account"建立一個賬號了。

$ cleos create account ${authorizing_account} ${new_account} ${owner_key} ${active_key}
  • authorizing_account: 授權的賬號名稱,用來支付賬號建立以及後續其他新賬號的費用。
  • new_account:希望建立的新賬號
  • owner_key:擁有擁有者許可權的賬號的公鑰(詳見賬號與許可權
  • active_key:希望分配給活躍許可權公鑰

在這裡,“eosio”是一個可授權賬號。當在區塊鏈上進行操作時必須使用eosio賬號進行簽名。eosio賬號同時還是特殊的賬號用來啟動EOSIO節點,它的密碼對資訊資訊可以在nodeos的配置檔案中找到(預設在 "~/.local/shared/eosio/config/config.ini").

我們需要為新賬號定一個名稱。賬號名稱必須遵循以下兩個準則:

  • 必須短於13個字元
  • 僅能包含以下字元:.12345abcdefghijklmnopqrstuvwxyz

我們採用“myaccount”作為新賬號名稱。

我們使用上面匯入到錢包中的公鑰(以"EOS"開頭的字串),這些公鑰在未授權之前是隨意的賬號。這些賬號一旦授權,這些賬號就會變得異常重要。擁有者的金鑰(owner key)擁有賬號最高許可權,而活躍許可權賬號(active key)將擁有使用賬號資金的權利。

使用"cleos create account"來建立我們的賬號。

$ cleos --wallet-port=8899 create account eosio myaccount ${public_key_1} ${public_key_2}

如果建立成功了,我們將看到反饋以下資訊。

executed transaction: 7f1c6b87cd6573365a7bb3c6aa12f8162c3373d57d148f63f2a2d3373ad2fd54  352 bytes  102400 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"myaccount","owner":{"threshold":1,"keys":[{"key":"EOS5kkAs8HZ88m2N7iZWy4J...

賬號相關操作

使用cleos還可以針對賬號進行以下操作。

cleos命令描述
create account在區塊鏈上建立新賬號
get account從區塊鏈上獲取一個賬號
get code查詢一個賬號的程式碼和ABI
get accounts查詢與一個公鑰關聯的賬號資訊
get servants查詢一個給定賬號之下的服務賬號
get transactions查詢與一個賬號關聯的所有的交易
set contract使用一個賬號建立或修改合約
set account設定或修改區塊鏈上賬號的狀態
transfer將數字幣從一個賬號轉賬到另一個賬號
摘自 Tutorial-Comprehensive-Accounts-and-Wallets,翻譯 by Kevin.

相關推薦

EOS學習賬戶錢包

EOSIO賬戶與錢包概述下圖給出了EOSIO中的賬戶(accounts)和錢包(wallets)的概念。錢包用來儲存一組公鑰-私鑰的對。這些金鑰對將參與區塊鏈的上的操作簽名。keosd管理著錢包和其中的內容。我們通過cleos來使用這些錢包。一個賬戶可視為線上的訪問憑證。no

EOS學習賬號許可權

帳戶是儲存在區塊鏈中的人類可讀識別符號。每個交易都根據配置的帳戶許可權對其許可權進行評估。每個命名的許可權都有一個閾值,在滿足該閾值的條件下才能觸發易簽名。事務通過加解鎖錢包的客戶端來簽署。錢包是保護和利用你的金鑰的軟體。這些金鑰可能會或可能不會被授予區塊鏈上的賬戶許可權。錢

模式識別機器學習概率論、決策論、資訊理論

本系列是經典書籍《Pattern Recognition and Machine Learning》的讀書筆記,正在研讀中,歡迎交流討論。 基本概念 1. 模式識別(Pattern Recognition):是指通過演算法自動發現數據的規律,並進行資料分類等任務。

RPGMakerMV學習新增開場偽動畫遊戲第一幕轉場

要用RPGMakerMV做一個遊戲,添加了一小段偽動畫: 這個實現很簡單:首先在工具——資料庫——系統——選項中,將“以透明狀態開始”勾選上,再在隨便的一個地方設定事件,也就是滾動的字幕了,最後在事件編輯器中勾選自動執行,就可以達到一個簡單的動畫效果。

KF演算法學習演算法原理推導

       學習過程中接觸到了卡爾曼濾波,因為自己的數學渣屬性,特地把自己的推導過程記錄下來以加深理解,雖然有重複造輪子的嫌疑。。        推導公式過多,圖方便自己用的office寫的文件,後來發現打算上傳到部落格上時很無能為力。。。沒辦法只能截圖上傳圖片了,文章末

Python 學習筆記基礎入門

注:因為先前學習過C/C#,Java。故學習Python時只會記錄與此前幾種語言不同之處 Python是一種解釋型、面向物件、動態資料型別的高階程式設計語言。 Python簡介 Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麵向物件

CSS3總結學習CSS3用戶界面

interface 繪制 如果 位置 nbsp 瀏覽器 none ble adding 在CSS3中,新的用戶界面屬性有很多,本文重點介紹resize,box-sizing,offset。 瀏覽器支持,如下圖,圖片源於W3school 1.CSS Resizing 在cs

[linux][MongoDB] mongodb學習MongoDB安裝、管理工具、

ole ont mon mkdir man 管理工具 tar end 認證 參考原文:http://www.cnblogs.com/kaituorensheng/p/5118226.html linux安裝完美實現! 1. mongoDB安裝、啟動、關閉   1.1

Unity3D學習簡單梳理下Unity跨平臺的機制原理

12px get 一個 bsp 嵌入 ram 屬於 開源 runtime 前言 首先需要了解的是,Unity3D的C#基礎腳本模塊是通過Mono來實現的。 什麽是Mono? 參考下百度百科:Mono是一個由Novell公司(由Xamarin發起)主持的項目,並由Migu

tp5.0 學習虛擬環境安裝

安裝php admin cat code logs exe erro ron log 一、文件目錄: application: 應用目錄,開發文件存放地 extend:擴展 public:入口文件 thinkphp:核心代碼 vendor:第三方類庫 二、域名Apache配

canvas學習線條,圖像變換和狀態保存

itl height tar 默認 class limit 方法 星空 stop canvas學習(一):線條,圖像變換和狀態保存 一:繪制一條線段: var canvas = document.getElementById(‘canvas‘) var ctx = can

從輸入url到頁面URLDNS

ava .cn 控制 tp服務器 兩種 網絡配置 占用 index 相對 瀏覽器引擎默認:webkit內核 一、輸入地址   當我們開始在瀏覽器中輸入網址的時候,現代瀏覽器就可以智能的匹配完整 url了,它會從歷史記錄,書簽等地方,找到已經輸入的字符串可能對應的 url,然

Storm筆記整理簡介設計思想

大數據 實時計算 Storm [TOC] 實時計算概述 有別於傳統的離線批處理操作(對很多數據的集合進行的操作),實時處理,說白就是針對一條一條的數據/記錄進行操作,所有的這些操作進行一個匯總(截止到目前為止的所有的統計總和)。 實時計算與離線計算比較 Bounded:有界 離線計算面臨

Android項目實戰 SpannableStringSpannableStringBuilder

append() 同時 uil 註意 1.5 查看 strong 尊重 bject 原文:Android項目實戰(一): SpannableString與SpannableStringBuilder前言: 曾經在一些APP中的一些類似“幫助”&ld

Houdini技術體系 基礎管線 HoudiniHoudini Engine的安裝

ins ice serve pro 並集 wid ima mage width Houdini 下載與安裝 在官網 https://www.sidefx.com/download/ 下載最新的Production Build 版本,當前是16.5版本,需要註冊帳號 P

JavaAPI學習API && String類 && Stringbuffer && StringBuilder

vax 編碼 長度 split() 無敵 esp ogr charat() ble 一、API   1、API:英文 Aplication Progrmmer Iteface 的縮寫,即應用編程接口     由官方或第三方提供的能實現特點功能的程序封裝包,包含各功能類,接口

前端學習基本類型

關系 大小寫 變量 def 兩個 num eof 初始化 string類 ECMAScript中有5中基本數據類型:Undefined、Null、Boolean、Number、String。 Undefined類型:之所以會出現這個值,就是在當你聲明了一個變量時,並未對其賦

docker學習docker安裝和架構

本筆記根據51CTO的CloudMan博主的部落格而記錄的。 本節主要學習 docker安裝和解除安裝 docker的架構 一、Docker的安裝和解除安裝   Docker的安裝   1、安裝之前,要先把舊版的Docker給解除安裝了,以下是Docker官網上的安裝前解除安裝Dock

PE檔案格式學習概述

1.PE檔案簡介 PE檔案格式是Windows系統中應用最廣泛的檔案格式之一,我們常見的可執行檔案.exe、動態連結庫.dll以及驅動檔案.sys等都是PE檔案格式的。 可以通過十六進位制工具如010editor檢視PE檔案,可以看到PE檔案都有一個共同的特點,就是它們的最開頭都是4D5A,也就是ASCI

Java學習第一章 計算機、程式和Java概述

第一章 計算機、程式和Java概述   (1)匯流排--》    儲存裝置、記憶體、CPU、通訊裝置、輸入裝置、輸出裝置; (2)語言: 機器語言: 二進位制形式