区块链之比特币-入门

350 阅读9分钟

BTC

  1. 比特币产生
  2. 挖矿产生的
  3. 挖矿
  4. 验证交易+解数学题
  5. btc的发行和结算(挖矿奖励-->发行btc 、验证交易-->结算)
  6. 比特币协议
  7. 难度动态调整,稳定在平均10min出一个块
  8. 总量固定2100万个btc
  9. 每四年减半(挖矿奖励btc数量减半)
  10. 比特币特征

image.png

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