Skip to content

Commit f0db484

Browse files
Started work on proper test for utxo change.
Completely replaced former test, haven't yet finished new test.
1 parent f7be4a2 commit f0db484

File tree

1 file changed

+72
-34
lines changed

1 file changed

+72
-34
lines changed

test/Spec/BotPlutusInterface/Balance.hs

Lines changed: 72 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,42 @@ module Spec.BotPlutusInterface.Balance (tests) where
66
import BotPlutusInterface.Balance (balanceTxIO, defaultBalanceConfig, withFee)
77
import BotPlutusInterface.Balance qualified as Balance
88
import BotPlutusInterface.Effects (PABEffect)
9+
import BotPlutusInterface.Types (
10+
ContractEnvironment (cePABConfig),
11+
PABConfig (pcOwnPubKeyHash, pcProtocolParams),
12+
)
13+
import Control.Lens ((&), (.~), (^.))
914
import Data.Default (Default (def))
1015
import Data.Map qualified as Map
1116
import Data.Set qualified as Set
1217
import Data.Text qualified as Text
18+
import Data.Void (Void)
1319
import Ledger qualified
1420
import Ledger.Ada qualified as Ada
1521
import Ledger.Address (Address, PaymentPubKeyHash (PaymentPubKeyHash))
1622
import Ledger.Address qualified as Address
1723
import Ledger.CardanoWallet qualified as Wallet
24+
import Ledger.Constraints qualified as Constraints
1825
import Ledger.Crypto (PubKeyHash)
1926
import Ledger.Scripts qualified as Scripts
20-
import Ledger.Tx (Tx (..), TxIn (..), TxInType (..), TxOut (..), TxOutRef (..))
27+
import Ledger.Tx (
28+
ChainIndexTxOut (..),
29+
Tx (..),
30+
TxIn (..),
31+
TxInType (..),
32+
TxOut (..),
33+
TxOutRef (..),
34+
)
2135
import Ledger.Value qualified as Value
2236
import Plutus.V1.Ledger.Api qualified as Api
2337
import PlutusTx qualified
24-
import Spec.MockContract (runPABEffectPure)
38+
import Spec.MockContract (
39+
MockContractState,
40+
contractEnv,
41+
runContractPure,
42+
runPABEffectPure,
43+
utxos,
44+
)
2545
import Test.Tasty (TestTree, testGroup)
2646
import Test.Tasty.HUnit (Assertion, assertBool, assertFailure, testCase, (@?=))
2747
import Prelude
@@ -45,7 +65,7 @@ validator =
4565
$$(PlutusTx.compile [||(\_ _ _ -> ())||])
4666

4767
valHash :: Ledger.ValidatorHash
48-
(Just valHash) = Ledger.toValidatorHash addr3
68+
valHash = Scripts.validatorHash validator
4969

5070
pkh1, pkh2 :: PubKeyHash
5171
pkh1 = Address.unPaymentPubKeyHash . Wallet.paymentPubKeyHash $ Wallet.knownMockWallet 1
@@ -72,15 +92,24 @@ txIn3 = TxIn txOutRef3 (Just ConsumePublicKeyAddress)
7292
txIn4 = TxIn txOutRef4 (Just ConsumePublicKeyAddress)
7393
txIn5 = TxIn txOutRef5 (Just ConsumeSimpleScriptAddress)
7494

75-
utxo1, utxo2, utxo3, utxo4, utxo5, utxo6, utxo7 :: (TxOutRef, TxOut)
95+
utxo1, utxo2, utxo3, utxo4, utxo7 :: (TxOutRef, TxOut)
7696
utxo1 = (txOutRef1, TxOut addr1 (Ada.lovelaceValueOf 1_100_000) Nothing)
7797
utxo2 = (txOutRef2, TxOut addr1 (Ada.lovelaceValueOf 1_000_000) Nothing)
7898
utxo3 = (txOutRef3, TxOut addr1 (Ada.lovelaceValueOf 900_000) Nothing)
7999
utxo4 = (txOutRef4, TxOut addr1 (Ada.lovelaceValueOf 800_000 <> Value.singleton "11223344" "Token" 200) Nothing)
80-
utxo5 = (txOutRef5, TxOut addr3 (Ada.lovelaceValueOf 900_000) (Just $ Ledger.DatumHash ""))
81-
utxo6 = (txOutRef6, TxOut addr3 (Value.singleton "11223344" "Token" 200) Nothing)
100+
-- utxo5 = (txOutRef5, TxOut addr3 (Ada.lovelaceValueOf 900_000) (Just $ Ledger.DatumHash ""))
101+
-- utxo6 = (txOutRef6, TxOut addr3 (Value.singleton "11223344" "Token" 200) Nothing)
82102
utxo7 = (txOutRef2, TxOut addr1 (Ada.lovelaceValueOf 5_000_000) Nothing)
83103

