以太坊黄皮书详解(一)

2018-05-23

写在篇头

本文是对以太坊的黄皮书的解析,并参照go-ethereum中的实现,将相应的代码也列了出来。黄皮书中使用了大量的公式将以太坊的一些流程和状态都公式化了。看不看得懂公式对理解的影响不大。本文中对公式进行了解析。嫌麻烦的可以跳过每部分公式解析的部分。

一、区块链范型

以太坊本质是一个基于交易的状态机(transaction-based state machine)。其以初始状态(genesis state) 为起点,通过执行交易来到达新的状态。

Read More

Raft在etcd中的实现(五)snapshot相关

2018-04-12

snapshot概念回顾

在正常运行过程中,raft集群的日志增长非常的快。通常使用镜像快照来压缩日志。即通过将当前的state写入到存储的snapshot中,然后到该点的日志即可被丢弃。

问题

该篇问题主要从业务的角度入手,介绍snapshot的一些相关问题。问题中涉及到raft共识部分的仅有InstallSnapshot RPC的部分。

  • 何时触发snapshot操作
  • 将哪些数据保存到snapshot
  • 如何将数据保存到snapshot
  • 何时会触发InstallSnapshot RPC
  • 何时会用到snapshot中的数据

    代码详解

    以etcd中的raftexample为例。来讲解下example中是如何处理上述问题的。

    何时触发snapshot操作

  • node.Ready()有新的数据时,会触发一系列操作,其中包括写wal,将可以commit的条目交由state machine执行等,snapshot的触发也在这里,具体实现是调用的maybeTriggerSnapshot。
Read More