1.安装
1.安装rvm
2.更新ruby
rvm list known 查看列表
rvm install 2.4.1 --disable-binary
rmv use 2.4.1 --default 使用哪个版本
更新时发现brew需要更新,由于网络原因一直无法更新,一直卡到git clone xxxx 这一步
不知道是不是因为网络突然灵光或者是自己乱操作,成功了。自己乱操作如下
进入到/usr/local/HomeBrew目录下
调用 git clone xxxx 后面加上--depth 1。
3.安装geth
brew tap ethereum/ethereum
brew install ethereum
又遇到安装不成功的问题,依然卡到git clone(从源码安装也不好使)
git clone https://github.com/ethereum/go-ethereum
brew install go
cd go-ethereum
make geth
然后更了一宿加一个上午,终于成功了。
4.测试
geth version
输出如下。成功
Geth
Version: 1.8.1-stable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.10
Operating System: darwin
GOPATH=
GOROOT=/usr/local/opt/go/libexec
2.搭建私有链
1.创建测试文件夹
mkdir test
2.创建创世配置文件genesis.json
{
"coinbase" : "0x0000000000000000000000000000000000000001",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "4712388",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
对应含义(不知道什么原因,用这个json ,不会生成account。第一次生成时用的其他json,会自动生成一个account(不知道是不是json,但是着急没有对比)。)
config.chainId // 以太链的ID,用来唯一标记一条以太链
coinbase // 矿工账号,第一个区块挖出后将给这个矿工账号发送奖励
difficulty // 难度值,越大越难
extraData // 附加信息随便填
gasLimit // gas 的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大
nonce // 一个 64 位随机数
mixhash // 与 nonce 配合用于挖矿,由上一个区块的一部分生成的 hash
parentHash // 上一个区块的 hash 值
alloc // 预设账号以及账号的以太币数量,这里不做配置
3.创建数据存放地址并初始化创世块
geth --datadir "创世块的路径(data0)" init genesis.json
–datadir 代表文件夹地址,
–nodiscover 代表该链条不希望被其他节点发现,
console 2>> geth.log 代表将控制台输出到文件geth.log中去
console 启动命令行模式,可以在Geth中执行命令
初始化成功后,会在数据目录data0中生成geth和keystore两个文件夹,此时目录结构如下:
test
├── data0
│ ├── geth
│ │ └── chaindata
│ │ ├── 000002.ldb
│ │ ├── 000003.log
│ │ ├── CURRENT
│ │ ├── LOCK
│ │ ├── LOG
│ │ └── MANIFEST-000004
│ └── keystore
└── genesis.json
启动命令行
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode1" --port 30303 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8080 console
启动另一个接点
geth --datadir "enode2" init genesis.json
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode2" --port 30304 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8081 console
注意,两个节点不同的地点在datadir,port,rpcport。因为我们是在同一个计算机上运行两个节点,所以datadir,port,rpcport必须不同,如果不是在同一个计算机上则无所谓。
3.命令行语法
这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:
eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法
admin.peers 查看所有节点,返回一个数组
在1节点 添加二节点
admin.addPeer('')节点的地址 endoe://xxxx@ip:端口
例如
admin.addPeer('enode://6b944fdc0a3460977e67682428b29cec7b28a400a2a5c3ef6b56673eb9f4abc8fe7316018c2073e43569ec63e6542eb7dc8b23cc93f397bc41a1f077b8cec6e4@[::]:30304')
再次查看
admin.peers
两节点已经添加到一个链上了
支持tab快速编辑
参考及后续学习地址
geth语法
从零开始以太坊区块链开发指南一(已学习完,后续待学习。2和3 是智能合约)
命令行语法