BTC-共识协议

数字货币存在的问题

数字货币本身为带有签名的数据文件,可以进行复制。即:对用户来说,可以将同一货币花费两次。这就是“双花攻击”。
如何解决:对货币添加唯一编号(不可篡改),每次支付向货币发行单位查询真伪。该方法每次交易都依赖于第三方机构来判断货币真伪且防止双花攻击。这是一个典型的第三方中心化方案。
现实中,我们的交易往往依赖于一个可信的第三方机构(支付宝、微信),这个机构具有较高的可信度,有政府背书,所以可以采用这种方案。
但是,很多场景下,并不存在这样一个可信赖的第三方机构。基于这个背景,以去中心化思想为核心的比特币系统便吸引了人们的注意力。

去中心化需要解决的问题

  • 货币由谁发行,如何发行,什么时候发行?

在比特币系统中由挖矿来决定货币发行权的发行量

  • 如何验证交易是否有效?如何防止双花攻击?

该问题的解决,依赖于系统中维护的一个数据结构,记录货币的使用情况(是否被花过,被谁花过?)。该数据结构由系统中全体用户共同维护,保证了交易的有效性。该数据结构,便是区块链。
该数据结构中,有两种哈希指针,一种指向前面的区块,使得形成区块链,第二种(红色部分)则是为了说明比特币的来源。说明比特币的来源非凭空捏造,可以防止双花攻击。

如下,假如 A 获得铸币权,并发布了 10 个比特币(该交易称为铸币交易)。
pic.1708405674927

在进行交易时,A 给 B 转账,需要付款人的签名和收款人的地址(公钥的哈希)。收款方需要知道付款方的公钥(为了验证签名是否有效。实际上其他节点都需要知道付款方的公钥,验证交易合法性)。

这里存在一个问题:
:::info
假设 B 的同伙 B’,B’ 伪造一笔 A 到 B 的转账交易,用自己的公钥说是 A 的公钥,然后用假造的私钥签个名,别的节点收到这笔交易后,要假造的公钥去验证这个签名。验证结果肯定是对的,这让别的节点以为这个交易是合法的,这就出问题了。相当于把 A 账上的钱偷走了。
:::

解决这个问题的关键,就是第二种哈希指针。虽然 B’伪造了 A 到 B 的交易,但是实际中 A 转账的时候提供的公钥需要和铸币交易中的公钥对的上,如果对不上,说明该交易不合法。

比特币区块信息

区块信息可以分为两部分:block header 和 block body
block header 由以下信息:

  • version(版本协议)
  • hash of previous block header(指向前一个区块指针)
  • merkle root hash(默克尔树根哈希值)
  • target(挖矿难度目标阈值)
  • nonce(随机数)

hash of previous block header 只计算区块头部部分的哈希(merkle root hash 保证了 block body 内容不被篡改,所以只需要计算 block header 即可保证整个区块内容不会被篡改)。
区块链中,轻节点(只存储区块 block header 信息)只利用区块链,并不参与区块链系统的维护和构造。

比特币共识协议

投票方案:可行的投票方案前提是系统中的大多数节点时“好”的节点,在这种情况下进行共识协议设置。
比特币系统中,若直接投票,将某节点打包交易到区块,将其发给其他节点,其他节点检查该候选区块,检查若正确投赞成票,若票数过半,则加入区块链。存在以下问题:

  1. 恶意节点不断打包不合法区块,导致一直无法达成共识
  2. 无强迫投票收到,某些节点可以不投票(行政不作为)
  3. 网络延迟未知,投票需要等待多久?
  4. 最重要的问题,比特币系统中任何人都可以创建账户,且建账户及其简单,若黑客使用计算机专门生成大量公私钥对,当其产生超过系统中一半数目,就可以获得支配地位(女巫攻击)

所以比特币系统并没采用这种简单的账户数目方案,而是依据算力进行投票。每个节点都可以自行组装一个候选区块,然后尝试各种 nonce 值,这就是挖矿。当某个节点找到符合要求的 nonceh(block header)<=target,便获得了记账权,从而可以将区块发布到系统中。其他节点收到区块后,验证区块合法性,如果绝大多数节点验证通过,则接口该区块为最新区块并加入到区块链。

