diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3418fbe --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "bdk-cli"] + path = bdk-cli + url = https://www.github.com/bitcoindevkit/bdk-cli diff --git a/Dockerfile b/Dockerfile index b65bc3e..9168e80 100755 --- a/Dockerfile +++ b/Dockerfile @@ -6,16 +6,15 @@ RUN echo $(date +%s) > updated RUN apt-get update RUN echo $(date +%s) > updated FROM base as systemd -RUN apt-get install systemd bash jq -y -RUN echo $(date +%s) > updated +RUN apt-get install systemd -y RUN chmod +x /usr/bin/systemctl RUN echo $(date +%s) > updated FROM systemd as clone -RUN rm -rf /src -RUN git clone --branch v0.0.10 --depth 1 https://github.com/bitcoincore-dev/miniscript-docker /src +WORKDIR /tmp +RUN git clone --recurse-submodules -j2 --branch v0.0.10 --depth 1 https://github.com/bitcoincore-dev/miniscript-docker RUN echo $(date +%s) > updated FROM clone as make -WORKDIR /src +WORKDIR /tmp/miniscript-docker RUN make miniscript RUN echo $(date +%s) > updated RUN install miniscript /usr/local/bin @@ -31,6 +30,12 @@ RUN echo $(date +%s) > updated WORKDIR /src FROM install as miniscript COPY --from=clone /src /src +FROM miniscript as bdk_cli +RUN apt-get install cargo -y +RUN apt-get clean autoclean +RUN apt-get autoremove --yes +RUN rm -rf /var/lib/{apt,dpkg,cache,log}/ +RUN cargo install --git https://github.com/bitcoindevkit/bdk-cli --features="compiler" ENV PATH=$PATH:/usr/bin/systemctl RUN ps -p 1 -o comm= EXPOSE 80 443 6102 8080 8081 diff --git a/GNUmakefile b/GNUmakefile index 7de33a4..5a0d5b5 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -15,10 +15,21 @@ export DOCKER PWD=$(shell echo `pwd`) export PWD +ifneq ($(port),) +PORT :=$(port) +else +PORT :=8080 +endif +export PORT + -: @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?##/ {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + -include Makefile +submodules:## submodules + git submodule update --init --recursive + .PHONY:install install: @rm ./miniscript || true @@ -45,15 +56,30 @@ docker-buildx:## docker buildx build sequence @$(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" + @$(DOCKER) run --rm -v $(PWD):/src --publish 8080:$(PORT) miniscript sh -c "make install" .PHONY:miniscript-tests -miniscript-tests:## miniscript-tests +miniscript-tests:## miniscript-tests @bash $< $@ 2>/dev/null || true +example-tests:## example-tests + @echo + @cat example1.miniscript | miniscript && echo + @cat example2.miniscript | miniscript && echo + +example-json-tests:## example-json-tests + @echo "{\"test\":\"test\"}" jq >/dev/null | jq || echo "install jq" + @echo "{\"test\": 0}" | jq >/dev/null || echo "install jq" + @cat example1.miniscript | miniscript.json #| jq .miniscript | sed 's/\"//g' | miniscript + @cat example1.miniscript | miniscript.json #| jq .miniscript | sed 's/\"//g' | miniscript + example-commands: + @printf "$(DOCKER) run --rm -v $(PWD):/src --publish 8080:$(PORT) miniscript sh -c \"make miniscript\"\n" + @printf "$(DOCKER) run --rm -v $(PWD):/src --publish 8080:$(PORT) miniscript sh -c \"make install\"\n" + @printf "$(DOCKER) run --rm -v $(PWD):/src --publish 8080:$(PORT) miniscript sh -c \"which miniscript\"\n" + @printf "$(DOCKER) run --rm -v $(PWD):/src --publish 8080:$(PORT) miniscript sh -c \"make miniscript.js\"\n" @printf "\n" - @printf "./docker-miniscript \"make miniscript >/dev/null && ls\"" + @printf "./miniscript-docker \"make miniscript >/dev/null && ls\"" @printf "\n" @printf "./docker-miniscript \"make miniscript >/dev/null && cat 1.miniscript | ./miniscript\"" @printf "\n" diff --git a/bdk-cli b/bdk-cli new file mode 160000 index 0000000..6f61d2e --- /dev/null +++ b/bdk-cli @@ -0,0 +1 @@ +Subproject commit 6f61d2eb82d1427d337c3e437340a7c14e067eb4 diff --git a/example1.miniscript b/example1.miniscript new file mode 100644 index 0000000..3d37ab3 --- /dev/null +++ b/example1.miniscript @@ -0,0 +1 @@ +and_v(v:pk(PUB_KEY0),pk_k(PUB_KEY1)) diff --git a/example2.miniscript b/example2.miniscript new file mode 100644 index 0000000..e7518c1 --- /dev/null +++ b/example2.miniscript @@ -0,0 +1 @@ +thresh(3,pk(PUB_KEY0),pk(PUB_KEY1),pk(PUB_KEY2)) diff --git a/example3.miniscript b/example3.miniscript new file mode 100644 index 0000000..8dec01a --- /dev/null +++ b/example3.miniscript @@ -0,0 +1 @@ +and_v(pk(PUB_KEY0),and_v(pk(PUB_KEY1),pk(PUB_KEY3))) diff --git a/miniscript-docker b/miniscript-docker index a1138ce..8b8a6de 100755 --- a/miniscript-docker +++ b/miniscript-docker @@ -132,10 +132,10 @@ function help { printf "\n" printf " miniscript-docker shell\n" printf "\n" - printf " PORT=6102 miniscript-docker serve\n" - printf "\n" printf " miniscript-docker run ''" printf "\n" + printf " PORT=80 miniscript-docker serve\n" + printf "\n" exit; } diff --git a/miniscript-test-block-loop.sh b/miniscript-test-block-loop.sh new file mode 100755 index 0000000..cac3968 --- /dev/null +++ b/miniscript-test-block-loop.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +for i in {1..999999}; do + #echo $i + echo "thresh(2,pk(PUBKEY0),pk(PUBKEY1),after($i))" | miniscript + for j in {0..9}; do + #echo $j + echo "thresh(3,pk(PUBKEY0),pk(PUBKEY1),pk(PUBKEY2),after($i$j))" | miniscript + for k in {0..9}; do + #echo $k + echo "thresh(4,pk(PUBKEY0),pk(PUBKEY1),pk(PUBKEY2),pk(PUBKEY3),after($i$j$k))" | miniscript.json + echo "thresh(4,pk(PUBKEY0),pk(PUBKEY1),pk(PUBKEY2),pk(PUBKEY3),older($i$j$k))" | miniscript.json + ##echo "thresh(2,after(1$i$j$k),after($i$j),pk(PUBKEY0))" | miniscript + done + done +done + + +echo "thresh(2,ltv:after(1000000000),altv:after(100),a:pk(PUBKEY0))" | ./miniscript diff --git a/miniscript-test-utc-loop.sh b/miniscript-test-utc-loop.sh new file mode 100755 index 0000000..9cd3fa6 --- /dev/null +++ b/miniscript-test-utc-loop.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +for i in {0..9}; do + echo $i + [ $i -gt 0 ] && echo "thresh(2,ltv:after($i),altv:after(1$i),a:pk(0))" | miniscript + for j in {0..9}; do + echo $i $j + [ $i -gt 0 ] && [ $j -gt 0 ] && echo "thresh(2,ltv:after($i$j),altv:after(1$i$j),a:pk(0))" | miniscript + for k in {0..9}; do + echo $i $j $k + echo "thresh(2,ltv:after(1$i$j$k$i$j$k$i$j$k),altv:after($j$k),a:pk(0))" | miniscript + done + done +done +echo "thresh(2,ltv:after(1000000000),altv:after(100),a:pk(0))" | miniscript diff --git a/miniscript-tests b/miniscript-tests index a7e3a15..5f35260 100755 --- a/miniscript-tests +++ b/miniscript-tests @@ -1,13 +1,40 @@ #!/usr/bin/env bash +# +JQ=$(which jq) +MINISCRIPT_JSON=$(which miniscript.json) +export MINISCRIPT_JSON [[ -z "$(command -v miniscript-tests)" ]] && \ install $0 /usr/local/bin || true -## add your won tests + +## add your own tests ## miniscript-test-0 -## miniscript-test-1000 +## miniscript-test-100 ## etc.. -TESTS=$(echo miniscript-test-{0..1000}*) +TESTS=$(echo miniscript-test-{0..100}*) +#echo $TESTS + +## echo $JQ + +if [[ ! -z $JQ ]];then + + ## echo $JQ + + if [[ "$1" == "--json" ]] || [[ "$1" == "-j" ]]; then + + JSON_TESTS=$(echo miniscript.json-test-{0..100}*) + + ## echo $JSON_TESTS; + for ms in $JSON_TESTS + do + . $ms 2>/dev/null || true + done + exit; + + fi +fi + for ms in $TESTS do . $ms 2>/dev/null