- 底层机制
- 去中心化,P2P 分布式数字货币系统
- 共识机制,POW 工作量证明
- 非对称加密算法,数字签名
- 区块链账本技术
- 钱包分类
- 轻钱包,只存储维护跟你自己交易相关的数据
- 中心化钱包,数字货币交易所
- 区块链节点
- 矿工-运行于强大或专用的硬件
- 全节点-这些节点验证矿工挖出来的块的有效性,并对交易进行确认
- SPV节点-简单支付验证,如钱包节点
- 区块链分类
- 公有链:任何人都可以参与使用和维护,信息公开,如比特币,以太坊等
- 联盟链:若干组织共同维护,使用有权限限制,信息受保护,如银联组织
- 私有链:集中管理者进行限制,内部少数人可以使用,信息不公开
分布式账本系统
- 共识机制,POW 工作量证明
- 付出大量工作代价证明自己是非恶意节点
- 计算一个随机数(nonce),算出的正确随机数即POW
- 获取记账权利
- 打包交易并通知其它节点
- 冲突的区块选最长的链(可以设置6个区块之后再确认交易)
- 交易确认
- 一项交易被链上的区块收录后,就是交易确认
- 在此区块之后每产生一个区块,此项交易的确认数相应加1
- 经过6个以上区块确认的交易才是安全确认的,因为篡改成本巨大
- 比特币钱包可以设置交易确认数
- 基于P2P网络,每个全节点都存储着最全的比特币交易记录
- 使用 DNS seeds 寻找周围的节点
- 交易广播,区块广播,钱包公钥的广播
- 新区块通过包含前一个区块头部的哈希值(区块的唯一标识)建立链接关系
- 区块里装的就是所有的比特币交易记录
交易:UTXO (unspent transaction output) 未花费交易输出
- 余额实际上并不直接存在,而是通过计算得来
- 签名,对发送者和接收者的公钥哈希以及整个交易签名(私钥,确保不可篡改)
- 找零,Output 给自己
挖矿
- 和其他节点竞争计算
- 挖矿奖励-12.5BTC
- 记账权-把交易写入区块里
- 收取交易手续费
- 广播义务-把区块在全网广播
- 在挖矿前要组建区块
- 将coinbase交易打包进区块
- 将交易池中高优先级的交易打包进区块
- 创建区块头部
- 挖矿成功后,将计算出来的随机数nonce(POW)填入区块头部,并向临近节点传播
区块验证:相邻节点收到新区块后,立即做以下验证
- 验证POW的nonce值是否符合难度值
- 检查时间戳是否小于当前时间两小时
- 检查merkle树根是否正确
- 检查区块size要小于区块size的上限
- 第一笔交易必须是coinbase交易
- 验证每个交易(使用对应的钱包公钥进行验证):验证链
- 私钥加密的交易可以使用公钥进行验证
区块链-篡改账本(需要掌握半数以上的机器)
- 双花问题:同一笔比特币被支付多次
- 比特币的合法交易进行完毕之后,攻击者利用共识机制取消了之前的付款
- 操控半数以上的机器在区块上一个链上建立新的分支
- 冲突的区块选最长的链,当攻击者操控的分支变为最长的链时,原来的链就被取消了,链上的比特币交易也自动作废