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
每月下载 246 次
23KB
420 行
bitcoin-script
在 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表达式:
i64
Vec<u8>
bitcoin::PublicKey
let bytes = vec![1, 2, 3];
let script = bitcoin_script! {
<bytes> OP_CHECKSIGVERIFY
<2016 * 5> OP_CSV
};
依赖项
~7MB
~81K SLoC