本篇教程旨在自己的电脑上安装配置以太坊开发环境,搭建以太坊私有链,编写一个简单的智能合约,通过以太坊JSON RPC和JavaScript API编程接口将其部署到所创建的以太坊私有链,并可调用合约获得正确的合约执行结果。
一、以太坊开发环境搭建
1.1 Mac OS X系统安装go环境
官网链接:https://golang.org/dl/
官网下载最新的稳定版本:go1.11.2.darwin-amd64.pkg,直接双击完成安装,安装目录在/usr/local/go/下。
配置环境变量:
vim ~/.bash_profile
export PATH=$PATH:/usr/local/go/bin
查看是否配置成功
go version
go version go1.11.2 darwin/amd64
1.2 安装Node.js、Npm
官网链接:https://nodejs.org/en/download/
查看是否安装成功
node -version或node –v
NPM是随同NodeJS一起安装的包管理工具。
npm -version或npm -v
1.3 以太坊Ethereum安装
apt install ethereum
查看以太坊是否安装成功
geth version
1.4 solc编辑器安装
npm install -g solc
查看solc支持的功能
solcjs --help
注意:solcjs命令与Solidity编译器提供的solc包并不兼容,因此不能通过eth.compile.solidity() RPC的方式与以太坊客户端结合使用。
二、以太坊集成开发环境
创建账户
geth account new
输入两遍密码后,生成账户地址。
以太坊账户地址 528301230cb94d1649534b13e991be243780d3bd
查看账户
geth account list
初始化创世块文件
geth --datadir "./" init genesis.json
注意:"./"表示以太坊的路径。
运行以太坊私有链,首先要定义自己的创世区块,创世区块信息写在一个 JSON 格式的配置文件中,即genesis.json。
其中,chainID指定了独立的区块链网络ID。网络ID在连接到其他节点的时候会用到,以太坊公网的网络ID是1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络ID。不同ID网络的节点无法相互连接。配置文件还对当前挖矿难度difficulty、区块Gas消耗限制gasLimit等参数进行了设置。
启动以太坊
geth --datadir "./" console
启动挖矿
miner.start()
其中start可以设置参数,表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的DAG文件,等进度达到100%后,就会开始挖矿。
停止挖矿
miner.stop()
挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户,可以通过miner.setEtherbase()将其他账户设置成coinbase。另外注意第一次停止挖矿需要一段时间,因为节点需要为工作证明算法生成1GB数据集。
三、以太坊编程接口
3.1 通过json rpc编译合约
curl --data '{"jsonrpc":"2.0","method": "eth_compileSolidity", "params": ["contract Multiply7 {event Print(uint);function multiply(uint input) returns (uint) {Print(input * 7);return in