当前位置:首页 > WEB3 > 正文内容

解锁比特币交易,常用脚本类型与核心作用

eeo2026-02-11 01:07:52WEB320
摘要:

比特币作为首个成功的去中心化数字货币,其安全性和灵活性很大程度上得益于其基于脚本(Script)的交易系统,交易脚本是一种简单的、基于堆栈的编程语言,它定义了比特币交易输出(UTXO)在被花费时必须满...

比特币作为首个成功的去中心化数字货币,其安全性和灵活性很大程度上得益于其基于脚本(Script)的交易系统,交易脚本是一种简单的、基于堆栈的编程语言,它定义了比特币交易输出(UTXO)在被花费时必须满足的条件,它就像一个“锁”,而解锁这个“锁”的“钥匙”就是提供满足该脚本条件的数据,理解比特币常用的交易脚本类型,对于深入把握比特币的工作原理、安全特性以及创新应用至关重要。

比特币脚本的设计并非图灵完备,这意味着它不支持循环等复杂操作,从而有效防止了无限循环攻击等潜在问题,并保证了交易执行的确定性和效率,以下是一些比特币中最常用且核心的交易脚本类型:

P2PKH (Pay-to-Public-Key-Hash) - 最经典的脚本类型

P2PKH是比特币历史上最古老、最广泛使用的脚本类型,我们日常所说的“比特币地址”大多对应的就是P2PKH脚本。

  • 锁定脚本 (ScriptSig - 在输入中提供): 当用户想要花费一个P2PKH输出的比特币时,需要在交易输入中提供以下信息:
    1. signature (签名):对交易数据进行签名,证明私钥的所有权。
    2. public key (公钥):与签名对应的公钥。 这两部分数据共同构成了ScriptSig,用于解锁。
  • 解锁脚本 (ScriptPubKey - 在输出中定义): 当一个比特币地址被创建时,其对应的ScriptPubKey会定义在交易输出中,内容通常为:
    OP_DUP OP_HASH160 <PublicKeyHash> OP_EQUALVERIFY OP_CHECKSIG
    • OP_DUP:复制栈顶元素。
    • OP_HASH160:对栈顶元素(公钥)进行SHA-256哈希后再进行RIPEMD-160哈希。
    • <PublicKeyHash>:用户地址对应的公钥哈希(20字节)。
    • OP_EQUALVERIFY:验证栈顶两个元素是否相等,并验证签名有效性。
    • OP_CHECKSIG:验证签名是否使用提供的公钥对交易数据生成。
  • 执行过程:
    1. ScriptSig(签名+公钥)被压入堆栈。
    2. ScriptPubKey被依次执行:OP_DUP复制公钥,OP_HASH160生成公钥哈希,与ScriptPubKey中预设的<PublicKeyHash>比较(OP_EQUALVERIFY),最后OP_CHECKSIG验证签名。
    3. 如果所有步骤都成功,堆栈顶部为TRUE(1),交易有效;否则为FALSE(0),交易失败。

P2SH (Pay-to-Script-Hash) - 更灵活的脚本类型

P2SH的引入是为了提高隐私性,并支持更复杂的脚本类型,而无需让每个节点都理解和执行这些复杂脚本,用户只需支付一个“脚本的哈希值”,而脚本本身在花费时才被揭示。

  • 锁定脚本 (ScriptSig - 在输入中提供): ScriptSig不再是简单的签名和公钥,而是提供满足ScriptPubKey中哈希所指向的脚本的条件,通常包括:
    1. redeemScript:一个完整的脚本,定义了花费该输出的实际条件(一个多重签名的脚本)。
    2. 用于满足redeemScript的数据(如多个签名等)。
  • 解锁脚本 (ScriptPubKey - 在输出中定义): ScriptPubKey非常简洁,只包含:
    OP_HASH160 <ScriptHash> OP_EQUAL
    • <ScriptHash>:是redeemScript的SHA-256+RIPEMD-160哈希值。
  • 执行过程:
    1. ScriptSig(包含redeemScript及其满足数据)被压入堆栈。
    2. ScriptPubKey执行:OP_HASH160ScriptSig中的redeemScript进行哈希,与ScriptPubKey中的<ScriptHash>比较(OP_EQUAL)。
    3. 如果哈希匹配,则继续执行redeemScript,用ScriptSig中提供的数据去满足redeemScript的条件。
    4. 只有ScriptPubKey的哈希验证和redeemScript的执行都成功,交易才有效。

