网上虽然有很多资料了,但本文仅是作为学习笔记,况且自己也要敲一遍,就记录自己在学习路上的点点滴滴吧。。。
下载钱包
点击链接,找到对应的钱包文件,Mac就选Ethereum-Wallet-macosx-0-11-1.dmg
,这是官方的,不用考虑安全问题了,下载安装即可。
创世区块文件
创建一个json
文件,内容如下:
{
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {
},
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
参数 | 描述 |
---|---|
nonce | 64位随机数 |
timestamp | 时间戳 |
parentHash | 上一个区块的hash值,创世区块就是第一个,所以是0 |
extraData | 附加信息,我把它理解成备注 |
gasLimit | 代表用户愿意花费在gas上的钱的最大值,并不是实际值,这个在以前的文章有写过 |
difficulty | 难度值,代表挖矿的难度 |
mixhash | 与随机数nonce一起用于挖矿,具体参见“PoW(工作量证明)” |
coinbase | 矿工的账号,代表这个区块是哪个矿工挖出来的 |
alloc | 用来预置账号以及账号的以太币数量 |
chainId | 链的ID,networkid 参数需要与 chainId 的值一致,可用来防止replay attack重发攻击:恶意重复或拖延正确数据传输的一种网络攻击手段 |
homesteadBlock | Homestead 硬分叉区块高度 |
eip155Block | EIP 155 硬分叉高度 |
eip158Block | EIP 158 硬分叉高度 |
- Homestead是以太坊发展蓝图中的一个阶段。第一阶段是以太坊区块链面世,代号为frontier,第二个阶段即为当前阶段,代号为Homestead(家园),第三阶段为Metropolis(大都会),大都会又细分为两个小阶段,第一个是Byzantium(拜占庭)硬分叉(引入新型零知识证明算法以及pos权益证明共识算法),第二个是Constantinople(君士坦丁堡)硬分叉(以太坊正式应用pow和pos混合链,解决拜占庭引发的问题)。最后一个阶段代号Serenity(宁静),最终版本的以太坊稳定运行。
- EIPs(Ethereum Improvement Proposals),是以太坊更新改善的一些方案,对应后面的数字就是以太坊github源码issue的编号,其中EIP155主要内容是让不同的链定义不同的chainId, 防止同一笔交易在不同的共有链上进行两次交易,防止重放攻击
初始化创世区块
geth --datadir "/Users/apple/Desktop/ETH/" init Genesis.json
其中--datadir
是指定数据存放的目录,/Users/apple/Desktop/ETH/
是我电脑上json文件
的路径,Genesis.json
是上一步的创世区块文件名
启动私有链
geth --datadir "/Users/apple/Desktop/ETH/" --networkid 666 --identity "node" --port 30303 --rpc --rpcport 8545 --rpcapi "db,eth,eth,net,web3,admin" --rpccorsdomain "*" --nodiscover --verbosity 4 console
参数 | 描述 |
---|---|
networkid | 与Genesis.json中的chainId一致 |
identity | 设置节点ID |
port | 节点端口,默认是30303 |
rpc | 启用 rpc 服务 |
rpcport | rpc 服务端口,默认是8545 |
rpcapi | rpc的api |
rpccorsdomain | “*”是允许通过任意域名访问,相当于域名白名单 |
nodiscover | 关闭节点自动发现 |
verbosity | 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (默认是3) |
console | 进入控制台 |
如果设置的是默认值的话可以省略参数,启动成功会进入控制台,在控制台下可以使用eth.getBlock(区块号)
查看区块信息等命令,以后可以通过geth console
命令再次进入控制台,这里也有个坑,默认用geth console
命令进入的是第一步我们安装的以太坊钱包的控制台,如果需要进入我们刚才创建的控制台需要使用geth --datadir "/Users/apple/Desktop/ETH/" console
创建账号
personal.newAccount("Steven")
创建的账号密码为Steven
查看信息
eth.accounts
查看账号
eth.getBalance(eth.accounts[0])
查看第0个账户的余额,可以将eth.accounts[0]
进行传值调用
eth.blockNumber
查看当前区块总数
eth.getBlock(6)
通过区块号查看区块
eth.getTransaction("0xdc9d03b5f8798b4c29648fafb26b9bc0d03f141c876a182a6e4c32bfac64911d")
通过哈希值来查看交易,没有交易会返回null
net.listening
查看是否在监听
net.peerCount
查看peer数量
admin.peers
查看peer信息
admin.nodeInfo
查看自己的网络信息
发送交易
personal.unlockAccount(eth.accounts[0])
发送交易前要先解锁,解锁一段时间后也会自动再锁上
eth.sendTransaction({from:address1,to:address2,value:amount})
address1给address2发送amount个以太坊
挖矿
miner.start()
开始挖矿
miner.stop()
停止挖矿
miner.setEtherbase(eth.accounts[1])
指定挖矿的奖励给哪个账户,默认给第0个
miner.start(1);admin.sleepBlocks(1);miner.stop();
挖出一个区块就停止挖矿
添加节点
admin.addPeer("enode://key@ip:port")
添加静态节点可加快同步速度,key/ip/port需要替换
还有个小坑不知道该怎么写,网上也有解决办法,我记录在另一篇文章里了。今天就到这,接下来开始智能合约了。
上面是Mac节点,现在更新下Windows节点(Win10的虚拟机)
下载钱包
点击链接,找到对应的钱包文件,这里我选的是Mist-win64-0-11-1.zip
,这是官方的,不用考虑安全问题了,下载点击Mist.exe
安装即可。
为了方便使用geth,将其加入环境变量中
我的电脑右键属性-左侧高级系统设置-环境变量-Path-新建将geth的路径粘贴进去,由于用户不同,路径不一样,我的是C:\Users\steven\AppData\Roaming\Mist\binaries\Geth\unpacked
复制json文件-初始化创世区块-启动私有链(cd到该路径下执行geth --datadir "./" console
)-添加节点
同mac,注意替换路径即可,添加节点成功会返回true,然后会自动同步数据,通过查询,区块数量一样,这样就创建了两个节点的私链了,在两个节点上创建账号,挖矿,发送交易也都没问题,相互会自动同步,就是虚拟机上挖矿比较慢。
再次更新:由于终端的geth和客户端的geth并不是一个,所以在终端用的没问题,打开客户端就连到主链上去了,走了很多弯路就不说了,直接说解决方法(Mac):
通过命令"/Applications/Ethereum Wallet.app/Contents/MacOS/Ethereum Wallet" --rpc /Users/apple/Desktop/ETH/geth.ipc
启动客户端即可,需要注意我 装的是Ethereum Wallet
,不是Mist
其中/Users/apple/Desktop/ETH/geth.ipc
这个是前文中我写的私链的路径,放个截图庆祝一下:
Windows:
Mist-win64-0-11-1\Mist.exe --rpc \\.\pipe\geth.ipc
路径终端会显示, 只有一个路径是geth.ipc