Skip to content

Commit

Permalink
- get rid of UnbalancedTx
Browse files Browse the repository at this point in the history
- Remove unwanted change (nonAdaAsset shouldn't be a newtype)
  • Loading branch information
klntsky committed Mar 22, 2023
1 parent c857548 commit d6f91b7
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 54 deletions.
8 changes: 4 additions & 4 deletions src/Contract/AuxiliaryData.purs
Expand Up @@ -11,6 +11,7 @@ import Contract.ScriptLookups (UnattachedUnbalancedTx)
import Ctl.Internal.Cardano.Types.Transaction
( AuxiliaryData(AuxiliaryData)
, AuxiliaryDataHash
, Transaction
)
import Ctl.Internal.Cardano.Types.Transaction
( _auxiliaryData
Expand All @@ -23,7 +24,6 @@ import Ctl.Internal.Metadata.MetadataType
)
import Ctl.Internal.Serialization.AuxiliaryData (hashAuxiliaryData)
import Ctl.Internal.Types.TransactionMetadata (GeneralTransactionMetadata)
import Ctl.Internal.Types.UnbalancedTransaction (UnbalancedTx)
import Data.Lens (lens', (?~))
import Data.Lens.Getter (view)
import Data.Lens.Iso.Newtype (_Newtype)
Expand Down Expand Up @@ -73,16 +73,16 @@ setTxMetadata tx =
-- Lenses
--------------------------------------------------------------------------------

_unbalancedTx :: Lens' UnattachedUnbalancedTx UnbalancedTx
_unbalancedTx :: Lens' UnattachedUnbalancedTx Transaction
_unbalancedTx = _Newtype <<< prop (Proxy :: Proxy "transaction")

_auxiliaryData :: Lens' UnattachedUnbalancedTx (Maybe AuxiliaryData)
_auxiliaryData =
_unbalancedTx <<< _Newtype <<< Tx._auxiliaryData
_unbalancedTx <<< Tx._auxiliaryData

_auxiliaryDataHash :: Lens' UnattachedUnbalancedTx (Maybe AuxiliaryDataHash)
_auxiliaryDataHash =
_unbalancedTx <<< _Newtype <<< Tx._body <<< Tx._auxiliaryDataHash
_unbalancedTx <<< Tx._body <<< Tx._auxiliaryDataHash

_metadata :: Lens' AuxiliaryData (Maybe GeneralTransactionMetadata)
_metadata = lens' \(AuxiliaryData rec@{ metadata }) ->
Expand Down
8 changes: 2 additions & 6 deletions src/Contract/Transaction.purs
Expand Up @@ -22,7 +22,6 @@ module Contract.Transaction
, module ScriptRef
, module Scripts
, module Transaction
, module UnbalancedTx
, module X
, signTransaction
, submit
Expand Down Expand Up @@ -262,9 +261,6 @@ import Ctl.Internal.Types.Transaction
( TransactionHash
, TransactionInput(TransactionInput)
)
import Ctl.Internal.Types.UnbalancedTransaction
( UnbalancedTx(UnbalancedTx)
) as UnbalancedTx
import Ctl.Internal.Types.UsedTxOuts
( UsedTxOuts
, lockTransactionInputs
Expand Down Expand Up @@ -441,7 +437,7 @@ unUnattachedUnbalancedTx
, utxoIndex
}
) =
{ transaction: unwrap transaction, datums, redeemers } /\ utxoIndex
{ transaction, datums, redeemers } /\ utxoIndex

-- | Attempts to balance an `UnattachedUnbalancedTx` using the specified
-- | balancer constraints.
Expand Down Expand Up @@ -480,7 +476,7 @@ balanceTxsWithConstraints unbalancedTxs =
throwError e

uutxToTx :: UnattachedUnbalancedTx -> Transaction
uutxToTx = unwrap <<< _.transaction <<< unwrap
uutxToTx = _.transaction <<< unwrap

-- | Same as `balanceTxsWithConstraints`, but uses the default balancer
-- | constraints.
Expand Down
4 changes: 2 additions & 2 deletions src/Internal/BalanceTx/RedeemerIndex.purs
Expand Up @@ -19,7 +19,7 @@ import Ctl.Internal.Cardano.Types.Transaction
, _redeemers
, _witnessSet
)
import Ctl.Internal.Cardano.Types.Value (currencyMPSHash)
import Ctl.Internal.Cardano.Types.Value (currencyMPSHash, unwrapNonAdaAsset)
import Ctl.Internal.Types.PlutusData (PlutusData)
import Ctl.Internal.Types.RedeemerTag (RedeemerTag(Spend, Mint, Cert, Reward))
import Ctl.Internal.Types.RewardAddress (RewardAddress)
Expand Down Expand Up @@ -154,7 +154,7 @@ mkRedeemersContext
, certs: fold certs
}
where
mintedAssets = fromMaybe Map.empty (map unwrap $ map unwrap mint)
mintedAssets = fromMaybe Map.empty (map unwrapNonAdaAsset $ map unwrap mint)

