Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

同步 Ethereum 全节点有感

945坏男人
131 0 0
最近微博的某人额外关注起了Ethereum全节点,并Po了这么一张照片,一笑置之。虽说Ethereum全节点占用的磁盘空间确实比Bitcoin大了几倍,但也不至于为了节省几块硬盘,不去同步全节点。2 f0 p9 O% F2 K; s# M
8 g4 z4 D, y0 [8 ^1 I5 y% n
本人在18年的6月份用Geth同步过全节点。当时想把区块链数据用异构的方式查询, 比如提供 Sql 、GraphQL访问,而不在通过rpc接口访问数据。
: C6 R7 j+ [* _( U( ^而首要工作是把全节点数据放入到数据仓库中,那就要先从同步全节点的任务开始。5 n: o! j5 t% a# Y

( b( n2 w9 B; l- I6 s9 |3 R类似 ocap.arcblock.io! |3 O3 [; y- U% {
服务器配置当时云主机选择的是阿里云香港,操作系统是Ubuntu,8G内存,主流CPU,30G系统盘,外挂1T高效硬盘,带宽2M。 这是最低的基本硬件配置,再低,同步速度就太慢了。2 y" n3 n0 E# M
获得Gethhttps://ethereum.github.io/go-ethereum/downloads/,选择Stable Linux 64bit版本,记得校验Checksum,防止软件被篡改。! U. _( ]: |, I4 ?9 l

/ q( M% J/ b  ^) K; xGeth: B! V/ ~6 R* H% D: I/ E  R4 h
# 下载
1 d% J; U2 P- [) a3 M8 }/ qwget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.8.23-c9427004.tar.gz " f  p" y: s& w  C1 u; b' O" H8 S: O
md5sum geth-linux-amd64-1.8.23-c9427004.tar.gz # 校验2 b3 N6 v" y* k: ~3 w
# => a3b2dd950bc986036be4ff66efec36f9
1 O& }$ ?1 t" t* j# 与上文提供的Checksum比较,如果一致说明文件没有被篡改
- X2 ~% Q( c7 m) T) B% [tar -xzf geth-linux-amd64-1.8.23-c9427004.tar.gz # 解压
' p0 u* D& }, E' S; c2 O$ Emv geth-linux-amd64-1.8.23-c9427004/geth /usr/bin/ # 移动 放到全局环境变量中( C2 w" _' h6 G% g- K. g1 J
which  geth # 查看位置如果想通过手动编译的方式,请移步 https://www.jianshu.com/p/65ae648b97ae9 N9 a& g9 U9 ~. z2 N2 R( k  T
同步方式Geth 有3种同步方式:full,fast,light,默认是fast模式。
$ f7 F6 C7 n; m0 jgeth -h | grep sync% y1 o( h6 k$ U+ b* S6 F  X4 H% D
# --syncmode fast    Blockchain sync mode ("fast", "full", or "light")Full
8 h6 E2 e% O) e6 |6 g& h# m同步完整的区块信息,获取所有历史区块的header、body数据,
* c$ x8 I7 w8 d/ X* u8 \% p从创始块开始校验每一个元素,并顺序执行其中的所有交易,验证区块头中的 stateRoot、transactionRoot 和 receiptRoot。
8 j5 W1 E) V$ jFast
2 b/ D' a, ~* a3 X! i% N获取所有历史区块的header、body数据,但不执行其中的任何交易,所以也无法验证区块头中的三个状态根。
3 A6 ~& {4 m. w) `6 [: d0 t在追上最新区块之后,会继续请求最新的完整 state trie 数据,并维护最新的 state trie 和 receipt trie 数据,但不保存它们的历史版本。$ i& t6 Y- }$ y8 Z$ j" C  c9 [& k
所以可以用 fast 模式同步的节点执行智能合约来获得最新的状态。使用此模式时可以设置 --cache,默认1024M
) R2 z: P0 v& f$ O; z
--syncmode fast --cache 2048Light/ v7 E! J) b: N- d. }
只下载所有区块的header数据,本地仅做交易是否发生的验证,0 y2 s- g. C4 r, y
也就是仅下载最新区块的所有数据并验证 transactionRoot 是否一致。无法进行任何状态验证。: j! }: u% d# L% t2 y
设定datadir即储存数据的位置,使用full模式,并让这个进程在后台持续运行
3 {* r/ `& q6 }+ X5 Onohup geth --datadir /mnt/eth --syncmode full &
: K, X7 @8 l% M& l经过24小时不间断的同步,达到了500万块高度,硬盘空间大概用了683G,大概花了10天左右时间。% F9 M1 X- A# J: O
存档节点 gcmodegeth -h | grep gcmode
) F& `3 b0 d. ~; }. [( t( M--gcmode full      Blockchain garbage collection mode ("full", "archive")8 M1 o1 r* @# t
区块的垃圾回收模式,默认是fullarchive模式存储着智能合约中的所有值状态以及帐户余额的完整历史记录' H4 T" c- [/ c, \7 l9 Z
syncmode=full 验证每块的state trie、transaction trie 和 receipt trie数据,但并不保存所有的 state trie、transaction trie 和 receipt trie 的完整历史版本。& K# z, O2 x: F  s8 V
如果一个合约的字符串的值,在6000000高度的时候是xyz,在 6000001高度的时候变为ABC,这只有在archive模式下才会记录,其他的同步模式,会裁剪过去的状态,将只会保存最新的值。具体来说,gcmode=full模式,只有最近的128次状态被保存在内存中,再多的状态会被丢弃。比如说现在同步到了 7000000高度,只会记录7000000-128 到7000000高度的之间的合约的某个状态的值。
4 v8 N" }2 k5 R' z; m6 ]Parity甚至提供了一种同步模式,只记录一定数量的过去状态,从而减少了同步链数据的大小。! |# t5 W8 i+ h0 x  A6 |; c% f
使用 --syncmode=full --gcmode=archive 模式,即归档节点,这种模式保存了最最最全的Ethereum节点数据,占用硬盘空间也会更大。/ G' Z1 C: W* W: [7 g0 v
我当初就是用归档模式,同步到500w高度的时候,1T硬盘已经塞爆了...
( R7 h; a4 R5 G/ h" `) o, a. P7 \也许本人使用的这种同步方式对达到工作目的来说并不是最有效的,最经济的,这个不是讨论的重点。
" H2 `/ f* ]. d3 t有感我相信大部分人知道syncmode模式,而不知道 gcmode模式,更没有同步过存档模式。/ T* Y* ?& e2 e8 @: L) u# }
Ethereum在 2015-07-30诞生,经过4年的发展到现在的740w高度,/ x8 }+ s! B' c6 v" Y0 w; X
从https://etherscan.io/chartsync/chainarchive 数据来看,完完整整的区块链数据已经膨胀到2231.5 GB,也就是2.2 TB,同步时间要花几个月时间,而且每天以 3~4 GB的速度在增长。在过几年5TB的硬盘可能也装不下了,这也是为什么ethereum技术社区对的分片呼声这么高的原因。
! h+ ~; f9 O5 }5 p/ Q  _Bitcoin在2009-01-03诞生,经过10年的发展,完完整整的区块链数据基本也就200多GB,同步时间基本在24~36小时。
/ B, ^( _4 W/ U7 E! ]从保持去中心化,保有全量数据的角度来说,Bitcoin 在这两方面平衡的相当好。而Ethereum归档节点的机器成本已经很高了,个人没有太多动力去维护。
! b& z. \& X- `# l7 n0 h8 i# I之前我曾抱怨Bitcoin技术推动太墨迹,丧失了很多机会,现在我感觉Ethereum面临的技术挑战相当严峻。从最近的君士坦丁堡硬分叉出现的问题来看,这2个最知名的区块链技术团队的行事风格差异也挺大的。
4 ?9 E/ B. n  P% Z' D$ l7 aBitcoin是伟大的创举,Ethereum是天才的设计,前者是从0到1跨时代的发明,后者带来了智能合约,深刻影响着传统的经济观念。总之,都祝好吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

945坏男人 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10