【以太坊智能合约】Embark Framework 开发基础篇
在之前的文章中,我們看到了使用Solidity開發以太坊智能合約的所有基本知識。我們使用了以太坊錢包,我們能夠輕松設置小型產品開發環境。我們會發現開始的時候很不錯,但是如果我們想要更深入的話呢?我們要編寫更大的應用程序,能夠使用多個源文件。編寫、測試、調試、使用版本控制系統,一次部署多個合約等等。
為了更深入,我們將使用Embark框架。 Embark框架很容易上手,并具有很多功能:
- Blockchain (Ethereum)
- 去中心化 Storage (IPFS)
- 去中心化交流 (Whisper, Orbit)
- Web 技術
目錄
- 1. 安裝 Embark framework
- 2. Embark framework Hello World
- 2.1 啟動服務器和控制器
- 2.2 終端讀取和修改storedData的值
- 2.3 Web端獲取storedData的值
- 2.4 Web端點擊Set Value修改storedData的值
- 3. 小結
1. 安裝 Embark framework
你可以在任何平臺安裝Embark framework,下面是你需要安裝的工具。
- Geth:Ethereum 協議的官方go實現
- NodeJS和NPM:JavaScript應用的運行時和包管理器
如果你已經安裝上面的工具,我們將使用NPM來安裝?embark framework。
localhost:~ yuechunli$ npm -g install embark ethereumjs-testrpc /usr/local/bin/embark -> /usr/local/lib/node_modules/embark/bin/embark /usr/local/bin/testrpc -> /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js + ethereumjs-testrpc@4.1.3 + embark@2.5.2 updated 2 packages in 42.504s╭─────────────────────────────────────╮│ ││ Update available 5.3.0 → 5.4.2 ││ Run npm i -g npm to update ││ │╰─────────────────────────────────────╯localhost:~ yuechunli$2. Embark framework Hello World
2.1 啟動服務器和控制器
Embark framework包含最基本能夠用來部署并讓我們容易理解它如何運作的demo。打開終端,首先我們創建一個一個文件夾embark_demo,切換到embark_demo文件夾里面,通過embark demo命令來創建Embark framework的初始化項目。
localhost:SmartContractDemo yuechunli$ ls BloggerCoin EncryptedToken HelloWorld localhost:SmartContractDemo yuechunli$ mkdir embark_demo localhost:SmartContractDemo yuechunli$ cd embark_demo/ localhost:embark_demo yuechunli$ embark demo Initializing Embark Template.... Installing packages.. this can take a few seconds Init completeApp ready at embark_demo ------------------- Next steps: -> cd embark_demo -> embark blockchain or embark simulator open another console in the same directory and run -> embark run For more info go to http://github.com/iurimatias/embark-framework localhost:embark_demo yuechunli$ ls embark_demo localhost:embark_demo yuechunli$ cd embark_demo/ localhost:embark_demo yuechunli$ ls app embark.json package.json chains.json node_modules test config package-lock.json localhost:embark_demo yuechunli$為了運行這個demo,我們得先通過embark simulator啟動simulator。
localhost:embark_demo yuechunli$ embark simulator localhost:embark_demo yuechunli$ embark simulator EthereumJS TestRPC v6.0.1 (ganache-core: 2.0.0)Available Accounts ================== (0) 0x32b083632f44917e2e9125c3025a120c97bb9f8c (1) 0xe38af4e162a40d27c6f15e754be1a940ca6b41ab (2) 0x19f321c2a9f531cd11b45be37ea12b835390d816 (3) 0x982eadda586d29e13b38d745d45dccd931a1b471 (4) 0xb0b4422bfdf431f58df48d0645e8d933d9c7f81d (5) 0xd69080b8a458a3fbd3f354b16b2a5964178a2579 (6) 0x87b394b8f8d7530cd677fdb8fb785aed0431146e (7) 0xc1da7d151ed95b616f8b67ed5ce4774525455ee0 (8) 0xa1878496046ff767401cb768e352c407c7f53018 (9) 0xd16faa875634d4fe88333555cd7dc9e8c22f3e2ePrivate Keys ================== (0) a70c22b2e6fe5f44ca15b44883333ad551e22608953a5f16e44a8b616e151360 (1) 73a0e9cf90828d1099e5c5ac513cb18b5b804be7278aebf9bb2db5602d0e36da (2) 1e083df4a9aa021e64b52318fd64ec8d5959018b2244856466dc5ea102fa2cf8 (3) 74afaab038ec34c8ac18559a09888dbd4e057fdfa9f41e99a99bbb1fceb32bc7 (4) 3f27399b396c4d4cacfca45bffb0ce67f1f141bc5202bcd38bf66a9f8213c922 (5) 36e4b3bfab27957163165aa185fed01134d90a41d2dbaed88a9eeff7c7be4583 (6) 94292f49bd516fecd6bf775b5057cd215bb159efbc808b4cf0cf04afcd43418b (7) d9d43481879b1f130379c26df5a32ded19aabe3812e46ba52ef8b163f858ce40 (8) 61679bc6a888d5d76af56ffcfcd7383befd44032254e35272e1f227f12dd4016 (9) a8ac9f59c020136da2933424bf0f196d0a42e4a7f5d1ec8b973ff4d8c6b68a6fHD Wallet ================== Mnemonic: soap idle agree episode breeze utility page drive dumb vibrant repeat potato Base HD Path: m/44'/60'/0'/0/{account_index}Listening on localhost:8545**simulator有兩個優勢:
- 第一,它將在你的計算機上創建一個區塊鏈(blockchain),因此當你需要部署合約或者做其他交易時,你的計算機將能夠挖礦(mine)。
- 第二,你不需要下載所有的Ethereum區塊鏈,這樣能節省你的空間。
接下來我們重啟一個終端通過embark run命令來運行程序。
localhost:embark_demo yuechunli$ embark run
元素解釋:
2.2 終端讀取和修改storedData的值
讓我們用atom打開demo看看合約代碼:simple_storage.sol文件在app/contracts文件夾下面。
在SimpleStorage這個合約中,有一個storedData狀態變量用于存儲一個uint無符號整型的值。因為前面我們已經啟動了服務,并且已經將合約部署到了本地測試網絡,所以我們可以切換到終端,在終端中通過SimpleStorage.get()獲取storedData的值,通過SimpleStorage.set(88)修改狀態變量的值,操作如下圖所示:
2.3 Web端獲取storedData的值
瀏覽項目,不難發現,在app這個文件夾中,除了contracts文件夾外,還有css、images、js等文件夾,它們包含了和區塊鏈交互的web app的源碼。在瀏覽器中打開http://localhost:8000看看Embarkdemoweb端的效果。
Note:默認端口為8000,如果想修改端口可以到config/webserver.json文件里面進行修改。
下圖是WebApp效果圖:
默認的初始值為100,如果想在Web端點擊Get Value按鈕獲取值,當前的MetaMask錢包必須和本地的區塊鏈測試網絡一致,本地測試網絡的RPC地址和端口為:localhost:8545,所以需要在MetaMask錢包中將測試網絡切換到localhost:8545,然后點擊Get Value按鈕,即可獲得存儲到區塊鏈上的storedData的值。【PS:從區塊鏈獲取值不需要花費gas,但是MetaMask錢包網絡必須和區塊鏈部署的網絡是同一個測試網絡。】
2.4 Web端點擊Set Value修改storedData的值
目前我們的MetaMask的localhost:8545測試網絡中,錢包地址中默認的以太幣為0,如下圖所示:
如果我們想在Web端通過Set Value按鈕去修改storedData的值,我們的MetaMask賬號里面必須得有以太幣,那么,那么,那么……
如何獲取以太幣呢?
在我們終端中通過embark simulator啟動時,會默認分配10個錢包地點,并且每個賬號里面的余額都默認為100,我們在終端查詢一下先:
下一步拷貝我們MetaMask里面的錢包地址,在控制臺執行下面的命令。
count = web3.toWei(60,'ether');web3.eth.sendTransaction({from: '0xe38af4e162a40d27c6f15e754be1a940ca6b41ab',to: '0xF055775eBD516e7419ae486C1d50C682d4170645',value: count});
??:我們在終端查詢0xe38af4e162a40d27c6f15e754be1a940ca6b41ab地址余額時,它比40個以太幣要少一些,原因是因為轉賬需要花手續費。
如上圖所示,0xF055775eBD516e7419ae486C1d50C682d4170645賬號已充值60 ether。
接下來我們就可以在Web端調用Set Value來修改storedData的值,我們在Web端將其值修改為520,然后再在終端查看一下storedData的值是否被修改并且同步。
3. 小結
本篇文章主要是帶大家初步認識Embark framework,通過本篇文章,相信大家對Embark framework框架有了初步的認識,知道如何安裝Embark framework環境,如何啟動模擬器,如何運行程序,如何在控制臺和合約實例交互。
4. 參考文檔
- https://solidity.readthedocs.io
- ethereumbuilders.gitbooks.io/guide/content/en/ethereum_javascript_api.html
- web3js.readthedocs.io/en/1.0/index.html
- https://ethereumdev.io/getting-started-with-embark-framework
- http://embark.readthedocs.io/en/2.5.2
http://liyuechun.org/2017/11/30/embark-basic/
總結
以上是生活随笔為你收集整理的【以太坊智能合约】Embark Framework 开发基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在區塊鏈上建立可更新的智慧合約(二)
- 下一篇: 【IPFS + 区块链 系列】 入门篇