indexRedeemers
:: RedeemersContext
Expand Down
9 changes: 6 additions & 3 deletions src/Internal/Cardano/Types/Value.purs
Expand Up @@ -43,11 +43,12 @@ module Ctl.Internal.Cardano.Types.Value
, numNonAdaCurrencySymbols
, numTokenNames
, posNonAdaAsset
, scriptHashAsCurrencySymbol
, split
, sumTokenNameLengths
, scriptHashAsCurrencySymbol
, unionWith
, unionWithNonAda
, unwrapNonAdaAsset
, valueAssetClasses
, valueAssets
, valueOf
Expand Down Expand Up @@ -273,7 +274,6 @@ mkUnsafeAdaSymbol byteArr =
newtype NonAdaAsset = NonAdaAsset (Map CurrencySymbol (Map TokenName BigInt))

derive newtype instance Eq NonAdaAsset
derive instance Newtype NonAdaAsset _

instance Arbitrary NonAdaAsset where
arbitrary =
Expand Down Expand Up @@ -302,7 +302,7 @@ instance MeetSemilattice NonAdaAsset where
meet = unionWithNonAda min

instance Negate NonAdaAsset where
negation = NonAdaAsset <<< map (map negate) <<< unwrap
negation = NonAdaAsset <<< map (map negate) <<< unwrapNonAdaAsset

instance Split NonAdaAsset where
split (NonAdaAsset mp) = NonAdaAsset npos /\ NonAdaAsset pos
Expand Down Expand Up @@ -363,6 +363,9 @@ equipartitionAssetsWithTokenQuantityUpperBound nonAdaAssets maxTokenQuantity =
foldl (\quantity tn -> quantity `max` tokenQuantity tn) zero
(flattenNonAdaValue nonAdaAssets)

unwrapNonAdaAsset :: NonAdaAsset -> Map CurrencySymbol (Map TokenName BigInt)
unwrapNonAdaAsset (NonAdaAsset mp) = mp

