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

Posted 宣之于口

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链精通比特币学习笔记相关的知识,希望对你有一定的参考价值。

精通比特币学习笔记

精通比特币: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 2 m o d   P = ( x 3 + 7 ) m o d   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, +, /
Base58CheckBase58编码(版本 +数据 + 校验)

版本号:比特币地址为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一个块在份额链上采矿并获取份额

以上是关于区块链精通比特币学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

区块链比特币学习 - 7 - 区块

区块链比特币学习 - 2 - 密钥

区块链比特币学习 - 5 -创币交易

区块链比特币学习 - 3 - 钱包

区块链学习笔记5——BTC网络

区块链从入门到精通