欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【区块链】精通比特币学习笔记

程序员文章站 2022-05-21 22:18:21
...

精通比特币学习笔记

精通比特币:here
如果理解有错误,希望能够指出,谢谢!

一、基本概念

区块链: 不可破坏的分布式账本,采用levelDB数据库,通过共识算法来保证区块数据和交易数据

【区块链】精通比特币学习笔记

二、**和钱包

比特币的所有权是通过数字**、比特币地址和数字签名来确立的。

每笔比特币交易都需要一个有效的签名才会被存储在区块链。只有有效的数字**才能产生有效的数字签名,**是成对出现的,由一个私钥和一个公钥所组成。公钥就像银行的帐号,而私钥就像控制账户的PIN码或支票的签名。

【区块链】精通比特币学习笔记

1. **

【区块链】精通比特币学习笔记

1. 私钥

随机数:1~ 2^256,256位的二进制数,通过伪随机数发生器生成

如果用十六进制表示:
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

2. 公钥

私钥经过椭圆曲线加密算法产生公钥,此过程不可逆

公钥K = 私钥k * 生成点G => 得到的公钥K为椭圆曲线上一个点(x,y)

由于根据以下公式,可以通过x计算出y,公钥分为两种:

y2mod P=(x3+7)mod p

  • 压缩公钥:当y是偶数时为 02 + x;当y是奇数时为 03 + x
  • 非压缩:04 + x + y

3. 公钥哈希

公钥通过双哈希SHA256 + RIPEMD160得到20字节的公钥哈希

4. 地址

公钥哈希通过Base58Check编码得到比特币地址

首先介绍一下几种编码:

编码名称 方式
Base64 使用26个小写字母,大写字母,10个数字,两个符号(+ /)
Base58 在Base64基础上删去了数字0,大写字母O,小写字母l,大写字母I, +, /
Base58Check Base58编码(版本 +数据 + 校验)

版本号:比特币地址为0x00

校验码:版本+数据进行哈希算法,公式为
checksum = SHA256(SHA256(prefix+data)),然后取前四个字节

2. 钱包

1. 非确定性钱包

一堆私钥,钱包只是随机生成的私钥集合

【区块链】精通比特币学习笔记

2. 确定性钱包

从公共的种子(密码学上安全的伪随机数发生器)生成**

【区块链】精通比特币学习笔记

3. 分层确定性钱包

从一个种子形成树结构**体系

【区块链】精通比特币学习笔记

流程:

  1. 种子: 首先根据伪随机数生成器得到一个种子
  2. 主**:种子通过HMAC-SHA512单向哈希函数生成512bits,左边256bits即主私钥,右边256bits即主链编码。然后我们可以根据主私钥得到主公钥。
  3. 子**:父公钥+父链编码+索引号(32bits,例如0)通过HMAC-SHA512单向哈希函数生成512bits,左边256bits即子私钥,右边256bits即子链编码。通过改变索引号生成不同子**。

三、交易

交易是被存储在块中的数据结构,通常与先前的交易联系在一起。

1. 交易结构

【区块链】精通比特币学习笔记

在比特币的世界里既没有账户,也没有余额,只有分散到区块链里的UTXO。

例如,你有20比特币的UTXO并且想支付1比特币,那么你的交易必须消耗掉整个20比特币的UTXO并且产生两个输出:一个是支付了1比特币给接收人,另一个是支付19比特币的找零到你的钱包。

2. 交易脚本语言

类forth脚本语言:OP_ADD

3. 交易流程

【区块链】精通比特币学习笔记

比特币交易会被一个或者多个签名加密,这些签名标志着对该交易指向的比特币资金的使用许可。接下来,比特币交易被广播到比特币网络中。在比特币网络中,每一个节点(比特币交易参与者)验证、并将交易在网络中进行广播,直到这笔交易被网络中大多数节点接收。最终,比特币交易被一个挖矿节点验证,并被添加到区块链上一个记录着许多比特币交易的区块中。一笔比特币交易一旦被记录到区块链上并被足够多的后续区块确认(一般6个确认),便成为比特币总账簿的一部分,并被所有比特币交易参与者认可为有效交易。

以下以A->C直接发生交易为例:

【区块链】精通比特币学习笔记

A对C进行转账操作时,先用A的私钥对交易脚本进行签名,然后将签名与A的公钥进行广播全网,关键点在于验证,根据脚本执行:

【区块链】精通比特币学习笔记

4. 标准交易

1. P2PKH

例如:A支付B 0.1BTC

锁定脚本:OP_DUP OP_HASH160 <B Public Key Hash> OP_EQUAL OP_CHECKSIG

解锁脚本:<B Signature> <B Public Key>

2. P2PK

例如:A支付B 0.1BTC

锁定脚本:<Public Key A> OP_CHECKSIG

解锁脚本:<Signature from Private Key A>

3. 多重签名

例如:M-N多重签名,M是使得多重签名生效的最少数目,如2-3:

锁定脚本:
2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

解锁脚本(3个存档公钥中的任意2个相一致的私钥签名组合予以解锁):
OP_0 <Signature B> <Signature C>

四、比特币网络

1. 节点

名称 应用
FULL NODE 钱包、矿工、完整区块链、网络路由节点
完整区块链节点 完整区块链、网络路由节点
独立矿工 矿工、完整区块链、网络路由节点
SPV NODE 钱包、网络路由节点
挖矿节点 矿工、POOL 服务器、Stratum 服务器

2. 网络发现

TCP协议、比特币使用8333端口,与已知对等节点建立连接,发生基本认证信息开始握手

PROTOCOL_VERSION: 比特币P2P协议版本
nLocalServices:该节点支持的本地服务列表
nTime:当前时间
addrYou:当前节点可见的远程节点IP
addrME:本地节点所发现的本机IP
subver:当前节点运行的软件类型
BaseHeight:当前节点区块链的区块高度

3. 同步区块

所有节点会定期发送信息以维持连接,90分钟无通信则认为是断开,网络将开始查找新的对等节点

1. 新节点

【区块链】精通比特币学习笔记

2. 全节点

【区块链】精通比特币学习笔记

3. SPV NODE

轻节点,只保存区块头,可接受交易

【区块链】精通比特币学习笔记

五、挖矿与共识

1. 共识

名称 特点 缺点 应用
PoW 穷举法拼算力 共识时间长、效率低 比特币、以太坊等绝大多数
PoS 提供保证金越多获得记账权概率越大 未来币、点点币
DPoS 前101名代表,按既定时间表轮流产生区块 BTS、EOS

2. 挖矿

挖矿: 比特币节点维护一个交易池,收集交易记录,收到X区块解之后,移除池中在X块中出现过的

3. 矿池

1. 托管矿池

矿池服务器聚集交易,将候选区块头发送给每个矿工

矿工在低于比特币网络难度下采矿,赚取份额(例如:比特币难度为8,矿池难度为4;找到4难度解赚取份额,找到8难度解则根据份额划分奖励)

2. P2P矿池

份额链,30s一个块在份额链上采矿并获取份额