798bf67e21977ad18ee680a14e23e534f64a3ea5 commands: derive Deserialize for commands results (Antoine Poinsot)
fe5de96312dc8d57f982c060d4b9b045c2194163 Shorten the paths to the dummy datadirs in the unit tests (Antoine Poinsot)
069bca546a23ce1b1714b9564973f13a6f090536 jsonrpc: don't use a Mutex to share the DaemonControl between threads (Antoine Poinsot)
e6fcdd5b095232729cbeef4bd42bf6e57d77ffde jsonrpc: don't umask in unit tests (Antoine Poinsot)
14bd3890dcf6c5dc9fbe25992710c80c9ff107c7 doc: add an API.md documenting the JSONRPC API. (Antoine Poinsot)
eeac67dc0a7724ef4ca9003b7e734f546e62c0ae qa: shut down the daemon via the JSONRPC interface at teardown (Antoine Poinsot)
726209cc0a07d12c71041573313d5b34def30bbd jsonrpc: add a 'stop' command (Antoine Poinsot)
d03c46996798d9e5d68858c4d4631e6b3295f9b3 Introduce a testutils module with a DummyMinisafe for unit tests (Antoine Poinsot)
e510c0a30dd18445d595e403d5cddd8fe04ef1b6 config: separate the Bitcoin and bitcoind-specifc settings (Antoine Poinsot)
ea3595349d0051912ce187ca27de7a6df9b6e7e6 Accept a custom database interface when starting the daemon (Antoine Poinsot)
f365effacd12d0d3fce105dbc59e7ccf5f85488c Accept a custom Bitcoin interface when starting the daemon (Antoine Poinsot)
93098be7dcb82808f6644eee97005c6607eb0cda tests: implement the connection to the daemon's RPC server (Antoine Poinsot)
0d55d6c45599c2a4996f10c5066041369c06d9b1 jsonrpc: a simple JSONRPC2 server (Antoine Poinsot)
dd1b353a36feb04b1af5553e9c71763957996af0 commands: derive serde::Serialize for results (Antoine Poinsot)
86c1d32662e7fda9887da5f799e42cce73228448 bitcoin: name the Bitcoin poller thread (Antoine Poinsot)
6b2e90181484d5dd0ed4ee23b78ab705d98b5c36 bit poller: fix a off logged percentage (Antoine Poinsot)
6ff43fcd9543acb79d6f4c343e102f5029f5480f daemon: log the name of the current thread, too. (Antoine Poinsot)
a067daf16b99a8bdaad1034f2e539c60108a1b4a tests: use a ranged descriptor (Antoine Poinsot)
5228ee370bad72efd98d27e2181fb1ee1c27bae2 tests: remove mistakenly committed file (Antoine Poinsot)
Pull request description:
On top of #9, this introduces a simple JSONRPC server calling into the exposed commands. I started by reusing code from revaultd, but ended up rewriting it entirely. Compared to it, it t is simpler, smaller and dependency-less.
In order to sanity check the whole server startup and teardown in unit tests, this took a detour by introducing a `testutils` module with mocked Bitcoin and database interfaces. Those will be useful later.
This introduces a JSONRPC-specifc command: `stop`, which shuts down the daemon. We add a `doc/API.md` adapted from #1 with documentation for the existing commands.
ACKs for top commit:
darosior:
self-ACK 798bf67e21977ad18ee680a14e23e534f64a3ea5 -- tested using following PRs #13 and #17.
Tree-SHA512: 2eb07c29904e1f71f7375aa5729d5f3bfc5649627a92ef6e49dd273f91a8d4c4243b495eb87d09fa44198ef125066161cf6a2c86af14b4135d806c8baca217b2
This also implements a simple JSONRPC server sanity check
And introduces a new tmp_dir() test utility, that i didn't have the courage to split from this commit
So we can have unit tests without a dummy bitcoind thread, as we
currently do for the startup test.
This commit also implements sanity checks for the two existing commands
using this mechanism.
The Bitcoin interface was thought of as being generic, but a caller
couldn't use one different from bitcoind. Make it so they can, and fix
our trait and generics implementations.
8b95b9f449f41b1f158815ec8d8b062069fae155 Make commands module public (edouard)
Pull request description:
It allows the gui to import commands
responses structs.
ACKs for top commit:
darosior:
ACK 8b95b9f449f41b1f158815ec8d8b062069fae155
Tree-SHA512: 3ccfd5acae8e02bf3dd3e14cbb89be86c4dca21bd7699ba633b0cc04a22c5701cc9ce0f4c62442dca8e5a1075bd3666d52b6deaa5241d622f50e9e672c0c5dd0
2609061a69c99e5b5f05b2a105751e5509055d54 commands: implement getnewaddress (Antoine Poinsot)
8309c85e303ece0110ed1f84a5748ecc82f25566 commands: a module for the implementation of the API (Antoine Poinsot)
4b659bc35a0fdf0a853f80bcf836c9b9d0193c5b lib: introduce a VERSION constant, the daemon version (Antoine Poinsot)
fd86cfccee0c43306890829e4be7bd3666380147 lib: introduce a daemon controller for the API (Antoine Poinsot)
Pull request description:
This module contains the implementation of our external API. Like the others, it's very inspired (or grossly copied from) `revaultd`.
This PR implements the `getinfo` and `getnewaddress` commands to showcase the usage of the new `DaemonControl` command.
ACKs for top commit:
darosior:
ACK 2609061a69c99e5b5f05b2a105751e5509055d54, adapted from already reviewed `revaultd` code, and largely tested through follow-up #11
Tree-SHA512: 5e30a29807ec854b6d2e8ca0eb340ca45146cd726810875435f4d5959cd5d6f44ceed19439edaf6477e8bf747af3b551edc8d424c4462475a5924f1b8d13c648
dd37255d7b03051aa8924127112ff8fac6c38ff7 bitcoin: update our tip in the poller (Antoine Poinsot)
6997adc073981c3c786ab7e1244330fcc1d7afc7 daemon: bitcoin: introduce the Bitcoin poller (Antoine Poinsot)
Pull request description:
This introduces the Bitcoin poller, an event loop in a new thread that continuously poll our Bitcoin backend to update our state. This is kept minimal; only introduce the necessary components (Bitcoin interface, DB interface) and as such it only takes care of updating the best tip at the moment.
ACKs for top commit:
darosior:
self-ACK dd37255d7b03051aa8924127112ff8fac6c38ff7 -- again, it was inspired and adapted from revaultd, where a similar logic was reviewed and well tested. This PR was tested with the following one, #9.
Tree-SHA512: d630659c75f172754ecfb4df7892d55184b20c848eff4a6184fb45669d57aa87de9377740b5c1bccf7829d859aed8d040c84f3040bb95d478dc41fbd7db157bf
9b98b0852d1d34496493f3b26219593f549f0ac4 descriptors: a module for users to create our descriptors (Antoine Poinsot)
Pull request description:
Eventually this module will contain the routines to create all the descriptors we support. For now it only contains the one for the inheritance descriptor.
ACKs for top commit:
edouardparis:
ACK 9b98b0852d1d34496493f3b26219593f549f0ac4
Tree-SHA512: 8f51f628d7229ecfa41192278ea4fe1dce1de65e5f9a512f2bd17cc5aab906c7ec275755ca4316e356f9f1e9bc03bad22729120a0d65c7bc6d979151db3e1b16
568078aa5bee793e3bbfddedfd42f51daa8aa9ec daemon: remove bitcoind folder (Antoine Poinsot)
Pull request description:
It was mistakenly committed as part of the introduction of the bitcoind module
ACKs for top commit:
darosior:
ACK 568078aa5bee793e3bbfddedfd42f51daa8aa9ec -- trivial
Tree-SHA512: 8083e00bbd7bf71431de100c3d9047f69afc8f768b52eed7a39e7b762160d0567e56ccb874a6400d60fab7703cd79b5ea59ed815494b15a7b77dbace707c5644
7c3289fda95aa79ca62258f14b7afb28548f5541 tests: add a functional test framework, adapted from revaultd (Antoine Poinsot)
cea72d8a63a247c8bcba39ecd487731d045d75eb bitcoind: don't try to match bitcoind's error string when loading wallet (Antoine Poinsot)
096ad68c4bd1b0332835fdbacb5d540a71646217 bitcoind: correctly check for errors when creating wallet (Antoine Poinsot)
5db59b1c892b82f2778949d2a51093507165b2c0 git: add a gitignore (Antoine Poinsot)
Pull request description:
This adds a Python functional tests framework, taken and adapted from `revaultd`. Since we don't have a JSONRPC interface yet it only contains a single trivial startup functional test... And 2 bug fixes this trivial test uncovered! :)
CI integration is still TODO, but it's not critical at the moment and i don't have the heart of fighting with it at the moment (we require a non-standard `bitcoind`).
ACKs for top commit:
darosior:
ACK 7c3289fda95aa79ca62258f14b7afb28548f5541 -- mostly adapted from revaultd, and tested with the following PRs rebased on this one.
Tree-SHA512: 95bd8ecfe70b1c7bacd17d10f009ec1bcc0211cb66b9545fa25c70b02a0f12d81e7747fc94c00de62f9aa7de17e7eb95183d8a2ffa659628f40313ef6bc43a1d
512b5b7d120e929b6e2f275d4427d8c5207d6b85 daemon: gate startup unit test to UNIX only (Antoine Poinsot)
ad3297755889a5eb14745e2908a8185eedef6b3e Don't compile daemon and cli binaries on Windows (Antoine Poinsot)
11cc4dc2e689981a308e99882eb7b9a4c66f2117 Cargo: pin rusqlite dependency for MSRV (Antoine Poinsot)
7340c13142b84e1709c765a6a88018ac7177d55a daemon: implement daemonize for UNIX platforms (Antoine Poinsot)
c095346e17bbbbbf8f6877119ef8a5e4ee33273c Introduce the Bitcoin network interface along with a bitcoind module (Antoine Poinsot)
8626e05a55f8e0141ce5ffd917f0f39497b34c63 ci: basic GA for unit tests on various platforms (Antoine Poinsot)
b0196ab5294def4afbe4b9f5d130785e189c392e daemon: introduce an SQLite database (Antoine Poinsot)
989a2cf8fde3178a41e600c684756c3270b240bd daemon: introduce the DaemonHandle, which for now only creates a datadir (Antoine Poinsot)
1b3519644802de3cfef1723f2f144dc08fe1f358 daemon: backbone and configuration parsing (Antoine Poinsot)
Pull request description:
This implements the configuration, database backend, bitcoind connection and initialization of the Minisafe daemon.
A lot of code was ported from revaultd and miradord, although the interface (for bitcoind and the database) changed and many things were re-written. This contains some basic unit tests for startup and database initialization. I intend to port the functional test framework from revaultd in a future PR.
ACKs for top commit:
darosior:
ACK 512b5b7d120e929b6e2f275d4427d8c5207d6b85 -- most of this code was reviewed and tested in `revaultd` and `miradord`. I also manually tested it.
Tree-SHA512: a4c1384798b976d25391513f6455f96b73ed3b07b668ff1cf1f3a77e6bce3b1e2f559df1128dbf47e30a77c4bf30d177176b6400a34e7237a5227053f34b8dd5