Paul C's Blog

To be funny,to grow up!

0%

农民工社会保障

[TOC]

一、农民工定义

广义的农民工包括两部分人,一部分是在本地乡镇企业就业的离土不离乡的农村劳动力,一部分是外出进入城镇从事二、三产业的离土又离乡的农村劳动力;
这里的农民工主要是指后一部分人中的拿着最低收入从事生产一线的工人。,也就是“身在城市从事非农业工作的农村户口的工人”。

农民工:指户籍仍在农村,年内在本地从事非农产业或外出从业6个月及以上的劳动者。

区分标准1:乡镇地域。

本地农民工和外出农民工(指在户籍所在乡镇地域外从业的农民工。)

进城农民工:指年末居住在城镇地域内的农民工。

Read more »

本文参考文件为:CFX黄皮书导读

从11月底开始,对于每一周的笔记,命名为CFX[周数]-[这周的第几次笔记]

第七章 存储抵押

存储押金机制

交易信息临时占用存储,合约变量信息永久占用存储。

Gas 所代表的计算资源,是在交易执行期间,被一个又一个指令执行消耗掉的。

存储押金所代表的存储资源,是在交易执行结束后,将执行结果从缓存写入到硬盘时,才开始消耗的。

Read more »

本文参考文件为:Conflux白皮书CFX黄皮书导读

安全性系数出自 Rafael Pass, Lior Seeman, and Abhi Shelat. “Analysis of the Blockchain Protocol in Asynchronous Networks.” EUROCRYPT 2017.

论文下载链接

0.GHAST机制的核心

1.三种权重的最重链规则

同样采取最重链规则,但是区块有三种不同的权重:0, 1, X。其中 X 是一个比较大的数,例如 X=1000(先不讨论涉及挖矿难度调整的情形)。

额外限制:一个权重为 0 的区块不能成为主链(pivot chain)的一部分,也不能成为另一个区块的父亲区块。这个条件保证了每一个权重为 0 区块的子树权重一定是 0。

2.两种区块,最终权重的期望值还是1。

​ 网络中有:普通区块和特殊区块。普通区块的权重永远为1;特殊区块的权重根据区块的难度值(Difficulty)确定——有 1/X 的特殊区块权重为 X, 其余为 0。挖出一个普通区块和挖出一个特殊区块的难度是一样的。

​ 让矿工生成特殊区块,在共识机制中类似于将区块难度调高 X 倍,将出块速度放慢 X 倍。出块速度放慢后,是有利于解决“存活性攻击”的问题的。

3.区块的类型由区块的“历史树图结构”决定, 区块的生成者不能随意指定区块类型。

从这个区块开始,沿父边和引用边往前回溯,直到创世块,这些区块(不包括区块 b 自己)所构成的树图结构就是区块 b 的历史树图结构。

对于一个诚实节点来说,生成的区块 b 的历史树图结构就是节点生成这个区块 b 时所看到的树图结构。因为树图结构要求矿工引用所有看到的、未被引用的区块

4.两种区块和攻击的关系

在没有攻击的情况下,所有新生成的诚实区块都应当是普通区块;在攻击者进行任何一种“存活性攻击”,并且持续足够长的时间后,所有新生成的诚实区块都应当是特殊区块。

对于两者的中间状态,即观测到持续时间不长的攻击行为时,按照上一期文章中提到的“让诚实节点求同存异”的思想,我们允许一部分诚实节点生成普通区块,另一部分诚实节点生成特殊区块的状态存在。

实际上,活跃的攻击行为是可以从一个区块的历史树图结构中反映出来的。

如果一个区块的历史树图结构中有两棵大小相近且权重都很大的子树,则可以推测有一个攻击者正在进行平衡攻击。此时诚实的节点都应该产生特殊区块。

另一方面,如果历史树图结构中每个区块都可以根据确认规则很快地被确认,就说明没有什么问题(至少暂时没有可以被诚实节点观测到的问题)。此时诚实的节点都应该产生普通区块。

1.GHAST|保障CFX的存活性

