当前位置: 首页 > news >正文

比特币技术简史 第五章:交易机制 - UTXO模型、脚本系统与多重签名

第五章:交易机制 - UTXO模型、脚本系统与多重签名

比特币交易:数字价值的舞蹈

欢迎来到第五章!如果说区块链是比特币的骨架,那么交易就是比特币的血液,它们在这个数字经济体中流动,携带着价值从一个参与者流向另一个参与者。

在这一章中,我们将深入探索比特币交易的内部机制:从独特的UTXO模型,到灵活的脚本系统,再到创新的多重签名技术。我们将揭示这些看似复杂的概念背后的优雅设计,以及它们如何共同构建一个安全、灵活且去中心化的价值传输系统。

准备好了吗?让我们开始探索比特币交易的奇妙世界!

UTXO模型:比特币的独特账本系统

什么是UTXO?

UTXO是"未花费的交易输出"(Unspent Transaction Output)的缩写。在比特币系统中,你的"余额"不是像银行账户那样存储为一个单一的数字,而是由一系列UTXO组成的。

想象一下,如果传统货币是纸钞和硬币,那么UTXO就相当于你钱包里的各种面额的钞票和硬币。当你支付时,你不是从一个账户余额中扣除金额,而是使用这些"钞票和硬币"(UTXO)来支付,并可能收到"找零"(新的UTXO)。

UTXO模型的工作原理

在UTXO模型中,每个比特币交易都有输入和输出:

  1. 交易输入:引用之前交易中的未花费输出(UTXO),并提供解锁这些UTXO所需的签名或其他证明。

  2. 交易输出:创建新的UTXO,指定这些UTXO的价值和锁定条件(通常是接收者的公钥哈希)。

每个交易必须满足以下条件:

  • 所有输入必须是有效的未花费输出(UTXO)
  • 输入的总价值必须大于或等于输出的总价值
  • 输入价值减去输出价值的差额是交易费用,支付给将交易包含在区块中的矿工

UTXO模型的例子

让我们通过一个简单的例子来理解UTXO模型:

假设Alice有两个UTXO:一个价值5 BTC,另一个价值3 BTC。她想给Bob发送7 BTC。交易将如下构建:

输入

  • Alice的5 BTC UTXO
  • Alice的3 BTC UTXO
    (总输入:8 BTC)

输出

  • 给Bob的7 BTC UTXO
  • 给Alice的0.99 BTC UTXO(找零)
    (总输出:7.99 BTC)

交易费用:8 BTC - 7.99 BTC = 0.01 BTC

在这个交易之后,Alice原来的两个UTXO被"花费"(消耗),不再是有效的UTXO。同时,创建了两个新的UTXO:一个属于Bob(7 BTC),一个是Alice的找零(0.99 BTC)。

UTXO模型的特点

UTXO模型有几个重要特点:

  1. 无状态验证:验证交易只需检查引用的UTXO是否存在且未被花费,不需要了解账户历史。

  2. 隐私优势:UTXO模型使得追踪资金流动变得更加困难,特别是当用户每次交易都使用新地址时。

  3. 并行处理:不同UTXO的交易可以并行验证,提高了系统效率。

  4. 防止双重支付:一旦UTXO被花费,它就不能再次使用,这自然地防止了双重支付。

  5. 确定性交易费用:交易费用是输入和输出之间的差额,在创建交易时就已确定。

UTXO集合

比特币节点维护一个称为"UTXO集合"的数据结构,其中包含网络中所有未花费的交易输出。这个集合对于快速验证新交易至关重要,因为节点可以立即检查交易输入是否引用了有效的UTXO。

随着比特币网络的发展,UTXO集合的大小也在增长。截至2023年,UTXO集合的大小约为几GB,这是全节点需要维护的关键状态数据之一。

比特币脚本:交易的编程语言

什么是比特币脚本?

比特币脚本是一种简单的、基于堆栈的编程语言,用于定义比特币交易中的锁定和解锁条件。它不是图灵完备的(即不能执行任意复杂的计算),这是有意为之,以限制复杂性和潜在的安全风险。

