Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
fdfa5d9
README.md:miniscript-docker run examples images
RandyMcMillan Nov 15, 2023
eb86558
main.cpp:total:script:miniscript:json
RandyMcMillan Nov 15, 2023
c7406cc
Dockerfile:v0.0.3
RandyMcMillan Nov 15, 2023
3848b1d
README.md:miniscript-docker run examples
RandyMcMillan Nov 15, 2023
947b286
.github/workflows/ghcr.io.yml:branches: master main v*
RandyMcMillan Nov 15, 2023
ff74e6b
README.md:miniscript-docker serve
RandyMcMillan Nov 15, 2023
c368898
Dockerfile:v0.0.5
RandyMcMillan Nov 15, 2023
a3618e0
README.md:miniscript-docker serve: add screenshot
RandyMcMillan Nov 15, 2023
c8e6fef
make:dockerx:docker-buildx
RandyMcMillan Nov 16, 2023
2baa357
Dockerfile:bypass make miniscript.js
RandyMcMillan Nov 16, 2023
0627e63
miniscript-docker: shell -p 127.0.0.1:0:8080/tcp
RandyMcMillan Nov 16, 2023
6394fff
GNUmakefile: detect ARCH buildx TARGET amd64/arm64
RandyMcMillan Nov 17, 2023
6684ee9
Merge pull request #4 from bitcoincore-dev/v0.0.6
RandyMcMillan Nov 17, 2023
d50f8eb
Dockerfile:v0.0.6
RandyMcMillan Nov 17, 2023
e04868c
Dockerfile:v0.0.7
RandyMcMillan Nov 17, 2023
eea7766
Merge pull request #5 from bitcoincore-dev/main
RandyMcMillan Nov 17, 2023
3ebbfa9
make:test
RandyMcMillan Nov 20, 2023
3f8e494
main.cpp:scriptlen
RandyMcMillan Nov 20, 2023
5a83b18
Merge pull request #6 from bitcoincore-dev/v0.0.7
RandyMcMillan Nov 20, 2023
04d5453
Dockerfile:v0.0.8
RandyMcMillan Nov 20, 2023
8e93f6c
Makefile:help miniscript
RandyMcMillan Nov 20, 2023
fec50c5
miniscript-tests: run miniscript-test-####
RandyMcMillan Nov 20, 2023
eb3e1a1
Merge pull request #7 from bitcoincore-dev/v0.0.8
RandyMcMillan Nov 20, 2023
7f360ea
Dockerfile:v0.0.9
RandyMcMillan Nov 20, 2023
5807f48
miniscript-tests:test miniscript-test-{0..1000}*
RandyMcMillan Nov 20, 2023
c2ed47e
Dockerfile:
RandyMcMillan Nov 20, 2023
699f813
miniscript.html
RandyMcMillan Nov 20, 2023
c0e248c
reference.html
RandyMcMillan Nov 20, 2023
bb816c6
Merge pull request #8 from bitcoincore-dev/v0.0.9
RandyMcMillan Nov 20, 2023
310674a
README.md:miniscript-docker browser view
RandyMcMillan Nov 20, 2023
6a8ceaa
README.md:miniscript-docker serve image
RandyMcMillan Nov 20, 2023
9be5626
Create CNAME
RandyMcMillan Jan 12, 2024
24e890f
main.cpp:revert:
RandyMcMillan Jan 12, 2024
b099f26
Dockerfile:v0.0.10
RandyMcMillan Jan 12, 2024
2f42506
make:miniscript.json
RandyMcMillan Jan 12, 2024
b55fb02
miniscript.json-test-0
RandyMcMillan Jan 12, 2024
bec80ce
Dockerfile:expose 443
RandyMcMillan Jan 13, 2024
632ffd5
Update CNAME
RandyMcMillan Jan 13, 2024
816de2b
Delete CNAME
RandyMcMillan Jan 13, 2024
7768a7a
Create CNAME
RandyMcMillan Jan 13, 2024
7e02e45
Dockerfile:make miniscript.js
RandyMcMillan Feb 9, 2026
d568a1d
test_bip110
RandyMcMillan Feb 9, 2026
36776ec
bitcoin:add do nothing
RandyMcMillan Feb 9, 2026
596af34
compiler.cpp
RandyMcMillan Feb 9, 2026
15fddbd
test.gram
RandyMcMillan Feb 9, 2026
daef9f9
test_harness.sh
RandyMcMillan Feb 9, 2026
000229c
chore: Add .genkit/ to .gitignore
RandyMcMillan Feb 9, 2026
000e980
ci: Add workflow to run test harness
RandyMcMillan Feb 9, 2026
000a203
docs: Add CHANGELOG.md
RandyMcMillan Feb 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ghcr.io.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ env:
on:
push:
branches:
- master
- main
- v**
tags:
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/test_harness_workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Run Test Harness

