簡介
本篇我們會學(xué)習(xí)最基本的賬號相關(guān)的操作,包括了創(chuàng)建賬號和查詢,關(guān)于賬號資源的操作因?yàn)楸仨毾炔渴鹣到y(tǒng)合約墨榄,所以我們會留到后面單獨(dú)寫一篇來講解。
賬號介紹
EOS的設(shè)計(jì)與以往的其他區(qū)塊鏈有很大的不同勿她,傳統(tǒng)區(qū)塊鏈上使用的賬號都是直接使用公鑰袄秩,而EOS使用了最多13位長的簡短賬號名,并以此擴(kuò)展出了賬號權(quán)限的功能逢并。
傳統(tǒng)的公鑰賬號之剧,可以不用在鏈上創(chuàng)建賬號而直接使用,匿名性也更強(qiáng)砍聊,使用起來更有科技感背稼,可惜,缺點(diǎn)也很明顯玻蝌,完全無法靠大腦來記憶蟹肘,賬號只是單密鑰對词疼,所以無法擴(kuò)展權(quán)限,只能借助智能合約帘腹。為了解決難記憶的問題寒跳,人們又設(shè)計(jì)出了助記詞,可惜12個(gè)單詞的組合竹椒,也不夠人性童太。
EOS的賬號設(shè)計(jì)很人性化,最長13位胸完,可以使用24個(gè)小寫字母和1-5的數(shù)字书释,特殊賬號還可使用.字符,你完全可以創(chuàng)建一個(gè)有特定意義的賬號名赊窥。系統(tǒng)設(shè)計(jì)還增加了一個(gè)短號的競拍市場爆惧,而短號又能創(chuàng)建出短號后綴的特殊靚號。這一系列設(shè)計(jì)都讓賬號的可玩性和收藏性增加了锨能,同時(shí)更便于記憶扯再。
賬號的安全性同樣是用了ECC的非對稱加密產(chǎn)生的密鑰對,默認(rèn)有owner和active兩個(gè)內(nèi)置權(quán)限址遇,owner是最高權(quán)限熄阻,active默認(rèn)操作權(quán)限,在創(chuàng)建時(shí)可以配置不同的公鑰倔约,也就提升了賬號的安全性秃殉,我們只讓active的私鑰觸網(wǎng),即使被盜浸剩,我們還可以使用owner權(quán)限將active的公鑰替換了钾军。傳統(tǒng)的區(qū)塊鏈賬號,一旦私鑰被盜绢要,就意味著這個(gè)賬號已經(jīng)無法再正常使用了吏恭。
但是EOS的賬號設(shè)計(jì)也有比較明顯的問題,賬號必須通過EOS鏈來創(chuàng)建重罪,而你要上鏈樱哼,又必須有EOS賬號,所以蛆封,新用戶無法獨(dú)自完成賬號的創(chuàng)建唇礁。
EOS賬號增加了CPU、NET和RAM的設(shè)定惨篱,這本身更符合EOS(Enterprise Operation System盏筐,企業(yè)級操作系統(tǒng))的設(shè)定,這些資源的設(shè)定本身都是為了使系統(tǒng)可以維持健康砸讳,就像以太坊上有Gas費(fèi)用琢融,來防止鏈上的惡意交易并增加交易確認(rèn)的及時(shí)性界牡。EOS中的資源同樣增加了惡意交易的代價(jià),保證了全網(wǎng)良性的生態(tài)漾抬,同時(shí)賦予了EOS通證的概念宿亡,讓持有EOS的人可以獲得更大的權(quán)益和便利。
內(nèi)存必須通過市場進(jìn)行買賣纳令,采用班科(Bancor)算法來保證內(nèi)存價(jià)格符合市場需求挽荠。而CPU和Net則是通過EOS抵押,讓全網(wǎng)資源的使用代價(jià)降低了平绩,而抵押獲得的CPU量隨全網(wǎng)抵押而波動(dòng)圈匆,符合全網(wǎng)運(yùn)算能力的要求捏雌,3天的贖回期給予全網(wǎng)一定的緩沖期跃赚。CPU和Net是可再生資源,在一個(gè)窗口期內(nèi)用完了沒事性湿,隨著時(shí)間推移會慢慢恢復(fù)的纬傲。
這些設(shè)定都是很前衛(wèi)的,但是仍然存在著無法預(yù)期的情況肤频,EOS主網(wǎng)這兩年出現(xiàn)過2次重大的CPU資源短缺問題叹括,特別是2019年10月的這次,持續(xù)長達(dá)5個(gè)月的CPU短缺着裹,只因一個(gè)交易挖礦的合約领猾,面對這樣突然的情況,EOS的主創(chuàng)b1采用了讓市場自動(dòng)調(diào)控骇扇。加之EOS價(jià)值的升高,都使得EOS主網(wǎng)的使用代價(jià)越來越高面粮。
補(bǔ)充說明genesis.json
這里要補(bǔ)充一下前面啟動(dòng)節(jié)點(diǎn)沒提到的一個(gè)文件genesis.json文件少孝,這個(gè)是創(chuàng)世配置文件,里面的配置都是關(guān)于鏈的基本配置熬苍,chainid也是根據(jù)此文件生成的稍走,所以這個(gè)文件不同,產(chǎn)生出來的就是不同的運(yùn)行鏈柴底。EOS程序默認(rèn)有一套配置婿脸,所以你在啟動(dòng)節(jié)點(diǎn)時(shí)沒有指定--genesis-json同樣可以啟動(dòng)成功。下面這個(gè)配置就是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
? }
}
注意到里面有個(gè)initial_key了吧狐树,這個(gè)就是初始賬號eosio的公鑰,我們在啟動(dòng)節(jié)點(diǎn)時(shí)使用的配置文件中有個(gè)配置signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3這個(gè)就是默認(rèn)的eosio的owner密鑰對鸿脓,開發(fā)環(huán)境我們都是使用這個(gè)密鑰抑钟。
我們將啟動(dòng)節(jié)點(diǎn)中配置的這個(gè)eosio的私鑰導(dǎo)入錢包涯曲,準(zhǔn)備后續(xù)我們創(chuàng)建賬號使用。
EOS創(chuàng)建賬號一定需要使用一個(gè)已存在的賬號來創(chuàng)建在塔,所以幻件,你無論在哪個(gè)網(wǎng)絡(luò)上創(chuàng)建賬號,只能讓有賬號的人幫你創(chuàng)建或者支付一定的費(fèi)用來幫你創(chuàng)建蛔溃。EOS主網(wǎng)上目前提供了很多創(chuàng)建賬號的渠道绰沥,也有很多三方提供了支付創(chuàng)建賬號甚至免費(fèi)創(chuàng)建賬號的功能。
如果大家還沒有EOS主網(wǎng)的賬號贺待,我建議你通過幾個(gè)主流錢包來獲得一個(gè)廉價(jià)且獨(dú)特的個(gè)人賬號揪利,比如TokenPocket。當(dāng)然狠持,你也可以購買一個(gè)特別后綴的短號疟位,當(dāng)你有賬號后,還可以進(jìn)入EOS的賬號市場中進(jìn)行競拍來獲得靚號喘垂。
注意:因?yàn)镋OS創(chuàng)建賬號需要使用已有賬號來創(chuàng)建甜刻,所以該操作是需要交易簽名的,在調(diào)用命令前正勒,需要解鎖導(dǎo)入了用于創(chuàng)建賬號的賬號私鑰的錢包得院。
在初始啟動(dòng)節(jié)點(diǎn)后,我們就可以使用內(nèi)置的默認(rèn)賬號eosio來創(chuàng)建其他新的賬號了章贞,前面在補(bǔ)充說明genesis.json已經(jīng)導(dǎo)入了eosio的私鑰到錢包中祥绞。
我們現(xiàn)在可以使用cleos create account命令來創(chuàng)建系統(tǒng)賬號了,系統(tǒng)賬號有一個(gè)很特別的特點(diǎn)鸭限,就是賬號資源都是無限的蜕径,沒有內(nèi)存限制,CPU和Net都是-1(表示無限)败京。在開發(fā)階段兜喻,這種賬號其實(shí)非常好用,開發(fā)合約的過程中赡麦,會大量使用到內(nèi)存等資源朴皆,所以創(chuàng)建系統(tǒng)賬號可以很好的用于合約測試。
我們現(xiàn)在創(chuàng)建一個(gè)賬號astaldo泛粹。
cleos create account eosio astaldo EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3 EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3
其中eosio是用于創(chuàng)建新賬號時(shí)使用的賬號遂铡,目前創(chuàng)建的是系統(tǒng)級賬號,所以只能使用eosio賬號來創(chuàng)建晶姊,后面的兩個(gè)公鑰分別是新賬號的owner和active的公鑰扒接。
創(chuàng)建普通賬號需要先部署系統(tǒng)合約,也就是eosio.system合約,但是這需要很多的配置珠增,并創(chuàng)建好所有系統(tǒng)賬號……這塊功能可以單獨(dú)寫一篇文章了超歌,所以我會在后面單獨(dú)寫一篇《EOS部署系統(tǒng)合約的完全啟動(dòng)》。
這里我簡單提一下如何通過cleos來創(chuàng)建普通賬號蒂教。需要用到cleos system newaccount命令巍举,因?yàn)椴渴鹆讼到y(tǒng)合約,創(chuàng)建賬號的功能會覆蓋了程序默認(rèn)賬號創(chuàng)建入口凝垛,所以創(chuàng)建系統(tǒng)級賬號的方法也就不能直接用了懊悯,要更換成這個(gè)新命令了。命令有很多參數(shù)梦皮,我先說明下核心參數(shù)炭分,其他的大家可以使用--help查看幫助。
#基礎(chǔ)結(jié)構(gòu)
cleos system newaccount [OPTIONS] creator name OwnerKey [ActiveKey]
creator 指定用于創(chuàng)建賬號的EOS賬號剑肯,也就是用于支付資源開銷的賬號
name 新賬號的賬號名
OwnerKey 指定新賬號的Owner權(quán)限的公鑰
ActiveKey 可選捧毛,默認(rèn)和Owner的公鑰一致,為了提升安全性让网,建議設(shè)置不同的公鑰
OPTIONS 參數(shù)有很多呀忧,這里重點(diǎn)關(guān)注以下幾個(gè):
—stake-net 創(chuàng)建時(shí)為新賬號質(zhì)押的NET
—stake-cpu 創(chuàng)建時(shí)為新賬號質(zhì)押的CPU
—buy-ram-kbytes 創(chuàng)建時(shí)為新賬號購買的內(nèi)存
—transfer 創(chuàng)建時(shí)抵押的資源是否轉(zhuǎn)移給新賬號,默認(rèn)是為他人抵押溃睹,可被原賬號收回
如果我要使用eosastaldo11創(chuàng)建一個(gè)eosastaldo12而账,可以使用以下命令,這里我使用了jungle網(wǎng)絡(luò)的節(jié)點(diǎn)地址因篇。
cleos -u "http://jungle2.cryptolions.io" system newaccount --stake-net '1 EOS' --stake-cpu '10 EOS' --buy-ram-kbytes 1000 eosastaldo11 eosastaldo22 EOS8h8YD7956jYf99BV6kBit5d9461xaxyTf9HPxmARcnTEnFivY8 EOS7DhW1StAhprCBwpAfgMpmHuN2H3V8t4B45tzQtEYckHRr5CASN
我們?yōu)閑osastaldo12初始抵押了10EOS的CPU和1EOS的NET泞辐,購買了1MB的內(nèi)存,使用了兩個(gè)不同的公鑰為別作為owner和active竞滓「篮穑可以看到,創(chuàng)建賬號時(shí)發(fā)生了很多的內(nèi)聯(lián)交易虽界,包括了內(nèi)存的購買汽烦、CPU和Net的抵押。
查詢賬號
賬號的基本信息是存在于鏈上系統(tǒng)表里的莉御,而其他的賬號信息,比如EOS余額都是在相應(yīng)的合約表里的俗冻,所以查詢的方式都是不同的礁叔。
賬號的基本信息包含了賬號的創(chuàng)建時(shí)間、權(quán)限分配迄薄、資源使用和抵押情況琅关。可以直接通過cleos get account命令來查看。
我們現(xiàn)在來查詢下eosio這個(gè)系統(tǒng)賬號涣易,cleos get account eosio画机。
可以看到在系統(tǒng)級賬號的memory是無限的(unlimited),Net和CPU也都是無限的新症。privileged為true說明了這個(gè)是個(gè)特權(quán)賬號步氏。
我們再來查詢下EOS主網(wǎng)上的一個(gè)賬號b1,這個(gè)就是大名鼎鼎的EOS創(chuàng)始人的賬號徒爹。
cleos -u http://eospush.tokenpocket.pro get account b1
可以看到b1的內(nèi)存太大了有將近32G呢荚醒,還有那Net和CPU的抵押,staked表示抵押的EOS隆嗅,delegated他人為其抵押的EOS界阁,used表示已使用的資源數(shù),available是目前還可用的資源數(shù)胖喳,limit是當(dāng)前資源的上限泡躯。可以說b1的資源都近似于無限了丽焊。另外b1的權(quán)限下有多個(gè)key较剃,這個(gè)我們會在權(quán)限管理的文章里面詳細(xì)說明。
查詢賬號余額是需要通過查詢合約粹懒。EOS上為了更方便的發(fā)行Token重付,所以從EOS的發(fā)行就采用了合約的形式,這為所有的Token發(fā)行提供了一個(gè)官方模板凫乖,符合標(biāo)準(zhǔn)Token合約結(jié)構(gòu)的都可以使用cleos的查詢余額的命令确垫。
標(biāo)準(zhǔn)查詢命令
我們首先學(xué)習(xí)使用標(biāo)準(zhǔn)Token的余額查詢命令cleos get currenty balance,需要指定Token的合約名帽芽,賬號名和Token的符號删掀。
我們來查詢下EOS的主網(wǎng)中b1的EOS余額吧。
cleos -u http://eospush.tokenpocket.pro get currency balance eosio.token b1 EOS
EOS的合約使用的是eosio.token导街,使用的Token符號就是EOS披泪。我們從圖上可以看到,b1的余額有650萬還多的EOS搬瑰,真的是有錢啊款票。
合約查詢
合約查詢是要以我們了解合約的表結(jié)構(gòu)為前提,我們需要知道合約賬號泽论,需要知道表名和scope艾少,還要知道Token的符號,如果不是標(biāo)準(zhǔn)的Token合約的話翼悴,我們就需要了解合約代碼了缚够,這個(gè)我們在后面合約學(xué)習(xí)的時(shí)候再細(xì)講。我們使用合約表查詢命令cleos get table。
我們已知EOS的合約賬號是eosio.token谍椅,余額存在于accounts表误堡,scope就是賬號名。
我們還是來查詢EOS主網(wǎng)的b1的EOS余額雏吭。
cleos -u http://eospush.tokenpocket.pro get table eosio.token b1 accounts
可以看到返回的默認(rèn)是json格式的表數(shù)據(jù)锁施,rows就是數(shù)據(jù)行,一般只會有一條數(shù)據(jù)思恐,而且只有一個(gè)字段沾谜,就是balance。
更多內(nèi)容請關(guān)注微信公眾號