前幾天部署了系統合約(eosio.system
),不過如果只是需要 發幣與轉帳只需要部署eosio.token
即可。也可以修改該合約,部署到其他帳號去。
在部署完eosio.token
後,接著可以這麼做:
cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' -p eosio.token@active
cleos push action eosio.token issue '[ "eosio", "1000000000.0000 SYS", "memo" ]' -p eosio@active
在EOSIO的合約裡面,可能會定義許許多多可以使用的活動。可以使用cleos push action <CONTRACT> <ACTION>
來觸發執行約裡的活動。除了<CONTRACT>
和<ACTION>
外,隨後接著給Action
的參數。這個參數可以使用array
序列的格式,但如果知道參數名稱,也可以使用json
格式傳遞參數,所以可以像是這樣建立一個Example(EXP)代幣。
cleos push action eosio.token create '{ "issuer":"eosio", "maximum_supply":"1000000000.0000 EXP"}' -p eosio.token@active
透過json
格式傳遞參數的方式,可以知道意思是由eosio
最為發行人,鑄造1000000000.0000
代幣。在cleos push action eosio.token create
後的-p eosio.token@action
,意思是這個動作由eosio.token
由@action
權限執行並簽名,合約可能會檢查執行合約的人是否有足夠得權限。(看合約怎麼寫,你也可以在eosio.token
合約把相關程式碼拔掉,讓任意帳號都可以建立代幣)
不過,現在代幣還沒流入市場,沒人可以使用,所以還需要正式發行。不一定要全部發行出去,可以一次次的小額發行。
cleos push action eosio.token issue '[ "eosio", "1000000000.0000 SYS", "memo" ]' -p eosio@active
執行eosio.token
合約裡的issue
,指定發行給誰?給予的數量?以及交易注記。上述執行完後,eosio
帳號就多了1000000000.0000 SYS
可以使用。
透過cleos get currency stats
可以查看代幣狀態:
cleos get currency stats eosio.token SYS
Output:
{
"SYS": {
"supply": "1000000000.0000 SYS",
"max_supply": "1000000000.0000 SYS",
"issuer": "eosio"
}
}
除了系統帳號(eosio
)、轉帳合約(eosio.token
),在建立兩個帳號來使用、測試作為範例。
如果未部署系統合約,可以使用
cleos create account
的方式。(參考(系統合約部署前) 建立開發測試帳號 )
cleos system newaccount eosio alice <PUBLIC KEY> --stake-net '1000.000 SYS' --stake-cpu '100.000 SYS' --buy-ram '1000.000 SYS'
cleos system newaccount eosio bob <PUBLIC KEY> --stake-net '1000.000 SYS' --stake-cpu '100.000 SYS' --buy-ram '1000.000 SYS'
現在,我們用cleos system newaccount
建立bob
和alice
的帳號。cleos system
是簡化使用eosio.system
合約的方法,newaccount
就是eosio.system
裡的一個活動(Action)。
當然還是可以透過cleos get account
查看帳戶狀態:
cleos get account eosio
Output:
privileged: true
permissions:
owner 1: 1 <PUBLIC KEY>
active 1: 1 <PUBLIC KEY>
memory:
quota: unlimited used: 2.527 MiB
net bandwidth:
......
cpu bandwidth:
......
SYS balances:
liquid: 999995800.0000 SYS
staked: 0.0000 SYS
unstaking: 0.0000 SYS
total: 999995800.0000 SYS
producers: <not voted>
注意SYS balances
,不過也可以透過cleos get currency balance eosio.token eosio SYS
來查詢。這個方式更為靈活,如果你部署了其他eosio.token
合約,或是把合約部署到不是eosio.token
的帳號,可以透過這樣的命令加以查詢,只需要修改eosio.token
就好。
透過觸發eiosio.token
裡的transfer
活動來轉帳:
cleos push action eosio.token transfer '["eosio", "bob", "1.0000 SYS", "send to bob"]' -p eosio
或是:
cleos push action eosio.token transfer '{"from":"eosio", "to":"alice", "quantity":"1.0000 SYS", "memo":"send to alice"}' -p eosio
看到from
、to
、quantity
和memo
的意思,應該無須多做解釋。
為了查詢交易紀錄,你可能還需要在啟動nodeos
時多加一個參數--filter-on "*"
。接著可以透過cleos get actions <ACCOUNT>
來查詢紀錄。現在來查詢看看透過eosio.token
發幣、轉帳紀錄:
cleos get actions eosio.token
Output:
# 0 2019-10-07T05:26:42.500 eosio::setcode => eosio 53bb4b62... {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"00...
# 1 2019-10-07T05:26:42.500 eosio::setabi => eosio 53bb4b62... {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e...
# 2 2019-10-07T05:26:49.000 eosio.token::create => eosio.token bd72ef81... {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}...
# 3 2019-10-07T05:26:49.000 eosio.token::issue => eosio.token b93a7b23... {"to":"eosio","quantity":"1000000000.0000 SYS","memo":"issue...
# 4 2019-10-07T05:26:52.500 eosio.token::open => eosio.token f70e0345... {"owner":"eosio.rex","symbol":"4,SYS","ram_payer":"eosio"}...
# 5 2019-10-07T05:37:35.000 eosio.token::transfer => eosio.token 1c3526af... {"from":"eosio","to":"eosio.ram","quantity":"995.0000 SYS","...
# 6 2019-10-07T05:37:35.000 eosio.token::transfer => eosio.token 1c3526af... {"from":"eosio","to":"eosio.ramfee","quantity":"5.0000 SYS",...
# 7 2019-10-07T05:37:35.000 eosio.token::transfer => eosio.token 1c3526af... {"from":"eosio","to":"eosio.stake","quantity":"1100.0000 SYS...
# 8 2019-10-07T05:37:36.000 eosio.token::transfer => eosio.token 1da92467... {"from":"eosio","to":"eosio.ram","quantity":"995.0000 SYS","...
# 9 2019-10-07T05:37:36.000 eosio.token::transfer => eosio.token 1da92467... {"from":"eosio","to":"eosio.ramfee","quantity":"5.0000 SYS",...
# 10 2019-10-07T05:37:36.000 eosio.token::transfer => eosio.token 1da92467... {"from":"eosio","to":"eosio.stake","quantity":"1100.0000 SYS...
# 11 2019-10-07T05:37:49.000 eosio.token::transfer => eosio.token 9abe1dfb... {"from":"eosio","to":"bob","quantity":"1.0000 SYS","memo":"s...
# 12 2019-10-07T05:37:59.500 eosio.token::transfer => eosio.token 130dc225... {"from":"eosio","to":"alice","quantity":"1.0000 SYS","memo":...