diff --git a/hydra-cluster/hydra-cluster.cabal b/hydra-cluster/hydra-cluster.cabal index 977db2f9b3d..6d46120ce98 100644 --- a/hydra-cluster/hydra-cluster.cabal +++ b/hydra-cluster/hydra-cluster.cabal @@ -86,8 +86,8 @@ library , aeson , async , base >=4.7 && <5 - , bytestring , base16-bytestring + , bytestring , cardano-slotting , containers , contra-tracer diff --git a/hydra-cluster/src/Hydra/Cluster/Scenarios.hs b/hydra-cluster/src/Hydra/Cluster/Scenarios.hs index 8e6af516297..93ffa321a71 100644 --- a/hydra-cluster/src/Hydra/Cluster/Scenarios.hs +++ b/hydra-cluster/src/Hydra/Cluster/Scenarios.hs @@ -701,6 +701,9 @@ canRecoverDeposit tracer workDir node hydraScriptsTxId = guard $ v ^? key "tag" == Just "CommitRecorded" pure () + (selectLovelace . balance <$> queryUTxOFor networkId nodeSocket QueryTip walletVk) + `shouldReturn` 0 + ChainPoint slotNo _ <- queryTip networkId nodeSocket let recoverRequest = object @@ -716,7 +719,7 @@ canRecoverDeposit tracer workDir node hydraScriptsTxId = >>= httpJSON waitForAllMatch 20 [n1] $ \v -> do - guard $ v ^? key "tag" == Just "RecoverFinalized" + guard $ v ^? key "tag" == Just "CommitRecovered" pure () (balance <$> queryUTxOFor networkId nodeSocket QueryTip walletVk) diff --git a/hydra-cluster/src/HydraNode.hs b/hydra-cluster/src/HydraNode.hs index 625dc8a0db6..3c1e10ec90b 100644 --- a/hydra-cluster/src/HydraNode.hs +++ b/hydra-cluster/src/HydraNode.hs @@ -380,14 +380,14 @@ withHydraNode' tracer chainConfig workDir hydraNodeId hydraSKey hydraVKeys allNo } ) { std_out = maybe CreatePipe UseHandle mGivenStdOut - , std_err = Inherit + , std_err = CreatePipe } traceWith tracer $ HydraNodeCommandSpec $ show $ cmdspec p withCreateProcess p $ \_stdin mCreatedStdOut mCreatedStdErr processHandle -> case (mCreatedStdOut <|> mGivenStdOut, mCreatedStdErr) of - (Just out, Nothing) -> action out stderr processHandle + (Just out, Just err) -> action out err processHandle (Nothing, _) -> error "Should not happen™" (_, Nothing) -> error "Should not happen™" where diff --git a/hydra-cluster/test/Test/EndToEndSpec.hs b/hydra-cluster/test/Test/EndToEndSpec.hs index df31cc5c25e..c3a8d564f7e 100644 --- a/hydra-cluster/test/Test/EndToEndSpec.hs +++ b/hydra-cluster/test/Test/EndToEndSpec.hs @@ -58,8 +58,8 @@ import Hydra.Cluster.Scenarios ( EndToEndLog (..), canCloseWithLongContestationPeriod, canCommit, - canRecoverDeposit, canDecommit, + canRecoverDeposit, canSubmitTransactionThroughAPI, headIsInitializingWith, initWithWrongKeys, diff --git a/hydra-node/golden/ReasonablySized (DraftCommitTxRequest (Tx ConwayEra)).json b/hydra-node/golden/ReasonablySized (DraftCommitTxRequest (Tx ConwayEra)).json index 9255d348daf..ef135a9a38d 100644 --- a/hydra-node/golden/ReasonablySized (DraftCommitTxRequest (Tx ConwayEra)).json +++ b/hydra-node/golden/ReasonablySized (DraftCommitTxRequest (Tx ConwayEra)).json @@ -1,56 +1,7 @@ { "samples": [ { - "recoverDeadline": -4, - "recoverHeadId": "01080305010400080404060501050702", - "recoverStart": 0, - "recoverUTxO": { - "0000030601010003080307050307060603020101080603010203040706050705#23": { - "address": "addr_test1zr30qjnnzsj25qj5mnv5vqsy5jx8xx5zw73257vt8v3te7gu9t3jdgw4l7k9etqqy0c9uedjnjlewjxx6j8k2ju6wxtq0vnj63", - "datum": null, - "datumhash": "517149add56d8056965a5f1e890a04c115a7d10d4c3583818356125a28d9e02b", - "inlineDatum": null, - "referenceScript": null, - "value": { - "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { - "80f0d6": 1 - }, - "lovelace": 1807725733820881937 - } - }, - "0005070404060202040204060703060504020801080006050600010106070303#62": { - "address": "addr1y9uzvy8u7gj2cd062qq23jexc7dmwxey94374pjkkkfr93azxccjmsxect2dy6mdmway3gx5m4h2kkekja9qwc20wfpqjkn6nn", - "datum": null, - "datumhash": null, - "inlineDatum": null, - "referenceScript": null, - "value": { - "8600a7febd45652c1a2e9930569eb0463733a845d705476d1a8fa5ff": { - "39": 1 - }, - "lovelace": 815794582948710859 - } - }, - "0305060502030501020005000402080505020005000201030100070702010005#73": { - "address": "addr1wxgqrdmcsh6ss68rn993q6sugpu8rtfatfvsexwwwy52k0srquu59", - "datum": null, - "datumhash": null, - "inlineDatum": null, - "referenceScript": { - "script": { - "cborHex": "8200581cb2aeae6028d1c39e7a1309d612427267cfe731352aa9036027fccc16", - "description": "", - "type": "SimpleScript" - }, - "scriptLanguage": "SimpleScriptLanguage" - }, - "value": { - "6db635dcef600b0ab43e4592baa30872c7c650578df14e02d0e1a182": { - "37": 1 - } - } - } - } + "recoverStart": 0 }, { "blueprintTx": { diff --git a/hydra-node/golden/StateChanged/CommitRecovered.json b/hydra-node/golden/StateChanged/CommitRecovered.json new file mode 100644 index 00000000000..fb936556cc3 --- /dev/null +++ b/hydra-node/golden/StateChanged/CommitRecovered.json @@ -0,0 +1,2212 @@ +{ + "samples": [ + { + "newLocalUTxO": { + "06ff29fe2b76764c941c38945006dd0ef13f64f4584e78e9df6f7412fd06a047#28": { + "address": "addr1xxtl5s57p59394n93v45ye2whhe5ve4hpppfhn8ejjxkfahglv884s2426cd222kskryz5r8lf4dnz87lq48l5gyfncqzjynss", + "datum": null, + "datumhash": "ecf099e3a15e66c525cb2d1f050c93aee978bcf821c605bc377f71f488f632f8", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820183830301828200581cd24e59c2f7fdf4354c375e29b5da613547180ca6a9c7e8f701c8b1818201848200581c7a6f087fc861b8addf3742b4a2add75707d1d3fa33210f9169082c778200581cfb2eac9efb78eea70cf37b4f9948b7abdd5d4e9c4d17724a85d67bb38200581cbade791bcb8055397e17c2b48fd4ea3454efc442250b24cd93e350138200581c8f0d3dc2f1205f3756749d2b88859ad1a439872c78dda2556be408708200581c3e5bd5fc1625a58eed409a6b882422edfc1ba79feda696a0b5b993898202848202838200581c63307a4e2fc6508c1bfc00030613ae3d03dd39882a9df67d2c12066f8200581c15abf12df0add856e257069de0bc74338797c20660bef5a5c4e614ac8200581cb60ff12b048e9ac60e1f8937f631749b2d5127b6f4d6e5b71bb058e98200581cafefd6ae782610c8196efffd9c0b2887fa6ce745c56c72747b200fda8202818200581c34189c1c344d2158fc60d8e2e05091dedd90949ccd74bff17cb7df228200581cfb6bc2558fb2f992e74ca1993c22abd8443089e9af26b3226f766199", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "8f461954fe2f18fee1dca233f358907e643ff839ed1f995e4bf325e3": { + "31": 2, + "4e27": 886367012431791901 + }, + "e091fb97087388b331ac558f76383df62817679d29512eac0f23ff67": { + "30": 1334723611476567699 + }, + "lovelace": 2 + } + }, + "0c94f10c3a576f9f2a2243a0f59b9579e391ce59e92b269bf5547e824700aa3d#49": { + "address": "addr_test1xqvhmgzcc9frv3ykygkjzqhjkwhxsr5d6djhhaq3hzu78wkaa9v20e4t4uupfem9rrp0mglq53p99rgx528e9nd5e97qlj06xq", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820180", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { + "6d92f6470d8aec679f846825b727682c98d28b": 5073345480762908204, + "8030a266f7d770c103e6aeea3d876b4d7ea1": 5925347642764162480 + }, + "b0c53e2bf180858da4b64eb5598c5615bba7d723d2b604a83b7f9165": { + "ae86": 2 + }, + "lovelace": 2 + } + }, + "0d88e474013fb488188333965923855b6ad33be799e70ff05153a82dca820ebd#55": { + "address": "EqGAuA8vHnNnDSmH7HpJT5gPc8P9cZ8sXhh2VQoLxVGGBsCTjmCS54YwTyjEMoQKoJu5UsPxJ1C4paooxb9wQDRdKvkMLKW2B4cTMGM4Dsws6U3QHcVuxwQ", + "datum": null, + "datumhash": "2abfe1c256ad009494b5d41410c88586acca37c1c073d37244d63ab07aaa9f3d", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581c7faf7c7d4fe5df2ec519581ff340c3ff3d7d1a518d098e035cfe247c", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "32": 2 + }, + "cc9d8dcd9ce84c2cb1e29a11a4e1b6e63f8c9f64fbab8d7bb67584e5": { + "33": 7612144212050836753, + "34": 3115418856683118096 + }, + "lovelace": 2 + } + }, + "11fe4e867d3b80a364266e9203c2699f4ccf62e27fba5fb24b7c8d7f76e8a36e#43": { + "address": "addr_test1qrzhmms8p9estnwnd95mf9hms9yunqawmyy22taggr2z260ze2jg70m6tsazjh2mrmmxth6n8epvlwt2a8q88n28wdxsjzqnr3", + "datum": null, + "inlineDatum": { + "map": [] + }, + "inlineDatumhash": "d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c", + "referenceScript": null, + "value": { + "245d5a7a06fe18358242e81281cd5ba9e6abe4efc54e7b659f25abae": { + "bc12a5ec57ef30f4": 7787468282051283406 + }, + "lovelace": 1 + } + }, + "1c004fdcf5e4ca6a2afec4603f536f95105a1a54e8b3c166e7f1a65e59d09e6c#54": { + "address": "addr_test1qr4sh9dy7w3xhr6nykhxqum7zkkhy8hlj20f6yk9sxm54pfntyspp2zy8hgakhhp33yw4e8l8rk9crn3jzkk8mp8ay2q3s0x3j", + "datum": null, + "inlineDatum": { + "int": -2 + }, + "inlineDatumhash": "0268be9dbd0446eaa217e1dec8f399249305e551d7fc1437dd84521f74aa621c", + "referenceScript": { + "script": { + "cborHex": "8202848200581c334f4f8dc2106a57a23c3cf271891da0567fbaada6fc0c6b39e9b8838200581cd30318892a54be9d575f9da93f6b477d749d06e095d0139da60c70c08202838201838200581c3d01bd1dd73a5f4e041ef18538b6f6a42b8f52c52afc78ad489a312f8200581ccb903a8da3c33e2ff81994ace97a3a510283ce4cb46cfbe1ba68664b8200581cf0105318fe4fc75cf951747d4a83286b12b8b85c3631b6dd968f44448202848200581c9abee0273490c2c0e184ea50284d3da7121b312c4fe220202db836398200581c35298e14b1c406c531ecd58881cafe1f1653f95cb19a2ffa05f898dd8200581cbdce9fbd29c8792a892d0e5aba083611620dbad1e5b590e63cb9420f8200581c7f42d6e4771748f676a4147998a3d2021654da41d67f7554d61aaf278202818200581c1efc82279d60973411b06c3e54e934ab871fdfed3f01c6c905ced00b820181830303848200581c422d3aa6d960d928396619c257d55494b53fa753c2868fe292fbbb048200581c7b993d651baebf911c2707f8425e4647b21b59970daadeeee7cb59648200581ca8e3141a46a00ab14fa883b5295b8b8ad5ee49ee5240a86a1bf8a09d8200581c6ec04ecc4a203605a43ce96e55a04a1fd059f13e0fd8cc49401bc048", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2e12c5e499e0521b13837391beed1248a2e36117370662ee75918b56": { + "4ddb5215f863bd26187a5b1ad572c89c6d8b565108a423a0253af8": 2171306889146928025 + } + } + }, + "224d12a45887bbc236b9ed07362e8e9b5f187a49ea7f55d999443e60f1d8c805#14": { + "address": "addr_test1vznkwf2ffg5jn62qrh4yft9hg2jdwywcsfztuhu3knn9d8qtla4nx", + "datum": null, + "inlineDatum": { + "bytes": "ac24" + }, + "inlineDatumhash": "3ce336a95b49a57618ad5eff8895bb06abb1ff11c8c05111066d6b24333fb85a", + "referenceScript": { + "script": { + "cborHex": "8200581c84dea95c378549b5d889fb9da81b89caed0e7f9e9e0d4524ba6ffff2", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "3622ae": 1693793897106477834 + } + } + }, + "26b48368df8575c976ac4913d0ae88eccf96cde35150c4a1cdd6f67afc34c86c#15": { + "address": "addr1v90agl7djdpy3zgfcfn3u0thas7pshz7nmun0spxan97pvg8wmu96", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "7b169c317bb025812c1851742f285227842b593b437683ee920aa76e": { + "35": 1 + }, + "lovelace": 2 + } + }, + "38377a93c28921315f91d19dc56bf1ba2d26a4d94242a6dbd21a49a8a3274885#26": { + "address": "addr_test1wr4ruppkmx7mnfs7fkhf9s2n2hfqcv9n8tcga52w3zsknzs7v0mua", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "484701000022220011", + "description": "", + "type": "PlutusScriptV1" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV1" + }, + "value": { + "105a8f1bb56444cacc86378c95421aceeb326b0fb7743e493eb82fd5": { + "6b77cd082c4982": 1, + "a99e3c5f6065cf57f62f934b349af5": 2300656884495018937 + }, + "31d2be2f1c345d8e02a3d389e05fb0fa3b1d8bf30b2075f750dda70c": { + "7617bef1bcbf92205c0394523e8aee4a80fa4df982698edb": 2, + "d744faba7bc7630b3f21f58cf6722b5126bafcb4a4": 2 + }, + "lovelace": 3955408357072313485 + } + }, + "49d90deb69f21637f0ebcb4dd138982775b75725d74f798e2270b6f2826fd903#71": { + "address": "2RhQhCGqYPDn7Ndzzdw1NmyNSKHy4hhPRWhHWdcS7Yku8GdcYCN3R3Bwg1oGdvHUk7dsuzuB9iwbAfPtCdLdM7utnT2qcAPMD8GtbrCG4TnWXQ", + "datum": null, + "datumhash": "222fbbc44816d860202c0efa03fb3f19e45b0ecc643cefc2b8434ffa2e75916c", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "83030080", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "d201d08276106b737dea28f6175d8564075a289b8afbeb5e602a116e": { + "304f": 7042585879834811805 + }, + "lovelace": 7640410800880966542 + } + }, + "541fa51cd958873816bfaf75b239d91a369984b44653e4d6928ae6fb8147dbd5#18": { + "address": "addr1yx6r52fn2wdqru6ysaur66l2jm3ywk7gs75y9mgrp8s9fceag0m69mlld7vfr8jw6543wu0zd6l2kl7y43tgggqf0m9q6s9nj5", + "datum": null, + "datumhash": "c3fb9c77693bbf58de7e2ea4c6b20d14d109b03c5ee00a17b097c623620a27b9", + "inlineDatum": null, + "referenceScript": null, + "value": { + "b0c53e2bf180858da4b64eb5598c5615bba7d723d2b604a83b7f9165": { + "02fe8b653eb5ec126b02b23b6dff9f9afe8d3677324167": 8514306743356479562 + }, + "d531de61ca615f2ef789c7388560ccd528e5beb5e91e14bee62dfe07": { + "0033a64ae321e1e400901e0d4ec80a1d3f": 2, + "37": 2091412507686318020 + }, + "lovelace": 2 + } + }, + "5a6a541326625860acf69dc60e4845911da4e57c69c46b6900b63296c3c13a6f#95": { + "address": "addr12ya373vmm4znpn3vzhdq4u34zfjy9nqu9pz2vjmy9vmtdja58jqaynup795sx6xl9a", + "datum": null, + "inlineDatum": { + "int": -1 + }, + "inlineDatumhash": "ae85d245a3d00bfde01f59f3c4fe0b4bfae1cb37e9cf91929eadcea4985711de", + "referenceScript": { + "script": { + "cborHex": "82041a00196e15", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { + "e185b7fb22ab0d71dfc940f89cdd5bd266d4bde759387d8e3f": 4332458151991342456 + }, + "df2fb4c2583bf43d7d3e8c1186e9bcf22ac72e260a92094867948b4c": { + "32": 1 + }, + "lovelace": 8878433864389277303 + } + }, + "5cf5bd754fbee2aaf65150d8c91409c32139e1ab5638f3912aaa530326f55d2e#39": { + "address": "addr1g9z85jytthmz0ldc0t52has2xam65zt4yf87gs4t8tpqhdyvvzqe2xvpmqqq5e5v0r", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { + "33": 1, + "36": 8147579955038057501 + }, + "lovelace": 1 + } + }, + "5d473d5da83d145c1d3c8688ea50939897ca48da9c8cc2c93d14ed55d0a8a0fc#43": { + "address": "addr_test1wzgwp88ejg3ayz6s7gm4xxjqd6hjs97qx6cgtk7hk3xxwaqrfruv4", + "datum": null, + "inlineDatum": { + "map": [ + { + "k": { + "bytes": "fe" + }, + "v": { + "list": [ + { + "bytes": "579fc636" + }, + { + "constructor": 4, + "fields": [ + { + "bytes": "ae" + }, + { + "bytes": "0515" + }, + { + "bytes": "64c800fc" + } + ] + }, + { + "list": [] + }, + { + "bytes": "" + } + ] + } + }, + { + "k": { + "bytes": "fd75c0b0" + }, + "v": { + "int": 4 + } + } + ] + }, + "inlineDatumhash": "cb0c21d7c662ec9dfdfe012948e3043e191374d1a5c69be429aac566672b1110", + "referenceScript": { + "script": { + "cborHex": "83030282830302838201808202828200581ca33953cb8c88477856b715ce224dedf776edf97c5c2cfc18c981149d8200581c48007520de95ddf09235356b2d7e4f68da78b48e284d48c533c79df08200581ce7ed90bc4b43f3c633c2ab532c2bd52b868481426e2a96e397a9adbb820181830302838200581c601a621ce90b36bc2dc14183f53287cccc807526dce88bc434bfd4828200581c4954f73e9b11e4bc45b8514717dd48b06f3c05014b80cc00c44fe28f8200581cdf3b08ec8923977e1ddbc456874cb6540d8120edb9e030d8957c2923", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "b0c53e2bf180858da4b64eb5598c5615bba7d723d2b604a83b7f9165": { + "32": 5410017557655435170 + } + } + }, + "6091eeff3fa58be045b637d95f7ff29a182d38edae60619378a3c95859a9d66b#46": { + "address": "addr_test1vz6hyt7a5cytzvrh4jzl04uf9hxfl8265r8w4tl73t0e9ycgjpyf6", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "e69814850dbbe92f13e8e6d236fd1ca933331cc09bd328e4ccf8b810": { + "34": 1, + "5f0e534dd94f2eaefcd2fe992d8fa8bab267c0b762e14d7609c834": 3 + }, + "lovelace": 8849831192842545900 + } + }, + "663ae95e549a99f6a8c439838f9853f65443b9b0c899ec7c25d3d09ebe12c348#94": { + "address": "addr_test1xzxf66m3vesj9ggu37l5tapqp5eh36383z4jvkzggpmn2e39hh4sc7cwtka76du9vvmy6850vqdmdw8ddg8sv7e947jqwft2n6", + "datum": null, + "datumhash": "c463c917df062512cd7448826898560299027ec8b24824eddcecc4d6e9c2c84f", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820180", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2e12c5e499e0521b13837391beed1248a2e36117370662ee75918b56": { + "9541375f65cf56": 1 + }, + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "c904ff2743b1bea5634cc2baa8d069b896647c6b79bd38": 1 + }, + "lovelace": 66449967528434176 + } + }, + "68d007d55f28c1e72debdf7b815339a49537fe25b6ab41b11779e5dca023372e#97": { + "address": "addr_test1qz9vs5ar437ctaswq8eawvpv3j2pxmntweyzdwhzp44anqvrm0ref87ljw0lvefas4x3w0zyu5rmrjv4lexuvryrssksrk8pft", + "datum": null, + "inlineDatum": { + "bytes": "cb" + }, + "inlineDatumhash": "db2b25e30737b0a56db5c1df9272903124472ff7c23ad1daa65757b2cf381073", + "referenceScript": { + "script": { + "cborHex": "820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "7faff18e67ea6899b4f2fe2e5865512046934d6921356a4a0ae2563c": { + "32": 2 + }, + "9ac45ec96f0983d62525033854c8aa124d77ce4bd965c6ebe39d8731": { + "93": 4272806204979938038 + }, + "lovelace": 1 + } + }, + "6cedcfb5ea2fef6f8d4461b5e87a04a7f612ff919e16edd1edc13dfa46170cd3#23": { + "address": "addr_test1zp7reqcnucfsxhf4depwumvh92yddjf4r58th7qsjz53fdzha7f0rzke0escxdnvmaj7wen0f7uy95np6tl2un3u8mgqsmtdrg", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "2b7c82c75361fc5f42ff": 6313803577013887241 + }, + "b3633c8805f2561419f52942179d8c24321dbe10ddd51713cfefb5a9": { + "35": 6301377306614258962 + }, + "lovelace": 5623255101342044625 + } + }, + "8f175f7da0f617bded9aa5e6de7c8e089b942a2ebd5766b280348057d44c793b#28": { + "address": "addr_test1yruz7qg8x8q9uden0jkdk3f3f04yu4j2p9dsxhxpuy53x827emt5z8f94jnj4uszmtvlqc6pctyvpua48fdtwrp585as63d2fu", + "datum": null, + "inlineDatum": { + "list": [ + { + "list": [ + { + "bytes": "13e5" + } + ] + }, + { + "map": [ + { + "k": { + "list": [ + { + "bytes": "f391b5bc" + }, + { + "bytes": "5f8a70" + }, + { + "bytes": "0053b5" + }, + { + "bytes": "d1337e" + } + ] + }, + "v": { + "list": [ + { + "int": 5 + }, + { + "int": -5 + }, + { + "bytes": "8e8b4a" + } + ] + } + } + ] + } + ] + }, + "inlineDatumhash": "1d53c4b04589dc7c836845c2e88dd5dd043896a63f10f560ad04374585fbc158", + "referenceScript": { + "script": { + "cborHex": "82051a00427b50", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { + "ed4e2a8b169ff481a716dd9cf6717bf61e9ed5669cd3c9bc7cacb6": 5982800406012181715 + }, + "e63afe1fe56cde0e52ca1ae178b1969e192239f0c56347837ec5bc85": { + "39827497b06ba5c5d7cd5d3d3c6a08471f63464322": 3065730717280717707 + }, + "lovelace": 2 + } + }, + "9413d729e24b689cf455ed581ee05ccb3df256fe626b48e17cb973e812d20cb6#22": { + "address": "2cWKMJemoBahFeFVmZ7orpTXb1EHWYvEbL83uKJjFeDBhb6eSmEHXqQ3v6xPeFFzicgqw", + "datum": null, + "datumhash": "3fc20550f8715c6e2b8f02c104c939f48fb4fb26f421de2c4b02b513ed84b65f", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820181820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "8f461954fe2f18fee1dca233f358907e643ff839ed1f995e4bf325e3": { + "03553d4492d3564df6ddb1e8d4596d0c": 6066850408847363484 + }, + "lovelace": 1 + } + }, + "a6853852c0e21b2c7cb07f61be678aef0e279f0b151c55e05578dd24d41684ac#33": { + "address": "addr1y8h7ef4qdctdrfwnmywd4ykdfnlzgr3pvsswp8u7yw0unygwhnfrml9ld8agjvkuavpdpv3rf9ce8xdnzcfxgadldqysvneqk4", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581cc415a414c290527c5c55db2ec1cf1a05b019955b09d88e4a0cc65945", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "4d50a11e297e7783383bf06dd6e4e481230323bd96cd8b8d9ee3888d": { + "117d6cf6a5c2c5": 2 + }, + "lovelace": 3401109114681334338 + } + }, + "b4623889261ce430c803ff863d28f5d02b933565dc2f2ed38d512a0f857b9ace#26": { + "address": "addr1x8rz7lyxdemmsht5jp7npxnjzlqffu96svk28tfpglk92ey7vyxj6ztpprgtjc9d9k4rdmjk9ayvh32uww30m7ad5yysnhkk5w", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "8fc02da0763952ade83b9cc198672b11f7fb30ee6cdb374c2abeb2f4": { + "613a06c5c5a766c82dfaaca734c14545f3ef967ef782c828d8ab15": 1 + }, + "lovelace": 7094413255433815641 + } + }, + "b4c0ccda5f5642b2185aa41c14dfd8e08aa7c28b47b4df89d3a32bba28f1bf79#88": { + "address": "addr_test1wrylzqpdzps7kp4hklq7j44ncdaxk6gkfjer488u8pehs8c4g8a8s", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820180", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "6f5592d1358040": 2 + }, + "8a960590cdb3d3dde567db45554eb2d0b3770ad60e511842848f6837": { + "cd822db3042570a82704e59c11227636b7cc71779192990a7503bf": 2 + }, + "lovelace": 2 + } + }, + "c5c55f32cf6a47492013a74a0d4ff35d3373e8dcc83b2b258d405055a534d60b#33": { + "address": "addr_test1qzw20869ur0f4qls8c4umsvrdjjlf6agtg7yu377cgmyqu6n3grfg6a99vl6p5jztcyzrv7qglkpv6ew22arjqw39svs27543v", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "2ecc0e51bf289139bbd0d7c9f43af476bb4af0331e386b174396af08": { + "d1402b9e": 1246757260248537822 + }, + "8f461954fe2f18fee1dca233f358907e643ff839ed1f995e4bf325e3": { + "d8900f21bfebadc45250": 8053242471327646886 + }, + "lovelace": 2 + } + }, + "c61a58840489a3a27685f4b36eb51ba2589f48aaaccc833fe839297756511415#18": { + "address": "EqGAuA8vHnNoSWvHQh4sbFm2GQobAi6gpamTh49knGYqbqCpLVAsiBWQ82FRZcRGPKiMnNoaJRRmR6wZcdKaWYrZaD6euN465T9QQS9rwt1zgHKeJMhdYoh", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "46450100002601", + "description": "", + "type": "PlutusScriptV1" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV1" + }, + "value": { + "4a1c412d8e2b3015a7fb7d382808fb7cb721bf93a56e8bb6661cdebe": { + "425e86d5601f4e4a15b68d9c4c126a79d87280816d113a": 5926275459022330637 + }, + "lovelace": 4254655844372958482 + } + }, + "cc3bc52cfd362776392fa0e9c4c5db7cffaba979b250e84c4bcd7b881cfd9217#3": { + "address": "addr_test1wz5nqjxswt2f529ma0x0609jdyxxd5fa22csy0e2spc4lqg5d8j80", + "datum": null, + "datumhash": "b91a97bcbf8d2d3466ee3a65f259a4136316fe3794c751d5f1e3aa06b43b6813", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8201828202808200581c3644c20aa173b9e424a21bb61384249429bd30a46cc37f99079799a7", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "ef": 4319622565427611732 + }, + "lovelace": 1 + } + }, + "cfa632e83e98e9ccfe0493818c354bf4badffced66cf13e9d46eb02763b0dc2e#96": { + "address": "addr1vx9vszv48l38gken7pw94zm2xq78fdz68vzm9pperprwumgfxwe39", + "datum": null, + "datumhash": "9d6736e30ea0f9aa532d21bda42a8852de7b608d961c723693bf35dcff510639", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "82041a00d81869", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "3d2829dd958f0da02eb548bd2acdbf2064c48c9ce7b9caaab926968c": { + "3cfcc6cfbe71f5ce5b41d2f55314bc85f47c695fe9bdea1676": 5606510372046385370 + }, + "lovelace": 2 + } + }, + "ea1095692f4af33da06f4251edef173292a1c0ead7b711812e2bc856a26a4ab5#35": { + "address": "addr_test1xrygaw6l5k2068vzwm9vjwd5qjkmrw78849th88eqsmv8r5w8h4c4qygngysvh4aql5555830njdkm2aept9vtnxuggqylvpm5", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "3f921dd56619a70c7e611fb1b0afdb80d7c7020705f7046e928c83d0": { + "6c0ff1b00bd1021800f50d50ca038afe4f7d": 1, + "8c6f596c421901b4fbda37563cbd22e3398f8fc6070d62810a53456b624c0f": 3432931227223553449 + }, + "8de1946877d4f69fd0494fe0a75acab46fb307adac6fa86b1fb38d80": { + "36": 1, + "4a8219": 5062052180182544150 + }, + "lovelace": 1 + } + }, + "edae5a78fae939501d5cde8d2f0ee091d312ff6f9f27a598558450c551239359#93": { + "address": "addr1y8z9c473vgecedfff0hm35nr82kx6pg5r06cj45zxecluchhhq75ypgzvm2lynf2pjjtk7me04kul2klw6xufzuw3g3sdzewas", + "datum": null, + "inlineDatum": { + "bytes": "" + }, + "inlineDatumhash": "39df024ac52722fe8ae4c1a8740e4c5624a38c3820e504a059aae8728421f8bd", + "referenceScript": { + "script": { + "cborHex": "820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "4a1c412d8e2b3015a7fb7d382808fb7cb721bf93a56e8bb6661cdebe": { + "17": 2334008558392594045 + }, + "a2c9e42cdec33e6942200fb4dfe2d07b7141bfe2a9085bb2deaca38d": { + "38": 6166243752568383186 + }, + "lovelace": 2 + } + }, + "ee0e7ea072b9ec37857528bf6ed417e53692c33584fa013db5d1890d0dafa1af#41": { + "address": "EqGAuA8vHnNr4rFd2ta4EBELdzf5RpJYNVTYRsS1oQiSBsZfGAp63whSDcohWhPvbVjjhmmWoiyceWuiFQwtmbsbYFir6o8GcoC6RSZtHrVKzfxkaA5LEt2", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "4746010000220011", + "description": "", + "type": "PlutusScriptV1" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV1" + }, + "value": { + "9fa0f5dbf70407654b8e1202046ae110e1bf7357fe52e2ed568382b8": { + "7a5c2c": 2 + }, + "be82ad5658cd3a2d193f12e5b6270d276e33694752689df8fddd64f1": { + "9527d2395f0c1ace446b0a0a5a8b4c7d89929f222f03e13a2a93d46e27": 2 + }, + "lovelace": 2 + } + }, + "fa17a3f551e375b228f9ae44a3e9ae8fdab16a61ddc30f3746b9aa17a3be81ad#80": { + "address": "addr_test1qrqcn92quzfk3tqdjfgkedm38ltcqje6e4xczhrta7e0vtxu8hxhw9pddr4w49jmpxlsjmkr256e5td0fju0wfczrfcqxng3xs", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "484701000022200101", + "description": "", + "type": "PlutusScriptV2" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV2" + }, + "value": { + "8394fed448db0c176683492bf3d325d8ea5afa65accb331670e9bdec": { + "37": 2 + }, + "lovelace": 1 + } + } + }, + "recoveredUTxO": { + "24bfbd53b1718fc9085ee6699eebe67b306c58ace8114ceeac34eb7df741e3c4#49": { + "address": "addr1zyg73m628rgul9r8w35hrjtg29t25v3ayuy0vzg3axu0rn6lsty309u7pmu8s5jux0yscskhd7c8qe3qdhej6xalxlqqc797z4", + "datum": null, + "datumhash": "8e088af6883816a3dca30fc975b9e0c0662f9e17d6bb2ede698c18cb72dc0d34", + "inlineDatum": null, + "referenceScript": null, + "value": { + "9e6a70eae3572b528e1937c52808654f4e2b42465413382056db5792": { + "4df9fae76c88cda17ad42ea36a5d652801a9": 4126511279753822956 + }, + "lovelace": 1 + } + }, + "2e2d9e87e3ca9a1bcaf6f4f6bf506c7b29e7a545033f82bc3dbfab0efb1ac92d#70": { + "address": "addr1z8qnp2zjvz0xrhj88x0ged0ezuu7lew2my4znsrz7xvyjs7rqnpfaj3qqjuw24n27uhyusy75yzvtgpjghxstn8c0ylqt597z4", + "datum": null, + "datumhash": "a0b31c40b2b126643bac4391f0eb8068621f02ed0f2a3de03c9f895300f79069", + "inlineDatum": null, + "referenceScript": null, + "value": { + "1549c03fa5e73feadb76252dd053a67775e0d0f5126c99eb55f0c2fb": { + "51b767de85243b2b8c2e6117ca53be4366eda1a1c9cd": 2, + "cd3a42a3f53bffb54133af479fd08402b4bdf318548135a342dc": 530937165494497222 + }, + "lovelace": 6283530381549436919 + } + }, + "365f5c22409115eb5af33d90c83928a207e48130f676eb25c80037dd48e0567a#68": { + "address": "addr1y887rhuk3hk8fhhkhwvvnu394ve8c3lj0477d0v90feq5y45p4gs6vlf5u6d8z4z6fvw2l78dhd4ec9s0svm53exnwaslrzcyy", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "4746010000220011", + "description": "", + "type": "PlutusScriptV2" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV2" + }, + "value": { + "3aef7fa282c1deaea0cd356c5072f0577ebe8fdd6a85cbaecb04e8e0": { + "39": 7232189115516666201 + }, + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "05d2604afc2e147b4a780c25edafdd4fb8cc7ef6da1769bd30277f85": 5539771596296290580 + }, + "lovelace": 2 + } + }, + "3ae7ff7de2bc539d8408a21063360b3c5a757538b77bf5332f6fd3aa06bdc439#19": { + "address": "addr_test1gq0m8mgsvkpm4y5y6x3mlfrg9f9szdh98ke7d7pk80jvsuvpkv80z38n2gv3wvej", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "82041a005f08d4", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "245d5a7a06fe18358242e81281cd5ba9e6abe4efc54e7b659f25abae": { + "31": 1, + "b09560d8498a": 637491891715966991 + }, + "7d8603b3e3ac47b73bac7dfabe10c20ba344ad207de95c9b89d01c24": { + "34b0095ab3afe2514f6412a079cff558c655ea206858": 5061457428015643786 + }, + "lovelace": 1 + } + }, + "3f7af017813bee837d4765c3bf936c09ab6fd0b7035aa1ed82e92593466a3f3b#7": { + "address": "addr129j6hqgpgx30jszvzk2xgnqmgc5dw0kjvhhn3n2ccz4j4pupn5vgrpjesxg56zppppf", + "datum": null, + "datumhash": "d1443bc5b425d3be85da8e13fcd13caf4904615f7f760a105baab9650c3f46eb", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "484701000022220011", + "description": "", + "type": "PlutusScriptV2" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV2" + }, + "value": { + "f94d948904f79d6c40f2387916b6de49bc7584b5e15880ee268dd75e": { + "0490b4164b04d581eb3ae3f6e3993aac89dd0e3baa": 3683219211041234765 + }, + "lovelace": 410261773487114394 + } + }, + "4528100a55b52fe5312ecda3dbb11665d3a301199f558f9e71237e183e748a2b#27": { + "address": "addr_test1zr2h8ztuspmdzgesrz0m0jqncavts8vul6w4ezywyplumqnfz3lt6l29t9hdlh6cw8k6f8zx55ym55l0jn522nerrlqq6nghgw", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": null, + "value": { + "de27283c9670f049adb643f3911c0933f0d11c9deea5de145236fddf": { + "e4cafd0a94d86b488e3172ed2658d74d507f0eddc9cfa9793900": 4398489348209305154 + }, + "f5ee8cbb95a9d1b73b423fb4bcc608ce489e0fcf08d63018f82870be": { + "2389a7edad9a": 2, + "d0dbe2cb651ea4d13124632fbcb8a274a88ac81b11bcb25192c6e3dee423c3": 2 + }, + "lovelace": 3174827074784246861 + } + }, + "4d011c0115e1a4a2d32d758b1bf1500ff0e919dd2996c2c032956a7625eaaaaa#42": { + "address": "addr_test1zr9wny6sffxlr0s2fa0c96g656pael48ktd4vj3rr700vyl6k2ge4nyqc39xaa0ldxl7tletv4um5k4nq420uags7w2qp67fzu", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581ccde58f4ecab1ad304a62d6a4641ada7501ee9e70d14827a4389437d6", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2db8410d969b6ad6b6969703c77ebf6c44061aa51c5d6ceba46557e2": { + "34": 2, + "a3bc964082412838c1": 2 + }, + "lovelace": 1 + } + }, + "5a23018c6b460cefbd807107d3de219da82c49bb233cd6c85b637ac1e2f91194#15": { + "address": "addr_test12z43qcsduz5q3z5l5hwu7vsckgv0k0pz85my7h288354rca7zkq6qeyp4fsqf9edyl", + "datum": null, + "inlineDatum": { + "bytes": "c0e21c" + }, + "inlineDatumhash": "4efbf8cfb55361a155c2ea3ac76c55584023073d642a5ac8e5b4922028948cdb", + "referenceScript": { + "script": { + "cborHex": "484701000022220011", + "description": "", + "type": "PlutusScriptV2" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV2" + }, + "value": { + "bca64c2e7e36e7df86cb7d4d1816974486f942c6a71dcccb582e4b10": { + "2f652b1d028a16d3f12f40c0d92cb0684e88d7f50fd6b2ec341e52aedd5b": 2996089815497788553, + "33": 5768142751557081686 + }, + "lovelace": 1 + } + }, + "61ee55c4697babb95b8aa0ecfcca4284e218036d92765441c257b850d0c4224a#7": { + "address": "addr_test1yqxh3h2qhz3pjcdlfq8ma0cspdtc4j6plk94rljznwnecywhnwh82xtkx2426ye4tpvlah034m7nfjt3zy30v6pqxszs6lyr92", + "datum": null, + "inlineDatum": { + "constructor": 0, + "fields": [ + { + "map": [ + { + "k": { + "list": [ + { + "bytes": "e2f247" + }, + { + "int": -1 + } + ] + }, + "v": { + "constructor": 0, + "fields": [ + { + "bytes": "4e" + }, + { + "int": -5 + }, + { + "int": -5 + } + ] + } + }, + { + "k": { + "bytes": "ae" + }, + "v": { + "list": [ + { + "int": -5 + }, + { + "bytes": "84" + }, + { + "bytes": "35cd" + } + ] + } + }, + { + "k": { + "constructor": 3, + "fields": [ + { + "bytes": "" + }, + { + "bytes": "30" + }, + { + "bytes": "e0c285" + }, + { + "bytes": "eedddf" + } + ] + }, + "v": { + "int": -1 + } + }, + { + "k": { + "constructor": 4, + "fields": [ + { + "int": -1 + } + ] + }, + "v": { + "bytes": "04" + } + }, + { + "k": { + "map": [ + { + "k": { + "bytes": "31" + }, + "v": { + "bytes": "f8e55d" + } + }, + { + "k": { + "int": -3 + }, + "v": { + "bytes": "ebf7" + } + } + ] + }, + "v": { + "constructor": 1, + "fields": [ + { + "bytes": "d89da1f8" + }, + { + "bytes": "50ab" + }, + { + "int": -1 + } + ] + } + } + ] + } + ] + }, + "inlineDatumhash": "05f935842cd812fe2156ec7057ae2a52494f2952a2270c2da9829d187dd48b4e", + "referenceScript": { + "script": { + "cborHex": "82051a007bb153", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "980534700d53dd9c7f0807aa3f902fa179f319959f3225b11e4fad44": { + "24c8fe1e0bb39c3a61840f6b0415b9053581": 3101770760548422565, + "4fa26fe75765e9bb68a04fb5a8dc8eab750066c96318": 2 + }, + "lovelace": 2 + } + }, + "6b18398a84292bf2bc6b4bab3e4b1759fb1ec2fc6909c047ae9e7004f182c19b#16": { + "address": "addr_test1xrq2mt9c00qv9n92mszqs374q9frasanlxcwp3cyxkftvkln7v60s0wegms529zy6nntrl2zgafyrkjwhlfem0kagmmq6lmsvq", + "datum": null, + "inlineDatum": { + "constructor": 5, + "fields": [] + }, + "inlineDatumhash": "6a50f67a33f1f5aab556cde0301a5e6871188c5d536b1958fb6d3819841864f3", + "referenceScript": null, + "value": { + "0e358bcf7d8e8f3f8825c65b5c4a3040c50921427cdf524d4b05e81b": { + "34b7e36c270a87c2470aea3ff5a174b2945a3540": 6493660255989961048 + }, + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "4bc85065317f22e2b4a66673a475a52d18": 6554556603755445297 + }, + "lovelace": 6596733839485305477 + } + }, + "6c620b52da007f3bf32d89ad6f46a12b2fce4df654a5b6a561a4d4eca344c702#20": { + "address": "addr1yynfeujfxar4rhterp5h8qjxmchycl8dkr520854cy8gsy2mv6074hsk3ksythqdwxccnqhg4j3c4gem3eklgh6dxy8qak78y5", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "48a995d8a4866e85dd4b72de66b7703655e18a9619cad869cd7d41b5": { + "30": 8741761183223808072, + "74648440b4b563853dbb9b08636ea2c2ce729e7b83f6cb62fd": 4387167456149373032 + }, + "lovelace": 7178439892335561829 + } + }, + "6ea431e7f1ec7cb556ed1774585dc07dcdf11dbd55a21731fe2b0367202be6fc#96": { + "address": "addr1qx4msg6t9grxp43qnl2a4ue9sfdg2ce8ttpr8enw8lxx7rx6jv8mw9hy2nemfmxv8jvtct62kz54uz7ew0uzkgy0cddqz7g7rf", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581c015416b1d21b0752a393915a14382d9f15a60208301e7d3abd8bf81d", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "c21d706775b58678f156a820906e9d0cde688740b3c0e0c2d51ad311": { + "4ec697cb30cddc985021a8821154e6c857e985b5fcafb659": 2 + }, + "f883485f8c291214ab90ef3f677a0cd436bd6312d7099150da8e277c": { + "31": 1 + } + } + }, + "6fc653b05bc5b5bf098bf0f45ab1a32bf35dd52c8e11dbc976bb8ee9dfc41a8e#32": { + "address": "addr_test1qpc26uh338m35xdypq0tyqn0xdf95k9vl7xpv2ustdt9petddj0c6uln2msrhc9q83luatj3yedd8wrxxxerssuzne3qrvhjwt", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "46450100002261", + "description": "", + "type": "PlutusScriptV3" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV3" + }, + "value": { + "105a8f1bb56444cacc86378c95421aceeb326b0fb7743e493eb82fd5": { + "2131148b506a02c2c408c99f3fc51ef2f32388fcdbc6b17d22289293d5578f58": 1230342970933154508, + "35": 269378182256674391 + }, + "502c881d22d4930da00e95ca1d88f23d9c965804ec280d404abffb75": { + "5ff1bd4988156eda37e0755659f26380": 1706798007451224906, + "71e715b950e8c23b0451": 568002550204150328 + }, + "lovelace": 6151665863924491727 + } + }, + "7285b25b40a4d60c5b9eb0e1af91fb388423cbf0b06a9a15fd69b026583ef93f#51": { + "address": "addr12x2ggrz6zqa5uq4vmkc7yxxm6qvp3wpf4k8taprjqcxeglh6gzqej48nfgz2khug", + "datum": null, + "inlineDatum": { + "map": [ + { + "k": { + "map": [ + { + "k": { + "map": [ + { + "k": { + "int": 5 + }, + "v": { + "bytes": "edce" + } + }, + { + "k": { + "bytes": "d37ac0" + }, + "v": { + "bytes": "d88a26" + } + }, + { + "k": { + "int": 0 + }, + "v": { + "bytes": "d56f82" + } + }, + { + "k": { + "int": 0 + }, + "v": { + "bytes": "46" + } + } + ] + }, + "v": { + "list": [ + { + "bytes": "c6ad9c" + }, + { + "int": -5 + }, + { + "int": 1 + }, + { + "int": 4 + } + ] + } + }, + { + "k": { + "list": [ + { + "int": 0 + } + ] + }, + "v": { + "int": 1 + } + } + ] + }, + "v": { + "int": -3 + } + } + ] + }, + "inlineDatumhash": "6cf25e9bd9972c9a188cb541d5ac5280ccf2ee8d4c3ab21ce3b85f3a70892884", + "referenceScript": { + "script": { + "cborHex": "4746010000220011", + "description": "", + "type": "PlutusScriptV1" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV1" + }, + "value": { + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "8a265cb4522ab953b8f8ba6d0107bf8c6b8f": 2 + }, + "lovelace": 4453364046235899550 + } + }, + "7b06d0bb3e3730c7ba502750575198896d979200ab4f98a78bcf6b508b7f9656#61": { + "address": "addr_test1vp9h37nfxqlkuac4zq287cyg20ll8pk0ncgh0lrcv00x0vse5sk06", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8201828201808200581c1fd3e5f70859a66f6e654559c67fda68550bc887c3ee668f5cfbe6cf", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "245d5a7a06fe18358242e81281cd5ba9e6abe4efc54e7b659f25abae": { + "30": 508884781366974142 + } + } + }, + "7e7448e1cfc08774e46ca6d2e6145aa9fdab974e9f7541ee5a5f770370e9fd48#9": { + "address": "EqGAuA8vHnNiF9qw8FyqSYrWA5vM8jCR1TAP2TAAsHWKGrMRnDG6DMi3STMZf8M6fanoZP1Wt6xYUCG1jacNHAx1zvvNMCa9BQXJ2SSYZNMnq22bnQ8EqtM", + "datum": null, + "inlineDatum": { + "map": [ + { + "k": { + "int": 5 + }, + "v": { + "map": [ + { + "k": { + "int": 2 + }, + "v": { + "list": [] + } + } + ] + } + }, + { + "k": { + "list": [ + { + "constructor": 1, + "fields": [] + }, + { + "map": [ + { + "k": { + "bytes": "67877e42" + }, + "v": { + "int": -1 + } + }, + { + "k": { + "int": 5 + }, + "v": { + "bytes": "93945d" + } + }, + { + "k": { + "bytes": "2cea3d" + }, + "v": { + "bytes": "48" + } + }, + { + "k": { + "bytes": "b300" + }, + "v": { + "int": -5 + } + }, + { + "k": { + "bytes": "c7" + }, + "v": { + "bytes": "7b5bd8" + } + } + ] + }, + { + "constructor": 5, + "fields": [ + { + "int": 4 + }, + { + "int": 4 + }, + { + "bytes": "c4a8e75a" + }, + { + "int": 2 + } + ] + }, + { + "list": [ + { + "int": 0 + }, + { + "bytes": "d724b556" + }, + { + "int": 4 + } + ] + }, + { + "constructor": 0, + "fields": [ + { + "int": -1 + }, + { + "int": -1 + }, + { + "int": 1 + }, + { + "bytes": "5adae1" + }, + { + "int": -4 + } + ] + } + ] + }, + "v": { + "bytes": "7b08" + } + }, + { + "k": { + "bytes": "4e" + }, + "v": { + "int": -4 + } + }, + { + "k": { + "map": [ + { + "k": { + "list": [ + { + "int": 5 + }, + { + "int": 3 + }, + { + "int": -1 + } + ] + }, + "v": { + "constructor": 5, + "fields": [ + { + "bytes": "798df8" + }, + { + "int": 0 + }, + { + "bytes": "b3" + }, + { + "int": -5 + }, + { + "bytes": "b1a064" + } + ] + } + }, + { + "k": { + "map": [ + { + "k": { + "int": -4 + }, + "v": { + "bytes": "03d35f" + } + }, + { + "k": { + "int": -1 + }, + "v": { + "int": 0 + } + }, + { + "k": { + "bytes": "854c40" + }, + "v": { + "bytes": "6751f6" + } + } + ] + }, + "v": { + "bytes": "30" + } + } + ] + }, + "v": { + "constructor": 4, + "fields": [ + { + "bytes": "af04a8" + }, + { + "constructor": 4, + "fields": [ + { + "int": 5 + }, + { + "int": -3 + }, + { + "int": 3 + }, + { + "int": 1 + }, + { + "bytes": "01" + } + ] + } + ] + } + } + ] + }, + "inlineDatumhash": "6dfb1964427943df03b6694bcccc1a1b9096a958931f1e6306a39d6972fcdb4c", + "referenceScript": { + "script": { + "cborHex": "82051a001c714f", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "245d5a7a06fe18358242e81281cd5ba9e6abe4efc54e7b659f25abae": { + "0fc9c565e8bf96cbc5ec2b6442f56c9d0d16": 2 + }, + "2e12c5e499e0521b13837391beed1248a2e36117370662ee75918b56": { + "56cae75c9bfd627d158b372dcc77336581ec": 2, + "9290386210d9109f5b4c8aaa0d7c4934e8416272": 2 + }, + "lovelace": 4574054951749068951 + } + }, + "9ddbe91daa8a35149aed348139fa7a4d363cf4402a0d478bde33caa073cfc3de#73": { + "address": "addr_test1wzfzrvxaceajeslc4af0arvzutg9msccmslfq7sapc3zrncx0uzq0", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8201848200581c0667d552f8a62d675243785f8ddda90890452b20915eaf0623a351d3820180820180820280", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "245d5a7a06fe18358242e81281cd5ba9e6abe4efc54e7b659f25abae": { + "04cadf243e1cf0997395068748": 2545208518384304963 + }, + "ebb4a6f996b6406a774a48d190be6015520fba06b682bfe94e2c0f91": { + "346696f7732974642fa5e652d215c2c05d0b28074d7dbe501b4f": 3969536705054418363, + "bc2dff1ac1404b59e9090c": 2 + }, + "lovelace": 956197048135945112 + } + }, + "b350e51021d99cacc76a209c7bb3f60946157305b2af17ee5f93c831684e1355#93": { + "address": "addr1q9ftzw6zjpte30da6v9kn04naffyk2mx5zf7zg0k08dh2s7v6ye9qw5ya973yqyma36xdxhax3essvvspl8z5dhs2nwqcvc9uv", + "datum": null, + "datumhash": "3071eff49ad0b16a548169ae99f517ca002a57e513c34950ef2a32ff67ad8e92", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581c72a57c60d35919cffe26ef20c4f3a3904c9549c0f7cfc24092695ff1", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "4a1c412d8e2b3015a7fb7d382808fb7cb721bf93a56e8bb6661cdebe": { + "30": 6395937430783820700 + }, + "71d1ec3e2a363bf20415cbae92c4d13d4bf8586adf85e99ff618053e": { + "1f936a": 2 + }, + "lovelace": 1 + } + }, + "b895e001c39e5e38980cbf5fc3ad0ade75227551f6c4c07eba16dfb0dd231bf6#99": { + "address": "addr1yyh3leqhcz88pc524pmfa3mr0paenux46npekl4vyjrxwh20lqdf4rqwympp375sf950t03cz9y80avva9jstcu50f8qvday9h", + "datum": null, + "datumhash": "2b41e2be97558beefc3ad9e6f7ceb41c4b7f1babc97e5138de4b97c67033b057", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "82051a006f3a52", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "b0c53e2bf180858da4b64eb5598c5615bba7d723d2b604a83b7f9165": { + "f5ae": 3 + }, + "lovelace": 1 + } + }, + "beac4f1cb52c7341a52126e8f439d07198a9460ff3c230d25de78dad0cb3e8dc#44": { + "address": "EqGAuA8vHnPAtBcFdznBEEdfBVmPTcQHzQerUviwiUmmkBffoSb3nJtFDorcRX79Grn6LAk6MNAkpUEDdVqC6m7jAPdRJdGwZd2Ccy6YLBN7WwxcZqU8adH", + "datum": null, + "inlineDatum": { + "map": [ + { + "k": { + "map": [ + { + "k": { + "constructor": 1, + "fields": [] + }, + "v": { + "constructor": 3, + "fields": [ + { + "bytes": "799b" + }, + { + "bytes": "0a92822e" + } + ] + } + } + ] + }, + "v": { + "list": [ + { + "int": -1 + }, + { + "list": [ + { + "bytes": "" + }, + { + "bytes": "9b572b80" + }, + { + "bytes": "0497" + }, + { + "int": 1 + } + ] + }, + { + "constructor": 1, + "fields": [ + { + "bytes": "" + } + ] + } + ] + } + }, + { + "k": { + "int": 0 + }, + "v": { + "map": [ + { + "k": { + "map": [ + { + "k": { + "bytes": "8a06c423" + }, + "v": { + "int": -2 + } + }, + { + "k": { + "bytes": "137e8aff" + }, + "v": { + "int": -2 + } + }, + { + "k": { + "bytes": "" + }, + "v": { + "bytes": "82de9598" + } + }, + { + "k": { + "bytes": "31" + }, + "v": { + "bytes": "93" + } + } + ] + }, + "v": { + "bytes": "58ac8a" + } + }, + { + "k": { + "map": [ + { + "k": { + "bytes": "3281" + }, + "v": { + "bytes": "" + } + }, + { + "k": { + "bytes": "29dc1bfa" + }, + "v": { + "int": -2 + } + }, + { + "k": { + "int": 2 + }, + "v": { + "bytes": "" + } + }, + { + "k": { + "bytes": "04" + }, + "v": { + "bytes": "4158" + } + }, + { + "k": { + "bytes": "0b0c86" + }, + "v": { + "int": -2 + } + } + ] + }, + "v": { + "list": [ + { + "bytes": "" + }, + { + "int": 3 + }, + { + "int": -1 + }, + { + "int": 4 + }, + { + "bytes": "" + } + ] + } + }, + { + "k": { + "bytes": "58" + }, + "v": { + "map": [ + { + "k": { + "int": 1 + }, + "v": { + "int": 5 + } + } + ] + } + }, + { + "k": { + "constructor": 4, + "fields": [ + { + "int": -5 + } + ] + }, + "v": { + "constructor": 1, + "fields": [ + { + "bytes": "dbc9" + }, + { + "int": -2 + }, + { + "bytes": "bc80bf9b" + }, + { + "int": 4 + } + ] + } + } + ] + } + }, + { + "k": { + "map": [ + { + "k": { + "int": 5 + }, + "v": { + "int": 3 + } + }, + { + "k": { + "constructor": 4, + "fields": [ + { + "int": 5 + }, + { + "int": 1 + }, + { + "bytes": "33a3fe34" + }, + { + "int": -2 + } + ] + }, + "v": { + "bytes": "71fb9eb6" + } + }, + { + "k": { + "constructor": 4, + "fields": [ + { + "int": 5 + }, + { + "bytes": "" + }, + { + "int": -4 + }, + { + "bytes": "" + } + ] + }, + "v": { + "int": 1 + } + }, + { + "k": { + "int": -2 + }, + "v": { + "int": -3 + } + }, + { + "k": { + "map": [] + }, + "v": { + "map": [ + { + "k": { + "bytes": "aa879d2b" + }, + "v": { + "int": 1 + } + }, + { + "k": { + "bytes": "710e" + }, + "v": { + "bytes": "a289" + } + }, + { + "k": { + "bytes": "" + }, + "v": { + "int": 1 + } + } + ] + } + } + ] + }, + "v": { + "int": -2 + } + }, + { + "k": { + "bytes": "afea" + }, + "v": { + "constructor": 2, + "fields": [ + { + "constructor": 2, + "fields": [ + { + "int": 4 + }, + { + "int": -3 + }, + { + "int": 4 + }, + { + "int": -3 + } + ] + }, + { + "list": [ + { + "int": -5 + } + ] + }, + { + "bytes": "427fd8" + }, + { + "constructor": 4, + "fields": [] + }, + { + "int": -5 + } + ] + } + } + ] + }, + "inlineDatumhash": "540c180eff1fed3ad28a0d08927f78939b9a32b8791e1052f10df2aa68d353c1", + "referenceScript": { + "script": { + "cborHex": "83030082820280820180", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "c62c67271fc312ed38e5c8a3f2fa24c35f6adb09bef3ea1e4655b3d9": { + "31": 2, + "39": 1 + } + } + }, + "cd2df531e30c2e745d83f4729e329d66a1010055a3b00b526ba65a9a331c9780#1": { + "address": "addr_test1zrgmp5kxmtfrr76h2gufs7zdd08lj6fmr7ps2ac76ph6etpudsh303z3c4qv2029lejw82facrag26skyn7tselvjf8spq3fen", + "datum": null, + "inlineDatum": { + "map": [ + { + "k": { + "map": [ + { + "k": { + "int": -2 + }, + "v": { + "map": [] + } + }, + { + "k": { + "map": [ + { + "k": { + "int": -3 + }, + "v": { + "int": -5 + } + }, + { + "k": { + "bytes": "467ed098" + }, + "v": { + "bytes": "b44f5e" + } + }, + { + "k": { + "int": -2 + }, + "v": { + "int": 2 + } + }, + { + "k": { + "bytes": "1be566a9" + }, + "v": { + "int": 0 + } + } + ] + }, + "v": { + "constructor": 5, + "fields": [ + { + "int": -2 + }, + { + "bytes": "8afd45" + } + ] + } + } + ] + }, + "v": { + "int": -1 + } + } + ] + }, + "inlineDatumhash": "03f22bca149a1942dca345b35ce2ba968885287ef132d123a66baf38e8e22de6", + "referenceScript": { + "script": { + "cborHex": "46450100002601", + "description": "", + "type": "PlutusScriptV3" + }, + "scriptLanguage": "PlutusScriptLanguage PlutusScriptV3" + }, + "value": { + "2e12c5e499e0521b13837391beed1248a2e36117370662ee75918b56": { + "33": 1 + }, + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "31": 2 + }, + "lovelace": 7626713037391128864 + } + }, + "cfa6a4f837f6a2ef18ac6f07b4ab217f442f1b5a32d5c75b1fb0c6166f771d7f#3": { + "address": "addr_test1yq2qp55alvvuf4gmu9qrhqx86hwjd8fqdhh0mxvc62x5r2xnru49p8kvnmfr8rjmezqp3zrwtss2aff5ehvz5n8qpgqsfxlh9u", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8201848201828200581c7f3e68d96c59ca8f482d11c6a52a745be0db1508936f25ec70ca600a8201838200581cbd81bdcb1c0ebe3fbe122ee7efd2c21d3b99c109399b69f42b0d16008200581c0b1084b054b1e435be76138e7e96d6fce1c757d7984af8e5c1598d158200581c99605fcdd2f53a074f941cb1d75e4a81519b8fcf8b241d3f60776b508202828200581c4601477d0801a080c7692ae67cb6f875a48fbc243dcdbfe721ac6d8a830302828200581c437ec5f2f4f105226496e757920fca6b5e84eabf4fed393b47ea64498200581c797462e6719bc031cde43b89da4d32f674484633584be290314f354e8200581cbbef53c767e8385310cb5ab32521ace4caef3f102615af5d1b7060678201818200581c63b4b6d654362b0b50cac08852b1217298587f613bb204aa88ec1d1c", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "af726a9b98a6c1bd7beb5d3aa23e543b5d4ac742d1d353bffd073df3": { + "ae4ff7f02668c70749270d5c": 5928180546357677328 + }, + "lovelace": 2 + } + }, + "d1affe7d21dea36ab968f600e660388b31df35b0e71d760d5275379db63d370c#77": { + "address": "EqGAuA8vHnPG4goBVUphuWhJX8wMQA6kaVSuHs7QU8EYgFCzjcfF9JjVFQbzUf8rMwDkDzG5iSWGvGEcoWJLRqQgJSad6ge6q2ixbyyg9q2NEy5nUo3hwkj", + "datum": null, + "inlineDatum": { + "map": [] + }, + "inlineDatumhash": "d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c", + "referenceScript": { + "script": { + "cborHex": "83030182830304848200581cfa6a1f88902dd8a0c3b6d702bfc3a14631ba9b26fd5680bd51d957d88202828200581c80886a3cad660e65a803b89dcf9b2a793004bfbda40fc292a51e85888200581c7d6a44cc74e840f1f51a3f2c70e22587d1c4704d8ca31ea9a1ef4c7b8200581c33641963359cf4d7b77fa8659962494b5f5f9bf868cc26e7bd6e425c8201818200581c228e77b00a0580bf6d5a60b74d3096f05cbdb969fc1e6386604f2b8b82028383030080830302838200581cc6ba2a42a24f2734397d84a4ebef9affc73d366fbea599a4694226578200581ce1d7ad8f1544577316adc6841503866043cdd9e4dc05d0edfd2e51768200581c6cc6794c749505fb348a1b854f4ace57a7f86c03ae76b71d7e4b83eb830302848200581cf8e2863a6754dec5ab236101b2d393df8a0c82010ce5a4552989a1c38200581c1a01e4184bd9dae3a1638a9f5d23e7cdf66bff6193ef06927a97f7e28200581c1007624ec1c8f6ddf88c22b1aa75c22331e3f5f5377a57911d28780b8200581c58907dd6e7b19fac10744f165eee61179350f46bdaa7b42df9d261c2", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "2d725128406dc832eb74c4709aca0512499b3c7b17e00d7cb2e6d1b1": { + "337f3875a61763a37597ad8b6cf34b741da3e71cdc079962e1d6": 1, + "ff": 2 + }, + "4a1c412d8e2b3015a7fb7d382808fb7cb721bf93a56e8bb6661cdebe": { + "77ae47d874fec71c27db38c846aa934146": 2933767306838819604, + "e191cdf6c11d9b8423ba2b993c5ed2e4": 6791248466154854995 + } + } + }, + "dbcc146a76081c9c362b70d001666f5e082a8e1d18aff4b3ed14fc3b77c93380#84": { + "address": "addr1qxpvqe8gwv00ygsmunj644panlpkm5zlx7tcuutst7cymd6pu99u0nqyvakkzer5t22chtupjlr0d5krekpm6ufsr40slvzxcy", + "datum": null, + "inlineDatum": { + "int": 1 + }, + "inlineDatumhash": "ee155ace9c40292074cb6aff8c9ccdd273c81648ff1149ef36bcea6ebb8a3e25", + "referenceScript": { + "script": { + "cborHex": "8202838202818201848200581cb99fa661da233b9e8648ff44c7e84a985a58fa79becad393dc2bf4c98200581cf07524f081be5136146e8d9d1c799cf8dbb088f6221c749cee6fbcac8200581c43c1ea13a69c74fb662c4074ee476fd4e607f704ffe13b37970f84598200581c2dea04925580d1589d6f5b6cc1b2ed17028b176bd1d4dc701d06e64d8202848201848200581cc69c718d993b4dcd0af30e3609b4757707b4a461f6f26d61ca2a0dbb8200581c2d5205604f6336b421cb8cdb887497cbcbc94c1a18f79d52ed6fffa88200581cc929bff5946796cf24044e7e20bf69ffd2f04eca0f03867a224b16268200581cef98cd92e9af71abc9bd54187358bf15c444f7c3fe8ebf487c32c4e78201848200581cd4f62e935def71d8a294d7b9f7edbb25fefea7fd8dc3dc0c274a67678200581cbeedc7efbee9e22a6da9f413805a2988d24d22dc8d4f0bc353c88e538200581cf59dab73fb6abc69e037f49a273df3d814c094640fa7875ce98b8c298200581c2ac2f4d3c896aad5b53a4992de2b9d74207854c075d59cdc69ef45c68200581c486220d027d2da0130a7ae00fa02e8a35457a73af8220175e2fdafb88201818200581cbca17e012ea89c54be65f3caa9081417ab1760c77234a4ad3822eb768202838201848200581ccb728530ddfd424d711adb686c3fae445880e5769622c184569f432c8200581c06971029b0bd0ccbf1097d416c4b98c63f2e841ae3016dc222700aaa8200581cbda583b57e888dba48920270258c407774377df52b0b2a95ae7f1cbf8200581c28638fd920f3135641120d775eaeac6603fb0fa9924043e09bdeceae8201818200581cadf34425b973bab09cab3afd3c2e1360b6eeb935e979e861095d83298201848200581cbaa373bfcf7eaf8c2c92a8d2cecbf1339b3a7d523b60677352e56e648200581cb99eddcd6184bf73d6dca193244db82bc2a903dd9a7c0daca511dd298200581ceab06a69a4c4f6b95ed5c53d68fcbd71c652813cd64f617506de235f8200581c074ec493c1480215ff38dbb1950b6c4cc5a9114cc519c397ef2286e7", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "4a1c412d8e2b3015a7fb7d382808fb7cb721bf93a56e8bb6661cdebe": { + "468476f4625957927815acd1c3dcc26958b62530b9fb45aa5ea360": 2 + }, + "97342238fe53fb43c908f3be33f41458f75dc289b663dec4a30e785f": { + "762634278db13df954454e6e156285109337c8779da232c727": 2 + }, + "lovelace": 9161977967351301112 + } + }, + "e982776a5510cb4013aae02238c2515206b1bcd6c812f14451a9fe401451d102#99": { + "address": "addr_test1vpcux4xheltqumdcwusjn8ysfhr0cg5hkwg7lz4pd5cfjxcnnn4m6", + "datum": null, + "inlineDatum": { + "int": -5 + }, + "inlineDatumhash": "f63498b4ae65be466e4a71878971b9c524458996450b0ff8262cddf3f0d99229", + "referenceScript": { + "script": { + "cborHex": "820182820284830302828200581caeb9bdf9ccb6acf73e441615d950bb7829929d6212b86ff62161c5998200581c23edb6d15b21e9f2c48a6ac8a70e10df1ec69685084bc1c500d51abb8202828200581c33cf681a357d60099f6d717c9e2a9584187c812c3d2acf5be8e6c8178200581cad340237e99fa780a9a25e14541d2a681e27b5f15d41aafcf5d5358c8202808201818200581c16ed329b2c16f37b7dc30ae4e32e9ec100da8189d259578df08e7324830301828202838200581c7dccae6b5bbf7a49c4f7e5122fa3a1615a21d72eed18542889413fe68200581c8fcbfcaf0490106838e2feb209449b4e78002326f1a05d138623768c8200581cba0b4125be27519add4bdcefef1a68c2a0f68a703fcf86f0216287f18200581c0e614713cd7e13c5acea6cd0238f098d96052f1a8d65bef3421ee3c5", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "922103615fbe4be6d5ec8fbae38d68a835263cb6b07882624e11867d": { + "32": 1 + }, + "966607759974b3d468600109154c848601d18f83a72ad213cc7c4dbb": { + "28599c8d75f82b7525d37530ac051c91caa181c2f5e7d21da3ba4979bb7716a3": 1 + }, + "lovelace": 6382854866060128738 + } + }, + "ebda66a8c0d96bfec40a9d59f3a0c1f87ecf4e0eb52619a0b05d7fea1a628985#79": { + "address": "addr1v8839jt96pckmpzdq93f60eh3q0nl2yhdjsy0kphnfdas7q4nxzen", + "datum": null, + "datumhash": "0eca32c02cd195f3c7d59437ed950ca494d4ff7d2654257b7a9833fb24cadffd", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "82051a0011edb7", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "51c153a20bc4345c7414b468c0de8695a3fc93f0a090dfc8db6e654d": { + "115d8b861a1cd7645853043c2ef1ddd4691395f535f7679c24b9f018": 4971642980435493110 + }, + "lovelace": 2 + } + }, + "f381fd07e046e46213fe822a47e25022888b482c4ab6bbeb420e4b7205002f38#68": { + "address": "addr_test1qpzwmg68mk4tjzc8eakyq3s8t47z8guupav68vzwca44jum0ls6aptzqc85ap3syfs56g52ke2mu2crlkxmqtuw5dmus37fd5k", + "datum": null, + "datumhash": "7d717009d82724d30b7abd53aed59f334b1b71cc2d5e62a236ad2eab6588f454", + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "8200581cf679fed3e4b180dc91071c518016b784d34f1a6286e64c117a613f17", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "4d50a11e297e7783383bf06dd6e4e481230323bd96cd8b8d9ee3888d": { + "92d416": 1 + }, + "8f461954fe2f18fee1dca233f358907e643ff839ed1f995e4bf325e3": { + "35": 1 + } + } + }, + "f56af7a6ba25e3103513da89ad413ee599cfccd234a33d0d75c6465cd3dba06a#49": { + "address": "addr_test1qzvu2spl3f7ffhha9hup07uur6z6ch3v0t3rxcnhfqn9pskpmk7mhthuz2cp9gk6dc23jgkwnmlld3kgjfzx8tkuv6kspepk0v", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "83030080", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "b0caa03c544af25912e430cfff75e6e32a553029f6137e000974b91a": { + "1b16508aa325ae1c77": 2049486197129678029 + }, + "lovelace": 3793281291477621852 + } + }, + "f768d9ac6ff5cf698ebbc7cf0be62193ee98f06c42d50757e6e04ec922adb1a7#36": { + "address": "addr_test1xp6ky4648lu9t8qglnfxzlxpzh7mpczllau8cq6fnwud5msawevgvr2vk3nqa70h95csv2nwuafwqltkf9m8q6rf6zyqwme535", + "datum": null, + "datumhash": null, + "inlineDatum": null, + "referenceScript": { + "script": { + "cborHex": "82051a002724a6", + "description": "", + "type": "SimpleScript" + }, + "scriptLanguage": "SimpleScriptLanguage" + }, + "value": { + "05a0f7d373fce7bbcd8372d16f828724657c0128dfbc9cec3842cd8e": { + "31": 2228216752323298927 + }, + "467f58932b54910584a0e8ea25a225e06a14530b2e96e938c53a3f22": { + "e8913cb10c63575e7832772259d78d126d7477a4faff": 583412886549410753 + }, + "lovelace": 1 + } + }, + "fd619416391bf215784e8e80e4a999d3abb5a6cacaf8bd2883cce9214a283c7f#33": { + "address": "addr_test1xr6elaw248wr9qvwjncewp24ctzqlhdn3tr5q3qe7dmg4n85e0eucyhkl67uvyq6jrvcxjn8767hs863sw9tte3enlesqeslfm", + "datum": null, + "datumhash": "d568d17d0a7edb679dd527f8977b92c2c6c525a1b37785aa9a6da9300dac5397", + "inlineDatum": null, + "referenceScript": null, + "value": { + "222ecf24c8c8e9e8c1059f9e4ffd02c87751c7d5ccb2b9198c269f22": { + "34": 1, + "ceeedbb2d82e1c1fa114d806": 6108576864066527817 + }, + "bb5572cd9fab7d26b6b542c5ce6ee0fcd1320f0afe0d83dee61a523f": { + "31": 1130374305023269689, + "d138c8": 1 + }, + "lovelace": 2 + } + } + }, + "tag": "CommitRecovered" + } + ], + "seed": -270013804 +} \ No newline at end of file diff --git a/hydra-node/json-schemas/api.yaml b/hydra-node/json-schemas/api.yaml index 6b47644733b..4dcb575f857 100644 --- a/hydra-node/json-schemas/api.yaml +++ b/hydra-node/json-schemas/api.yaml @@ -103,6 +103,7 @@ channels: - $ref: "api.yaml#/components/messages/NewTx" - $ref: "api.yaml#/components/messages/GetUTxO" - $ref: "api.yaml#/components/messages/Commit" + - $ref: "api.yaml#/components/messages/Recover" - $ref: "api.yaml#/components/messages/Decommit" - $ref: "api.yaml#/components/messages/Close" - $ref: "api.yaml#/components/messages/Contest" @@ -304,6 +305,22 @@ components: enum: ["Commit"] utxo: $ref: "api.yaml#/components/schemas/UTxO" + Recover: + title: Recover + description: | + Request a recover of deposited UTxO by providing a recover transaction for posting. + payload: + type: object + required: + - tag + - recoverTx + properties: + tag: + type: string + enum: ["Recover"] + recoverTx: + type: object + $ref: "api.yaml#/components/schemas/Transaction" Decommit: title: Decommit description: | @@ -579,6 +596,13 @@ components: payload: $ref: "api.yaml#/components/schemas/CommitFinalized" + CommitRecovered: + title: CommitRecovered + description: | + Recover transaction is observed and deposited funds are recovered to L1. + payload: + $ref: "api.yaml#/components/schemas/CommitRecovered" + # END OF SERVER OUTPUT MESSAGES @@ -635,8 +659,10 @@ components: - $ref: "api.yaml#/components/schemas/DecommitRequested" - $ref: "api.yaml#/components/schemas/DecommitApproved" - $ref: "api.yaml#/components/schemas/DecommitFinalized" + - $ref: "api.yaml#/components/schemas/CommitRecorded" - $ref: "api.yaml#/components/schemas/CommitApproved" - $ref: "api.yaml#/components/schemas/CommitFinalized" + - $ref: "api.yaml#/components/schemas/CommitRecovered" Greetings: type: object @@ -1056,6 +1082,7 @@ components: - $ref: "api.yaml#/components/messages/GetUTxO/payload" - $ref: "api.yaml#/components/messages/Commit/payload" - $ref: "api.yaml#/components/messages/Decommit/payload" + - $ref: "api.yaml#/components/messages/Recover/payload" - $ref: "api.yaml#/components/messages/Close/payload" - $ref: "api.yaml#/components/messages/Contest/payload" - $ref: "api.yaml#/components/messages/Fanout/payload" @@ -1254,7 +1281,30 @@ components: $ref: "api.yaml#/components/schemas/SequenceNumber" timestamp: $ref: "api.yaml#/components/schemas/UTCTime" - + CommitRecorded: + title: CommitRecorded + description: | + Commit request is recorded to the local state. + additionalProperties: false + type: object + required: + - tag + - headId + - utxoToCommit + - seq + - timestamp + properties: + tag: + type: string + enum: ["CommitRecorded"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + utxoToCommit: + $ref: "api.yaml#/components/schemas/UTxO" + seq: + $ref: "api.yaml#/components/schemas/SequenceNumber" + timestamp: + $ref: "api.yaml#/components/schemas/UTCTime" CommitFinalized: title: CommitFinalized description: | @@ -1281,6 +1331,34 @@ components: $ref: "api.yaml#/components/schemas/SequenceNumber" timestamp: $ref: "api.yaml#/components/schemas/UTCTime" + + CommitRecovered: + title: CommitRecovered + description: | + Deposit request is recovered. + additionalProperties: false + type: object + required: + - tag + - headId + - recoveredUTxO + - seq + - timestamp + properties: + tag: + type: string + enum: ["CommitRecovered"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + recoveredUTxO: + oneof: + - type: "null" + - $ref: "api.yaml#/components/schemas/UTxO" + seq: + $ref: "api.yaml#/components/schemas/SequenceNumber" + timestamp: + $ref: "api.yaml#/components/schemas/UTCTime" + # END OF SERVER OUTPUT SCHEMAS Address: @@ -1630,6 +1708,23 @@ components: $ref: "api.yaml#/components/schemas/HeadId" headParameters: $ref: "api.yaml#/components/schemas/HeadParameters" + - title: RecoverTx + type: object + additionalProperties: false + required: + - tag + - headId + - recoverTx + description: | + Post a transaction to recover deposited UTxO back to L1. + properties: + tag: + type: string + enum: ["RecoverTx"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + recoverTx: + $ref: "api.yaml#/components/schemas/Transaction" - title: IncrementTx type: object additionalProperties: false @@ -2350,16 +2445,10 @@ components: IncrementalCommitRecoverRequest: type: object required: - - recoverHeadid - - recoverUTxO - recoverStart properties: - recoverHeadId: - $ref: "api.yaml#/components/schemas/HeadId" - recoverUTxO: - $ref: "api.yaml#/components/schemas/UTxO" recoverStart: - $ref: "api.yaml#/components/schemas/SlotNo" + type: integer # END OF SERVER OUTPUT SCHEMAS diff --git a/hydra-node/json-schemas/logs.yaml b/hydra-node/json-schemas/logs.yaml index cfcc25e8ca5..b62d5db3d7c 100644 --- a/hydra-node/json-schemas/logs.yaml +++ b/hydra-node/json-schemas/logs.yaml @@ -1163,6 +1163,16 @@ definitions: $ref: "api.yaml#/components/schemas/Transaction" error: $ref: "logs.yaml#/definitions/ValidationError" + - title: "RecoverNotMatchingDeposit" + description: >- + Received a Recover transaction which tries to recover some UTxO that was not deposited beforehand. + additionalProperties: false + required: + - tag + properties: + tag: + type: string + enum: ["RecoverNotMatchingDeposit"] HeadState: oneOf: @@ -1575,6 +1585,7 @@ definitions: - allTxs - confirmedSnapshot - seenSnapshot + - depositScriptUTxO - commitUTxO - decommitTx - version @@ -1595,6 +1606,11 @@ definitions: $ref: "api.yaml#/components/schemas/ConfirmedSnapshot" seenSnapshot: $ref: "logs.yaml#/definitions/SeenSnapshot" + depositScriptUTxO: + oneOf: + - type: "null" + - type: object + $ref: "api.yaml#/components/schemas/UTxO" commitUTxO: oneOf: - type: "null" @@ -1694,6 +1710,7 @@ definitions: - $ref: "api.yaml#/components/messages/Abort/payload" - $ref: "api.yaml#/components/messages/NewTx/payload" - $ref: "api.yaml#/components/messages/Commit/payload" + - $ref: "api.yaml#/components/messages/Recover/payload" - $ref: "api.yaml#/components/messages/Decommit/payload" - $ref: "api.yaml#/components/messages/GetUTxO/payload" - $ref: "api.yaml#/components/messages/Close/payload" @@ -2001,6 +2018,65 @@ definitions: type: array items: $ref: "api.yaml#/components/schemas/OnChainId" + - title: OnDepositTx + type: object + additionalProperties: false + required: + - tag + - headId + - utxo + - deposited + description: >- + The deposit transaction locking some UTxO to a deposit script. + properties: + tag: + type: string + enum: ["OnDepositTx"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + utxo: + $ref: "api.yaml#/components/schemas/UTxO" + deposited: + $ref: "api.yaml#/components/schemas/UTxO" + - title: OnRecoverTx + type: object + additionalProperties: false + required: + - tag + - headId + - recoveredUTxO + description: >- + The recover transaction unlocking the deposited UTxO. + properties: + tag: + type: string + enum: ["OnRecoverTx"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + recoveredUTxO: + $ref: "api.yaml#/components/schemas/UTxO" + - title: OnIncrementTx + type: object + additionalProperties: false + required: + - tag + - headId + - committedUTxO + - depositScriptUTxO + description: >- + The increment transaction adding some UTxO from L1 into the Head. + properties: + tag: + type: string + enum: ["OnIncrementTx"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + newVersion: + $ref: "api.yaml#/components/schemas/SnapshotVersion" + committedUTxO: + $ref: "api.yaml#/components/schemas/UTxO" + depositScriptUTxO: + $ref: "api.yaml#/components/schemas/UTxO" - title: OnCommitTx type: object additionalProperties: false @@ -2041,6 +2117,7 @@ definitions: - tag - headId - utxo + - deposited properties: tag: type: string @@ -2051,6 +2128,27 @@ definitions: $ref: "api.yaml#/components/schemas/UTxO" deposited: $ref: "api.yaml#/components/schemas/UTxO" + - title: OnIncrementTx + type: object + additionalProperties: false + required: + - tag + - headId + - newVersion + - committedUTxO + - depositScriptUTxO + properties: + tag: + type: string + enum: ["OnIncrementTx"] + headId: + $ref: "api.yaml#/components/schemas/HeadId" + newVersion: + $ref: "api.yaml#/components/schemas/SnapshotVersion" + committedUTxO: + $ref: "api.yaml#/components/schemas/UTxO" + depositScriptUTxO: + $ref: "api.yaml#/components/schemas/UTxO" - title: OnDecrementTx type: object additionalProperties: false diff --git a/hydra-node/src/Hydra/API/HTTPServer.hs b/hydra-node/src/Hydra/API/HTTPServer.hs index fee28a03ceb..2a18601d9b5 100644 --- a/hydra-node/src/Hydra/API/HTTPServer.hs +++ b/hydra-node/src/Hydra/API/HTTPServer.hs @@ -261,6 +261,7 @@ handleDraftCommitUtxo directChain getCommitInfo body = do case e of CommittedTooMuchADAForMainnet _ _ -> badRequest e UnsupportedLegacyOutput _ -> badRequest e + CannotFindOwnInitial _ -> badRequest e _ -> responseLBS status500 [] (Aeson.encode $ toJSON e) Right commitTx -> okJSON $ DraftCommitTxResponse commitTx diff --git a/hydra-node/src/Hydra/API/ServerOutput.hs b/hydra-node/src/Hydra/API/ServerOutput.hs index 99e13b4ccd3..33800871e46 100644 --- a/hydra-node/src/Hydra/API/ServerOutput.hs +++ b/hydra-node/src/Hydra/API/ServerOutput.hs @@ -141,7 +141,7 @@ data ServerOutput tx | CommitApproved {headId :: HeadId, utxoToCommit :: UTxOType tx} | DecommitFinalized {headId :: HeadId, decommitTxId :: TxIdType tx} | CommitFinalized {headId :: HeadId, utxo :: UTxOType tx} - | RecoverFinalized {headId :: HeadId, recoveredUTxO :: UTxOType tx} + | CommitRecovered {headId :: HeadId, recoveredUTxO :: UTxOType tx} deriving stock (Generic) deriving stock instance IsChainState tx => Eq (ServerOutput tx) @@ -199,7 +199,7 @@ instance (ArbitraryIsTx tx, IsChainState tx) => Arbitrary (ServerOutput tx) wher CommitRecorded headId u -> CommitRecorded headId <$> shrink u CommitApproved headId u -> CommitApproved headId <$> shrink u DecommitApproved headId txid u -> DecommitApproved headId txid <$> shrink u - RecoverFinalized headId tx -> RecoverFinalized headId <$> shrink tx + CommitRecovered headId u -> CommitRecovered headId <$> shrink u DecommitFinalized{} -> [] CommitFinalized{} -> [] @@ -257,7 +257,7 @@ prepareServerOutput ServerOutputConfig{utxoInSnapshot} response = DecommitFinalized{} -> encodedResponse CommitFinalized{} -> encodedResponse DecommitInvalid{} -> encodedResponse - RecoverFinalized{} -> encodedResponse + CommitRecovered{} -> encodedResponse where handleUtxoInclusion f bs = case utxoInSnapshot of diff --git a/hydra-node/src/Hydra/Chain/Direct/Handlers.hs b/hydra-node/src/Hydra/Chain/Direct/Handlers.hs index 6e2c76ccee9..c304ad09d4b 100644 --- a/hydra-node/src/Hydra/Chain/Direct/Handlers.hs +++ b/hydra-node/src/Hydra/Chain/Direct/Handlers.hs @@ -203,9 +203,9 @@ mkChain tracer queryTimeHandle wallet ctx LocalChainState{getLatest} submitTx = case depositDatum of Nothing -> throwIO (FailedToConstructRecoverTx @Tx) Just dat -> do - let Deposit.DepositDatum (headCurrencySymbol, deadline, commitsToRecover) = dat + let Deposit.DepositDatum (_, _, commitsToRecover) = dat pure $ - Right (Hydra.Tx.Recover.recoverTx networkId' headCurrencySymbol txIn commitsToRecover deadline lowerValidity) + Right (Hydra.Tx.Recover.recoverTx networkId' txIn commitsToRecover lowerValidity) _ -> throwIO (FailedToConstructRecoverTx @Tx) , -- Submit a cardano transaction to the cardano-node using the -- LocalTxSubmission protocol. diff --git a/hydra-node/src/Hydra/Chain/Direct/State.hs b/hydra-node/src/Hydra/Chain/Direct/State.hs index 6543a490b8c..42b3857565d 100644 --- a/hydra-node/src/Hydra/Chain/Direct/State.hs +++ b/hydra-node/src/Hydra/Chain/Direct/State.hs @@ -11,6 +11,7 @@ import Hydra.Prelude hiding (init) import Cardano.Api.UTxO qualified as UTxO import Data.Fixed (Milli) +import Data.List qualified as List import Data.Map qualified as Map import Data.Maybe (fromJust) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) @@ -47,6 +48,7 @@ import Hydra.Cardano.Api ( txOutScriptData, txOutValue, txSpendingUTxO, + utxoFromTx, valueFromList, valueToList, pattern ByronAddressInEra, @@ -112,6 +114,7 @@ import Hydra.Tx.Fanout (fanoutTx) import Hydra.Tx.Increment (incrementTx) import Hydra.Tx.Init (initTx) import Hydra.Tx.OnChainId (OnChainId) +import Hydra.Tx.Recover (recoverTx) import Hydra.Tx.Snapshot (genConfirmedSnapshot) import Hydra.Tx.Utils (splitUTxO, verificationKeyToOnChainId) import Test.Hydra.Tx.Gen ( @@ -904,6 +907,7 @@ genChainStateWithTx = , genAbortWithState , genCommitWithState , genDepositWithState + , genRecoverWithState , genIncrementWithState , genDecrementWithState , genCollectWithState @@ -944,6 +948,11 @@ genChainStateWithTx = (ctx, _, st, tx) <- genCollectComTx pure (ctx, Initial st, tx, Collect) + genRecoverWithState :: Gen (ChainContext, ChainState, Tx, ChainTransition) + genRecoverWithState = do + (ctx, st, _utxo, tx) <- genRecoverTx maxGenParties + pure (ctx, Open st, tx, Recover) + genDepositWithState :: Gen (ChainContext, ChainState, Tx, ChainTransition) genDepositWithState = do (ctx, st, _utxo, tx) <- genDepositTx maxGenParties @@ -1137,11 +1146,23 @@ genCollectComTx = do let spendableUTxO = getKnownUTxO stInitialized pure (cctx, committedUTxO, stInitialized, unsafeCollect cctx headId (ctxHeadParameters ctx) utxoToCollect spendableUTxO) +genRecoverTx :: Int -> Gen (ChainContext, OpenState, UTxO, Tx) +genRecoverTx numParties = do + ctx <- genHydraContextFor numParties + cctx <- pickChainContext ctx + utxo <- genUTxOAdaOnlyOfSize 3 `suchThat` (not . null) + (_, st@OpenState{headId}) <- genStOpen ctx + deadline <- posixSecondsToUTCTime . realToFrac <$> (arbitrary :: Gen Milli) + let depositTransaction = depositTx (ctxNetworkId ctx) headId utxo deadline + let (depositTxIn, _) = List.head $ UTxO.pairs (utxoFromTx depositTransaction) + let tx = recoverTx (ctxNetworkId ctx) depositTxIn [] 0 + pure (cctx, st, utxo, tx) + genDepositTx :: Int -> Gen (ChainContext, OpenState, UTxO, Tx) genDepositTx numParties = do ctx <- genHydraContextFor numParties cctx <- pickChainContext ctx - utxo <- genUTxOAdaOnlyOfSize 1 + utxo <- genUTxOAdaOnlyOfSize 3 `suchThat` (not . null) (_, st@OpenState{headId}) <- genStOpen ctx deadline <- posixSecondsToUTCTime . realToFrac <$> (arbitrary :: Gen Milli) let tx = depositTx (ctxNetworkId ctx) headId utxo deadline @@ -1151,11 +1172,11 @@ genIncrementTx :: Int -> Gen (ChainContext, [TxOut CtxUTxO], OpenState, Tx) genIncrementTx numParties = do ctx <- genHydraContextFor numParties cctx <- pickChainContext ctx - utxo <- genUTxOAdaOnlyOfSize 1 + utxo <- genUTxOAdaOnlyOfSize 3 `suchThat` (not . null) (_, st@OpenState{headId}) <- genStOpen ctx let openUTxO = getKnownUTxO st - let version = 0 - snapshot <- genConfirmedSnapshot headId 1 version openUTxO (Just utxo) Nothing (ctxHydraSigningKeys ctx) + let version = 1 + snapshot <- genConfirmedSnapshot headId 2 version openUTxO (Just utxo) Nothing (ctxHydraSigningKeys ctx) pure ( cctx , maybe mempty toList (utxoToCommit $ getSnapshot snapshot) diff --git a/hydra-node/src/Hydra/Chain/Direct/Tx.hs b/hydra-node/src/Hydra/Chain/Direct/Tx.hs index bbcadaaa6e9..c7c65312239 100644 --- a/hydra-node/src/Hydra/Chain/Direct/Tx.hs +++ b/hydra-node/src/Hydra/Chain/Direct/Tx.hs @@ -410,7 +410,7 @@ observeRecoverTx networkId utxo tx = do deposits <- do depositedUTxO <- traverse (Commit.deserializeCommit (networkIdToNetwork networkId)) onChainDeposits pure $ UTxO.fromPairs depositedUTxO - headId <- spy $ currencySymbolToHeadId headCurrencySymbol + headId <- currencySymbolToHeadId headCurrencySymbol let depositOuts = toTxContext . snd <$> UTxO.pairs deposits -- NOTE: All deposit outputs need to be present in the recover tx outputs but -- the two lists of outputs are not necesarilly the same. diff --git a/hydra-node/src/Hydra/HeadLogic.hs b/hydra-node/src/Hydra/HeadLogic.hs index 3d2dd3249f8..f0818cc6efb 100644 --- a/hydra-node/src/Hydra/HeadLogic.hs +++ b/hydra-node/src/Hydra/HeadLogic.hs @@ -320,17 +320,9 @@ onOpenNetworkReqTx :: onOpenNetworkReqTx env ledger st ttl tx = -- Keep track of transactions by-id (newState TransactionReceived{tx} <>) $ - -- Spec: wait L̂ ◦ tx ≠ ⊥ - -- Spec: wait L̂ ◦ tx ≠ ⊥ - -- Spec: wait L̂ ◦ tx ≠ ⊥ waitApplyTx $ \newLocalUTxO -> (cause (ClientEffect $ ServerOutput.TxValid headId tx) <>) $ - -- Spec: T̂ ← T̂ ⋃ {tx} - -- Spec: T̂ ← T̂ ⋃ {tx} - -- L̂ ← L̂ ◦ tx - -- L̂ ← L̂ ◦ tx - -- Spec: T̂ ← T̂ ⋃ {tx} -- L̂ ← L̂ ◦ tx newState TransactionAppliedToLocalUTxO{tx, newLocalUTxO} @@ -419,26 +411,8 @@ onOpenNetworkReqSn :: onOpenNetworkReqSn env ledger st otherParty sv sn requestedTxIds mDecommitTx mIncrementUTxO = -- Spec: require s = ŝ + 1 ∧ leader(s) = j requireReqSn $ - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s - -- Spec: wait ŝ = ̅S.s waitNoSnapshotInFlight $ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ - -- Spec: wait v = v̂ waitOnSnapshotVersion $ requireApplicableDecommitTx $ \(activeUTxOAfterDecommit, mUtxoToDecommit) -> @@ -1000,10 +974,10 @@ onOpenChainRecoverTx :: UTxOType tx -> Outcome tx onOpenChainRecoverTx headId st recoveredUTxO = - newState RecoverFinalized{recoveredUTxO, newLocalUTxO = localUTxO `withoutUTxO` recoveredUTxO} + newState CommitRecovered{recoveredUTxO, newLocalUTxO = localUTxO `withoutUTxO` recoveredUTxO} <> cause ( ClientEffect - ServerOutput.RecoverFinalized + ServerOutput.CommitRecovered { headId , recoveredUTxO } @@ -1442,7 +1416,7 @@ aggregate st = \case } } _otherState -> st - RecoverFinalized{newLocalUTxO} -> case st of + CommitRecovered{newLocalUTxO} -> case st of Open os@OpenState{coordinatedHeadState} -> Open @@ -1680,7 +1654,7 @@ recoverChainStateHistory initialChainState = HeadAborted{chainState} -> pushNewState chainState history HeadOpened{chainState} -> pushNewState chainState history TransactionAppliedToLocalUTxO{} -> history - RecoverFinalized{} -> history + CommitRecovered{} -> history CommitRecorded{} -> history DecommitRecorded{} -> history SnapshotRequestDecided{} -> history diff --git a/hydra-node/src/Hydra/HeadLogic/Outcome.hs b/hydra-node/src/Hydra/HeadLogic/Outcome.hs index 135079e5c74..f0210605dc0 100644 --- a/hydra-node/src/Hydra/HeadLogic/Outcome.hs +++ b/hydra-node/src/Hydra/HeadLogic/Outcome.hs @@ -73,7 +73,7 @@ data StateChanged tx , newLocalUTxO :: UTxOType tx } | CommitRecorded {depositScriptUTxO :: UTxOType tx, commitUTxO :: UTxOType tx, newLocalUTxO :: UTxOType tx} - | RecoverFinalized {recoveredUTxO :: UTxOType tx, newLocalUTxO :: UTxOType tx} + | CommitRecovered {recoveredUTxO :: UTxOType tx, newLocalUTxO :: UTxOType tx} | DecommitRecorded {decommitTx :: tx, newLocalUTxO :: UTxOType tx} | SnapshotRequestDecided {snapshotNumber :: SnapshotNumber} | -- | A snapshot was requested by some party. diff --git a/hydra-node/test/Hydra/Chain/Direct/StateSpec.hs b/hydra-node/test/Hydra/Chain/Direct/StateSpec.hs index 5d390407b8c..c0af6e7ffe2 100644 --- a/hydra-node/test/Hydra/Chain/Direct/StateSpec.hs +++ b/hydra-node/test/Hydra/Chain/Direct/StateSpec.hs @@ -436,23 +436,25 @@ prop_observeAnyTx = checkCoverage $ do forAllShow genChainStateWithTx showTransition $ \(ctx, st, tx, transition) -> forAllShow genChainStateWithTx showTransition $ \(_, otherSt, _, _) -> do - -- genericCoverTable [transition] $ do - let expectedHeadId = chainStateHeadId st - case observeHeadTx (networkId ctx) (getKnownUTxO st <> getKnownUTxO otherSt) tx of - NoHeadTx -> - False & counterexample ("observeHeadTx ignored transaction: " <> show tx) - -- NOTE: we don't have the generated headId easily accessible in the initial state - Init{} -> transition === Transition.Init - Commit CommitObservation{headId} -> transition === Transition.Commit .&&. Just headId === expectedHeadId - Abort AbortObservation{headId} -> transition === Transition.Abort .&&. Just headId === expectedHeadId - CollectCom CollectComObservation{headId} -> transition === Transition.Collect .&&. Just headId === expectedHeadId - Deposit DepositObservation{headId} -> transition === Transition.Deposit .&&. Just headId === expectedHeadId - Recover RecoverObservation{} -> transition === Transition.Deposit - Increment IncrementObservation{headId} -> transition === Transition.Increment .&&. Just headId === expectedHeadId - Decrement DecrementObservation{headId} -> transition === Transition.Decrement .&&. Just headId === expectedHeadId - Close CloseObservation{headId} -> transition === Transition.Close .&&. Just headId === expectedHeadId - Contest ContestObservation{headId} -> transition === Transition.Contest .&&. Just headId === expectedHeadId - Fanout FanoutObservation{headId} -> transition === Transition.Fanout .&&. Just headId === expectedHeadId + genericCoverTable [transition] $ do + let expectedHeadId = chainStateHeadId st + case observeHeadTx (networkId ctx) (getKnownUTxO st <> getKnownUTxO otherSt) tx of + NoHeadTx -> + if transition == Transition.Recover || transition == Transition.Increment + then property True + else False & counterexample ("observeHeadTx ignored transaction: " <> show tx) + -- NOTE: we don't have the generated headId easily accessible in the initial state + Init{} -> transition === Transition.Init + Commit CommitObservation{headId} -> transition === Transition.Commit .&&. Just headId === expectedHeadId + Abort AbortObservation{headId} -> transition === Transition.Abort .&&. Just headId === expectedHeadId + CollectCom CollectComObservation{headId} -> transition === Transition.Collect .&&. Just headId === expectedHeadId + Deposit DepositObservation{headId} -> transition === Transition.Deposit .&&. Just headId === expectedHeadId + Recover RecoverObservation{} -> transition === Transition.Deposit + Increment IncrementObservation{headId} -> transition === Transition.Increment .&&. Just headId === expectedHeadId + Decrement DecrementObservation{headId} -> transition === Transition.Decrement .&&. Just headId === expectedHeadId + Close CloseObservation{headId} -> transition === Transition.Close .&&. Just headId === expectedHeadId + Contest ContestObservation{headId} -> transition === Transition.Contest .&&. Just headId === expectedHeadId + Fanout FanoutObservation{headId} -> transition === Transition.Fanout .&&. Just headId === expectedHeadId where showTransition (_, _, _, t) = show t diff --git a/hydra-node/test/Hydra/Chain/Direct/TxSpec.hs b/hydra-node/test/Hydra/Chain/Direct/TxSpec.hs index 34bfff85eb0..0c8b296b3d6 100644 --- a/hydra-node/test/Hydra/Chain/Direct/TxSpec.hs +++ b/hydra-node/test/Hydra/Chain/Direct/TxSpec.hs @@ -120,7 +120,8 @@ spec = counterexample (show transition) $ let utxo = getKnownUTxO st in case observeHeadTx testNetworkId utxo tx of - NoHeadTx -> property False + -- TODO: observations for Increment and Recover are not implemented yet + NoHeadTx -> if transition == Transition.Increment || transition == Transition.Recover then property True else property False Init{} -> transition === Transition.Init Abort{} -> transition === Transition.Abort Commit{} -> transition === Transition.Commit diff --git a/hydra-plutus/src/Hydra/Contract/Head.hs b/hydra-plutus/src/Hydra/Contract/Head.hs index 18b9463133c..e2ff03c76fa 100644 --- a/hydra-plutus/src/Hydra/Contract/Head.hs +++ b/hydra-plutus/src/Hydra/Contract/Head.hs @@ -511,7 +511,6 @@ checkFanout ScriptContext{scriptContextTxInfo = txInfo} closedDatum numberOfFano mustBurnAllHeadTokens minted headId parties && hasSameUTxOHash && hasSameUTxOToDecommitHash - && hasSameUTxOToCommitHash && afterContestationDeadline where minted = txInfoMint txInfo @@ -520,24 +519,15 @@ checkFanout ScriptContext{scriptContextTxInfo = txInfo} closedDatum numberOfFano traceIfFalse $(errorCode FanoutUTxOHashMismatch) $ fannedOutUtxoHash == utxoHash - hasSameUTxOToCommitHash = - traceIfFalse $(errorCode FanoutUTxOToCommitHashMismatch) $ - alphaUTxOHash == commitUtxoHash - hasSameUTxOToDecommitHash = traceIfFalse $(errorCode FanoutUTxOToDecommitHashMismatch) $ deltaUTxOHash == decommitUtxoHash fannedOutUtxoHash = hashTxOuts $ take numberOfFanoutOutputs txInfoOutputs - -- TODO: get the numberOfCommitOutputs number from the redeemer - numberOfCommitOutputs = 0 - - commitUtxoHash = hashTxOuts $ take numberOfCommitOutputs $ drop numberOfFanoutOutputs txInfoOutputs - decommitUtxoHash = hashTxOuts $ take numberOfDecommitOutputs $ drop numberOfFanoutOutputs txInfoOutputs - ClosedDatum{utxoHash, alphaUTxOHash, deltaUTxOHash, parties, headId, contestationDeadline} = closedDatum + ClosedDatum{utxoHash, deltaUTxOHash, parties, headId, contestationDeadline} = closedDatum TxInfo{txInfoOutputs} = txInfo diff --git a/hydra-tx/exe/Main.hs b/hydra-tx/exe/Main.hs index e8c4a3b0319..c8d1ee9fa6a 100644 --- a/hydra-tx/exe/Main.hs +++ b/hydra-tx/exe/Main.hs @@ -32,8 +32,8 @@ main = do Just depositedTxOut -> do case extractInlineDatumFromTxOut @DepositDatum depositedTxOut of Nothing -> die "failed to extract DepositDatum from recover UTxO" - Just (DepositDatum (headCS, datumDepositDeadline, deposited)) -> do + Just (DepositDatum (_, _, deposited)) -> do let recoverTransaction = - recoverTx networkId headCS recoverTxIn deposited datumDepositDeadline recoverSlotNo + recoverTx networkId recoverTxIn deposited recoverSlotNo writeFileLBS outFile $ textEnvelopeToJSON Nothing recoverTransaction putStrLn $ "Wrote deposit transaction to " <> outFile diff --git a/hydra-tx/src/Hydra/Tx/Recover.hs b/hydra-tx/src/Hydra/Tx/Recover.hs index 0feda49ea9e..e3de100f710 100644 --- a/hydra-tx/src/Hydra/Tx/Recover.hs +++ b/hydra-tx/src/Hydra/Tx/Recover.hs @@ -3,7 +3,6 @@ module Hydra.Tx.Recover where import Hydra.Prelude import Hydra.Cardano.Api -import Hydra.Cardano.Api.Network (networkIdToNetwork) import Hydra.Contract.Commit qualified as Commit import Hydra.Contract.Deposit qualified as Deposit import Hydra.Ledger.Cardano.Builder ( @@ -14,22 +13,18 @@ import Hydra.Ledger.Cardano.Builder ( unsafeBuildTransaction, ) import Hydra.Tx.Utils (mkHydraHeadV1TxName) -import PlutusLedgerApi.V2 (CurrencySymbol, POSIXTime) -- | Builds a recover transaction to recover locked funds from the v_deposit script. recoverTx :: NetworkId -> - CurrencySymbol -> -- | Deposit input TxIn -> -- | Already Deposited funds [Commit.Commit] -> - -- | Recover deadline - POSIXTime -> -- | Lower bound slot number SlotNo -> Tx -recoverTx networkId headId depositTxIn deposited deadline lowerBoundSlot = +recoverTx networkId depositTxIn deposited lowerBoundSlot = unsafeBuildTransaction $ emptyTxBody & addInputs recoverInputs @@ -46,13 +41,6 @@ recoverTx networkId headId depositTxIn deposited deadline lowerBoundSlot = ScriptWitness scriptWitnessInCtx $ mkScriptWitness depositScript InlineScriptDatum redeemer - -- depositWitness = - -- BuildTxWith $ - -- ScriptWitness scriptWitnessInCtx $ - -- mkScriptWitness depositScript (mkScriptDatum constructedDatum) (toScriptData redeemer) - - constructedDatum = (headId, deadline, deposited) - depositOutputs = toTxContext . snd <$> mapMaybe (Commit.deserializeCommit (networkIdToNetwork networkId)) deposited depositScript = fromPlutusScript @PlutusScriptV2 Deposit.validatorScript diff --git a/hydra-tx/test/Hydra/Tx/Contract/Increment.hs b/hydra-tx/test/Hydra/Tx/Contract/Increment.hs index 43cc93cfce7..0e935d50f10 100644 --- a/hydra-tx/test/Hydra/Tx/Contract/Increment.hs +++ b/hydra-tx/test/Hydra/Tx/Contract/Increment.hs @@ -13,7 +13,7 @@ import Hydra.Contract.HeadState qualified as Head import Hydra.Data.Party qualified as OnChain import Hydra.Plutus.Orphans () import Hydra.Tx.ContestationPeriod (ContestationPeriod, toChain) -import Hydra.Tx.Contract.Deposit (healthyDepositTx, healthyDepositUTxO) +import Hydra.Tx.Contract.Deposit (healthyDepositTx) import Hydra.Tx.Crypto (HydraKey, MultiSignature (..), aggregate, sign) import Hydra.Tx.HeadId (mkHeadId) import Hydra.Tx.HeadParameters (HeadParameters (..)) @@ -50,7 +50,6 @@ healthyIncrementTx = (headInput, headOutput) healthySnapshot healthySignature - healthyDepositUTxO depositUTxO depositUTxO = utxoFromTx $ fst healthyDepositTx diff --git a/hydra-tx/test/Hydra/Tx/Contract/Recover.hs b/hydra-tx/test/Hydra/Tx/Contract/Recover.hs index 2070a7789d9..0427d3a93ed 100644 --- a/hydra-tx/test/Hydra/Tx/Contract/Recover.hs +++ b/hydra-tx/test/Hydra/Tx/Contract/Recover.hs @@ -35,10 +35,8 @@ healthyRecoverTx = tx = recoverTx testNetworkId - headCS depositTxIn deposits - recoverDeadline recoverSlotNo DepositDatum (_, _, deposits) =