Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 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
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
4 changes: 4 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,6 @@ apple-touch-icon.png

#macos
**.DS_Store**

bash_profile.log
buildx.dockerfile
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
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
14 changes: 14 additions & 0 deletions miniscript-tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

[[ -z "$(command -v miniscript-tests)" ]] && \
install $0 /usr/local/bin || true
## add your won tests
## miniscript-test-0
## miniscript-test-1000
## etc..

TESTS=$(echo miniscript-test-{0..1000}*)
for ms in $TESTS
do
. $ms 2>/dev/null
done
Loading