设计流程:“设计方案——寻找并发现漏洞——否决并修改设计”

参考如何应对“存活性攻击”

一种思路是无效化攻击者的块;

一种是遭到存活性攻击时,通过放慢 Conflux 的出块速度来应对。

1.1 Conflux 保障存活性的基本思路

  • 不使用区块接受时间建立共识
  • 有攻击时调整挖矿难度
  • 挖矿难度调整求同存异?
1
2
3
4
5
6
7
8
/*
1、共识机制只基于树图结构中每个区块的父边和引用边,不再使用区块接收时间这种对不同节点可能不一致的“本地信息”。

2、通过调整挖矿的难度,来实现对 Conflux 出块速度的调整。在没有攻击时,Conflux 使用较快的出块速度来追求效率;有存活性攻击时,Conflux 放慢出块速度来确保安全。出块速度放慢时,要相应提高区块奖励,以保证矿工的利益。

3、挖矿难度不能让矿工自己说了算,但也无法做到让所有诚实节点同时切换。在具体的难度调整机制上,我们依然需要使用求同存异的思路。

*/

1.2 历史树图结构

判断一个区块是普通区块还是特殊区块的依据,必须也只能是这个区块的“历史树图结构”——这个结构包含了矿工在产生该区块时的主观视角下能看到的所有可被其他人验证的信息。

1.运行良好的链

image-20201128144456935

2.两个大小相近的分支,且每个分支上都有比较多的区块。

image-20201128144552979

比特币上很少见到超过三个区块的分叉,以太坊上超过十个区块的分支也很少。

正常情况下,几乎不可能有两个大小相近、且都有很多区块的分支出现。如果观察到这样的情况,就说明很可能整个区块链网络遇到了严重的问题,比如说正在遭受平衡攻击。

因此,这时候区块链网络的运行状态是异常的,我们需要放慢出块速度让算力重新集中,尽快解决分叉问题。

3.分割攻击情形

image-20201128144752963

上下两侧在“分叉”上的区块都在互相引用对方,而主链区块却没有引用任何两侧的区块。

攻击者要么是两边的块,要么是枢轴链。根据算力,最可能是枢轴链上的块由攻击者产生,故意不引用两边。每个

每个区块的真实生成时间很难确定


4.GHAST 的判断规则

Conflux 最早设计出的规则:给定树图结构,我们对每一个主链区块 b 计算如下比值:

(b 的子树权重)/ (所有区块 - b 的父亲区块的祖先区块)

即b的子树权重/b+b的兄弟子树总权重

  • 比值大于某个常数(比如 0.6),说明在所有生成时间可能晚于 b 的父亲区块中,多数区块都在 b 的子树中。

  • 本身分母也比较大:足以保证 b 的子树权重优势足够大,很难被它的兄弟区块超过了。

2.根据比值判断链的运行状况和是否遭到攻击

如果从创始块到区块 b 的所有主链区块都有这个性质,那么这些区块都可以得到确认,也说明此时区块链网络运行良好,没有遭到存活性攻击。这样的树图结构就是一个“正常的树图结构”。

反之,如果晚于某个主链区块生成的区块没有聚集在之后的主链分支内,则可以推测区块链网络可能受到了攻击,此时的树图结构是异常的。

三.损人不利己|避免特殊区块被过度利用

一个候机区块对当前区块是一个vote,而非一个confirmation。

这里提到的“交易确认”都是指交易的安全性达到相当于比特币中等待了 6 个区块的安全性。

有攻击时,快出块快确认;有攻击,出块速度变慢,权重区块。

特殊区块被利用时的危害