104+
scrValue :: Value.Value
105+
scrValue = (Value.singleton "11223344" "Token" 200) <> (Ada.lovelaceValueOf 500_000)
106+
107+
scrDatum :: Ledger.Datum
108+
scrDatum = Ledger.Datum $ Api.toBuiltinData (23 :: Integer)
109+
110+
scrDatumHash :: Ledger.DatumHash
111+
scrDatumHash = Ledger.datumHash scrDatum
112+
84113
addUtxosForFees :: Assertion
85114
addUtxosForFees = do
86115
let txout = TxOut addr2 (Ada.lovelaceValueOf 1_000_000) Nothing
@@ -131,31 +160,40 @@ addUtxosForChange = do
131160

132161
dontAddChangeToDatum :: Assertion
133162
dontAddChangeToDatum = do
134-
let txout = TxOut addr2 (Ada.lovelaceValueOf 1_300_000) Nothing
135-
txout2 = snd utxo5
136-
txout3 = snd utxo6
137-
tx = mempty {txOutputs = [txout, txout2, txout3]} `withFee` 500_000
138-
minUtxo = [(txout, 1_000_000), (txout3, 1_100_000)] -- add change to these utxos
139-
utxoIndex = Map.fromList [utxo5, utxo3, utxo1, utxo4, utxo7]
140-
ownAddr = addr1
141-
ebalancedTx =
142-
fst $
143-
runPABEffectPure def $
144-
Balance.balanceTxStep @() @'[PABEffect ()] defaultBalanceConfig minUtxo utxoIndex ownAddr tx
145-
146-
case ebalancedTx of
147-
Left e -> assertFailure (Text.unpack e)
148-
Right (Left e) -> assertFailure (Text.unpack e)
149-
Right (Right balancedTx) ->
150-
assertBool
151-
( "Original UTxO not in output;\n"
152-
<> "TxOuts: "
153-
<> show (txOutputs balancedTx)
154-
<> "\n"
155-
<> "TxIns : "
156-
<> show (txInputs balancedTx)
157-
<> "\n"
158-
)
159-
$ snd utxo5 `elem` txOutputs balancedTx
160-
161-
-- txIn5 `Set.member` (txInputs balancedTx)
163+
let scrTxOut' =
164+
ScriptChainIndexTxOut
165+
addr3
166+
(Right validator) -- (valHash, Just validator)
167+
(Right scrDatum) -- (scrDatumHash, Just scrDatum)
168+
scrValue
169+
scrTxOut = Ledger.toTxOut scrTxOut'
170+
usrTxOut' =
171+
PublicKeyChainIndexTxOut
172+
addr1
173+
(Ada.lovelaceValueOf 5_000_000)
174+
usrTxOut = Ledger.toTxOut usrTxOut'
175+
-- initState :: MockContractState ()
176+
initState =
177+
def & utxos .~ [(txOutRef6, scrTxOut), (txOutRef7, usrTxOut)]
178+
& contractEnv .~ contractEnv'
179+
pabConf :: PABConfig
180+
pabConf = def {pcOwnPubKeyHash = pkh1}
181+
-- contractEnv' :: ContractEnvironment ()
182+
contractEnv' = def {cePABConfig = pabConf}
183+
184+
-- TODO: set these up.
185+
scrLkups = mempty
186+
txConsts = mempty
187+
188+
eunbalancedTx = Constraints.mkTx @Void scrLkups txConsts
189+
190+
case eunbalancedTx of
191+
Left mkTxErr -> assertFailure ("MkTx Error: " <> show mkTxErr)
192+
Right unbalancedTx -> do
193+
let (eRslt, finalState) = runPABEffectPure initState (balanceTxIO @() @'[PABEffect ()] pabConf pkh1 unbalancedTx)
194+
case eRslt of
195+
(Left txt) -> assertFailure ("PAB effect error: " <> Text.unpack txt)
196+
(Right (Left txt)) -> assertFailure ("Balancing error: " <> Text.unpack txt)
197+
(Right (Right trx)) -> do
198+
-- TODO
199+
assertFailure "Incomplete Test"

0 commit comments

Comments
 (0)