您的位置:首页 > 其它

Sia的共识规则(2) --- 区块

2016-12-08 16:09 232 查看
版权声明:本译文为博主原创翻译文章,未经博主允许不得转载。

区块大小(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)变得更加容易的。

(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息