天天看點

EOS基礎全家桶(六)賬号管理

本篇我們會學習最基本的賬号相關的操作,包括了建立賬号和查詢,關于賬号資源的操作因為必須先部署系統合約,是以我們會留到後面單獨寫一篇來講解。

簡介

本篇我們會學習最基本的賬号相關的操作,包括了建立賬号和查詢,關于賬号資源的操作因為必須先部署系統合約,是以我們會留到後面單獨寫一篇來講解。

  • 6-EOS基礎全家桶(六)賬号管理
    • 簡介
    • 賬号介紹
      • 賬号名介紹
      • 資源介紹
    • 補充說明genesis.json
    • 建立賬号
      • 建立系統級賬号
      • 建立普通賬号
    • 查詢賬号
      • 查詢賬号基本資訊
      • 查詢餘額

賬号介紹

EOS的設計與以往的其他區塊鍊有很大的不同,傳統區塊鍊上使用的賬号都是直接使用公鑰,而EOS使用了最多13位長的簡短賬号名,并以此擴充出了賬号權限的功能。

賬号名介紹

傳統的公鑰賬号,可以不用在鍊上建立賬号而直接使用,匿名性也更強,使用起來更有科技感,可惜,缺點也很明顯,完全無法靠大腦來記憶,賬号隻是單密鑰對,是以無法擴充權限,隻能借助智能合約。為了解決難記憶的問題,人們又設計出了助記詞,可惜12個單詞的組合,也不夠人性。

EOS的賬号設計很人性化,最長13位,可以使用24個小寫字母和1-5的數字,特殊賬号還可使用

.

字元,你完全可以建立一個有特定意義的賬号名。系統設計還增加了一個短号的競拍市場,而短号又能建立出短号字尾的特殊靓号。這一系列設計都讓賬号的可玩性和收藏性增加了,同時更便于記憶。

賬号的安全性同樣是用了ECC的非對稱加密産生的密鑰對,預設有owner和active兩個内置權限,owner是最高權限,active預設操作權限,在建立時可以配置不同的公鑰,也就提升了賬号的安全性,我們隻讓active的私鑰觸網,即使被盜,我們還可以使用owner權限将active的公鑰替換了。傳統的區塊鍊賬号,一旦私鑰被盜,就意味着這個賬号已經無法再正常使用了。

但是EOS的賬号設計也有比較明顯的問題,賬号必須通過EOS鍊來建立,而你要上鍊,又必須有EOS賬号,是以,新使用者無法獨自完成賬号的建立。

資源介紹

EOS賬号增加了CPU、NET和RAM的設定,這本身更符合EOS(Enterprise Operation System,企業級作業系統)的設定,這些資源的設定本身都是為了使系統可以維持健康,就像以太坊上有Gas費用,來防止鍊上的惡意交易并增加交易确認的及時性。EOS中的資源同樣增加了惡意交易的代價,保證了全網良性的生态,同時賦予了EOS通證的概念,讓持有EOS的人可以獲得更大的權益和便利。

記憶體必須通過市場進行買賣,采用班科(Bancor)算法來保證記憶體價格符合市場需求。而CPU和Net則是通過EOS抵押,讓全網資源的使用代價降低了,而抵押獲得的CPU量随全網抵押而波動,符合全網運算能力的要求,3天的贖回期給予全網一定的緩沖期。CPU和Net是可再生資源,在一個視窗期内用完了沒事,随着時間推移會慢慢恢複的。

這些設定都是很前衛的,但是仍然存在着無法預期的情況,EOS主網這兩年出現過2次重大的CPU資源短缺問題,特别是2019年10月的這次,持續長達5個月的CPU短缺,隻因一個交易挖礦的合約,面對這樣突然的情況,EOS的主創b1采用了讓市場自動調控。加之EOS價值的升高,都使得EOS主網的使用代價越來越高。

補充說明genesis.json

這裡要補充一下前面啟動節點沒提到的一個檔案genesis.json檔案,這個是創世配置檔案,裡面的配置都是關于鍊的基本配置,chainid也是根據此檔案生成的,是以這個檔案不同,産生出來的就是不同的運作鍊。EOS程式預設有一套配置,是以你在啟動節點時沒有指定

--genesis-json

同樣可以啟動成功。下面這個配置就是EOS主鍊的配置。

{
  "initial_timestamp": "2018-06-08T08:08:08.888",
  "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 200000,
    "target_block_cpu_usage_pct": 1000,
    "max_transaction_cpu_usage": 150000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  }
}
           

注意到裡面有個initial_key了吧,這個就是初始賬号eosio的公鑰,我們在啟動節點時使用的配置檔案中有個配置

signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

這個就是預設的eosio的owner密鑰對,開發環境我們都是使用這個密鑰。

我們将啟動節點中配置的這個eosio的私鑰導入錢包,準備後續我們建立賬号使用。

建立賬号

EOS建立賬号一定需要使用一個已存在的賬号來建立,是以,你無論在哪個網絡上建立賬号,隻能讓有賬号的人幫你建立或者支付一定的費用來幫你建立。EOS主網上目前提供了很多建立賬号的管道,也有很多三方提供了支付建立賬号甚至免費建立賬号的功能。

如果大家還沒有EOS主網的賬号,我建議你通過幾個主流錢包來獲得一個廉價且獨特的個人賬号,比如TokenPocket。當然,你也可以購買一個特别字尾的短号,當你有賬号後,還可以進入EOS的賬号市場中進行競拍來獲得靓号。

注意:因為EOS建立賬号需要使用已有賬号來建立,是以該操作是需要交易簽名的,在調用指令前,需要解鎖導入了用于建立賬号的賬号私鑰的錢包。

建立系統級賬号