on:
push:
branches:
- master
- main
workflow_dispatch:

jobs:
run-test-harness:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3

- name: Build Docker Image
run: docker build -t miniscript-web .

- name: Run Docker Container
run: docker run -p 8080:8080 -d --name miniscript-test miniscript-web serve

- name: Execute Test Harness
run: ./test_harness.sh

- name: Clean up Docker Container
if: always()
run: docker stop miniscript-test && docker rm miniscript-test
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
miniscript
miniscript.json

#make
miniscript.js
Expand All @@ -11,3 +12,9 @@ apple-touch-icon.png

#macos
**.DS_Store**

bash_profile.log
buildx.dockerfile

#genkit
.genkit/
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- New Miniscript function `do_nothing()` which compiles to `OP_1`.
- Test script `test_bip110_output_limit_pkA.sh` to demonstrate BIP110 34-byte transaction output limit violation.
- Test script `test_bip110_witness_stack_limit_sha256.sh` to demonstrate BIP110 256-byte witness stack element limit violation.
- Test script `test_bip110_complex_scriptpubkey_limit.sh` to demonstrate BIP110 34-byte `scriptPubKey` limit violation with complex Miniscript.
- Test script `test_bip110_op_return_data_limit.sh` to demonstrate BIP110 83-byte `OP_RETURN` data limit violation.
- `test_harness.sh` script to run all BIP110 test scripts.
- GitHub Actions workflow `.github/workflows/test_harness_workflow.yml` to automate running the test harness.

### Changed
- Added verbose logging (`set -x` and descriptive `echo`s) to all BIP110 test scripts for improved clarity and debuggability.
- Modified `test_bip110_witness_stack_limit_sha256.sh` and `test_bip110_op_return_data_limit.sh` to dynamically detect Docker container ID and execute internal commands within the container for robustness.
- Updated `test_bip110_complex_scriptpubkey_limit.sh` to use a here-document for robust multi-line output.

### Fixed
- Corrected shell syntax errors in `test_bip110_complex_scriptpubkey_limit.sh` and `test_bip110_op_return_data_limit.sh` related to unescaped characters and command execution.
- Installed `xxd` in the Docker container to support hex encoding in `test_bip110_op_return_data_limit.sh`.

### Chore
- Added `.genkit/` to `.gitignore` to prevent tracking local Genkit-related files.
1 change: 1 addition & 0 deletions CNAME
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github.miniscript.app
18 changes: 6 additions & 12 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,28 @@ RUN apt-get install systemd bash jq -y
RUN echo $(date +%s) > updated
RUN chmod +x /usr/bin/systemctl
RUN echo $(date +%s) > updated
FROM systemd as pandoc
RUN apt-get install pandoc -y
RUN echo $(date +%s) > updated
FROM pandoc as docker
RUN apt-get install docker.io -y
RUN echo $(date +%s) > updated
FROM docker as clone
FROM systemd as clone
RUN rm -rf /src
RUN git clone --branch v0.0.2 --depth 1 https://github.com/bitcoincore-dev/miniscript-docker /src
RUN git clone --branch v0.0.10 --depth 1 https://github.com/bitcoincore-dev/miniscript-docker /src
RUN echo $(date +%s) > updated
FROM clone as make
WORKDIR /src
RUN make miniscript
RUN echo $(date +%s) > updated
RUN install miniscript /usr/local/bin
RUN echo $(date +%s) > updated
RUN make miniscript.js
RUN echo $(date +%s) > updated
RUN make miniscript.js ##TODO: better buildx multiplatform building
#RUN echo $(date +%s) > updated
FROM make as install
RUN install ./miniscript /usr/local/bin
RUN echo $(date +%s) > updated
RUN install ./miniscript-* /usr/local/bin
RUN install ./miniscript-** /usr/local/bin
RUN install ./serve /usr/local/bin
RUN echo $(date +%s) > updated
WORKDIR /src
FROM install as miniscript
COPY --from=clone /src /src
ENV PATH=$PATH:/usr/bin/systemctl
RUN ps -p 1 -o comm=
EXPOSE 80 6102 8080 8081
EXPOSE 80 443 6102 8080 8081
VOLUME /src
29 changes: 26 additions & 3 deletions GNUmakefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
## detect ARCH for buildx
ARCH :=$(shell uname -m)
export ARCH
ifeq ($(ARCH),x86_64)
TARGET :=amd64
export TARGET
endif
ifeq ($(ARCH),arm64)
TARGET :=arm64
export TARGET
endif

DOCKER=$(shell which docker)
export DOCKER
PWD=$(shell echo `pwd`)
Expand All @@ -12,21 +24,32 @@ install:
@rm ./miniscript || true
@rm /usr/local/bin/miniscript || true
@$(MAKE) miniscript
@$(MAKE) miniscript.json
@install $(PWD)/miniscript /usr/local/bin/
@install $(PWD)/miniscript-* /usr/local/bin/
@install $(PWD)/miniscript.json /usr/local/bin/
@install $(PWD)/miniscript.json-* /usr/local/bin/

docker:docker-miniscript## docker-build
dockerx:docker-buildx## docker-buildx
docker-build:## docker build -f Dockerfile -t miniscript .
@./miniscript-docker start
@$(DOCKER) pull ghcr.io/bitcoincore-dev/miniscript-docker:latest
@$(DOCKER) build -f Dockerfile -t miniscript .
docker-buildx:## docker buildx build sequence
@./miniscript-docker start
@$(DOCKER) run --privileged --rm tonistiigi/binfmt --install all
@$(DOCKER) buildx ls
@$(DOCKER) buildx create --use --name miniscript-buildx || true
@$(DOCKER) buildx build -t miniscript --platform linux/arm64,linux/amd64 .
@$(DOCKER) buildx build -t miniscript --platform linux/$(TARGET) . --load
docker-miniscript:docker-build## docker-miniscript
@[[ -z "$(shell file ./miniscript | grep inux)" ]] && echo "not linux" && rm ./miniscript || echo "miniscript is built for linux"
@$(DOCKER) run --rm -v $(PWD):/src --publish 80:8080 miniscript sh -c "make install"

.PHONY:test-command
test-command:
@cat $< $@ && exit;
.PHONY:miniscript-tests
miniscript-tests:## miniscript-tests
@bash $< $@ 2>/dev/null || true

example-commands:
@printf "\n"
Expand Down
7 changes: 5 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
HEADERS := bitcoin/util/vector.h bitcoin/util/strencodings.h bitcoin/span.h bitcoin/util/spanparsing.h bitcoin/script/script.h bitcoin/script/miniscript.h compiler.h bitcoin/crypto/common.h bitcoin/serialize.h bitcoin/prevector.h bitcoin/compat/endian.h bitcoin/compat/byteswap.h bitcoin/attributes.h bitcoin/tinyformat.h bitcoin/primitives/transaction.h
SOURCES := bitcoin/util/strencodings.cpp bitcoin/util/spanparsing.cpp bitcoin/script/script.cpp bitcoin/script/miniscript.cpp compiler.cpp

miniscript: $(HEADERS) $(SOURCES) main.cpp
miniscript: $(HEADERS) $(SOURCES) main.cpp## miniscript
g++ -O3 -g0 -Wall -std=c++17 -march=native -flto -Ibitcoin $(SOURCES) main.cpp -o miniscript

miniscript.json: $(HEADERS) $(SOURCES) miniscript.json.cpp## miniscript.json
g++ -O3 -g0 -Wall -std=c++17 -march=native -flto -Ibitcoin $(SOURCES) miniscript.json.cpp -o miniscript.json

miniscript.js: $(HEADERS) $(SOURCES) js_bindings.cpp
em++ -O3 -g0 -Wall -std=c++17 -fno-rtti -flto -Ibitcoin $(SOURCES) js_bindings.cpp -s WASM=1 -s FILESYSTEM=0 -s ENVIRONMENT=web -s DISABLE_EXCEPTION_CATCHING=0 -s EXPORTED_FUNCTIONS='["_miniscript_compile","_miniscript_analyze","_malloc","_free"]' -s EXPORTED_RUNTIME_METHODS='["cwrap","UTF8ToString"]' -o miniscript.js

Expand All @@ -13,4 +16,4 @@ wrapper.dot: wrapper.txt
wrapper.pdf: wrapper.dot
dot -Tpdf <wrapper.dot >wrapper.pdf

