EOS代幣(token通證)智能合約如何開發(fā)

Eosio.token、Exchange 和 Eosio.msig 智能合約

本教程假定你已經(jīng)完成了EOS開發(fā)從智能合約開始(一)入挣。

在這個(gè)階段亿乳,區(qū)塊鏈沒有做太多的事情,現(xiàn)在我們來部署eosio.token径筏。該合約允許創(chuàng)建許多不同的通證(token,也有叫令牌的风皿,以下直接用token),這些token都在同一個(gè)合約上運(yùn)行匠璧,但可能由不同的用戶管理。

在部署 token 合約之前咸这,我們必須創(chuàng)建一個(gè)用來部署它的帳戶夷恍,代碼如下:

$ cleos create account eosio eosio.token \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
...

然后我們可以所部署合約中找到它:

${EOSIO_SOURCE}/build/contracts/eosio.token

然后:

$ cleos set contract eosio.token build/contracts/eosio.token -p eosio.token@active
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"...

創(chuàng)建 Exchange 合約

你可以查看智能合約eosio.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 );

要?jiǎng)?chuàng)建新的token,我們必須用適當(dāng)?shù)膮?shù)調(diào)用create(...)酿雪。此命令將使用最大標(biāo)識(shí)符號(hào)來唯一地標(biāo)識(shí)(其實(shí)就是注冊(cè))tokens列表中這一個(gè)新建的token遏暴。創(chuàng)建者將有權(quán)發(fā)行,或執(zhí)行其他操作指黎,如凍結(jié)朋凉,召回,和列入所有者白名單醋安。

使用地址參數(shù)調(diào)用此方法的簡單辦法:

$ cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' \
         -p eosio.token@active
executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12  120 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}

或者杂彭,使用命名參數(shù)調(diào)用此方法:

$ cleos push action eosio.token create \
        '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \
        -p eosio.token@active
executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12  120 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}

此命令創(chuàng)建了一個(gè)新的 token 名稱為 SYS,其精度為4位小數(shù)吓揪,最大供應(yīng)量為 1000000000.0000 SYS亲怠。

為了創(chuàng)建這個(gè)token,我們需要eosio.token合約的許可柠辞,因?yàn)?code>owns即它對(duì)代幣注冊(cè)表有所有權(quán)(例如SYS)团秽。該合約的未來版本可以允許其他各方自動(dòng)購買這些各種名稱的代幣。出于這個(gè)原因叭首,我們必須通過-p eosio.token@active來授權(quán)此調(diào)用习勤。

將代幣發(fā)送到“User”帳戶中

現(xiàn)在我們已經(jīng)創(chuàng)建了token,發(fā)行者可以向我們先前創(chuàng)建的帳戶用戶發(fā)出新的token焙格。如果你沒有創(chuàng)建一個(gè)名為“User”的帳戶图毕,請(qǐng)參閱這里的說明。

我們將使用參數(shù)調(diào)用約定(vs named args)间螟。

$ cleos push action eosio.token issue '[ "user", "100.0000 SYS", "memo" ]' \
        -p eosio@active
executed transaction: 822a607a9196112831ecc2dc14ffb1722634f1749f3ac18b73ffacd41160b019  268 bytes  1000 cycles
#   eosio.token <= eosio.token::issue           {"to":"user","quantity":"100.0000 SYS","memo":"memo"}
>> issue
#   eosio.token <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"}
>> transfer
#         eosio <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"}
#          user <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"}

這次輸出吴旋,包含幾個(gè)不同的操作:一個(gè)發(fā)送和三個(gè)轉(zhuǎn)移。雖然我們簽署的唯一操作是發(fā)送厢破,但發(fā)送操作執(zhí)行了“內(nèi)聯(lián)轉(zhuǎn)移”荣瑟,“內(nèi)聯(lián)轉(zhuǎn)移”通知發(fā)送者和接收者賬戶。輸出指示被調(diào)用的所有操作處理程序摩泪,調(diào)用它們的順序笆焰,以及操作是否生成任何輸出。

