9.比特币网络
网络模型
两种网络架构
- C-S架构:由终端用户发起请求,服务端进行处理各个请求。(目前大多数产品的架构,如:微信)
- P2P架构:同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”
节点。(如:迅雷)
节点的功能
节点的功能:钱包,挖矿,保存完整区块链,路由。
全节点
Bitcoin Core 全节点
SPV(Simplified Payment Verification) 钱包节点
又叫做轻节点,没有完整的区块链信息,需要通过向全节点去请求必要的交易数据。
独立挖矿节点
主要是挖矿,收集交易,制作区块头,获得出块奖励和手续费
通信过程
节点加入
客户端会维持一个列表,列出长期稳定运行的节点,称为“种子节点”。
注意:不一定会直接连到种子节点,但是通过种子节点,能快速发现网络中的其他节点。
- 发现其中一个节点进行连接,TCP,8333
- 发送包含基本认证内容的version信息
- 返回verack,确认连接
- 回传version信息
- 地址广播
节点退出
在线节点必须定时进行两项工作!
➢ 新节点加入时“引荐”工作
➢ 定时发送信息,90分钟内无通信信息,认为已经断开连接。(心跳)
交换库存清单
SPV节点验证交易
SPV节点的逻辑
1、由于物理载体限制(存储空间等),只能保存区块头(仅有全节点
的1/1000)
2、同时SPV节点要维护该节点的钱包管理的地址(和余额)
3、所以需要委托对等节点将钱包相关地址的交易转发过来(并附带相应的merkle路径)
4、同时,SPV节点又不想暴露钱包管理的地址
布隆过滤器
利用了M个HASH函数和N位图法。
查询时,如果某个hash值的映射为0。则该地址不在为的集合内。
若全部为1,则大概率在集合内。概率和哈希函数的数量和位图的长度有关。
优势
对于SPV节点来说,保护了用户隐私(不需要存储元素本身)
可以承受一些误报时,布隆过滤器比其他表示集合的数据结构有更大的空间优势。
添加和查询的时间复杂度为O(M),与元素多少无关
10.区块和链
基本概念
区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。
Block = Block Header + Transactions
每个交易至少250字节,平均每个区块包含超过500个交易。
Size | Field | Description |
---|---|---|
4bytes | 区块大小 | |
80bytes | 区块头大小 | |
1-9bytes | 交易数量 | |
Variable | 交易集 | |
![]() |
区块高度不能唯一地标识某一区块,因为需要考虑"区块链分叉"情况。
概念解析(merkle树)
Merkle树树一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。
当仅有奇数个交易时,把最后的交易复制一份以构成偶数个叶子节点,这种偶数个叶子节点的树也被称为平衡树。
区块链如何验证交易K是否存在,请证明方提供各个相关联节点的hash,通过计算根hash是否一致来证明交易K是否存在。
一个SPV节点对它钱包中某个比特币地址即将收到的付款感兴趣时:
1、在节点间的通信链接上建立bloom过滤器,接收感兴趣的交易
2、对符合要求的交易,以merkleblock消息的形式发送该区块
3、SPV节点使用merkle路径找到该交易相关的区块,从而进行验证
4、SPV节点同时也使用区块头去关联区块和区块链中的其余区块(证明交易存
在于区块链)
总而言之,SPV节点会收到少于1KB的有关区块头和merkle路径的数据,其数据量约为一个完整区块的千分之一。