.PHONY:miniscript miniscript.js
.PHONY:miniscript miniscript.js miniscript.json
21 changes: 17 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
## miniscript-docker

![miniscript-docker-web](https://github.com/bitcoincore-dev/miniscript-docker/assets/152159/287c6835-b14c-4ae5-a22b-6da9812a8f8d)


#### Usage:

```
Expand Down Expand Up @@ -27,16 +30,16 @@ docker pull ghcr.io/bitcoincore-dev/miniscript-docker:latest


```
miniscript-docker run 'and(pk(A),or(pk(B),or(9@pk(C),older(1000))))'
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/bitcoincore-dev/miniscript-docker/master/miniscript-docker)" - run 'and(pk(A),or(pk(B),or(9@pk(C),older(1000))))'
```

![miniscript-docker-run 1](https://github.com/bitcoincore-dev/miniscript-docker/assets/152159/7f1b02db-7063-41c2-859c-33639eb82d5a)

```
miniscript-docker run 'and_v(or_c(pk(B),or_c(pk(C),v:older(1000))),pk(A))'
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/bitcoincore-dev/miniscript-docker/master/miniscript-docker)" - run 'and_v(or_c(pk(B),or_c(pk(C),v:older(1000))),pk(A))'
```


EXAMPLES
![miniscript-docker-run 2 png](https://github.com/bitcoincore-dev/miniscript-docker/assets/152159/1da94b41-ad45-4bda-8113-fa7b4f1326d5)

##### miniscript-docker examples

Expand All @@ -46,6 +49,16 @@ EXAMPLES

![miniscript-docker-examples](https://github.com/bitcoincore-dev/miniscript-docker/assets/152159/a9b7e0d6-bcdf-4e86-abe7-0af4dd3b887e)


##### miniscript-docker serve

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/bitcoincore-dev/miniscript-docker/master/miniscript-docker)" - serve
```