從技術(shù)上講见坑,eosio.token合約可以跳過“內(nèi)鏈轉(zhuǎn)移”嚷掠,并選擇直接修改余額。然而荞驴,在這種情況下不皆,eosio.token遵循我們的token約定,該約定要求所有帳戶余額可由引用它們的轉(zhuǎn)移操作的總和來推導(dǎo)熊楼。還要求通知資金發(fā)送方和接收方霹娄,以便他們能夠自動(dòng)處理存款和取款。

如果你想查看發(fā)送的實(shí)際交易,可以使用-d選項(xiàng)顯示“不發(fā)送”和“將交易返回為JSON格式”犬耻。

$ cleos push action eosio.token issue '["user", "100.0000 SYS", "memo"]' -p eosio@active -d -j
{
  "expiration": "2018-05-25T19:02:58",
  "ref_block_num": 18200,
  "ref_block_prefix": 614206268,
  "max_net_usage_words": 0,
  "max_cpu_usage_ms": 0,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio.token",
      "name": "issue",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "00000000007015d640420f00000000000453595300000000046d656d6f"
    }
  ],
  "transaction_extensions": [],
  "signatures": [
    "SIG_K1_Khyk1GsxWCx4axqYMF2AREDvaZtZdFaQifNPkR9DomR7toJ4sGua7pMBNq2osV5TY8rcGNcgNwn1eFe3noAXsoUA26HNDJ"
  ],
  "context_free_data": []
}

將代幣發(fā)送到帳戶“tester”

現(xiàn)在該帳戶user有token踩晶,我們會(huì)將一些代幣發(fā)送給帳戶tester。 我們指定user使用權(quán)限參數(shù)-p user@active授權(quán)此操作枕磁。

$ cleos push action eosio.token transfer \
        '[ "user", "tester", "25.0000 SYS", "m" ]' -p user@active
executed transaction: 06d0a99652c11637230d08a207520bf38066b8817ef7cafaab2f0344aafd7018  268 bytes  1000 cycles
#   eosio.token <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}
>> transfer
#          user <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}
#        tester <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}

部署交易EXchange合約

與上面顯示的示例類似渡蜻,我們可以部署 Exchange 合約。Exchange 合約提供了創(chuàng)建和交易貨幣的能力计济。假設(shè)這是從EOSIO源代碼的根目錄運(yùn)行的茸苇。

$ cleos create account eosio exchange  \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
executed transaction: 4d38de16631a2dc698f1d433f7eb30982d855219e7c7314a888efbbba04e571c  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"exchange","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxe...

$ cleos set contract exchange build/contracts/exchange -p exchange@active
Reading WAST/WASM from build/contracts/exchange/exchange.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 503dddec456ae301ef467c6a05bc6bf61e1ea21ab911ef6cc6e0750001b675c8  33888 bytes  5841 us
#         eosio <= eosio::setcode               {"account":"exchange","vmtype":0,"vmversion":0,"code":"0061736d0100000001bb022f60067f7e7f7f7f7f00600...
#         eosio <= eosio::setabi                {"account":"exchange","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d650e0...

部署Eosio.msig合約

eosio.msig合約允許多方異步簽署單個(gè)交易。EOSIO本身具有多重簽名(multisig)基礎(chǔ)支持峭咒,但它需要一個(gè)同步通道税弃,主要是進(jìn)行數(shù)據(jù)傳送和簽名。Eosio.msig是一種對(duì)用戶更加友好方式凑队,可以在多方同意的情況下異步提議则果,批準(zhǔn)并最終發(fā)布交易。

以下步驟可用于部署eosio.msig合約:

$ cleos create account eosio eosio.msig  \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"eosio.msig","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJ...

$ cleos set contract eosio.msig build/contracts/eosio.msig -p eosio.msig@active
Reading WAST/WASM from build/contracts/eosio.msig/eosio.msig.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 3433c434bdef42ba2150d5df46c17e0258f20b7836a057911faa2daa66262338  8864 bytes  1319 us
#         eosio <= eosio::setcode               {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d010000000198011760017f0060047f7e7e7...
#         eosio <= eosio::setabi                {"account":"eosio.msig","abi":"0e656f73696f3a3a6162692f312e30030c6163636f756e745f6e616d65046e616d650...

