Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADP-3226] Use more IsRecentEra #4422

Merged
merged 4 commits into from
Feb 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions lib/balance-tx/lib/internal/Internal/Cardano/Write/Tx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -567,10 +567,10 @@ data TxOutInRecentEra =
-- Same contents as 'TxOut LatestLedgerEra'.

unwrapTxOutInRecentEra
:: RecentEra era
-> TxOutInRecentEra
:: forall era. IsRecentEra era
=> TxOutInRecentEra
-> TxOut era
unwrapTxOutInRecentEra era recentEraTxOut = case era of
unwrapTxOutInRecentEra recentEraTxOut = case recentEra @era of
RecentEraConway -> recentEraToConwayTxOut recentEraTxOut
RecentEraBabbage -> recentEraToBabbageTxOut recentEraTxOut

Expand Down Expand Up @@ -659,12 +659,11 @@ isBelowMinimumCoinForTxOut pp out =
-- Used to have a possibility for failure when we supported Alonzo and Babbage,
-- and could possibly become failable again with future eras.
utxoFromTxOutsInRecentEra
:: forall era. IsRecentEra era
=> RecentEra era
-> [(TxIn, TxOutInRecentEra)]
:: IsRecentEra era
=> [(TxIn, TxOutInRecentEra)]
-> Shelley.UTxO era
utxoFromTxOutsInRecentEra era =
Shelley.UTxO . Map.fromList . map (second (unwrapTxOutInRecentEra era))
utxoFromTxOutsInRecentEra =
Shelley.UTxO . Map.fromList . map (second unwrapTxOutInRecentEra)

--------------------------------------------------------------------------------
-- Tx
Expand All @@ -674,14 +673,15 @@ serializeTx
:: forall era. IsRecentEra era
=> Core.Tx era
-> ByteString
serializeTx tx = CardanoApi.serialiseToCBOR $ toCardanoApiTx @era tx
serializeTx tx =
CardanoApi.serialiseToCBOR $ toCardanoApiTx tx

--------------------------------------------------------------------------------
-- Compatibility
--------------------------------------------------------------------------------

fromCardanoApiTx
:: forall era. IsRecentEra era
:: IsRecentEra era
=> CardanoApi.Tx (CardanoApiEra era)
-> Core.Tx era
fromCardanoApiTx = \case
Expand All @@ -693,7 +693,7 @@ toCardanoApiTx
=> Core.Tx era
-> CardanoApi.Tx (CardanoApiEra era)
toCardanoApiTx =
CardanoApi.ShelleyTx (shelleyBasedEraFromRecentEra $ recentEra @era)
CardanoApi.ShelleyTx (shelleyBasedEra @era)

toCardanoApiUTxO
:: forall era. IsRecentEra era
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ data UTxOIndex era = UTxOIndex
}

constructUTxOIndex
:: forall era. IsRecentEra era
:: IsRecentEra era
=> UTxO era
-> UTxOIndex era
constructUTxOIndex ledgerUTxO =
Expand Down Expand Up @@ -539,7 +539,6 @@ balanceTransaction
assignMinimalAdaQuantitiesToOutputsWithoutAda pp
balanceWith strategy =
balanceTransactionWithSelectionStrategyAndNoZeroAdaAdjustment
@era @m @changeState
pp
timeTranslation
utxoAssumptions
Expand Down
33 changes: 18 additions & 15 deletions lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs

Large diffs are not rendered by default.

20 changes: 11 additions & 9 deletions lib/wallet/api/http/Cardano/Wallet/Api/Http/Shelley/Server.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2054,7 +2054,7 @@ selectCoins ctx@ApiLayer {..} argGenChange (ApiT walletId) body = do
withWorkerCtx ctx walletId liftE liftE $ \workerCtx -> do
let db = workerCtx ^. dbLayer

(Write.PParamsInAnyRecentEra _era pp, timeTranslation)
(Write.PParamsInAnyRecentEra era pp, timeTranslation)
<- liftIO $ W.readNodeTipStateForTxWrite netLayer

withdrawal <-
Expand All @@ -2073,7 +2073,7 @@ selectCoins ctx@ApiLayer {..} argGenChange (ApiT walletId) body = do

(tx, walletState) <-
liftIO $
W.buildTransaction @s
W.buildTransaction @s era
db timeTranslation genChange pp txCtx paymentOuts

