上一篇文章中,我們學習了創(chuàng)建錢包羔飞、解鎖錢包肺樟、創(chuàng)建key-pair、向錢包導入key以及加載BIOS合約的內容逻淌,本篇文章么伯,我們將開始創(chuàng)建賬戶,并開始創(chuàng)造我們的第一個token卡儒,也就是“造幣”了田柔。
注意,在運行下面的命令之前骨望,請先啟動nodeos
硬爆。
查看keys
使用cleos wallet keys
命令:
? ~ cleos wallet keys
Error 3120006: No available wallet
Ensure that you have created a wallet and have it open
如果你的提示也和上面一樣,代表你還沒有unlock錢包擎鸠,那么我們解鎖一下吧缀磕。記得在提示輸入密碼的地方輸入你錢包的私鑰(還記得前面章節(jié)里保存的私鑰嗎?):
? ~ cleos wallet unlock
password: Unlocked: default
OK劣光,搞定袜蚕。我們再運行一次cleos wallet keys
命令:
? ~ cleos wallet keys
[
"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr"
]
你可以看到我錢包里的key了。注意绢涡,這里默認只顯示出公鑰牲剃,私鑰部分wallet也是有保存的。只是為了安全起見垂寥,沒有顯示而已。如果你導入錢包的key都是按照本教程來的,那么你在這里看到的keys列表應該跟我的一樣的滞项。
這兩個key狭归,其中EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
是我自己導入的,后續(xù)創(chuàng)建賬戶我們將會使用這個文判。另外一個EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
是系統(tǒng)合約用的过椎,也就是我們在上一篇中加載bios合約時導入的。
創(chuàng)建用戶賬戶
現(xiàn)在戏仓,我們開始創(chuàng)建兩個用戶賬戶疚宇,user
和tester
,注意赏殃,在公鏈上我們很難創(chuàng)建這么短的賬戶名》蟠現(xiàn)在我們是測試用的私有鏈嘛,所以沒這個問題啦仁热。下面開始創(chuàng)建:
? ~ cleos create account eosio user EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
executed transaction: 3154e19074cebc85f62cbc7a60ac750f4eb9c47e7b642c96d432e37ae5f3b016 200 bytes 3180 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"user","owner":{"threshold":1,"keys":[{"key":"EOS83sN8bfKGk3jTBezN41UN7LfX...
? ~ cleos create account eosio tester EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
executed transaction: 4d8b4d3face8618f18c760b6d25d3cf12f7d358f6556ca0dbaf03e9fd752b38a 200 bytes 213 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"tester","owner":{"threshold":1,"keys":[{"key":"EOS83sN8bfKGk3jTBezN41UN7L...
這里用到的命令是:
cleos create account [OPTIONS] creator name OwnerKey ActiveKey
其中 creator
代表用哪個賬戶作為創(chuàng)建者榜揖,當前命令是用eosio作為創(chuàng)建者。
name
代表新賬戶的名字抗蠢。
OwnerKey
代表新賬戶的歸屬key
的公鑰举哟,這個key很重要,所以在主網(wǎng)上面迅矛,歸屬key
的私鑰部分要嚴格保密妨猩。
ActiveKey
代表新賬戶的活動key
的公鑰,當我們以這個賬戶做一些一般的簽名的時候秽褒,只需要用這個key就可以了壶硅。
這里,因為是教程震嫉,所以呢森瘪,為了方便,就讓它倆一樣了票堵。
通過上面兩個命令的輸出內容扼睬,可以看出來,我們已經創(chuàng)建成功了悴势。
查看key所控制的賬戶
? ~ cleos get accounts EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
{
"account_names": [
"tester",
"user"
]
}
可以看到窗宇,EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
控制著我們的兩個賬戶user
和tester
,這是自然特纤,因為我們就是用這個key創(chuàng)建的嘛军俊。
查看賬戶信息
? ~ cleos get account user
permissions:
owner 1: 1 EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
active 1: 1 EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
memory:
quota: unlimited used: 2.66 KiB
net bandwidth:
used: unlimited
available: unlimited
limit: unlimited
cpu bandwidth:
used: unlimited
available: unlimited
limit: unlimited
注意這個命令與上面的命令很像,注意區(qū)分捧存。這個命令可以告訴我們某一個賬戶的資源信息以及權限信息粪躬。
部署eosio.token
合約
eosio.token
是blockone提供的合約担败,它允許我們調用這個合約創(chuàng)建自己的token。首先我們先創(chuàng)建一個eosio.token
賬戶名镰官,接著我們就以這個賬戶來部署eosio.token
合約提前。
? ~ cleos create account eosio eosio.token EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
executed transaction: df857318df8364fa76122859018e82948f928791544b4a8242cce024db683fd0 200 bytes 350 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"eosio.token","owner":{"threshold":1,"keys":[{"key":"EOS83sN8bfKGk3jTBezN4...
創(chuàng)建方式與之前創(chuàng)建user
和tester
賬戶一樣。我們也都用了相同的key泳唠。
eosio.token
合約的源碼位于contracts/eosio.token
狈网,編譯后的文件位于: build/contracts/eosio.token
,它里面的文件有:
? eosio.token git:(master) ? ls
CMakeFiles eosio.token.abi eosio.token.s
CTestTestfile.cmake eosio.token.abi.hpp eosio.token.wasm
Makefile eosio.token.bc eosio.token.wast
cmake_install.cmake eosio.token.cpp.bc eosio.token.wast.hpp
OK笨腥,我們下面拓哺,以eosio.token賬戶來部署eosio.token
合約。
cleos set contract eosio.token build/contracts/eosio.token -p eosio.token@active
與上篇文章中脖母,我們部署eosio.bios
并無本質區(qū)別士鸥。你可能注意到了,我們部署合約的時候镶奉,只需要使用賬戶的活動key
就好了础淤。
創(chuàng)造token
你可以從 contracts/eosio.token/eosio.token.hpp
看到如下接口:
void create( account_name issuer,
asset maximum_supply );
void issue( account_name to, asset quantity, string memo );
void transfer( account_name from,
account_name to,
asset quantity,
string memo );
意如其名,create
可以用來造幣哨苛,作為參數(shù)傳遞進去的issuer
將有權調用issue以及其他的一些敏感操作鸽凶,如:凍結,白名單操作等等建峭。
我們下面調用上面的合約玻侥,來發(fā)行token,命名為SYS
:
? eos git:(master) ? cleos push action eosio.token create \
'{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \
-p eosio.token@active
executed transaction: ed4ef520b7eb580f4bedb991dbc341b99c2362be022fdab47a2291fdadb26b74 120 bytes 3881 us
# eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}
如君所見亿蒸,我們創(chuàng)建了一個10億個SYS凑兰,我們可以看到發(fā)行者是eosio
,其實我們也可以用user
作為發(fā)行者边锁。下面我們就來試一下姑食,不過呢,這次我們用另一種參數(shù)的形式:
? eos git:(master) ? cleos push action eosio.token create \
'["user", "1000000000.0000 SYSU"]' \
-p eosio.token@active
executed transaction: c4be472ff5a173be903228a1f973d706f2290aac6800fde04279b81ac1e66538 120 bytes 344 us
# eosio.token <= eosio.token::create {"issuer":"user","maximum_supply":"1000000000.0000 SYSU"}
這一次茅坛,我們這個token叫做SYSU
(注意音半,token的名字必須是大寫字母),發(fā)行者是user
贡蓖。這里的參數(shù)曹鸠,我們用的數(shù)組形式,這種方式沒前一種那么清晰明了斥铺,不過更為簡潔彻桃。
這里的-p eosio.token@active
,代表使用eosio.token
的權限晾蜘,因為這個合約是屬于eosio.token
賬戶邻眷。
給tester分配token
我們已經創(chuàng)建了SYSU
token眠屎,下面我們把這個SYSU
分配一部分給tester吧。
? eos git:(master) ? cleos push action eosio.token issue '[ "tester", "100.0000 SYSU", "memo" ]' \
-p user@active
executed transaction: 2fbeacc3b3b19f332f6b6205ecaee0ac3526850f45e21cd05d708424a94cfdd4 128 bytes 1674 us
# eosio.token <= eosio.token::issue {"to":"tester","quantity":"100.0000 SYSU","memo":"memo"}
# eosio.token <= eosio.token::transfer {"from":"user","to":"tester","quantity":"100.0000 SYSU","memo":"memo"}
# user <= eosio.token::transfer {"from":"user","to":"tester","quantity":"100.0000 SYSU","memo":"memo"}
# tester <= eosio.token::transfer {"from":"user","to":"tester","quantity":"100.0000 SYSU","memo":"memo"}
如君所見肆饶,這個命令觸發(fā)了一個issue
action组力,三個transfer
action。這一個issue
action在內部觸發(fā)了一次transfer
action抖拴,另外兩次transfer
action分別是給發(fā)送者(user)和接受者(tester)的通知。
轉賬
現(xiàn)在tester已經有SYSU
token了腥椒,我可以轉一部分給user
阿宅。注意,user
創(chuàng)建了SYSU
笼蛛,不過此時user
賬戶中并沒有SYSU
洒放,我們也可以像上面一樣分配一些SYSU
給user
;不過呢滨砍,我們打算這里玩一玩轉賬往湿。
? eos git:(master) ? cleos push action eosio.token transfer \
'[ "tester", "user", "25.0000 SYSU", "memo" ]' -p tester@active
executed transaction: e89dcc5fd253404d3f8cf445e1a1139939dcb21ca92ae472c95f6338864853b1 136 bytes 506 us
# eosio.token <= eosio.token::transfer {"from":"tester","to":"user","quantity":"25.0000 SYSU","memo":"memo"}
# tester <= eosio.token::transfer {"from":"tester","to":"user","quantity":"25.0000 SYSU","memo":"memo"}
# user <= eosio.token::transfer {"from":"tester","to":"user","quantity":"25.0000 SYSU","memo":"memo"}
好了,今天主要部署了EOS內置的合約惋戏,明天我們開始寫自己的一個hello world
合約领追。
簡介:不羈,一名程序員响逢;專研EOS技術绒窑,玩轉EOS智能合約開發(fā)。
微信公眾號:know_it_well
知識星球地址:https://t.zsxq.com/QvbuzFM
歡迎加入知識星球討論學習舔亭。