From 1ddaa66eae67b102f5e37d212d366a5dcad4aa26 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 28 Aug 2019 16:23:03 -0700 Subject: Miniscript: type system, script creation, text notation, tests More information about Miniscript can be found at https://bitcoin.sipa.be/miniscript/ (the website source is hosted at https://github.com/sipa/miniscript/). This commit defines all fragments, their composition, parsing from string representation and conversion to Script. Co-Authored-By: Antoine Poinsot Co-Authored-By: Sanket Kanjalkar Co-Authored-By: Samuel Dobson --- src/Makefile.am | 2 + src/Makefile.test.include | 1 + src/script/miniscript.cpp | 295 ++++++++++++ src/script/miniscript.h | 1020 +++++++++++++++++++++++++++++++++++++++++ src/test/miniscript_tests.cpp | 247 ++++++++++ 5 files changed, 1565 insertions(+) create mode 100644 src/script/miniscript.cpp create mode 100644 src/script/miniscript.h create mode 100644 src/test/miniscript_tests.cpp (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index e940736b71..651722cfd0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -221,6 +221,7 @@ BITCOIN_CORE_H = \ scheduler.h \ script/descriptor.h \ script/keyorigin.h \ + script/miniscript.h \ script/sigcache.h \ script/sign.h \ script/signingprovider.h \ @@ -589,6 +590,7 @@ libbitcoin_common_a_SOURCES = \ rpc/util.cpp \ scheduler.cpp \ script/descriptor.cpp \ + script/miniscript.cpp \ script/sign.cpp \ script/signingprovider.cpp \ script/standard.cpp \ diff --git a/src/Makefile.test.include b/src/Makefile.test.include index a7505b9bcf..23bb967c20 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -103,6 +103,7 @@ BITCOIN_TESTS =\ test/merkle_tests.cpp \ test/merkleblock_tests.cpp \ test/miner_tests.cpp \ + test/miniscript_tests.cpp \ test/minisketch_tests.cpp \ test/multisig_tests.cpp \ test/net_peer_eviction_tests.cpp \ diff --git a/src/script/miniscript.cpp b/src/script/miniscript.cpp new file mode 100644 index 0000000000..8074be6cde --- /dev/null +++ b/src/script/miniscript.cpp @@ -0,0 +1,295 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include