Skip to content

Commit

Permalink
Merge branch 'master' of github.com:ordinals/ord into output_recursive
Browse files Browse the repository at this point in the history
  • Loading branch information
raphjaph committed Dec 20, 2024
2 parents c81655d + a0da0c1 commit 77f536e
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 49 deletions.
4 changes: 2 additions & 2 deletions src/subcommand/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6378,12 +6378,12 @@ next
assert_eq!(output_response.outpoint, outpoint);
assert!(!output_response.spent);
assert!(output_response.indexed);
assert_eq!(output_response.inscriptions, vec![inscription_id]);
assert_eq!(output_response.inscriptions, Some(vec![inscription_id]));
assert!(output_response.address.is_some());
assert!(!output_response.script_pubkey.is_empty());
assert_eq!(output_response.transaction, txid);
assert!(output_response.value > 0);
assert!(output_response.runes.is_empty());
assert!(output_response.runes.unwrap_or_default().is_empty());
if let Some(sat_ranges) = &output_response.sat_ranges {
assert!(!sat_ranges.is_empty());
}
Expand Down
62 changes: 29 additions & 33 deletions src/subcommand/wallet/runics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,35 @@ pub(crate) fn run(wallet: Wallet) -> SubcommandResult {
bail!("`ord wallet runics` requires index created with `--index-runes`")
};

let runic_utxos = unspent_outputs
.iter()
.filter_map(|(output, _)| {
if runic_utxos.contains(output) {
let rune_balances = wallet
.get_runes_balances_in_output(output)
.ok()?
.unwrap_or_default();

let mut runes = BTreeMap::new();

for (spaced_rune, pile) in rune_balances {
runes
.entry(spaced_rune)
.and_modify(|decimal: &mut Decimal| {
assert_eq!(decimal.scale, pile.divisibility);
decimal.value += pile.amount;
})
.or_insert(Decimal {
value: pile.amount,
scale: pile.divisibility,
});
}

Some(RunicUtxo {
output: *output,
runes,
})
} else {
None
let mut result = Vec::new();

for output in unspent_outputs.keys() {
if runic_utxos.contains(output) {
let rune_balances = wallet
.get_runes_balances_in_output(output)?
.unwrap_or_default();

let mut runes = BTreeMap::new();

for (spaced_rune, pile) in rune_balances {
runes
.entry(spaced_rune)
.and_modify(|decimal: &mut Decimal| {
assert_eq!(decimal.scale, pile.divisibility);
decimal.value += pile.amount;
})
.or_insert(Decimal {
value: pile.amount,
scale: pile.divisibility,
});
}
})
.collect::<Vec<RunicUtxo>>();

Ok(Some(Box::new(runic_utxos)))
result.push(RunicUtxo {
output: *output,
runes,
});
}
}

Ok(Some(Box::new(result)))
}
2 changes: 1 addition & 1 deletion src/templates/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ mod tests {
#[test]
fn test_runes_balances_rendering() {
let address_html = setup();
let expected_pattern = r#".*<dt>runes balances</dt>\n\s*<dd><a class=monospace href=/rune/TEEEEEEEEESTRUNE>TEEEEEEEEESTRUNE</a>: 20000R</dd>\n\s*<dd><a class=monospace href=/rune/ANOTHERTEESTRUNE>ANOTHERTEESTRUNE</a>: 10000F</dd>.*"#;
let expected_pattern = r#".*<dt>rune balances</dt>\n\s*<dd><a class=monospace href=/rune/TEEEEEEEEESTRUNE>TEEEEEEEEESTRUNE</a>: 20000R</dd>\n\s*<dd><a class=monospace href=/rune/ANOTHERTEESTRUNE>ANOTHERTEESTRUNE</a>: 10000F</dd>.*"#;
assert_regex_match!(address_html, expected_pattern);
}

Expand Down
12 changes: 5 additions & 7 deletions templates/address.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,17 @@ <h1>Address {{ self.address }}</h1>
<dl>
<dt>sat balance</dt>
<dd>{{ self.sat_balance }}</dd>
%% let inscriptions = self.inscriptions.clone().unwrap_or_default();
%% if !inscriptions.is_empty() {
%% if let Some(inscriptions) = self.inscriptions.as_ref().filter(|inscriptions| !inscriptions.is_empty()) {
<dt>inscriptions</dt>
<dd class=thumbnails>
%% for inscription in &inscriptions {
%% for inscription in inscriptions {
{{Iframe::thumbnail(*inscription)}}
%% }
</dd>
%% }
%% let runes_balances = self.runes_balances.clone().unwrap_or_default();
%% if !runes_balances.is_empty() {
<dt>runes balances</dt>
%% for (rune, decimal, symbol) in runes_balances.iter() {
%% if let Some(runes_balances) = self.runes_balances.as_ref().filter(|runes_balances| !runes_balances.is_empty()) {
<dt>rune balances</dt>
%% for (rune, decimal, symbol) in runes_balances {
%% if let Some(symbol) = symbol {
<dd><a class=monospace href=/rune/{{ rune }}>{{ rune }}</a>: {{ decimal }}{{ symbol }}</dd>
%% } else {
Expand Down
10 changes: 4 additions & 6 deletions templates/output.html
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
<h1>Output <span class=monospace>{{self.outpoint}}</span></h1>
<dl>
%% let inscriptions = self.inscriptions.clone().unwrap_or_default();
%% if !inscriptions.is_empty() {
%% if let Some(inscriptions) = self.inscriptions.as_ref().filter(|inscriptions| !inscriptions.is_empty()) {
<dt>inscriptions</dt>
<dd class=thumbnails>
%% for inscription in &inscriptions {
%% for inscription in inscriptions {
{{Iframe::thumbnail(*inscription)}}
%% }
</dd>
%% }
%% let runes = self.runes.clone().unwrap_or_default();
%% if !runes.is_empty() {
%% if let Some(runes) = self.runes.as_ref().filter(|runes| !runes.is_empty()) {
<dt>runes</dt>
<dd>
<table>
<tr>
<th>rune</th>
<th>balance</th>
</tr>
%% for (rune, balance) in &runes {
%% for (rune, balance) in runes {
<tr>
<td><a href=/rune/{{ rune }}>{{ rune }}</a></td>
<td>{{ balance }}</td>
Expand Down

0 comments on commit 77f536e

Please sign in to comment.