diff --git a/src/subcommand/wallet/cardinals.rs b/src/subcommand/wallet/cardinals.rs index 1da96c4b67..6b7413c78a 100644 --- a/src/subcommand/wallet/cardinals.rs +++ b/src/subcommand/wallet/cardinals.rs @@ -15,10 +15,12 @@ pub(crate) fn run(wallet: Wallet) -> SubcommandResult { .map(|satpoint| satpoint.outpoint) .collect::>(); + let runic_utxos = wallet.get_runic_outputs()?; + let cardinal_utxos = unspent_outputs .iter() .filter_map(|(output, txout)| { - if inscribed_utxos.contains(output) { + if inscribed_utxos.contains(output) || runic_utxos.contains(output) { None } else { Some(CardinalUtxo { diff --git a/tests/wallet/cardinals.rs b/tests/wallet/cardinals.rs index 31daae0bc5..360e1d1c16 100644 --- a/tests/wallet/cardinals.rs +++ b/tests/wallet/cardinals.rs @@ -25,3 +25,50 @@ fn cardinals() { assert_eq!(all_outputs.len() - cardinal_outputs.len(), 1); } + +#[test] +fn cardinals_does_not_show_runic_outputs() { + let core = mockcore::builder().network(Network::Regtest).build(); + + let ord = TestServer::spawn_with_server_args(&core, &["--regtest", "--index-runes"], &[]); + + create_wallet(&core, &ord); + + core.mine_blocks(1); + + batch( + &core, + &ord, + batch::File { + etching: Some(batch::Etching { + supply: "1000".parse().unwrap(), + divisibility: 0, + terms: None, + premine: "1000".parse().unwrap(), + rune: SpacedRune { + rune: Rune(RUNE), + spacers: 0, + }, + symbol: 'ยข', + turbo: false, + }), + inscriptions: vec![batch::Entry { + file: Some("inscription.jpeg".into()), + ..default() + }], + ..default() + }, + ); + + let all_outputs = CommandBuilder::new("--regtest wallet outputs") + .core(&core) + .ord(&ord) + .run_and_deserialize_output::>(); + + let cardinal_outputs = CommandBuilder::new("--regtest wallet cardinals") + .core(&core) + .ord(&ord) + .run_and_deserialize_output::>(); + + assert_eq!(all_outputs.len() - cardinal_outputs.len(), 2); +}