4 个版本

0.1.3 2023 年 3 月 9 日
0.1.2 2022 年 4 月 19 日
0.1.1 2020 年 3 月 3 日
0.1.0 2020 年 3 月 3 日

#opcode 中排名 29

Download history · Rust 包仓库 8/week @ 2024-04-07 · Rust 包仓库 36/week @ 2024-04-14 · Rust 包仓库 49/week @ 2024-04-21 · Rust 包仓库 19/week @ 2024-04-28 · Rust 包仓库 3/week @ 2024-05-05 · Rust 包仓库 4/week @ 2024-05-26 · Rust 包仓库 25/week @ 2024-06-09 · Rust 包仓库 2/week @ 2024-06-16 · Rust 包仓库 33/week @ 2024-06-23 · Rust 包仓库 58/week @ 2024-06-30 · Rust 包仓库 53/week @ 2024-07-07 · Rust 包仓库 92/week @ 2024-07-14 · Rust 包仓库 39/week @ 2024-07-21 · Rust 包仓库

每月下载 246

MIT 许可证

23KB
420

bitcoin-script

Rust crates.io docs.rs

在 Rust 中内联比特币脚本。


用法

此软件包导出一个 bitcoin_script! 宏,可用于构建比特币脚本。该宏从 bitcoin 软件包返回 Script 类型。

示例

#![feature(proc_macro_hygiene)]

use bitcoin_script::bitcoin_script;

let htlc_script = bitcoin_script! {
    OP_IF
        OP_SHA256 <digest> OP_EQUALVERIFY OP_DUP OP_SHA256 <seller_pubkey_hash>
    OP_ELSE
        100 OP_CSV OP_DROP OP_DUP OP_HASH160 <buyer_pubkey_hash>
    OP_ENDIF
    OP_EQUALVERIFY
    OP_CHECKSIG
};

注意:截至 rustc 1.41 版,Rust 编译器阻止将过程宏用作表达式。要使用此宏,您需要使用 nightly 版本,并将 #![feature(proc_macro_hygiene)] 添加到您的软件包根目录。这将在不久的将来稳定下来,PR 可以在这里找到:https://github.com/rust-lang/rust/pull/68717

语法

脚本基于由操作码、十进制整数或十六进制字符串字面量组成的标准语法。此外,可以通过插入 Rust 表达式来支持动态捕获 Rust 变量或计算值(用 <angle brackets> 标记)。

空白字符被忽略 - 脚本可以按作者偏好的格式进行格式化。

操作码

所有正常操作码都可用,形式为 OP_X

let script = bitcoin_script!(OP_CHECKSIG OP_VERIFY);

整数字面量

可以使用正数和负数 64 位整数字面量,并将解析为它们最有效的编码。

例如

  • 2 将解析为 OP_PUSHNUM_2 (0x52)
  • 255 将解析为一个长度标记的可变整数:0x02ff00(注意额外的零字节,这是由于比特币脚本使用最高有效位来表示符号的方式所致)
let script = bitcoin_script!(123 -456 999999);

十六进制字面量

可以指定十六进制字符串,前面带有 0x

let script = bitcoin_script!(
    0x0102030405060708090a0b0c0d0e0f OP_HASH160
);

转义序列

在脚本中支持动态Rust表达式,用尖括号包围。在许多情况下,这只是一个变量标识符,但也可能是一个函数调用或算术运算。

支持以下类型的Rust表达式:

let bytes = vec![1, 2, 3];

let script = bitcoin_script! {
    <bytes> OP_CHECKSIGVERIFY

    <2016 * 5> OP_CSV
};

依赖项

~7MB
~81K SLoC