let W.CoinSelection{..} =
Expand Down Expand Up @@ -2120,7 +2120,7 @@ selectCoinsForJoin ctx@ApiLayer{..}
--
poolStatus <- liftIO $ getPoolStatus poolId
pools <- liftIO knownPools
(Write.PParamsInAnyRecentEra _era pp, timeTranslation)
(Write.PParamsInAnyRecentEra era pp, timeTranslation)
<- liftIO @Handler $ W.readNodeTipStateForTxWrite netLayer
withWorkerCtx ctx walletId liftE liftE $ \workerCtx -> liftIO $ do
let db = workerCtx ^. typed @(DBLayer IO s)
Expand All @@ -2139,7 +2139,7 @@ selectCoinsForJoin ctx@ApiLayer{..}
let paymentOuts = []

(tx, walletState) <-
W.buildTransaction @s
W.buildTransaction @s era
db timeTranslation changeAddrGen pp txCtx paymentOuts

let W.CoinSelection{..} =
Expand Down Expand Up @@ -2176,7 +2176,7 @@ selectCoinsForQuit
-> ApiT WalletId
-> Handler (ApiCoinSelection n)
selectCoinsForQuit ctx@ApiLayer{..} (ApiT walletId) = do
(Write.PParamsInAnyRecentEra _era pp, timeTranslation)
(Write.PParamsInAnyRecentEra era pp, timeTranslation)
<- liftIO $ W.readNodeTipStateForTxWrite netLayer
withWorkerCtx ctx walletId liftE liftE $ \workerCtx -> liftIO $ do
let db = workerCtx ^. typed @(DBLayer IO s)
Expand All @@ -2196,7 +2196,7 @@ selectCoinsForQuit ctx@ApiLayer{..} (ApiT walletId) = do
let paymentOuts = []

(tx, walletState) <-
W.buildTransaction @s
W.buildTransaction @s era
db timeTranslation changeAddrGen pp txCtx paymentOuts

let W.CoinSelection{..} =
Expand Down Expand Up @@ -2912,7 +2912,8 @@ constructTransaction api argGenChange knownPools poolStatus apiWalletId body = d
mintBurnTimelockKeyWitCounts
apiWalletId
ApiBalanceTransactionPostData
{ transaction = ApiT (sealedTxFromCardanoBody unbalancedTx)
{ transaction = ApiT
$ sealedTxFromCardanoBody unbalancedTx
, inputs = []
, redeemers = []
, encoding = body ^. #encoding
Expand Down Expand Up @@ -3522,7 +3523,8 @@ balanceTransaction
partialTx <- parsePartialTx era
balancedTx <- liftHandler
. fmap
( Cardano.InAnyCardanoEra Write.cardanoEra
( Cardano.InAnyCardanoEra
(Write.cardanoEraFromRecentEra era)
. Write.toCardanoApiTx
. fst
)
Expand All @@ -3548,7 +3550,7 @@ balanceTransaction
-> Handler (Write.PartialTx era)
parsePartialTx era = do
let externalUTxO
= Write.utxoFromTxOutsInRecentEra era
= Write.utxoFromTxOutsInRecentEra
$ map fromExternalInput
$ body ^. #inputs

Expand Down
46 changes: 25 additions & 21 deletions lib/wallet/src/Cardano/Wallet.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2214,7 +2214,7 @@ buildAndSignTransactionPure
wallet <- get
(unsignedBalancedTx, updatedWalletState) <- lift $
first Write.toCardanoApiTx <$>
buildTransactionPure @s @era
buildTransactionPure @s
wallet
timeTranslation
utxoIndex
Expand Down Expand Up @@ -2285,8 +2285,9 @@ buildAndSignTransactionPure
, builtSealedTx = signedTx
}
where
era = recentEra @era
wF = walletFlavor @s
anyCardanoEra = Cardano.AnyCardanoEra $ Write.cardanoEra @era
anyCardanoEra = Cardano.AnyCardanoEra $ Write.cardanoEraFromRecentEra era

buildTransaction
:: forall s era.
Expand All @@ -2296,15 +2297,16 @@ buildTransaction
, HasSNetworkId (NetworkOf s)
, Excluding '[SharedKey] (KeyOf s)
)
=> DBLayer IO s
=> Write.RecentEra era
-> DBLayer IO s
-> TimeTranslation
-> ChangeAddressGen s
-> Write.PParams era
-> TransactionCtx
-> [TxOut]
-- ^ payment outputs
-> IO (Write.Tx era, Wallet s)
buildTransaction DBLayer{..} timeTranslation changeAddrGen
buildTransaction _era DBLayer{..} timeTranslation changeAddrGen
protocolParameters txCtx paymentOuts = do
stdGen <- initStdGen
atomically $ do
Expand All @@ -2322,7 +2324,7 @@ buildTransaction DBLayer{..} timeTranslation changeAddrGen
let utxo = availableUTxO @s pendingTxs wallet

fmap (\s' -> wallet { getState = s' }) <$>
buildTransactionPure @s @era
buildTransactionPure @s
wallet
timeTranslation
utxo
Expand Down Expand Up @@ -2358,13 +2360,14 @@ buildTransactionPure
= do
unsignedTxBody <-
withExceptT (Right . ErrConstructTxBody) . except $
mkUnsignedTransaction (recentEra @era)
mkUnsignedTransaction
(networkIdVal $ sNetworkId @(NetworkOf s))
(Left $ unsafeShelleyOnlyGetRewardXPub @s (getState wallet))
txCtx
(Left preSelection)
let utxoIndex =
Write.constructUTxOIndex @era $
let utxoIndex :: Write.UTxOIndex era
utxoIndex =
Write.constructUTxOIndex $
Write.fromWalletUTxO utxo
withExceptT Left $
balanceTransaction @_ @_ @s
Expand Down Expand Up @@ -2469,24 +2472,26 @@ buildAndSignTransaction ctx wid mkRwdAcct pwd txCtx sel = db & \DBLayer{..} ->

