Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
基于概率的证明(PoP: Proof of Probability)
7 k4 O$ S& _9 m交易ID是交易数据的哈希摘要,拥有无法预测的随机性,因此可以把它用作区块铸造的评选因子。交易的币权(币龄x币量)也很有价值,因此增加了二级筛选。评选需要最终唯一性,因此还有第三级筛选。
5 A& l1 Z( P/ N( i9 _一级筛选:交易ID与目标区块哈希的相似性(相位差和)对比,低者胜。注:目标区块取动态的末端 -11号 区块。- `6 U) @6 s* a2 W2 ~
二级筛选:交易的币权大小(输入中 币量x币龄 的合计),高者胜出。
$ I8 ?5 O; w$ e* E3 ]三级筛选:仅为最终唯一性目的,取一级筛选中的某个哈希值简单比较即可。
  `$ ~7 F8 M$ H这样的设计有如下优点:: q* \/ D; A) b0 ?8 E8 e
与传统的PoS权益证明不同,交易ID只是一个数据哈希,与财富无关,币权仅作为次级因子,这使得富者越富的情况不再严重。
" n, a' u& o* h0 V% Y) j用交易ID实现铸造竞争会鼓励交易,大量的交易费能够保证矿工的收益,这创建了一个正向的良性回馈。
' a& A  n3 h8 ?% f历史交易的数量巨大,如果每区块包含 64k笔 交易,则 20万 区块长度内竞争者规模可达百亿,51%攻击几乎不可能。
* k7 F7 k/ I- t$ H: E9 L; i2 C基本上,这是借助于交易ID和区块哈希的随机性来评选铸造者,因重在随机性,故名为概率证明。! |5 u, u9 T$ B
对铸造者的约束* C! p- m4 w$ J' ^( K0 z3 I2 B
通常情况下,交易是自然需求的产物,用户仅在需要实际支付时才会创建交易。但交易可以参与铸造竞争,这为单纯获取竞争机会就创建交易提供了理由。另外,铸造是可以委托的(见后),应当让委托可以失效、现状可变,还用户用脚投票的机会。因此设计如下规则:
1 ]' n* P) z  ?4 c4 i6 p! t5 }参与铸造竞争的交易必须处于区块链末端20万区块高度以内,取值范围:[-11, -200000]。负号表示从末端倒数。
0 w9 X0 L$ G8 k6 R1 u( d9 C! y. x" `交易包含的币权需要满足一个最低值(如 0.1币时),这可以提高构建大量小微交易的成本。综合兼顾,这个值不应太高。
  c: E( G3 Q- B" }9 ?0 s0 g- v交易需要是有效绑定本链的交易,历史标记(见后)为空或错误的交易无权参与铸造竞争。
5 y( E6 ~+ c6 H" `为便于描述,这些有资格参与铸造竞争的交易称为「铸凭交易」,由其交易ID演生出来用于最终对比的哈希称为「铸凭哈希」。
2 q9 E: h) n( D$ P7 M8 Z一级筛选:哈希相似性
- y) z1 K0 g7 l如果将两个哈希序列描绘成两条曲线,两条曲线的相似度称为哈希相似性。进行对比的两个哈希序列分别是铸凭哈希和由目标区块ID(-11号)演算而来的「对比哈希」,相似度采用「相位差和」(可想象成纵坐标上的点距之和)计算,小者胜出。算法如下。; X- K9 Z. G) p! B( q
算法伪代码:# L6 J1 _- [6 k$ I9 \9 l
Code:  I: x% s2 F% R1 Z9 P% T
// 铸凭哈希:7 ?1 T- x& b3 J4 A7 P1 U4 E
// 加入当前区块高度(4字节)获得定位约束。- _' q: _% V2 @+ c" B
// 双倍ID与下面单ID形成交错约束。
) o9 \9 B$ _8 K" \  ~% V0 Avar h1 []byte = Hash512( 交易ID + 当前高度 + 交易ID ). s/ p* W. D2 X/ e
// 对比哈希:+ u& R: l" m3 P0 Y" r* e
// 加入铸凭哈希(h1)获得关联性约束。
  j& x' f" `- o9 ~. w$ |5 C1 Q// 加入交易ID与前面形成嵌套的交错约束。) L2 Y" f6 L' \5 @$ L+ q. K
var h0 []byte = Hash512( -11号区块哈希 + h1 + 交易ID )
( ~  C1 A5 S# ]3 v3 V" ]// 相位差和计算(哈希空间压缩)。
9 l! n' {* `  O4 ]  D8 X" v// 按4字节分段X坐标,4字节整数值为Y坐标,计算两条线Y坐标差距累积。- ~" L, b: d0 J
var sum int64) Y+ ?3 ?# X( q8 e+ @
for n:=0; n
2 d  {/ _+ V; O( n返回的相位差和即是铸造竞争的一级评选因子,也即哈希相似性的权重。
7 f& }3 y7 X% s) H二级筛选:币权# n$ E2 p7 Z' i, ~$ E9 j
交易包含的每一笔输入的币量乘以币龄的总和,即是交易的币权。它作为第二级筛选因子参与评选,高者胜出。这是在第一级筛选中评出的 2名 获胜者基础上进行的,因为评选的目标范围受限极大,所以纯PoS中富者越富的问题应该可以忽略。0 ?4 h: g8 v6 l1 |6 s
币权是一个有价值的筛选因子,它可能促使用户优化自己交易的币权分配,比如尽量把古老的余额花掉(得到高的币权),以及尽量保留新的收款以存储币龄。这对系统的数据管理以及整体上的运行效率有益。# i0 H( D( z/ d! X3 B( _
币权值的计算可采用「聪秒」精度,降低2名获胜者币权相等的概率。
- M- v% p! H) f1 O$ S三级筛选:最终唯一性
  M% `0 [6 R& [" a( u1 T% R如果二级币权筛选不足以决出胜负(极为罕见),则简单地取一级筛选中的 h0 哈希序列按字节对比,小者胜出。这只是一个最终唯一性保证。/ p" F5 \0 W" `
