ETH公有链节点同步
最近区块链公司很多都会搞发糖果活动,一般都能吸引几万粉丝,这就来了一个需求,给人家发糖果。主流的geth,parity,甚至imtoken钱包只能输入地址一笔笔交易,几万笔交易人工根本无法完成,于是开始研究使用web3脚本群发交易。
在2017年7月25号,web3就已经发布web3v1.0.0-beta.9公测版本,但国内甚至国外大部分教程还停留在早期的版本,其中的坑不言而喻,只看这些文章是根本跑不通的,作者就是深受其害,最后参考官网文档,github issue才最终完成。
web3原理
通过RPC 调用与本地节点通信。web3可以与任何暴露了RPC接口的以太坊节点连接。
web3种类
web3在github分为web3.js,web3j,web3.py,分别对应node,java,python三门语言,要数node star人数最多,作者接下来教程也是web3.js。
web3.js使用前置条件
- 安装node 最好使用v8.1,公测版web3使用大量异步操作,使用async等语法比较方便。
- 使用npm安装web3,npm install web3 –save
- linux或者mac环境(window环境下web3一直报错,钱包问题也很大)
- web3是与本地节点通信(远程其实也行),所以必须同步一个以太坊节点
前三点相对比较容易,接下来主要讲同步一个以太坊节点。
ETH公有链节点同步
目前来说搞一个可用的以太坊节点有三种办法
- 同步一个geth节点
- 同步一个parity节点
- 使用他人(包括节点服务商)同步的节点
第一次尝试同步节点
首先使用geth钱包下载直接同步,结果400w块左右后永远到不了终点,现在回想cpu,内存,硬盘网络都有问题,想同步简直做梦。过后论坛寻找原因,是因为国内节点少网络环境差,解决方法发现国内有个星火节点的列表,教程大家可以搜索下,也成功配置但效果并不明显,就不多说这个。
失败原因:以太坊节点对内存,cpu,硬盘速度,网络状况要求都比较高,星火节点也只有36个节点,很多还没能同步到最新块,所以大家有条件还要多多参与,携手共建区块链美好未来。
第二次尝试同步节点
接下来逛论坛发现钱包不只有geth还有parity轻钱包听说国内效果不错,换来台i5处理器,8g内存,120g固态的电脑去同步,一天左右就同步成功了,但一直很不稳定,过一会节点就会被远程节点拉开距离,无法被web3使用。
失败原因:使用任务管理器看cpu经常到99%,配置还低,加上公司网络也不稳定。还有parity在windows环境下可能运行也不是很稳定。
第三次尝试同步节点
发糖果日期渐渐到来,由于不确定节点是放在本地还是服务器好,服务器放国内还是国外好,geth还是parity,冲冠一怒得砸钱,于是在阿里云上配置了两台服务器,配置同为8g 4核 500ssd 百兆带宽是刚需,由于之前经验还选择了高计算型,一台在华东部署parity节点,另一台部署geth节点在硅谷。结果都完成了华东的parity用了2天半,美国的geth用了一天半。
所用命令:
geth --fast --cache=2048 --rpc --rpcapi personal,web3,eth,net
--ws --wsorigins "*"
–fast 使用快速同步模式
–cache= 增大内存使用
–rpc –rpcapi personal,web3,eth,net
开启rpc接口和personal等操作api,后边rpcapi一定要写这也是遇到的一个坑,如果没有后期能使用基础web3函数,但不能使用personal等API
–ws –wsorigins “*” 允许所有人使用ws连接
parity 官方提供了一个配置生成器,由于最后没有在parity上开发,好用配置项目可以自行添加
问题:
linux服务器geth,parity命令后如何退出ssh继续执行,退出自动杀死执行的进程,使用nohup不挂断的运行命令,同时log输出到output.log,修改命令如下。
nohup geth --fast --cache=2048 --rpc --rpcapi personal,web3,eth,net --ws --wsorigins "*" >> output.log 2>&1 & //将返回进程码
tail -f output.log //查看实时查看日志
kill processNum //关闭geth杀死进程
同步节点结论
- 目前来说parity和geth都是可以同步成功
- 节点完全可以放在国外,同步速度会很快,使用ssh连接执行web3脚本就好有特殊需求国内阿里云也可以同步成功。
- 配置至少4核 8g 300G固态
- geth使用fast模式,parity使用warp模式,都是快速同步,完全可以用于web3开发。这两个模式默认也是开启的为了保险才加上参数。
- 同步时候总会有一些错误,诀窍就是死等,geth同步完成后还会去重头处理1000w多的数据不要惊慌等。geth偶尔会丢失异步失败一些节点只要进程不停就死等。parity后期会很慢因为后边区块交易多也不要惊慌死等。