搭建以太坊智能合约开发环境
相关概念
-
什么是智能合约? 如果我们把以太坊看作是一台"全球计算机",那么智能合约就是是运行在以太坊这个"全球计算机"上的"进程"。 注:之所以有上述比喻,是因为以太坊网络的节点遍布全球,在这样的网络中运行计算就相当于在"一台全球计算机"中运行计算。 -
为什么叫智能合约? 智能:智能合约是可以自动运行的。 合约:以太坊的合约代码多会涉及一些资产转移,而现实世界中签订合同也多是伴随着资产转移,因此把这样的代码叫合约。
以太坊智能合约开发环境介绍
以太坊智能合约是运行在以太坊节点上的,因此安装开发环境时,就需要安装至少一个以太坊节点(详见下文Geth 安装步骤)。
注:不只是以太坊,学习其他区块链平台前,也是需要安装对应区块链平台的节点的。
以太坊针对多种语言(Go、C++、Rust、Java、Python),都开发了对应的客户端软件,其中最受欢迎的还是Geth (go-ethereum ),它是由Go语言编写的。
Linux安装Geth
提示:本人的安装环境为Ubuntu18
官网安装说明见:https://geth.ethereum.org/docs/install-and-build/installing-geth
-
以命令行的方式安装
-
sudo add-apt-repository -y ppa:ethereum/ethereum -
sudo apt-get update -
sudo apt-get install ethereum -
输入geth --help 验证一下 -
以压缩包的方式安装(略)
搭建私网并启动Geth
相关概念:
- 主网:以太坊真是节点运行的网络,节点遍布全球,此网络中使用的
ETH 是真实的虚拟数字货币,部署合约时需要消耗真金白银。 - 测试网:测试网的节点没有主网节点那么多,主要是为以太坊开发者提供一个测试的平台环境,此网络上的
ETH 可以通过做任务获得。 - 私网:私网是由开发者自行组建的网络,不与主网及测试网连通,独立存在,仅用于个人测试或企业项目使用。
不论是主网、测试网还是私网,都可以使用Geth 来启动;Geth 默认连接的是以太网主网,如果想要连接测试网可以连接Ropsten 或rinkeby :
// Ropsten测试网络
geth --testnet --fast --cache=512 console
// Rinkeby测试网络
geth --rinkeby --fast --cache=512 console
第一步:配置创世块文件
创建genesis.json 文件:
{
"config":{
"chainId": 18,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"difficulty":"0x2",
"extraData":"",
"gasLimit":"0xffffffff",
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
coinbase :挖矿后获得奖励的账户地址difficulty :挖矿难度gasLimit :一个区块所能容纳gas 的上限,智能合约指令在执行时需要消耗gas ,,可通过以太币自动兑换nonce :随机值mixhash :一个256位的hash 证明,与nonce 相结合,验证本块的有效性extraData :附加信息,随意填写parentHash :前一块的hash 值,创世块的parentHash 值为0
第二步:数据初始化
初始化指令
geth init genesis.json --datadir ./data
init :初始化关键字datadir :指定数据存储位置
效果如图:
第三步:启动Geth节点
geth --datadir ./data --networkid 18 --port 30303 --http --http.port 8545 --http.api 'db,net,eth,web3,personal' --http.corsdomain '*' --allow-insecure-unlock console 2> 1.log
datadir :指定之前第二步初始化的数据目录文件networkid :配置成与第一步genesis.json 配置文件config 内的chainId 相同值,代表加入哪个网络,私网随意编号即可port :P2P端口,即:节点之间互相通信的端口http :开启远程调用服务http.port :远程服务端口,默认值为8545 http.api :远程服务提供的远程调用函数集http.corsdomain :指定可以接收请求来源的域名列表(浏览器访问,必须开启)allow-insecure-unlock :允许在Geth 命令窗口解锁账户console :进入控制台2 > 1.log :UNIX系统下的重定向,将Geth 产生的日志输出都重定向到1.log 中,以免刷日志影响操作
效果如图:
^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著
^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng
|