BTC
- 比特币产生
- 挖矿产生的
- 挖矿
- 验证交易+解数学题
- btc的发行和结算(挖矿奖励-->发行btc 、验证交易-->结算)
- 比特币协议
- 难度动态调整,稳定在平均10min出一个块
- 总量固定2100万个btc
- 每四年减半(挖矿奖励btc数量减半)
- 比特币特征
- 比特币网络
- 目的:将交易区块传播给P2P网络中的各个节点
- 比特币客户端(钱包APP)
- 完整客户端(全节点 -- 所有比特币交易,用户钱包)
- 轻量客户端(依赖第三方进行交易验证等)
- 在线客户端(完全依赖第三方)
- 大多数钱包应用都只是轻量级的,只保存当前钱包中的utxo
- 钱包应用会接收到片p2p网络中传递的新的交易,也可以创建新的交易发送到p2p网络中,p2p网络的参与节点(客户端)都可以获取和传递
- 比特币钱包
- 必须由一个密码(私钥)来保护,只有用户自己知道
- 密码一定要复杂,若被盗,btc将很容易被转移为世界各地的货币
- 比特币客户端使用
- 客户端会自动为用户创建:钱包、比特币地址(可多个地址,任何人可以往该地址转比特币)
- 一个钱包可以对应多个地址(1:N,这些地址的交易都关联到同一个钱包)
- 刚创建的钱包是空的,没有比特币的
- 第一枚比特币的获取
- 线下--朋友间私下交易
- 线上--出售个人技能换取
- 在线--交易所购买
- 在线--通货市场开户购买
- 比特币交易
- 钱包 随机生成 --> 私钥+比特币地址
- 未交易的比特币地址只有自己知道,在比特币的账簿(链)上是查不到的,只有发生交易了才会“上链”,才可以查询余额,才会被全网的用户知道
- 私下交易:
- A提供自己的btc地址和100美金,B查询btc和美金的汇率,然后向Abtc地址转相应个数的btc
- B打开btc交易软件(网站),输入A的btc地址和相应的btc数量,发送即可
- 该笔交易是使用了B的私钥签名的,会立刻生成一笔交易,广播全网,A的btc地址首次被大众知道
- 交易完成后,还没有上链,只有等到“矿工”将该时间段内的所有交易都打包成区块“block”后,在上链,这个是后,btc才是被确认了,否则之前都是“未确认”的状态。确认后的交易才可以被视为“被信任的”。只有被确认的交易中的btc才可以被使用。
- 比特币余额查询
- 有utxo就有余额,没有utxo就没有余额
- 交易后会有输出,如果有未话费的输出,则钱包还有剩余btc可以继续使用,也就会输出utxo
- 因此,欲创建新的交易之前,必须先查询当前钱包的utxo是否满足条件(btc够不够),可以从本地钱包应用的utxo副本中查,也可以从区块链网络(比特币网络)中查
- 交易创建
- 比特币创建交易时不需要连接比特币网络,只有执行交易时才会连接比特币网络
- 创建交易输入:
- 会查询单笔utxo是否满足支付,不够的话会查询其他“零钱”utxo来一起支付
- 创建交易输出:
- 假如输入大于所需要支付的btc,该笔交易的输出会分为2部分
- 支付部分,输出一个脚本(只有接收方的秘钥才可以解禁改utxo,才可以被其支配)
- 剩余部分(转给自己的btc地址,也只有自己的秘钥才可解禁utxo)
- 有了交易费,矿工会优先打包,会比较有大概率的成功可能性
- 交易传播
- 挖矿
- 矿工是在比特币网络中的节点,也下载了挖矿的应用程序?
- 当矿工接收到距离上一个区块以来所有的交易时,会将这些交易放在节点本地临时的未经验证的“交易池”中,在构建新的区块时,再从交易池中将这些交易加到区块中。
- 将交易加到新的区块时,会安装交易费从高到低优先排序,交易被打包的成功率和交易费成正比
- 当矿工从比特币网络中收到一个新的区块时,就会意识到自己竞争失败,马上进入下一个区块的竞争中去,会将上一个新区块的指纹+自身节点接收到的交易作为下一个区块的输入来构建新的区块
- 矿工会在构建的区块中添加一笔特别的交易:将挖矿奖励25btc转给自己的比特币地址,有些会加入到一个挖矿联盟中,这个时候,这个地址就是整个联盟的btc地址(矿池地址)。当区块打包成功并加入了公链上时,就会获得这笔奖励,联盟中的成员按照各自的工作量来瓜分这笔收益。
- 当矿工挖到矿后,就会将新的区块发到比特币网络中去,通知大家,大家验证后(其他节点如何验证的),然后进行新的区块的竞争
- 如何理解越往后,可信度就越增加?新区块和上一个区块所付出的工作量有什么关系?
- 比特币数据结构
- 比特币所有权
- 必要因素:数字密钥、比特币地址、数字签名
- 数字密钥就是钱包,由用户生成,不存在网络中,存在文件或者小型数据库中的;密钥是只能是用户自己知道并保管好的,独立于比特币网络的,这样用户拥有密钥就拥有自己的比特币资产的所有权了。不像传统的银行卡密码,存在银行的数据库中,不仅仅是用户一个人知道。如果用户忘记了密钥就永远都无法找回了,自己所拥有的比特币就永远丢失了
- 每一笔btc交易都需要一个有效的数字签名才会被存储到区块链中
- 比特币地址是如何产生的?和公钥的关系是什么?
- 密钥
- 公钥加密、密钥对、公钥、私钥
- 私钥就是一个随机生成的256位二进制数字
- 密钥可以用来生成公钥
- 可以用来生成交易的数字签名
- 生成私钥
- page 46 bitcoinbook.info/wp-content/…
- 私钥生成公钥
- 有哪些私钥生成公钥的函数,可以直接调用进行编程的?
- 公钥生成比特币地址
- 输入是公钥,输出是btc地址,是以“1”开头的字符串
- 比特币钱包
- 钱包是私钥的容器
- seed?seed生成子私钥
- 钱包中有对个密钥对(私钥+公钥)
- 种子钱包??
- HD钱包(分层确定性钱包)
- HD 钱包的解释:www.5bite.com/post/799.ht…
- “分层确定性”这个词乍看起来很“高大上”,各类文档也把它描述的“云里雾里”的,其实原理本身很简单,两句话就能说清楚:
- 首先,要用一个随机数来生成主(根)私钥,这和任何一个比特币钱包生成任何一个私钥没任何区别;然后,再用一个确定的、不可逆的算法,基于主私钥生成任意数量的子私钥;
- 钱包的公钥和私钥的作用分别是什么?
- 最简单直白的理解,可以把“私钥”理解成密码,“公钥”理解成卡号,而“钱包”就是我们在区块链世界中的银行卡!
- 链接:[https://www.jianshu.com/p/7070b710015a](https://www.jianshu.com/p/7070b710015a)
- 私钥、公钥、钱包地址之间的关系
- www.jianshu.com/p/23e42860e…
- 交易时,包含的数据:接收方地址,转账数额,付款方签名,付款方公钥
- 付款方签名,付款方公钥的作用分别是什么?
- 公钥如何对签名进行验证的?
- 因为私钥能够生成公钥(两者一一对应),只要看到了公钥就知道他有对应的私钥,基于密码学这一步能够轻易被验证。但是私钥是看不到的,因为没有办法通过公钥来推导私钥。这样一来既能保证私钥的安全,又能证明我拥有私钥。
- 比特币交易
- 先是第一个接收到的节点验证交易吗?验证通过会返回交易成功的消息给用户,并广播到区块链网络中与其相互连接的其他节点进行验证;验证不通过则返回交易失败消息给用户,并拒绝该笔交易。
- p2p网络中,交易的传播
- 交易数据结构
- 比特币余额概念
- 交易都是从utxo中创建出来的
- 交易时,付款账户的btc地址是由付款账户的私钥计算出来的;所以交易签名时,需要用私钥进行验证,是再次用私钥进行生成btc地址一样的计算的结果来对比btc的地址??
- 交易输出结构
- 交易输入结构
- 交易费
- 交易的输入输出
- 每一笔交易都要花费至少一笔输入,产生至少一笔输出,每一次的交易输入都可以追溯到之前的UTXO,直至最初的挖矿所得。由挖矿所得创建的比特币交易,是每个区块中的首个交易,又称之为coinbase交易,它由矿工创建,没有上一笔交易输出。
- UTXO:
- 锁定脚本:OP_DUP OP_HASH160<pubKeyHash>OP_EQUALVERIFY OP_CHECKSIG
- pubKeyHash = ripemd160(sha256(pubKey))
- 解锁脚本可以验证UTXO是否属于你,解锁脚本包括你的数字签名和你的公钥。用私钥签名,公钥可以验证签名。
- 验证UTXO归属:
- OP_DUP OP_HASH160****OP_EQUALVERIFY OP_CHECKSIG
- 交易过程:
- P2P网络节点
- 每个比特币节点都是:路由、区块链数据库、挖矿、钱包服务的功能集合。
- 分类:
- 全节点:钱包+矿工+完整区块链+网络路由节点
- **