iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0
Blockchain

又LAG的EOS.IO技術筆記系列 第 21

發幣與轉帳

  • 分享至 

  • xImage
  •  

前幾天部署了系統合約(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

執行合約活動(Contract Action)

在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

建立貨幣(create)

透過json格式傳遞參數的方式,可以知道意思是由eosio最為發行人,鑄造1000000000.0000代幣。在cleos push action eosio.token create後的-p eosio.token@action,意思是這個動作由eosio.token@action權限執行並簽名,合約可能會檢查執行合約的人是否有足夠得權限。(看合約怎麼寫,你也可以在eosio.token合約把相關程式碼拔掉,讓任意帳號都可以建立代幣)

發幣(issue)

不過,現在代幣還沒流入市場,沒人可以使用,所以還需要正式發行。不一定要全部發行出去,可以一次次的小額發行。

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建立bobalice的帳號。cleos system是簡化使用eosio.system合約的方法,newaccount就是eosio.system裡的一個活動(Action)。

透過cleos查看帳戶狀態

當然還是可以透過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

看到fromtoquantitymemo的意思,應該無須多做解釋。

查詢交易紀錄

為了查詢交易紀錄,你可能還需要在啟動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":...

上一篇
[系統合約後續]建立開發測試帳號 (系統合約部署後)
下一篇
補充系統部署簡單說明
系列文
又LAG的EOS.IO技術筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言