一.比特币源码分析(干货不多)
一:总览
二:交易
三:交易脚本
四:签名验证
五:区块
六:网络
二.深入比特币原理(作者:Aaron)
1.深入比特币原理(一)——比特币白皮书总结与点评
2.深入比特币原理(二)——比特币密钥地址生成
3.深入比特币原理(三)——交易的输入(input)与输出(output)
每次发起一次交易,输入可以有多个,输出只有两个:一个用于支付,另一个用于找零
张三挖到12.5个币之后要转给李四2.5个,剩下的10个必须写清楚转给他自己(不写会作为交易费)
交易费 = SUM(所有输入) - SUM(所有输出)
(自己创建交易,注意交易的差值无论大小全部会被矿工获得)
目前交易均使用动态交易费,交易费的高低会影响交易被矿工处理(加入区块链)的优先级,交易费过低或为0的交易极少会被处理,甚至不会在网络上广播
4.深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)
比特币最基本的交易类型为P2PKH,顾名思义交易付款的对象是公钥哈希
5.深入比特币原理(五)——高级交易与脚本
6.深入比特币原理(六)——比特币网络节点
基础的比特币节点包含四种功能:1.钱包(Wallet),比特币交易,查询;2.矿工(Miner) 3.完整区块(Full Blockchain),可以独立验证所有交易而不需要外部参照 4.路由网络(Network),转发交易和区块数据,发现和维护节点间的连接
目前主流的有如下四种比特币节点:
- 比特币核心客户端(Refernce Clent(Bitcoin Core)),包含钱包、矿工、完整区块、路由网络全部四种功能的节点(WMBN)
- 全节点(Full Block Chain Node),全节点包含完整区块链数据,并具有路由网络功能(BN)
- 独立矿工(Solo Miner),包含全部区块链数据,并具有挖矿能力的节点(BMN)
- 轻(SPV)钱包(Lightweight wallet),包含钱包与路由转发功能的节点,对于资源有限的终端,如手机,平板等格外有用。(WN)
7.深入比特币原理(七)——比特币节点通信
SPV的通信会产生一个隐私风险,由于SPV节点总是通过广播选择性的验证交易,用户的比特币地址与钱包很容易能被关联起来,所以在使用SPV节点需要使用Bloom过滤器。Bloom过滤器作用就是每次要求发送验证信息的节点发送一批交易的信息,而不是某一个交易,再由SPV节点自己来筛选需要的信息,这样就保证了验证的具体交易无法被追踪
比特币节点通常采用TCP协议、使用8333端口与相邻节点建立连接, 建立连接时也会有认证“握手”的通信过程,用来确定协议版本,软件版本,节点IP,区块高度等
7.1 寻找比特币网络中的有效节点,通常有两种方法:
(1)使用“DNS种子”(DNS seeds),DNS种子提供比特币节点的IP地址列表,Bitcoin Core客户端提供五种不同的DNS种子,通常默认使用即可
bitcoinj提供DNS seeds,Http seeds和 Address seeds三种方法寻找有效节点.
(2)手动通过-seednode命令指定一个比特币节点的IP地址作为比特币种子节点。
7.2、交易池(Transaction Pools)
交易池(transcation pool):比特币网络节点用于存放已被网络知道,但还未记入区块链的交易,存储在本地内存中。
孤立交易池(orphan pool):如果一个交易的输入与当前节点未知的交易关联(就是没有发现父交易)会被暂时存入孤立交易池。当节点收到该交易的关联交易(父交易),该交易会被移入交易池中。孤立交易池存储在本地内存中。
UXTO池(UTXO pool):存放区块链中所有未支付交易输出的集合,可能存储在本地内存,也可能作为数据库表存储在存储设备中
交易池与孤立交易池包含的是未确认的交易,而UTXO池包含的是已确认的交易
8.深入比特币原理(八)——比特币区块链
9.深入比特币原理(九)——Merkle树
10.深入比特币原理(十)——比特币挖矿节点
11.深入比特币原理(十一)——工作量证明(Proof of Work)
12.深入比特币原理(十二)——区块链分叉
原先持有比特币的人在硬分叉后将自动且免费拥有分叉后产生的每种分叉币。因为分叉币都是免费获得的,所以又被称为糖果
如果比特币真的发生分叉那么作为普通用户最大的风险就是重放攻击。
重放攻击是什么呢?如果比特币分裂成一种或多种比特币,如BTC1/BTC2/BTC3等,每个比特币账户内将根据他的比特币余额同时存在对应数量的所有分叉币,由于每条链上的地址和私钥、算法等都相同,交易格式也完全相同,导致在其中一条区块链上发起的交易完全可以放到另外一条区块链上重新广播,而且可能也会被确认,这就是重放攻击。
简单来说在你转账BTC1的时候,你的BTC2/BTC3也有可能同时被转走,但是目前很多分叉币做了双向防重放攻击处理,避免分叉后被重放攻击的风险
13.深入比特币原理(十三)——硬分叉与软分叉
14.深入比特币原理(十四)——矿池
15.深入比特币原理(十五)——隔离见证(Segregated Witness)
在比特币中,见证(witness)通常指的是锁定脚本(unlocking script)和解锁脚本(scriptSig),
目前Segwit支持P2PKH与P2SH支付,加入隔离见证的交易取名为P2WPKH与P2WSH
P2WSH锁定脚本中的Hash值是256位(32字节)的,是使用SHA256(pubkey)计算得到;而P2WPKH中的Hash值是160位(20字节)的,是使用RIPEMD160(SHA256(pubkey))计算得到的
比特币网络中,交易和区块信息的传播是通过洪水算法(Flooding Algorithm)进行的.
新难度值=旧难度值*(过去2016个区块花费时长/20160分钟)
比特币工作量证明的目标值(target)的计算公式如下:
目标值=最大目标值/难度值
其中,最大目标值为一个恒定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。
打包区块获得的奖励在该区块增加99个新区块(100个确认)之后才能使用