347 Commits

Author SHA1 Message Date
Antoine Poinsot
14bd3890dc
doc: add an API.md documenting the JSONRPC API.
Co-Authored-By: Edouard Paris <m@edouard.paris>
2022-08-17 19:39:58 +02:00
Antoine Poinsot
eeac67dc0a
qa: shut down the daemon via the JSONRPC interface at teardown 2022-08-17 19:39:58 +02:00
Antoine Poinsot
726209cc0a
jsonrpc: add a 'stop' command
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
2022-08-17 19:39:57 +02:00
Antoine Poinsot
d03c469967
Introduce a testutils module with a DummyMinisafe for unit tests
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.
2022-08-17 19:39:56 +02:00
Antoine Poinsot
e510c0a30d
config: separate the Bitcoin and bitcoind-specifc settings 2022-08-17 19:39:56 +02:00
Antoine Poinsot
ea3595349d
Accept a custom database interface when starting the daemon 2022-08-17 19:39:55 +02:00
Antoine Poinsot
f365effacd
Accept a custom Bitcoin interface when starting the daemon
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.
2022-08-17 19:39:55 +02:00
Antoine Poinsot
93098be7dc
tests: implement the connection to the daemon's RPC server
And add some basic sanity check of the existing commands.
2022-08-17 19:39:54 +02:00
Antoine Poinsot
0d55d6c455
jsonrpc: a simple JSONRPC2 server 2022-08-17 19:39:54 +02:00
Antoine Poinsot
dd1b353a36
commands: derive serde::Serialize for results 2022-08-17 19:39:53 +02:00
Antoine Poinsot
86c1d32662
bitcoin: name the Bitcoin poller thread 2022-08-17 19:39:52 +02:00
Antoine Poinsot
6b2e901814
bit poller: fix a off logged percentage 2022-08-17 19:39:52 +02:00
Antoine Poinsot
6ff43fcd95
daemon: log the name of the current thread, too. 2022-08-17 19:39:51 +02:00
Antoine Poinsot
a067daf16b
tests: use a ranged descriptor 2022-08-17 19:39:51 +02:00
Antoine Poinsot
5228ee370b
tests: remove mistakenly committed file 2022-08-17 19:39:50 +02:00
Antoine Poinsot
20474d4ebf
Merge #12: Make commands module public
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
2022-08-16 14:54:00 +02:00
edouard
8b95b9f449 Make commands module public
It allows the gui to import commands
responses structs.
2022-08-15 16:40:11 +02:00
Antoine Poinsot
6451506dcb
Merge #9: Introduce the commands module
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
2022-08-11 13:25:52 +02:00
Antoine Poinsot
2609061a69
commands: implement getnewaddress 2022-08-06 10:53:47 +02:00
Antoine Poinsot
8309c85e30
commands: a module for the implementation of the API 2022-08-06 10:53:47 +02:00
Antoine Poinsot
4b659bc35a
lib: introduce a VERSION constant, the daemon version 2022-08-06 10:53:46 +02:00
Antoine Poinsot
fd86cfccee
lib: introduce a daemon controller for the API
This also finalizes the shutdown implementation
2022-08-06 10:53:46 +02:00
Antoine Poinsot
06b009a479
Merge #6: Bitcoin interface poller
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
2022-07-30 15:21:10 +02:00
Antoine Poinsot
b7314c8d74
Merge #7: Descriptors creation
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
2022-07-29 14:43:20 +02:00
Antoine Poinsot
9b98b0852d
descriptors: a module for users to create our descriptors 2022-07-29 12:16:50 +02:00
Antoine Poinsot
dd37255d7b
bitcoin: update our tip in the poller
This introduces the DB connection in the poller thread
2022-07-27 12:30:53 +02:00
Antoine Poinsot
6997adc073
daemon: bitcoin: introduce the Bitcoin poller 2022-07-27 12:30:52 +02:00
Antoine Poinsot
1f35885087
Merge #5: daemon: remove bitcoind folder
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
2022-07-27 11:40:35 +02:00
Antoine Poinsot
55a79b7751
Merge #3: Functional tests framework
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
2022-07-27 11:39:56 +02:00
Antoine Poinsot
1bace64e75
Merge #4: fix crate name: minisafe
0d79a31eb2e757be4b5faf93aaa13ad6a9448acd fix crate name: minisafe (edouard)

Pull request description:

ACKs for top commit:
  darosior:
    Github utACK 0d79a31eb2e757be4b5faf93aaa13ad6a9448acd

Tree-SHA512: 72d9a87c261adaafca9796c4c9fcce7de6dc4109bc14b6a19137df86e5aa583fe1b12896fe54bd9b82d41fb8729279ed26256258432c3505df5376664cf74867
2022-07-26 15:39:21 +02:00
Antoine Poinsot
568078aa5b
daemon: remove bitcoind folder
It was mistakenly committed as part of the introduction of the bitcoind module
2022-07-26 15:38:36 +02:00
edouard
0d79a31eb2 fix crate name: minisafe 2022-07-26 10:46:16 +02:00
Antoine Poinsot
7c3289fda9
tests: add a functional test framework, adapted from revaultd 2022-07-25 16:31:35 +02:00
Antoine Poinsot
cea72d8a63
bitcoind: don't try to match bitcoind's error string when loading wallet
The functional tests uncovered another error. And trying to pattern match any error is brittle. Just explicitly let anything through.
2022-07-25 16:01:04 +02:00
Antoine Poinsot
096ad68c4b
bitcoind: correctly check for errors when creating wallet 2022-07-25 15:59:07 +02:00
Antoine Poinsot
1aa9414927
Merge #2: Minisafe daemon backbone
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
2022-07-25 11:44:36 +02:00
Antoine Poinsot
5db59b1c89
git: add a gitignore 2022-07-25 11:43:04 +02:00
Antoine Poinsot
512b5b7d12
daemon: gate startup unit test to UNIX only 2022-07-25 11:37:57 +02:00
Antoine Poinsot
ad32977558
Don't compile daemon and cli binaries on Windows 2022-07-25 11:37:56 +02:00
Antoine Poinsot
11cc4dc2e6
Cargo: pin rusqlite dependency for MSRV
Sigh...
2022-07-25 11:37:56 +02:00
Antoine Poinsot
7340c13142
daemon: implement daemonize for UNIX platforms 2022-07-25 11:37:55 +02:00
Antoine Poinsot
c095346e17
Introduce the Bitcoin network interface along with a bitcoind module 2022-07-23 12:49:18 +02:00
Antoine Poinsot
8626e05a55
ci: basic GA for unit tests on various platforms 2022-07-23 12:49:17 +02:00
Antoine Poinsot
b0196ab529
daemon: introduce an SQLite database
With a schema similar to revaultd, but a different interface.
2022-07-23 12:49:17 +02:00
Antoine Poinsot
989a2cf8fd
daemon: introduce the DaemonHandle, which for now only creates a datadir
This code was mainly taken and adapted from revaultd at commit
7cd856d5a345319cebc815aa61f3b66cebb48b86.
2022-07-23 12:49:16 +02:00
Antoine Poinsot
1b35196448
daemon: backbone and configuration parsing
Taken from revaultd at 7cd856d5a345319cebc815aa61f3b66cebb48b86. Credits
to the revaultd contributors.
2022-07-20 18:42:08 +02:00
Antoine Poinsot
da9149ccde
Initial commit, the fun begins! 2022-07-20 16:17:32 +02:00