-- We shouldn't need this check if we don't export unsafeAdaSymbol etc.
-- | Create a singleton `NonAdaAsset` which by definition should be safe since
-- | `CurrencySymbol` and `TokenName` are safe
Expand Down
3 changes: 2 additions & 1 deletion src/Internal/Serialization.purs
Expand Up @@ -762,7 +762,8 @@ convertNetworkId = case _ of
convertMint :: T.Mint -> Effect Mint
convertMint (T.Mint nonAdaAssets) = do
mint <- newMint
forWithIndex_ (unwrap nonAdaAssets) \scriptHashBytes' values -> do
let assetsMap = Value.unwrapNonAdaAsset nonAdaAssets
forWithIndex_ assetsMap \scriptHashBytes' values -> do
let
mScripthash = scriptHashFromBytes $ Value.getCurrencySymbol
scriptHashBytes'
Expand Down
39 changes: 21 additions & 18 deletions src/Internal/Types/ScriptLookups.purs
Expand Up @@ -236,7 +236,7 @@ import Ctl.Internal.Types.TypedValidator
, TypedValidator(TypedValidator)
)
import Ctl.Internal.Types.TypedValidator (generalise) as TV
import Ctl.Internal.Types.UnbalancedTransaction (PaymentPubKey, UnbalancedTx)
import Ctl.Internal.Types.UnbalancedTransaction (PaymentPubKey)
import Data.Array (cons, partition, toUnfoldable, zip)
import Data.Array (singleton, union, (:)) as Array
import Data.Bifunctor (lmap)
Expand Down Expand Up @@ -468,7 +468,7 @@ instance Semigroup ValueSpentBalances where

