Sia的共识规则(2) --- 区块
2016-12-08 16:09
232 查看
版权声明:本译文为博主原创翻译文章,未经博主允许不得转载。
如果区块的时间戳超过未来3小时,这个区块将被拒绝。但经过足够长的时间之后,可以被重新接受。
散列(父区块ID + 64位随机数+ 区块Merkle树根节点)
通过创建Merkle树来获得区块Merkle树的根节点,Merkle树的叶子结点是时间戳的散列值、矿工输出(miner output)的散列值(每个矿工输出对应一个叶子结点)和交易(transaction)的散列值(每个交易对应一个叶子结点)。
区块目标每隔500个区块被调整一次,通过查看前面1000个块的时间戳来进行调整。从最近的区块到之前第1000个区块之间所经过的预期时间间隔为10,000分钟。如果相比预期时间间隔已经过去了更多的时间,区块目标将被降低。如果比预期时间间隔少的话,则区块目标将被增加。每次调整可以将区块目标最大调整到2.5倍。
区块目标与时间差成比例地改变(如果时间是预期的一半,新区块目标是旧区块目标的1/2)(译者注:原文好像有误,意思好像是说反了)。区块目标的调节有上下限。在一个区块中,区块目标不能向上调整超过1001/1000,并且不能向下调整超过999/1000。
使用(以秒为单位的预期时间)/(以秒为单位实际时间)*(当前的区块目标)来计算新的区块目标。除法和乘法应使用无限精度,计算结果应被截断(truncated)。
如果不存在1000个区块,则使用初始时间戳(genesis timestamp)进行比较。
预计时间为(10分钟*区块高度)。
由矿工支出创建的输出(output)的ID,以区块ID拼接该输出所对应的矿工支出的索引值(index)来确定。
区块补贴生成的输出(output)不能在后续50个区块之内进行消费,并且在这50个区块已经产生之前,不被认为是共识集合(consensus set)的一部分。
这种限制是适当的,因为简单的区块链重组足以使输出无效,从而使得进行双重消费攻击(double spend attack)和虚假消费攻击(false spend attack)变得更加容易的。
(未完待续)
区块大小(Block Size)
最大的区块大小为2*10^6(2e6)字节。交易(transaction)大小没有限制,但它必须能够被容纳于区块内部。大多数矿工强制每个交易的大小限制为16,000字节。区块时间戳(Block Timestamps)
每个区块都有一个最小准许时间戳。它是通过取前面11个区块的中间时间戳来确定的。如果之前的区块不足11个,则需重复使用初始时间戳(genesis timestamp)。如果区块的时间戳超过未来3小时,这个区块将被拒绝。但经过足够长的时间之后,可以被重新接受。
区块ID(Block ID)
区块ID由以下规则生成:散列(父区块ID + 64位随机数+ 区块Merkle树根节点)
通过创建Merkle树来获得区块Merkle树的根节点,Merkle树的叶子结点是时间戳的散列值、矿工输出(miner output)的散列值(每个矿工输出对应一个叶子结点)和交易(transaction)的散列值(每个交易对应一个叶子结点)。
区块目标(Block Target)
对于有效的区块,该区块ID必须低于某个特定目标。区块目标每隔500个区块被调整一次,通过查看前面1000个块的时间戳来进行调整。从最近的区块到之前第1000个区块之间所经过的预期时间间隔为10,000分钟。如果相比预期时间间隔已经过去了更多的时间,区块目标将被降低。如果比预期时间间隔少的话,则区块目标将被增加。每次调整可以将区块目标最大调整到2.5倍。
区块目标与时间差成比例地改变(如果时间是预期的一半,新区块目标是旧区块目标的1/2)(译者注:原文好像有误,意思好像是说反了)。区块目标的调节有上下限。在一个区块中,区块目标不能向上调整超过1001/1000,并且不能向下调整超过999/1000。
使用(以秒为单位的预期时间)/(以秒为单位实际时间)*(当前的区块目标)来计算新的区块目标。除法和乘法应使用无限精度,计算结果应被截断(truncated)。
如果不存在1000个区块,则使用初始时间戳(genesis timestamp)进行比较。
预计时间为(10分钟*区块高度)。
区块补贴(Block Subsidy)
一个区块的币基数(coinbase)是(300,000 - 区块链高度)* 10 ^ 24,最小值为30,000 * 10 ^ 24。任何矿工酬劳(miner fee)都被添加到币基数中以创建区块补贴(block subsidy)。然后,区块补贴形成多个输出(output),称为矿工支出(miner payout)。矿工支出的总额必须等于区块补贴。由矿工支出创建的输出(output)的ID,以区块ID拼接该输出所对应的矿工支出的索引值(index)来确定。
区块补贴生成的输出(output)不能在后续50个区块之内进行消费,并且在这50个区块已经产生之前,不被认为是共识集合(consensus set)的一部分。
这种限制是适当的,因为简单的区块链重组足以使输出无效,从而使得进行双重消费攻击(double spend attack)和虚假消费攻击(false spend attack)变得更加容易的。
(未完待续)
相关文章推荐
- Sia的共识规则(1) --- 加密算法、货币与数据编码
- Sia的共识规则(3) --- 交易
- 《Nodejs开发加密货币》之十七:共识机制,可编程的利益转移规则
- 辩论的目的不是让自己的意见获胜, 而是让团队找到更好的规则, 达成共识。
- 区块打包共识
- 不规则数据的显示
- Swing画不规则窗口
- 职场“潜”规则:买火车票精神 与 主观能动性
- Spring Data Jpa 自定义属性查询规则
- Yii2 常用rulse验证规则
- 如何部署JBoss Drools的可视化规则设计工具包
- Nginx 关于 location 的匹配规则详解
- Learning Python -- Java 通过JyThon调用Python实现的规则
- jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
- Git忽略规则及.gitignore规则不生效的解决办法
- 新手入门:写Java程序的三十个基本规则
- struts2对action的搜索规则
- 开发规则汇总
- WordPress与Drupal的Nginx配置rewrite重写规则示例
- #8 bash的颜色显示规则