区块链精通比特币学习笔记
Posted 宣之于口
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链精通比特币学习笔记相关的知识,希望对你有一定的参考价值。
精通比特币学习笔记
精通比特币:here
如果理解有错误,希望能够指出,谢谢!
一、基本概念
区块链: 不可破坏的分布式账本,采用levelDB数据库,通过共识算法来保证区块数据和交易数据
二、密钥和钱包
比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。
每笔比特币交易都需要一个有效的签名才会被存储在区块链。只有有效的数字密钥才能产生有效的数字签名,密钥是成对出现的,由一个私钥和一个公钥所组成。公钥就像银行的帐号,而私钥就像控制账户的PIN码或支票的签名。
1. 密钥
1. 私钥
随机数:1~ 2^256,256位的二进制数,通过伪随机数发生器生成
如果用十六进制表示:
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
2. 公钥
私钥经过椭圆曲线加密算法产生公钥,此过程不可逆
公钥K = 私钥k * 生成点G => 得到的公钥K为椭圆曲线上一个点(x,y)
由于根据以下公式,可以通过x计算出y,公钥分为两种:
- 压缩公钥:当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. 分层确定性钱包
从一个种子形成树结构密钥体系
流程:
- 种子: 首先根据伪随机数生成器得到一个种子
- 主密钥:种子通过HMAC-SHA512单向哈希函数生成512bits,左边256bits即主私钥,右边256bits即主链编码。然后我们可以根据主私钥得到主公钥。
- 子密钥:父公钥+父链编码+索引号(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一个块在份额链上采矿并获取份额
以上是关于区块链精通比特币学习笔记的主要内容,如果未能解决你的问题,请参考以下文章