1. 抢夺区块打包权 2. 验证交易事务 3. 奖励发行新币 4. 广播新区块
你们约定一个规则,共同按照这个规则竞争,竞争成功谁就有数据打包权,打包完成后广播给别人,别人验证无问题就存入本身的数据文件中。算法
难度值: 一个门槛 规定一个256位的证书,做为难度为1的目标值: X00000000FFFFFFF....... 当时全网的算力,大约须要10分钟左右的运算能获得一个符合这个难度为1的值。 0号区块的难度信息 "nonce": 2083236893 "bits": "1d00ffff" "difficulty": 1 noce:一个随机数,挖矿计算获得 bits: 存储难度的十六进制目标值,存储在区块头部 源码中,用4字节,32位存储256位长度的难度目标值(压缩过) 压缩方法: 1. 4个字节的高位字节用来存储难度值得有效字节数 有效字节数: 从第一个不全为0的字节开始的部分。 约定:若是难度值有效位的最高位为1,则须要在前面补上0x00 举例:难度为1的目标值,X00000000FFFFFFF.......(十六进制计数,没一位两个字节,因此前8个0为4字节),有四个字节长度为0,减掉这些0的长度共计32bit,剩余256-32=224,也就是28个字节,由于F转换为2进制为1111,第一位为1,因此补上0x00,所以有效位总计29个字节,29的十六进制为1D 2. 另外3个字节中存储的是目标值有效位的最高3个字节,此时目标 值有效位前面已经加上2个0,所以最高3个字节为0x00FFFF,合起来压缩后的值就是0x1D00FFFF 此4个字节前2位一般为幂或指数,后6位为系数:目标值 = 系数*2^(8*(指数-3))次方 难度值:差很少两周调整一下新的难度值,算力在增长。为了维持差很少10分钟出一个区块,难度要跟随算力变化而调整。 难度值会愈来愈大,目标值会愈来愈小,目标值越小越难挖矿。 新的难度值 = 当前难度值*(最近的2016个区块的实际出块时间/2016分钟)
1.挖矿的计算公式: SHA256( SHA256(version + prev_hash + markle_root + ntime + nbits + nonce) ) < TARGET TARGET: 难度目标值,若是计算出来的值小于这个值,就算挖矿成功 各名词解释: version : 区块的版本号 prev_hash: 前一个区块的哈希值 merkle_root: 准备打包的交易事务哈希树,也就是梅克尔根 ntime: 区块时间戳 nbits: 当前难度 noce: 随机数 以上为去块头组成部分。
a.比特币的交易不是经过帐户的增减来实现的,而是一笔笔关联的输入/输出交易事务 b.花费"输入",产生"输出",这个输出就是"未花费过的交易输出",也就是UTXO.每一笔交易事务都由一个惟一的编号,称交易事务ID,经过哈希计算而来,引用"输出",主要提供交易事务id和所处"输出"猎豹中的序号就能够了。 c.因为没有帐户的概念,所以当"输入"部分的金额大于所需"输出",必须给本身找零,这个找零也是做为交易的一部分包含在"输出中"
证实哪一条UTXO是属于谁
1.输入脚本,2.输出脚本。也叫锁定脚本和解锁脚本。
1.用私钥签名解锁本身的某一条UTXO(也是以前的输出)
2.对方公钥锁定新的"输出",成功后,这笔新的"输出"就成了对方的UTXO经过输入,输出脚本实现转帐。ide