Skip to content

Commit da192f1

Browse files
committed
Address API changes
1 parent 6101721 commit da192f1

File tree

9 files changed

+133
-59
lines changed

9 files changed

+133
-59
lines changed

flake.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
};
113113
plutus-apps = {
114114
url =
115-
"github:gege251/plutus-apps/a538d5f62458bea9378a2834b0e82a3185c170a1";
115+
"github:gege251/plutus-apps/5cd1682b1ccf8f12c64fc0c1731d61fee41779f6";
116116
flake = false;
117117
};
118118
purescript-bridge = {

src/BotPlutusInterface/ChainIndex.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Data.Kind (Type)
77
import Network.HTTP.Client (ManagerSettings (managerResponseTimeout), defaultManagerSettings, newManager, responseTimeoutNone)
88
import Network.HTTP.Types (Status (statusCode))
99
import Plutus.ChainIndex.Api (
10+
QueryAtAddressRequest (QueryAtAddressRequest),
1011
TxoAtAddressRequest (TxoAtAddressRequest),
1112
UtxoAtAddressRequest (UtxoAtAddressRequest),
1213
UtxoWithCurrencyRequest (UtxoWithCurrencyRequest),
@@ -42,6 +43,11 @@ handleChainIndexReq pabConf = \case
4243
TxOutRefResponse <$> chainIndexQueryOne pabConf (ChainIndexClient.getTxOut txOutRef)
4344
UnspentTxOutFromRef txOutRef ->
4445
UnspentTxOutResponse <$> chainIndexQueryOne pabConf (ChainIndexClient.getUnspentTxOut txOutRef)
46+
UnspentTxOutSetAtAddress page credential ->
47+
UnspentTxOutsAtResponse
48+
<$> chainIndexQueryMany
49+
pabConf
50+
(ChainIndexClient.getUnspentTxOutsAtAddress (QueryAtAddressRequest (Just page) credential))
4551
TxFromTxId txId ->
4652
TxIdResponse <$> chainIndexQueryOne pabConf (ChainIndexClient.getTx txId)
4753
UtxoSetMembership txOutRef ->

src/BotPlutusInterface/UtxoParser.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Data.Attoparsec.Text (
2727
takeWhile,
2828
(<?>),
2929
)
30+
import Data.Functor (($>))
3031
import Data.Text (Text)
3132
import Ledger (Address (addressCredential))
3233
import Ledger.Ada qualified as Ada
@@ -40,6 +41,7 @@ import Plutus.V1.Ledger.Api (
4041
CurrencySymbol (..),
4142
TokenName (..),
4243
)
44+
import Plutus.V2.Ledger.Api (OutputDatum (NoOutputDatum, OutputDatumHash))
4345
import PlutusTx.Builtins (toBuiltin)
4446
import Prelude hiding (takeWhile)
4547

@@ -76,10 +78,10 @@ chainIndexTxOutParser address = do
7678
case addressCredential address of
7779
ScriptCredential validatorHash -> do
7880
datumHash <- datumHashParser <?> "DatumHash"
79-
pure $ ScriptChainIndexTxOut address (Left validatorHash) (Left datumHash) value
81+
pure $ ScriptChainIndexTxOut address value (Left datumHash) Nothing (Left validatorHash)
8082
PubKeyCredential _ -> do
81-
datumHashNoneParser <?> "DatumHash"
82-
pure $ PublicKeyChainIndexTxOut address value
83+
outputDatum <- outputDatumParser <?> "OutputDatum"
84+
pure $ PublicKeyChainIndexTxOut address value outputDatum Nothing
8385

8486
valueParser :: Parser Value
8587
valueParser = do
@@ -107,8 +109,11 @@ tokenNameParser = do
107109
void $ optional $ string "0x"
108110
TokenName <$> decodeHash (takeWhile (not . isSpace))
109111

110-
datumHashNoneParser :: Parser ()
111-
datumHashNoneParser = "TxOutDatumNone" >> pure ()
112+
-- TODO: Handle inline datums, if we need them here
113+
outputDatumParser :: Parser OutputDatum
114+
outputDatumParser =
115+
OutputDatumHash <$> datumHashParser
116+
<|> "TxOutDatumNone" $> NoOutputDatum
112117

113118
datumHashParser :: Parser DatumHash
114119
datumHashParser = do

test/Spec/BotPlutusInterface/Contract.hs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import Ledger.Tx (
3838
import Ledger.Tx qualified as Tx
3939
import Ledger.Value qualified as Value
4040
import NeatInterpolation (text)
41+
import Plutus.ChainIndex (OutputDatum (NoOutputDatum))
4142
import Plutus.ChainIndex.Types (BlockId (..), Tip (..))
4243
import Plutus.Contract (
4344
Contract (..),
@@ -109,7 +110,7 @@ tests =
109110
sendAda :: Assertion
110111
sendAda = do
111112
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
112-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350)
113+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350) NoOutputDatum Nothing
113114
initState = def & utxos .~ [(txOutRef, txOut)]
114115
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
115116

@@ -180,7 +181,7 @@ sendAda = do
180181
sendAdaNoChange :: Assertion
181182
sendAdaNoChange = do
182183
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
183-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
184+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
184185
initState = def & utxos .~ [(txOutRef, txOut)]
185186
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
186187

@@ -209,7 +210,7 @@ sendAdaNoChange = do
209210
sendAdaStaking :: Assertion
210211
sendAdaStaking = do
211212
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
212-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
213+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
213214
initState = def & utxos .~ [(txOutRef, txOut)]
214215
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
215216

@@ -281,7 +282,7 @@ sendAdaStaking = do
281282
multisigSupport :: Assertion
282283
multisigSupport = do
283284
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
284-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
285+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
285286
initState = def & utxos .~ [(txOutRef, txOut)]
286287
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
287288

@@ -323,7 +324,7 @@ multisigSupport = do
323324
withoutSigning :: Assertion
324325
withoutSigning = do
325326
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
326-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
327+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
327328
initState =
328329
def
329330
& utxos .~ [(txOutRef, txOut)]
@@ -368,9 +369,11 @@ sendTokens = do
368369
PublicKeyChainIndexTxOut
369370
pkhAddr1
370371
(Ada.lovelaceValueOf 1350 <> Value.singleton "abcd1234" "testToken" 100)
372+
NoOutputDatum
373+
Nothing
371374
txOutRef2 = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 1
372375
txOut2 =
373-
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1250)
376+
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1250) NoOutputDatum Nothing
374377
initState = def & utxos .~ [(txOutRef1, txOut1), (txOutRef2, txOut2)]
375378
inTxId1 = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef1
376379

