File tree Expand file tree Collapse file tree 2 files changed +24
-4
lines changed
modules/address_state/src Expand file tree Collapse file tree 2 files changed +24
-4
lines changed Original file line number Diff line number Diff line change @@ -162,13 +162,18 @@ impl ImmutableAddressStore {
162162 pub async fn get_utxos ( & self , address : & Address ) -> Result < Option < Vec < UTxOIdentifier > > > {
163163 let key = address. to_bytes_key ( ) ?;
164164
165+ let db_raw = self . utxos . get ( & key) ?;
166+ let db_had_key = db_raw. is_some ( ) ;
167+
165168 let mut live: Vec < UTxOIdentifier > =
166- self . utxos . get ( & key ) ? . map ( |bytes| decode ( & bytes) ) . transpose ( ) ?. unwrap_or_default ( ) ;
169+ db_raw . map ( |bytes| decode ( & bytes) ) . transpose ( ) ?. unwrap_or_default ( ) ;
167170
168171 let pending = self . pending . lock ( ) . await ;
172+ let mut pending_touched = false ;
169173 for block_map in pending. iter ( ) {
170174 if let Some ( entry) = block_map. get ( address) {
171175 if let Some ( deltas) = & entry. utxos {
176+ pending_touched = true ;
172177 for delta in deltas {
173178 match delta {
174179 UtxoDelta :: Created ( u) => live. push ( * u) ,
@@ -179,8 +184,13 @@ impl ImmutableAddressStore {
179184 }
180185 }
181186
187+ // Only return None if the address never existed
182188 if live. is_empty ( ) {
183- Ok ( None )
189+ if db_had_key || pending_touched {
190+ Ok ( Some ( vec ! [ ] ) )
191+ } else {
192+ Ok ( None )
193+ }
184194 } else {
185195 Ok ( Some ( live) )
186196 }
Original file line number Diff line number Diff line change @@ -81,14 +81,20 @@ impl State {
8181 }
8282
8383 let store = self . immutable . clone ( ) ;
84+ let mut db_had_address = false ;
8485 let mut combined: HashSet < UTxOIdentifier > = match store. get_utxos ( address) . await ? {
85- Some ( db) => db. into_iter ( ) . collect ( ) ,
86+ Some ( db) => {
87+ db_had_address = true ;
88+ db. into_iter ( ) . collect ( )
89+ }
8690 None => HashSet :: new ( ) ,
8791 } ;
8892
93+ let mut pending_touched = false ;
8994 for map in self . volatile . window . iter ( ) {
9095 if let Some ( entry) = map. get ( address) {
9196 if let Some ( deltas) = & entry. utxos {
97+ pending_touched = true ;
9298 for delta in deltas {
9399 match delta {
94100 UtxoDelta :: Created ( u) => {
@@ -104,7 +110,11 @@ impl State {
104110 }
105111
106112 if combined. is_empty ( ) {
107- Ok ( None )
113+ if db_had_address || pending_touched {
114+ Ok ( Some ( vec ! [ ] ) )
115+ } else {
116+ Ok ( None )
117+ }
108118 } else {
109119 Ok ( Some ( combined. into_iter ( ) . collect ( ) ) )
110120 }
You can’t perform that action at this time.
0 commit comments