另:《EOS智能合約與DApp開發(fā)入門》教程已經(jīng)上線漩氨,愛學(xué)習(xí)等不及的可以抓緊體驗(yàn)一下:

EOS教程

本教程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā)西壮,內(nèi)容涵蓋EOS工具鏈、賬戶與錢包叫惊、發(fā)行代幣款青、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn)霍狰,最后綜合運(yùn)用React和EOS的各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開發(fā)抡草。

如果你也在做以太坊開發(fā),那么可以看看這些教程:

  • web3j教程蔗坯,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解康震。
  • 以太坊教程,主要介紹智能合約與dapp應(yīng)用開發(fā)宾濒,適合入門腿短。
  • 以太坊開發(fā),主要是介紹使用node.js绘梦、mongodb橘忱、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn)卸奉,適合進(jìn)階钝诚。
  • python以太坊,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解榄棵。
  • php以太坊敲长,主要是介紹使用php進(jìn)行智能合約開發(fā)交互郎嫁,進(jìn)行賬號(hào)創(chuàng)建、交易祈噪、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和事件等內(nèi)容尚辑。

博客原文在這里:EOS token 智能合約開發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辑鲤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠茬,更是在濱河造成了極大的恐慌月褥,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓢喉,死亡現(xiàn)場離奇詭異宁赤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)栓票,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門决左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人走贪,你說我怎么就攤上這事佛猛。” “怎么了坠狡?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵继找,是天一觀的道長。 經(jīng)常有香客問我逃沿,道長婴渡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任凯亮,我火速辦了婚禮边臼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘触幼。我一直安慰自己硼瓣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布置谦。 她就那樣靜靜地躺著堂鲤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪媒峡。 梳的紋絲不亂的頭發(fā)上瘟栖,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音谅阿,去河邊找鬼半哟。 笑死酬滤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寓涨。 我是一名探鬼主播盯串,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼戒良!你這毒婦竟也來了体捏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤糯崎,失蹤者是張志新(化名)和其女友劉穎几缭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沃呢,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡年栓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薄霜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某抓。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖黄锤,靈堂內(nèi)的尸體忽然破棺而出搪缨,到底是詐尸還是另有隱情,我是刑警寧澤鸵熟,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布副编,位于F島的核電站,受9級(jí)特大地震影響流强,放射性物質(zhì)發(fā)生泄漏痹届。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一打月、第九天 我趴在偏房一處隱蔽的房頂上張望队腐。 院中可真熱鬧,春花似錦奏篙、人聲如沸柴淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽为严。三九已至,卻和暖如春肺稀,著一層夾襖步出監(jiān)牢的瞬間第股,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工话原, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夕吻,地道東北人诲锹。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像涉馅,于是被迫代替她去往敵國和親归园。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • EOS.IO技術(shù)白皮書鏈接:EOSIO/Documentation 摘要 EOS.IO 軟件引入一種新的區(qū)塊鏈架構(gòu)...
    yuyangray閱讀 1,667評(píng)論 0 4
  • EOS智能合約 ##康爍簡介: 康爍稚矿,柏鏈道捷(PDJ Education)CTO蔓倍、副總裁、清華阿爾山區(qū)塊鏈研究中...
    糖果果老師閱讀 2,701評(píng)論 0 0
  • 【手寫愛情繪本4.0】人生是一場修行:每一個(gè)愛你的人盐捷,每一個(gè)恨你的人,每一個(gè)你愛的人默勾,每一個(gè)你恨的人碉渡,無論是愛之深...
    主播亞東閱讀 380評(píng)論 0 3
  • 7歲女兒的漫畫作業(yè)
    獅子的耳朵閱讀 106評(píng)論 0 0
  • 我有一事托付,些許冒昧母剥,望君涵恕滞诺。 過了今天,我就會(huì)去做商人了环疼,做夢(mèng)要用很多錢习霹,夢(mèng)雖然做了一半,身陷囹圄一年炫隶,后生...
    關(guān)馨仁閱讀 147評(píng)論 0 0