多重签名脚本 (Multi-signature Scripts)

多重签名脚本要求多个私钥共同签名才能花费比特币,常用于组织资金管理、提高安全性等,它可以与P2PKH或P2SH结合使用。

  • 基本结构 (以2-of-3为例,即3个公钥中任意2个即可签名):
    OP_2 <PubKey1> <PubKey2> <PubKey3> OP_3 OP_CHECKMULTISIG
    • OP_2:指定需要的签名数量。
    • <PubKey1> <PubKey2> <PubKey3>:参与签名的公钥列表。
    • OP_3:指定总共有多少个公钥。
    • OP_CHECKMULTISIG:验证提供的签名数量是否满足OP_n指定的数量,并且签名与公钥对应。
  • 与P2SH结合: 多重签名脚本通常被包裹在P2SH中,以提高隐私性和兼容性。redeemScript就是上述的多重签名脚本,用户只需支付其哈希值。

P2WPKH (Pay-to-Witness-Public-Key-Hash) 和 P2WSH (Pay-to-Witness-Script-Hash) - 隔离见证脚本类型

为了解决比特币的扩容问题并提升交易效率和隐私性,隔离见证(SegWit)被引入,并带来了新的脚本类型:原生见证脚本(Native SegWit)。

  • P2WPKH (Pay-to-Witness-Public-Key-Hash):

    • 锁定脚本 (ScriptPubKey):
      OP_0 <PublicKeyHash>
      • OP_0:表示一个以0开头的版本号(当前为0)。
      • <PublicKeyHash>:是公钥的SHA-256哈希(32字节,不同于P2PKH的20字节)。
    • 解锁脚本 (ScriptSig - 在输入的见证数据中提供): 见证数据(Witness)是隔离见证的一部分,与ScriptSig分开存储和验证。
      1. witness<signature> <public_key>
    • 特点: 签名和公钥作为见证数据,不占用交易本身的“空间”,从而降低交易费用,并具有某些隐私优势。
  • P2WSH (Pay-to-Witness-Script-Hash):

    • 锁定脚本 (ScriptPubKey):
      OP_0 <ScriptHash>
      • <ScriptHash>:是完整见证脚本(witnessScript)的SHA-256哈希(32字节)。
    • 解锁脚本 (ScriptSig - 在输入的见证数据中提供): 见证数据包含:
      1. witness<witnessScript> 以及满足该witnessScript的数据。
    • 特点: 类似于P2SH,但见证脚本本身被哈希锁定在ScriptPubKey中,支持更复杂的见证脚本(如复杂的多重签名、时间锁等),且同样享受隔离见证带来的费用和隐私优势。

时间锁脚本 (Timelock Scripts)

时间锁脚本允许交易在特定时间点之后才能被花费,这为诸如闪电网络、通道关闭、合约到期等应用提供了基础。

  • 类型:
    • 绝对时间锁 (CLTV - CheckLockTimeVerify): 基于区块高度或特定时间戳。
      • 示例脚本片段:<locktime> OP_CHECKLOCKTIMEVERIFY OP_DROP <public key> OP_CHECKSIG
      • 意味着必须等到<locktime>指定的区块高度或时间之后,才能使用该公钥和签名花费。
    • 相对时间锁 (CSV - CheckSequenceVerify): 基于相对时间(从当前区块算起多少个区块后)。
      • 示例脚本片段:<sequence> OP_CHECKSEQUENCEVERIFY OP_DROP <public key> OP_CHECKSIG
      • 意味着必须等待<sequence>指定的相对区块数之后,才能花费。
  • 应用: 时间锁常与其他脚本类型(如P2SH、P2WSH)结合使用,实现条件性支付。

比特币的交易脚本系统是其灵活性和安全性的基石,从最基础的

    币安交易所

    币安交易所是国际领先的数字货币交易平台,低手续费与BNB空投福利不断!

扫描二维码推送至手机访问。

版权声明:本文由e-eo发布,如需转载请注明出处。

本文链接:https://www.e-eo.com/post/11294.html

分享给朋友: