hiro99ma blog

Miniscript

最終更新日: 2025/08/05

サイト

ビルド

$ git clone https://github.com/sipa/miniscript.git
$ cd miniscript
$ make

$ echo "pk(key_1)" | ./miniscript
X    108.0000000000    35 pk(key_1) pk(key_1)

オリジナルをビルドしたコマンドではBitcoinスクリプトまでは出力しないので、forkしてサイトで出力している項目を追加した。

$ git clone https://github.com/hirokuma/miniscript.git
$ cd miniscript
$ make

$ echo "pk(key_1)" | ./miniscript
<<Spending cost>>
script_size=   35
input_size=    73.0000000000
total_cost=   108.0000000000

<<miniscript output>>
pk(key_1)

<<Resulting script structure>>
<key_1> OP_CHECKSIG

JavaScriptとWASMのコードも生成できる。

$ sudo apt install emscripten
$ make miniscript.js

これらのファイルが生成された後であれば、ローカルのブラウザで index.html を開くとサイトと同じことができた。

概要

MiniscriptはBitcoinスクリプトを構造的に書くための言語である。

このリポジトリはサンプルコードを含んでいるライブラリだと考えるのがよいと思う。 index.html はサンプルであると同時に help 代わりにもなっていて、 BIP-379の説明をしている。

プログラムで動的にスクリプトを生成するために組み込むという使い方になると思っている。

使い方

Bitcoinスクリプトは、高級言語というよりも逆ポーランド記法の方が近いと思う。 値をスタックに載せ、スタックに対して命令を実行し、最終的にスタックが1つになって 0 以外なら true、0 なら false と判定される。 Scriptに表があるが、この “Output”列で “fail” がある命令は、その場でスクリプトの判定を失敗扱いにして終わる。

例えばこういうものである。

OP_IF
    <revocationpubkey>
OP_ELSE
    `to_self_delay`
    OP_CHECKSEQUENCEVERIFY
    OP_DROP
    <local_delayedpubkey>
OP_ENDIF
OP_CHECKSIG

TapScriptでは分岐させずにスクリプト自体を別々に作ることが多いだろうが、ともかくこういう書き方になる。 <revocationpubkey> は 33バイトの公開鍵で to_self_delay はスタックに載せる命令になる。

(書きかけ)

リンク

writer: hiro99ma
tags: Bitcoin開発    

 < Top page

コメント(Google Formへ飛びます)

GitHub

X/Twitter

Homepage

About me