@@ -4,7 +4,6 @@ use std::collections::HashSet;
44
55use crate :: asset_registry:: { AssetId , AssetRegistry } ;
66use 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 ( ) ;
0 commit comments