@@ -6,22 +6,42 @@ module Spec.BotPlutusInterface.Balance (tests) where
66import BotPlutusInterface.Balance (balanceTxIO , defaultBalanceConfig , withFee )
77import BotPlutusInterface.Balance qualified as Balance
88import BotPlutusInterface.Effects (PABEffect )
9+ import BotPlutusInterface.Types (
10+ ContractEnvironment (cePABConfig ),
11+ PABConfig (pcOwnPubKeyHash , pcProtocolParams ),
12+ )
13+ import Control.Lens ((&) , (.~) , (^.) )
914import Data.Default (Default (def ))
1015import Data.Map qualified as Map
1116import Data.Set qualified as Set
1217import Data.Text qualified as Text
18+ import Data.Void (Void )
1319import Ledger qualified
1420import Ledger.Ada qualified as Ada
1521import Ledger.Address (Address , PaymentPubKeyHash (PaymentPubKeyHash ))
1622import Ledger.Address qualified as Address
1723import Ledger.CardanoWallet qualified as Wallet
24+ import Ledger.Constraints qualified as Constraints
1825import Ledger.Crypto (PubKeyHash )
1926import 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+ )
2135import Ledger.Value qualified as Value
2236import Plutus.V1.Ledger.Api qualified as Api
2337import PlutusTx qualified
24- import Spec.MockContract (runPABEffectPure )
38+ import Spec.MockContract (
39+ MockContractState ,
40+ contractEnv ,
41+ runContractPure ,
42+ runPABEffectPure ,
43+ utxos ,
44+ )
2545import Test.Tasty (TestTree , testGroup )
2646import Test.Tasty.HUnit (Assertion , assertBool , assertFailure , testCase , (@?=) )
2747import Prelude
@@ -45,7 +65,7 @@ validator =
4565 $$ (PlutusTx. compile [|| (\ _ _ _ -> () )|| ])
4666
4767valHash :: Ledger. ValidatorHash
48- ( Just valHash) = Ledger. toValidatorHash addr3
68+ valHash = Scripts. validatorHash validator
4969
5070pkh1 , pkh2 :: PubKeyHash
5171pkh1 = Address. unPaymentPubKeyHash . Wallet. paymentPubKeyHash $ Wallet. knownMockWallet 1
@@ -72,15 +92,24 @@ txIn3 = TxIn txOutRef3 (Just ConsumePublicKeyAddress)
7292txIn4 = TxIn txOutRef4 (Just ConsumePublicKeyAddress )
7393txIn5 = TxIn txOutRef5 (Just ConsumeSimpleScriptAddress )
7494
75- utxo1 , utxo2 , utxo3 , utxo4 , utxo5 , utxo6 , utxo7 :: (TxOutRef , TxOut )
95+ utxo1 , utxo2 , utxo3 , utxo4 , utxo7 :: (TxOutRef , TxOut )
7696utxo1 = (txOutRef1, TxOut addr1 (Ada. lovelaceValueOf 1_100_000 ) Nothing )
7797utxo2 = (txOutRef2, TxOut addr1 (Ada. lovelaceValueOf 1_000_000 ) Nothing )
7898utxo3 = (txOutRef3, TxOut addr1 (Ada. lovelaceValueOf 900_000 ) Nothing )
7999utxo4 = (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)
82102utxo7 = (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+
84113addUtxosForFees :: Assertion
85114addUtxosForFees = do
86115 let txout = TxOut addr2 (Ada. lovelaceValueOf 1_000_000 ) Nothing
@@ -131,31 +160,40 @@ addUtxosForChange = do
131160
132161dontAddChangeToDatum :: Assertion
133162dontAddChangeToDatum = 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