diff --git a/src/index/updater.rs b/src/index/updater.rs index 987dc0d91e..27fe533975 100644 --- a/src/index/updater.rs +++ b/src/index/updater.rs @@ -402,12 +402,13 @@ impl Updater { .map(|(satpoint, id)| (*satpoint, *id)) .collect(); - for (_old_satpoint, inscription_id) in inscription_ids { + for (old_satpoint, inscription_id) in inscription_ids { let new_satpoint = encode_satpoint(SatPoint { outpoint: OutPoint { txid, vout: 0 }, offset: 0, }); + satpoint_to_inscription_id.remove(&old_satpoint)?; satpoint_to_inscription_id.insert(&new_satpoint, &inscription_id)?; inscription_id_to_satpoint.insert(&inscription_id, &new_satpoint)?; } diff --git a/src/subcommand/wallet.rs b/src/subcommand/wallet.rs index dd44510c13..1c795fc9cb 100644 --- a/src/subcommand/wallet.rs +++ b/src/subcommand/wallet.rs @@ -2,6 +2,7 @@ use {super::*, transaction_builder::TransactionBuilder}; mod identify; mod inscribe; +mod inscriptions; mod receive; mod send; mod transaction_builder; @@ -60,6 +61,7 @@ fn get_change_addresses(options: &Options, n: usize) -> Result> { pub(crate) enum Wallet { Identify(identify::Identify), Inscribe(inscribe::Inscribe), + Inscriptions(inscriptions::Inscriptions), Receive(receive::Receive), Send(send::Send), Utxos(utxos::Utxos), @@ -70,6 +72,7 @@ impl Wallet { match self { Self::Identify(identify) => identify.run(options), Self::Inscribe(inscribe) => inscribe.run(options), + Self::Inscriptions(inscriptions) => inscriptions.run(options), Self::Receive(receive) => receive.run(options), Self::Send(send) => send.run(options), Self::Utxos(utxos) => utxos.run(options), diff --git a/src/subcommand/wallet/inscriptions.rs b/src/subcommand/wallet/inscriptions.rs new file mode 100644 index 0000000000..ba58b6a8ff --- /dev/null +++ b/src/subcommand/wallet/inscriptions.rs @@ -0,0 +1,22 @@ +use super::*; + +#[derive(Debug, Parser)] +pub(crate) struct Inscriptions {} + +impl Inscriptions { + pub(crate) fn run(self, options: Options) -> Result { + let index = Index::open(&options)?; + index.update()?; + + let inscriptions = index.get_inscriptions()?; + let utxos = list_utxos(&options)?; + + for (satpoint, inscription_id) in inscriptions { + if utxos.contains_key(&satpoint.outpoint) { + println!("{}\t{}", inscription_id, satpoint); + } + } + + Ok(()) + } +} diff --git a/tests/wallet.rs b/tests/wallet.rs index b3f3b06e68..72bececedb 100644 --- a/tests/wallet.rs +++ b/tests/wallet.rs @@ -548,3 +548,53 @@ fn utxos() { .expected_stdout(format!("{outpoint}\t{amount}\n")) .run(); } + +#[test] +fn inscriptions() { + let rpc_server = test_bitcoincore_rpc::spawn_with(Network::Signet, "ord-wallet"); + let txid = rpc_server.mine_blocks(1)[0].txdata[0].txid(); + + let inscription_id = reveal_txid_from_inscribe_stdout( + &CommandBuilder::new(format!( + "--chain signet wallet inscribe --satpoint {txid}:0:0 --file hello.txt" + )) + .write("hello.txt", "HELLOWORLD") + .rpc_server(&rpc_server) + .stdout_regex("commit\t[[:xdigit:]]{64}\nreveal\t[[:xdigit:]]{64}\n") + .run(), + ); + + rpc_server.mine_blocks(1); + + CommandBuilder::new("--chain signet wallet inscriptions") + .rpc_server(&rpc_server) + .expected_stdout(format!("{inscription_id}\t{inscription_id}:0:0\n")) + .run(); + + let stdout = CommandBuilder::new("--chain signet wallet receive") + .rpc_server(&rpc_server) + .expected_exit_code(0) + .stdout_regex(".*") + .run(); + + let address = stdout.trim(); + + let stdout = CommandBuilder::new(format!( + "--chain signet wallet send {inscription_id} {address}" + )) + .rpc_server(&rpc_server) + .expected_exit_code(0) + .stdout_regex(".*") + .run(); + + rpc_server.mine_blocks(1); + + let txid = Txid::from_str(stdout.trim()).unwrap(); + + let outpoint = OutPoint::new(txid, 0); + + CommandBuilder::new("--chain signet wallet inscriptions") + .rpc_server(&rpc_server) + .expected_stdout(format!("{inscription_id}\t{outpoint}:0\n")) + .run(); +}