基于VRF的Poof-of-Capacity共识算法

最近在写一篇基于VRF的POC共识算法的论文,算法基本框架已经基本梳理清楚,但是证明部分很有很多内容要写,最近一直忙于项目没有时间动笔,故先将算法贴出来。

背景

共识算法是区块链技术研究的核心,PoW(Proof of Work)共识算法的可行性已在理论与实践上得到了验证,但PoW共识需要消耗大量的能源。为次,PoS(Proof of Stake)共识算法成为研究热点,但PoS共识算法在公有链上的应用仍然存在许多问题。MIT的团队提出了基于容量证明的共识算法Spacemint,虽然其在公有链上有较好的应用,但其性能与安全性都存在问题。为此,我们提出一种新的基于容量证明的共识算法。

算法描述

首先选定两个单向函数$f(x,x’),\ g(x, k), \ h(x’, k)$,hash函数$hash(x)$,时间间隔$s$, unique signature签名算法 $Sig(x, sk)$, 取前$n$位的函数 $right(x)$.

初始化:参与挖矿的矿工要对硬盘进行初始化,首先,矿工生成签名算法$Sig$的一组公私钥对($pk,sk)$,然后利用$pk$建立$f(x,x’) \to (x,x’)$的映射表,其中 $(x,x’)$ 满足 $g(x, pk) = h(x’, pk)$。

挖矿:每隔 $s$ 时间间隔,矿工可以尝试一次,即计算$$hash(sig((x,x’,time/s, c), sk)) < target$$若满足则出块,其中$(x,x’)$满足$$right(f(x,x’)) = right( c ), \ g(x, pk) = h(x’, pk)$$ 其中,c为前面某个块的proof的hash。

出块:矿工在打包的块中应包含该块的proof,proof为$(x,x’,pk, signature)$,并使用sk对整个block进行签名,当其它节点收到块时,节点依次验证$(x,x’), signature, hash(signature), block\ signature$是否有效,若均验证通过则接受该block。

分叉:分叉时选择难度最高的链,若均相同,则随机选择。

comments powered by Disqus