{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE QuasiQuotes #-} module Command.Script.PreimageSpec ( spec ) where import Prelude import Cardano.Address.Script ( ErrValidateScript (..), prettyErrValidateScript ) import Data.String.Interpolate ( iii ) import Test.Hspec ( Spec, SpecWith, it, shouldBe, shouldContain ) import Test.Utils ( cli, describeCmd ) spec :: Spec spec = do describeCmd [ "script", "preimage" ] $ do specScriptPreimageProper "008201818200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10d" [iii|all [ #{verKeyH1} ]|] specScriptPreimageProper "008201818200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10d" ("all [ " <>verKeyH1<>" ] ") specScriptPreimageProper "008201838200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10\ \d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f01135380820058\ \1cf51d0d9716bee309bb109f954ac488e1b3c06fcc28f56fe906a7ae74" [iii|all [ #{verKeyH1}, #{verKeyH2}, #{verKeyH3} ]|] specScriptPreimageProper "008202818200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10d" [iii|any [ #{verKeyH1} ]|] specScriptPreimageProper "008202838200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10\ \d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f01135380820058\ \1cf51d0d9716bee309bb109f954ac488e1b3c06fcc28f56fe906a7ae74" [iii|any [ #{verKeyH1}, #{verKeyH2}, #{verKeyH3} ]|] specScriptPreimageProper "00830301838200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef\ \10d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f011353808200\ \581cf51d0d9716bee309bb109f954ac488e1b3c06fcc28f56fe906a7ae74" [iii|at_least 1 [ #{verKeyH1}, #{verKeyH2}, #{verKeyH3} ]|] specScriptPreimageProper "00830301828200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef\ \10d8201828200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f011353\ \808200581cf51d0d9716bee309bb109f954ac488e1b3c06fcc28f56fe906a7ae74" [iii|at_least 1 [ #{verKeyH1}, all [ #{verKeyH2}, #{verKeyH3} ] ]|] specScriptPreimageProper "008200581c4e73a20ff3c0ae90fbc95f278d42721b1f763e055024a0e6be6aeb71" [iii|#{verKeyH4}|] specScriptInvalid Malformed [iii|wrong [ #{verKeyH1} ]|] specScriptInvalid Malformed [iii|any [ #{verKeyH1}, ]|] specScriptPreimageProper "00830304838200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef\ \10d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f011353808200\ \581cf51d0d9716bee309bb109f954ac488e1b3c06fcc28f56fe906a7ae74" [iii|at_least 4 [ #{verKeyH1}, #{verKeyH2}, #{verKeyH3} ]|] specScriptPreimageProper "00830301828200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef\ \10d830302818200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f01135380" [iii|at_least 1 [ #{verKeyH1}, at_least 2 [ #{verKeyH2} ] ]|] specScriptPreimageProper "00820180" [iii|all []|] specScriptPreimageProper "008202828200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10d820180" [iii|any [ #{verKeyH1}, all [] ]|] specScriptPreimageProper "00830300828200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10\ \d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f01135380" [iii|at_least 0 [ #{verKeyH1}, #{verKeyH2} ]|] specScriptPreimageProper "00830301848200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10\ \d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f0113538082040a82051819" [iii|at_least 1 [ #{verKeyH1}, #{verKeyH2}, active_from 10, active_until 25 ]|] specScriptPreimageProper "008202838200581c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10\ \d8200581c2445facc08d975d9d965d360dbe0fa63688ccc8f70fd7e1f01135380820058\ \1c1196fe3062e96b78dd959058f5adad44dd663519200f2495d17ef10d" [iii|any [ #{verKeyH1}, #{verKeyH2}, #{verKeyH1}]|] specScriptInvalid Malformed [iii|script_vkh18srsxr3khll7vl3w9mqfu55n6wzxxlxjq8egs9|] specScriptInvalid Malformed [iii|any [ #{verKeyH1}, #{verKeyH2}, active_from a]|] specScriptPreimageProper "008201828200581c80686bb3727f602581309117d8e1cc07a410e14376d3882101d299da8204191389" [iii|all [ #{verKeyH5}, active_from 5001]|] specScriptPreimageProper "008201828200581c80686bb3727f602581309117d8e1cc07a410e14376d3882101d299da8204191389" [iii|all [ #{verKey5}, active_from 5001]|] specScriptPreimageProper "008201828200581c80686bb3727f602581309117d8e1cc07a410e14376d3882101d299da8204191389" [iii|all [ #{xVerKey5}, active_from 5001]|] specScriptPreimageProper "008201828200581c6f88e8e9411b27dcd1383bf513373d0ba050ac4d44ac06d5b6881adc8204191389" [iii|all [ #{verKeyH6}, active_from 5001]|] specScriptPreimageProper "008201828200581c358b52181c48f748492ca4697fcec43e12548914b30311d4022b69918204191389" [iii|all [ #{verKeyH7}, active_from 5001]|] specScriptPreimageProper "008202828200581c80686bb3727f602581309117d8e1cc07a410e14376d3882101d299da82018282041913898205191771" [iii|any [ #{verKeyH5}, all [ active_from 5001, active_until 6001]]|] specScriptPreimageProper "008202828200581c6f88e8e9411b27dcd1383bf513373d0ba050ac4d44ac06d5b6881adc82018282041913898205191771" [iii|any [ #{verKeyH6}, all [ active_from 5001, active_until 6001]]|] specScriptPreimageProper "008202828200581c358b52181c48f748492ca4697fcec43e12548914b30311d4022b699182018282041913898205191771" [iii|any [ #{verKeyH7}, all [ active_from 5001, active_until 6001]]|] specScriptPreimageProper :: String -> String -> SpecWith () specScriptPreimageProper expected script = it (script <> " => " <> expected) $ do out <- cli ["script", "preimage", script] "" out `shouldBe` expected specScriptInvalid :: ErrValidateScript -> String -> SpecWith () specScriptInvalid errMsg script = it (script <> " => " <> show errMsg) $ do (out, err) <- cli ["script", "preimage", script] "" out `shouldBe` ("" :: String) err `shouldContain` (prettyErrValidateScript errMsg) verKeyH1 :: String verKeyH1 = "addr_shared_vkh1zxt0uvrza94h3hv4jpv0ttddgnwkvdgeyq8jf9w30mcs6y8w3nq" verKeyH2 :: String verKeyH2 = "addr_shared_vkh1y3zl4nqgm96ankt96dsdhc86vd5geny0wr7hu8cpzdfcqskq2cp" verKeyH3 :: String verKeyH3 = "addr_shared_vkh175wsm9ckhm3snwcsn72543yguxeuqm7v9r6kl6gx57h8gdydcd9" verKeyH4 :: String verKeyH4 = "addr_shared_vkh1fee6yrlnczhfp77ftunc6snjrv0hv0s92qj2pe47dt4hz8ajp6a" verKeyH5 :: String verKeyH5 = "drep1y2qxs6anwflkqfvpxzg30k8pesr6gy8pgdmd8zppq8ffnksapjznm" verKey5 :: String verKey5 = "drep_vk1mg7xae48d7z4nntd35tey0jmclxaavwmk3kw2lkkt07p3s3x3yysra6588" xVerKey5 :: String xVerKey5 = "drep_xvk1mg7xae48d7z4nntd35tey0jmclxaavwmk3kw2lkkt07p3s3x3yy45805manx2kj2neg40kfpy9em36vnkjfm4fw09k66837unrvd70qq8ewzf" verKeyH6 :: String verKeyH6 = "cc_cold1zfhc368fgydj0hx38qal2yeh8596q59vf4z2cpk4k6yp4hqy3mpsx" verKeyH7 :: String verKeyH7 = "cc_hot1qg6ck5scr3y0wjzf9jjxjl7wcslpy4yfzjesxyw5qg4knyg9ckh0d"