铸造委托
4 F1 f1 k; H+ d用交易ID作为铸造评选因子有广泛的普适性,概率基数庞大,但这要求无专业技能的普通用户参与进来。显然,专业技能和时间的花费是一个不小的壁垒。没有普通用户的参与,庞大的概率基数没有意义,因此让普通用户委托专业的铸造者行使铸造权十分必要。5 \% A( b" I- R& Z. ]2 h% S
为此,设计在交易的数据结构中添加了「铸造委托」的定义。结构为:铸造地址(32) + 分成定义(1) + 收益地址(32),长度65字节。其中:+ J& \. @$ S, j( q' n
铸造地址:定义签名区块的主人。这可能是用户自己的地址,也可能是专业铸造服务商的地址。
5 K  k! A- f. w/ Q6 w分成定义:定义铸造地址与收益地址的分成比例。% ]! ~4 D9 S/ k( a/ h" p. C8 Z
收益地址:接收铸造的收益分成。这使得铸造可以与收益相分离,也创建了一个外部委托铸造的机制。可选。  m/ M9 y2 X3 f# a. W: E6 ^7 L
根据分成定义值的不同,收益分成实际上有三种模式:
5 s* l& ^4 M8 @! n3 R2 c9 z; h( i值 0:    收益地址无收益,全部收益支付到铸造地址。因此收益地址可省略,节省32字节的空间。1 P9 L  F7 t6 i: c' o
值 255:  铸造收益全部支付到收益地址,铸造者无收入。可实现铸造与收益的完全分离,即冷挖矿。4 J0 w/ X8 e* x2 Z% o
值 1-254:按 n/255 的比例支付到收益地址,剩余的支付到铸造地址。这可实现外部委托铸造。
* P) t7 {, }0 A6 m交易头
0 Y! a, M5 r" j2 Q8 X类似于区块头代表了区块数据,这里设计了交易头结构。铸造委托和历史标记被定义在交易头中,便于铸造者资格的验证。交易中的输入和输出序列被分别计算哈希,然后合并计算交易体的哈希,最后嵌入在交易头里。交易ID就是交易头数据的哈希摘要。
  ^2 M/ T, a  U3 f交易头伪代码(合计 97+32 字节):  u1 p- y# y. E. A9 y/ f0 E7 U
Code: (go)
2 t- r/ q- d9 k" K' k0 @TxHeader {
+ f( O9 R* u. d, A! B# z    Version    int32     // 版本
8 z* b8 y) M' y3 G: n( x& D    Timestamp  int64     // 交易时间戳。可设定为未来时间4 B4 r/ a8 h3 ~. ]: L
    BlockClue  [20]byte  // 历史标记2 H3 `3 E; h/ K9 W2 m$ {4 {$ {
    Minter     Address   // 铸造地址,32字节. @5 H. X! c3 N5 k% N
    Scale      uint8     // 收益地址分成(x/255)  [- R; \5 w7 D$ I" F
    Staker     Address   // 收益地址,32字节,可选
& }" Q/ r( L$ H    HashBody   Hash256   // 交易数据体哈希,由输入序列和输出序列合并而来' F) a9 ~6 H8 s: n8 i8 C
}9 X/ m4 ]5 F4 S1 M/ d! u% K* [0 D  [  _
附:交易的末端区块与历史标记
, V* k1 W6 F( h. }" |- ?本设计中无需工作量逻辑,区块的出块时间间隔为固定的值(如:6分钟)。交易的末端区块指交易时间戳所在时间的区块链最新已确认区块,高度 = (交易时间戳 - 创始块时间戳) / 6分钟。! F/ V* o1 s% u0 R  J" a; u$ q/ {
在交易中嵌入主链上特定历史区块的标记,可以实现交易者对主链的认可。历史标记绑定的目标就是从交易的末端区块算起的 -11号 区块,值为目标区块哈希的前 20字节。. v0 ^8 @, ~# D( ]$ J" f. L
安全性
! B+ ~" i' O! K% `5 q0 L. T! t2 z铸造委托创建了铸造市场化运行的机制:不同的钱包服务商在市场中竞争,创建专业的服务,获取用户的委托。委托是自由的,新的委托不断加入,过期的委托不断失效,这形成了流动性,也形成了市场的活力。
( l; o+ {9 o$ G6 |) r# s; u服务良好的钱包服务商会拥有大量的用户委托,这可能带来垄断。但委托存在有效期,用户可以选择用脚投票,改变新交易的委托目标。同时其它钱包服务商也是一个竞争威胁,因此知名服务商串谋攻击的可能性应该不高。+ D; a( B8 R: t+ R1 W
铸造者的预选与同步
8 \# ]. J% N/ ^- {因为哈希相似性对比是针对区块链末端 -11号 区块的哈希,所以一个铸造者可以提前 10个 区块时段得知对比目标。如果一个节点即时评估自己的铸凭交易并广播,则全网有充足的时间进行预先沟通。尽量多的参与者加入,可以使得尽可能优质的铸凭交易被发掘出来。! g) C6 C9 S/ Q: V' l: f5 ^( |5 p
择优池
* G$ g; d, I% ^2 [" x1 a/ J- K  T3 f在铸造者的预先沟通中,各个节点会收集被广播出来的铸凭交易,构造出一个 100 容量的择优缓存池。当一个新的铸凭交易抵达时,计算它的哈希相似性,如果比池中最差的一个更优,则存储并转播,否则忽略。
. _# ~! y/ O+ w% P* d3 c9 K+ h% g% E广播的铸凭交易需要被验证,这由铸造者对目标区块(-11号)哈希的签名实现(同时也证明在线)。当出块时间到达时,择优池中位于前端的铸造者就可以铸造区块并广播了。& R) F9 Z! @( \( O3 q
择优池的设计是一个必要的策略,用于发掘铸造者并有序化竞争,同时也约束全网广播的区块数量,避免造成网络拥堵。
6 {( m  r5 K( |' V7 a9 C4 Q避免分区; X& c1 r( i* n9 w- Z
P2P网络是自由的,任何潜在的铸造者都可能离线,一个实际上拥有最优铸凭交易的用户也可能刚刚上线。如果刚刚上线的铸造者铸造了一个最优区块,但却因为处于出块时间边界而使得区块未能广泛送达,则全网范围内最新区块的评选就可能不一致,这会导致分区情况的发生(末端分叉)。或者,一个拥有最优铸凭交易的攻击者选择有意地延迟,也可能造成这种情况发生。
( T' M) f# ~0 A/ V1 ABitcoin系统中是用最长链作为约束,但这里是固定的出块时间间隔,所有分叉(如果有)长度都一样。因此需要一种机制来约束主链的成长、竞争和选择,这就是下面的择优池的确定性同步,以及后面的竞争支链的纵向评估等规则。. d0 s& K6 B, a
择优池同步
; a7 W/ A* M+ g1 i1 x为避免刚上线的优质竞争者的扰乱,各节点择优池中的铸造候选者应当被先期确定下来,而之后的铸造者就不再被认可。这需要在新区块创建时间之前对择优池进行同步。每一个区块都有此逻辑,针对相应的-11号区块有着自己的候选者择优池。
+ f, N" B: G, _+ z* ?择优池中的成员需要不断收集、淘汰和更新,并在适当的时间结束更新并启动同步。时间规划如下:
/ ?* t$ y8 M- S% i% ]% Z2 [在铸造对比的目标区块被创建后,到它成为 -10号 区块前(9个区块时段,54分钟):与它做相似性匹配的铸凭交易可以被任意广播和收集。# M, L* H7 C% U7 o3 v( ]8 e
在目标区块成为 -10号 区块时,择优池的收集和更新结束,进入内部候选者的同步阶段。该阶段为 1个 区块时段(6分钟),至它成为 -11号 区块时结束。% z% Z& A# B3 o* \
当目标区块成为 -11号 区块后,它即正式成为当前区块时段将创建区块的评比参考目标。铸造者收集、验证、打包交易,在预定的时间创建区块并广播。
8 ]9 }. l+ U6 `1 G/ F择优池的同步由择优池中的候选者签名并发起,出于利益无关性考虑,这仅由择优池中权重排序低于32位的成员执行,即第33-100名共 68位 候选者有权发起同步。这样设计的原因是:" f% H, O$ |$ \- u+ }
在P2P环境下,时间是一个无法准确的值,系统需要容忍这种模糊性。如果没有这种限制,高权重的迟到竞争者可以随时把自己加入择优池然后启动同步,因为其高权重很可能最终获选,于是就会影响到最终的结果,让预先同步失去了意义。同时,这也会让同步工作很难正常结束。
2 M5 s4 Q' M# _0 j) h" J有了这一限制后,一位后来的中低权重的池外竞争者没有动力去做这样的事(即便做了也无多少影响),而池内有权同步的候选者也没有动力去把那位高权重的后来者补上(注:同步的权利只有一次)。
+ d' D. Q" b5 |/ D择优池中权重低于32位是一个模糊的概念,因为择优池本身尚未同步,内部成员的序位并不确定。但这没有关系,同步是一个成员补充的逻辑,节点只需检查对方的择优池以及它自己的序位是否合法,然后合并按 100 的容量清理即可:如果对方集优,合并后肯定合法,如果己方集优,合并后只是淘汰掉质差的而已,不造成实质影响。一个同步者只有一次机会,随着越多同步的合并,择优池会越来越稳定。
. b. I  @3 O) j  M" S' M+ ], \7 l$ R铸造者的最终评选7 H! Q6 N! Q4 h% e, i  i$ h
当出块时间将要到达时,理论上择优池中的全部候选者都有权出块,但因为筛选的条件很明确,通常只需要处于前端的候选者出块就可以了。但实际上,这里还有一些潜在的隐患。
4 p( F) s3 N+ T, T' s! e* c# {" v- B2 _% l哈希塑造4 w, Z$ p9 ?, Z( Z% k4 Y3 V* [
哈希相似性要求铸造者用自己掌控的交易ID与目标区块的哈希进行对比筛选,这里存在两种攻击的可能(假设攻击者拥有极大的哈希算力):
. {" S1 a0 L5 B2 F攻击者可以通过在交易里添加随机数据来塑造交易的ID,使它与目标区块的哈希尽量相似(依照算法)。4 e8 t8 m  H+ e. F# j+ `
对于已经能够创建最优区块的攻击者,可以通过变更交易ID来塑造当前区块的哈希,使得该哈希与自己拥有交易的ID有更好的相似性,从而为自己下一次的竞争获得优势。
- O  N, c1 \2 k& T/ h& q: ~这就是哈希塑造,一种不可接受的作弊行为。如果诱惑力足够,出现专业的作弊矿机是可以预期的。
8 _% I- c+ Y; I( _; R! o解决办法:! _0 T- {& }9 u$ s: h/ L
对于第一种交易ID的塑造,仅仅适用于末端 10个 区块里的交易,所以简单的排除这10个区块参与铸造竞争即可。
# `! o2 n% W' Q9 s, h* o对于第二种反向匹配交易ID的区块哈希塑造,虽然它的发生受限于 只能是那个已经胜出的区块的铸造者,但如果攻击者的哈希算力足够,他就可能从基础层面获得优势,持续胜出甚至锁定胜负。/ @, z1 I4 k7 ?$ |+ U% r
因此需要设计更细致的规则来制约:
) B$ {6 R' l( p0 s3 A# t5 I- n8 r0 q最低交易数量:区块包含的交易数量必须占到可进入区块总交易数的 70% 以上。这可以压缩攻击者塑造区块哈希的可用时间。
0 S2 v! U/ f5 ?动态性和模糊性:择优池前 3位 不参与铸造竞争。攻击者会因此而失去塑造的趋近判断(不是最近就好),而择优池是动态的。
) b+ v- c3 L/ e+ h7 D" m确定性的消减:在一级哈希相似性筛选中增加一个子级筛选:即时哈希。消减哈希相似性的「胜选确定性」,消磨作弊者的动力(见后)。
; o1 x" k" i, D0 ]7 ]5 j择优池凭证5 [0 ]7 p5 v1 t& E2 \' S
择优池是一种局部的逻辑,为了可验证,可用择优池中 前3名 为代表,用它们的定位信息(3x36=108字节)作为择优池凭证。择优池凭证和铸造者签名信息会包含在 Coinbase 交易中,这大概会增加约300字节的数据量。
' S' T) f0 c2 l7 p这样的设计可以提高攻击者的门槛:如果攻击者要构造一条竞争支链,除了自身需要有足够权重的哈希相似性外,还需要对每一个区块寻找3名权重更高的铸造候选者为凭证,而这显然是一个很高的门槛。! ^0 v  X8 {4 c2 Z+ ^3 w
微调评选规则; K3 c/ |- }  Z# K1 Y. O( R' i
择优池中 前3名 不参与铸造竞争,对于之后的 97位 候选者,取当前活跃的 前4名 作为初选结果。4 V) ^6 K/ D1 H+ c& V4 b/ B
这4名初选者按「即时哈希」进一步筛选,取值最小的 2位 为决胜者进入币权的二级评选,规则同前。
" O# w7 T( @7 w" L6 a" C0 E/ I# p即时哈希算法伪代码:
) `+ D4 V! ]6 J0 H; e' x; SCode:, k6 F$ W. q/ ?3 W& }3 x& B
// 当前确定的108字节。1 i* e3 Y& t2 W- g2 x0 a
var base = 择优池凭证
* E* w8 ?* u) \. z7 g6 |4 i// 活跃的前4名是平等的,更优的哈希相似性没有意义。
$ ~4 n7 S& f$ t3 Wvar h1 []byte = Hash256( base + 活跃者1交易ID )
$ ^: Y( A2 s* p: w2 m( D  w) g  Zvar h2 []byte = Hash256( base + 活跃者2交易ID ); G* T5 H% o1 c0 _# T7 n0 K' y
var h3 []byte = Hash256( base + 活跃者3交易ID )
8 k( W4 K: @' J1 Q3 Q9 Hvar h4 []byte = Hash256( base + 活跃者4交易ID ). |9 {) z6 g5 g" k  ~( o
queue := sort(h1, h2, h3, h4)7 I5 N6 H6 F: }9 {
return queue[0], queue[1] // 选取两名值小者获胜+ l' j. G1 L; K- r% |# ]
末端活跃区块
0 S: [2 L' }$ {! x- ~- @区块不能收录未来的交易(按时间戳计算),这是一个基本设计。铸造者没有理由等待,新区块通常会在预定的时间(6分钟的间隔时间点)开始创建。区块的创建、广播和验证都需要时间,这里作如下规定:新区块的创建和广播可延长至下一区块时段内的前 3分钟,之后节点不再接受新的区块。; Z$ X' D* f6 u4 G
在择优池中排前的候选者不一定持续活跃,虽然概率不高,但逻辑上这是动态的,因此新区块并不能在准确的时间点确定。随着变化,优胜者可能改变,新区块也会随之变更,这种动态的变化可称之为「活跃」。
0 h7 V3 _6 }9 {5 {% T1 Z: d区块的广播抵达和区块数据的同步完成不是同一个概念,只要可验证的区块证明抵达全网,区块的数据同步可延续到下一区块时段完整的6分钟。考虑可靠性冗余,同步的区块可以不止一个,候选的次优区块也应当伴随,如果最终发现最优区块里有无效交易,次优区块就可以被考虑了。! q+ \% a9 ?) d: Z5 s
优势与不足
9 O; R/ P; H/ l9 q基于历史交易ID和区块的哈希随机性,用概率的方式评选区块,没有工作量证明(PoW)的能源浪费。
5 r4 g0 F2 y) M次级的币权筛选因子受到很大的限定,可以认为基本上不存在权益证明(PoS,起源于Peercoin)模式下富者越富的问题。
3 u! e5 E5 ^$ M& j: M; z+ x' {8 M自由的直接筛选,不需要委托权益证明(DPoS,由BitShares发明) 的选举流程,更接近自然的去中心化形式。6 Q: ?# F( @, j1 j/ g/ d8 K
固定的出块时间间隔使得区块拥有可预测性,时间因子的价值更容易被开发利用。+ E! ~6 k/ l0 x5 @
每一笔交易中需要包含铸造委托定义和主链绑定标记,会多出 53+32 字节与交易逻辑无关的额外数据。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

小饱1 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    36