每个比特币交易输出都包含一个"锁定脚本"(scriptPubKey),指定了花费这个输出所需满足的条件。相应地,花费这个输出的交易输入必须提供一个"解锁脚本"(scriptSig),满足锁定脚本中的条件。

脚本执行模型

比特币脚本使用一个简单的堆栈执行模型:

  1. 首先执行解锁脚本(scriptSig),将结果推入堆栈。
  2. 然后执行锁定脚本(scriptPubKey)。
  3. 如果执行完成后堆栈顶部的值为TRUE,则交易有效;否则无效。

这个过程可以想象为一个谜题和解答的配对:解锁脚本提供解答,锁定脚本验证解答是否正确。

常见的脚本类型

比特币支持多种脚本类型,最常见的包括:

  1. P2PKH(Pay to Public Key Hash)
    最常见的交易类型,将比特币发送到与特定公钥对应的地址。

    锁定脚本:OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
    解锁脚本:<Signature> <PublicKey>

  2. P2SH(Pay to Script Hash)
    允许发送比特币到复杂脚本的哈希,简化了复杂交易类型的使用。

    锁定脚本:OP_HASH160 <ScriptHash> OP_EQUAL
    解锁脚本:<Inputs> <RedeemScript>

  3. P2WPKH(Pay to Witness Public Key Hash)
    隔离见证版本的P2PKH,将签名数据移到交易的"见证"部分。

    锁定脚本:0 <PubKeyHash>
    见证:<Signature> <PublicKey>

  4. P2WSH(Pay to Witness Script Hash)
    隔离见证版本的P2SH。

    锁定脚本:0 <ScriptHash>
    见证:<Inputs> <RedeemScript>

  5. Multisig(多重签名)
    要求多个签名才能花费资金,我们将在后面详细讨论。

    锁定脚本:M <PubKey1> <PubKey2> ... <PubKeyN> N OP_CHECKMULTISIG
    解锁脚本:OP_0 <Signature1> <Signature2> ... <SignatureM>

多重签名:集体决策的力量

什么是多重签名?

多重签名(Multisignature,简称Multisig)是一种要求多个私钥签名才能授权交易的技术。它通常表示为"M-of-N",意味着N个可能的签名者中需要至少M个签名才能花费资金。

想象一个需要多把钥匙才能打开的保险箱,多重签名就是这个概念的数字版本。例如,一个2-of-3多重签名设置意味着三个人各持有一把"钥匙"(私钥),但只需要其中任意两人同意就能"打开保险箱"(授权交易)。

多重签名的实现

在比特币中,多重签名可以通过以下两种主要方式实现:

  1. 裸多重签名(Bare Multisig)
    使用OP_CHECKMULTISIG操作码直接在脚本中实现。

    锁定脚本:M <PubKey1> <PubKey2> ... <PubKeyN> N OP_CHECKMULTISIG
    解锁脚本:OP_0 <Signature1> <Signature2> ... <SignatureM>

    (注:OP_0是为了解决OP_CHECKMULTISIG中的一个已知bug,它会多弹出一个堆栈项)

  2. P2SH多重签名
    更常用的方法,将多重签名脚本包装在P2SH中,使地址更短,交易费用更低。

    赎回脚本:M <PubKey1> <PubKey2> ... <PubKeyN> N OP_CHECKMULTISIG
    锁定脚本:OP_HASH160 <RedeemScriptHash> OP_EQUAL
    解锁脚本:<Signature1> <Signature2> ... <SignatureM> <RedeemScript>

多重签名的应用场景

多重签名技术在比特币生态系统中有广泛的应用:

  1. 增强安全性

    • 个人可以使用2-of-3设置,将私钥分散在不同设备或位置,防止单点故障。
    • 即使一个私钥被盗,攻击者也无法窃取资金。
  2. 共享控制

    • 商业伙伴可以设置2-of-2多重签名,确保双方同意才能花费共同资金。
    • 家庭成员可以共享资金,但要求多人同意才能使用。
  3. 公司治理

    • 公司可以使用3-of-5多重签名,要求董事会多数成员批准大额支出。
    • 不同部门(如财务、法务、执行)可以共同控制公司资金。
  4. 托管服务

    • 2-of-3多重签名可用于托管交易,其中买家、卖家和托管方各持有一个密钥。
    • 如果交易顺利,买家和卖家签名完成交易;如有争议,托管方可以与任一方合作解决。
  5. 冷存储解决方案

    • 交易所和机构可以使用多重签名将大部分资金存储在冷钱包中,要求多个高管批准大额提款。