@@ -403,10 +406,10 @@ sendTokensWithoutName :: Assertion
403406
sendTokensWithoutName = do
404407
let txOutRef1 = TxOutRef "08b27dbdcff9ab3b432638536ec7eab36c8a2e457703fb1b559dd754032ef431" 0
405408
txOut1 =
406-
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350 <> Value.singleton "abcd1234" "" 100)
409+
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350 <> Value.singleton "abcd1234" "" 100) NoOutputDatum Nothing
407410
txOutRef2 = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 1
408411
txOut2 =
409-
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1250)
412+
PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1250) NoOutputDatum Nothing
410413
initState = def & utxos .~ [(txOutRef1, txOut1), (txOutRef2, txOut2)]
411414
inTxId1 = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef1
412415

@@ -438,7 +441,7 @@ sendTokensWithoutName = do
438441
mintTokens :: Assertion
439442
mintTokens = do
440443
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
441-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1_000_000)
444+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1_000_000) NoOutputDatum Nothing
442445
initState = def & utxos .~ [(txOutRef, txOut)]
443446
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
444447

@@ -518,7 +521,7 @@ mintTokens = do
518521
spendToValidator :: Assertion
519522
spendToValidator = do
520523
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
521-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1000)
524+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1000) NoOutputDatum Nothing
522525
initState = def & utxos .~ [(txOutRef, txOut)]
523526
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
524527

