@@ -46,6 +46,9 @@ import Cardano.Crypto.Wallet
46
46
import Cardano.Wallet.Address.BIP32
47
47
( BIP32Path
48
48
)
49
+ import Cardano.Wallet.Deposit.IO.Network.Type
50
+ ( NetworkEnv (slotsToUTCTimes )
51
+ )
49
52
import Cardano.Wallet.Deposit.Pure
50
53
( Customer
51
54
, ValueTransfer
@@ -56,6 +59,7 @@ import Cardano.Wallet.Deposit.Pure
56
59
import Cardano.Wallet.Deposit.Pure.API.TxHistory
57
60
( ByCustomer
58
61
, ByTime
62
+ , getEraSlotOfBlock
59
63
)
60
64
import Cardano.Wallet.Deposit.Read
61
65
( Address
@@ -65,19 +69,28 @@ import Cardano.Wallet.Deposit.Read
65
69
import Cardano.Wallet.Network.Checkpoints.Policy
66
70
( defaultPolicy
67
71
)
72
+ import Cardano.Wallet.Read
73
+ ( applyEraFun
74
+ )
68
75
import Control.Tracer
69
76
( Tracer
70
77
, contramap
71
78
)
72
79
import Data.Bifunctor
73
80
( first
74
81
)
82
+ import Data.Foldable
83
+ ( Foldable (.. )
84
+ )
75
85
import Data.List.NonEmpty
76
86
( NonEmpty
77
87
)
78
88
import Data.Map.Strict
79
89
( Map
80
90
)
91
+ import Data.Ord
92
+ ( Down (.. )
93
+ )
81
94
import Data.Time
82
95
( UTCTime
83
96
)
@@ -92,6 +105,8 @@ import qualified Data.Delta as Delta
92
105
( Replace (.. )
93
106
)
94
107
import qualified Data.Delta.Update as Delta
108
+ import qualified Data.Map.Strict as Map
109
+ import qualified Data.Set as Set
95
110
import qualified Data.Store as Store
96
111
97
112
{- ----------------------------------------------------------------------------
@@ -113,8 +128,7 @@ data WalletBootEnv m = WalletBootEnv
113
128
type WalletStore = Store. UpdateStore IO Wallet. DeltaWalletState
114
129
115
130
-- | The full environment needed to run a wallet.
116
- data WalletEnv m
117
- = WalletEnv
131
+ data WalletEnv m = WalletEnv
118
132
{ bootEnv :: WalletBootEnv m
119
133
-- ^ The boot environment.
120
134
, store :: WalletStore
@@ -269,11 +283,27 @@ getAllDeposits w i =
269
283
Wallet. getAllDeposits i <$> readWalletState w
270
284
271
285
rollForward
272
- :: WalletInstance -> NonEmpty (Read. EraValue Read. Block ) -> tip -> IO ()
273
- rollForward w blocks _nodeTip =
286
+ :: WalletInstance
287
+ -> NonEmpty (Read. EraValue Read. Block )
288
+ -> tip
289
+ -> IO ()
290
+ rollForward w blocks _nodeTip = do
291
+ let blockSlots =
292
+ Set. fromList
293
+ $ applyEraFun getEraSlotOfBlock
294
+ <$> toList blocks
295
+ resolveSlot <-
296
+ fmap (flip Map. lookup )
297
+ $ flip slotsToUTCTimes blockSlots
298
+ $ networkEnv
299
+ $ bootEnv
300
+ $ env w
274
301
onWalletState w
275
302
$ Delta. update
276
- $ Delta. Replace . Wallet. rollForwardMany blocks
303
+ $ Delta. Replace
304
+ . Wallet. rollForwardMany
305
+ (fmap Down <$> resolveSlot)
306
+ blocks
277
307
278
308
rollBackward
279
309
:: WalletInstance -> Read. ChainPoint -> IO Read. ChainPoint
0 commit comments