Skip to content

Commit

Permalink
cli: add wallets sync
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-orlovsky committed Jan 30, 2025
1 parent 4d3f217 commit 7d3a13e
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 18 deletions.
36 changes: 22 additions & 14 deletions cli/src/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,19 +378,27 @@ impl Args {
FsTextStore::new(self.wallet_dir(name)).expect("Broken directory structure")
}

pub fn runtime(&self, name: Option<&str>) -> RgbDirRuntime {
let provider = self.wallet_provider(name);
pub fn runtime(&self, opts: &WalletOpts) -> RgbDirRuntime {
let provider = self.wallet_provider(opts.wallet.as_deref());
let wallet = RgbWallet::load(provider, true).unwrap_or_else(|_| {
panic!("Error: unable to load wallet from path `{}`", self.wallet_dir(name).display())
panic!(
"Error: unable to load wallet from path `{}`",
self.wallet_dir(opts.wallet.as_deref()).display()
)
});
RgbDirRuntime::from(DirBarrow::with(wallet, self.mound()))
// TODO: Sync wallet if needed
let mut runtime = RgbDirRuntime::from(DirBarrow::with(wallet, self.mound()));
if opts.sync {
eprintln!("Synchronizing wallet");
runtime.wallet.update(&self.indexer(&opts.resolver), false);
}
runtime
}

pub fn indexer(&self, resolver: &ResolverOpt) -> AnyIndexer {
let network = self.network.to_string();
match (&resolver.esplora, &resolver.electrum, &resolver.mempool) {
(None, Some(url), None) => AnyIndexer::Electrum(Box::new(
// TODO: Check network match
electrum::Client::new(url).expect("Unable to initialize indexer"),
)),
(Some(url), None, None) => AnyIndexer::Esplora(Box::new(
Expand Down Expand Up @@ -425,7 +433,7 @@ impl Args {
}
}
Cmd::Issue { params: Some(params), wallet } => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
let file = File::open(params).expect("Unable to open parameters file");
let params = serde_yaml::from_reader::<_, CreateParams<Outpoint>>(file)?;
let contract_id = runtime.issue_to_file(params)?;
Expand Down Expand Up @@ -456,7 +464,7 @@ impl Args {
}

Cmd::Fund { wallet } => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
let addr = runtime.wallet.next_address(Keychain::OUTER, true);
println!("{addr}");
}
Expand All @@ -472,7 +480,7 @@ impl Args {
state,
value,
} => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
let beneficiary = if *wout {
let wout = runtime.wout(*nonce);
RgbBeneficiary::WitnessOut(wout)
Expand Down Expand Up @@ -513,7 +521,7 @@ impl Args {
}

Cmd::State { wallet, all, global, owned, contract } => {
let mut runtime = self.runtime(wallet.wallet.as_deref());
let mut runtime = self.runtime(wallet);
if wallet.sync {
let indexer = self.indexer(&wallet.resolver);
runtime.wallet.update(&indexer, false);
Expand Down Expand Up @@ -605,7 +613,7 @@ impl Args {
psbt: psbt_filename,
consignment,
} => {
let mut runtime = self.runtime(wallet.wallet.as_deref());
let mut runtime = self.runtime(wallet);
// TODO: sync wallet if needed
// TODO: Add params and giveway to arguments
let params = TxParams::with(*fee);
Expand All @@ -626,7 +634,7 @@ impl Args {
}

Cmd::Script { wallet, strategy, invoice, output } => {
let mut runtime = self.runtime(wallet.wallet.as_deref());
let mut runtime = self.runtime(wallet);
let giveaway = Some(Sats::from(500u16));
let script = runtime.script(invoice, *strategy, giveaway)?;
let file = File::create_new(output).expect("Unable to open script file");
Expand All @@ -641,7 +649,7 @@ impl Args {
psbt: psbt_filename,
print,
} => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
let src = File::open(script).expect("Unable to open script file");
let script =
serde_yaml::from_reader::<_, OpRequestSet<Option<WoutAssignment>>>(src)?;
Expand Down Expand Up @@ -670,7 +678,7 @@ impl Args {
}

Cmd::Complete { wallet, bundle, psbt: psbt_file } => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
let bundle = PrefabBundle::strict_deserialize_from_file::<{ usize::MAX }>(bundle)?;
let psbt = Psbt::decode(&mut File::open(psbt_file).expect("Unable to open PSBT"))?;

Expand All @@ -693,7 +701,7 @@ impl Args {
}

Cmd::Accept { wallet, input } => {
let mut runtime = self.runtime(wallet.as_deref());
let mut runtime = self.runtime(&WalletOpts::default_with_name(wallet));
runtime.consume_from_file(input)?;
}

Expand Down
10 changes: 10 additions & 0 deletions cli/src/opts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,13 @@ pub struct WalletOpts {
#[clap(flatten)]
pub resolver: ResolverOpt,
}

impl WalletOpts {
pub fn default_with_name(name: &Option<String>) -> Self {
WalletOpts {
wallet: name.clone(),
sync: false,
resolver: ResolverOpt { electrum: None, esplora: None, mempool: None },
}
}
}
10 changes: 9 additions & 1 deletion examples/data2/bitcoin.testnet/bob.wallet/cache.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ headers: []
tx:
efb54853788df4a3ce31d7c74511f8d8c457e2e4b659773662e42d3bc5a44356:
txid: efb54853788df4a3ce31d7c74511f8d8c457e2e4b659773662e42d3bc5a44356
status: mempool
status: !mined
height: 58373
time: 1734446715
blockHash: 000000003e3bb07f6583add889b2ece51f9ef2c422a02ede87615f22fdadc993
inputs:
- outpoint: d0455f0a1f4f8a699d33c78967d1285102568aaad84ee347787b18271503a400:0
payer: !counterparty tb1q0dzcgv7scppjxsnwlzpkt02vlmc5rtr40wyjgr
Expand Down Expand Up @@ -139,4 +142,9 @@ addr:
used: 0
volume: 0
balance: 0
- terminal: '&1/9'
addr: tb1qld0axaw9urkyjruhel2cvpc0fmj9krkqvhcz03
used: 0
volume: 0
balance: 0
layer2: {}
4 changes: 2 additions & 2 deletions examples/script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ $RGB complete -w alice examples/transfer.pfab examples/transfer.psbt || exit 1

rm examples/transfer.rgb
$RGB consign DemoToken -t "$AUTH_TOKEN" examples/transfer.rgb || exit 1
$RGB state -go -w alice
$RGB state -goa -w alice --sync --mempool

$RGB_2 accept -w bob examples/transfer.rgb || exit 1

$RGB_2 state -go -w bob
$RGB_2 state -go -w bob --sync --mempool
1 change: 0 additions & 1 deletion psbt/src/bp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ impl RgbPsbt for Psbt {
let host = self
.insert_output(0, ScriptPubkey::op_return(&[]), Sats::ZERO)
.map_err(|_| RgbPsbtFinalizeError::Unfinalizable)?;
eprintln!("{host:?}");
host.set_opret_host().ok();
}
1 => {}
Expand Down

0 comments on commit 7d3a13e

Please sign in to comment.