@@ -603,14 +606,15 @@ spendToValidator = do
603606
redeemFromValidator :: Assertion
604607
redeemFromValidator = do
605608
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
606-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1_000_000)
609+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1_000_000) NoOutputDatum Nothing
607610
txOutRef' = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 1
608611
txOut' =
609612
ScriptChainIndexTxOut
610613
valAddr
611-
(Right validator)
612-
(Left datumHash)
613614
(Ada.lovelaceValueOf 1250)
615+
(Left datumHash)
616+
Nothing
617+
(Right validator)
614618
initState = def & utxos .~ [(txOutRef, txOut), (txOutRef', txOut')]
615619
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
616620

@@ -706,7 +710,7 @@ redeemFromValidator = do
706710
multiTx :: Assertion
707711
multiTx = do
708712
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
709-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
713+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
710714
initState = def & utxos .~ [(txOutRef, txOut)]
711715

712716
contract :: Contract () (Endpoint "SendAda" ()) Text [CardanoTx]
@@ -735,7 +739,7 @@ multiTx = do
735739
withValidRange :: Assertion
736740
withValidRange = do
737741
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
738-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
742+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
739743
initState = def & utxos .~ [(txOutRef, txOut)]
740744
inTxId = encodeByteString $ fromBuiltin $ Tx.getTxId $ Tx.txOutRefId txOutRef
741745

@@ -780,7 +784,7 @@ withValidRange = do
780784
useWriter :: Assertion
781785
useWriter = do
782786
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
783-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200)
787+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1200) NoOutputDatum Nothing
784788
initState = def & utxos .~ [(txOutRef, txOut)]
785789

786790
contract :: Contract (Last Text) (Endpoint "SendAda" ()) Text CardanoTx

test/Spec/BotPlutusInterface/ContractStats.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Ledger (ChainIndexTxOut (PublicKeyChainIndexTxOut), PaymentPubKeyHash (un
1212
import Ledger.Ada qualified as Ada
1313
import Ledger.Constraints qualified as Constraints
1414
import Ledger.Tx (CardanoTx, TxOutRef (TxOutRef))
15+
import Plutus.ChainIndex (OutputDatum (NoOutputDatum))
1516
import Plutus.Contract (
1617
Contract (..),
1718
Endpoint,
@@ -42,7 +43,7 @@ tests =
4243
budgetSavingEnabled :: Assertion
4344
budgetSavingEnabled = do
4445
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
45-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350)
46+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350) NoOutputDatum Nothing
4647
initState =
4748
def & utxos .~ [(txOutRef, txOut)]
4849
& contractEnv .~ contractEnv'
@@ -62,7 +63,7 @@ budgetSavingEnabled = do
6263
budgetSavingDisabled :: Assertion
6364
budgetSavingDisabled = do
6465
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
65-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350)
66+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350) NoOutputDatum Nothing
6667
initState = def & utxos .~ [(txOutRef, txOut)]
6768

6869
contract :: Contract () (Endpoint "SendAda" ()) Text CardanoTx

