什么是PoH
- 通过SHA256之类的Hash加密函数,来计算生成序列,提供验证两个事件(这里可以理解为两个区块生成)之间的时间流逝。
- 创世区块中,第一笔交易Hash函数的输入是一个随机值,然后该函数的输出,将是下一次Hash函数计算的输入参数之一:
PoH序列 | ||
---|---|---|
Index | Operation | Output Hash |
1 | sha256(“any random starting value”) | hash1 |
2 | sha256(hash1) | hash2 |
3 | sha256(hash2) | hash3 |
自此以下,上一笔的hash函数输出,都会是下一笔hash函数的输入实参之一。 |
- 不用每个序列(区块)的Hash及其索引,PoH Generator都要发给下游的Validators;而是每隔一段时间才发:
PoH序列 | ||
---|---|---|
Index | Operation | Output Hash |
1 | sha256(“any random starting value”) | hash1 |
200 | sha256(hash199) | hash200 |
300 | sha256(hash299) | hash300 |
- 这个PoH可证明的序列,在技术实现上应注意两个关键点:
- Hash函数要是抗碰撞的,因为一旦可以发生碰撞,就会出现Hash值相同,从而无法区分序列;
- 该Hash的计算应在单核上,以单线程的方式来计算,因为该Hash的计算是依次顺序依赖上一次Hash计算输出的。
- 最终,基于PoH生成的链式证明如下:
将外部事件的时间戳囊括进来
- 只是纯粹地生成序列(区块),是没有意义的,该区块里应还能承载外部的事件(Events)。
- combine函数将把现实世界关联的数据,与当前序列的Index和Hash结合起来,再通过hash函数计算,产生不同于上节所述的序列(包含了外部信息),也同样可以挂载可证明的链上的,比如从Solana链下来了一张照片:
PoH Sequence Wi |
---|