-- | Construct an unsigned transaction from a given selection.
constructTransaction
:: forall n era
. (Write.IsRecentEra era, HasSNetworkId n)
:: forall n era.
( HasSNetworkId n
, Write.IsRecentEra era
)
=> Write.RecentEra era
-> DBLayer IO (SeqState n ShelleyKey)
-> TransactionCtx
-> PreSelection
-> ExceptT ErrConstructTx IO (Cardano.TxBody (Write.CardanoApiEra era))
constructTransaction era db txCtx preSel = do
constructTransaction _era db txCtx preSel = do
(_, xpub, _) <- lift $ readRewardAccount db
mkUnsignedTransaction era netId (Left $ fromJust xpub) txCtx (Left preSel)
mkUnsignedTransaction netId (Left $ fromJust xpub) txCtx (Left preSel)
& withExceptT ErrConstructTxBody . except
where
netId = networkIdVal $ sNetworkId @n

constructUnbalancedSharedTransaction
:: forall n era.
( Write.IsRecentEra era
, HasSNetworkId n
( HasSNetworkId n
, Write.IsRecentEra era
)
=> Write.RecentEra era
-> DBLayer IO (SharedState n SharedKey)
Expand All @@ -2496,7 +2501,7 @@ constructUnbalancedSharedTransaction
( Cardano.TxBody (Write.CardanoApiEra era)
, (Address -> CA.Script KeyHash)
)
constructUnbalancedSharedTransaction era db txCtx sel = db & \DBLayer{..} -> do
constructUnbalancedSharedTransaction _era db txCtx sel = db & \DBLayer{..} -> do
cp <- lift $ atomically readCheckpoint
let s = getState cp
scriptM =
Expand All @@ -2516,7 +2521,7 @@ constructUnbalancedSharedTransaction era db txCtx sel = db & \DBLayer{..} -> do
in replaceCosignersWithVerKeys role' template ix
sealedTx <- mapExceptT atomically $ do
withExceptT ErrConstructTxBody $ ExceptT $ pure $
mkUnsignedTransaction era netId (Right scriptM) txCtx (Left sel)
mkUnsignedTransaction netId (Right scriptM) txCtx (Left sel)
pure (sealedTx, getScript)
where
netId = networkIdVal $ sNetworkId @n
Expand Down Expand Up @@ -3004,17 +3009,18 @@ transactionFee DBLayer{atomically, walletState} protocolParams
-- strict, and each field is defined in terms of 'Data.Map.Strict'.
--
evaluate
$ Write.constructUTxOIndex @era
$ Write.constructUTxOIndex
$ Write.fromWalletUTxO
$ availableUTxO mempty wallet
unsignedTxBody <- wrapErrMkTransaction $
mkUnsignedTransaction era
mkUnsignedTransaction
(networkIdVal $ sNetworkId @(NetworkOf s))
(Left $ unsafeShelleyOnlyGetRewardXPub @s (getState wallet))
txCtx
(Left preSelection)

let ptx = PartialTx
let ptx :: Write.PartialTx era
ptx = PartialTx
{ tx = Write.fromCardanoApiTx (Cardano.Tx unsignedTxBody [])
, inputs = Write.UTxO mempty
, redeemers = []
Expand All @@ -3039,8 +3045,6 @@ transactionFee DBLayer{atomically, walletState} protocolParams
Left otherErr ->
throwIO $ ExceptionBalanceTx otherErr
where
era = recentEra @era

wrapErrBalanceTx
= throwWrappedErr ExceptionBalanceTx

Expand Down
Loading
Loading