Skip to content

Commit

Permalink
Merge pull request #142 from nicbus/cli_electrum
Browse files Browse the repository at this point in the history
complete electrum support
  • Loading branch information
dr-orlovsky authored Mar 20, 2024
2 parents 1558fc2 + 662abfa commit b00157d
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 11 deletions.
7 changes: 5 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ log = { workspace = true, optional = true }
default = ["esplora_blocking"]
all = ["esplora_blocking", "electrum", "serde", "log"]
esplora_blocking = ["bp-esplora", "bp-wallet/esplora"]
electrum = ["bp-electrum"]
electrum = ["bp-electrum", "bp-wallet/electrum"]
serde = ["serde_crate", "serde_with", "serde_yaml", "bp-std/serde", "bp-wallet/serde", "descriptors/serde", "rgb-psbt/serde"]

[package.metadata.docs.rs]
Expand Down
2 changes: 1 addition & 1 deletion cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ bp-wallet = { workspace = true }
bp-util = { workspace = true }
psbt = { workspace = true }
rgb-std = { workspace = true, features = ["serde"] }
rgb-runtime = { version = "0.11.0-beta.1", path = "..", features = ["esplora_blocking", "log", "serde"] }
rgb-runtime = { version = "0.11.0-beta.1", path = "..", features = ["electrum", "esplora_blocking", "log", "serde"] }
log = { workspace = true }
env_logger = "0.10.1"
clap = { version = "4.4.8", features = ["derive", "env"] }
Expand Down
20 changes: 16 additions & 4 deletions cli/src/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@

use bp_util::{Config, DescriptorOpts};
use bpstd::{Wpkh, XpubDerivable};
use rgb_rt::esplora_blocking::{Resolver, ResolverError};
use rgb_rt::{RgbDescr, Runtime, RuntimeError, TapretKey};
use rgb_rt::{
electrum, esplora_blocking, AnyResolver, AnyResolverError, RgbDescr, Runtime, RuntimeError,
TapretKey,
};

use crate::Command;

Expand Down Expand Up @@ -80,7 +82,17 @@ impl RgbArgs {
}

#[allow(clippy::result_large_err)]
pub fn resolver(&self) -> Result<Resolver, ResolverError> {
Resolver::new(&self.resolver.esplora)
pub fn resolver(&self) -> Result<AnyResolver, AnyResolverError> {
if self.resolver.electrum != bp_util::DEFAULT_ELECTRUM {
match electrum::Resolver::new(&self.resolver.electrum) {
Ok(c) => Ok(AnyResolver::Electrum(Box::new(c))),
Err(e) => Err(AnyResolverError::Electrum(e)),
}
} else {
match esplora_blocking::Resolver::new(&self.resolver.esplora) {
Ok(c) => Ok(AnyResolver::Esplora(Box::new(c))),
Err(e) => Err(AnyResolverError::Esplora(e)),
}
}
}
}
24 changes: 24 additions & 0 deletions src/resolvers/any.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

use rgbstd::containers::Consignment;
use rgbstd::resolvers::ResolveHeight;
use rgbstd::validation::{ResolveWitness, WitnessResolverError};
use rgbstd::{WitnessAnchor, WitnessId, XAnchor, XPubWitness};
Expand All @@ -42,6 +43,18 @@ pub enum AnyResolver {
Esplora(Box<esplora_blocking::Resolver>),
}

#[allow(clippy::large_enum_variant)]
#[derive(Debug, Display, Error, From)]
#[display(doc_comments)]
pub enum AnyResolverError {
#[cfg(feature = "electrum")]
#[display(inner)]
Electrum(::electrum::Error),
#[cfg(feature = "esplora_blocking")]
#[display(inner)]
Esplora(esplora::Error),
}

#[allow(clippy::large_enum_variant)]
#[derive(Debug, Display, Error, From)]
#[display(doc_comments)]
Expand All @@ -56,6 +69,17 @@ pub enum AnyAnchorResolverError {
Esplora(esplora_blocking::AnchorResolverError),
}

impl AnyResolver {
pub fn add_terminals<const TYPE: bool>(&mut self, consignment: &Consignment<TYPE>) {
match self {
#[cfg(feature = "electrum")]
AnyResolver::Electrum(inner) => inner.add_terminals(consignment),
#[cfg(feature = "esplora_blocking")]
AnyResolver::Esplora(inner) => inner.add_terminals(consignment),
}
}
}

impl ResolveHeight for AnyResolver {
type Error = AnyAnchorResolverError;

Expand Down
2 changes: 1 addition & 1 deletion src/resolvers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ pub mod esplora_blocking;
pub mod electrum;

#[cfg(any(feature = "electrum", feature = "esplora_blocking"))]
pub use any::AnyResolver;
pub use any::{AnyResolver, AnyResolverError};
6 changes: 4 additions & 2 deletions src/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,11 @@ pub enum RuntimeError {
#[from(bpwallet::LoadError)]
Bp(bpwallet::RuntimeError),

#[cfg(feature = "esplora_blocking")]
/// resolver error: {0}
#[cfg(any(feature = "electrum", feature = "esplora_blocking"))]
#[from]
Esplora(esplora::Error),
#[display(doc_comments)]
ResolverError(crate::AnyResolverError),

#[from]
Yaml(serde_yaml::Error),
Expand Down

0 comments on commit b00157d

Please sign in to comment.