比特币激励机制

节点为什么要提供算力和电力成本去竞争记账权?
比特币引入奖励机制,通过设置出块奖励来解决该问题。
一个获得合法区块的节点,可以在去区块中加入一个特殊交易(铸币交易)。这也是唯一一种产生新比特币的途经。

比特币系统规定,起初每个区块可以获得 50 个比特币,但之后每隔 21 万个区块,奖励减半

区块中保存交易记录,如果仅仅设置出块奖励,那么,会不会存在节点只想发布区块获得出块奖励而不想打包交易?
比特币系统设计了 Tranction fee(交易费),对于获得记账权节点来说,除了出块奖励之外,还可以得到打包交易的交易费。但目前来说,交易费远远小于出块奖励。等到未来出块奖励变少,可能区块链的维护便主要依赖于交易费了。

BTC密码学原理

比特币(bitcion):基于去中心化,以区块链作为底层技术的加密货币。

hash(哈希)

hash,可以简单理解为对某一事物的投影操作,即A-->Hash(A)
哈希函数(cryptographic hash function)主要有三个特性:

  • collision resistance(碰撞反抗)
  • hiding(隐秘性)
  • puzzle friendly(谜题友好)

哈希碰撞:
给定一个哈希函数,不同的输入,得到相同的输出,则称为 hash 碰撞。
如:给定 x 和 y,且 x!=y,可以得到 Hash(x)=Hash(y)。

collision resistance

collision resistance(碰撞反抗):表示对哈希碰撞具有抗碰撞性
在实际应用中,哈希碰撞基本上难以避免,我们只要保证给定 x,很难找到一个 y,能够在 x!=y 的前提下,使得 Hash(x)=Hash(y),就认为其是 collision resistance 的。

用处:如果我们自己有一条信息 x,我们希望别人知道我有 x 但不想让别人知道 x 具体是什么,就可以通过告诉其 Hash(x),由于该性质,保证了 x!=y 时,Hash(x)和 Hash(y)是不相等的。我们只需要告诉别人 Hash(x)即可,对方可以通过 Hash(x)知道你确实知道 x 这个信息,但他无法(很难)通过 Hash(x)反推出 x。

hiding

我们认为,给定 x 和 Hash(),可以很容易得到 Hash(x),但没有办法在已知 Hash(x)和 Hash()的情况下,反推出 x 的具体取值,当然这也是一个理想的情况。

digital commitment(数据保证):collision resistance + hiding
在视频中,肖老师提到关于股市预 测的案例,某个人对某个股票进行涨停预测,我们如何保证能够知晓其预测是否准确?最简单的是提前公布, 等待实际结果出现后验证。但实际中,当提前发布预测后,可能会由于预测者本身对股市实际结果造成影响。 所以,应该将提前将其写于纸上并密封,交给第三方机构保管,等到实际结果出现后开启密封与实际对比,这 就是 digital commitment。而第三方机构需要能够使人信服,在实际生活中,有很多场景并不存在一个这样的 第三方机构,而区块链技术正为此提供了一个很好的解决方法。 我们把预测结果看作 x,提前公布 Hash(x),等 到预测结果发生时间来临后,公布 x,如果根据 x 可以得到公布的 Hash(x),则说明公布的 x 确实为所预先预测的 内容。从而,我们可以实际进行判断预测是否准确。实际使用中,为了 x 足够大,会对 x 进行“加盐”,对 x 拼接一 个 nonce,对其整体取 Hash## puzzle friendly
在比特币系统中,还需要第三个性质 Puzzle friendly。该性质要求哈希值计算事先不可预测, 仅仅根据输入很难预测出输出。例如:我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出来。
该性质保证了比特币系统中,只能通过“挖矿”获得比特币。
:::info
挖矿:试图通过暴力手段不断尝试,直到得到一个符合约定规则的 hash 值。这也是为什么挖矿是一个非常消耗算力的过程。
:::
也就是说,该性质保证了工作量证明(POW)机制 可以运行下去【“挖矿难,但验证易”】。

SHA-256:
在比特币系统中采用 SHA-256 哈希函数。该函数具备以上三个特性。
sha256 具有极强的抗碰撞性。目前为止,世界上最强的超级计算机也不具备人为制作碰撞的能力。

签名

比特币中账户管理 在第三方中心化系统中,账户开通依赖于第三方。但去中心化的比特币系统中,很明显不能 进行“申请账户”。
在比特币系统中,申请账户是用户自己来处理的,即自己创建一个公钥-私钥对(来自于非对称加密体系 asymmetric encryption algorithm)。公钥和私钥的应用保证了“签名”的应用。

1
2
对称加密体系:提前商量好一个秘钥,加密和解密采用同一个秘钥。
存在问题:秘钥显然不能以明文的方式在网络上传输,容易被盗取。

非对称加密体系:
用接收方的公钥加密,接收方的私钥解密。这就解决了对称加密体系中秘钥分发的问题
pic.1708405707415

当在比特币网络中进行转账时,通过 “签名”可以明确是由哪个账户转出的,从而防止不良分子对其他账户比特币的盗取

1
加密,解决的是秘钥分发的问题;签名,解决的是明确由哪个账户转出的问题

在发布交易时,通过发起方私钥签名,其他人可以根据发起方公钥进行验证,从而保证该交易由发起方发起

也就是说,只有拥有私钥,才能将该账户中的比特币转走。 【注意:比特币系统中,很难通过生成大量公私钥对来获取他人私钥】

BTC数据结构

hash pointer(哈希指针)

在传统链表里,通过指针将各个节点串联起来。
指针指的是一个节点对象在内存中的首地址。

pic.1708405846740

顾名思义,区块链也是一种链表结构,节点为区块。不过区块链并未采用指针,而是使用了哈希指针。
如下图所示,该节点有两个指针指向这个节点(实际上为一个),其中 p 为该节点的地址,H()为该节点的哈希值,该值与节点中内容有关。当节点(区块)中内容发生变化,该哈希值也会发生改变,从而保证了区块内容不能被篡改。

pic.1708405882862

在比特币系统中,其最基本的数据结构便是一个个区块形成的区块链

如图所示,每个区块根据自己的内容生成自己的哈希值,此外,每个区块(除创世纪块)都保存有前一个区块的哈希值。这保证了区块内容不被篡改。

pic.1708405909365

如果我们篡改 A 的值,而 B 中保存有 A 的哈希值,所以 B 也得进行修改,同样 B 后的区块也得修改。
这就是区块链区别与普通链表的区别:普通链接修改节点不会影响其他节点,而区块链牵一发而动全身,后面的节点都得跟着改。

所以用户只需要保存最后一个区块的哈希值,就可以检测出区块链上内容是否被篡改过。

由于这个特性,那么对于个人节点而言,就不需要完整的保存链上的所有的节点内容,只需要保存常用的父级几千个节点即可。

merkle tree(默克尔树)

merkle tree 是比特币系统中一个重要的数据结构。区别于 binary tree,merkle tree 用哈希指针代替了普通指针。
一个简单的 merkle tree:

pic.1708405931818

tree 中,A B C D 表是一个个交易(tx),A 和 B 各有一个哈希值 H(1)和 H(2),将其合并放在一个节点中,C 和 D 同理,然后针对得到的两个节点又可以得到新的哈希值,即为图中根节点。实际中,会对图中的根节点再取一次哈希,也就是 root hash。
该数据机构的优点在于:只需要记住 root hash,便可以检测出对树中任何部位的修改。

区块:
每个区块分为两部分,包括块头(block header)和块身(block body)。
block header 中存储的是 root hash,但是 block header 没有交易的具体内容,block body 里存储的是交易列表。

merkle tree 的实际用途:可以用于提供 merkle proof。

