简介
本文主要学习以太坊的底层操作,环境搭建,查看系统信息,账号创建,挖矿,交易,智能合约部署等操作
安装
机器:Mac
源码:https://github.com/ethereum/go-ethereum 本文以go版本的ethereum为例
如果是其它机型请参照 官方安装文档
1 | brew tap ethereum/ethereum |
初始化
以默认方式启动会连接以太坊主链,同步数据到本地,占用本地磁盘空间,所以不建议这么做。我们以私链的方式运行即可。运行私有链那么就必须定义自己的创世区块
默认方式启动,单机环境不建议使用,命令供参考
1 | > geth |
初始化
在指定目录下新建一个目录用于保存生成的数据
1 | cd /tmp && mkdir blockchain && cd blockchain |
genesis.json:初始化私有链的配置文件,配置创世区块信息
data:存放区块链数据的目录。
genesis.json
内容如下
1 | { |
参数解释:
1 | alloc:用来预设置账号以及账号的 ether 数量。因为私有链挖矿比较容易,所以我们不需要预设置账号。比如,{"0x880004bb64282fb01a3a2500ddf1f4bb5ad4b64a":{"balance":"100000000000000000000000000000"}} |
接下来我们就需要将创世区块的初始信息写入区块链中,使用geth init
命令
1 | cd /tmp/blockchain |
大致会输出如下信息:
1 | INFO [03-12|19:36:02] Allocated cache and file handles |
此时的目录结构就变成如下:
1 | . |
其中keystore
目录用来保存账户信息,geth
目录用来保存区块信息。
启动私有链
1 | > geth --datadir data --networkid 31415926 --rpc --rpccorsdomain "*" --nodiscover console |
输出如下即表示成功进入 geth 的控制台:
1 | Welcome to the Geth JavaScript console! |
基本操作
- 创建账号
1 | # 查看一下系统有的用户 |
- 挖矿
账号创建好了,但是一开始账号都没有 ether,这时就需要挖矿获取币了。
使用miner.start()
命令开启挖矿,默认挖出的 ether 是存到eth.coinbase
账户中的,也就是第一个账户。
1 | # 查看账号1下的余额 |
转账
在转账前,我们需要先解锁账号
1 | > personal.unlockAccount(eth.accounts[0]) |
我们可以看到目前只是向区块链提交了这笔转账交易,谁来执行这笔交易呢?矿工。我们还是得开启挖矿模式,把这笔转账交易执行掉。然后我们再来看看好朋友的账户里面有多少 ether 了,
1 | > miner.start(1) |
连接到其它节点
连接到其它节点的前提条件:
- 网络必须是互通的,不能一个在局域网,一个在公网
- 端口开放,8545和30303
- 指定相同的networkid
方法一:
首先我们要知道节点二的enode信息,在节点二上执行:
1 | > admin.nodeInfo.enode |
然后在节点一上执行:
1 | > admin.addPeer("enode://9e86289ea859ca041f235aed87a091d0cd594b377cbe13e1c5f5a08a8a280e62d4019ac54063ed6a1d0e3c3eaedad0b73c40b99a16a176993f0373ffe92be672@remote_ip:30303") |
返回true就说明执行成功,我们可以通过admin.peers
查看新增的节点信息,同步操作是异步的,可能不能立马看到节点2的信息
addPeer()的参数就是节点二的enode信息,连接成功后,节点二就会开始同步节点一的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。
方法二:
除了上面的方法,也可以在启动节点的时候指定–bootnodes选项连接到其他节点。
示例:指定两个节点
1 | > geth --bootnodes enode://pubkey1@ip1:port1,enode://pubkey2@ip2:port2 |
以太坊钱包
关于以几种客户端的介绍请参考 以太坊客户端介绍
我们现在以Ethereum Wallet为例来连接本地私有链,下载Ethereum Wallet后,直接点图标启动默认会链接以太坊共链。所以我们需要在命令行启动,并指定私有链地址
1 | > cd /Applications |
私有链地址在私有链启动时,日志的第16行可以找到,以本机为例,启动命令就是
1 | > ./Ethereum\ Wallet.app/Contents/MacOS/Ethereum\ Wallet --rpc /Users/moon/geth/data/geth.ipc |
如果需要连接远程节点,请参考 以太坊客户端连接远程节点