Merge #561: Update our MSRV from 1.48 to 1.54
b53236f9dd29e36a7c31dc8cbe138204e4674a71 Update libc wrapper and getrandom (Antoine Poinsot) 9b17d7029ff6e80eb177bf8d04efb85cdefa21ef Update rusqlite to 0.27 (Antoine Poinsot) 1271b646fb87b5d45bd001c616dda4ee1dd37bed Update backtrace dependency (Antoine Poinsot) 5d7a1b4fe5de2a1247f3f0445a87c575e71b129f Update serde dependencies (Antoine Poinsot) c20c05cee7b25fe6bc9a638b48a14a4430185edc ci: upgrade lianad clippy to 1.70 (Antoine Poinsot) b2f95ada585fb04c3d82d9419d33affebd9eaccc commands: take advantage of 1.48 compat riddance (Antoine Poinsot) 117221e9eed92fd197822b82a25de094b79cfafd Bump lianad MSRV to 1.54 (Antoine Poinsot) Pull request description: The latest Debian stable was released this month with support for Rust up to 1.63. Fixes #69. ACKs for top commit: darosior: self-ACK b53236f9dd29e36a7c31dc8cbe138204e4674a71 Tree-SHA512: f2b7fc1462a71cc76897d7cb0fe6644cf5927d5db60b42112fdc6c5c68334af22f45b6d99b8bdfdab1222812bd3832a9abf89ca429789d734cfdc8e9e8f753c8
This commit is contained in:
commit
0d6a752784
7
.github/workflows/main.yml
vendored
7
.github/workflows/main.yml
vendored
@ -9,7 +9,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
- uses: actions-rs/toolchain@v1
|
- uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: 1.67.1
|
toolchain: 1.70.0
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
override: true
|
override: true
|
||||||
- name: rustfmt
|
- name: rustfmt
|
||||||
@ -22,7 +22,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
toolchain:
|
toolchain:
|
||||||
- 1.48
|
- 1.54
|
||||||
- nightly
|
- nightly
|
||||||
os:
|
os:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
@ -42,8 +42,7 @@ jobs:
|
|||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
run: cargo test --verbose --no-default-features
|
run: cargo test --verbose --no-default-features
|
||||||
- name: Test on Rust ${{ matrix.toolchain }} (non Windows)
|
- name: Test on Rust ${{ matrix.toolchain }} (non Windows)
|
||||||
# See issue https://github.com/wizardsardine/liana/issues/69
|
if: matrix.os != 'windows-latest'
|
||||||
if: matrix.os != 'windows-latest' && (matrix.os != 'macOS-latest' || matrix.toolchain != '1.48')
|
|
||||||
run: cargo test --verbose --color always -- --nocapture
|
run: cargo test --verbose --color always -- --nocapture
|
||||||
|
|
||||||
linter_gui:
|
linter_gui:
|
||||||
|
|||||||
@ -66,7 +66,11 @@ query).
|
|||||||
|
|
||||||
## Minimum Supported Rust Version
|
## Minimum Supported Rust Version
|
||||||
|
|
||||||
`lianad` should always compile and pass tests using **Rust 1.48**.
|
`lianad` should always compile and pass tests using **Rust 1.54**. The rationale behind this is
|
||||||
|
support something reasonable, and preferably supported by all of:
|
||||||
|
- [Guix](https://guix.gnu.org/)
|
||||||
|
- Popular distributions' packages (especially Debian which is the most conservative)
|
||||||
|
- [Mrustc](https://github.com/thepowersgang/mrustc)
|
||||||
|
|
||||||
## Style
|
## Style
|
||||||
|
|
||||||
|
|||||||
48
Cargo.lock
generated
48
Cargo.lock
generated
@ -4,9 +4,9 @@ version = 3
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
version = "0.17.0"
|
version = "0.19.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
|
checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gimli",
|
"gimli",
|
||||||
]
|
]
|
||||||
@ -30,9 +30,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backtrace"
|
name = "backtrace"
|
||||||
version = "0.3.66"
|
version = "0.3.67"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
|
checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"addr2line",
|
"addr2line",
|
||||||
"cc",
|
"cc",
|
||||||
@ -163,9 +163,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.8"
|
version = "0.2.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
|
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@ -174,9 +174,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.26.2"
|
version = "0.27.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
|
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
@ -237,15 +237,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.140"
|
version = "0.2.147"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
|
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsqlite3-sys"
|
name = "libsqlite3-sys"
|
||||||
version = "0.23.0"
|
version = "0.24.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c4ecc4273169aeb654a26ba8c7e087947caad92c9d121886eafa6446d4ebe138"
|
checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
@ -278,18 +278,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.5.4"
|
version = "0.6.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
|
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"adler",
|
"adler",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.29.0"
|
version = "0.30.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
|
checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
@ -364,9 +364,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rusqlite"
|
name = "rusqlite"
|
||||||
version = "0.26.3"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4ba4d3462c8b2e4d7f4fcfcf2b296dc6b65404fbbc7b63daa37fd485c149daf7"
|
checksum = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"fallible-iterator",
|
"fallible-iterator",
|
||||||
@ -411,18 +411,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.145"
|
version = "1.0.147"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
|
checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.145"
|
version = "1.0.147"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
|
checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -431,9 +431,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.87"
|
version = "1.0.99"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
|
checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
|
|||||||
@ -44,9 +44,9 @@ fern = "0.6"
|
|||||||
# to work with our custom panic hook.
|
# to work with our custom panic hook.
|
||||||
backtrace = "0.3"
|
backtrace = "0.3"
|
||||||
|
|
||||||
# Pinned to this version because they broke the MSRV in 0.27...
|
# Pinned to this version because they keep breaking their MSRV in point releases...
|
||||||
# FIXME: this is unfortunate, we don't receive the updates (sometimes critical) from SQLite.
|
# FIXME: this is unfortunate, we don't receive the updates (sometimes critical) from SQLite.
|
||||||
rusqlite = { version = "0.26.3", features = ["bundled", "unlock_notify"] }
|
rusqlite = { version = "0.27", features = ["bundled", "unlock_notify"] }
|
||||||
|
|
||||||
# To talk to bitcoind
|
# To talk to bitcoind
|
||||||
jsonrpc = "0.12"
|
jsonrpc = "0.12"
|
||||||
|
|||||||
@ -8,10 +8,7 @@ this repository. They are pinned in a [`Cargo.lock`](../Cargo.lock) file at the
|
|||||||
We take security very seriously, and toolchain is a big part of that. We are moderatly conservative
|
We take security very seriously, and toolchain is a big part of that. We are moderatly conservative
|
||||||
with dependencies and aim to target reasonable compiler versions that have had time to mature (ie
|
with dependencies and aim to target reasonable compiler versions that have had time to mature (ie
|
||||||
that had the chance to be reviewed and distributed by third parties, as well as tested by the
|
that had the chance to be reviewed and distributed by third parties, as well as tested by the
|
||||||
community). The minimum supported Rust version for `lianad` currently is `1.48`, that is the
|
community). The minimum supported Rust version for `lianad` currently is `1.54`.
|
||||||
version of [`rustc` shipped in Debian stable](https://packages.debian.org/stable/rustc). (It is also
|
|
||||||
inferior to the latest version of `rustc` supported by
|
|
||||||
[`mrustc`](https://github.com/thepowersgang/mrustc/) at the time of writing, `1.54`).
|
|
||||||
|
|
||||||
If you want to not only build the daemon but the whole wallet including the GUI, you'll
|
If you want to not only build the daemon but the whole wallet including the GUI, you'll
|
||||||
unfortunately have to use a more recent `cargo`. The minimum version supported by the GUI at the
|
unfortunately have to use a more recent `cargo`. The minimum version supported by the GUI at the
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
///! Implementation of the Bitcoin interface using bitcoind.
|
//! Implementation of the Bitcoin interface using bitcoind.
|
||||||
///!
|
//!
|
||||||
///! We use the RPC interface and a watchonly descriptor wallet.
|
//! We use the RPC interface and a watchonly descriptor wallet.
|
||||||
|
|
||||||
mod utils;
|
mod utils;
|
||||||
use crate::{
|
use crate::{
|
||||||
bitcoin::{Block, BlockChainTip},
|
bitcoin::{Block, BlockChainTip},
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
///! Interface to the Bitcoin network.
|
//! Interface to the Bitcoin network.
|
||||||
///!
|
//!
|
||||||
///! Broadcast transactions, poll for new unspent coins, gather fee estimates.
|
//! Broadcast transactions, poll for new unspent coins, gather fee estimates.
|
||||||
|
|
||||||
pub mod d;
|
pub mod d;
|
||||||
pub mod poller;
|
pub mod poller;
|
||||||
|
|
||||||
|
|||||||
@ -293,12 +293,10 @@ impl DaemonControl {
|
|||||||
/// Get a list of all known coins.
|
/// Get a list of all known coins.
|
||||||
pub fn list_coins(&self) -> ListCoinsResult {
|
pub fn list_coins(&self) -> ListCoinsResult {
|
||||||
let mut db_conn = self.db.connection();
|
let mut db_conn = self.db.connection();
|
||||||
#[allow(clippy::iter_kv_map)] // Because Rust 1.48
|
|
||||||
let coins: Vec<ListCoinsEntry> = db_conn
|
let coins: Vec<ListCoinsEntry> = db_conn
|
||||||
.coins(CoinType::All)
|
.coins(CoinType::All)
|
||||||
// Can't use into_values as of Rust 1.48
|
.into_values()
|
||||||
.into_iter()
|
.map(|coin| {
|
||||||
.map(|(_, coin)| {
|
|
||||||
let Coin {
|
let Coin {
|
||||||
amount,
|
amount,
|
||||||
outpoint,
|
outpoint,
|
||||||
@ -728,15 +726,12 @@ impl DaemonControl {
|
|||||||
let timelock =
|
let timelock =
|
||||||
timelock.unwrap_or_else(|| self.config.main_descriptor.first_timelock_value());
|
timelock.unwrap_or_else(|| self.config.main_descriptor.first_timelock_value());
|
||||||
let height_delta: i32 = timelock.try_into().expect("Must fit, it's a u16");
|
let height_delta: i32 = timelock.try_into().expect("Must fit, it's a u16");
|
||||||
let sweepable_coins = db_conn
|
let sweepable_coins = db_conn.coins(CoinType::Unspent).into_values().filter(|c| {
|
||||||
.coins(CoinType::Unspent)
|
// We are interested in coins available at the *next* block
|
||||||
.into_iter()
|
c.block_info
|
||||||
.filter(|(_, c)| {
|
.map(|b| current_height + 1 >= b.height + height_delta)
|
||||||
// We are interested in coins available at the *next* block
|
.unwrap_or(false)
|
||||||
c.block_info
|
});
|
||||||
.map(|b| current_height + 1 >= b.height + height_delta)
|
|
||||||
.unwrap_or(false)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Fill-in the transaction inputs and PSBT inputs information. Record the value
|
// Fill-in the transaction inputs and PSBT inputs information. Record the value
|
||||||
// that is fed to the transaction while doing so, to compute the fees afterward.
|
// that is fed to the transaction while doing so, to compute the fees afterward.
|
||||||
@ -744,7 +739,7 @@ impl DaemonControl {
|
|||||||
let txin_sat_vb = self.config.main_descriptor.max_sat_vbytes();
|
let txin_sat_vb = self.config.main_descriptor.max_sat_vbytes();
|
||||||
let mut sat_vb = 0;
|
let mut sat_vb = 0;
|
||||||
let mut spent_txs = HashMap::new();
|
let mut spent_txs = HashMap::new();
|
||||||
for (_, coin) in sweepable_coins {
|
for coin in sweepable_coins {
|
||||||
in_value += coin.amount;
|
in_value += coin.amount;
|
||||||
psbt.unsigned_tx.input.push(bitcoin::TxIn {
|
psbt.unsigned_tx.input.push(bitcoin::TxIn {
|
||||||
previous_output: coin.outpoint,
|
previous_output: coin.outpoint,
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
///! Database interface for Liana.
|
//! Database interface for Liana.
|
||||||
///!
|
//!
|
||||||
///! Record wallet metadata, spent and unspent coins, ongoing transactions.
|
//! Record wallet metadata, spent and unspent coins, ongoing transactions.
|
||||||
|
|
||||||
pub mod sqlite;
|
pub mod sqlite;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
///! Implementation of the database interface using SQLite.
|
//! Implementation of the database interface using SQLite.
|
||||||
///!
|
//!
|
||||||
///! We use a bundled SQLite that is compiled with SQLITE_THREADSAFE. Sqlite.org states:
|
//! We use a bundled SQLite that is compiled with SQLITE_THREADSAFE. Sqlite.org states:
|
||||||
///! > Multi-thread. In this mode, SQLite can be safely used by multiple threads provided that
|
//! > Multi-thread. In this mode, SQLite can be safely used by multiple threads provided that
|
||||||
///! > no single database connection is used simultaneously in two or more threads.
|
//! > no single database connection is used simultaneously in two or more threads.
|
||||||
///!
|
//!
|
||||||
///! We leverage SQLite's `unlock_notify` feature to synchronize writes accross connection. More
|
//! We leverage SQLite's `unlock_notify` feature to synchronize writes accross connection. More
|
||||||
///! about it at https://sqlite.org/unlock_notify.html.
|
//! about it at https://sqlite.org/unlock_notify.html.
|
||||||
|
|
||||||
pub mod schema;
|
pub mod schema;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user