diff --git a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs index eb26007..a534e73 100644 --- a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs +++ b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs @@ -34,7 +34,7 @@ import PlutusLedgerApi.V2 ( Value, ) import PlutusLedgerApi.V3 (ScriptHash) -import Sample.Shared (agoraScripts, authorityTokenPolicy, authorityTokenSymbol, signer, signer2, trScriptHash, trValidator) +import Sample.Shared (agoraScripts, authorityTokenPolicy, authorityTokenSymbol, minAda, signer, signer2, trScriptHash, trValidator) import Test.Specification (SpecificationTree, group, testPolicy, testValidator) import Test.Util (CombinableBuilder, mkMinting, mkSpending, subtractValue, validatorHashes) @@ -129,9 +129,10 @@ mkReceiverOutputBuilder :: b mkReceiverOutputBuilder ps = let mkOutputValue = - if ps.badReceivedValue - then const $ Value.singleton "" "bruh" 1 - else id + (minAda <>) + . if ps.badReceivedValue + then const $ Value.singleton "" "bruh" 1 + else id mkFinalOutputs = mconcat . (if ps.badReceiverOrder then reverse else id) diff --git a/agora-test/goldens/agora-golden.json b/agora-test/goldens/agora-golden.json index aaea853..0fae6ec 100644 --- a/agora-test/goldens/agora-golden.json +++ b/agora-test/goldens/agora-golden.json @@ -112,12 +112,12 @@ "version": "ScriptV2" }, "agora:treasuryWithdrawalValidator": { - "cborHex": "590718590715010000323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330343370e900100109919299981b29981699b873301400f375660746460726072607200260700026466e052000001480084cdc3999119981a91119981080091800911999380220013005002330060050011324800126302700200123253330383233333301903c03f37520246eacc0f4c0ec0048c8c8c94ccc0f4cdc3a400000429405289821001181f0009baa303e303f303e00214a2607a00226602c0226eacc0f0c0e8c0f400458c8c0f0c0e8004c0f0004dd6181d000a400426464a66607066058605a466e1c005200033302070266446660466048e04008004cc0708c8c8c94ccc0f14cc0d4cc88cdd79ba73043002374e608600260800060102646464a66607e66e1d200200214a02944c110008c100004dd5000881d0a99981e198160009bac3040303e006137566080607c0042c6460806082002607e002607e607c6078002607c0026eb0c0f0004cc0708cc0a888004004dd6181e0011980e119299981d1981519181f9820000981f0009bac303e303c00413756607c60780022070607c00266606a444a66607800420022a6660780022c264a6660786605a44a6606a64646464a66608466e1d2002002132323253330453370e90000010a5013375e6e9c010dd3800982500118230009baa004132323253330453370e90010010a5013375e6e9c010dd3800982500118230009baa0043047002304300137540066460866088002608400626466ebcdd30011ba60013756608460800066080006266008607c006607c0042c6080607e0026eb0c0f0008dd6181e181d181d0008a4c2c6078607601e6eb004858c0e8c0e4034c0e000458c0e4008c0d4004dd5181a9819804a9998188008a4c2c60620066604046464646400aa66606466e1d20000021323253330343370e6e340052038132324994ccc0d800452616303600316375c002606c0022a66606466e1d20020021323253330343370e6e340052038132324994ccc0d800452616303600316375c002606c0022c606e00460660026ea8004dd6000981880098170019980e919191919002a99981799b87480000084c8c8c8c8c8c8c8c8c8c8c8c8c926533303c001149858c0f0018c94ccc0e8cc0b88cc0c08cdc42400000200200220022c6eac010c0ccdd580199819919bb03232533303a5330333370e0029000099b87001480e04c0f400c58dc68009bae303b00132323230410043035375660800066606a466ec0c94ccc0eccdc49b8d001481004c0f800858dd7181e8009918208011bad30400010013756607c0020026eac004c0e4004c0d80194ccc0cccdc3a400000426464a66606a66e1cdc6800a40702646493299981b8008a4c2c606e0062c6eb8004c0dc00454ccc0cccdc3a400400426464a66606a66e1cdc6800a40702646493299981b8008a4c2c606e0062c6eb8004c0dc00458c0e0008c0d0004dd500098198008b181a00118180009baa0013758002605c0026eb0014c0b4008dd7002000911999998018130149ba9002001233300722337006eb4c0b000800520003756002290001111199980299803002001000919111801001980200089128009180e9129998118008912800899980198130009111801001898011812000911299981099baf00230030011223002003122500122301c22533302200110031330043025001300230230012233003300d00200130182223330040012300122333008220013005002330060050011300c49894ccc07000448940044c888c00800cc8c88cc00400c008c078008c07c004888ccc011c00010009111998021119980380280100080100091801911ba63300337560046eac0048c00888dd4198019bad002375a002444666600800644004004002460246004002446464466002006004444a6660340022660300060042646464a66603866ebc0080044cc06ccdd8001198049811003181100199980411001002980f0020a99980e19b90375c0046eb80044cc06c018cccc0208800400cc0780100144cc06c00ccccc02088004018014c078010c078008c074010c074004894ccc06000840044cccc00c88004c06c008c064008004804488c0080048c038894ccc0500045280a99980999baf301700100314a226004602a002446466006602c0026eacc058c050004c0580048c030894ccc04800440104cc040c00cc054004c008c04c0052f5c04466008460066eacc05400400488cc00c8c00cdd6980a000800918041129998070008a5115330043003301100113002300f0012233300b00200100314a046601000200429448ccc00c894ccc024004480104c894ccc028c004008584cc010c03000c8cdc80008019bae300b300c00100124a04600444a666010002200a26600c600660160026004601200246460044660040040024600446600400400297adef6c605740ae6955cfaba25573aae848c008dd5000aab9e1", + "cborHex": "59083e59083b010000323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330403370e900100109919299982129981c99b873301400f3756608c64608a608a608a002608800260629001099b8733223330412223330210012300122333270044002600a0046600c00a002264900024c6044004002464a666088646666660320900966ea4048dd5982498238009191919299982499b87480000085280a51304e002304a00137546094609660940042944c1240044cc058044dd59824182318248008b191824182300098240009bac3046001480084c8c94ccc110cc0e0c0e48cdc3800a4000666040e04cc094cc0708c8c8c94ccc1214cc104cc88cdd79ba7304f002374e609e00260980060102646464a66609666e1d200200214a02944c140008c130004dd500088230a999824198138009bac304c304a00613756609860940042c646098609a002609600260966094609000260940026eb0c120004cc0708cc09488004004dd618240011980e119192999823a9981f19813191826182680098258011bac304b304900513303732304c304d001304b002304b3049001137566096002208a60900026094002666082444a66609000420022a6660900022c26464a6660926605244a66084a6608464646464a66609e66e1d2002002132323253330523370e90000010a5013375e6e9c010dd3800982b80118298009baa004132323253330523370e90010010a5013375e6e9c010dd3800982b80118298009baa0043054002305000137540066460a060a2002609e0082664464660846086466e2120000010013302e0020013756609e006002266076004609e609a006609a00826600a609600860960062c6094002609860960026eb0c120008dd61824182318230008a4c2c6090608e01e6eb004858c118c114034c11000458c114008c104004dd51820981f804a99981e8008a4c2c607a0066605846464646400aa66607c66e1d20000021323253330403370e6e340052038132324994ccc10800452616304200316375c00260840022a66607c66e1d20020021323253330403370e6e340052038132324994ccc10800452616304200316375c00260840022c6086004607e0026ea8004dd6000981e800981d00199814919191919002a99981d99b87480000084c8c8c8c8c8c8c8c8c8c8c8c8c9265333048001149858c120018c94ccc118cc0e88cc0f08cdc42400000200200220022c6eac010c0fcdd58019981f919bb03232533304653303f3370e0029000099b87001480e04c12400c58dc68009bae3047001323232304d00430413756609800666082466ec0c94ccc11ccdc49b8d001481004c12800858dd718248009918268011bad304c001001375660940020026eac004c114004c1080194ccc0fccdc3a400000426464a66608266e1cdc6800a4070264649329998218008a4c2c60860062c6eb8004c10c00454ccc0fccdc3a400400426464a66608266e1cdc6800a4070264649329998218008a4c2c60860062c6eb8004c10c00458c110008c100004dd5000981f8008b1820001181e0009baa001375800260740026eb0014c0e4008dd70020009119999980181901a9ba9002001233300722337006eb4c0e00080052000375600229000111119998029980300200100091911180100198020008912800918149129998178008912800899980198190009111801001898011818000911299981699baf00230030011223002003122500122302822533302e001100313300430310013002302f0012233003300800200130242223330040012300122333008220013005002330060050011300749894ccc0a000448940044c888c00800cc8c88cc00400c008c0a8008c0ac004888ccc011c00010009111998049119980600280100080100090111118010009180f9129998128008a50153330243375e605000200629444c008c09800488c8cc00cc09c004dd598139812800981380091199801980238000233008300b0100012300322374c660066eac008dd580091801111ba833003375a0046eb4004888cccc01000c880080080048c064c00800488c8c88cc00400c0088894ccc0840044cc07c00c0084c8c8c94ccc08ccdd780100089981119bb0002330093029006302900333300822002005302500415333023337206eb8008dd70008998110031999804110008019812802002899811001999980411000803002981280218128011812002181200091299980f80108008999980191000981100118100010009119980180480100091119803998020018010009111919191919bb037520046e98004c014008c014008dd598108011bae301d001223330030060020012223300433005003002001223301200200122232323232337606ea4008dd4000980280118028011bad301d002375c60320024002466e0520000012232323253330153370e90000010a51132323253330183370e90000010a50153330183370e90020010a5113371e0126eb8c070004c074008c064004dd5002180d001180b0009baa002488120923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec002300c225333012001100413301030033015001300230130014bd701119802118019bab3015001001223300323003375a60280020024601044a66601c002294454cc010c00cc0440044c008c03c00488ccc02c00800400c5281198040008010a512333003225333009001120041322533300a300100216133004300c0032337200020066eb8c02cc0300040049281180111299980400088028998031801980580098011804800919180111980100100091801119801001000a5eb7bdb1815d02b9a5573eae8955ceaba1230023754002aae79", "description": "agora:treasuryWithdrawalValidator", "params": [ "Ply.Core.Types:AsData#Data.Tagged:Tagged#GHC.TypeLits:\"AuthorityTokenTag\"#PlutusLedgerApi.V1.Value:CurrencySymbol" ], - "rawHex": "590715010000323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330343370e900100109919299981b29981699b873301400f375660746460726072607200260700026466e052000001480084cdc3999119981a91119981080091800911999380220013005002330060050011324800126302700200123253330383233333301903c03f37520246eacc0f4c0ec0048c8c8c94ccc0f4cdc3a400000429405289821001181f0009baa303e303f303e00214a2607a00226602c0226eacc0f0c0e8c0f400458c8c0f0c0e8004c0f0004dd6181d000a400426464a66607066058605a466e1c005200033302070266446660466048e04008004cc0708c8c8c94ccc0f14cc0d4cc88cdd79ba73043002374e608600260800060102646464a66607e66e1d200200214a02944c110008c100004dd5000881d0a99981e198160009bac3040303e006137566080607c0042c6460806082002607e002607e607c6078002607c0026eb0c0f0004cc0708cc0a888004004dd6181e0011980e119299981d1981519181f9820000981f0009bac303e303c00413756607c60780022070607c00266606a444a66607800420022a6660780022c264a6660786605a44a6606a64646464a66608466e1d2002002132323253330453370e90000010a5013375e6e9c010dd3800982500118230009baa004132323253330453370e90010010a5013375e6e9c010dd3800982500118230009baa0043047002304300137540066460866088002608400626466ebcdd30011ba60013756608460800066080006266008607c006607c0042c6080607e0026eb0c0f0008dd6181e181d181d0008a4c2c6078607601e6eb004858c0e8c0e4034c0e000458c0e4008c0d4004dd5181a9819804a9998188008a4c2c60620066604046464646400aa66606466e1d20000021323253330343370e6e340052038132324994ccc0d800452616303600316375c002606c0022a66606466e1d20020021323253330343370e6e340052038132324994ccc0d800452616303600316375c002606c0022c606e00460660026ea8004dd6000981880098170019980e919191919002a99981799b87480000084c8c8c8c8c8c8c8c8c8c8c8c8c926533303c001149858c0f0018c94ccc0e8cc0b88cc0c08cdc42400000200200220022c6eac010c0ccdd580199819919bb03232533303a5330333370e0029000099b87001480e04c0f400c58dc68009bae303b00132323230410043035375660800066606a466ec0c94ccc0eccdc49b8d001481004c0f800858dd7181e8009918208011bad30400010013756607c0020026eac004c0e4004c0d80194ccc0cccdc3a400000426464a66606a66e1cdc6800a40702646493299981b8008a4c2c606e0062c6eb8004c0dc00454ccc0cccdc3a400400426464a66606a66e1cdc6800a40702646493299981b8008a4c2c606e0062c6eb8004c0dc00458c0e0008c0d0004dd500098198008b181a00118180009baa0013758002605c0026eb0014c0b4008dd7002000911999998018130149ba9002001233300722337006eb4c0b000800520003756002290001111199980299803002001000919111801001980200089128009180e9129998118008912800899980198130009111801001898011812000911299981099baf00230030011223002003122500122301c22533302200110031330043025001300230230012233003300d00200130182223330040012300122333008220013005002330060050011300c49894ccc07000448940044c888c00800cc8c88cc00400c008c078008c07c004888ccc011c00010009111998021119980380280100080100091801911ba63300337560046eac0048c00888dd4198019bad002375a002444666600800644004004002460246004002446464466002006004444a6660340022660300060042646464a66603866ebc0080044cc06ccdd8001198049811003181100199980411001002980f0020a99980e19b90375c0046eb80044cc06c018cccc0208800400cc0780100144cc06c00ccccc02088004018014c078010c078008c074010c074004894ccc06000840044cccc00c88004c06c008c064008004804488c0080048c038894ccc0500045280a99980999baf301700100314a226004602a002446466006602c0026eacc058c050004c0580048c030894ccc04800440104cc040c00cc054004c008c04c0052f5c04466008460066eacc05400400488cc00c8c00cdd6980a000800918041129998070008a5115330043003301100113002300f0012233300b00200100314a046601000200429448ccc00c894ccc024004480104c894ccc028c004008584cc010c03000c8cdc80008019bae300b300c00100124a04600444a666010002200a26600c600660160026004601200246460044660040040024600446600400400297adef6c605740ae6955cfaba25573aae848c008dd5000aab9e1", + "rawHex": "59083b010000323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330403370e900100109919299982129981c99b873301400f3756608c64608a608a608a002608800260629001099b8733223330412223330210012300122333270044002600a0046600c00a002264900024c6044004002464a666088646666660320900966ea4048dd5982498238009191919299982499b87480000085280a51304e002304a00137546094609660940042944c1240044cc058044dd59824182318248008b191824182300098240009bac3046001480084c8c94ccc110cc0e0c0e48cdc3800a4000666040e04cc094cc0708c8c8c94ccc1214cc104cc88cdd79ba7304f002374e609e00260980060102646464a66609666e1d200200214a02944c140008c130004dd500088230a999824198138009bac304c304a00613756609860940042c646098609a002609600260966094609000260940026eb0c120004cc0708cc09488004004dd618240011980e119192999823a9981f19813191826182680098258011bac304b304900513303732304c304d001304b002304b3049001137566096002208a60900026094002666082444a66609000420022a6660900022c26464a6660926605244a66084a6608464646464a66609e66e1d2002002132323253330523370e90000010a5013375e6e9c010dd3800982b80118298009baa004132323253330523370e90010010a5013375e6e9c010dd3800982b80118298009baa0043054002305000137540066460a060a2002609e0082664464660846086466e2120000010013302e0020013756609e006002266076004609e609a006609a00826600a609600860960062c6094002609860960026eb0c120008dd61824182318230008a4c2c6090608e01e6eb004858c118c114034c11000458c114008c104004dd51820981f804a99981e8008a4c2c607a0066605846464646400aa66607c66e1d20000021323253330403370e6e340052038132324994ccc10800452616304200316375c00260840022a66607c66e1d20020021323253330403370e6e340052038132324994ccc10800452616304200316375c00260840022c6086004607e0026ea8004dd6000981e800981d00199814919191919002a99981d99b87480000084c8c8c8c8c8c8c8c8c8c8c8c8c9265333048001149858c120018c94ccc118cc0e88cc0f08cdc42400000200200220022c6eac010c0fcdd58019981f919bb03232533304653303f3370e0029000099b87001480e04c12400c58dc68009bae3047001323232304d00430413756609800666082466ec0c94ccc11ccdc49b8d001481004c12800858dd718248009918268011bad304c001001375660940020026eac004c114004c1080194ccc0fccdc3a400000426464a66608266e1cdc6800a4070264649329998218008a4c2c60860062c6eb8004c10c00454ccc0fccdc3a400400426464a66608266e1cdc6800a4070264649329998218008a4c2c60860062c6eb8004c10c00458c110008c100004dd5000981f8008b1820001181e0009baa001375800260740026eb0014c0e4008dd70020009119999980181901a9ba9002001233300722337006eb4c0e00080052000375600229000111119998029980300200100091911180100198020008912800918149129998178008912800899980198190009111801001898011818000911299981699baf00230030011223002003122500122302822533302e001100313300430310013002302f0012233003300800200130242223330040012300122333008220013005002330060050011300749894ccc0a000448940044c888c00800cc8c88cc00400c008c0a8008c0ac004888ccc011c00010009111998049119980600280100080100090111118010009180f9129998128008a50153330243375e605000200629444c008c09800488c8cc00cc09c004dd598139812800981380091199801980238000233008300b0100012300322374c660066eac008dd580091801111ba833003375a0046eb4004888cccc01000c880080080048c064c00800488c8c88cc00400c0088894ccc0840044cc07c00c0084c8c8c94ccc08ccdd780100089981119bb0002330093029006302900333300822002005302500415333023337206eb8008dd70008998110031999804110008019812802002899811001999980411000803002981280218128011812002181200091299980f80108008999980191000981100118100010009119980180480100091119803998020018010009111919191919bb037520046e98004c014008c014008dd598108011bae301d001223330030060020012223300433005003002001223301200200122232323232337606ea4008dd4000980280118028011bad301d002375c60320024002466e0520000012232323253330153370e90000010a51132323253330183370e90000010a50153330183370e90020010a5113371e0126eb8c070004c074008c064004dd5002180d001180b0009baa002488120923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec002300c225333012001100413301030033015001300230130014bd701119802118019bab3015001001223300323003375a60280020024601044a66601c002294454cc010c00cc0440044c008c03c00488ccc02c00800400c5281198040008010a512333003225333009001120041322533300a300100216133004300c0032337200020066eb8c02cc0300040049281180111299980400088028998031801980580098011804800919180111980100100091801119801001000a5eb7bdb1815d02b9a5573eae8955ceaba1230023754002aae79", "role": "ValidatorRole", "version": "ScriptV2" } diff --git a/agora-test/goldens/agoraDebug-golden.json b/agora-test/goldens/agoraDebug-golden.json index 01983ab..7ed7a4c 100644 --- a/agora-test/goldens/agoraDebug-golden.json +++ b/agora-test/goldens/agoraDebug-golden.json @@ -112,12 +112,12 @@ "version": "ScriptV2" }, "agora:treasuryWithdrawalValidator": { - "cborHex": "590b99590b96010000323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330363370e900100109919299981c29981699299981c800880089981f2493373696e676c65417574686f72697479546f6b656e4275726e65643a204d757374206275726e2065786163746c79203120474154000013370e6602801e6eacc100c8c0f0c0f0c0f0004c0ec004c8cdc0a40000029001099299981c800880089981f249254f6e6c79206f6e6520474154206d7573742065786973742061742074686520696e70757473000013370e664466606c44466604200246002446664e0088004c014008cc0180140044c92000498c09c0080048c94ccc0e8c8cccccc064108114dd48091bab3043303e0012323232533303f3370e900000109929998200008800899822a48137617574686f72697479546f6b656e7356616c6964496e3a2047415420696e636f72726563746c79206c69766573206174205075624b6579000014a02944c120008c110004dd51822182298220010a51304300113301601137566084607a60860022a6607e9201355768696c6520636f756e74696e67204741547320617420696e707574733a20616c6c2047415473206d7573742062652076616c69640016323042303d001304200137586080002900109919299981d198161816919b8700148000ccc081c0999119981198123810020013301c2323232533303e53303532533303f00113304449010c45666665637420696e70757400001100133223375e6e9cc124008dd398248009823001804099299981f80089982224810c5075626b657920696e70757400001100132323253330413370e90010010a5014a26094004608c0026ea800440ec54ccc0f8c94ccc0fc0044cc1112410e547265617375727920696e7075740000110013302c0013758608c608200c26eacc118c10400854cc10d2410d556e6b6e6f776e20696e70757400163230463047001304500130453044303f00130440013758608400266038466054440020026eb0c108008cc0708c94ccc0f0cc0a8c8c114c118004c110004dd61822181f80209bab3044303f0011039304400153303f490116436865636b207265636569766572206f757470757473001333036222533303e00210011533303e001153304249011b556e61626c6520746f2065786861757374207265636569766572730016132533303e3302d2253303532533304100110011330464911056616c69642063726564656e7469616c000013232323253330443370e90010010991919299982399b8748000008528099baf374e0086e9c004c140008c130004dd50020991919299982399b8748008008528099baf374e0086e9c004c140008c130004dd5002182680118248009baa003323049304a00130480031325333041001100113304649010b56616c69642076616c756500001323375e6e98008dd30009bab304830430033046003133004304100330410021533043490117496e76616c6964207265636569766572206f7574707574001630463045001375860840046eb0c108c0f4c0f4004526153303f49132556e757365642074726561737572792073686f756c6420737461792061742074726561737572792076616c696461746f727300163042304100f37580242a6607a92128412073696e676c6520617574686f7269747920746f6b656e20686173206265656e206275726e656400163040303f00d303e001153303b491445061747465726e206d61746368206661696c75726520696e2027646f2720626c6f636b2061742061676f72612f41676f72612f4566666563742e68733a36333a352d32320016303f002303b00137546076606c012a6660660022930a9981b81a0b181a00199810119191919002a99981a19b87480000084c8c94ccc0d8cdc39b8d001480e04c8c9265333038001149854cc0f00e458c0e400c54cc0ec0d458dd7000981e0008a99981a19b87480080084c8c94ccc0d8cdc39b8d001480e04c8c9265333038001149854cc0f00e458c0e400c54cc0ec0e858dd7000981e0008a9981c81d0b181e801181c8009baa0013758002606e00260620066603a46464646400aa66606266e1d20000021323232323232323232323232324994ccc0f8004526153304203f16303f00632533303c3302e233030233710900000080080088008a99820a49184e6567617469766520616d6f756e7420696e2056616c75650016375600860666eac00ccc0d08cdd81919299981e29981999b87001480004cdc3800a4070260860062a660829201387074727946726f6d2843757272656e637953796d626f6c293a206d757374206265203238206279746573206c6f6e67206f7220656d7074790016371a0026eb8c104004c8c8c8c11c010c0d4dd598230019981b119bb032533303d337126e3400520401304400215330424901327074727946726f6d28546f6b656e4e616d65293a206d757374206265206174206d6f7374203332204279746573206c6f6e670016375c608600264608e0046eb4c118004004dd598220008009bab001303f001303900653330353370e900000109919299981b99b87371a002901c0991924ca6660720022930a9981e81d0b181d0018a9981e01b0b1bae001303d001153330353370e900100109919299981b99b87371a002901c0991924ca6660720022930a9981e81d0b181d0018a9981e01d8b1bae001303d001153303a03b16303e002303a001375400260720022a6606c06e2c6074004606c0026ea8004dd6000981a0009bac0053033002375c0080024466666600605805e6ea40080048ccc01c88cdc01bad303200200148000dd58008a40004444666600a6600c0080040024644460040066008002244a0024603c44a66604a002244a00226660066058002444600400626004604e002444a66604666ebc008c00c004488c00800c489400488c074894ccc090004400c4cc010c0ac004c008c09800488cc00cc034008004c064888ccc0100048c00488ccc02088004c014008cc0180140044c031262533301e00112250011322230020033232233001003002302100230250012223330047000040024446660084466600e00a00400200400246006446e98cc00cdd58011bab00123002223750660066eb4008dd6800911199980200191001001000918099801000911919119800801801111299980e00089980c8018010991919299980f19baf00200113301c3376000466012605000c60500066660104400400a60420082a66603c66e40dd70011bae00113301c006333300822001003302100400513301c003333300822001006005302100430240023023004302300122533301a002100113333003220013021002301c00200120122230020012300f22533301600114a02a66602a66ebcc07400400c52889801180c000911919801980e0009bab301c3017001301c0012300d22533301400110041330113003301b001300230160014bd701119802118019bab301b001001223300323003375a60340020024601244a666020002294454cc010c00cc05c0044c008c04800488ccc03400800400c5281198050008010a51233300422533300b001120041322533300c3001002153301100616133004300f0032337200020066eb8c044c0480040049282490c756e736f72746564206d617000230022253330090011005133006300330100013002300b0012323002233002002001230022330020020014bd6f7b6302ba04912c7074727946726f6d28505075624b657948617368293a206d757374206265203238206279746573206c6f6e67005734aae7d241317074727946726f6d2850446174615265636f72645b5d293a206c697374206973206c6f6e676572207468616e207a65726f00574492012c7074727946726f6d285053637269707448617368293a206d757374206265203238206279746573206c6f6e6700573892013f7265616368656420656e64206f662073756d207768696c65207374696c6c206e6f7420686176696e6720666f756e642074686520636f6e7374727563746f72005573aae848c008dd5000aab9e1", + "cborHex": "590d27590d2401000032323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330433370e9001001099192999822a9981d1929998230008800899825a493373696e676c65417574686f72697479546f6b656e4275726e65643a204d757374206275726e2065786163746c79203120474154000013370e6602801e6eacc134c8c124c124c124004c120004c0c520021325333046001100113304b491254f6e6c79206f6e6520474154206d7573742065786973742061742074686520696e70757473000013370e664466608644466604200246002446664e0088004c014008cc0180140044c92000498c0880080048c94ccc11cc8cccccc06413c148dd48091bab3050304b0012323232533304c3370e900000109929998268008800899829248137617574686f72697479546f6b656e7356616c6964496e3a2047415420696e636f72726563746c79206c69766573206174205075624b6579000014a02944c154008c144004dd51828982918288010a5130500011330160113756609e609460a00022a660989201355768696c6520636f756e74696e67204741547320617420696e707574733a20616c6c2047415473206d7573742062652076616c6964001632304f304a001304f0013758609a00290010991929998239981c981d119b8700148000ccc081c0998129980e11919192999825a99821192999826000899828a4810c45666665637420696e70757400001100133223375e6e9cc158008dd3982b00098298018040992999826000899828a4810c5075626b657920696e707574000011001323232533304e3370e90010010a5014a260ae00460a60026ea8004412054ccc12cc94ccc1300044cc1452410e547265617375727920696e70757400001100133027001375860a6609c00c26eacc14cc13800854cc1412410d556e6b6e6f776e20696e70757400163230533054001305200130523051304c00130510013758609e0026603846604a440020026eb0c13c008cc0708c8c94ccc1294cc0fcc94ccc12c00440044cc14124012453686f756c642073656e7420746f206f6e65206f66207468652074726561737572696573000013302632305330540013052002375860a4609a00a264a66609600220022660a0070002660706460a660a800260a400460a4609a00226eacc148004411cc130004c1440054cc131240116436865636b207265636569766572206f757470757473001333043222533304b00210011533304b001153304f49011b556e61626c6520746f206578686175737420726563656976657273001613232533304c330292253304353304332533304f00110011330544911056616c69642063726564656e7469616c000013232323253330523370e90010010991919299982a99b8748000008528099baf374e0086e9c004c178008c168004dd50020991919299982a99b8748008008528099baf374e0086e9c004c178008c168004dd5002182d801182b8009baa00332305730580013056004132533304f001100113305449010b56616c69642076616c7565000013322323304330442337109000000800998170010009bab3056003001132533304f001100113305403c0013303c002305630510033054004133005304f004304f003153305149117496e76616c6964207265636569766572206f75747075740016304e001305330520013758609e0046eb0c13cc128c128004526153304c490132556e757365642074726561737572792073686f756c6420737461792061742074726561737572792076616c696461746f72730016304f304e00f37580242a6609492128412073696e676c6520617574686f7269747920746f6b656e20686173206265656e206275726e65640016304d304c00d304b0011533048491445061747465726e206d61746368206661696c75726520696e2027646f2720626c6f636b2061742061676f72612f41676f72612f4566666563742e68733a36333a352d32320016304c0023048001375460906086012a6660800022930a998220208b182080199816919191919002a99982099b87480000084c8c94ccc10ccdc39b8d001480e04c8c9265333045001149854cc12411858c11800c54cc12010858dd700098248008a99982099b87480080084c8c94ccc10ccdc39b8d001480e04c8c9265333045001149854cc12411858c11800c54cc12011c58dd700098248008a998230238b182500118230009baa00137580026088002607c0066605446464646400aa66607c66e1d20000021323232323232323232323232324994ccc12c004526153304f04c16304c0063253330493303b23303d233710900000080080088008a99827249184e6567617469766520616d6f756e7420696e2056616c75650016375600860806eac00ccc1048cdd819192999824a9982019b87001480004cdc3800a4070260a00062a6609c9201387074727946726f6d2843757272656e637953796d626f6c293a206d757374206265203238206279746573206c6f6e67206f7220656d7074790016371a0026eb8c138004c8c8c8c150010c108dd5982980199821919bb032533304a337126e34005204013051002153304f4901327074727946726f6d28546f6b656e4e616d65293a206d757374206265206174206d6f7374203332204279746573206c6f6e670016375c60a00026460a80046eb4c14c004004dd598288008009bab001304c001304600653330423370e900000109919299982219b87371a002901c0991924ca66608c0022930a998250238b18238018a998248218b1bae001304a001153330423370e900100109919299982219b87371a002901c0991924ca66608c0022930a998250238b18238018a998248240b1bae001304a001153304704816304b00230470013754002608c0022a660860882c608e00460860026ea8004dd600098208009bac0053040002375c008002446666660060720786ea40080048ccc01c88cdc01bad303f00200148000dd58008a40004444666600a6600c0080040024644460040066008002244a0024605644a666064002244a002266600660720024446004006260046068002444a66606066ebc008c00c004488c00800c489400488c0a8894ccc0c4004400c4cc010c0e0004c008c0cc00488cc00cc020008004c098888ccc0100048c00488ccc02088004c014008cc0180140044c01d262533302b00112250011322230020033232233001003002302e00230320012223330047000040024446660124466601800a00400200400240484460040024604244a666050002294054ccc09ccdd798178008018a5113002302a001223233003302e0013756605c6052002605c002446660066008e00008cc020c02c0400048c00c88dd3198019bab002375600246004446ea0cc00cdd68011bad0012223333004003220020020012301b30020012232322330010030022225333024001133021003002132323253330263375e00400226604866ec0008cc024c0c0018c0c000cccc02088008014c0a401054ccc098cdc81bae002375c00226604800c666601044002006605200800a26604800666660104400200c00a605200860580046056008605600244a6660440042002266660064400260520046048004002446660060120040024446600e660080060040024446464646466ec0dd48011ba600130050023005002375660500046eb8c09000488ccc00c018008004888cc010cc01400c00800488cc050008004888c8c8c8c8cdd81ba90023750002600a004600a0046eb4c090008dd718100009000919b81480000052411256616c6964206f757470757420646174756d002232323253330173370e90000010a511323232533301a3370e90000010a501533301a3370e90020010a5113371e0126eb8c088004c08c008c07c004dd50021810001180e0009baa002488120923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec002300d22533301400110041330113003301b001300230160014bd701119802118019bab301b001001223300323003375a60340020024601244a666020002294454cc010c00cc05c0044c008c04800488ccc03400800400c5281198050008010a51233300422533300b001120041322533300c3001002153301100616133004300f0032337200020066eb8c044c0480040049282490c756e736f72746564206d617000230022253330090011005133006300330100013002300b0012323002233002002001230022330020020014bd6f7b6302ba04912c7074727946726f6d28505075624b657948617368293a206d757374206265203238206279746573206c6f6e67005734aae7d241317074727946726f6d2850446174615265636f72645b5d293a206c697374206973206c6f6e676572207468616e207a65726f00574492012c7074727946726f6d285053637269707448617368293a206d757374206265203238206279746573206c6f6e6700573892013f7265616368656420656e64206f662073756d207768696c65207374696c6c206e6f7420686176696e6720666f756e642074686520636f6e7374727563746f72005573aae848c008dd5000aab9e1", "description": "agora:treasuryWithdrawalValidator", "params": [ "Ply.Core.Types:AsData#Data.Tagged:Tagged#GHC.TypeLits:\"AuthorityTokenTag\"#PlutusLedgerApi.V1.Value:CurrencySymbol" ], - "rawHex": "590b96010000323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330363370e900100109919299981c29981699299981c800880089981f2493373696e676c65417574686f72697479546f6b656e4275726e65643a204d757374206275726e2065786163746c79203120474154000013370e6602801e6eacc100c8c0f0c0f0c0f0004c0ec004c8cdc0a40000029001099299981c800880089981f249254f6e6c79206f6e6520474154206d7573742065786973742061742074686520696e70757473000013370e664466606c44466604200246002446664e0088004c014008cc0180140044c92000498c09c0080048c94ccc0e8c8cccccc064108114dd48091bab3043303e0012323232533303f3370e900000109929998200008800899822a48137617574686f72697479546f6b656e7356616c6964496e3a2047415420696e636f72726563746c79206c69766573206174205075624b6579000014a02944c120008c110004dd51822182298220010a51304300113301601137566084607a60860022a6607e9201355768696c6520636f756e74696e67204741547320617420696e707574733a20616c6c2047415473206d7573742062652076616c69640016323042303d001304200137586080002900109919299981d198161816919b8700148000ccc081c0999119981198123810020013301c2323232533303e53303532533303f00113304449010c45666665637420696e70757400001100133223375e6e9cc124008dd398248009823001804099299981f80089982224810c5075626b657920696e70757400001100132323253330413370e90010010a5014a26094004608c0026ea800440ec54ccc0f8c94ccc0fc0044cc1112410e547265617375727920696e7075740000110013302c0013758608c608200c26eacc118c10400854cc10d2410d556e6b6e6f776e20696e70757400163230463047001304500130453044303f00130440013758608400266038466054440020026eb0c108008cc0708c94ccc0f0cc0a8c8c114c118004c110004dd61822181f80209bab3044303f0011039304400153303f490116436865636b207265636569766572206f757470757473001333036222533303e00210011533303e001153304249011b556e61626c6520746f2065786861757374207265636569766572730016132533303e3302d2253303532533304100110011330464911056616c69642063726564656e7469616c000013232323253330443370e90010010991919299982399b8748000008528099baf374e0086e9c004c140008c130004dd50020991919299982399b8748008008528099baf374e0086e9c004c140008c130004dd5002182680118248009baa003323049304a00130480031325333041001100113304649010b56616c69642076616c756500001323375e6e98008dd30009bab304830430033046003133004304100330410021533043490117496e76616c6964207265636569766572206f7574707574001630463045001375860840046eb0c108c0f4c0f4004526153303f49132556e757365642074726561737572792073686f756c6420737461792061742074726561737572792076616c696461746f727300163042304100f37580242a6607a92128412073696e676c6520617574686f7269747920746f6b656e20686173206265656e206275726e656400163040303f00d303e001153303b491445061747465726e206d61746368206661696c75726520696e2027646f2720626c6f636b2061742061676f72612f41676f72612f4566666563742e68733a36333a352d32320016303f002303b00137546076606c012a6660660022930a9981b81a0b181a00199810119191919002a99981a19b87480000084c8c94ccc0d8cdc39b8d001480e04c8c9265333038001149854cc0f00e458c0e400c54cc0ec0d458dd7000981e0008a99981a19b87480080084c8c94ccc0d8cdc39b8d001480e04c8c9265333038001149854cc0f00e458c0e400c54cc0ec0e858dd7000981e0008a9981c81d0b181e801181c8009baa0013758002606e00260620066603a46464646400aa66606266e1d20000021323232323232323232323232324994ccc0f8004526153304203f16303f00632533303c3302e233030233710900000080080088008a99820a49184e6567617469766520616d6f756e7420696e2056616c75650016375600860666eac00ccc0d08cdd81919299981e29981999b87001480004cdc3800a4070260860062a660829201387074727946726f6d2843757272656e637953796d626f6c293a206d757374206265203238206279746573206c6f6e67206f7220656d7074790016371a0026eb8c104004c8c8c8c11c010c0d4dd598230019981b119bb032533303d337126e3400520401304400215330424901327074727946726f6d28546f6b656e4e616d65293a206d757374206265206174206d6f7374203332204279746573206c6f6e670016375c608600264608e0046eb4c118004004dd598220008009bab001303f001303900653330353370e900000109919299981b99b87371a002901c0991924ca6660720022930a9981e81d0b181d0018a9981e01b0b1bae001303d001153330353370e900100109919299981b99b87371a002901c0991924ca6660720022930a9981e81d0b181d0018a9981e01d8b1bae001303d001153303a03b16303e002303a001375400260720022a6606c06e2c6074004606c0026ea8004dd6000981a0009bac0053033002375c0080024466666600605805e6ea40080048ccc01c88cdc01bad303200200148000dd58008a40004444666600a6600c0080040024644460040066008002244a0024603c44a66604a002244a00226660066058002444600400626004604e002444a66604666ebc008c00c004488c00800c489400488c074894ccc090004400c4cc010c0ac004c008c09800488cc00cc034008004c064888ccc0100048c00488ccc02088004c014008cc0180140044c031262533301e00112250011322230020033232233001003002302100230250012223330047000040024446660084466600e00a00400200400246006446e98cc00cdd58011bab00123002223750660066eb4008dd6800911199980200191001001000918099801000911919119800801801111299980e00089980c8018010991919299980f19baf00200113301c3376000466012605000c60500066660104400400a60420082a66603c66e40dd70011bae00113301c006333300822001003302100400513301c003333300822001006005302100430240023023004302300122533301a002100113333003220013021002301c00200120122230020012300f22533301600114a02a66602a66ebcc07400400c52889801180c000911919801980e0009bab301c3017001301c0012300d22533301400110041330113003301b001300230160014bd701119802118019bab301b001001223300323003375a60340020024601244a666020002294454cc010c00cc05c0044c008c04800488ccc03400800400c5281198050008010a51233300422533300b001120041322533300c3001002153301100616133004300f0032337200020066eb8c044c0480040049282490c756e736f72746564206d617000230022253330090011005133006300330100013002300b0012323002233002002001230022330020020014bd6f7b6302ba04912c7074727946726f6d28505075624b657948617368293a206d757374206265203238206279746573206c6f6e67005734aae7d241317074727946726f6d2850446174615265636f72645b5d293a206c697374206973206c6f6e676572207468616e207a65726f00574492012c7074727946726f6d285053637269707448617368293a206d757374206265203238206279746573206c6f6e6700573892013f7265616368656420656e64206f662073756d207768696c65207374696c6c206e6f7420686176696e6720666f756e642074686520636f6e7374727563746f72005573aae848c008dd5000aab9e1", + "rawHex": "590d2401000032323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222223232323232323232323232323253330433370e9001001099192999822a9981d1929998230008800899825a493373696e676c65417574686f72697479546f6b656e4275726e65643a204d757374206275726e2065786163746c79203120474154000013370e6602801e6eacc134c8c124c124c124004c120004c0c520021325333046001100113304b491254f6e6c79206f6e6520474154206d7573742065786973742061742074686520696e70757473000013370e664466608644466604200246002446664e0088004c014008cc0180140044c92000498c0880080048c94ccc11cc8cccccc06413c148dd48091bab3050304b0012323232533304c3370e900000109929998268008800899829248137617574686f72697479546f6b656e7356616c6964496e3a2047415420696e636f72726563746c79206c69766573206174205075624b6579000014a02944c154008c144004dd51828982918288010a5130500011330160113756609e609460a00022a660989201355768696c6520636f756e74696e67204741547320617420696e707574733a20616c6c2047415473206d7573742062652076616c6964001632304f304a001304f0013758609a00290010991929998239981c981d119b8700148000ccc081c0998129980e11919192999825a99821192999826000899828a4810c45666665637420696e70757400001100133223375e6e9cc158008dd3982b00098298018040992999826000899828a4810c5075626b657920696e707574000011001323232533304e3370e90010010a5014a260ae00460a60026ea8004412054ccc12cc94ccc1300044cc1452410e547265617375727920696e70757400001100133027001375860a6609c00c26eacc14cc13800854cc1412410d556e6b6e6f776e20696e70757400163230533054001305200130523051304c00130510013758609e0026603846604a440020026eb0c13c008cc0708c8c94ccc1294cc0fcc94ccc12c00440044cc14124012453686f756c642073656e7420746f206f6e65206f66207468652074726561737572696573000013302632305330540013052002375860a4609a00a264a66609600220022660a0070002660706460a660a800260a400460a4609a00226eacc148004411cc130004c1440054cc131240116436865636b207265636569766572206f757470757473001333043222533304b00210011533304b001153304f49011b556e61626c6520746f206578686175737420726563656976657273001613232533304c330292253304353304332533304f00110011330544911056616c69642063726564656e7469616c000013232323253330523370e90010010991919299982a99b8748000008528099baf374e0086e9c004c178008c168004dd50020991919299982a99b8748008008528099baf374e0086e9c004c178008c168004dd5002182d801182b8009baa00332305730580013056004132533304f001100113305449010b56616c69642076616c7565000013322323304330442337109000000800998170010009bab3056003001132533304f001100113305403c0013303c002305630510033054004133005304f004304f003153305149117496e76616c6964207265636569766572206f75747075740016304e001305330520013758609e0046eb0c13cc128c128004526153304c490132556e757365642074726561737572792073686f756c6420737461792061742074726561737572792076616c696461746f72730016304f304e00f37580242a6609492128412073696e676c6520617574686f7269747920746f6b656e20686173206265656e206275726e65640016304d304c00d304b0011533048491445061747465726e206d61746368206661696c75726520696e2027646f2720626c6f636b2061742061676f72612f41676f72612f4566666563742e68733a36333a352d32320016304c0023048001375460906086012a6660800022930a998220208b182080199816919191919002a99982099b87480000084c8c94ccc10ccdc39b8d001480e04c8c9265333045001149854cc12411858c11800c54cc12010858dd700098248008a99982099b87480080084c8c94ccc10ccdc39b8d001480e04c8c9265333045001149854cc12411858c11800c54cc12011c58dd700098248008a998230238b182500118230009baa00137580026088002607c0066605446464646400aa66607c66e1d20000021323232323232323232323232324994ccc12c004526153304f04c16304c0063253330493303b23303d233710900000080080088008a99827249184e6567617469766520616d6f756e7420696e2056616c75650016375600860806eac00ccc1048cdd819192999824a9982019b87001480004cdc3800a4070260a00062a6609c9201387074727946726f6d2843757272656e637953796d626f6c293a206d757374206265203238206279746573206c6f6e67206f7220656d7074790016371a0026eb8c138004c8c8c8c150010c108dd5982980199821919bb032533304a337126e34005204013051002153304f4901327074727946726f6d28546f6b656e4e616d65293a206d757374206265206174206d6f7374203332204279746573206c6f6e670016375c60a00026460a80046eb4c14c004004dd598288008009bab001304c001304600653330423370e900000109919299982219b87371a002901c0991924ca66608c0022930a998250238b18238018a998248218b1bae001304a001153330423370e900100109919299982219b87371a002901c0991924ca66608c0022930a998250238b18238018a998248240b1bae001304a001153304704816304b00230470013754002608c0022a660860882c608e00460860026ea8004dd600098208009bac0053040002375c008002446666660060720786ea40080048ccc01c88cdc01bad303f00200148000dd58008a40004444666600a6600c0080040024644460040066008002244a0024605644a666064002244a002266600660720024446004006260046068002444a66606066ebc008c00c004488c00800c489400488c0a8894ccc0c4004400c4cc010c0e0004c008c0cc00488cc00cc020008004c098888ccc0100048c00488ccc02088004c014008cc0180140044c01d262533302b00112250011322230020033232233001003002302e00230320012223330047000040024446660124466601800a00400200400240484460040024604244a666050002294054ccc09ccdd798178008018a5113002302a001223233003302e0013756605c6052002605c002446660066008e00008cc020c02c0400048c00c88dd3198019bab002375600246004446ea0cc00cdd68011bad0012223333004003220020020012301b30020012232322330010030022225333024001133021003002132323253330263375e00400226604866ec0008cc024c0c0018c0c000cccc02088008014c0a401054ccc098cdc81bae002375c00226604800c666601044002006605200800a26604800666660104400200c00a605200860580046056008605600244a6660440042002266660064400260520046048004002446660060120040024446600e660080060040024446464646466ec0dd48011ba600130050023005002375660500046eb8c09000488ccc00c018008004888cc010cc01400c00800488cc050008004888c8c8c8c8cdd81ba90023750002600a004600a0046eb4c090008dd718100009000919b81480000052411256616c6964206f757470757420646174756d002232323253330173370e90000010a511323232533301a3370e90000010a501533301a3370e90020010a5113371e0126eb8c088004c08c008c07c004dd50021810001180e0009baa002488120923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec002300d22533301400110041330113003301b001300230160014bd701119802118019bab301b001001223300323003375a60340020024601244a666020002294454cc010c00cc05c0044c008c04800488ccc03400800400c5281198050008010a51233300422533300b001120041322533300c3001002153301100616133004300f0032337200020066eb8c044c0480040049282490c756e736f72746564206d617000230022253330090011005133006300330100013002300b0012323002233002002001230022330020020014bd6f7b6302ba04912c7074727946726f6d28505075624b657948617368293a206d757374206265203238206279746573206c6f6e67005734aae7d241317074727946726f6d2850446174615265636f72645b5d293a206c697374206973206c6f6e676572207468616e207a65726f00574492012c7074727946726f6d285053637269707448617368293a206d757374206265203238206279746573206c6f6e6700573892013f7265616368656420656e64206f662073756d207768696c65207374696c6c206e6f7420686176696e6720666f756e642074686520636f6e7374727563746f72005573aae848c008dd5000aab9e1", "role": "ValidatorRole", "version": "ScriptV2" } diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index 0e34238..32e7c79 100644 --- a/agora/Agora/Effect/TreasuryWithdrawal.hs +++ b/agora/Agora/Effect/TreasuryWithdrawal.hs @@ -15,9 +15,11 @@ module Agora.Effect.TreasuryWithdrawal ( import Agora.Effect (makeEffect) import Agora.SafeMoney (AuthorityTokenTag) -import Agora.Utils (psubtractSortedValue, puncurryTuple) +import Agora.Utils (pisSubValueOf, psubtractSortedValue, puncurryTuple) import Generics.SOP qualified as SOP +import Plutarch.Api.Internal.Hashing (hashData) import Plutarch.Api.V1 (PCredential, PCurrencySymbol, PValue) +import Plutarch.Api.V1.Address (PCredential (PPubKeyCredential)) import Plutarch.Api.V1.Value (pforgetPositive) import Plutarch.Api.V2 ( AmountGuarantees (Positive), @@ -27,6 +29,7 @@ import Plutarch.Api.V2 ( PTxOut, PValidator, ) +import Plutarch.Api.V2.Tx (POutputDatum (..)) import Plutarch.DataRepr ( PDataFields, ) @@ -42,6 +45,7 @@ import Plutarch.Extra.Tagged (PTagged) import Plutarch.Extra.Traversable (pfoldMap) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (PLifted)) import PlutusLedgerApi.V1.Credential (Credential) +import PlutusLedgerApi.V1.Scripts (DatumHash (DatumHash)) import PlutusLedgerApi.V1.Value (Value) import PlutusTx qualified import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( @@ -209,13 +213,18 @@ treasuryWithdrawalValidator = plam $ extractTreasuryOutputValue :: Term _ (PTxOut :--> PValue 'Sorted 'Positive) extractTreasuryOutputValue = plam $ - flip (pletFields @'["address", "value"]) $ \outputF -> + flip (pletFields @'["address", "value", "datum"]) $ \outputF -> let cred = pfield @"credential" # outputF.address isTreasuryOutput = - pelem # cred # datumF.treasuries + ptraceIfFalse "Should sent to one of the treasuries" $ + pelem # pdata cred # datumF.treasuries + + isDatumValid = + ptraceIfFalse "Valid output datum" $ + checkOutputDatum # cred # outputF.datum in pif - isTreasuryOutput + (isTreasuryOutput #&& isDatumValid) outputF.value mempty @@ -230,10 +239,11 @@ treasuryWithdrawalValidator = plam $ pure . popaque $ pconstant () where - -- Make sure that all the receivers get the correct payment and return the + -- Make sure that all the receivers get the correct payment, return the -- remaining outputs. + -- + -- This function is not hoisted cause it's used only once. checkReceiverOutputs :: - forall (s :: S). Term s ( PBuiltinList @@ -245,7 +255,7 @@ treasuryWithdrawalValidator = plam $ pelimList ( \r rs -> pelimList - ( \o os -> pletFields @'["value", "address"] o $ \oF -> + ( \o os -> pletFields @'["value", "address", "datum"] o $ \oF -> let isValidReceiverOutput = puncurryTuple # plam @@ -255,7 +265,9 @@ treasuryWithdrawalValidator = plam $ [ ptraceIfFalse "Valid credential" $ expCred #== pfield @"credential" # oF.address , ptraceIfFalse "Valid value" $ - expVal #== oF.value + pisSubValueOf # oF.value # expVal + , ptraceIfFalse "Valid output datum" $ + checkOutputDatum # expCred # oF.datum ] ) # pfromData r @@ -269,3 +281,17 @@ treasuryWithdrawalValidator = plam $ ) outputs receivers + + unitDatum = PlutusTx.toData () + + unitDatumHash = DatumHash $ hashData unitDatum + + checkOutputDatum :: Term s (PCredential :--> POutputDatum :--> PBool) + checkOutputDatum = phoistAcyclic $ plam $ \cred datum -> pmatch cred $ + \case + PPubKeyCredential _ -> pcon PTrue + _ -> pmatch datum $ \case + PNoOutputDatum _ -> pcon PFalse + POutputDatum _ -> pcon PTrue + POutputDatumHash ((pfield @"datumHash" #) -> hash) -> + pconstant unitDatumHash #== hash diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index b69231f..662e3d2 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -20,10 +20,12 @@ module Agora.Utils ( phashDatum, puncurryTuple, psubtractSortedValue, + pisSubValueOf, ) where -import Plutarch.Api.V1 (KeyGuarantees (Sorted)) +import Plutarch.Api.V1 (AmountGuarantees (Positive), KeyGuarantees (Sorted)) import Plutarch.Api.V1.AssocMap (punionWith) +import Plutarch.Api.V1.AssocMap qualified as AssocMap import Plutarch.Api.V1.Scripts (PDatumHash (PDatumHash)) import Plutarch.Api.V2 ( AmountGuarantees (NoGuarantees), @@ -37,9 +39,10 @@ import Plutarch.Crypto (pblake2b_256) import Plutarch.DataRepr (punDataSum) import Plutarch.Extra.AssetClass (PAssetClass, PAssetClassData, ptoScottEncoding) import Plutarch.Extra.Field (pletAll) +import Plutarch.Extra.Functor (PFunctor (pfmap)) import Plutarch.Extra.Tagged (PTagged) import Plutarch.Extra.Value (psymbolValueOf) -import Plutarch.Num ((#-)) +import Plutarch.Num (PNum (pnegate, (#+))) import Plutarch.Unsafe (punsafeCoerce, punsafeDowncast) import PlutusLedgerApi.V2 ( Address (Address), @@ -167,6 +170,31 @@ psubtractSortedValue :: psubtractSortedValue = phoistAcyclic $ plam $ \a b -> punsafeCoerce $ punionWith - # (punionWith # plam (#-)) + # (punionWith # plam (#+)) # pto a + #$ pfmap + # (pfmap # pnegate) # pto b + +pisPositiveValue :: + forall (kg :: KeyGuarantees) (am :: AmountGuarantees) (s :: S). + Term s (PValue kg am :--> PBool) +pisPositiveValue = + phoistAcyclic $ + plam $ + (AssocMap.pall # (AssocMap.pall # plam (0 #<)) #) + . pto + +pisSubValueOf :: + forall (s :: S). + Term + s + ( PValue 'Sorted 'Positive + :--> PValue 'Sorted 'Positive + :--> PBool + ) +pisSubValueOf = phoistAcyclic $ plam $ \vl vr -> + pisPositiveValue + #$ psubtractSortedValue + # vl + # vr diff --git a/bench.csv b/bench.csv index b73b63f..5d16ef3 100644 --- a/bench.csv +++ b/bench.csv @@ -1,9 +1,9 @@ name,cpu,mem,size -Agora/Effects/Treasury Withdrawal Effect/totally valid/effect,307988057,881427,4118 +Agora/Effects/Treasury Withdrawal Effect/totally valid/effect,404221466,1186248,4516 Agora/Effects/Treasury Withdrawal Effect/totally valid/treasury,55756262,158723,1778 Agora/Effects/Treasury Withdrawal Effect/totally valid/authority,12933097,37168,2361 -Agora/Effects/Treasury Withdrawal Effect/bad received value/treasury,55756262,158723,1778 -Agora/Effects/Treasury Withdrawal Effect/bad received value/authority,12933097,37168,2361 +Agora/Effects/Treasury Withdrawal Effect/bad received value/treasury,55756262,158723,1796 +Agora/Effects/Treasury Withdrawal Effect/bad received value/authority,12933097,37168,2379 Agora/Effects/Treasury Withdrawal Effect/bad receiver order/treasury,55756262,158723,1778 Agora/Effects/Treasury Withdrawal Effect/bad receiver order/authority,12933097,37168,2361 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,127096099,363203,11972