比特币Script编程语言入门

个人思考/推荐理由
简单介绍比特币的编程语言Script
核心内容概括
比特币的编程语言Script简介,是一种简单的堆栈语言,比特币中的许多操作都是用这种堆栈语言实现的
难度
入门
https://blog.lopp.net/bitcoin-and-the-rise-of-the-cypherpunks/
专题
比特币
开发
 
notion image
Script(大多数时候都被直译为 “脚本”)是比特币所用的一种微型编程语言,用于为比特币交易的输出提供一种 锁定 机制。
  • 为了解锁一个输出(即将它用作一笔交易的输入时),必须提供一个解锁脚本
如果完整的脚本(解锁脚本 + 锁定脚本)是有效的,相应的输出就会 “被解锁”,可以花费了。

什么是 Script 语言?

Script 是一种非常基础的编程语言。它由两种类型的对象组成:
  • 数据(Data) —— 例如:公钥签名
  • 操作码(OPCODE) —— 操作 数据的简单函数。
这里是比特币的一个标准的 P2PKH(支付到公钥哈希值)脚本的简单图示:
notion image

如何运行 Script 语言?

  1. 数据总会被 推入 栈中
notion image
  1. OPCODE 可以把栈中的元素 弹出 并做一些操作;操作完后,有时候会把新的元素 “推入” 栈中
notion image
  • ` DUP ` 操作码会复制栈顶的元素 -

什么样的脚本是有效的?

栈顶的元素是 1 (或者更大的数值)且栈中只余一个元素则表明这是一个有效的脚本。
notion image

在哪里可以找到脚本?

交易的每一个输出中都放置了一个锁定脚本
notion image
而交易的每一个输入都必须提供一个解锁脚本:
每个节点都会把解锁脚本和锁定脚本前后拼接起来并运行,以保证自己验证了脚本。

为什么我们要使用 Script 语言?

  • :为什么不直接使用公钥和签名的组合,把所有这些 操作码 和堆栈抛在一边呢?
  • 答:因为你可以使用 操作码不同组合 创建不同类型的锁。

1. 数学谜题

为了花费这个输出,你需要提供和为 8 的两个数字
notion image
  • 可能是世界上最不安全的锁定脚本 -

2. 哈希谜题

在这里,你只需要提供一个可以得出(跟锁定脚本中)相同的哈希值的数据,就可以花费这个输出。
notion image

3. 哈希碰撞谜题

这是一种很酷的锁。你需要提供两段可以得出相同哈希值的数据,才能解锁它。
换句话说,这是一种激励人们去发现 “哈希碰撞” 的锁。
notion image
  • 使用这个脚本锁定的比特币可以在这里找到:`35Snmmy3uhaer2gTboc81ayCip4m9DT4ko`。但是,脚本本身是使用 P2SH 锁定脚本封装过的,所以你看不出原本的锁定脚本(有人来解锁时才会曝光)。 -

标准的脚本

虽然我们可以使用 操作码 的不同组合产生多样的锁定脚本,但大部分节点只会转发少数 “标准脚本” 的交易:
  • P2PK(支付给公钥)
  • P2PKH(支付给公钥哈希值)
  • P2MS(支付给多签名)
  • P2SH(支付给脚本哈希值)
notion image

总结

Script 是一种微型的编程语言,用在比特币中,为比特币交易的输出提供锁定机制。
  • 每个输出都有一个 “锁定脚本”。
  • 为了花费一个输出,你必须在交易中提供 “解锁脚本”。
当一个节点收到了一笔交易时,它会将解锁脚本和锁定脚本拼接起来并运行。如果脚本运算完后栈顶的元素为 1 并且栈中没有别的元素,那么这个脚本就是有效的,这个输出可以被花费。

参考文献

脚注