木子阳光 发表于 2024-6-6 17:07:23

科普:比特币的交易过程


    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">最近这段时间,博主在整理一份通俗易懂的挖矿科普专辑,希望从最初加密货币交易的发生到挖矿确认交易的各个环节,全面地介绍挖矿过程中,到底发生了什么,哪些环节产生了挖矿收益,而我们常说的算力又指的是什么,挖矿收益为何要这样分配等等。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">以比特币为例,我们知道比特币网络里设计挖矿的目的是<strong style="color: blue;">打包交易,维护比特币网络</strong>,那么交易其实就是跟挖矿息息相关的第一个环节。在比特币网络中交易的过程使用了非对称加密技术,数字摘要技术,区块链技术等,其中的技术实现,已经有众多大神珠玉在前,博主就不献丑了。这篇文章的主要目的是<strong style="color: blue;">将比特币的交易过程用较为浅显的语言展示出来</strong>,让更多跟笔者一样的技术门外汉了解比特币。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/S2Q1ZdL7xhXw4m~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1716335792&amp;x-signature=HFNekHql8Tia5FN%2BQq6WPUa0xQM%3D" style="width: 100%; margin-bottom: 20px;">
    <h3 style="text-align: left; margin-bottom: 10px;">在展开说明之前,需要先安利几个概念</h3>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">非对称加密:</strong>也叫公开密钥加密,它是通过密码学的算法生成一对公私钥,公钥对外公开,私钥由本人保管。它有<strong style="color: blue;">两个用途</strong>:一,他人可以将<strong style="color: blue;">数据</strong>用公开的公钥加密后<strong style="color: blue;">传输</strong>给公钥持有人,公钥持有人使用对应的私钥将数据解密,读取信息,通过这种方式,可以<strong style="color: blue;">保证信息传输的安全性</strong>;二,公钥持有人可以使用私钥对<strong style="color: blue;">信息签名</strong>(签名过程类似加密过程),然后将信息和签名一起发送给他人,他人可以通过公钥对信息签名进行验证(验证过程类似解密过程),验证签名信息与发送信息一致,则证明信息是由公钥持有人发出,可以在不暴露公钥持有人身份和私钥的情况下,<strong style="color: blue;">确保信息来源的可靠性</strong></p><p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">。(参考链接:</p>https://en.wikipedia.org/wiki/Public-key_cryptography)
      
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">哈希算法</strong>:也叫散列函数,可以通过它将数据量较大的消息或者数据计算出一个格式固定,数据量较小的<strong style="color: blue;">数字摘要</strong>,也叫<strong style="color: blue;">指纹</strong>,<strong style="color: blue;">散列值</strong>,或者<strong style="color: blue;">哈希</strong>。好的哈希算法应该是<strong style="color: blue;">不可逆的</strong>(无法通过数字摘要反推出原来的信息或者数据),<strong style="color: blue;">敏感的</strong>(原来数据中任何一个微小的改动,都会使数字摘要发生巨大变化),<strong style="color: blue;">防冲突的</strong></p><p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">(很难找到两个不同的信息,它们的数字摘要相同)。(参考链接:</p>https://en.wikipedia.org/wiki/Hash_function)
      
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">比特币里的公钥和私钥</strong>:比特币世界里,用来确定比特币归属的是按照比特币协议生成的一对对公钥和私钥,它们通过非对称加密算法(椭圆曲线算法)生成,<strong style="color: blue;">公钥</strong>通过两次<strong style="color: blue;">哈希</strong>算法(SHA256)运算得到一个散列值(也叫做哈希),再<strong style="color: blue;">经过Base58Check编码</strong><strong style="color: blue;">生成</strong>了我们常见到的比特币的<strong style="color: blue;">钱包地址</strong>。所以钱包地址经过解码后,就可以得到对应公钥的哈希,可以用于验证私钥签名,加密数据等等。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">UTXO</strong>:Unspent transaction output,未花费的交易输出,它是比特币世界里的<strong style="color: blue;">抽象货币</strong>,每个UTXO都被一个<strong style="color: blue;">公钥(钱包地址)锁定</strong>,只有持有该公钥对应私钥的人,可以<strong style="color: blue;">通过私钥签名(解锁)</strong>并使用该UTXO。可以把UTXO理解为<strong style="color: blue;">抽象的纸币</strong></p><p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">,但它的面值不是固定的(不光有5块,10块,可以是任何数)。(参考链接:</p>https://en.wikipedia.org/wiki/Unspent_transaction_output)
      
    <h3 style="text-align: left; margin-bottom: 10px;">抛开代码,我们接下来看看比特币的交易是怎样的一个过程</h3>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">如下图,有甲、乙、丙、丁四个人,他们都有比特币钱包,钱包私钥自己持有,钱包地址(由各自钱包公钥生成)在比特币网络公开,用于UTXO的锁定和验证。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/S2Q1ZdeHvVJvVH~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1716335792&amp;x-signature=04U1czFc9OcsUu4Ox37nE2WVfSA%3D" style="width: 100%; margin-bottom: 20px;">
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">起始,甲给丙0.7BTC,在比特币网络里的记录是UTXO(1):甲给丙0.7BTC;乙给丙0.5BTC,在比特币网络里的记录是<strong style="color: blue;">UTXO(2):乙给丙0.5BTC</strong>。此时,丙的比特币钱包的账户余额为这两个UTXO之和,<strong style="color: blue;">丙的比特币总数=UTXO(1)+UTXO(2)=1.2BTC</strong>。如下图:</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/S2Q1ZeKFlOdQyi~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1716335792&amp;x-signature=kFvIvoLniJjO9m2ICBXQlkN%2BSf0%3D" style="width: 100%; margin-bottom: 20px;">
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">这天,丙向丁买了一批货物,需要向丁支付0.8BTC。丙通过比特币网络向丁转账,但丙现有的两个UTXO均不足0.8BTC,需要将两个UTXO一起使用,<strong style="color: blue;">类似现金交易:给丁支付1.2BTC,丁找给丙0.4BTC</strong>。但在比特币网络中,这个找零的工作是由丙自己发起的。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">整个交易的流程如下:</strong></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">丙通过比特币钱包准备交易信息,交易信息包括输入和输出两个部分,输入是UTXO(1)和UTXO(2),以及丙的钱包私钥签名(因为UTXO(1)和UTXO(2)均被丙的钱包公钥锁定,需要通过丙的私钥签名来解锁后,进行使用)</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">交易的输出是未确认的<strong style="color: blue;">UTXO(3):丙给丁0.8BTC</strong>,这个新的UTXO指向丁的钱包公钥,待交易确认后,将被丁的钱包公钥锁定。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">此时还有0.4BTC需要找零给丙,因此还需要输出一个未确认的<strong style="color: blue;">UTXO(4): 丙给丙0.3999BTC</strong>,这个新的UTXO指向丙的钱包公钥,待交易确认后,将被丙的钱包公钥锁定。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">为什么找零的数额不是0.4BTC呢?因为比特币网络要求,交易转账,需要向比特币网络支付交易手续费。<strong style="color: blue;">剩余0.0001BTC</strong>未指向任何钱包公钥,将<strong style="color: blue;">作为转账手续费</strong>支付给打包这笔交易的矿工(如果未找零,剩余所有未指定的比特币将全部作为手续费给打包交易的矿工,不过目前找零工作都由钱包自动完成,不用担心)。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">交易信息准备完毕后,经过丙的钱包<strong style="color: blue;">验证交易合法</strong>(UTXO合法,签名有效,输入输出金额有效等等)后,将交易广播到比特币网络中,由挖矿节点验证交易后,打包交易(将交易记入比特币区块中),并向比特币网络广播,交易完成。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">旧的UTXO被消耗,新的UTXO开始生效</strong>,此时丁的钱包里有一个未使用的<strong style="color: blue;">UTXO(3): 丙给丁0.8BTC</strong>,丙的钱包里有一个未使用的<strong style="color: blue;">UTXO(4): 丙给丙0.3999BTC</strong>。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/S2Q1ZedIjgpX6D~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1716335792&amp;x-signature=%2FmvcFgwTWvjzH0u6kPKIWAwwH54%3D" style="width: 100%; margin-bottom: 20px;">
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">以上是较为抽象的比特币交易的过程,有关比特币交易的构造,签名验证,节点验证,交易广播,加入挖矿节点mempool,矿工构造预备区块,以及最终的出块确认的过程,后续会分别介绍,本篇不做展开。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">从这个抽象的交易过程,我们可以发现,比特币的交易实质上是一堆UTXO的输入和输出的过程,伴随旧的UTXO被消耗,新的UTXO产生,完成了一次又一次的比特币交易。交易的过程由非对称加密和哈希算法进行双重保护,比特币持有者可以放心完成交易而不必担心身份被泄露,交易过程中也消耗了一部分比特币,用于奖励打包交易的矿工,使矿工乐于完成自己维护比特币网络的任务。</strong></p>


页: [1]
查看完整版本: 科普:比特币的交易过程