packages feed

cardano-addresses-4.0.0: test/Command/Script/PreimageSpec.hs

{-# 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"