多重签名的优势与挑战

优势

  1. 增强安全性:分散风险,防止单点故障。
  2. 共享控制:确保资金使用需要多方同意。
  3. 灵活配置:可以根据需求定制M-of-N方案。
  4. 降低信任要求:不需要完全信任任何单一实体。

挑战

  1. 复杂性增加:设置和管理多重签名钱包比普通钱包更复杂。
  2. 密钥管理:需要安全存储多个私钥,增加了管理负担。
  3. 恢复困难:如果丢失了必要的私钥,资金可能永久无法访问。
  4. 交易费用:多重签名交易通常比普通交易更大,因此费用更高。

多重签名钱包的实现

现代比特币钱包通常提供用户友好的多重签名功能,隐藏了底层脚本的复杂性。常见的实现方式包括:

  1. 桌面钱包:如Electrum,提供直观的多重签名设置界面。
  2. 硬件钱包:如Ledger和Trezor,支持与其他设备组合创建多重签名钱包。
  3. 托管服务:一些公司提供托管的多重签名服务,简化了企业用户的采用。

本章总结

在本章中,我们深入探讨了比特币交易机制的核心组成部分:UTXO模型、脚本系统和多重签名技术。

UTXO模型为比特币提供了独特的账本系统,将"余额"表示为离散的未花费输出集合,而不是账户余额。这种设计带来了无状态验证、隐私优势和并行处理等好处。

比特币脚本系统虽然简单,但功能强大,支持各种交易类型和智能合约功能。从基本的P2PKH到复杂的多重签名,脚本系统为比特币提供了灵活性和可扩展性。

多重签名技术特别值得关注,它将集体决策引入比特币交易,为个人和企业提供了更高级别的安全性和控制能力。无论是用于个人钱包安全、企业资金管理还是托管服务,多重签名都展示了比特币协议的强大可编程性。

这些机制共同构成了比特币作为价值传输系统的基础,使其能够在没有中央权威的情况下安全、可靠地运行。在下一章中,我们将探讨比特币网络的其他关键方面,包括钱包技术、地址类型和隐私考虑。

http://www.lryc.cn/news/595259.html

相关文章:

  • PyCharm 未正确关联 .jpg 为图片格式
  • 玩转Rocky Linux 9 部署Redis指南
  • Jmeter如何做接口测试?
  • 前端之学习后端java小白(一)之SDKMAN
  • JavaScript的引入方式和基础语法的快速入门与学习
  • DigitalOcean 云平台上线 AMD MI325X GPU Droplet 服务器
  • 网站域名备案和服务器有关系吗
  • 解决OpenHarmony中找不到pthread_cancel和pthread_setcanceltype等libc符号的问题
  • Shell判断结构
  • 5道挑战题writup
  • 中文分词模拟器 - 华为OD统一考试(Java 题解)
  • macbookpro m1 max本儿上速搭一个elasticsearch+kibana环境
  • 在 React 中实现全局防复制hooks
  • MySQL表的基础操作
  • 鸿蒙DevEco Studio找不到JsonFormat插件
  • 虚拟机扩展磁盘容量后扩展分区大小
  • Linux的磁盘存储管理实操——(中)——逻辑卷管理实战
  • Linux find命令:强大的文件搜索工具
  • Apache Ignite Binary Object Restrictions
  • 青少年科学世界名刊分析评介:《生物技术世界》
  • 从 C# 到 Python:项目实战第五天的飞跃
  • Django视图与路由系统
  • 深入解析 Linux 硬链接与软链接:原理、区别及应用场景
  • 可编辑54页PPT | 智慧工业大数据建设方案智慧工厂整体解决方案
  • Git 常用命令与操作步骤
  • 深入理解 消息队列 与 ZeroMQ
  • C语言:20250721笔记
  • 板凳-------Mysql cookbook学习 (十二--------3_1)
  • 位标志法处理多选字段在数据库中的存储方式 查询效率与扩展性之间的权衡
  • 图论基本算法