在初始啟動節點後,我們就可以使用内置的預設賬号eosio來建立其他新的賬号了,前面在補充說明genesis.json已經導入了eosio的私鑰到錢包中。

我們現在可以使用

cleos create account

指令來建立系統賬号了,系統賬号有一個很特别的特點,就是賬号資源都是無限的,沒有記憶體限制,CPU和Net都是-1(表示無限)。在開發階段,這種賬号其實非常好用,開發合約的過程中,會大量使用到記憶體等資源,是以建立系統賬号可以很好的用于合約測試。

我們現在建立一個賬号astaldo。

cleos create account eosio astaldo EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3 EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3
           

其中eosio是用于建立新賬号時使用的賬号,目前建立的是系統級賬号,是以隻能使用eosio賬号來建立,後面的兩個公鑰分别是新賬号的owner和active的公鑰。

建立普通賬号

建立普通賬号需要先部署系統合約,也就是eosio.system合約,但是這需要很多的配置,并建立好所有系統賬号……這塊功能可以單獨寫一篇文章了,是以我會在後面單獨寫一篇《EOS部署系統合約的完全啟動》。

這裡我簡單提一下如何通過cleos來建立普通賬号。需要用到

cleos system newaccount

指令,因為部署了系統合約,建立賬号的功能會覆寫了程式預設賬号建立入口,是以建立系統級賬号的方法也就不能直接用了,要更換成這個新指令了。指令有很多參數,我先說明下核心參數,其他的大家可以使用

--help

檢視幫助。

#基礎結構
cleos system newaccount [OPTIONS] creator name OwnerKey [ActiveKey]
           

creator 指定用于建立賬号的EOS賬号,也就是用于支付資源開銷的賬号

name 新賬号的賬号名

OwnerKey 指定新賬号的Owner權限的公鑰

ActiveKey 可選,預設和Owner的公鑰一緻,為了提升安全性,建議設定不同的公鑰

OPTIONS 參數有很多,這裡重點關注以下幾個:

—stake-net 建立時為新賬号質押的NET

—stake-cpu 建立時為新賬号質押的CPU

—buy-ram-kbytes 建立時為新賬号購買的記憶體

—transfer 建立時抵押的資源是否轉移給新賬号,預設是為他人抵押,可被原賬号收回

如果我要使用eosastaldo11建立一個eosastaldo12,可以使用以下指令,這裡我使用了jungle網絡的節點位址。

cleos -u "http://jungle2.cryptolions.io" system newaccount --stake-net '1 EOS' --stake-cpu '10 EOS' --buy-ram-kbytes 1000 eosastaldo11 eosastaldo22 EOS8h8YD7956jYf99BV6kBit5d9461xaxyTf9HPxmARcnTEnFivY8 EOS7DhW1StAhprCBwpAfgMpmHuN2H3V8t4B45tzQtEYckHRr5CASN
           

我們為eosastaldo12初始抵押了10EOS的CPU和1EOS的NET,購買了1MB的記憶體,使用了兩個不同的公鑰為别作為owner和active。可以看到,建立賬号時發生了很多的内聯交易,包括了記憶體的購買、CPU和Net的抵押。

查詢賬号

賬号的基本資訊是存在于鍊上系統表裡的,而其他的賬号資訊,比如EOS餘額都是在相應的合約表裡的,是以查詢的方式都是不同的。

查詢賬号基本資訊

賬号的基本資訊包含了賬号的建立時間、權限配置設定、資源使用和抵押情況。可以直接通過

cleos get account

指令來檢視。

我們現在來查詢下eosio這個系統賬号,

cleos get account eosio

可以看到在系統級賬号的memory是無限的(unlimited),Net和CPU也都是無限的。privileged為true說明了這個是個特權賬号。

我們再來查詢下EOS主網上的一個賬号b1,這個就是大名鼎鼎的EOS創始人的賬号。

cleos -u http://eospush.tokenpocket.pro get account b1
           

可以看到b1的記憶體太大了有将近32G呢,還有那Net和CPU的抵押,

staked

表示抵押的EOS,

delegated

他人為其抵押的EOS,

used

表示已使用的資源數,

available

是目前還可用的資源數,

limit

是目前資源的上限。可以說b1的資源都近似于無限了。另外b1的權限下有多個key,這個我們會在權限管理的文章裡面詳細說明。

查詢餘額

查詢賬号餘額是需要通過查詢合約。EOS上為了更友善的發行Token,是以從EOS的發行就采用了合約的形式,這為所有的Token發行提供了一個官方模闆,符合标準Token合約結構的都可以使用cleos的查詢餘額的指令。

  • 标準查詢指令

我們首先學習使用标準Token的餘額查詢指令

cleos get currenty balance

,需要指定Token的合約名,賬号名和Token的符号。

我們來查詢下EOS的主網中b1的EOS餘額吧。

cleos -u http://eospush.tokenpocket.pro get currency balance eosio.token b1 EOS
           

EOS的合約使用的是eosio.token,使用的Token符号就是EOS。我們從圖上可以看到,b1的餘額有650萬還多的EOS,真的是有錢啊。

  • 合約查詢

合約查詢是要以我們了解合約的表結構為前提,我們需要知道合約賬号,需要知道表名和scope,還要知道Token的符号,如果不是标準的Token合約的話,我們就需要了解合約代碼了,這個我們在後面合約學習的時候再細講。我們使用合約表查詢指令

cleos get table

我們已知EOS的合約賬号是eosio.token,餘額存在于accounts表,scope就是賬号名。

我們還是來查詢EOS主網的b1的EOS餘額。

cleos -u http://eospush.tokenpocket.pro get table eosio.token b1 accounts
           

可以看到傳回的預設是json格式的表資料,rows就是資料行,一般隻會有一條資料,而且隻有一個字段,就是balance。

原文連結