Skip to content

Commit

Permalink
Merge pull request #437 from alpenlabs/cli-updates
Browse files Browse the repository at this point in the history
backport: CLI updates
  • Loading branch information
sapinb authored Oct 28, 2024
2 parents afaf6b0 + 1fb1e1c commit 595466a
Show file tree
Hide file tree
Showing 52 changed files with 1,467 additions and 494 deletions.
7 changes: 3 additions & 4 deletions .github/workflows/functional.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ on:

env:
CARGO_TERM_COLOR: always

jobs:
lint:
name: Lint test files
Expand Down Expand Up @@ -55,11 +54,11 @@ jobs:

- name: Install bitcoind
env:
BITCOIND_VERSION: "27.0"
BITCOIND_VERSION: "28.0"
BITCOIND_ARCH: "x86_64-linux-gnu"
SHASUM: "2a6974c5486f528793c79d42694b5987401e4a43c97f62b1383abf35bcee44a8"
SHASUM: "7fe294b02b25b51acb8e8e0a0eb5af6bbafa7cd0c5b0e5fcbb61263104a82fbc"
run: |
wget -q "https://bitcoin.org/bin/bitcoin-core-${{ env.BITCOIND_VERSION }}/bitcoin-${{ env.BITCOIND_VERSION }}-${{ env.BITCOIND_ARCH }}.tar.gz"
curl -fsSLO --proto "=https" --tlsv1.2 "https://bitcoincore.org/bin/bitcoin-core-${{ env.BITCOIND_VERSION }}/bitcoin-${{ env.BITCOIND_VERSION }}-${{ env.BITCOIND_ARCH }}.tar.gz"
sha256sum -c <<< "$SHASUM bitcoin-${{ env.BITCOIND_VERSION }}-${{ env.BITCOIND_ARCH }}.tar.gz"
tar xzf "bitcoin-${{ env.BITCOIND_VERSION }}-${{ env.BITCOIND_ARCH }}.tar.gz"
sudo install -m 0755 -t /usr/local/bin bitcoin-${{ env.BITCOIND_VERSION }}/bin/*
Expand Down
91 changes: 76 additions & 15 deletions Cargo.lock

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

3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,8 @@ argh = "0.1"
async-trait = "0.1.80"
base64 = "0.22.1"
bincode = "1.3.3"
bitcoin = { version = "=0.32.1", features = ["serde"] }
bitcoin = { version = "=0.32.3", features = ["serde"] }
bitcoind = { version = "0.36.0", features = ["26_0"] }
bitcoind-json-rpc-types = "0.3.0"
borsh = { version = "1.5.0", features = ["derive"] }
bytes = "1.6.0"
chrono = "0.4.38"
Expand Down
7 changes: 7 additions & 0 deletions bin/strata-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ edition = "2021"
name = "strata-cli"
version = "0.1.0"

[features]
strata_faucet = []

[[bin]]
name = "strata"
path = "src/main.rs"
Expand All @@ -20,6 +23,8 @@ alloy = { version = "0.3.5", features = [
] }
argh.workspace = true
argon2 = "0.5.3"
async-trait.workspace = true
bdk_bitcoind_rpc = "0.16.0"
bdk_esplora = { version = "0.19.0", features = [
"async-https",
"async-https-rustls",
Expand All @@ -42,6 +47,8 @@ sled = "0.34.7"
strata-bridge-tx-builder.workspace = true
terrors.workspace = true
tokio.workspace = true
zeroize = { version = "1.8.1", features = ["derive"] }
zxcvbn = "3.1.0"

# sha2 fails to compile on windows with the "asm" feature
[target.'cfg(not(target_os = "windows"))'.dependencies]
Expand Down
23 changes: 14 additions & 9 deletions bin/strata-cli/src/cmd/balance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ use alloy::{
providers::{Provider, WalletProvider},
};
use argh::FromArgs;
use bdk_wallet::bitcoin::Amount;
use console::Term;

use crate::{
constants::NETWORK,
constants::SATS_TO_WEI,
net_type::{net_type_or_exit, NetworkType},
seed::Seed,
settings::Settings,
signet::{EsploraClient, SignetWallet},
signet::SignetWallet,
strata::StrataWallet,
};

Expand All @@ -23,13 +24,14 @@ pub struct BalanceArgs {
network_type: String,
}

pub async fn balance(args: BalanceArgs, seed: Seed, settings: Settings, esplora: EsploraClient) {
pub async fn balance(args: BalanceArgs, seed: Seed, settings: Settings) {
let term = Term::stdout();
let network_type = net_type_or_exit(&args.network_type, &term);

if let NetworkType::Signet = network_type {
let mut l1w = SignetWallet::new(&seed, NETWORK).unwrap();
l1w.sync(&esplora).await.unwrap();
let mut l1w =
SignetWallet::new(&seed, settings.network, settings.signet_backend.clone()).unwrap();
l1w.sync().await.unwrap();
let balance = l1w.balance();
let _ = term.write_line(&format!("Total: {}", balance.total()));
let _ = term.write_line(&format!(" Confirmed: {}", balance.confirmed));
Expand All @@ -42,11 +44,14 @@ pub async fn balance(args: BalanceArgs, seed: Seed, settings: Settings, esplora:
}

if let NetworkType::Strata = network_type {
let l2w = StrataWallet::new(&seed, &settings.l2_http_endpoint).unwrap();
let l2w = StrataWallet::new(&seed, &settings.strata_endpoint).unwrap();
let _ = term.write_line("Getting balance...");
let balance = l2w.get_balance(l2w.default_signer_address()).await.unwrap();
// 1 BTC = 1 ETH
let balance_in_btc = balance / U256::from(10u64.pow(18));
let _ = term.write_line(&format!("\nTotal: {} BTC", balance_in_btc));
let balance = Amount::from_sat(
(balance / U256::from(SATS_TO_WEI))
.try_into()
.expect("valid amount"),
);
let _ = term.write_line(&format!("\nTotal: {}", balance));
}
}
8 changes: 6 additions & 2 deletions bin/strata-cli/src/cmd/change_pwd.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use argh::FromArgs;
use console::Term;
use rand::thread_rng;
use rand::rngs::OsRng;

use crate::seed::{password::Password, EncryptedSeedPersister, Seed};

Expand All @@ -12,7 +12,11 @@ pub struct ChangePwdArgs {}
pub async fn change_pwd(_args: ChangePwdArgs, seed: Seed, persister: impl EncryptedSeedPersister) {
let term = Term::stdout();
let mut new_pw = Password::read(true).unwrap();
let encrypted_seed = seed.encrypt(&mut new_pw, &mut thread_rng()).unwrap();
let password_validation: Result<(), String> = new_pw.validate();
if let Err(feedback) = password_validation {
let _ = term.write_line(&format!("Password is weak. {}", feedback));
}
let encrypted_seed = seed.encrypt(&mut new_pw, &mut OsRng).unwrap();
persister.save(&encrypted_seed).unwrap();
let _ = term.write_line("Password changed successfully");
}
12 changes: 12 additions & 0 deletions bin/strata-cli/src/cmd/config.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
use argh::FromArgs;

use crate::settings::CONFIG_FILE;

/// Prints the location of the CLI's TOML config file
#[derive(FromArgs, PartialEq, Debug)]
#[argh(subcommand, name = "config")]
pub struct ConfigArgs {}

pub async fn config(_args: ConfigArgs) {
println!("{}", CONFIG_FILE.to_string_lossy())
}
Loading

0 comments on commit 595466a

Please sign in to comment.