diff --git a/.travis.yml b/.travis.yml index d5f5e3cc..fda35b65 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ script: - cargo test --verbose --all - cargo build --verbose --all - cargo build --verbose --no-default-features --features=minimal + - cargo build --verbose --no-default-features --features=minimal,esplora - cargo build --verbose --no-default-features --features=key-value-db - cargo build --verbose --no-default-features --features=electrum diff --git a/Cargo.toml b/Cargo.toml index a3aa967e..2ef3a529 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,12 +14,14 @@ base64 = "^0.11" # Optional dependencies sled = { version = "0.31.0", optional = true } electrum-client = { version = "0.1.0-beta.5", optional = true } +reqwest = { version = "0.10", optional = true, features = ["blocking", "json"] } [features] minimal = [] compiler = ["miniscript/compiler"] default = ["key-value-db", "electrum"] electrum = ["electrum-client"] +esplora = ["reqwest"] key-value-db = ["sled"] [dev-dependencies] diff --git a/src/blockchain/electrum.rs b/src/blockchain/electrum.rs index 9195beb8..df1ee2d5 100644 --- a/src/blockchain/electrum.rs +++ b/src/blockchain/electrum.rs @@ -1,21 +1,17 @@ -use std::cmp; -use std::collections::{HashSet, VecDeque}; -use std::convert::TryFrom; +use std::collections::HashSet; use std::io::{Read, Write}; #[allow(unused_imports)] use log::{debug, error, info, trace}; -use bitcoin::{Address, Network, OutPoint, Script, Transaction, Txid}; +use bitcoin::{Script, Transaction, Txid}; -use electrum_client::types::*; use electrum_client::Client; +use self::utils::{ELSGetHistoryRes, ELSListUnspentRes, ElectrumLikeSync}; use super::*; -use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils}; +use crate::database::{BatchDatabase, DatabaseUtils}; use crate::error::Error; -use crate::types::{ScriptType, TransactionDetails, UTXO}; -use crate::wallet::utils::ChunksIterator; pub struct ElectrumBlockchain(Option>); @@ -46,133 +42,12 @@ impl OnlineBlockchain for ElectrumBlockchain { &mut self, stop_gap: Option, database: &mut D, - _progress_update: P, + progress_update: P, ) -> Result<(), Error> { - // TODO: progress - - let stop_gap = stop_gap.unwrap_or(20); - let batch_query_size = 20; - - // check unconfirmed tx, delete so they are retrieved later - let mut del_batch = database.begin_batch(); - for tx in database.iter_txs(false)? { - if tx.height.is_none() { - del_batch.del_tx(&tx.txid, false)?; - } - } - database.commit_batch(del_batch)?; - - // maximum derivation index for a change address that we've seen during sync - let mut change_max_deriv = 0; - - let mut already_checked: HashSet