• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 5211
    • 0
    • 分享到

    教你如何在EOS上發行Token的編程代碼|技術貼

    2018-5-12 14:28

    來源: cc-value


    教你如何在EOS上發token。此文價值連城。希望對你所有啟發。


    作者:古千峰


    昨天,筆者和幾個EOS開發先行者翻譯了官方的開發文檔。筆者承擔的翻譯任務中有《eosio代幣合約教程》一節,先分享在此,先睹為快。


    原文:


    https://github.com/EOSIO/eos/wiki/Tutorial-eosio-token-Contract


    翻譯稿:


    https://github.com/eostea/eos-wiki/blob/master/docs/Jacky_eosio_token_contract.md


    (因格式原因,將markdown格式文本粘貼致辭閱讀體驗不佳,建議查看上面鏈接中的翻譯稿)


    本節內容假設您已掌握《智能合約入門》一節,并以建立起了EOS測試節點。


    現在,其實已經搭建起來的區塊鏈并不能做多少事情,所以,首先讓我們來部署一個代幣合約eosio.token。


    這個合約能讓許多不同的代幣同時在一個智能合約上發行,但是卻能被不同用戶管理。


    在發行一個代幣前,我們需要建立一個賬戶用來部署代幣合約。


    cleos create account eosio eosio.token 公鑰1 公鑰2

    以上命令創建了一個名為eosio.token的賬戶。


    然后,將位于${EOS根目錄}/build/contracts/eosio.token的文件部署到eosio.token賬戶。


    cleos set contract eosio.token build/contracts/eosio.token -p eosio.token     Reading WAST...     Assembling WASM...     Publishing contract... executed transaction: 528bdbce1181dc5fd72a24e4181e6587dace8ab43b2d7ac9b22b2017992a07ad 8708 bytes 10000 cycles eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001ce011d60067f7e7f7f7f7f00... eosio <= eosio::setabi 

    {"account":"eosio.token","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name"...


    創建一個代幣


    以下是代幣發型合約eosio.token的標準接口,文件位于 contracts/eosio.token/eosio.token.hpp:


    void create( account_name issuer,

    asset maximum_supply,

    uint8_t can_freeze,

    uint8_t can_recall,

    uint8_t can_whitelist );


    void issue( account_name to, asset quantity, string memo );


    void transfer( account_name from,

    account_name to,

    asset quantity,

    string memo );


    譯者注:開發過以太坊ERC20代幣的一定熟悉,ERC20規范了totalSupply(), balanceOf(), transfer(), transferFrom()等六個方法。eosio.token也做了類似規范,只要是create(),issue(),transfer()三個方法構造的代碼,就是一個發幣智能合約。


    如果需要創建一個代幣,首先需要執行create(...)方法,在這個方法中,maximum_supply代表需要發行的資產,用字符串表示,比如發行10億個BOS,則為"1000000000.0000 BOS"。發行方issuer必須是經過授權的能夠執行發行資產issue、凍結資產freezing、召回資產recall、設置白名單whitelist等操作。


    下面用cleos命令來創建一個名為BOS的代幣,發行量為10億,精度為小數點后4位:


    $ cleos push action eosio.token create '[ "eosio", "1000000000.0000 EOS", 0, 0, 0]' -p eosio.token

    執行結果:

    executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12 260 bytes 1000 cycles

    # eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"1000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...


    另外,還有一種較為復雜的方式,使用JSON格式的參數:


    $ cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 EOS", "can_freeze":0, "can_recall":0, "can_whitelist":0}' -p eosio.token


    執行結果


    executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12 260 bytes 1000 cycles

    # eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"1000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...


    由于創建的代幣需要“擁有”這個代幣的命名空間(如EOS),因而獲得eosio.token智能合約的權限,所以在以上命令中,有一個參數 -p eosio.token。


    讓賬戶user發行代幣


    現在,我們來創建一個代幣,代幣的發行方為賬戶user。 可以使用如下命令:


    $ cleos push action eosio.token issue '[ "user", "100.0000 EOS", "memo" ]' -p eosio


    執行結果:


    executed transaction: 822a607a9196112831ecc2dc14ffb1722634f1749f3ac18b73ffacd41160b019 268 bytes 1000 cycles

    # eosio.token <= eosio.token::issue {"to":"user","quantity":"100.0000 EOS","memo":"memo"}

    >> issue

    # eosio.token <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 EOS","memo":"memo"}

    >> transfer

    # eosio <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 EOS","memo":"memo"}

    # user <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 EOS","memo":"memo"}


    這次操作,輸出的信息中出現了一個issue和三個transfer。但是,我們只簽名了一個操作issue,怎么會出現三個transfer呢?這是因為這個issue操作帶動了inline transfer(內聯交易操作),并且這個內聯交易操作通知了發送方和接收方的帳號。以上三個transfer顯示了所有的操作細節,包括操作命令、順序等等。


    如果需要查看被廣播的實際交易,可以使用-d -j選項來指示:不要廣播,以JSON形式返回交易內容,如下:


    $ cleos push action eosio.token issue '["user", "100.0000 EOS", "memo"]' -p eosio -d -j

    結果如下:

    {

    "expiration": "2018-04-01T15:20:44",

    "region": 0,

    "ref_block_num": 42580,

    "ref_block_prefix": 3987474256,

    "net_usage_words": 21,

    "kcpu_usage": 1000,

    "delay_sec": 0,

    "context_free_actions": [],

    "actions": [{

    "account": "eosio.token",

    "name": "issue",

    "authorization": [{

    "actor": "eosio",

    "permission": "active"

    }

    ],

    "data": "00000000007015d640420f000000000004454f5300000000046d656d6f"

    }

    ],

    "signatures": [

    "EOSJzPywCKsgBitRh9kxFNeMJc8BeD6QZLagtXzmdS2ib5gKTeELiVxXvcnrdRUiY3ExP9saVkdkzvUNyRZSXj2CLJnj7U42H"

    ],

    "context_free_data": []

    }


    將代幣轉到賬戶tester


    經過上一步操作,賬戶user已經擁有了代幣,現在我們將25個EOS轉給賬戶tester。我們使用選項 -p user來授權這個操作。


    $ cleos push action eosio.token transfer '[ "user", "tester", "25.0000 EOS", "m" ]' -p user


    執行結果:


    executed transaction: 06d0a99652c11637230d08a207520bf38066b8817ef7cafaab2f0344aafd7018 268 bytes 1000 cycles

    # eosio.token <= eosio.token::transfer {"from":"user","to":"tester","quantity":"25.0000 EOS","memo":"m"}

    >> transfer

    # user <= eosio.token::transfer {"from":"user","to":"tester","quantity":"25.0000 EOS","memo":"m"}

    # tester <= eosio.token::transfer {"from":"user","to":"tester","quantity":"25.0000 EOS","memo":"m"}


    部署交易所合約


    與上述例子類似,我們也可以部署交易所exchange合約。exchange合約提供了創建與交易代幣的功能。這個部署需要在EOSIO的根目錄進行。 第一步:創建exchange帳號


    $ cleos create account eosio exchange 公鑰1 公鑰2


    執行結果:


    executed transaction: 4d38de16631a2dc698f1d433f7eb30982d855219e7c7314a888efbbba04e571c 364 bytes 1000 cycles

    # eosio <= eosio::newaccount {"creator":"eosio","name":"exchange","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxe...


    第二步:創建exchange智能合約


    $ cleos set contract exchange build/contracts/exchange -p exchange


    執行結果:


    Reading WAST...

    Assembling WASM...

    Publishing contract...

    executed transaction: 5a63b4de8a1da415590778f163c5ed26dc164c960185b20fd834c297cf7fa8f4 35172 bytes 10000 cycles

    # eosio <= eosio::setcode {"account":"exchange","vmtype":0,"vmversion":0,"code":"0061736d0100000001f0023460067f7e7f7f7f7f00600...

    # eosio <= eosio::setabi {"account":"exchange","abi":{"types":[{"new_type_name":"account_name","type":"name"}],"structs":[{"n...


    部署Eosio.msig多人簽名合約


    eosio.msig合約用來允許多方共同對一個交易進行異步簽名。 EOSIO已經在基礎層上支持多方簽名,但是需要一個異步通道來傳遞交易并簽名。eosio.msg 是一個非常友好的異步提議、確認、最終發布交易的方式。 下面是部署eosio.msig合約的步驟。 第一步:創建eosio.msig賬戶:


    $ cleos create account eosio eosio.msig 公鑰1 公鑰2 

    執行結果:

    # eosio <= eosio::newaccount {"creator":"eosio","name":"eosio.msig","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJ...


    第二步:部署eosio.msig合約:


    $ cleos set contract eosio.msig build/contracts/eosio.msig -p eosio.msig


    執行結果:


    Reading WAST...

    Assembling WASM...

    Publishing contract...

    executed transaction: a113a7db8c878dfd894671792770b59a04efb3aa8295f5b3d585daf89c314ec9 8964 bytes 10000 cycles

    # eosio <= eosio::setcode {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d0100000001bd011b60047f7e7e7f0060047...

    # eosio <= eosio::setabi {"account":"eosio.msig","abi":{"types":[{"new_type_name":"account_name","type":"name"},{"new_type_na...


    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频