diff --git a/chainweb-api.cabal b/chainweb-api.cabal index 694f9eb..db5b6b6 100644 --- a/chainweb-api.cabal +++ b/chainweb-api.cabal @@ -69,9 +69,11 @@ library Chainweb.Api.Payload Chainweb.Api.RespItems Chainweb.Api.Sig + Chainweb.Api.SigCapability Chainweb.Api.Signer Chainweb.Api.StringEncoded Chainweb.Api.Transaction + Chainweb.Api.Verifier ChainwebData.Api ChainwebData.EventDetail ChainwebData.TransferDetail diff --git a/lib/Chainweb/Api/PactCommand.hs b/lib/Chainweb/Api/PactCommand.hs index 94b1b8e..9784ebe 100644 --- a/lib/Chainweb/Api/PactCommand.hs +++ b/lib/Chainweb/Api/PactCommand.hs @@ -10,11 +10,13 @@ import Data.Text (Text) import Chainweb.Api.ChainwebMeta import Chainweb.Api.Payload import Chainweb.Api.Signer +import Chainweb.Api.Verifier ------------------------------------------------------------------------------ data PactCommand = PactCommand { _pactCommand_payload :: Payload , _pactCommand_signers :: [Signer] + , _pactCommand_verifiers :: Maybe [Verifier] , _pactCommand_meta :: ChainwebMeta , _pactCommand_nonce :: Text , _pactCommand_network :: Maybe Text @@ -24,6 +26,7 @@ instance ToJSON PactCommand where toJSON PactCommand{..} = object [ "payload" .= _pactCommand_payload , "signers" .= _pactCommand_signers + , "verifiers" .= _pactCommand_verifiers , "meta" .= _pactCommand_meta , "nonce" .= _pactCommand_nonce , "networkId" .= _pactCommand_network @@ -33,6 +36,7 @@ instance FromJSON PactCommand where parseJSON = withObject "PactCommand" $ \o -> PactCommand <$> o .: "payload" <*> o .: "signers" + <*> o .: "verifiers" <*> o .: "meta" <*> o .: "nonce" <*> o .: "networkId" diff --git a/lib/Chainweb/Api/SigCapability.hs b/lib/Chainweb/Api/SigCapability.hs new file mode 100644 index 0000000..f2fa3dc --- /dev/null +++ b/lib/Chainweb/Api/SigCapability.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +module Chainweb.Api.SigCapability where + +------------------------------------------------------------------------------ +import Data.Aeson +import Data.Ord (comparing) +import Data.Text (Text) +------------------------------------------------------------------------------ + +data SigCapability = SigCapability + { _scName :: Text + , _scArgs :: [Value] + } deriving (Eq,Show) + +instance Ord SigCapability where + compare = comparing _scName + +instance ToJSON SigCapability where + toJSON SigCapability{..} = object + [ "name" .= _scName + , "args" .= _scArgs + ] + +instance FromJSON SigCapability where + parseJSON = withObject "SigCapability" $ \o -> SigCapability + <$> o .: "name" + <*> o .: "args" diff --git a/lib/Chainweb/Api/Signer.hs b/lib/Chainweb/Api/Signer.hs index 3636dad..7d3890d 100644 --- a/lib/Chainweb/Api/Signer.hs +++ b/lib/Chainweb/Api/Signer.hs @@ -1,34 +1,14 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} - module Chainweb.Api.Signer where ------------------------------------------------------------------------------ +import Chainweb.Api.SigCapability import Data.Aeson import Data.Maybe (fromMaybe, catMaybes) -import Data.Ord import Data.Text (Text) ------------------------------------------------------------------------------ -data SigCapability = SigCapability - { _scName :: Text - , _scArgs :: [Value] - } deriving (Eq,Show) - -instance Ord SigCapability where - compare = comparing _scName - -instance ToJSON SigCapability where - toJSON SigCapability{..} = object - [ "name" .= _scName - , "args" .= _scArgs - ] - -instance FromJSON SigCapability where - parseJSON = withObject "SigCapability" $ \o -> SigCapability - <$> o .: "name" - <*> o .: "args" - data Signer = Signer { _signer_addr :: Maybe Text , _signer_scheme :: Maybe Text diff --git a/lib/Chainweb/Api/Verifier.hs b/lib/Chainweb/Api/Verifier.hs new file mode 100644 index 0000000..9d18415 --- /dev/null +++ b/lib/Chainweb/Api/Verifier.hs @@ -0,0 +1,33 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +module Chainweb.Api.Verifier where + +------------------------------------------------------------------------------ +import Chainweb.Api.SigCapability +import Data.Aeson +import Data.Maybe (catMaybes) +import Data.Ord +import Data.Text (Text) +------------------------------------------------------------------------------ + +data Verifier = Verifier + { _verifier_name :: Maybe Text + , _verifier_proof :: Value + , _verifier_capList :: [SigCapability] + } deriving (Eq, Show) + +instance Ord Verifier where + compare = comparing _verifier_name + +instance ToJSON Verifier where + toJSON Verifier{..} = object $ catMaybes + [ fmap ("name" .=) _verifier_name + , Just $ "proof" .= _verifier_proof + , Just $ "clist" .= _verifier_capList + ] + +instance FromJSON Verifier where + parseJSON = withObject "Verifier" $ \o -> Verifier + <$> o .:? "name" + <*> o .: "proof" + <*> o .: "clist" diff --git a/lib/ChainwebData/TxDetail.hs b/lib/ChainwebData/TxDetail.hs index 71844ed..3cf0970 100644 --- a/lib/ChainwebData/TxDetail.hs +++ b/lib/ChainwebData/TxDetail.hs @@ -4,6 +4,7 @@ module ChainwebData.TxDetail where import Chainweb.Api.Signer (Signer) import Chainweb.Api.Sig (Sig) +import Chainweb.Api.Verifier (Verifier) import ChainwebData.Util import Data.Aeson import Data.Text (Text) @@ -49,6 +50,7 @@ data TxDetail = TxDetail , _txDetail_previousSteps :: Maybe [Text] , _txDetail_signers :: [Signer] , _txDetail_sigs :: [Sig] + , _txDetail_verifiers :: Maybe [Verifier] } deriving (Eq,Show,Generic) instance ToJSON TxDetail where