预定公链开发视频课

黎跃春区块链博客


黎跃春,江湖人称春哥,孔壹学院、 链乎创始人,区块链职业教育布道师,通信和信息技术培养工程区块链高级授课专家。


链乎问答社区
链乎公众号

【以太坊智能合约】Embark Framework 开发基础篇

作者: 黎跃春 微信:liyc1215(进微信群,加微信)

在之前的文章中,我们看到了使用Solidity开发以太坊智能合约的所有基本知识。我们使用了以太坊钱包,我们能够轻松设置小型产品开发环境。我们会发现开始的时候很不错,但是如果我们想要更深入的话呢?我们要编写更大的应用程序,能够使用多个源文件。编写、测试、调试、使用版本控制系统,一次部署多个合约等等。

为了更深入,我们将使用Embark框架。 Embark框架很容易上手,并具有很多功能:

  • Blockchain (Ethereum)
  • 去中心化 Storage (IPFS)
  • 去中心化交流 (Whisper, Orbit)
  • Web 技术

目录

1. 安装 Embark framework

你可以在任何平台安装Embark framework,下面是你需要安装的工具。

如果你已经安装上面的工具,我们将使用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 complete

App 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) 0xd16faa875634d4fe88333555cd7dc9e8c22f3e2e

Private Keys
==================
(0) a70c22b2e6fe5f44ca15b44883333ad551e22608953a5f16e44a8b616e151360
(1) 73a0e9cf90828d1099e5c5ac513cb18b5b804be7278aebf9bb2db5602d0e36da
(2) 1e083df4a9aa021e64b52318fd64ec8d5959018b2244856466dc5ea102fa2cf8
(3) 74afaab038ec34c8ac18559a09888dbd4e057fdfa9f41e99a99bbb1fceb32bc7
(4) 3f27399b396c4d4cacfca45bffb0ce67f1f141bc5202bcd38bf66a9f8213c922
(5) 36e4b3bfab27957163165aa185fed01134d90a41d2dbaed88a9eeff7c7be4583
(6) 94292f49bd516fecd6bf775b5057cd215bb159efbc808b4cf0cf04afcd43418b
(7) d9d43481879b1f130379c26df5a32ded19aabe3812e46ba52ef8b163f858ce40
(8) 61679bc6a888d5d76af56ffcfcd7383befd44032254e35272e1f227f12dd4016
(9) a8ac9f59c020136da2933424bf0f196d0a42e4a7f5d1ec8b973ff4d8c6b68a6f

HD 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

embark run

元素解释:

  1. 当前部署的合约和地址列表显示在Embark演示的demo中只有一个简单的合约SimpleStorageSimpleStorage合约具有简单的任务:存储一个值,并使这个值可从外部读取。
  2. http://localhost:8000为当前UI前端的地址和端口。
  3. 可以和你合约进行交互的控制台。

2.2 终端读取和修改storedData的值

让我们用atom打开demo看看合约代码:simple_storage.sol文件在app/contracts文件夹下面。

Embark 演示demo

SimpleStorage这个合约中,有一个storedData状态变量用于存储一个uint无符号整型的值。因为前面我们已经启动了服务,并且已经将合约部署到了本地测试网络,所以我们可以切换到终端,在终端中通过SimpleStorage.get()获取storedData的值,通过SimpleStorage.set(88)修改状态变量的值,操作如下图所示:

2.3 Web端获取storedData的值

浏览项目,不难发现,在app这个文件夹中,除了contracts文件夹外,还有cssimagesjs等文件夹,它们包含了和区块链交互的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的值

目前我们的MetaMasklocalhost: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

5. 技术交流

  • 区块链技术交流QQ群:348924182

  • 「区块链部落」官方公众号

版权声明:博客中的文章版权归博主所有,未经授权,禁止转载,转载请注明出处,合作请联系:liyc1215(微信)

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