[币严区块链]ETH搭建节点区块数据同步的三种模式:full、fast、light
ETH 全节点Archive(归档)模式数据量增长图
上述图表可通过链接查看:https://etherscan.io/chartsync/chainarchive
通过上表,可以看到截止2019年8月12日,以太坊的全部区块数据已经高达2.8T,如果按照比特币的方式搭建全节点,会是一个很痛苦的事,毕竟云硬盘也不是那么便宜的。
做数字钱包或交易所的开发人员里,有聪明人可能会意识到一个问题,在处理用户账户充值时,我们所关注的数据仅仅是从当前开始到未来这段时间的区块数据,那么巨大体积的历史区块数据没什么用处。
有问题,自然会有更聪明的人解决问题,鉴于ETH庞大的区块数据,并且不断在增长,ETH提供了三种同步模式:
- –syncmode "fast" Enable fast syncing through state downloads
- –syncmode "light" Enable light client mode
- –syncmode "full"
在Geth1.6以前,fast与full模式的命令参数为 --fast与--full。Geth 1.6版本及以后,两种命令参数都可使用。
使用方法,启动命令如下:
./geth --datadir "D:\Program Files\Geth\data" --syncmode "fast" --rpc --rpcapi "db,eth,net,web3,miner"
上面的命令指定了区块数据与秘钥文件的存储目录:D:\Program Files\Geth\data
也指定了同步模式是: --syncmode "fast"
同时开启了RPC方式模式: --rpc --rpcapi "db,eth,net,web3,miner"
本文中,我们需要关注就是: -- syncmode,下面对三种同步模式做一个介绍:
Full同步步骤:
获取区块的header
获取区块的body
从创始块开始校验每一个元素
PS:下载所有区块数据信息,所以此种方式的数据量会十分庞大
Fast同步:
获取区块的header
获取区块的body
在同步到当前块之前不处理任何事务,然后获得一个快照,像full节点一样进行后面的同步操作。沿着区块下载最近数据库中的交易,有可能丢失历史数据。比如,你的账户地址A上面有10个ETH,但转入的的交易存在于较老的历史交易中,此同步模式无法获取到交易的详细情况。
使用此模式时注意需要设置–cache,默认16M,建议设置为1G(1024)到2G(2048)。
Ligth同步:
仅获取当前状态。验证元素需要向full节点发起相应的请求。
此外,启动ETH节点时还可以增加--gcmode=archive,这个模式称为归档Archive模式,即归档节点,这种模式保存了最最最全的Ethereum节点数据,占用硬盘空间也会更大。其数据量比单纯的full模式数量还要大。这个参数很多人不知道,大部分也没法用这个启动模式,因为需要的存储空间实在太大。启动命令一般如下:
./geth --datadir "D:\Program Files\Geth\data" --syncmode "fast" --gcmode=archive --rpc --rpcapi "db,eth,net,web3,miner"
那么,作为交易所与钱包服务商,如何选择合适的模式呢?如果对安全性要求极高,并且有充足的硬盘资源,自然是选择Full模式。而对于一般情况下,可使用Fast模式,因为Full模式同步区块数据需要很长时间。截止到本文发文时间2019-08-12,Fast模式需要同步数据大小为132GB,相较于Full模式的2.8TB而言,小了很多。Light模式对于轻量级的移动钱包比较适用。
附,当前Fast模式数据量大小变化:
数据查看链接:https://etherscan.io/chart2/chaindatasizefast
BIZZAN(币严) 数字货币交易所官方网址:
www.bizzan.com
最新文章
- appStore上传苹果应用程序软件发布流程
- 把解压缩版的tomcat6注册成服务并设置自启动
- spring jdbc分离数据库代码和java代码
- 根据域名获取IP地址,并探测是否可达
- linq中查询列表的使用及iqueryable和list集合之间的转换
- js分家效应
- PLSQL 看连接数据库的用户
- [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句
- 接触CrackMe 第一个
- 【caffe】Error parsing text-format NetParameter: ****:**:Expected string.
- [HEOI2016/TJOI2016]游戏
- JS里的<;!-- //-->; 注释有什么作用
- gzip 所使用压缩算法的基本原理(选摘)
- python smtplib 发送邮件简单介绍
- 4.动态HTML处理和机器图像识别
- js中的json的小例子
- 一段程序的分析——C++析构器,何时析构
- linux、windows搭建nginx出现问题集锦
- Linux(Ubuntu12.04)上玩儿STC单片机(转)
- stat命令的实现-mysate
热门文章
- Spring Boot 中的同一个 Bug,竟然把我坑了两次!
- js五子棋游戏代码分享
- Multiple dex files define Lokhttp3/internal/wsWebSocketProtocol
- Rootkit与后门隐藏技术
- Codeforces 868E Policeman and a Tree
- 非常详细的Django使用Token(转)
- 教你如何认识人脸识别开发套件中的双目摄像、3D结构光摄像头、单目摄像头的区别及详细讲解
- 非域环境下SQL Server搭建Mirror(镜像)的详细步骤
- JNI开发流程
- 你好spring-cloud-kubernetes