比特币的相关原理、密码学、交易验证

版权声明:凡原创系列文章,均笔者的辛勤于中,如转载,请文章顶部注明来源。谢谢配合 https://blog.csdn.net/smilejiasmile/article/details/86656447

常见区块链比特币相关算法

拜占庭将军问题 (byzantine Generals Problem)

  • 背景: 拜占庭帝国派出 10 支军队,去包围进攻敌人,至少有 6 支军队同时进攻才能胜利。其中,某些将军可能是叛徒(即所谓的恶意节点)
  • 目的: 找到一种共识,远程协商,获取胜利。
  • 方案:
    • 每个节点给除自己以外的所有节点发送消息。
    • 每个节点(或将军)根据收到的所有消息来决定最终的策略。
  • 缺点:每个节点都要向全网所有的节点发送大量的消息。容易造成网络的阻塞。
  • 该方案有解得前提条件是: 若叛徒数为 m, 当且仅当将军总数 n > = 3m +1 。

比特币的共识机制 ----- 工作量证明 (POW)

  • 证明自己(某个节点)是个好的节点
  • POW
    • 通过付出大量的工作代价(这里指算力消耗)来证明自己是非恶意节点
    • 通过消耗大量算力计算一个难题的随机数答案(nonce),并获取记账权,打包交易并通知其他节点,并且,可以获得比特币奖励。
    • 建模的条件是: 理性人都是逐利的,POW 抑制了节点的恶意动机。只在最长的区块链上面挖矿。

比特币的产生

  • 比特币由挖矿产生,通过计算一个随机数 nonce
  • 生成的 BTC 被记录在旷工的名下
  • BTC 通过矿工的公钥的哈希值锁定
  • 交易的输出被称为“未花费交易”UTXO
    Unspent Transaction Output

区块链 (分布式账本系统)

  • P2P 网络,每个全节点都存储了一个历史完整的“比特币银行账本”
  • 新区块包含前一个区块头部的哈希值(区块的唯一标识符),建立链接关系。
  • 验证,需要 6 个以上区块确认才是安全确认。

区块链 — 篡改历史交易

在这里插入图片描述

  • 比特币是强大的算力支持的,除非旷工联合起来,不打包区块,才能搞垮比特币。这也是 ICO 使用的区块链项目不敢用比特币的原因,因为有可能随便一个矿池就可能把它搞死。目前的 ICO 项目一般用 POS 或者 DPOS 的原因。

比特币挖矿的常见术语

  • 在全网中和其他节点竞争计算的过程
    • 是为了证明自己是非恶意节点
  • 获得的权利和义务
    • 记账权, 把交易计入区块里
    • 广播义务,把区块在全网广播
  • 获得的奖励
    • 挖矿的奖励 - 12.5 BTC (CoinBase)
    • 收取交易费用 (小费)
  • 比特币的浏览器网址,这里推荐 https://blockchain.info
  • 区块高度,用于描述如在第几个区块高度时候,进行硬分叉,区块深度,用于验证,最新的区块深度为 1,当区块深度为 6 时,就被确认了。
  • 比特币也可以做到每秒钟产生一个块,只要将 nonce 难度设置低,就可以了,目前是十分钟产一个块,已经有可能产生分叉了,故若是 1 秒钟,将会频繁分叉,故比特币也是想避免频繁分叉,才导致十分钟出一个块。比如 eos 的拜占庭 + dpos 就比较好的解决了这个问题。

比特币密码学相关知识

计量存储单位

在这里插入图片描述

加密方式

  • 对称加密
    • 使用相同的秘钥对原文进行加解密,秘钥唯一。
  • 非对称加密
    • 两把秘钥,公钥和私钥,公钥由私钥推导出来的。公钥用于加密(一般用别人的公钥加密,故只有别人私钥才能解密),私钥用于解密。也可以用私钥用来签名。只有公钥才能验证。
  • 哈希: 单项映射计算,不可逆,碰撞率小,使用场景,验证文件完整性,服务器中保存用户的密码,数字签名。

在这里插入图片描述

  • 数字签名 (如 PGP)
    在这里插入图片描述
  • 验证公钥的可靠性

在这里插入图片描述

比特币的交易

  • UTXO (Unspent TrannsXtion Output) 用比特币拥有者的公钥锁定(加密)的数字。即用别人的公钥的哈希值和这个 btc 的数字放在一起,生成一个 UTXO。==> 这些都是比特币钱包做的事情,这个也称锁定脚本。
  • UTXO == 比特币
  • 比特币系统里面没有比特币,只有 UTXO (数字 + 锁定的脚本(就是别人的公钥的哈希,唯一的变量)),比特币的地址是由公钥的哈希值做一些哈希操作,如sha256, CRC 等生成的。由比特币地址可以反推出公钥的哈希的。
  • 比特币系统是没有账户,只有 UTXO (公钥锁定)
  • 比特币系统里是没有账户余额,只有 UTXO (账号余额知识比特币钱包的概念)
  • UTXO 存在全节点的数据库里。
  • 转账将消耗掉属于你自己的 UTXO, 同时生成性的 UTXO, 并用接受者的公钥锁定。

交易的结构

  • ``https://blockchain.info/
  • 交易的输出 (UTXO)
    • 锁定的比特币数量
    • 锁定脚本 ( 用 接收者的公钥哈希)
  • 交易的输入 ( UTXO + 解锁脚本)
    • 解锁脚本 (签名,发送者的公钥)

在这里插入图片描述

在这里插入图片描述

交易验证

在这里插入图片描述

  • 逆波兰表达示法

在这里插入图片描述

  • 花费交易验证

在这里插入图片描述

扫描二维码关注公众号,回复: 5080422 查看本文章

猜你喜欢

转载自blog.csdn.net/smilejiasmile/article/details/86656447