比特币基础知识

基础

比特币特性

硬通货

跨境交易

易携带

只需一个私钥

私密性
  1. 只暴露钱包地址
  2. 非法应用
无货币超发

通货紧缩

  1. 去中心化,P2P分布式的数字货币系统
  2. 共识机制 - POW工作量证明
  3. 非对称密码学,公钥私钥
  4. 区块链作为账本

简单理解

比特币就是UTXO,
交易UTXO + 区块链 = 比特币系统

POW共识机制

proof of work
通过挖矿保证我是个善意的节点,并获得生成区块,和在这个区块里记账的权利

区块的生成和连接

  1. 比特币由挖矿而产生,通过计算出一个算计数字nonce
  2. 生成的BTC被记录在矿工名下,通过矿工的公钥的哈希值锁定
  3. 交易的输出被称为UTXO,unspent transaction output,未花费交易
  4. 比特币钱包余额就是根据众多UTXO计算出来的
  5. 新区块通过包含前一个区块头部的哈希值建立链接关系。
  6. 区块链有时会产生临时的分叉而生成两条链,最终较短的链将被舍弃

UTXO的生成和销毁

交易包含三项,

  1. 交易的输入,UTXO指针
  2. 交易的输出,UTXO
  3. 解锁脚本,私钥签名,公钥

比特币架构

比特币前端

钱包

保存用户的私钥数据库,管理用户余额,提供比特币交易(支付、转账)。

签名、钱包加密、备份、密钥导入、导出。

钱包分为两种,非决定性和决定性的。决定性(deterministic)指的是私钥是否有种子生成。

非决定性钱包: 直接保存私钥,私钥数据保存在Berkeley DB上。安全性不高。比特币核心带有一个非决定性钱包,不推荐使用。

决定性钱包: 所有私钥都由一个私钥种子(Seed)通过单向哈希算法生成。通过种子生成私钥,因此备份容易。又分为普通决定性钱包和层级决定性钱包。

根据部署场景分为,移动钱包,桌面钱包,互联网钱包以及纸钱包。

  1. 移动钱包就是移动端的钱包,因为资源有限,多数采用SPV来验证交易。
  2. 桌面钱包分厚钱包Thick Wallet和薄钱包Thin Wallet。厚钱包下载整条区块链,进行完整的交易校验。比特币核心Bitcoin Core就是厚钱包。提供完整的钱包功能。厚钱包安全性高,交易开销大,适合大额交易。薄钱包灵活性高,安全性不高,适合小额交易
  3. 互联网钱包。依托第三方平台提供对用户隐私的保护,使用灵活,安全性不高。
  4. 纸钱包,字面意思
HTTP/JSON RPC API

API,给外部提供查询余额,支付和转账的接口

命令行工具bitcoin-cli

基于API开发的命令行工具

比特币浏览器bx

比命令行工具更强大的工具

图形开发工具Qt

比特币核心是Qt开发的,是比特币使用最广的客户端

比特币节点后端

比特币节点后台负责参与比特币网络的通信互联,维护区块链,验证区块、交易,广播、转播传递区块交易信息。比特币后台主要是bitcoind,以及挖矿节点程序。比特币核心bitcoin-qt实际上是包含前后端的一体化节点(挖矿功能除外)。

区块链管理

区块链管理涉及初始区块链下载、连接区块、断开区块、校验区块和保存区块,以及发现最长链条的顶区块。

  1. 下载区块链,先下区块头,再并发下载区块体
  2. 接收区块链,节点在开始时将整个区块链的索引从LevelDB调进内存。索引不是单跳的链,在末端可能会形成树,因为会分叉。这一步将新的加点加入树的末梢。
  3. 区块链验证,这一步比较复杂,验证完之后,新的区块就被加入到这个节点的链中了
  4. 重组区块链,节点发现一条更长的链会断开重组。会更改UTXO,被断开的区块中交易会会退到交易内存池(mempool),用回滚记录来断开区块中的交易
    区块验证
    比特币的一个很大的创新是依靠脚本来验证交易的合法性,即每一个将要花掉的比特币必须有相应的来源。

