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

Unified testing mechanism for Privnet <-> CLB #324

Merged
merged 15 commits into from
Jul 26, 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
34 changes: 32 additions & 2 deletions atlas-cardano.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,13 @@ library
GeniusYield.ReadJSON
GeniusYield.Scripts.TestToken
GeniusYield.Swagger.Utils
GeniusYield.Test.Address
GeniusYield.Test.Clb
GeniusYield.Test.FakeCoin
GeniusYield.Test.FeeTracker
GeniusYield.Test.Privnet.Asserts
GeniusYield.Test.Privnet.Ctx
GeniusYield.Test.Privnet.Examples
GeniusYield.Test.Privnet.Examples.Common
GeniusYield.Test.Privnet.Examples.Gift
GeniusYield.Test.Privnet.Examples.Misc
GeniusYield.Test.Privnet.Examples.Oracle
Expand All @@ -103,7 +105,6 @@ library
GeniusYield.Transaction.Common
GeniusYield.TxBuilder
GeniusYield.TxBuilder.Class
GeniusYield.TxBuilder.Clb
GeniusYield.TxBuilder.Common
GeniusYield.TxBuilder.Errors
GeniusYield.TxBuilder.IO
Expand Down Expand Up @@ -352,3 +353,32 @@ test-suite atlas-privnet-tests
, tasty
, tasty-hunit

test-suite atlas-unified-tests
import: common, plutus-ghc-options
type: exitcode-stdio-1.0
main-is: atlas-unified-tests.hs
hs-source-dirs: tests-unified
ghc-options: -threaded -rtsopts -Wall

-- set target plutus-core version
ghc-options: -fplugin-opt PlutusTx.Plugin:target-version=1.0.0
other-modules:
GeniusYield.Test.Unified.OnChain.BetRef
GeniusYield.Test.Unified.OnChain.BetRef.Compiled
GeniusYield.Test.Unified.BetRef.Operations
GeniusYield.Test.Unified.BetRef.PlaceBet
GeniusYield.Test.Unified.BetRef.TakePot
-- Dependencies inherited from the library. No need to specify bounds.
build-depends:
, atlas-cardano
, base
, containers
, tasty
, tasty-hunit
, text
, mtl
-- OnChain
, plutus-core
, plutus-ledger-api
, plutus-tx
, plutus-tx-plugin
58 changes: 0 additions & 58 deletions src/GeniusYield/Examples/Limbo.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,12 @@ Stability : develop

-}
module GeniusYield.Examples.Limbo (
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Functions from this module have been generalized and added to GeniusYield.Test.Utils. They can now be used in many more cases.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. Thanks for the improvement.

-- * Scripts
limboValidatorV1,
limboValidatorV2,
-- * API
getRefInfos,
addRefScript,
addRefScript',
findRefScriptsInBody,
) where

import GeniusYield.Imports
import GeniusYield.TxBuilder.Class
import GeniusYield.Types

import qualified Data.Map.Strict as Map
import GeniusYield.Examples.Common (toDeBruijn)
import qualified PlutusCore.Version as PLC
import qualified PlutusLedgerApi.Common as Plutus
Expand Down Expand Up @@ -58,52 +49,3 @@ limboValidatorV2 = validatorFromSerialisedScript limboValidatorPlutusSerialised
limboValidatorPlutusSerialised :: Plutus.SerialisedScript
limboValidatorPlutusSerialised = Plutus.serialiseUPLC $
UPLC.Program () PLC.plcVersion100 limboScript'

-------------------------------------------------------------------------------
-- API
-------------------------------------------------------------------------------

utxoToRefMap :: GYUTxOs -> Map (Some GYScript) GYTxOutRef
utxoToRefMap utxo = Map.fromList
[ (sc, ref)
| GYUTxO { utxoRef = ref, utxoRefScript = Just sc} <- utxosToList utxo
]

-- | Find reference scripts at 'limboValidatorV2' address.
--
getRefInfos :: GYTxQueryMonad m => m (Map (Some GYScript) GYTxOutRef)
getRefInfos = do
addr <- scriptAddress limboValidatorV2
utxo <- utxosAtAddress addr Nothing
return $ utxoToRefMap utxo

-- | Create UTxO with a reference script.
--
-- This is optimized version.
-- First it checks whether there is an UTxO already with a script.
-- Only if there aren't the new transaction skeleton is constructed.
--
addRefScript :: GYTxQueryMonad m => GYScript 'PlutusV2 -> m (Either GYTxOutRef (GYTxSkeleton v))
addRefScript sc = do
addr <- scriptAddress limboValidatorV2
utxo <- utxosAtAddress addr Nothing

let refs :: Map (Some GYScript) GYTxOutRef
refs = utxoToRefMap utxo

case Map.lookup (Some sc) refs of
Just ref -> return $ Left ref
Nothing -> return $ Right $ mustHaveOutput (mkGYTxOut addr mempty (datumFromPlutusData ())) { gyTxOutRefS = Just $ GYPlutusScript sc }

-- | Create UTxO with a reference script.
--
addRefScript' :: GYTxQueryMonad m => GYScript 'PlutusV2 -> m (GYTxSkeleton v)
addRefScript' sc = do
addr <- scriptAddress limboValidatorV2
return $ mustHaveOutput (mkGYTxOut addr mempty (datumFromPlutusData ())) { gyTxOutRefS = Just $ GYPlutusScript sc }

-- | Find reference scripts in transaction body.
findRefScriptsInBody :: GYTxBody -> Map (Some GYScript) GYTxOutRef
findRefScriptsInBody body = do
let utxo = txBodyUTxOs body
utxoToRefMap utxo
72 changes: 0 additions & 72 deletions src/GeniusYield/Test/Address.hs

This file was deleted.

Loading