区块链中的节点分为轻节点全节点。全节点保存整个区块的内容(block header 和 block body),而轻节点仅保存区块的块头信息(block header)。
那么就存在一个问题,轻节点想知道某个交易是否被写入到区块链上,该怎么办?打个比方,你向我转钱,我是个轻节点,我怎么知道这个交易已经被写到区块链里呢?

轻节点没有 block body,只有 root hash,那怎么证明某笔交易包含在这个 merkle tree 里呢?这就用到了 merkle proof。

merkle proof

从交易一直到根节点的路径,就属于 merkle proof。

有了 merkle proof,轻节点就可以算出 merkle tree 里是否包含某笔交易。

1
通过 merkle proof,可以验证计算得到的 root hash 是否与轻节点 block hader 里的 root hash 是否一致,如果一致说明该交易包含在 merkle tree 上。

ETH-以太坊概述

BTC 和 ETH 是最主要的两种加密货币,BTC 称为区块链 1.0,以太坊称为区块链 2.0。
以太坊对比特币设计中的某些不足进行了改进,比例:出块时间、共识协议、mining puzzle(对内存要求高,反 ASIC 芯片使用) ,并且用权益证明(POS)替代工作量证明(POW)。除此之外,以太坊还增加了对智能合约(smart contract)的支持。

为什么要开发智能合约

BTC 是一种去中心化的货币,在比特币取得成功之后,很多人开始思考:如果货币可以去中心化,还有什么可以去中心化。
以太坊的一个特性就是增加了对去中心化合约的支持。

BTC 货币中的最小单位为“聪”,Satoshi。ETH 的最小单位为“Wei”.

去中心化的合约

去中心化货币本身由政府发行,政府公信力为其背书,BTC 通过技术手段取代了政府的职能
现实生活中,我们经常提到的“契约”或“合约”,其有效性也是需要政府进行维护的,如果产生纠纷,政府合法性合同进行判决。ETH 的设计目的就是,通过技术手段取代政府对于合约的职能

去中心化的合同有什么好处:
若合同签署方并非一个国家,需要跨国转账,没有统一的司法管辖权(如:众筹)。如果可以编写无法修改的合约,一旦发布到区块链上,所有人(包括写智能合约的作者)只能按照制定的规则执行。

web3综述

区块链:去中心化记账系统

比特币

基于区块链这一技术的一种加密货币(还有以太币、莱特币等等)

  • 密码学基础
  • 比特币的数据结构
  • 共识协议和系统实现
  • 挖矿算法和难度调整
  • 比特币脚本
  • 软分叉和硬分叉
  • 匿名和隐私保护

以太坊

  • 基于账户的分布式账本
  • 数据结构:状态树、交易树、收据树
  • GHOST 协议
  • 挖矿:memory-hard mining puzzle
  • 挖矿难度调整
  • 权益证明
  • 智能合约

以太坊生态:

  1. 去中心化应用(DApps Decentralized Applications):
    1. 数字金融服务(去中心化交易所、借贷平台、稳定币)
    2. 数字身份验证
    3. 去中心化游戏
    4. 去中心化社交媒体
  2. 智能合约:以太坊是一个智能合约平台。智能合约应用场景包括:代币发行、投票、众筹等
  3. 钱包:以太坊生态系统有各种钱包应用程序,用于存储、管理和交易以太坊资产和代币
  4. 基础设备和开发工具:开发者可以通过这些工具构建和部署智能合约和 DApps。如 Solidity、以太坊虚拟机(EVM)
  5. NFT(Non-Fungible Token 非同质化代币)市场:以太坊是最著名的 NFT 平台之一。支持各种数字艺术、虚拟土地、链上凭证等 NFT 的发行和交易
  6. 去中心化金融(DeFi Decentralized Finance):以太坊生态系统中最受欢迎和发展最快的领域之一。DeFi 应用提供了一系列金融服务,如去中心化交易所 DEX、链上借贷等,旨在提供更开放、透明和无需信任的金融体系。
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×