1
2
3
4
5
6
7
8
9
10
11
/*
假设每个普通区块的权重为 1;每个特殊区块的权重有 1/1000 的概率为 1000, 其余情况为 0。

现在,诚实节点控制 80% 的算力,在一棵子树下生成普通区块,攻击者控制 20% 的算力,在另一棵子树下生成区块。

如果攻击者只能生成普通区块,那么在诚实节点的子树领先 10 个普通区块后,攻击者反超的概率小于10^(-6)。

如果攻击者可以生成随意选择生成普通区块还是特殊区块,那么在诚实子树领先 10 个普通区块时,攻击者反超的概率不低于 24.83%;即使诚实子树已经领先了 100 个普通区块,攻击者反超的概率仍有 23.12%;在诚实子树领先大约 5500 个普通区块后,攻击者反超的概率才能降到 10^(-6)以下。(具体计算过程略。)

因此,如果我们要以不超过10^(-6)的风险确认区块,则在攻击者可以随意生成特殊区块的情况下必须等待几千个普通区块才行——即便此时根本没有这样的攻击者(比特币在没有攻击者的时只需要等待 6 个区块就能确认)!
*/

CFX保证了在没有活跃攻击者的情况下,大概率可以在半分钟内确认交易(不低于比特币 6 个区块确认的安全性)。我们在内部测试网按照平均每 0.25 秒产生一个 300KB 区块的参数设置,实测得到了 23 秒的平均确认时间。

攻击者为什么不能主动触发特殊区块规则?

本文参考文件为:Conflux白皮书CFX黄皮书导读 直观地理解共识机制带来的tps、存储上的消耗,以及conflux中block和trans的具体执行时间差异。

CFX声称在共识层面提升区块链的吞吐率,减少区块确认的等待时间,

Conflux 的网络参数

参考《如何存储历史数据》

Q1:Conflux的TPS能跑到多少 ?

  • 全节点验证
  • 部分节点验证,交易分片

​ 在比特币中,每一个区块都需要广播给所有矿工,每一笔交易都被所有人验证过,我们称之为一个交易得到的“全节点验证”。在一些 Sharding方案的实验中,所有的交易被分成 30 份, 每个节点可能只验证其中一份。这样的交易称为“部分节点验证”。很显然,“部分节点验证”交易的总 TPS 是可以成倍于 “全节点验证” 的。

Conflux 在共识层面可以做到 4000-6000 TPS 的“全节点验证”, 如果考虑合约执行、状态读写等因素,实际部署可能会低一些。Sharding 技术是共识层技术一个很好的补充,Conflux 有计划在未来实现 Sharding, 提供更高的 “部分节点验证” TPS。

Read more »

本文参考文件为:Conflux白皮书,试图解决blockID的计算,并了解Conflux具体结构和数据。

0. Value

1.Accounts and States

Account=(αaddr,αstate);αaddr=4+公钥哈希值的大端排序的低位156位。

αstate = (αbasic,αcode,αstorage,αdeposit,αvote)

αbasic ≡ (αn,αb,αc,αt,αo,αr,αa,αp),8个分量

对于αn,这里的nonce指有这个账户发起的活动数的计数器。

1.2 RLP structure

Read more »

[TOC]

0.上周讨论会总结的新问题

  • conflux的throughput大概是6400tps(4M/2.5s的配置,40Mbps的带宽下)

5.76G/h, 5.68 分钟确认一个块

  • 私有挖矿问题(为什么攻击者把块公开给一个人后,所有人都会知道这个块),分布式同步假设
  • conflux是如何解决存储大这个矛盾的

  • conflux为什么创建块和确认块都快

Read more »

Conflux三大好处:共识协议改进,认证存储交易中继协议

相比UTXO,Conflux使用account model并支持smart contract.

1.MPT

merkle patricia tree

Conflux uses MPT作为合约的状态的认证存储的主结构。

Conflux中的智能合约:

  • 执行更高效

接入存储(访问状态)的同时更有效的利用内存(delta tree)

Read more »

走吧,走吧

天上的星星都亮啦

走吧,走吧

地上的路灯不说话

走吧,走吧

走吧,走吧

就当我是个幸福的哑巴

说唱:我们骑上车子 踏上步子 场子在哪 也没有路子

放下担子 拿起拍子 挥洒汗水你我都是汉子

走吧,走吧

走吧,走吧

那是不是一场梦啊

走吧,走吧

是时候要回家啦

走吧,走吧

听一听妈妈的话