内分叉链(InnerForkChains):一种新共识机制
现实永不言弃言j
发表于 2023-1-15 18:28:35
260
0
0
从长期来看,少数算力服从多数算力的规则无法从根本上保证区块链的统一。矿工可能因为理念或利益问题分裂成水火不容的两个派系,最终引发算力大战。矿工也可能通过让一个不被看好的分叉链逆袭成为主链,来实现暴富的“梦想”。人类无法停止争斗。也许我们根本就没有办法抑制矿工分叉区块链的冲动。& G2 z) e. k. Z' b8 N
那么我们能否满足矿工的“分叉自由”,同时又能保证区块链的统一呢?
本文提出了一种内分叉的方案,在区块链内部真实模拟区块链分叉的场景,使矿工能够在不分叉区块链的情况下打算力战,从而维持一种斗而不破的局面。% |0 |& _0 n6 y+ `( t) b
二、资产二叉树
定义1 资产二叉树是指这样一种二叉树:
(1) 该二叉树的节点数量有限;
(2) 每个节点或者有2个子节点或者没有子节点;1 V# [+ V0 I5 h' E
(3) 每一个节点对应一种资产类别及相应的资产数量;
(4) 叶子节点对应的资产称为原生资产,分枝节点对应的资产称为合成资产。每1个分枝节点对应的合成资产可兑换为1个左子节点对应的资产和1个右子节点对应的资产。同样的,1个左子节点对应的资产和1个右子节点对应的资产可以兑换为1个它们的父节点对应的合成资产。
如果我们记T为一个资产二叉树,那么我们可以记TL为它的左子树,记TR为它的右子树,记nT为T的根节点对应的资产的数量。7 Q0 C, f& c8 [
如果我们记N为一个资产二叉树的节点,那么我们可以记NL为它的左子节点,记NR为它的右子节点,记NP为它的父节点,记Nroot为它的根节点,记nN为N对应的资产的数量。
定义2 T为一个资产二叉树,定义函数:
,如果T无子树;1 t' q0 v1 N# S2 G$ y- m
,如果T有子树。
如果我们记N为T的根节点,那么我们也可以将e(T)记为e(N)。
定义3 N为一个资产二叉树的节点,定义函数:( J U X# j N" h# D% O; m7 d* U: G
,如果N是根节点;
,如果N不是根节点。& c5 A! Y( t+ d& K% |4 x4 z. T: i
max(N)称为N对应的资产的最大量。6 F5 J4 j* |/ @
定义4 T为一个资产二叉树且有子树,定义。' I* H2 d, _" ]% H, D4 \
λT称为T的保守系数。如果我们记N为T的根节点,那么我们也可以将λT记为λN,也可以称为N的保守系数。( y% i8 _ a+ V$ E" ?
定义2中的第二个公式经过整理之后可写为。; W6 q6 E4 F8 f& V3 Q
也可以将它写为矩阵形式:
更进一步的,我们可以定义:
定义5 T为一个资产二叉树且有子树,有n个变量,是其中的第i1、i2、i3个变量,定义矩阵$A_T=(a_{ij})_{n\times n}$,其中) ^' l$ S# [, d0 A
AT称为T的转换矩阵。如果我们记N为T的根节点,那么我们也可以将AT记为AN,也可以称为N的转换矩阵。
定义6 N1和N2为资产二叉树的节点,定义父节点判定函数:9 k3 R* V: `, b8 F( h! C
,如果N2是N1的某一级父节点;
,如果N2不是N1的任何一级父节点。' x$ H: c6 ]% i7 k z) `( p" i
定理1 T为一个资产二叉树且有子树,T有n个分枝节点及m个叶子节点。将以这样一种顺序排列:父节点永远在子节点前面。取为n+m个变量,得到分枝节点的转换矩阵。任意取且,则为满秩矩阵。
证明:考察行列式中的第k行,它由生成。由于节点排列顺序使得的前k-1个列向量均为零向量,第k个列向量中恰有两个元素值为,其它元素为0。因为,所以第k行前k-1个元素为0,第k个元素为正数。' J8 f( V# I" V( v5 k0 w' ~ N) C
∴该矩阵为上三角矩阵,对角元素均为正数。∴结论成立。, t. f# P# C' n/ g& \8 S
定理2 为满秩矩阵。则为满秩矩阵。
证明:任意取且。因为为满秩矩阵,所以。根据定理1,为满秩矩阵。
& m( M3 @$ ^; |& R: i( ^
∴结论成立。
算法1 T为一个资产二叉树且有子树,T有n个分枝节点及m个叶子节点。已知分枝节点的保守系数和叶子节点的最大量,要求计算。' V0 i5 U0 X1 ?7 q+ ^* C
解:将以这样一种顺序排列:父节点永远在子节点前面。取为n+m个变量,得到分枝节点的转换矩阵。$ d6 l$ u9 p1 }* \" N6 \7 s2 d# R
根据定义,对任意一个叶子节点N,6 D& z( v' D- l6 C f
记。我们可以得到,这里。& ?3 T+ O2 V! G1 e- W4 L" C
记。我们要求x,使得F(x)=0。" ~- g0 E2 O1 s. k: k
由定理2可知,在y>0的条件下,F’(x)可逆。所以,我们可以用牛顿迭代法求解。迭代公式为:。' e0 B; n% q% z) T" E3 M3 K$ b
算法2 T为一个资产二叉树且有子树,T有n个分枝节点及m个叶子节点。已知序列号的子集,已知分枝节点的保守系数和叶子节点的最大量,已知,要求计算未知数t和。
解:记。我们可以得到,这里。易知,当时,M为满秩矩阵。1 [3 D" M3 s* O" L" T
其它部分与算法1相同。! k% ]6 o6 {, K+ Q
三、内分叉协议# H& ]' J$ ~$ g6 ]. q. n
内分叉协议打破了传统的单一链的束缚,创造性地提出了外链和内链的概念。+ e( @% p/ \' Q1 W; p9 |! }
外链与传统的区块链一样,是区块链打包形成的链,首尾相接没有分叉。
内链是区块链内部形成的链,矿工可自行指定父区块并在区块链内部形成多个分叉。
内链分叉会形成分叉币,分叉币的类别用区块高度来标识,每一个区块高度都可以对应一个分叉币。我们可以认为“一区块一分叉”。
为了分叉币之间能够相互兑换而不必依赖外部的交易所,我采用恒定函数做市商模型为分叉币之间创造市场。我采用了上一章所述的资产二叉树模型作为恒定函数做市商模型。2 M5 b! w6 w4 m
未分叉的一段内链上的区块高度对应的分叉币被视为同类分叉币,同类分叉币之间可直接相互兑换。如果内链出现分叉,则分叉前的分叉币可直接兑换为等量的两种分叉后的分叉币,同样的,等量的两种分叉后的分叉币也可直接兑换为分叉前的分叉币。将分叉后的分叉币作为分叉前的分叉币的子节点就构成了一个资产二叉树。为了保证二叉树结构,这里我们规定不可以在同一个位置作多次分叉。2 W+ `* M# ?- r. g, U
我们将一个(子)资产二叉树的保守系数λ定义为:找到该(子)资产二叉树对应的一段内链,这段内链从根区块开始最长的一段无分叉链长度记为l,这段内链最长分叉链的长度记为L,定义。
矿工打包区块会获得区块奖励,区块奖励的币种为当前区块高度所对应的分叉币,数量由内链的分叉链的长度决定。如果矿工打包的分叉链为内链中的唯一最长分叉链,那么在矿工获得相应区块奖励的同时,资产二叉树中其它原生资产的最大量会相应增加与区块奖励相同的数量的分叉币。- u6 `0 Q- O `& {5 A6 D( G
矿工打包新区块后,相应地调整资产二叉树中各分枝结点的保守系数,然后根据各个原生资产的最大量用算法1重构资产二叉树。然后,使用算法2将矿工得到的矿工费兑换成当前区块的分叉币并奖励给矿工。3 _ Q& z( d$ } R0 H
如果矿工打包新块后内链出现分叉,那么新分叉出的两种原生资产的最大量应当恰好相等,然后根据上述方法操作。
为了防止矿工通过分叉币掏空资产池,这里需要特别规定:矿工分叉内链最多只能跳过一个区块。
3 T- z3 ^/ P& ~' k1 Q
为了防止资产二叉树过度膨胀并促进分叉链的优胜劣汰,规定:当一条分叉链与最长分叉链的长度之差超过一定数量(比如1000个区块)时,这条分叉链将被强制死亡,将相应的分叉币从资产二叉树中去除并禁止使用。
成为第一个吐槽的人