#scripting-language #high-level #bitcoin #contracts #miniscript #user #pk

bin+lib minsc

基于 Miniscript 的高级脚本语言,用于比特币合约

2 个不稳定版本

0.2.0 2020 年 11 月 27 日
0.1.0 2020 年 7 月 28 日

#3 in #pk

MIT 许可证

46KB
1K SLoC

Build Status crates.io npm MIT license Pull Requests Welcome

Minsc

用于比特币合约的基于 Miniscript 的脚本语言

Minsc 是一种用于表达比特币脚本消费条件的高级脚本语言。它基于 Miniscript 政策语言,并添加了额外的功能和语法糖,包括变量、函数、中缀表示法、可读时间等。

文档和实时游乐场可在网站上找到: https://min.sc

支持开发: ⛓️ 链上或 ⚡闪电通过 BTCPay

示例

  • 用户和双因素认证服务需要签名,但 90 天后只需用户本人签名即可

    pk(user_pk) && (pk(service_pk) || older(90 days))
    

    ▶️ 试试看

  • 传统的基于预像的 HTLC

    $redeem = pk(A) && sha256(H);
    $refund = pk(B) && older(10);
    
    $redeem || $refund
    

    ▶️ 试试看

  • 类似 Liquid 的联邦 pegin,带有在超时后激活的紧急恢复密钥

    $federation = 4 of [ pk(A), pk(B), pk(C), pk(D), pk(E) ];
    $recovery = 2 of [ pk(F), pk(G), pk(I) ];
    $timeout = older(3 months);
    
    likely@$federation || ($timeout && $recovery)
    

    ▶️ 试试看

  • BOLT #3 收到的 HTLC 政策

    fn bolt3_htlc_received($revoke_pk, $local_pk, $remote_pk, $secret, $delay) {
      $success = pk($local_pk) && hash160($secret);
      $timeout = older($delay);
    
      pk($revoke_pk) || (pk($remote_pk) && ($success || $timeout))
    }
    
    bolt3_htlc_received(A, B, C, H1, 2 hours)
    

    ▶️ 试试看

  • 高级双因素认证,用户有 2-of-2 设置,服务提供商是 3-of-4 联邦

    fn two_factor($user, $provider, $delay) =
      $user && (likely@$provider || older($delay));
    
    $user = pk(desktop_pk) && pk(mobile_pk);
    $providers = [ pk(A), pk(B), pk(C), pk(D) ];
    
    two_factor($user, 3 of $providers, 4 months)
    

    ▶️ 试试看

更多示例可在 https://min.sc 上找到。

本地安装

安装 Rust

$ cargo install minsc

# Compile a minsc file
$ minsc examples/htlc.minsc

# Compile from stdin
$ echo 'pk(A) && older(1 week)' | minsc -

# Dump AST
$ minsc examples/htlc.minsc --ast

使用 Rust API

use minsc::{parse, run};

let code = "pk(A) && older(1 week)";
let ast = parse(code).unwrap();
let result = run(ast).unwrap();

let policy = result.into_policy().unwrap();
println!("{}", policy);

// Also available: into_miniscript() and into_desc()

Rust API 的完整文档在此处提供 https://docs.rs/minsc/

JavaScript WASM 包

使用 npm install minsc 安装并

import { run } from 'minsc'

const policy = run('pk(A) && older(1 week)')
const miniscript = run('miniscript(pk(A) && older(1 week))')
const descriptor = run('wsh(miniscript(pk(A) && older(1 week)))')
const address = run('address(wsh(miniscript(pk(A) && older(1 week))))')
const address2 = run('address(pk(A) && older(1 week))')

console.log({ policy, miniscript, descriptor, address, address2 })

许可证

MIT

依赖项

~18MB
~243K SLoC