-- This is the state for essentially creating an unbalanced transaction.
type ConstraintProcessingState (a :: Type) =
{ transaction :: UnbalancedTx
{ transaction :: Transaction
, utxoIndex :: Map TransactionInput TransactionOutput
-- The unbalanced transaction that we're building
, valueSpentBalancesInputs :: ValueSpentBalances
Expand All @@ -492,7 +492,7 @@ type ConstraintProcessingState (a :: Type) =

_cpsTransaction
:: forall (a :: Type). Lens' (ConstraintProcessingState a) Transaction
_cpsTransaction = prop (SProxy :: SProxy "transaction") <<< _Newtype
_cpsTransaction = prop (SProxy :: SProxy "transaction")

_cpsUtxoIndex
:: forall (a :: Type)
Expand Down Expand Up @@ -628,7 +628,7 @@ runConstraintsM lookups txConstraints = do
let
initCps :: ConstraintProcessingState validator
initCps =
{ transaction: wrap mempty
{ transaction: mempty
, utxoIndex: Map.empty
, valueSpentBalancesInputs:
ValueSpentBalances { required: mempty, provided: mempty }
Expand Down Expand Up @@ -660,14 +660,14 @@ mkUnbalancedTx'
=> IsData redeemer
=> ScriptLookups validator
-> TxConstraints redeemer datum
-> Contract (Either MkUnbalancedTxError UnbalancedTx)
-> Contract (Either MkUnbalancedTxError Transaction)
mkUnbalancedTx' scriptLookups txConstraints =
runConstraintsM scriptLookups txConstraints <#> map _.transaction

-- | A newtype for the unbalanced transaction after creating one with datums
-- | and redeemers not attached
newtype UnattachedUnbalancedTx = UnattachedUnbalancedTx
{ transaction :: UnbalancedTx -- the unbalanced tx created
{ transaction :: Transaction -- the unbalanced tx created
, utxoIndex :: Map TransactionInput TransactionOutput
, datums :: Array Datum -- the array of ordered datums that require attaching
, redeemers :: Array UnindexedRedeemer
Expand Down Expand Up @@ -697,18 +697,21 @@ mkUnbalancedTx
mkUnbalancedTx scriptLookups txConstraints =
runConstraintsM scriptLookups txConstraints <#> map
\{ transaction, datums, redeemers, utxoIndex } ->
let
stripScriptDataHash :: Transaction -> Transaction
stripScriptDataHash =
_body <<< _scriptDataHash .~ Nothing

stripDatumsRedeemers :: Transaction -> Transaction
stripDatumsRedeemers = _witnessSet %~
over TransactionWitnessSet
_ { plutusData = Nothing, redeemers = Nothing }
tx = stripDatumsRedeemers $ stripScriptDataHash $ unwrap transaction
in
wrap { transaction: wrap tx, datums, redeemers, utxoIndex }
wrap
{ transaction: stripDatumsRedeemers $ stripScriptDataHash transaction
, datums
, redeemers
, utxoIndex
}
where
stripScriptDataHash :: Transaction -> Transaction
stripScriptDataHash =
_body <<< _scriptDataHash .~ Nothing

stripDatumsRedeemers :: Transaction -> Transaction
stripDatumsRedeemers = _witnessSet %~
over TransactionWitnessSet
_ { plutusData = Nothing, redeemers = Nothing }

-- | Adds a placeholder for ScriptDataHash. It will be wrong at this stage,
-- | because ExUnits hasn't been estimated yet. It will serve as a
Expand Down
15 changes: 0 additions & 15 deletions src/Internal/Types/UnbalancedTransaction.purs
@@ -1,7 +1,6 @@
module Ctl.Internal.Types.UnbalancedTransaction
( PaymentPubKey(PaymentPubKey)
, ScriptDatum(ScriptDatum, ScriptDatumHash)
, UnbalancedTx(UnbalancedTx)
, payPubKeyRequiredSigner
, payPubKeyVkey
) where
Expand Down Expand Up @@ -55,17 +54,3 @@ payPubKeyVkey (PaymentPubKey pk) = Vkey pk
payPubKeyRequiredSigner :: PaymentPubKey -> RequiredSigner
payPubKeyRequiredSigner (PaymentPubKey pk) =
RequiredSigner <<< publicKeyHash $ convertPubKey pk

-- | An unbalanced transaction. It needs to be balanced and signed before it
-- | can be submitted to the ledger.
-- | Resembles `UnbalancedTx` from `plutus-apps`.
newtype UnbalancedTx = UnbalancedTx Transaction

derive instance Newtype UnbalancedTx _
derive instance Generic UnbalancedTx _
derive newtype instance Eq UnbalancedTx
derive newtype instance Semigroup UnbalancedTx
derive newtype instance Monoid UnbalancedTx

instance Show UnbalancedTx where
show = genericShow
4 changes: 1 addition & 3 deletions test/BalanceTx/Time.purs
Expand Up @@ -25,13 +25,11 @@ import Contract.Time
)
import Contract.TxConstraints (mustValidateIn)
import Control.Monad.Except (throwError)
import Ctl.Internal.Cardano.Types.Transaction (_body)
import Ctl.Internal.Test.TestPlanM (TestPlanM)
import Ctl.Internal.Types.BigNum (BigNum)
import Ctl.Internal.Types.BigNum (fromInt, toInt) as BigNum
import Ctl.Internal.Types.Interval (Interval)
import Data.BigInt (fromString) as BigInt
import Data.Lens ((^.))
import Effect.Aff (Aff)
import Effect.Exception (error)
import Mote (group, test)
Expand Down Expand Up @@ -151,7 +149,7 @@ getTimeFromUnbalanced
:: UnattachedUnbalancedTx -> Contract (Interval POSIXTime)
getTimeFromUnbalanced utx = validityToPosixTime $ unwrap body
where
body = (utx # unwrap >>> _.transaction >>> unwrap) ^. _body
body = (unwrap utx) # _.transaction >>> unwrap >>> _.body

toPosixTime :: Slot -> Contract POSIXTime
toPosixTime time = do
Expand Down
3 changes: 1 addition & 2 deletions test/Ogmios/Aeson.purs
Expand Up @@ -18,9 +18,8 @@ import Data.Array (catMaybes, elem, filter, groupAllBy, nubBy)
import Data.Array.NonEmpty (NonEmptyArray, head, length, tail)
import Data.Bifunctor (bimap, lmap)
import Data.Either (either, hush)
import Data.Map as Map
import Data.Maybe (Maybe(Just, Nothing), maybe)
import Data.Newtype (unwrap, wrap)
import Data.Newtype (unwrap)
import Data.String.Regex (match, regex)
import Data.String.Regex.Flags (noFlags)
import Data.Traversable (for_, traverse)
Expand Down

0 comments on commit d6f91b7

Please sign in to comment.