EOS DAWN 3.0 安裝及智能合約初體驗(yàn)

EOS DAWN 3.0 已經(jīng)正式發(fā)布了儒搭,這次終于可以在mac上跑起來了悲柱,之前的版本捧请,各種折騰都沒有真正跑起來凡涩,最多只是出了塊,但是智能合約沒有成功執(zhí)行疹蛉。下面主要介紹Mac下啟動(dòng)EOS DAWN3.0 以及運(yùn)行Currency 智能合約活箕。

下載源碼

命令行執(zhí)行
git clone https://github.com/EOSIO/eos --recursive

構(gòu)建EOS

下載完源碼后,我們可以使用EOS提供的自動(dòng)構(gòu)建腳本來構(gòu)建EOS可款。

cd eos
./eosio_build.sh

在使用自動(dòng)構(gòu)建的時(shí)候育韩,不一定就會(huì)構(gòu)建成功,我就是碰到了這個(gè)問題闺鲸。EOS 需要先安裝一些依賴筋讨,自動(dòng)腳本理論上可以自動(dòng)幫你安裝這些依賴,但是由于環(huán)境的不同摸恍,導(dǎo)致有些依賴并不能安裝成功悉罕,那就需要自動(dòng)手動(dòng)去把依賴安裝好了。這里說下我遇到的問題

  1. MongoDB 自動(dòng)腳本安裝失敗立镶, 這個(gè)是我手動(dòng)執(zhí)行brew install mongodb 安裝成功壁袄。
  2. doxygen 自動(dòng)腳本安裝失敗。 這個(gè)問題是brew 下載doxygen的安裝程序失敗了媚媒,但是在瀏覽器上卻是可以下載下來的嗜逻。解決辦法是, 先看下/usr/local/Library/Formula 目錄中是否存在doxygen.rb 文件,一般在brew install doxygen的時(shí)候會(huì)下載下來缭召。如果doxygen.rb文件存在变泄,根據(jù)brew install doxygen 安裝時(shí)顯示的日志可以找到文件的下載路徑https://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.14.src.tar.gz 把這個(gè)文件下載下來令哟,放到~/Library/Caches/Homebrew 目錄中。在執(zhí)行brew install doxygen妨蛹。 這樣doxygen應(yīng)該就可以安裝成功了屏富,后面再執(zhí)行./eosio_build.sh 就能成功構(gòu)建EOS了。

當(dāng)然也可以不使用自動(dòng)構(gòu)建腳本來構(gòu)建EOS蛙卤,參照官方文檔手動(dòng)吧所有依賴都安裝了狠半。這里就不多做介紹了。

啟動(dòng)單節(jié)點(diǎn)測試網(wǎng)絡(luò)

成功安裝EOS后颤难,我們可以在本地啟動(dòng)一個(gè)單節(jié)點(diǎn)的測試網(wǎng)絡(luò)神年。

可以直接通過一個(gè)命令啟動(dòng)一個(gè)單節(jié)點(diǎn)網(wǎng)絡(luò)

nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin 

這樣的壞處就是,以后每次啟動(dòng)都需要手動(dòng)輸入這么長的字符串行嗤,操作會(huì)比較麻煩已日。

EOS為我們提供了配置文件可以省去后面的配置選項(xiàng)。默認(rèn)EOS的配置放置在~/Library/Application Support/eosio/nodeos/config 目錄中栅屏∑В可以通過--config-dir 這個(gè)參數(shù)指定另外的目錄當(dāng)做放置配置文件的目錄。注意栈雳,這個(gè)目錄一開始是不存在的护奈,可以在build/programs/nodeos 目錄中執(zhí)行下 ./nodeos,然后立即用Ctrl + C 關(guān)閉哥纫。EOS會(huì)自動(dòng)生成這個(gè)目錄霉旗,同時(shí)生成config.ini 和genesis.json 兩個(gè)文件。

image.png

接下來我們需要修改下config.ini文件蛀骇,直接把下面這段配置復(fù)制到config.ini 文件后面即可厌秒。

# Enable production on a stale chain, since a single-node test chain is pretty much always stale
enable-stale-production = true
# Enable block production with the testnet producers
producer-name = eosio
# Load the block producer plugin, so you can produce blocks
plugin = eosio::producer_plugin
# Wallet plugin
plugin = eosio::wallet_api_plugin
# As well as API and HTTP plugins
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
# This will be used by the validation step below, to view account history
plugin = eosio::account_history_api_plugin

官方文檔顯示genesis-json 也需要修改,其實(shí)是不需要修改的擅憔,直接使用默認(rèn)的就行鸵闪。