![miniscript-docker-web](https://github.com/bitcoincore-dev/miniscript-docker/assets/152159/287c6835-b14c-4ae5-a22b-6da9812a8f8d)


<hr>

Go to [the Miniscript website](http://bitcoin.sipa.be/miniscript/).
Expand Down
6 changes: 6 additions & 0 deletions bitcoin/script/miniscript.h
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ struct Node {
case Fragment::WRAP_J: return BuildScript(OP_SIZE, OP_0NOTEQUAL, OP_IF, subs[0], OP_ENDIF);
case Fragment::WRAP_N: return BuildScript(std::move(subs[0]), OP_0NOTEQUAL);
case Fragment::JUST_1: return BuildScript(OP_1);
case Fragment::DO_NOTHING: return BuildScript(OP_1);
case Fragment::JUST_0: return BuildScript(OP_0);
case Fragment::AND_V: return BuildScript(std::move(subs[0]), subs[1]);
case Fragment::AND_B: return BuildScript(std::move(subs[0]), subs[1], OP_BOOLAND);
Expand Down Expand Up @@ -688,6 +689,7 @@ struct Node {
case Fragment::RIPEMD160: return std::move(ret) + "ripemd160(" + HexStr(node.data) + ")";
case Fragment::JUST_1: return std::move(ret) + "1";
case Fragment::JUST_0: return std::move(ret) + "0";
case Fragment::DO_NOTHING: return std::move(ret) + "do_nothing()";
case Fragment::AND_V: return std::move(ret) + "and_v(" + std::move(subs[0]) + "," + std::move(subs[1]) + ")";
case Fragment::AND_B: return std::move(ret) + "and_b(" + std::move(subs[0]) + "," + std::move(subs[1]) + ")";
case Fragment::OR_B: return std::move(ret) + "or_b(" + std::move(subs[0]) + "," + std::move(subs[1]) + ")";
Expand Down Expand Up @@ -727,6 +729,7 @@ struct Node {
switch (fragment) {
case Fragment::JUST_1: return {0, 0, {}};
case Fragment::JUST_0: return {0, {}, 0};
case Fragment::DO_NOTHING: return {0, 0, {}};
case Fragment::PK_K: return {0, 0, 0};
case Fragment::PK_H: return {3, 0, 0};
case Fragment::OLDER:
Expand Down Expand Up @@ -799,6 +802,7 @@ struct Node {
internal::StackSize CalcStackSize() const {
switch (fragment) {
case Fragment::JUST_0: return {{}, 0};
case Fragment::DO_NOTHING:
case Fragment::JUST_1:
case Fragment::OLDER:
case Fragment::AFTER: return {0, {}};
Expand Down Expand Up @@ -1014,6 +1018,7 @@ struct Node {
return {INVALID, std::move(x.sat)};
}
case Fragment::JUST_0: return {EMPTY, INVALID};
case Fragment::DO_NOTHING: return {INVALID, EMPTY};
case Fragment::JUST_1: return {INVALID, EMPTY};
}
assert(false);
Expand Down Expand Up @@ -1168,6 +1173,7 @@ struct Node {
switch (node.fragment) {
case Fragment::JUST_0:
return false;
case Fragment::DO_NOTHING:
case Fragment::JUST_1:
return true;
case Fragment::PK_K:
Expand Down
8 changes: 8 additions & 0 deletions compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,9 @@ const Strat* ComputeStrategy(const Policy& node, std::unordered_map<const Policy
strats.push_back(MakeStrat(store, Strat::Type::THRESH, subs, node.k, (double)node.k / subs.size()));
break;
}
case Policy::Type::DO_NOTHING:
strats.push_back(MakeStrat(store, Strat::Type::JUST_1));
break;
}

if (strats.size() != 1) {
Expand Down Expand Up @@ -498,6 +501,7 @@ CostPair CalcCostPair(Fragment nt, const std::vector<const Result*>& s, double l
case Fragment::WRAP_J: return {s[0]->pair.sat, 1};
case Fragment::JUST_1: return {0, INF};
case Fragment::JUST_0: return {INF, 0};
case Fragment::DO_NOTHING: return {0, INF};
case Fragment::AND_V: return {s[0]->pair.sat + s[1]->pair.sat, INF};
case Fragment::AND_B: return {s[0]->pair.sat + s[1]->pair.sat, s[0]->pair.nsat + s[1]->pair.nsat};
case Fragment::OR_B:
Expand Down Expand Up @@ -604,6 +608,7 @@ const TypeFilters& GetTypeFilter(Fragment nt) {
case Fragment::HASH160:
case Fragment::SHA256:
case Fragment::RIPEMD160:
case Fragment::DO_NOTHING:
return FILTER_NO;
case Fragment::WRAP_A: return FILTER_WRAP_A;
case Fragment::WRAP_S: return FILTER_WRAP_S;
Expand Down Expand Up @@ -712,6 +717,9 @@ void Compile(const Strat* strat, Compilation& compilation, std::map<CompilationK
case Strat::Type::JUST_1:
Add(compilation, cache, Fragment::JUST_1, strat->sub, 0, 0);
return;
case Strat::Type::DO_NOTHING:
Add(compilation, cache, Fragment::JUST_1, strat->sub, 0, 0);
return;
case Strat::Type::AFTER:
case Strat::Type::OLDER: {
Add(compilation, cache, strat->node_type == Strat::Type::OLDER ? Fragment::OLDER : Fragment::AFTER, strat->sub, 0, 0, strat->k);
Expand Down
40 changes: 2 additions & 38 deletions main.cpp
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -17,49 +17,13 @@ static bool run(std::string&& line, int64_t count) {
miniscript::NodeRef<std::string> ret;
double avgcost = 0;
if (Compile(Expand(line), ret, avgcost)) {

auto str = ret->ToString(COMPILER_CTX);

assert(str);

printf(
"\n{ \"X\":\"X\",\n\"2\":\"%17.10f\",\n\"3\":\"%5i\",\n\"4\":\"%s\"\n }\n",
ret->ScriptSize() + avgcost, (int)ret->ScriptSize(),
Abbreviate(std::move(*str)).c_str()
);

printf("X %17.10f %5i %s %s\n", ret->ScriptSize() + avgcost, (int)ret->ScriptSize(), Abbreviate(std::move(*str)).c_str(), line.c_str());
} else if ((ret = miniscript::FromString(Expand(line), COMPILER_CTX))) {

auto ms = ret->ToString(COMPILER_CTX);
assert(ms);
printf("{ \"count\": \"%7li\",\n",(long)count);
printf("\"scriptlen\" : \"%i\",\n",(int)ret->ScriptSize());
printf("\"maxops\" : \"%i\",\n",(int)ret->GetOps());
printf("\"type\" : \"%s\",\n",ret->GetType() << "B"_mst ? "B" : ret->GetType() << "V"_mst ? "V" : ret->GetType() << "W"_mst ? "W" : ret->GetType() << "K"_mst ? "K" : "(invalid)");

printf("\"safe\" : \"%s\",\n",ret->GetType() << "s"_mst ? "yes" : "no");
printf("\"nonmal\" : \"%s\",\n",ret->GetType() << "m"_mst ? "yes" : "no");
printf("\"dissat\" : \"%s\",\n",ret->GetType() << "f"_mst ? "no" : ret->GetType() << "e"_mst ? "unique" : ret->GetType() << "d"_mst ? "yes" : "unknown");
printf("\"input\" : \"%s\",\n",ret->GetType() << "z"_mst ? "0" : ret->GetType() << "o"_mst ? (ret->GetType() << "n"_mst ? "1n" : "1") : ret->GetType() << "n"_mst ? "n" : "-");
printf("\"output\" : \"%s\",\n",ret->GetType() << "u"_mst ? "1" : "nonzero");
printf("\"timelock_mix\" : \"%s\",\n",ret->GetType() << "k"_mst ? "no": "yes");
printf("\"miniscript\" : \"%s\" }\n",Abbreviate(*ms).c_str());



assert(ms);
// printf("%7li\nscriptlen=%i\nmaxops=%i\ntype=%s\nsafe=%s\nnonmal=%s\ndissat=%s\ninput=%s\noutput=%s\ntimelock_mix=%s\nminiscript=%s\n",
// (long)count,
// (int)ret->ScriptSize(),
// (int)ret->GetOps(),
// ret->GetType() << "B"_mst ? "B" : ret->GetType() << "V"_mst ? "V" : ret->GetType() << "W"_mst ? "W" : ret->GetType() << "K"_mst ? "K" : "(invalid)",
// ret->GetType() << "s"_mst ? "yes" : "no",
// ret->GetType() << "m"_mst ? "yes" : "no",
// ret->GetType() << "f"_mst ? "no" : ret->GetType() << "e"_mst ? "unique" : ret->GetType() << "d"_mst ? "yes" : "unknown",
// ret->GetType() << "z"_mst ? "0" : ret->GetType() << "o"_mst ? (ret->GetType() << "n"_mst ? "1n" : "1") : ret->GetType() << "n"_mst ? "n" : "-",
// ret->GetType() << "u"_mst ? "1" : "nonzero",
// ret->GetType() << "k"_mst ? "no": "yes",
// Abbreviate(*ms).c_str());
printf("%7li scriptlen=%i maxops=%i type=%s safe=%s nonmal=%s dissat=%s input=%s output=%s timelock_mix=%s miniscript=%s\n", (long)count, (int)ret->ScriptSize(), (int)ret->GetOps(), ret->GetType() << "B"_mst ? "B" : ret->GetType() << "V"_mst ? "V" : ret->GetType() << "W"_mst ? "W" : ret->GetType() << "K"_mst ? "K" : "(invalid)", ret->GetType() << "s"_mst ? "yes" : "no", ret->GetType() << "m"_mst ? "yes" : "no", ret->GetType() << "f"_mst ? "no" : ret->GetType() << "e"_mst ? "unique" : ret->GetType() << "d"_mst ? "yes" : "unknown", ret->GetType() << "z"_mst ? "0" : ret->GetType() << "o"_mst ? (ret->GetType() << "n"_mst ? "1n" : "1") : ret->GetType() << "n"_mst ? "n" : "-", ret->GetType() << "u"_mst ? "1" : "nonzero", ret->GetType() << "k"_mst ? "no": "yes", Abbreviate(*ms).c_str());
} else {
printf("Failed to parse as policy or miniscript '%s'\n", line.c_str());
}
Expand Down
3 changes: 1 addition & 2 deletions miniscript-docker
Original file line number Diff line number Diff line change
Expand Up @@ -183,11 +183,10 @@ function shell (){
docker-start
docker \
run \
-d \
-t \
-i \
--rm \
-p 127.0.0.1:$PORT:8080/tcp \
-p 127.0.0.1:0:8080/tcp \
-v `pwd`:/src miniscript bash

}
Expand Down
3 changes: 3 additions & 0 deletions miniscript-test-0
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
#
echo "or_i(and_v(v:thresh(2,pkh(M1),a:pkh(M2),a:pkh(M3)),after(1005)),and_v(v:thresh(2,pk(P1),s:pk(P2),s:pk(P3),sun:after(1002),sun:after(1003)),and_v(or_c(pk(SA1),or_c(pk(SA3),v:pkh(SA2))),thresh(2,pk(A1),s:pk(A2),s:pk(A3),sln:after(1004)))))" | miniscript
Loading
Loading