From a8dc9c042687f3f6d27b59912100eaa054f7ceed Mon Sep 17 00:00:00 2001 From: sourabhxyz Date: Wed, 14 Aug 2024 17:23:38 +0530 Subject: [PATCH] feat: remove `GYEra`, abstract out api era type Related to #326. --- src/GeniusYield/CardanoApi/Query.hs | 16 ++----- src/GeniusYield/GYConfig.hs | 1 - src/GeniusYield/Providers/Node/AwaitTx.hs | 12 +++--- src/GeniusYield/Providers/Node/Query.hs | 52 +++++++++++------------ src/GeniusYield/Test/Clb.hs | 7 ++- src/GeniusYield/Test/Privnet/Setup.hs | 15 ++----- src/GeniusYield/Transaction.hs | 30 ++++++------- src/GeniusYield/Types/Address.hs | 5 ++- src/GeniusYield/Types/Certificate.hs | 5 ++- src/GeniusYield/Types/Era.hs | 38 ++--------------- src/GeniusYield/Types/NetworkId.hs | 12 ------ src/GeniusYield/Types/Script.hs | 9 ++-- src/GeniusYield/Types/Tx.hs | 7 +-- src/GeniusYield/Types/TxBody.hs | 19 +++++---- src/GeniusYield/Types/TxCert/Internal.hs | 5 ++- src/GeniusYield/Types/TxIn.hs | 5 ++- src/GeniusYield/Types/TxOut.hs | 5 ++- src/GeniusYield/Types/TxWdrl.hs | 5 ++- src/GeniusYield/Types/UTxO.hs | 13 +++--- src/GeniusYield/Types/Value.hs | 3 +- tests/GeniusYield/Test/Providers.hs | 13 +++--- 21 files changed, 113 insertions(+), 164 deletions(-) diff --git a/src/GeniusYield/CardanoApi/Query.hs b/src/GeniusYield/CardanoApi/Query.hs index 0f39ae16..06bb460d 100644 --- a/src/GeniusYield/CardanoApi/Query.hs +++ b/src/GeniusYield/CardanoApi/Query.hs @@ -10,7 +10,6 @@ module GeniusYield.CardanoApi.Query ( -- * Low-level query runners queryCardanoMode, queryConwayEra, - queryBabbageEra, queryUTxO, -- * Exception CardanoQueryException (..), @@ -44,21 +43,12 @@ queryCardanoMode info q = do Left err -> throwIO $ CardanoQueryException $ show err Right x -> return x -queryConwayEra :: Api.LocalNodeConnectInfo -> Api.QueryInShelleyBasedEra Api.ConwayEra a -> IO a +queryConwayEra :: Api.LocalNodeConnectInfo -> Api.QueryInShelleyBasedEra ApiEra a -> IO a queryConwayEra info q = do e <- queryCardanoMode info $ Api.QueryInEra $ Api.QueryInShelleyBasedEra Api.ShelleyBasedEraConway q case e of Left err -> throwIO $ CardanoQueryException $ show err Right x -> return x -queryBabbageEra :: Api.LocalNodeConnectInfo -> Api.QueryInShelleyBasedEra Api.BabbageEra a -> IO a -queryBabbageEra info q = do - e <- queryCardanoMode info $ Api.QueryInEra $ Api.QueryInShelleyBasedEra Api.ShelleyBasedEraBabbage q - case e of - Left err -> throwIO $ CardanoQueryException $ show err - Right x -> return x - - -queryUTxO :: GYEra -> Api.S.LocalNodeConnectInfo -> Api.QueryUTxOFilter -> IO GYUTxOs -queryUTxO GYBabbage info q = fmap utxosFromApi $ queryBabbageEra info $ Api.QueryUTxO q -queryUTxO GYConway info q = fmap utxosFromApi $ queryConwayEra info $ Api.QueryUTxO q +queryUTxO :: Api.S.LocalNodeConnectInfo -> Api.QueryUTxOFilter -> IO GYUTxOs +queryUTxO info q = fmap utxosFromApi $ queryConwayEra info $ Api.QueryUTxO q diff --git a/src/GeniusYield/GYConfig.hs b/src/GeniusYield/GYConfig.hs index 25c319ca..208931b7 100644 --- a/src/GeniusYield/GYConfig.hs +++ b/src/GeniusYield/GYConfig.hs @@ -158,7 +158,6 @@ withCfgProviders (gyGetParameters, gySlotActions', gyQueryUTxO', gyLookupDatum, gySubmitTx, gyAwaitTxConfirmed, gyGetStakeAddressInfo) <- case cfgCoreProvider of GYNodeKupo path kupoUrl -> do let info = nodeConnectInfo path cfgNetworkId - era = networkIdToEra cfgNetworkId kEnv <- KupoApi.newKupoApiEnv $ Text.unpack kupoUrl nodeSlotActions <- makeSlotActions slotCachingTime $ Node.nodeGetSlotOfCurrentBlock info pure diff --git a/src/GeniusYield/Providers/Node/AwaitTx.hs b/src/GeniusYield/Providers/Node/AwaitTx.hs index 23a88c53..ee5f550b 100644 --- a/src/GeniusYield/Providers/Node/AwaitTx.hs +++ b/src/GeniusYield/Providers/Node/AwaitTx.hs @@ -37,8 +37,8 @@ created since the tx - thus, there have been at least k confirmations. See: https://docs.cardano.org/about-cardano/learn/chain-confirmation-versus-transaction-confirmation/ -} -nodeAwaitTxConfirmed :: GYEra -> Api.LocalNodeConnectInfo -> GYAwaitTx -nodeAwaitTxConfirmed era info p@GYAwaitTxParameters{..} txId = go 0 +nodeAwaitTxConfirmed :: Api.LocalNodeConnectInfo -> GYAwaitTx +nodeAwaitTxConfirmed info p@GYAwaitTxParameters{..} txId = go 0 where go attempt | attempt >= maxAttempts = throwIO $ GYAwaitTxException p @@ -50,14 +50,14 @@ nodeAwaitTxConfirmed era info p@GYAwaitTxParameters{..} txId = go 0 However, this is an extreme edge case that is unlikely to ever exist in privnet tests (where this module is meant to be used, exclusively). -} - utxos <- nodeUtxosFromTx era info txId + utxos <- nodeUtxosFromTx info txId -- FIXME: This doesn't actually wait for confirmations. unless (utxosSize utxos /= 0) $ threadDelay checkInterval >> go (attempt + 1) -- | Obtain UTxOs created by a transaction. -nodeUtxosFromTx :: GYEra -> Api.LocalNodeConnectInfo -> GYTxId -> IO GYUTxOs -nodeUtxosFromTx era info txId = do +nodeUtxosFromTx :: Api.LocalNodeConnectInfo -> GYTxId -> IO GYUTxOs +nodeUtxosFromTx info txId = do {- We don't have a way to obtain utxos produced by a TxId. As an alternative, we could obtain the whole UTxO set and filter from there, but there's a faster way. @@ -75,7 +75,7 @@ nodeUtxosFromTx era info txId = do go mempty startIx uptoIx where go acc startIx uptoIx = do - utxos <- nodeUtxosAtTxOutRefs era info $ curry txOutRefFromTuple txId <$> [startIx .. uptoIx] + utxos <- nodeUtxosAtTxOutRefs info $ curry txOutRefFromTuple txId <$> [startIx .. uptoIx] let acc' = acc <> utxos if utxosSize utxos == 0 then pure acc' diff --git a/src/GeniusYield/Providers/Node/Query.hs b/src/GeniusYield/Providers/Node/Query.hs index 26518d21..c66c37d5 100644 --- a/src/GeniusYield/Providers/Node/Query.hs +++ b/src/GeniusYield/Providers/Node/Query.hs @@ -31,57 +31,57 @@ import GeniusYield.Types -- UTxO query ------------------------------------------------------------------------------- -nodeUtxosAtAddress :: GYEra -> Api.LocalNodeConnectInfo -> GYAddress -> Maybe GYAssetClass -> IO GYUTxOs -nodeUtxosAtAddress era info addr mAssetClass = do - utxos <- nodeUtxosAtAddresses era info [addr] +nodeUtxosAtAddress :: Api.LocalNodeConnectInfo -> GYAddress -> Maybe GYAssetClass -> IO GYUTxOs +nodeUtxosAtAddress info addr mAssetClass = do + utxos <- nodeUtxosAtAddresses info [addr] pure $ case mAssetClass of Nothing -> utxos Just assetClass -> filterUTxOs (\GYUTxO {utxoValue} -> valueAssetClass utxoValue assetClass /= 0) utxos -nodeUtxosAtAddresses :: GYEra -> Api.LocalNodeConnectInfo -> [GYAddress] -> IO GYUTxOs -nodeUtxosAtAddresses era info addrs = do - queryUTxO era info $ Api.QueryUTxOByAddress $ Set.fromList $ addressToApi <$> addrs +nodeUtxosAtAddresses :: Api.LocalNodeConnectInfo -> [GYAddress] -> IO GYUTxOs +nodeUtxosAtAddresses info addrs = do + queryUTxO info $ Api.QueryUTxOByAddress $ Set.fromList $ addressToApi <$> addrs -nodeUtxoAtTxOutRef :: GYEra -> Api.LocalNodeConnectInfo -> GYTxOutRef -> IO (Maybe GYUTxO) -nodeUtxoAtTxOutRef era info ref = do - utxos <- nodeUtxosAtTxOutRefs era info [ref] +nodeUtxoAtTxOutRef :: Api.LocalNodeConnectInfo -> GYTxOutRef -> IO (Maybe GYUTxO) +nodeUtxoAtTxOutRef info ref = do + utxos <- nodeUtxosAtTxOutRefs info [ref] case utxosToList utxos of [x] | utxoRef x == ref -> return (Just x) _ -> return Nothing -- we return Nothing also in "should never happen" cases. -nodeUtxosAtTxOutRefs :: GYEra -> Api.LocalNodeConnectInfo -> [GYTxOutRef] -> IO GYUTxOs -nodeUtxosAtTxOutRefs era info refs = queryUTxO era info $ Api.QueryUTxOByTxIn $ Set.fromList $ txOutRefToApi <$> refs +nodeUtxosAtTxOutRefs :: Api.LocalNodeConnectInfo -> [GYTxOutRef] -> IO GYUTxOs +nodeUtxosAtTxOutRefs info refs = queryUTxO info $ Api.QueryUTxOByTxIn $ Set.fromList $ txOutRefToApi <$> refs -- NOTE: This is extremely inefficient and only viable for a small private testnet. It queries the whole UTxO set. -nodeUtxosAtPaymentCredential :: GYEra -> Api.LocalNodeConnectInfo -> GYPaymentCredential -> Maybe GYAssetClass -> IO GYUTxOs -nodeUtxosAtPaymentCredential era info cred mAssetClass = do - utxos <- nodeUtxosAtPaymentCredentials era info [cred] +nodeUtxosAtPaymentCredential :: Api.LocalNodeConnectInfo -> GYPaymentCredential -> Maybe GYAssetClass -> IO GYUTxOs +nodeUtxosAtPaymentCredential info cred mAssetClass = do + utxos <- nodeUtxosAtPaymentCredentials info [cred] pure $ case mAssetClass of Nothing -> utxos Just assetClass -> filterUTxOs (\GYUTxO {utxoValue} -> valueAssetClass utxoValue assetClass /= 0) utxos -- NOTE: This is extremely inefficient and only viable for a small private testnet. It queries the whole UTxO set. -nodeUtxosAtPaymentCredentials :: GYEra -> Api.LocalNodeConnectInfo -> [GYPaymentCredential] -> IO GYUTxOs -nodeUtxosAtPaymentCredentials era info creds = do - allUtxos <- queryUTxO era info Api.QueryUTxOWhole +nodeUtxosAtPaymentCredentials :: Api.LocalNodeConnectInfo -> [GYPaymentCredential] -> IO GYUTxOs +nodeUtxosAtPaymentCredentials info creds = do + allUtxos <- queryUTxO info Api.QueryUTxOWhole pure $ filterUTxOs (\GYUTxO {utxoAddress} -> matchesCred $ addressToPaymentCredential utxoAddress) allUtxos where credSet = Set.fromList creds matchesCred Nothing = False matchesCred (Just cred) = cred `Set.member` credSet -nodeQueryUTxO :: GYEra -> Api.S.LocalNodeConnectInfo -> GYQueryUTxO -nodeQueryUTxO era info = GYQueryUTxO +nodeQueryUTxO :: Api.S.LocalNodeConnectInfo -> GYQueryUTxO +nodeQueryUTxO info = GYQueryUTxO { gyQueryUtxosAtTxOutRefsWithDatums' = Nothing - , gyQueryUtxosAtTxOutRefs' = nodeUtxosAtTxOutRefs era info + , gyQueryUtxosAtTxOutRefs' = nodeUtxosAtTxOutRefs info , gyQueryUtxosAtPaymentCredsWithDatums' = Nothing - , gyQueryUtxosAtPaymentCredentials' = nodeUtxosAtPaymentCredentials era info - , gyQueryUtxosAtPaymentCredential' = nodeUtxosAtPaymentCredential era info + , gyQueryUtxosAtPaymentCredentials' = nodeUtxosAtPaymentCredentials info + , gyQueryUtxosAtPaymentCredential' = nodeUtxosAtPaymentCredential info , gyQueryUtxosAtPaymentCredWithDatums' = Nothing , gyQueryUtxosAtAddressesWithDatums' = Nothing - , gyQueryUtxosAtAddresses' = nodeUtxosAtAddresses era info + , gyQueryUtxosAtAddresses' = nodeUtxosAtAddresses info , gyQueryUtxosAtAddressWithDatums' = Nothing - , gyQueryUtxosAtAddress' = nodeUtxosAtAddress era info - , gyQueryUtxoRefsAtAddress' = gyQueryUtxoRefsAtAddressDefault $ nodeUtxosAtAddress era info - , gyQueryUtxoAtTxOutRef' = nodeUtxoAtTxOutRef era info + , gyQueryUtxosAtAddress' = nodeUtxosAtAddress info + , gyQueryUtxoRefsAtAddress' = gyQueryUtxoRefsAtAddressDefault $ nodeUtxosAtAddress info + , gyQueryUtxoAtTxOutRef' = nodeUtxoAtTxOutRef info } diff --git a/src/GeniusYield/Test/Clb.hs b/src/GeniusYield/Test/Clb.hs index e0948d5f..172c3cba 100644 --- a/src/GeniusYield/Test/Clb.hs +++ b/src/GeniusYield/Test/Clb.hs @@ -89,13 +89,13 @@ import GeniusYield.TxBuilder.Common import GeniusYield.TxBuilder.Errors import GeniusYield.TxBuilder.User import GeniusYield.Types +import GeniusYield.Types.ProtocolParameters (protocolParametersFromApi) import Ouroboros.Consensus.HardFork.History.EraParams (EraParams (eraGenesisWin)) -import GeniusYield.Types.ProtocolParameters (protocolParametersFromApi) deriving newtype instance Num EpochSize deriving newtype instance Num EpochNo -type Clb = ClbT Api.ConwayEra Identity +type Clb = ClbT ApiEra Identity newtype GYTxRunEnv = GYTxRunEnv { runEnvWallet :: User } @@ -158,7 +158,7 @@ mkTestFor name action = (mkSimpleWallet (Clb.intToKeyPair 9)) -- | Helper for building tests - testNoErrorsTraceClb :: GYValue -> GYValue -> Clb.MockConfig Api.ConwayEra -> String -> Clb a -> Tasty.TestTree + testNoErrorsTraceClb :: GYValue -> GYValue -> Clb.MockConfig ApiEra -> String -> Clb a -> Tasty.TestTree testNoErrorsTraceClb funds walletFunds cfg msg act = testCaseInfo msg $ maybe (pure mockLog) assertFailure @@ -228,7 +228,6 @@ instance GYTxQueryMonad GYTxMonadClb where pure . GYPrivnet $ GYNetworkInfo { gyNetworkMagic = Api.S.unNetworkMagic $ Api.S.toNetworkMagic magic , gyNetworkEpochSlots = 500 - , gyNetworkEra = GYConway } lookupDatum :: GYDatumHash -> GYTxMonadClb (Maybe GYDatum) diff --git a/src/GeniusYield/Test/Privnet/Setup.hs b/src/GeniusYield/Test/Privnet/Setup.hs index 327746ce..6016e0d4 100644 --- a/src/GeniusYield/Test/Privnet/Setup.hs +++ b/src/GeniusYield/Test/Privnet/Setup.hs @@ -141,10 +141,6 @@ withPrivnet testnetOpts setupUser = do , testnetMagic } <- cardanoTestnetDefault testnetOpts conf - era <- case cardanoNodeEra testnetOpts of - Api.AnyCardanoEra Api.BabbageEra -> pure GYBabbage - Api.AnyCardanoEra Api.ConwayEra -> pure GYConway - Api.AnyCardanoEra x -> liftIO . die $ printf "Unsupported era: %s" (show x) liftIO . STM.atomically $ STM.writeTMVar tmvRuntime PrivnetRuntime -- TODO: Consider obtaining everything here from shelleyGenesis rather than testnetOpts. @@ -155,9 +151,8 @@ withPrivnet testnetOpts setupUser = do . poolRuntime $ head poolNodes , runtimeNetworkInfo = GYNetworkInfo - { gyNetworkEra = era - -- TODO: Conway support. - , gyNetworkEpochSlots = fromIntegral $ cardanoEpochLength testnetOpts + { -- TODO: Conway support. + gyNetworkEpochSlots = fromIntegral $ cardanoEpochLength testnetOpts , gyNetworkMagic = fromIntegral testnetMagic } , runtimeWallets = wallets @@ -217,16 +212,14 @@ withPrivnet testnetOpts setupUser = do debug $ printf "slotOfCurrentBlock = %s\n" slot withLCIClient info [] $ \lci -> do - let era = gyNetworkEra runtimeNetworkInfo - let localLookupDatum :: GYLookupDatum localLookupDatum = lciLookupDatum lci let localAwaitTxConfirmed :: GYAwaitTx - localAwaitTxConfirmed = nodeAwaitTxConfirmed era info + localAwaitTxConfirmed = nodeAwaitTxConfirmed info let localQueryUtxo :: GYQueryUTxO - localQueryUtxo = nodeQueryUTxO era info + localQueryUtxo = nodeQueryUTxO info let localGetParams :: GYGetParameters localGetParams = nodeGetParameters info diff --git a/src/GeniusYield/Transaction.hs b/src/GeniusYield/Transaction.hs index 55e0497d..93eeb01f 100644 --- a/src/GeniusYield/Transaction.hs +++ b/src/GeniusYield/Transaction.hs @@ -300,7 +300,7 @@ balanceTxStep isWdrlScriptWitness GYTxWdrlWitnessScript{} = True isWdrlScriptWitness _ = False -retColSup :: Api.BabbageEraOnwards Api.ConwayEra +retColSup :: Api.BabbageEraOnwards ApiEra retColSup = Api.BabbageEraOnwardsConway finalizeGYBalancedTx :: GYBuildTxEnv -> GYBalancedTx v -> Int -> Either GYBuildTxError GYTxBody @@ -369,7 +369,7 @@ finalizeGYBalancedTx GYInReferenceSimpleScript _ s -> getTotalKeysInSimpleScript s <> acc estimateKeyWitnessesFromNativeScripts acc _ = acc - inRefs :: Api.TxInsReference Api.BuildTx Api.ConwayEra + inRefs :: Api.TxInsReference Api.BuildTx ApiEra inRefs = case inRefs' of [] -> Api.TxInsReferenceNone _ -> Api.TxInsReference Api.BabbageEraOnwardsConway inRefs' @@ -388,33 +388,33 @@ finalizeGYBalancedTx outs' :: [Api.S.TxOut Api.S.CtxTx Api.S.ConwayEra] outs' = txOutToApi <$> outs - ins' :: [(Api.TxIn, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxTxIn Api.ConwayEra))] + ins' :: [(Api.TxIn, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxTxIn ApiEra))] ins' = [ txInToApi (isInlineDatum $ gyTxInDetDatum i) (gyTxInDet i) | i <- ins ] - collaterals' :: Api.TxInsCollateral Api.ConwayEra + collaterals' :: Api.TxInsCollateral ApiEra collaterals' = case utxosRefs collaterals of [] -> Api.TxInsCollateralNone orefs -> Api.TxInsCollateral Api.AlonzoEraOnwardsConway $ txOutRefToApi <$> orefs -- will be filled by makeTransactionBodyAutoBalance - fee :: Api.TxFee Api.ConwayEra + fee :: Api.TxFee ApiEra fee = Api.TxFeeExplicit Api.ShelleyBasedEraConway $ Ledger.Coin 0 - lb' :: Api.TxValidityLowerBound Api.ConwayEra + lb' :: Api.TxValidityLowerBound ApiEra lb' = maybe Api.TxValidityNoLowerBound (Api.TxValidityLowerBound Api.AllegraEraOnwardsConway . slotToApi) lb - ub' :: Api.TxValidityUpperBound Api.ConwayEra + ub' :: Api.TxValidityUpperBound ApiEra ub' = Api.TxValidityUpperBound Api.ShelleyBasedEraConway $ slotToApi <$> ub - extra :: Api.TxExtraKeyWitnesses Api.ConwayEra + extra :: Api.TxExtraKeyWitnesses ApiEra extra = case toList signers of [] -> Api.TxExtraKeyWitnessesNone pkhs -> Api.TxExtraKeyWitnesses Api.AlonzoEraOnwardsConway $ pubKeyHashToApi <$> pkhs - mint :: Api.TxMintValue Api.BuildTx Api.ConwayEra + mint :: Api.TxMintValue Api.BuildTx ApiEra mint = case mmint of Nothing -> Api.TxMintNone Just (v, xs) -> Api.TxMintValue Api.MaryEraOnwardsConway (valueToApi v) $ Api.BuildTxWith $ Map.fromList @@ -427,7 +427,7 @@ finalizeGYBalancedTx ] -- Putting `TxTotalCollateralNone` & `TxReturnCollateralNone` would have them appropriately calculated by `makeTransactionBodyAutoBalance` but then return collateral it generates is only for ada. To support multi-asset collateral input we therefore calculate correct values ourselves and put appropriate entries here to have `makeTransactionBodyAutoBalance` calculate appropriate overestimated fees. - (dummyTotCol :: Api.TxTotalCollateral Api.ConwayEra, dummyRetCol :: Api.TxReturnCollateral Api.CtxTx Api.ConwayEra) = + (dummyTotCol :: Api.TxTotalCollateral ApiEra, dummyRetCol :: Api.TxReturnCollateral Api.CtxTx ApiEra) = if mempty == collaterals then (Api.TxTotalCollateralNone, Api.TxReturnCollateralNone) else @@ -441,14 +441,14 @@ finalizeGYBalancedTx collateralTotalValue :: GYValue collateralTotalValue = foldMapUTxOs utxoValue collaterals - txMetadata :: Api.TxMetadataInEra Api.ConwayEra + txMetadata :: Api.TxMetadataInEra ApiEra txMetadata = maybe Api.TxMetadataNone toMetaInEra mbTxMetadata where - toMetaInEra :: GYTxMetadata -> Api.TxMetadataInEra Api.ConwayEra + toMetaInEra :: GYTxMetadata -> Api.TxMetadataInEra ApiEra toMetaInEra gymd = let md = txMetadataToApi gymd in if md == mempty then Api.TxMetadataNone else Api.TxMetadataInEra Api.ShelleyBasedEraConway md - wdrls' :: Api.TxWithdrawals Api.BuildTx Api.ConwayEra + wdrls' :: Api.TxWithdrawals Api.BuildTx ApiEra wdrls' = if wdrls == mempty then Api.TxWithdrawalsNone else Api.TxWithdrawals Api.ShelleyBasedEraConway $ map txWdrlToApi wdrls certs' = @@ -466,7 +466,7 @@ finalizeGYBalancedTx unregisteredStakeCredsMap = Map.fromList [ (stakeCredentialToApi sc, fromIntegral amt) | GYStakeAddressDeregistrationCertificate amt sc <- map gyTxCertCertificate' certs] - body :: Api.TxBodyContent Api.BuildTx Api.ConwayEra + body :: Api.TxBodyContent Api.BuildTx ApiEra body = Api.TxBodyContent { Api.txIns = ins', @@ -655,4 +655,4 @@ collapseExtraOut apiOut@(Api.TxOut _ outVal _ _) bodyContent@Api.TxBodyContent { where (skeletonOuts, changeOuts) = splitAt numSkeletonOuts txOuts -type ShelleyBasedConwayEra = Api.S.ShelleyLedgerEra Api.ConwayEra +type ShelleyBasedConwayEra = Api.S.ShelleyLedgerEra ApiEra diff --git a/src/GeniusYield/Types/Address.hs b/src/GeniusYield/Types/Address.hs index 3dd71851..bb07c4d5 100644 --- a/src/GeniusYield/Types/Address.hs +++ b/src/GeniusYield/Types/Address.hs @@ -92,6 +92,7 @@ import GeniusYield.Types.Credential (GYPaymentCredential, stakeCredentialFromApi, stakeCredentialToApi, stakeCredentialToHexText) +import GeniusYield.Types.Era import GeniusYield.Types.Ledger import GeniusYield.Types.NetworkId import GeniusYield.Types.PaymentKeyHash (GYPaymentKeyHash, @@ -147,11 +148,11 @@ instance Hashable GYAddress where addressToApi :: GYAddress -> Api.AddressAny addressToApi = coerce -addressToApi' :: GYAddress -> Api.AddressInEra Api.ConwayEra +addressToApi' :: GYAddress -> Api.AddressInEra ApiEra addressToApi' = coerce addrAnyToConwayEra -- not exported -addrAnyToConwayEra :: Api.AddressAny -> Api.AddressInEra Api.ConwayEra +addrAnyToConwayEra :: Api.AddressAny -> Api.AddressInEra ApiEra addrAnyToConwayEra (Api.AddressByron addr) = Api.AddressInEra Api.ByronAddressInAnyEra addr addrAnyToConwayEra (Api.AddressShelley addr) = Api.AddressInEra (Api.ShelleyAddressInEra Api.ShelleyBasedEraConway) addr diff --git a/src/GeniusYield/Types/Certificate.hs b/src/GeniusYield/Types/Certificate.hs index d88d248c..c3a8e54a 100644 --- a/src/GeniusYield/Types/Certificate.hs +++ b/src/GeniusYield/Types/Certificate.hs @@ -26,6 +26,7 @@ import GeniusYield.Types.Credential (GYStakeCredential, import GeniusYield.Types.Delegatee (GYDelegatee, delegateeFromLedger, delegateeToLedger) +import GeniusYield.Types.Era import GeniusYield.Types.ProtocolParameters (GYProtocolParameters, protocolParametersToApi) import GHC.Natural (Natural) @@ -58,7 +59,7 @@ finaliseCert (protocolParametersToApi -> pp) = \case Ledger.Coin ppDep = pp ^. Ledger.ppKeyDepositL ppDep' :: Natural = fromIntegral ppDep -certificateToApi :: GYCertificate -> Api.Certificate Api.ConwayEra +certificateToApi :: GYCertificate -> Api.Certificate ApiEra certificateToApi = \case GYStakeAddressRegistrationCertificate dep sc -> Api.makeStakeAddressRegistrationCertificate . Api.StakeAddrRegistrationConway Api.ConwayEraOnwardsConway (fromIntegral dep) $ f sc @@ -71,7 +72,7 @@ certificateToApi = \case f = stakeCredentialToApi g = delegateeToLedger -certificateFromApiMaybe :: Api.Certificate Api.ConwayEra -> Maybe GYCertificate +certificateFromApiMaybe :: Api.Certificate ApiEra -> Maybe GYCertificate certificateFromApiMaybe (Api.ConwayCertificate _ x) = case x of Ledger.ConwayTxCertDeleg delCert -> case delCert of Ledger.ConwayRegCert sc (Ledger.SJust dep) -> Just $ GYStakeAddressRegistrationCertificate (fromIntegral dep) (f sc) diff --git a/src/GeniusYield/Types/Era.hs b/src/GeniusYield/Types/Era.hs index 09cc9422..8f811c54 100644 --- a/src/GeniusYield/Types/Era.hs +++ b/src/GeniusYield/Types/Era.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveGeneric #-} {-| Module : GeniusYield.Types.Era Copyright : (c) 2023 GYELD GMBH @@ -8,43 +7,12 @@ Stability : develop -} module GeniusYield.Types.Era ( - GYEra (..), + ApiEra, ConwayEra, ) where import qualified Cardano.Api.Shelley as Api.S -import qualified Data.Aeson as Aeson -import Data.Text (Text) -import GHC.Generics (Generic) +-- TODO: Make this module internal. type ConwayEra = Api.S.ShelleyLedgerEra Api.S.ConwayEra - --- $setup --- --- >>> :set -XOverloadedStrings -XTypeApplications --- >>> import qualified Data.Aeson as Aeson - --- | Eras at which cardano-node provider may operate. --- --- We will drop the older eras when the transition to them is complete. --- --- >>> Aeson.encode GYConway --- "\"Conway\"" --- --- >>> Aeson.decode @GYEra "\"Babbage\"" --- Just GYBabbage --- -data GYEra = GYBabbage | GYConway - deriving (Show, Read, Eq, Ord, Generic) - -instance Aeson.ToJSON GYEra where - toJSON GYConway = Aeson.toJSON ("Conway" :: Text) - toJSON GYBabbage = Aeson.toJSON ("Babbage" :: Text) - - toEncoding GYConway = Aeson.toEncoding ("Conway" :: Text) - toEncoding GYBabbage = Aeson.toEncoding ("Babbage" :: Text) - -instance Aeson.FromJSON GYEra where - parseJSON "Conway" = pure GYConway - parseJSON "Babbage" = pure GYBabbage - parseJSON _ = fail "Expected 'Conway' or 'Babbage'" +type ApiEra = Api.S.ConwayEra diff --git a/src/GeniusYield/Types/NetworkId.hs b/src/GeniusYield/Types/NetworkId.hs index b9755c36..1a02be96 100644 --- a/src/GeniusYield/Types/NetworkId.hs +++ b/src/GeniusYield/Types/NetworkId.hs @@ -12,7 +12,6 @@ module GeniusYield.Types.NetworkId , networkIdToApi , networkIdToLedger , networkIdToEpochSlots - , networkIdToEra ) where import qualified Cardano.Api as Api @@ -22,8 +21,6 @@ import qualified Data.Text as T import Data.Word (Word32, Word64) import Deriving.Aeson -import GeniusYield.Types.Era - -- $setup -- -- >>> :set -XOverloadedStrings -XTypeApplications @@ -57,18 +54,9 @@ networkIdToEpochSlots GYTestnetPreprod = Api.EpochSlots 432000 networkIdToEpochSlots GYTestnetPreview = Api.EpochSlots 86400 networkIdToEpochSlots GYTestnetLegacy = Api.EpochSlots 432000 --- This needs to be updated whenever a hardfork happens. -networkIdToEra :: GYNetworkId -> GYEra -networkIdToEra (GYPrivnet netInfo) = gyNetworkEra netInfo -networkIdToEra GYMainnet = GYBabbage -networkIdToEra GYTestnetPreprod = GYBabbage -networkIdToEra GYTestnetPreview = GYBabbage -networkIdToEra GYTestnetLegacy = GYBabbage - data GYNetworkInfo = GYNetworkInfo { gyNetworkMagic :: !Word32 , gyNetworkEpochSlots :: !Word64 - , gyNetworkEra :: !GYEra } deriving (Show, Read, Eq, Ord, Generic) deriving (FromJSON, ToJSON) via CustomJSON '[FieldLabelModifier '[StripPrefix "gy", CamelToSnake]] GYNetworkInfo diff --git a/src/GeniusYield/Types/Script.hs b/src/GeniusYield/Types/Script.hs index 26ed1259..f47d6d50 100644 --- a/src/GeniusYield/Types/Script.hs +++ b/src/GeniusYield/Types/Script.hs @@ -164,6 +164,7 @@ import qualified Data.Swagger.Internal.Schema as Swagger import qualified Data.Text as Text import qualified Data.Text.Encoding as TE import GeniusYield.Imports +import GeniusYield.Types.Era (ApiEra) import GeniusYield.Types.Ledger (PlutusToCardanoError (..)) import GeniusYield.Types.PlutusVersion import GeniusYield.Types.Script.ScriptHash @@ -229,7 +230,7 @@ validatorToApiPlutusScriptWitness -> Api.ScriptDatum Api.WitCtxTxIn -> Api.ScriptRedeemer -> Api.ExecutionUnits - -> Api.ScriptWitness Api.WitCtxTxIn Api.ConwayEra + -> Api.ScriptWitness Api.WitCtxTxIn ApiEra validatorToApiPlutusScriptWitness (GYValidator s) = scriptToApiPlutusScriptWitness s @@ -345,7 +346,7 @@ mintingPolicyToApiPlutusScriptWitness :: GYMintingPolicy v -> Api.ScriptRedeemer -> Api.ExecutionUnits - -> Api.ScriptWitness Api.WitCtxMint Api.ConwayEra + -> Api.ScriptWitness Api.WitCtxMint ApiEra mintingPolicyToApiPlutusScriptWitness (GYMintingPolicy s) = scriptToApiPlutusScriptWitness s Api.NoScriptDatumForMint @@ -518,7 +519,7 @@ stakeValidatorToApiPlutusScriptWitness :: GYStakeValidator v -> Api.ScriptRedeemer -> Api.ExecutionUnits - -> Api.ScriptWitness Api.WitCtxStake Api.ConwayEra + -> Api.ScriptWitness Api.WitCtxStake ApiEra stakeValidatorToApiPlutusScriptWitness (GYStakeValidator s) = scriptToApiPlutusScriptWitness s Api.NoScriptDatumForStake @@ -781,7 +782,7 @@ scriptToApiPlutusScriptWitness -> Api.S.ScriptDatum ctx -> Api.ScriptRedeemer -> Api.ExecutionUnits - -> Api.ScriptWitness ctx Api.ConwayEra + -> Api.ScriptWitness ctx ApiEra scriptToApiPlutusScriptWitness (GYScript v api _) = case v of SingPlutusV1 -> Api.PlutusScriptWitness Api.PlutusScriptV1InConway diff --git a/src/GeniusYield/Types/Tx.hs b/src/GeniusYield/Types/Tx.hs index 3745f197..34faf9ea 100644 --- a/src/GeniusYield/Types/Tx.hs +++ b/src/GeniusYield/Types/Tx.hs @@ -69,6 +69,7 @@ import qualified Web.HttpApiData as Web import Cardano.Ledger.Core (eraProtVerHigh) import GeniusYield.Imports +import GeniusYield.Types.Era (ApiEra) import GeniusYield.Types.PlutusVersion (PlutusVersion (..), VersionIsGreater) @@ -89,7 +90,7 @@ import GeniusYield.Types.PlutusVersion (PlutusVersion (..), -- >>> let tx = fromMaybe (error "Not able to convert hex string to GYTx") (txFromHex $ Text.unpack $ TE.decodeUtf8 txHexBS) -- -newtype GYTx = GYTx (Api.Tx Api.ConwayEra) +newtype GYTx = GYTx (Api.Tx ApiEra) -- | -- @@ -116,10 +117,10 @@ instance Swagger.ToSchema GYTx where & Swagger.example ?~ toJSON ("84a70082825820975e4c7f8d7937f8102e500714feb3f014c8766fcf287a11c10c686154fcb27501825820c887cba672004607a0f60ab28091d5c24860dbefb92b1a8776272d752846574f000d818258207a67cd033169e330c9ae9b8d0ef8b71de9eb74bbc8f3f6be90446dab7d1e8bfd00018282583900fd040c7a10744b79e5c80ec912a05dbdb3009e372b7f4b0f026d16b0c663651ffc046068455d2994564ba9d4b3e9b458ad8ab5232aebbf401a1abac7d882583900fd040c7a10744b79e5c80ec912a05dbdb3009e372b7f4b0f026d16b0c663651ffc046068455d2994564ba9d4b3e9b458ad8ab5232aebbf40821a0017ad4aa2581ca6bb5fd825455e7c69bdaa9d3a6dda9bcbe9b570bc79bd55fa50889ba1466e69636b656c1911d7581cb17cb47f51d6744ad05fb937a762848ad61674f8aebbaec67be0bb6fa14853696c6c69636f6e190258021a00072f3c0e8009a1581cb17cb47f51d6744ad05fb937a762848ad61674f8aebbaec67be0bb6fa14853696c6c69636f6e1902580b5820291b4e4c5f189cb896674e02e354028915b11889687c53d9cf4c1c710ff5e4aea203815908d45908d101000033332332232332232323232323232323232323232323232323232222223232323235500222222222225335333553024120013232123300122333500522002002001002350012200112330012253350021001102d02c25335325335333573466e3cd400488008d404c880080b40b04ccd5cd19b873500122001350132200102d02c102c3500122002102b102c00a132635335738921115554784f206e6f7420636f6e73756d65640002302115335333573466e3c048d5402c880080ac0a854cd4ccd5cd19b8701335500b2200102b02a10231326353357389210c77726f6e6720616d6f756e740002302113263533573892010b77726f6e6720746f6b656e00023021135500122222222225335330245027007162213500222253350041335502d00200122161353333573466e1cd55cea8012400046644246600200600464646464646464646464646666ae68cdc39aab9d500a480008cccccccccc888888888848cccccccccc00402c02802402001c01801401000c008cd40548c8c8cccd5cd19b8735573aa0049000119910919800801801180f1aba15002301a357426ae8940088c98d4cd5ce01381401301289aab9e5001137540026ae854028cd4054058d5d0a804999aa80c3ae501735742a010666aa030eb9405cd5d0a80399a80a80f1aba15006335015335502101f75a6ae854014c8c8c8cccd5cd19b8735573aa00490001199109198008018011919191999ab9a3370e6aae754009200023322123300100300233502475a6ae854008c094d5d09aba2500223263533573805605805405226aae7940044dd50009aba150023232323333573466e1cd55cea8012400046644246600200600466a048eb4d5d0a80118129aba135744a004464c6a66ae700ac0b00a80a44d55cf280089baa001357426ae8940088c98d4cd5ce01381401301289aab9e5001137540026ae854010cd4055d71aba15003335015335502175c40026ae854008c06cd5d09aba2500223263533573804604804404226ae8940044d5d1280089aba25001135744a00226ae8940044d5d1280089aba25001135744a00226aae7940044dd50009aba150023232323333573466e1d400520062321222230040053016357426aae79400c8cccd5cd19b875002480108c848888c008014c060d5d09aab9e500423333573466e1d400d20022321222230010053014357426aae7940148cccd5cd19b875004480008c848888c00c014dd71aba135573ca00c464c6a66ae7007807c07407006c0680644d55cea80089baa001357426ae8940088c98d4cd5ce00b80c00b00a9100109aab9e5001137540022464460046eb0004c8004d5406488cccd55cf8009280c119a80b98021aba100230033574400402446464646666ae68cdc39aab9d5003480008ccc88848ccc00401000c008c8c8c8cccd5cd19b8735573aa004900011991091980080180118099aba1500233500c012357426ae8940088c98d4cd5ce00b00b80a80a09aab9e5001137540026ae85400cccd5401dd728031aba1500233500875c6ae84d5d1280111931a99ab9c012013011010135744a00226aae7940044dd5000899aa800bae75a224464460046eac004c8004d5405c88c8cccd55cf8011280b919a80b19aa80c18031aab9d5002300535573ca00460086ae8800c0444d5d080089119191999ab9a3370ea0029000119091180100198029aba135573ca00646666ae68cdc3a801240044244002464c6a66ae7004004403c0380344d55cea80089baa001232323333573466e1cd55cea80124000466442466002006004600a6ae854008dd69aba135744a004464c6a66ae7003403803002c4d55cf280089baa0012323333573466e1cd55cea800a400046eb8d5d09aab9e500223263533573801601801401226ea8004488c8c8cccd5cd19b87500148010848880048cccd5cd19b875002480088c84888c00c010c018d5d09aab9e500423333573466e1d400d20002122200223263533573801c01e01a01801601426aae7540044dd50009191999ab9a3370ea0029001100911999ab9a3370ea0049000100911931a99ab9c00a00b009008007135573a6ea80048c8c8c8c8c8cccd5cd19b8750014803084888888800c8cccd5cd19b875002480288488888880108cccd5cd19b875003480208cc8848888888cc004024020dd71aba15005375a6ae84d5d1280291999ab9a3370ea00890031199109111111198010048041bae35742a00e6eb8d5d09aba2500723333573466e1d40152004233221222222233006009008300c35742a0126eb8d5d09aba2500923333573466e1d40192002232122222223007008300d357426aae79402c8cccd5cd19b875007480008c848888888c014020c038d5d09aab9e500c23263533573802402602202001e01c01a01801601426aae7540104d55cf280189aab9e5002135573ca00226ea80048c8c8c8c8cccd5cd19b875001480088ccc888488ccc00401401000cdd69aba15004375a6ae85400cdd69aba135744a00646666ae68cdc3a80124000464244600400660106ae84d55cf280311931a99ab9c00b00c00a009008135573aa00626ae8940044d55cf280089baa001232323333573466e1d400520022321223001003375c6ae84d55cf280191999ab9a3370ea004900011909118010019bae357426aae7940108c98d4cd5ce00400480380300289aab9d5001137540022244464646666ae68cdc39aab9d5002480008cd5403cc018d5d0a80118029aba135744a004464c6a66ae7002002401c0184d55cf280089baa00149924103505431001200132001355008221122253350011350032200122133350052200230040023335530071200100500400132001355007222533500110022213500222330073330080020060010033200135500622225335001100222135002225335333573466e1c005200000d00c13330080070060031333008007335009123330010080030020060031122002122122330010040031122123300100300212200212200111232300100122330033002002001482c0252210853696c6c69636f6e003351223300248920975e4c7f8d7937f8102e500714feb3f014c8766fcf287a11c10c686154fcb27500480088848cc00400c00880050581840100d87980821a001f372a1a358a2b14f5f6" :: String) & Swagger.description ?~ "Transaction cbor hex string" -txFromApi :: Api.Tx Api.ConwayEra -> GYTx +txFromApi :: Api.Tx ApiEra -> GYTx txFromApi = coerce -txToApi :: GYTx -> Api.Tx Api.ConwayEra +txToApi :: GYTx -> Api.Tx ApiEra txToApi = coerce instance Web.FromHttpApiData GYTx where diff --git a/src/GeniusYield/Types/TxBody.hs b/src/GeniusYield/Types/TxBody.hs index 79a120bc..ebf675f6 100644 --- a/src/GeniusYield/Types/TxBody.hs +++ b/src/GeniusYield/Types/TxBody.hs @@ -55,6 +55,7 @@ import qualified Data.ByteString.Char8 as BS8 import qualified Data.Set as Set import GeniusYield.Imports +import GeniusYield.Types.Era import GeniusYield.Types.Key (GYSomeSigningKey (GYSomeSigningKey)) import GeniusYield.Types.Key.Class (ToShelleyWitnessSigningKey, toShelleyWitnessSigningKey) @@ -66,13 +67,13 @@ import GeniusYield.Types.UTxO import GeniusYield.Types.Value -- | Transaction body: the part which is then signed. -newtype GYTxBody = GYTxBody (Api.TxBody Api.ConwayEra) +newtype GYTxBody = GYTxBody (Api.TxBody ApiEra) deriving Show -txBodyFromApi :: Api.TxBody Api.ConwayEra -> GYTxBody +txBodyFromApi :: Api.TxBody ApiEra -> GYTxBody txBodyFromApi = coerce -txBodyToApi :: GYTxBody -> Api.TxBody Api.ConwayEra +txBodyToApi :: GYTxBody -> Api.TxBody ApiEra txBodyToApi = coerce -- | Sign a transaction body with (potentially) multiple keys. @@ -100,7 +101,7 @@ makeSignedTransaction :: GYTxWitness -> GYTxBody -> GYTx makeSignedTransaction txWit txBody = makeSignedTransaction' (txWitToKeyWitnessApi txWit) $ txBodyToApi txBody -- | Make a signed transaction given the transaction body & list of key witnesses. -makeSignedTransaction' :: [Api.S.KeyWitness Api.S.ConwayEra] -> Api.TxBody Api.ConwayEra -> GYTx +makeSignedTransaction' :: [Api.S.KeyWitness Api.S.ConwayEra] -> Api.TxBody ApiEra -> GYTx makeSignedTransaction' = fmap txFromApi <$> Api.makeSignedTransaction -- | Add a key witness(s) to a transaction, represented in `GYTxWitness`, which might already have previous key witnesses. @@ -176,7 +177,7 @@ txBodyUTxOs (GYTxBody body@(Api.TxBody Api.TxBodyContent {txOuts})) = where txId = Api.getTxId body - f :: Word -> Api.TxOut Api.CtxTx Api.ConwayEra -> GYUTxO + f :: Word -> Api.TxOut Api.CtxTx ApiEra -> GYUTxO f i = utxoFromApi (Api.TxIn txId (Api.TxIx i)) -- | Returns the 'GYTxOutRef' consumed by the tx. @@ -197,7 +198,7 @@ txBodyTxId = txIdFromApi . Api.getTxId . txBodyToApi getTxBody :: GYTx -> GYTxBody getTxBody = txBodyFromApi . Api.getTxBody . txToApi -txBodyToApiTxBodyContent :: GYTxBody -> Api.TxBodyContent Api.ViewTx Api.ConwayEra +txBodyToApiTxBodyContent :: GYTxBody -> Api.TxBodyContent Api.ViewTx ApiEra txBodyToApiTxBodyContent body = let Api.TxBody bc = txBodyToApi body in bc -- | Returns the required signatories of the given 'GYTxBody'. @@ -219,11 +220,11 @@ txBodyValidityRange body = in case (Api.txValidityLowerBound cnt, Api.txValidityUpperBound cnt) of (lb, ub) -> (f lb, g ub) where - f :: Api.TxValidityLowerBound Api.ConwayEra -> Maybe GYSlot + f :: Api.TxValidityLowerBound ApiEra -> Maybe GYSlot f Api.TxValidityNoLowerBound = Nothing f (Api.TxValidityLowerBound _ sn) = Just $ slotFromApi sn - g :: Api.TxValidityUpperBound Api.ConwayEra -> Maybe GYSlot + g :: Api.TxValidityUpperBound ApiEra -> Maybe GYSlot g (Api.TxValidityUpperBound _ Nothing) = Nothing g (Api.TxValidityUpperBound _ (Just sn)) = Just $ slotFromApi sn @@ -241,7 +242,7 @@ txBodyTotalCollateralLovelace body = case Api.txTotalCollateral $ txBodyToApiTxB | l >= 0 -> fromInteger l | otherwise -> error $ "negative total collateral: " <> show l -txBodyCollateralReturnOutput :: GYTxBody -> Api.TxReturnCollateral Api.CtxTx Api.ConwayEra +txBodyCollateralReturnOutput :: GYTxBody -> Api.TxReturnCollateral Api.CtxTx ApiEra txBodyCollateralReturnOutput body = Api.txReturnCollateral $ txBodyToApiTxBodyContent body txBodyCollateralReturnOutputValue :: GYTxBody -> GYValue diff --git a/src/GeniusYield/Types/TxCert/Internal.hs b/src/GeniusYield/Types/TxCert/Internal.hs index 87c45c45..1a258cd1 100644 --- a/src/GeniusYield/Types/TxCert/Internal.hs +++ b/src/GeniusYield/Types/TxCert/Internal.hs @@ -20,6 +20,7 @@ import Data.Functor ((<&>)) import GeniusYield.Imports ((&)) import GeniusYield.Types.Certificate import GeniusYield.Types.Credential (stakeCredentialToApi) +import GeniusYield.Types.Era import GeniusYield.Types.ProtocolParameters (GYProtocolParameters) import GeniusYield.Types.Redeemer import GeniusYield.Types.Script @@ -56,10 +57,10 @@ data GYTxCertWitness v txCertToApi :: GYTxCert' v - -> (Api.Certificate Api.ConwayEra, Maybe (Api.StakeCredential, Api.Witness Api.WitCtxStake Api.ConwayEra)) + -> (Api.Certificate ApiEra, Maybe (Api.StakeCredential, Api.Witness Api.WitCtxStake ApiEra)) txCertToApi (GYTxCert' cert wit) = (certificateToApi cert, wit <&> (\wit' -> (certificateToStakeCredential cert & stakeCredentialToApi, f wit')) ) where - f :: GYTxCertWitness v -> Api.Witness Api.WitCtxStake Api.ConwayEra + f :: GYTxCertWitness v -> Api.Witness Api.WitCtxStake ApiEra f GYTxCertWitnessKey = Api.KeyWitness Api.KeyWitnessForStakeAddr f (GYTxCertWitnessScript v r) = Api.ScriptWitness Api.ScriptWitnessForStakeAddr $ diff --git a/src/GeniusYield/Types/TxIn.hs b/src/GeniusYield/Types/TxIn.hs index 2323e366..00d8456e 100644 --- a/src/GeniusYield/Types/TxIn.hs +++ b/src/GeniusYield/Types/TxIn.hs @@ -19,6 +19,7 @@ import qualified Cardano.Api as Api import qualified Cardano.Api.Shelley as Api import Data.GADT.Compare (defaultEq) import GeniusYield.Types.Datum +import GeniusYield.Types.Era import GeniusYield.Types.PlutusVersion import GeniusYield.Types.Redeemer import GeniusYield.Types.Script @@ -86,9 +87,9 @@ instance Eq (GYInSimpleScript v) where txInToApi :: Bool -- ^ does corresponding utxo contains inline datum? -> GYTxIn v - -> (Api.TxIn, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxTxIn Api.ConwayEra)) + -> (Api.TxIn, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxTxIn ApiEra)) txInToApi useInline (GYTxIn oref m) = (txOutRefToApi oref, Api.BuildTxWith $ f m) where - f :: GYTxInWitness v -> Api.Witness Api.WitCtxTxIn Api.ConwayEra + f :: GYTxInWitness v -> Api.Witness Api.WitCtxTxIn ApiEra f GYTxInWitnessKey = Api.KeyWitness Api.KeyWitnessForSpending f (GYTxInWitnessScript v d r) = Api.ScriptWitness Api.ScriptWitnessForSpending $ g v diff --git a/src/GeniusYield/Types/TxOut.hs b/src/GeniusYield/Types/TxOut.hs index add2c40d..b9bd555f 100644 --- a/src/GeniusYield/Types/TxOut.hs +++ b/src/GeniusYield/Types/TxOut.hs @@ -20,6 +20,7 @@ import qualified Cardano.Api.Shelley as Api.S import Control.Lens (Traversal) import GeniusYield.Types.Address import GeniusYield.Types.Datum +import GeniusYield.Types.Era import GeniusYield.Types.PlutusVersion import GeniusYield.Types.Script import GeniusYield.Types.Value @@ -68,7 +69,7 @@ gyTxOutDatumL f (GYTxOut addr v md s) = txOutToApi :: GYTxOut v - -> Api.TxOut Api.CtxTx Api.ConwayEra + -> Api.TxOut Api.CtxTx ApiEra txOutToApi (GYTxOut addr v md mrs) = Api.TxOut (addressToApi' addr) (valueToApiTxOutValue v) @@ -81,7 +82,7 @@ txOutToApi (GYTxOut addr v md mrs) = Api.TxOut let version = singPlutusVersionToApi $ scriptVersion s in Api.ScriptInAnyLang (Api.PlutusScriptLanguage version) (Api.PlutusScript version (scriptToApi s)) - mkDatum :: Maybe (GYDatum, GYTxOutUseInlineDatum v) -> Api.TxOutDatum Api.CtxTx Api.ConwayEra + mkDatum :: Maybe (GYDatum, GYTxOutUseInlineDatum v) -> Api.TxOutDatum Api.CtxTx ApiEra mkDatum Nothing = Api.TxOutDatumNone mkDatum (Just (d, di)) | di' = Api.TxOutDatumInline Api.BabbageEraOnwardsConway d' diff --git a/src/GeniusYield/Types/TxWdrl.hs b/src/GeniusYield/Types/TxWdrl.hs index b3d567d0..baf04265 100644 --- a/src/GeniusYield/Types/TxWdrl.hs +++ b/src/GeniusYield/Types/TxWdrl.hs @@ -17,6 +17,7 @@ import qualified Cardano.Api as Api import qualified Cardano.Ledger.Coin as Ledger import GeniusYield.Imports (Natural) import GeniusYield.Types.Address (GYStakeAddress, stakeAddressToApi) +import GeniusYield.Types.Era import GeniusYield.Types.Redeemer import GeniusYield.Types.Script -- | Transaction withdrawal. @@ -41,9 +42,9 @@ data GYTxWdrlWitness v txWdrlToApi :: GYTxWdrl v - -> (Api.StakeAddress, Ledger.Coin, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxStake Api.ConwayEra)) + -> (Api.StakeAddress, Ledger.Coin, Api.BuildTxWith Api.BuildTx (Api.Witness Api.WitCtxStake ApiEra)) txWdrlToApi (GYTxWdrl stakeAddr amt wit) = (stakeAddressToApi stakeAddr, Ledger.Coin (toInteger amt), Api.BuildTxWith $ f wit) where - f :: GYTxWdrlWitness v -> Api.Witness Api.WitCtxStake Api.ConwayEra + f :: GYTxWdrlWitness v -> Api.Witness Api.WitCtxStake ApiEra f GYTxWdrlWitnessKey = Api.KeyWitness Api.KeyWitnessForStakeAddr f (GYTxWdrlWitnessScript v r) = Api.ScriptWitness Api.ScriptWitnessForStakeAddr $ diff --git a/src/GeniusYield/Types/UTxO.hs b/src/GeniusYield/Types/UTxO.hs index f2e9bc21..635fbff1 100644 --- a/src/GeniusYield/Types/UTxO.hs +++ b/src/GeniusYield/Types/UTxO.hs @@ -60,6 +60,7 @@ import qualified Text.Printf as Printf import Data.Maybe (isNothing) import GeniusYield.Types.Address import GeniusYield.Types.Datum +import GeniusYield.Types.Era import GeniusYield.Types.Script import GeniusYield.Types.TxOutRef import GeniusYield.Types.Value @@ -115,15 +116,15 @@ utxosFromApi (Api.UTxO m) = utxosFromList | (txIn, out) <- Map.toList m ] -utxosToApi :: GYUTxOs -> Api.UTxO Api.ConwayEra +utxosToApi :: GYUTxOs -> Api.UTxO ApiEra utxosToApi (GYUTxOs m) = Api.UTxO $ Map.foldlWithKey' f Map.empty m where - f :: Map Api.TxIn (Api.TxOut Api.CtxUTxO Api.ConwayEra) + f :: Map Api.TxIn (Api.TxOut Api.CtxUTxO ApiEra) -> GYTxOutRef -> (GYAddress, GYValue, GYOutDatum, Maybe (Some GYScript)) - -> Map Api.TxIn (Api.TxOut Api.CtxUTxO Api.ConwayEra) + -> Map Api.TxIn (Api.TxOut Api.CtxUTxO ApiEra) f m' oref out = Map.insert (txOutRefToApi oref) (g out) m' - g :: (GYAddress, GYValue, GYOutDatum, Maybe (Some GYScript)) -> Api.TxOut Api.CtxUTxO Api.ConwayEra + g :: (GYAddress, GYValue, GYOutDatum, Maybe (Some GYScript)) -> Api.TxOut Api.CtxUTxO ApiEra g (addr, v, md, ms) = Api.TxOut (addressToApi' addr) (valueToApiTxOutValue v) @@ -136,7 +137,7 @@ utxosToApi (GYUTxOs m) = Api.UTxO $ Map.foldlWithKey' f Map.empty m outDatumToApi (GYOutDatumInline d) = Api.TxOutDatumInline Api.BabbageEraOnwardsConway $ datumToApi' d -utxoFromApi :: Api.TxIn -> Api.TxOut Api.CtxTx Api.ConwayEra -> GYUTxO +utxoFromApi :: Api.TxIn -> Api.TxOut Api.CtxTx ApiEra -> GYUTxO utxoFromApi txIn (Api.TxOut a v d s) = GYUTxO { utxoRef = txOutRefFromApi txIn , utxoAddress = addressFromApi' a @@ -145,7 +146,7 @@ utxoFromApi txIn (Api.TxOut a v d s) = GYUTxO , utxoRefScript = someScriptFromReferenceApi s } where - f :: Api.TxOutDatum Api.CtxTx Api.ConwayEra -> GYOutDatum + f :: Api.TxOutDatum Api.CtxTx ApiEra -> GYOutDatum f Api.TxOutDatumNone = GYOutDatumNone f (Api.TxOutDatumHash _ hash) = GYOutDatumHash $ datumHashFromApi hash f (Api.TxOutDatumInTx _ sd) = GYOutDatumHash . hashDatum $ datumFromApi' sd diff --git a/src/GeniusYield/Types/Value.hs b/src/GeniusYield/Types/Value.hs index d3aa4c6a..77cb709a 100644 --- a/src/GeniusYield/Types/Value.hs +++ b/src/GeniusYield/Types/Value.hs @@ -103,6 +103,7 @@ import Data.Either.Combinators (mapLeft) import Data.Foldable (for_) import Data.Hashable (Hashable (..)) import qualified GeniusYield.Types.Ada as Ada +import GeniusYield.Types.Era import GeniusYield.Types.Script -- $setup @@ -207,7 +208,7 @@ valueFromApiTxOutValue (Api.TxOutValueShelleyBased e v) = valueFromApi $ Api.fromLedgerValue e v -- FIXME: should we use Conway? -valueToApiTxOutValue :: GYValue -> Api.TxOutValue Api.ConwayEra +valueToApiTxOutValue :: GYValue -> Api.TxOutValue ApiEra valueToApiTxOutValue v = Api.TxOutValueShelleyBased Api.ShelleyBasedEraConway diff --git a/tests/GeniusYield/Test/Providers.hs b/tests/GeniusYield/Test/Providers.hs index 06088c55..6d63876e 100644 --- a/tests/GeniusYield/Test/Providers.hs +++ b/tests/GeniusYield/Test/Providers.hs @@ -46,6 +46,7 @@ import GeniusYield.Types (GYNetworkId, GYQueryUTxO, gyQueryUtxoRefsAtAddress', gyQueryUtxosAtAddress', gyQueryUtxosAtAddresses') +import GeniusYield.Types.Era import qualified Maestro.Types.V1 as Maestro import Web.HttpApiData (ToHttpApiData (..)) @@ -154,19 +155,19 @@ maestroTests token netId = getQueryUtxo :: Text.Text -> IO GYQueryUTxO getQueryUtxo pToken = maestroQueryUtxo <$> networkIdToMaestroEnv pToken netId - getUTxOsAtAddress :: GYAddress -> Text.Text -> IO (Api.UTxO Api.ConwayEra) + getUTxOsAtAddress :: GYAddress -> Text.Text -> IO (Api.UTxO ApiEra) getUTxOsAtAddress addr pToken = do queryUtxo <- getQueryUtxo pToken utxos <- gyQueryUtxosAtAddress' queryUtxo addr Nothing return $ utxosToApi utxos - getUTxOsAtAddresses :: [GYAddress] -> Text.Text -> IO (Api.UTxO Api.ConwayEra) + getUTxOsAtAddresses :: [GYAddress] -> Text.Text -> IO (Api.UTxO ApiEra) getUTxOsAtAddresses addrs pToken = do queryUtxo <- getQueryUtxo pToken utxos <- gyQueryUtxosAtAddresses' queryUtxo addrs return $ utxosToApi utxos - getUTxOAtRef :: GYTxOutRef -> Text.Text -> IO (Api.UTxO Api.ConwayEra) + getUTxOAtRef :: GYTxOutRef -> Text.Text -> IO (Api.UTxO ApiEra) getUTxOAtRef ref pToken = do queryUtxo <- getQueryUtxo pToken utxo <- gyQueryUtxoAtTxOutRef' queryUtxo ref @@ -184,13 +185,13 @@ maestroTests token netId = refs = utxosRefs $ utxosFromApi utxos return refs - getFileUTxOs :: String -> IO (Api.UTxO Api.ConwayEra) + getFileUTxOs :: String -> IO (Api.UTxO ApiEra) getFileUTxOs fileName = do json <- BS.readFile fileName let utxos = fromMaybe (utxosToApi $ utxosFromList []) (Aeson.decodeStrict (toStrict json)) return utxos - compareUTxOs :: Api.UTxO Api.ConwayEra -> Api.UTxO Api.ConwayEra -> IO (Maybe String) + compareUTxOs :: Api.UTxO ApiEra -> Api.UTxO ApiEra -> IO (Maybe String) compareUTxOs utxosFile utxosQuery = do let utxosFileMap = Api.unUTxO utxosFile utxosQueryMap = Api.unUTxO utxosQuery @@ -209,7 +210,7 @@ maestroTests token netId = updateGolden :: Show a => a -> IO () updateGolden = error . show - goldenTestUtxos :: TestName -> IO (Api.UTxO Api.ConwayEra) -> IO (Api.UTxO Api.ConwayEra) -> TestTree + goldenTestUtxos :: TestName -> IO (Api.UTxO ApiEra) -> IO (Api.UTxO ApiEra) -> TestTree goldenTestUtxos name queryData getFileData = goldenTest name queryData getFileData compareUTxOs updateGolden