最后就是在 eos/build/program/nodeos/目錄執(zhí)行./nodeos 就可以成功啟動(dòng)EOS了。成功啟動(dòng)后可以看到已經(jīng)在出塊了雕欺。

image.png

運(yùn)行Currency智能合約

EOS默認(rèn)已經(jīng)提供了一些智能合約的樣例岛马。我們直接拿來使用就可以了棉姐。

創(chuàng)建一個(gè)錢包

每個(gè)一個(gè)智能合約都需要一個(gè)關(guān)聯(lián)的賬戶屠列,賬戶需要使用錢包來創(chuàng)建,所以我們在啟動(dòng)EOS的時(shí)候需要加載錢包插件來創(chuàng)建賬戶伞矩,在之前的配置文件中笛洛,我們已經(jīng)加載了錢包插件,所以這里我們就不需要做什么額外的操作了乃坤。

使用cleoswallet create 命令來創(chuàng)建一個(gè)錢包:

cd ~/eos/build/programs/cleos/
./cleos wallet create

這就會(huì)創(chuàng)建一個(gè)默認(rèn)的錢包苛让,同時(shí)會(huì)輸出一個(gè)密碼沟蔑,自己保存好,以備后面使用狱杰。

加載 Bios 智能合約

設(shè)置eosio.bios合約為系統(tǒng)默認(rèn)合約瘦材。這個(gè)合約可以讓我們直接控制其他賬戶的資源分配和一些私有api調(diào)用。

$ ./cleos set contract eosio ../../contracts/eosio.bios -p eosio

創(chuàng)建 currency 合約賬戶

為currency 合約生成一個(gè)currency賬戶仿畸,需要兩個(gè) 公鑰食棕、私鑰對,一個(gè)作為public-OwnerKey 一個(gè)作為public-ActiveKey错沽。

cd ~/eos/build/programs/cleos/
./cleos create key # OwnerKey
./cleos create key # ActiveKey

這將會(huì)輸出兩個(gè) 公私鑰對簿晓,像下面這樣:

Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

保存好這兩個(gè)公私鑰對,后面會(huì)使用到千埃。

把生成好的兩個(gè)私鑰導(dǎo)入錢包:

./cleos wallet import <private-OwnerKey>
./cleos wallet import <private-ActiveKey>

使用cleos create account 命令來生成 currency 賬戶憔儿。 使用eosio 來認(rèn)證 currency賬戶。 eosio是我們在genesis.json文件中指定的producer 賬戶放可。上面生成的公鑰給currency賬戶當(dāng)作OwnerKey和ActiveKey谒臼。

./cleos create account eosio currency <public-OwnerKey> <public-ActiveKey>

執(zhí)行后會(huì)有結(jié)果返回,像這樣:

executed transaction: fe5c9db1b5173dd4bd1ed79c23056104427ab62b0086cf117175abb322532d93  346 bytes  101544 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"currency","owner":{"threshold":1,"keys":[{"key":"EOS6eRfSRYNcrsLmLMomWbBk..." +

驗(yàn)證賬戶是否創(chuàng)建成功:

./cleos get account currency

一切正常的話吴侦,會(huì)輸出類似下面的內(nèi)容:

{
  "account_name": "currency",
  "permissions": [{
      "perm_name": "active",
      "parent": "owner",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS8kjeKVzFfqYyqcG8EnRLvMyLjJ7nmSM8p7QqDazGnjMEtQd1dp",
            "weight": 1
          }
        ],
        "accounts": []
      }
    },{
      "perm_name": "owner",
      "parent": "",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS6eRfSRYNcrsLmLMomWbBk317gz2TcBqArL7JwaqvaYkWYALe73",
            "weight": 1
          }
        ],
        "accounts": []
      }
    }
  ]
}

上傳 currency 合約到 區(qū)塊鏈上

在上傳之前屋休,我們可以驗(yàn)證下區(qū)塊鏈上是否已經(jīng)有currency合約:

./cleos get code currency
code hash: 0000000000000000000000000000000000000000000000000000000000000000

一串 0 表示區(qū)塊鏈上還沒有currency合約。

使用 currency 賬戶上傳 currency合約:

./cleos set contract currency ../../contracts/currency

執(zhí)行正常會(huì)返回一個(gè) transition_id 的json字符串备韧。

同樣我們可以驗(yàn)證合約是否上傳成功:

./cleos get code currency

如果返回像下面的內(nèi)容劫樟,則表示合約上傳成功:

code hash: 9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975

在使用currency合約之前,我們需要先創(chuàng)建在發(fā)行這個(gè)currency:

./cleos push action currency create '{"issuer":"currency","maximum_supply":"1000000.0000 CUR","can_freeze":"0","can_recall":"0","can_whitelist":"0"}' --permission currency@active
./cleos push action currency issue '{"to":"currency","quantity":"1000.0000 CUR","memo":""}' --permission currency@active

