Skip to content

Commit

Permalink
Fix script tx to be spent on L1
Browse files Browse the repository at this point in the history
- Add missing collateral
- Add missing witness during signing

Note:
By introducing the collateral utxo, now the key has more than one.
This causes the resulting utxo from queryUTxOFor contained two entries: one for
the normal utxo and another one for the collateral utxo.
This was making createScriptOutput to build an invalid script tx in case the
collateral utxo was selected, when finding a utxo that fits the total amount
to deposit.

Finally, removed debug lines
  • Loading branch information
ffakenz committed May 30, 2023
1 parent 7b7e7d0 commit 814a4b6
Showing 1 changed file with 20 additions and 19 deletions.
39 changes: 20 additions & 19 deletions hydra-cluster/src/Hydra/Cluster/Scenarios.hs
Expand Up @@ -15,7 +15,6 @@ import CardanoClient (
queryProtocolParameters,
querySystemStart,
queryTip,
queryUTxOFor,
submitTransaction,
)
import CardanoNode (RunningNode (..))
Expand All @@ -27,13 +26,13 @@ import qualified Data.List as List
import qualified Data.Set as Set
import Hydra.API.RestServer (DraftCommitTxRequest (..), DraftCommitTxResponse (..))
import Hydra.Cardano.Api (
mkTxOutDatumHash,
AddressInEra,
BuildTxWith (BuildTxWith),
Key (SigningKey, getVerificationKey),
Lovelace,
Lovelace (..),
PaymentKey,
PlutusScriptV2,
ProtocolParameters,
ScriptDatum (ScriptDatumForTxIn),
ScriptWitnessInCtx (ScriptWitnessForSpending),
ShelleyWitnessSigningKey (WitnessPaymentKey),
Expand All @@ -50,6 +49,7 @@ import Hydra.Cardano.Api (
mkScriptAddress,
mkScriptWitness,
mkTxOutAutoBalance,
mkTxOutDatumHash,
mkVkAddress,
selectLovelace,
setTxInsCollateral,
Expand All @@ -62,7 +62,7 @@ import Hydra.Cardano.Api (
txOutValue,
pattern ReferenceScriptNone,
pattern ScriptWitness,
pattern TxInsCollateral, createAndValidateTransactionBody, ProtocolParameters,
pattern TxInsCollateral,
)
import Hydra.Chain (HeadId)
import Hydra.Chain.Direct.Wallet (signWith)
Expand Down Expand Up @@ -90,9 +90,9 @@ import Network.HTTP.Req (
runReq,
(/:),
)
import qualified PlutusLedgerApi.Test.Examples as Plutus
import Test.Hspec.Expectations (shouldBe)
import Test.QuickCheck (generate)
import qualified PlutusLedgerApi.Test.Examples as Plutus

restartedNodeCanObserveCommitTx :: Tracer IO EndToEndLog -> FilePath -> RunningNode -> TxId -> IO ()
restartedNodeCanObserveCommitTx tracer workDir cardanoNode hydraScriptsTxId = do
Expand Down Expand Up @@ -272,33 +272,31 @@ singlePartyCommitsFromExternalScript tracer workDir node hydraScriptsTxId =
(someVk, someSk) <- generate genKeyPair
pparams <- queryProtocolParameters networkId nodeSocket QueryTip
normalUTxO <- seedFromFaucet node someVk 10_000_000 Normal (contramap FromFaucet tracer)
scriptUtxo <- createScriptOutput pparams scriptAddress someSk
scriptUtxo <- createScriptOutput pparams scriptAddress someSk normalUTxO
colateralUTxO <- seedFromFaucet node someVk 20_000_000 Normal (contramap FromFaucet tracer)

let redeemer = toScriptData ()
datum = ScriptDatumForTxIn $ toScriptData ()

let scriptTxIn = List.head $ fst <$> UTxO.pairs scriptUtxo
collateralTxIns = fst <$> UTxO.pairs colateralUTxO
scriptWitness =
BuildTxWith $
ScriptWitness ScriptWitnessForSpending $
mkScriptWitness script datum redeemer

-- TODO: temporary sanity check: Spend the script on L1
let body =
defaultTxBodyContent
& addTxIn (scriptTxIn, scriptWitness)
& setTxInsCollateral (TxInsCollateral mempty)
& setTxInsCollateral (TxInsCollateral collateralTxIns)
& setTxProtocolParams (BuildTxWith $ Just pparams)

systemStart <- querySystemStart networkId nodeSocket QueryTip
epochInfo <- toLedgerEpochInfo <$> queryEraHistory networkId nodeSocket QueryTip
let changeAddress = mkVkAddress networkId someVk

-- DEBUG
let validatedTx = createAndValidateTransactionBody body
print validatedTx

let balancedBody =
let changeAddress = mkVkAddress networkId someVk
balancedBody =
makeTransactionBodyAutoBalance
systemStart
epochInfo
Expand All @@ -311,7 +309,7 @@ singlePartyCommitsFromExternalScript tracer workDir node hydraScriptsTxId =
& \case
Left e -> error (show e)
Right res -> balancedTxBody res
let spendScriptTx = signShelleyTransaction balancedBody []
let spendScriptTx = signShelleyTransaction balancedBody [WitnessPaymentKey someSk]
submitTransaction networkId nodeSocket spendScriptTx

-- -- Request to build a draft commit tx from hydra-node
Expand Down Expand Up @@ -345,9 +343,9 @@ singlePartyCommitsFromExternalScript tracer workDir node hydraScriptsTxId =
ProtocolParameters ->
AddressInEra ->
SigningKey PaymentKey ->
UTxO ->
IO UTxO
createScriptOutput pparams scriptAddress sk = do
utxo <- queryUTxOFor networkId nodeSocket QueryTip vk
createScriptOutput pparams scriptAddress sk utxo = do
let outputs = [scriptTxOut]
totalDeposit = sum (selectLovelace . txOutValue <$> outputs)
someUTxO =
Expand All @@ -358,7 +356,7 @@ singlePartyCommitsFromExternalScript tracer workDir node hydraScriptsTxId =
nodeSocket
changeAddress
someUTxO
[]
collateralTxIns
outputs
>>= \case
Left e ->
Expand All @@ -367,8 +365,11 @@ singlePartyCommitsFromExternalScript tracer workDir node hydraScriptsTxId =
let tx = makeSignedTransaction [makeShelleyKeyWitness body (WitnessPaymentKey sk)] body
submitTransaction networkId nodeSocket tx
newUtxo <- awaitTransaction networkId nodeSocket tx
pure $ UTxO.filter (\out -> txOutAddress out == scriptAddress) newUtxo
let scriptUtxo = UTxO.filter (\out -> txOutAddress out == scriptAddress) newUtxo
pure scriptUtxo
where
collateralTxIns = mempty

vk = getVerificationKey sk

changeAddress = mkVkAddress networkId vk
Expand Down

0 comments on commit 814a4b6

Please sign in to comment.