脚本是基于堆栈的一些命令。

内存池管理

mempool也就是交易池管理。节点将通过验证的交易放在一个交易池中,准备放在一个挖到的区块中。当矿工挖到一个合格的区块后,他将按一定的优先级从交易池中选出交易放到区块中。优先级按UTXO的链龄和交易额的大小来划分。当区块填满后,剩下的交易会留在内存池。

内存池的交易不保存在硬盘上,当挖矿节点重启时,内存池的交易会被清空。如果在一定时间内一个交易一直不能被矿工包括在区块链上,钱包软件需要重新发送该交易,并附上较高的交易费。

邻节点管理

当一个新节点做初始启动(bootstrap)的时候,它需要发现网络中的其他节点,并与至少一个节点连接。一般是与一个已知的节点在8333端口建立TCP连接。连接的握手流程发送一个版本信息。对方回复确认消息。

发现邻节点的方法。

  1. 用DNS种子查询DNS。比特币核心带有5个DNS种子
  2. 把一个已知的邻节点作为种子节点。
    共识管理
    比特币的关键是在陌生P2P环境监理共识机制。

比特币中广义的共识管理(consensus)包括挖矿、区块验证和交易验证规则。但这些功能实现分散在不同的程序中。社区在尝试将其独立。

比特币的共识管理必须向前兼容,即使过去有bug也要保持,否则比特币网络会出现分叉。

规则管理

比特币的共识规则是所有节点都必须遵守的规则。而每个节点可以采用一些共识规则以外的个性化规则。这部分的规则有规则管理模块实现。比如一个节点可以拒绝保存、中转大于200KB的交易。另外像对交易费用的一些规则。也可以通过规则模块来管理

密码模块

crypto模块主要是处理比特币地址。

私钥产生公钥。公钥经过几步产生地址

  1. SHA256哈希处理
  2. RIPEMD160哈希处理得到一个160位的结果
  3. Base58Check编码

Base58Check的校验码对地址信息进行双重SHA256哈希处理,并取前4位做校验码,加载比特币地址的后面,因此比特币地址带有校验信息,可以防止人为错误

签名模块

比特币采用椭圆曲线数字签名算法(ECDSA)来实现数字签名及生成公钥。这是一种非对称加密算法,是基于椭圆曲线离散对数问题的计算困难性的一种公钥密码的方法。

secp256k1曲线比其他曲线具有更高的性能。

脚本引擎

基于堆栈的运算平台,非图灵完备。不能跳转,只能执行一次。
这样设计是不希望矿工有能力提交一个可能有死循环的脚本。

比特币作为一个虚拟货币系统,这样的设计已经足够。

挖矿

中本聪当初设计比特币的目标是建立一个完全去中心化的虚拟货币,采用一个CPU一票的理念。后面的矿池是他没有预料到的。

CPU>GPU>FPCA>ASIC

HTTP/JSON RPC 服务端

提供接口来控制比特币节点

Berkeley DB和LevelDB数据库

Berkeley DB做钱包数据库,这是一个开源的文件数据库。介于关系数据库和内存数据库之间。比特币的数据作为文件类型放在硬盘上。

LevelDB用来存储区块的索引和UTXO记录。它是KV数据库。它的数据是冗余数据,可以用原始区块链数据来重建,但是非常慢。

P2P网络管理

在P2P网络上实现和其他邻接点的通信功能

ZMQ队列管理

采用Zero MQ作为消息队列管理和消息分发工具。这是一个简单好用的传输层,提供像框架一样的一个socket library,是个socket编程更加简单。

文章标题:比特币基础知识

本文作者:Benny

发布时间:2020-06-08, 19:49:33

最后更新:2018-06-29, 18:34:40

原始链接:https://benny233.github.io/2020/06/08/比特币/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录