接下來驗(yàn)證下currency賬戶的初始余額:

./cleos get table currency currency accounts
{
  "rows": [{
      "balance": "1000.0000 CUR",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}

可以看到currency賬戶有了 1000的CUR织堂。

使用currency合約轉(zhuǎn)賬

使用 currency合約的 transfer action 從currency賬戶轉(zhuǎn)賬給eosio賬戶:

./cleos push action currency transfer '{"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}' --permission currency@active

如果執(zhí)行成功會(huì)有類似下面的輸出:

executed transaction: de83ee65f983be89bebd2fc5d5ba066acaadcdebdbfc15f8f1221b98f76551ea  271 bytes  109135 cycles
#      currency <= currency::transfer           {"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}
>> transfer
#         eosio <= currency::transfer           {"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}

檢查currency賬戶余額

先看下 eosio的余額情況:

./cleos get table currency eosio accounts
{
  "rows": [{
      "balance": "20.0000 CUR",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}

可以看到eosio 賬戶已經(jīng)有 20的CUR了

在看下currency賬戶的余額:

./cleos get table currency currency accounts
{
  "rows": [{
      "balance": "980.0000 CUR",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}

也可以看到currency 賬戶初始有 1000的CUR ,轉(zhuǎn)了20給 eosio賬戶叠艳,現(xiàn)在還剩余980 CUR。

這樣一個(gè)簡單的currency智能合約就完成了易阳。這個(gè)currency合約有點(diǎn)以太坊ERC20 token的意思附较。操作感覺也比較簡單。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潦俺,一起剝皮案震驚了整個(gè)濱河市拒课,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌事示,老刑警劉巖早像,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肖爵,居然都是意外死亡卢鹦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門劝堪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冀自,“玉大人揉稚,你說我怎么就攤上這事“敬郑” “怎么了搀玖?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驻呐。 經(jīng)常有香客問我巷怜,道長,這世上最難降的妖魔是什么暴氏? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任延塑,我火速辦了婚禮,結(jié)果婚禮上答渔,老公的妹妹穿的比我還像新娘关带。我一直安慰自己,他們只是感情好沼撕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布宋雏。 她就那樣靜靜地躺著,像睡著了一般务豺。 火紅的嫁衣襯著肌膚如雪磨总。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天笼沥,我揣著相機(jī)與錄音蚪燕,去河邊找鬼。 笑死奔浅,一個(gè)胖子當(dāng)著我的面吹牛馆纳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汹桦,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鲁驶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舞骆?” 一聲冷哼從身側(cè)響起钥弯,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎督禽,沒想到半個(gè)月后脆霎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赂蠢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年绪穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辨泳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱岂。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玖院,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出第岖,到底是詐尸還是另有隱情难菌,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布蔑滓,位于F島的核電站郊酒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏键袱。R本人自食惡果不足惜燎窘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹄咖。 院中可真熱鬧褐健,春花似錦、人聲如沸澜汤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俊抵。三九已至谁不,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徽诲,已是汗流浹背刹帕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谎替,地道東北人轩拨。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像院喜,于是被迫代替她去往敵國和親亡蓉。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 先啰嗦幾句:本人區(qū)塊鏈小白一枚喷舀,正在自學(xué)EOS應(yīng)用開發(fā)(當(dāng)然目前也沒有培訓(xùn)班培訓(xùn))砍濒,我的這個(gè)系列文章是我的學(xué)習(xí)筆記...
    面壁者Z閱讀 2,383評(píng)論 7 5
  • 1 EOS智能合約的介紹1.1 所需背景知識(shí)1.2 EOS智能合約基礎(chǔ)知識(shí)1.3 技術(shù)局限性 2 智能合約文件2....
    cenkai88閱讀 30,483評(píng)論 5 28
  • 1. 賬戶與錢包1.1 創(chuàng)造并管理錢包1.2 生成EOS Keys并導(dǎo)入1.3 備份您的錢包1.4 創(chuàng)建賬戶 2....
    cenkai88閱讀 3,927評(píng)論 1 7
  • 一路上有你苦一點(diǎn)也愿意...... 該怎樣去平衡理想與現(xiàn)實(shí)之間的距離? 有你的路上迷霧朦朧 有夢的路上奮力前行 有...
    舍得_之間閱讀 345評(píng)論 3 5
  • 一早聽完小影的課程硫麻,原本內(nèi)心是豐盈富足的爸邢。 中午因?yàn)橐患f了很多次的小事和老大起沖突了。內(nèi)心明明知道自己這樣不好拿愧,...
    定平sunny閱讀 379評(píng)論 11 2