Burst Coin挖矿蛮有意思,可以看看理解一下PoC的
网上有个很清楚的英文,详细描述了挖矿过程:
https://forums.getburst.net/t/technical-information-about-mining-and-block-forging/943
我把它翻译成了中文:)1)基本介绍
和其他加密货币一样,Burst需要挖矿。挖矿是区块链在区块网络中打包交易的过程。Burst利用预先计算好的,并存在硬盘上的Hash数值,生成区块。为了更好地理解这篇文章,可以阅读“Plot文件介绍”。这篇文章介绍整个Burst的挖矿原理。
2)算法和术语
Shabal / Sha256 / Curve25519
Shabal,Sha256和Curve25519都是Hash函数。Burstcoin主要采用的是Shabal算法Shabal算法相对SHA256或者其他hash算法,计算比较慢。也正是这样,这个算法比较适合做PoC共识。Burst采用的是256位的Shabal算法。Plot会把预先算好的Hash存在存储上,相对来说,验证过程比较快。
Hash / Digest
此介绍中提到的Hash都是Shabal256算法的Hash结果32Byte(256bit)。
Plot files
存储在硬盘上的预选计算好的Hash数据,称为Plot文件。
Nonce
Plot文件由一个个nonce组成。每个nonce的大小256K。每个nonce有个唯一的编号,从到18446744073709551615。因为每个nonce有唯一标识,一个Plot文件,可以很多nonce。
Scoop
每个nonce分成了4096段。每一段叫scoop。每个段是64个字节,包含2个Hash值。后面会提到,这个Hash值是两个其他Hash值XOR操作的结果。
账户ID
当生成一个Plot文件的时候,必须要提供一个Burst数字账户。因为每个数字账户都不一样,即使nonce的编号相同,所以每个矿工的Plot文件都不一样。
Deadline(截至时间)
挖矿的时候,一次计算的结果是一个Deadline。在上一个区块挖出后的Deadline的时间后,如果没有其他人再你之前挖出区块,你就能挖出该区块并获得奖励。
区块奖励
当你挖出区块时,会获得Burst币作为奖励(区块奖励)。每10800个区块,奖励下降5%。因为每4分钟出一个区块,所以大概是每30天,奖励下降5%。
Base target
从最近的24个区块计算Base target。Base target用来调整挖矿难度。Base target越低,挖矿越难。因为难度的调整,Burst网络能保证大概每4分钟生成一个区块。
网络难度
网络难度和Burst网络中总存储空间的大小有关。网络难度,在每个区块都会调整。所以,要看360个区块,才能比较准确的估算存储大小。
区块高度
每个区块有个编号。这个编号称为区块高度。这个编号会在前一个区块的编号基础上加1。
区块生成者
当一个账户发现合适的deadline,就生成了一个区块。这个生成区块的账户就是区块生成者。区块生成者获得区块奖励。
区块打包签名
区块打包需要用到前一个区块的打包签名以及区块生成者信息。有了打包的区块,矿工就可以挖矿。区块打包签名是32字节。
区块签名
每个区块由区块生成者签名。区块生成者用自己的私钥,结合区块内容,生成签名(Sha256以及Curve25519算法)。该签名是64字节。
奖励发放
加入挖矿池挖矿的话,涉及到奖励发放。设置奖励发放,其实是告诉Burst网络:1)你的所有收益分配给矿池。2)矿池能利用你的Plot文件发现的deadline,并且矿池能生成区块签名。
3)挖矿过程
该描述中说的钱包同样适合矿池。该描述中的矿工是Burstcoin的挖矿软件。
挖矿的第一件事情是,矿工向钱包询问挖矿信息:区块打包签名,base target,下一个区块高度。钱包负责区块打包签名和下一个区块高度,矿工利用这两个信息,经过Shabal256算法生成Generation Hash。
接着,通过模运算(4096),获得Scoop数值。
从Plot文件中,读取所有的编号为上述结果的Scoop。对每个scoop,合并上区块签名,再经过Shabal256运算,得到Target。Target再除以Base target,获得8字节的Deadline。
矿工检查得到的Deadline是否足够低。如果确定合适的Deadline,矿工提交信息给钱包:账户ID以及nonce数值。如果你是独立矿工,你还需要提供密钥。如果是矿池,使用矿池的密钥。
4)区块生成流程
Deadline处理
钱包接收到矿工提交的Deadline相关信息后,创建相应的nonce并验证deadline。验证成功,钱包查看是否时间满足deadline,如果没到,等待。如果等待过程,有其他钱包生成了区块,放弃该区块(因为该区块已经无效)。
如果有多个矿工提交Deadline, 钱包选择最低的Deadline。当Deadline的时间满足时,钱包开始生成区块。
生成区块
区块有两个限制:1)包含最大255个交易2)最大字节数为44880字节(43K)。钱包监听网络上的所有未确认的交易,打进一个区块,直至上述任一条件满足或者已经打包进了当前所有交易。对打包进区块的每一笔交易,钱包都需要检查,比如说,交易的签名是否正确,时间是否正确等等 。钱包会计算区块的所有金额以及费用。区块只记录的是交易的ID以及所有交易信息的Sha256信息。
区块内容
区块版本
区块内容的版本信息
交易ID列表
区块中包含的交易列表
Hash
区块数据的Sha256的Hash数值
时间戳
从Burst区块链创建开始计时的时间戳。Burst区块链的创建时间:2014/8/1102:00:00。
交易总额
区块中交易的总额
交易总费用
区块交易总费用
区块长度
区块中数据的字节长度
公钥
生成区块的账户的公钥
打包签名
生成区块时的打包签名
前一区块的Hash
前一区块的Sha256的Hash值
前一区块的编号
前一区块的Hash值的前8个字节
Base Target
生成区块时的Base Target
区块高度
区块高度编号
区块编号
区块Sha256的Hash值的前8个字节
Nonce
区块生成时使用的nonce值
AT
如果有AT功能,这个字段是AT的内容
区块签名
使用生成者的私钥,生成64字节的签名
完成这些后,钱包就把新的区块信息广播到网络中。其他钱包接收到新区块信息后,会验证区块信息。
领取专属 10元无门槛券
私享最新 技术干货