Skip to content

Commit df09d6f

Browse files
committed
fix: use Value instead of ValueDelta for AddressDelta and TxTotals
Signed-off-by: William Hankins <[email protected]>
1 parent cb7c5a4 commit df09d6f

File tree

5 files changed

+60
-48
lines changed

5 files changed

+60
-48
lines changed

common/src/types.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ pub struct AddressDelta {
212212
pub created_utxos: Vec<UTxOIdentifier>,
213213

214214
// Sums of spent and created UTxOs
215-
pub sent: ValueDelta,
215+
pub sent: Value,
216216
pub received: Value,
217217
}
218218

@@ -2156,7 +2156,7 @@ pub struct AssetAddressEntry {
21562156

21572157
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
21582158
pub struct TxTotals {
2159-
pub sent: ValueDelta,
2159+
pub sent: Value,
21602160
pub received: Value,
21612161
}
21622162

@@ -2183,7 +2183,7 @@ impl AddAssign for AddressTotals {
21832183
impl AddressTotals {
21842184
pub fn apply_delta(&mut self, delta: &TxTotals) {
21852185
self.received.lovelace += delta.received.lovelace;
2186-
self.sent.lovelace += delta.sent.lovelace as u64;
2186+
self.sent.lovelace += delta.sent.lovelace;
21872187

21882188
for (policy, assets) in &delta.received.assets {
21892189
for asset in assets {
@@ -2193,12 +2193,7 @@ impl AddressTotals {
21932193

21942194
for (policy, assets) in &delta.sent.assets {
21952195
for asset in assets {
2196-
Self::apply_asset(
2197-
&mut self.sent.assets,
2198-
*policy,
2199-
asset.name,
2200-
asset.amount.unsigned_abs(),
2201-
);
2196+
Self::apply_asset(&mut self.sent.assets, *policy, asset.name, asset.amount);
22022197
}
22032198
}
22042199

modules/address_state/src/state.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ impl State {
231231
#[cfg(test)]
232232
mod tests {
233233
use super::*;
234-
use acropolis_common::{Address, AddressDelta, UTxOIdentifier, Value, ValueDelta};
234+
use acropolis_common::{Address, AddressDelta, UTxOIdentifier, Value};
235235
use tempfile::tempdir;
236236

237237
fn dummy_address() -> Address {
@@ -261,18 +261,15 @@ mod tests {
261261
tx_id: TxIdentifier,
262262
spent_utxos: Vec<UTxOIdentifier>,
263263
created_utxos: Vec<UTxOIdentifier>,
264-
lovelace_sent: i64,
264+
lovelace_sent: u64,
265265
lovelace_received: u64,
266266
) -> AddressDelta {
267267
AddressDelta {
268268
address: addr.clone(),
269269
tx_identifier: tx_id,
270270
spent_utxos,
271271
created_utxos,
272-
sent: ValueDelta {
273-
lovelace: lovelace_sent,
274-
assets: Vec::new(),
275-
},
272+
sent: Value::new(lovelace_sent, Vec::new()),
276273
received: Value::new(lovelace_received, Vec::new()),
277274
}
278275
}
@@ -331,7 +328,7 @@ mod tests {
331328
let tx_id_spend = TxIdentifier::new(1, 0);
332329

333330
let created = vec![delta(&addr, tx_id_create, vec![], vec![utxo], 0, 1)];
334-
let spent = vec![delta(&addr, tx_id_spend, vec![utxo], vec![], -1, 0)];
331+
let spent = vec![delta(&addr, tx_id_spend, vec![utxo], vec![], 1, 0)];
335332
// Apply delta to volatile
336333
state.apply_address_deltas(&created);
337334

@@ -391,7 +388,7 @@ mod tests {
391388
tx_id_spend_old_create_new,
392389
vec![utxo_old],
393390
vec![utxo_new],
394-
-1,
391+
1,
395392
1,
396393
)]);
397394

modules/assets_state/src/state.rs

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use std::collections::HashSet;
44

55
use crate::asset_registry::{AssetId, AssetRegistry};
66
use acropolis_common::{
7-
math::update_value_with_delta,
87
queries::assets::{AssetHistory, PolicyAssets},
98
Address, AddressDelta, AssetAddressEntry, AssetInfoRecord, AssetMetadataStandard,
109
AssetMintRecord, AssetName, Datum, Lovelace, NativeAssetsDelta, PolicyAsset, PolicyId,
@@ -426,12 +425,7 @@ impl State {
426425
if let Some(asset_id) = registry.lookup_id(policy_id, &asset.name) {
427426
if let Some(holders) = addr_map.get_mut(&asset_id) {
428427
let current = holders.entry(shelley_addr.clone()).or_insert(0);
429-
if let Err(e) = update_value_with_delta(current, asset.amount) {
430-
error!(
431-
"Address balance update error for {:?}: {e}",
432-
address_delta.address
433-
);
434-
}
428+
*current = current.saturating_sub(asset.amount);
435429

436430
if *current == 0 {
437431
holders.remove(shelley_addr);
@@ -642,7 +636,7 @@ mod tests {
642636
use acropolis_common::{
643637
Address, AddressDelta, AssetInfoRecord, AssetMetadataStandard, AssetName, Datum,
644638
NativeAsset, NativeAssetDelta, PolicyId, ShelleyAddress, TxIdentifier, TxOutput,
645-
TxUTxODeltas, UTxOIdentifier, Value, ValueDelta,
639+
TxUTxODeltas, UTxOIdentifier, Value,
646640
};
647641

648642
fn dummy_policy(byte: u8) -> PolicyId {
@@ -740,19 +734,47 @@ mod tests {
740734
serde_cbor::to_vec(&serde_cbor::Value::Map(policy_map)).unwrap()
741735
}
742736

743-
fn make_address_delta(policy_id: PolicyId, name: AssetName, amount: i64) -> AddressDelta {
737+
fn make_address_delta(
738+
policy_id: PolicyId,
739+
name: AssetName,
740+
sent_amount: u64,
741+
received_amount: u64,
742+
) -> AddressDelta {
744743
AddressDelta {
745744
address: dummy_address(),
746745
tx_identifier: TxIdentifier::new(0, 0),
747746
spent_utxos: Vec::new(),
748747
created_utxos: Vec::new(),
749-
sent: ValueDelta {
750-
lovelace: 0,
751-
assets: vec![(policy_id, vec![NativeAssetDelta { name, amount }])]
752-
.into_iter()
753-
.collect(),
754-
},
755-
received: Value::default(),
748+
749+
sent: Value::new(
750+
0,
751+
if sent_amount > 0 {
752+
vec![(
753+
policy_id,
754+
vec![NativeAsset {
755+
name,
756+
amount: sent_amount,
757+
}],
758+
)]
759+
} else {
760+
vec![]
761+
},
762+
),
763+
764+
received: Value::new(
765+
0,
766+
if received_amount > 0 {
767+
vec![(
768+
policy_id,
769+
vec![NativeAsset {
770+
name,
771+
amount: received_amount,
772+
}],
773+
)]
774+
} else {
775+
vec![]
776+
},
777+
),
756778
}
757779
}
758780

@@ -1442,8 +1464,8 @@ mod tests {
14421464
StoreTransactions::None,
14431465
);
14441466

1445-
let delta1 = make_address_delta(policy_id, asset_name, 10);
1446-
let delta2 = make_address_delta(policy_id, asset_name, 15);
1467+
let delta1 = make_address_delta(policy_id, asset_name, 0, 10);
1468+
let delta2 = make_address_delta(policy_id, asset_name, 0, 15);
14471469

14481470
let new_state = state.handle_address_deltas(&[delta1, delta2], &registry).unwrap();
14491471
let addr_map = new_state.addresses.unwrap();
@@ -1475,7 +1497,7 @@ mod tests {
14751497
StoreTransactions::None,
14761498
);
14771499

1478-
let add_delta = make_address_delta(policy_id, asset_name, 10);
1500+
let add_delta = make_address_delta(policy_id, asset_name, 0, 10);
14791501
let state_after_add = state.handle_address_deltas(&[add_delta], &registry).unwrap();
14801502
let addr_map = state_after_add.addresses.as_ref().unwrap();
14811503
let holders = addr_map.get(&asset_id).unwrap();
@@ -1491,7 +1513,7 @@ mod tests {
14911513
10
14921514
);
14931515

1494-
let remove_delta = make_address_delta(policy_id, asset_name, -10);
1516+
let remove_delta = make_address_delta(policy_id, asset_name, 10, 0);
14951517
let state_after_remove =
14961518
state_after_add.handle_address_deltas(&[remove_delta], &registry).unwrap();
14971519
let addr_map = state_after_remove.addresses.as_ref().unwrap();

modules/stake_delta_filter/src/utils.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@ impl Tracker {
275275
.map(|a| a.to_string())
276276
.unwrap_or(Ok("(none)".to_owned()))
277277
.unwrap_or("(???)".to_owned());
278-
let lovelace_delta = event.address_delta.received.lovelace as i64
279-
- event.address_delta.sent.lovelace;
278+
let lovelace_delta = (event.address_delta.received.lovelace as i64)
279+
- (event.address_delta.sent.lovelace as i64);
280280
delta += lovelace_delta;
281281

282282
chunk.push(format!(
@@ -405,7 +405,7 @@ pub fn process_message(
405405
addresses_seen: HashSet::new(),
406406
txs_seen: HashSet::new(),
407407
});
408-
entry.delta += d.received.lovelace as i64 - d.sent.lovelace;
408+
entry.delta += (d.received.lovelace as i64) - (d.sent.lovelace as i64);
409409

410410
if let Some(shelley) = shelley_opt {
411411
if entry.addresses_seen.insert(shelley.clone()) {
@@ -435,7 +435,7 @@ mod test {
435435
use acropolis_common::{
436436
messages::AddressDeltasMessage, Address, AddressDelta, BlockHash, BlockInfo, BlockStatus,
437437
ByronAddress, Era, ShelleyAddress, ShelleyAddressDelegationPart, ShelleyAddressPaymentPart,
438-
ShelleyAddressPointer, StakeAddress, StakeCredential, ValueDelta,
438+
ShelleyAddressPointer, StakeAddress, StakeCredential,
439439
};
440440
use acropolis_common::{TxIdentifier, Value};
441441
use bech32::{Bech32, Hrp};
@@ -448,7 +448,7 @@ mod test {
448448
tx_identifier: TxIdentifier::default(),
449449
spent_utxos: Vec::new(),
450450
created_utxos: Vec::new(),
451-
sent: ValueDelta::default(),
451+
sent: Value::default(),
452452
received: Value::default(),
453453
})
454454
}

modules/utxo_state/src/state.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ use crate::volatile_index::VolatileIndex;
33
use acropolis_common::{
44
messages::UTXODeltasMessage, params::SECURITY_PARAMETER_K, BlockInfo, BlockStatus, TxOutput,
55
};
6-
use acropolis_common::{
7-
Address, AddressDelta, UTXOValue, UTxOIdentifier, Value, ValueDelta, ValueMap,
8-
};
6+
use acropolis_common::{Address, AddressDelta, UTXOValue, UTxOIdentifier, Value, ValueMap};
97
use anyhow::Result;
108
use async_trait::async_trait;
119
use std::collections::HashMap;
@@ -365,7 +363,7 @@ impl State {
365363
tx_identifier: tx.tx_identifier,
366364
spent_utxos: entry.spent_utxos,
367365
created_utxos: entry.created_utxos,
368-
sent: ValueDelta::from(entry.sent),
366+
sent: Value::from(entry.sent),
369367
received: Value::from(entry.received),
370368
};
371369
if let Some(observer) = self.address_delta_observer.as_ref() {
@@ -771,7 +769,7 @@ mod tests {
771769
&delta.address,
772770
Address::Byron(ByronAddress { payload }) if payload[0] == 99
773771
));
774-
let lovelace_net = delta.received.lovelace as i64 - delta.sent.lovelace;
772+
let lovelace_net = (delta.received.lovelace as i64) - (delta.sent.lovelace as i64);
775773
assert!(lovelace_net == 42 || lovelace_net == -42);
776774

777775
let mut balance = self.balance.lock().await;
@@ -801,7 +799,7 @@ mod tests {
801799
&& asset.amount == 200)
802800
);
803801
let key = (*policy, asset.name);
804-
*asset_balances.entry(key).or_insert(0) -= asset.amount;
802+
*asset_balances.entry(key).or_insert(0) -= asset.amount as i64;
805803
}
806804
}
807805
}

0 commit comments

Comments
 (0)