test/Spec/BotPlutusInterface/TxStatusChange.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import Ledger (ChainIndexTxOut (PublicKeyChainIndexTxOut), PaymentPubKeyHash (un
1313
import Ledger.Ada qualified as Ada
1414
import Ledger.Constraints qualified as Constraints
1515
import Ledger.Tx (TxOutRef (TxOutRef))
16-
import Plutus.ChainIndex (RollbackState (Unknown), Tip (TipAtGenesis), TxStatus)
16+
import Plutus.ChainIndex (OutputDatum (NoOutputDatum), RollbackState (Unknown), Tip (TipAtGenesis), TxStatus)
1717
import Plutus.ChainIndex.Types (Tip (Tip))
1818
import Plutus.Contract (
1919
Contract (..),
@@ -48,7 +48,7 @@ tests =
4848
testTxFoundAndConfirmed :: Assertion
4949
testTxFoundAndConfirmed = do
5050
let txOutRef = TxOutRef "e406b0cf676fc2b1a9edb0617f259ad025c20ea6f0333820aa7cef1bfe7302e5" 0
51-
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350)
51+
txOut = PublicKeyChainIndexTxOut pkhAddr1 (Ada.lovelaceValueOf 1350) NoOutputDatum Nothing
5252
initState =
5353
def & utxos .~ [(txOutRef, txOut)]
5454
& contractEnv .~ contractEnv'

test/Spec/BotPlutusInterface/UtxoParser.hs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import Ledger.Tx (
1818
import Ledger.Value (TokenName (TokenName))
1919
import Ledger.Value qualified as Value
2020
import NeatInterpolation (text)
21+
import Plutus.V2.Ledger.Api (OutputDatum (NoOutputDatum, OutputDatumHash))
2122
import PlutusTx.Builtins (toBuiltin)
2223
import Test.Tasty (TestTree, testGroup)
2324
import Test.Tasty.HUnit (Assertion, testCase, (@?=))
@@ -39,6 +40,7 @@ tests =
3940
, testCase "Multiple utxos, ada only" multiAdaOnly
4041
, testCase "Single utxo, ada and native tokens" singleWithNativeTokens
4142
, testCase "Single utxo, with datum" singleWithDatum
43+
, testCase "PubKeyHash address with datum" pkhAddrWithDatum
4244
]
4345

4446
withoutUtxo :: Assertion
@@ -62,7 +64,7 @@ singleAdaOnly = do
6264
|]
6365
[
6466
( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0
65-
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 5000000000)
67+
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 5000000000) NoOutputDatum Nothing
6668
)
6769
]
6870

@@ -79,15 +81,15 @@ multiAdaOnly = do
7981
|]
8082
[
8183
( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0
82-
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 5000000000)
84+
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 5000000000) NoOutputDatum Nothing
8385
)
8486
,
8587
( TxOutRef "52a003b3f4956433429631afe4002f82a924a5a7a891db7ae1f6434797a57dff" 1
86-
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 89835907)
88+
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 89835907) NoOutputDatum Nothing
8789
)
8890
,
8991
( TxOutRef "d8a5630a9d7e913f9d186c95e5138a239a4e79ece3414ac894dbf37280944de3" 0
90-
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 501000123456)
92+
, PublicKeyChainIndexTxOut addr (Ada.lovelaceValueOf 501000123456) NoOutputDatum Nothing
9193
)
9294
]
9395

@@ -117,6 +119,8 @@ singleWithNativeTokens = do
117119
<> Value.assetClassValue tokenWithRawByteString 3456
118120
<> Value.assetClassValue tokenWithEmptyName 4567
119121
)
122+
NoOutputDatum
123+
Nothing
120124
)
121125
]
122126

@@ -133,9 +137,29 @@ singleWithDatum = do
133137
( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0
134138
, ScriptChainIndexTxOut
135139
addr
136-
(Left "0000")
140+
(Ada.lovelaceValueOf 5000000000)
137141
(Left "2cdb268baecefad822e5712f9e690e1787f186f5c84c343ffdc060b21f0241e0")
142+
Nothing
143+
(Left "0000")
144+
)
145+
]
146+
147+
pkhAddrWithDatum :: Assertion
148+
pkhAddrWithDatum = do
149+
let addr = pubKeyHashAddress "0000"
150+
testUtxoParser
151+
addr
152+
[text| TxHash TxIx Amount
153+
--------------------------------------------------------------------------------------
154+
384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51 0 5000000000 lovelace + TxOutDatumHash ScriptDataInBabbageEra "2cdb268baecefad822e5712f9e690e1787f186f5c84c343ffdc060b21f0241e0"
155+
|]
156+
[
157+
( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0
158+
, PublicKeyChainIndexTxOut
159+
addr
138160
(Ada.lovelaceValueOf 5000000000)
161+
(OutputDatumHash "2cdb268baecefad822e5712f9e690e1787f186f5c84c343ffdc060b21f0241e0")
162+
Nothing
139163
)
140164
]
141165

0 commit comments

Comments
 (0)