From b7eb7ffc3d6da99afe194205631a8f052308b7f4 Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Wed, 10 Apr 2024 18:13:29 -0400 Subject: [PATCH 1/5] Add Verifiers to TxDetail add _txDetail_verifiers field --- lib/ChainwebData/TxDetail.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ChainwebData/TxDetail.hs b/lib/ChainwebData/TxDetail.hs index 71844ed..e52abc8 100644 --- a/lib/ChainwebData/TxDetail.hs +++ b/lib/ChainwebData/TxDetail.hs @@ -49,6 +49,7 @@ data TxDetail = TxDetail , _txDetail_previousSteps :: Maybe [Text] , _txDetail_signers :: [Signer] , _txDetail_sigs :: [Sig] + , _txDetail_verifiers :: Maybe Value } deriving (Eq,Show,Generic) instance ToJSON TxDetail where From eb50a6bd64da18bb2f1d4a8f1a278437a324330b Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Thu, 11 Apr 2024 18:33:46 -0400 Subject: [PATCH 2/5] Add Verifier datatype;move SigCapability to separate module --- chainweb-api.cabal | 2 ++ lib/Chainweb/Api/SigCapability.hs | 28 ++++++++++++++++++++++++++ lib/Chainweb/Api/Signer.hs | 21 +------------------- lib/Chainweb/Api/Verifier.hs | 33 +++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 lib/Chainweb/Api/SigCapability.hs create mode 100644 lib/Chainweb/Api/Verifier.hs 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/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..9955745 100644 --- a/lib/Chainweb/Api/Signer.hs +++ b/lib/Chainweb/Api/Signer.hs @@ -1,34 +1,15 @@ {-# 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..405e79b --- /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 :: Maybe Text + , _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 + , fmap ("proof" .=) _verifier_proof + , Just $ "clist" .= _verifier_capList + ] + +instance FromJSON Verifier where + parseJSON = withObject "Verifier" $ \o -> Verifier + <$> o .:? "name" + <*> o .:? "proof" + <*> o .: "clist" From 2520b2bb6db73dde98328f566912c8e495eff3b4 Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Thu, 11 Apr 2024 19:10:43 -0400 Subject: [PATCH 3/5] update TxDetail datatype --- lib/ChainwebData/TxDetail.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ChainwebData/TxDetail.hs b/lib/ChainwebData/TxDetail.hs index e52abc8..20bb5e3 100644 --- a/lib/ChainwebData/TxDetail.hs +++ b/lib/ChainwebData/TxDetail.hs @@ -49,7 +49,7 @@ data TxDetail = TxDetail , _txDetail_previousSteps :: Maybe [Text] , _txDetail_signers :: [Signer] , _txDetail_sigs :: [Sig] - , _txDetail_verifiers :: Maybe Value + , _txDetail_verifiers :: Maybe [Verifier] } deriving (Eq,Show,Generic) instance ToJSON TxDetail where From eb57e84608fe91d171065c26a7877a01da952f75 Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Thu, 11 Apr 2024 19:13:17 -0400 Subject: [PATCH 4/5] fix TxDetail module compilation error --- lib/ChainwebData/TxDetail.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ChainwebData/TxDetail.hs b/lib/ChainwebData/TxDetail.hs index 20bb5e3..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) From fc84dcef8197bcfb5415c855421bb1921a749c9f Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Tue, 16 Apr 2024 23:34:59 -0400 Subject: [PATCH 5/5] make verifier proof field JSON for simplicity --- lib/Chainweb/Api/PactCommand.hs | 4 ++++ lib/Chainweb/Api/Signer.hs | 1 - lib/Chainweb/Api/Verifier.hs | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) 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/Signer.hs b/lib/Chainweb/Api/Signer.hs index 9955745..7d3890d 100644 --- a/lib/Chainweb/Api/Signer.hs +++ b/lib/Chainweb/Api/Signer.hs @@ -6,7 +6,6 @@ module Chainweb.Api.Signer where import Chainweb.Api.SigCapability import Data.Aeson import Data.Maybe (fromMaybe, catMaybes) -import Data.Ord import Data.Text (Text) ------------------------------------------------------------------------------ diff --git a/lib/Chainweb/Api/Verifier.hs b/lib/Chainweb/Api/Verifier.hs index 405e79b..9d18415 100644 --- a/lib/Chainweb/Api/Verifier.hs +++ b/lib/Chainweb/Api/Verifier.hs @@ -12,7 +12,7 @@ import Data.Text (Text) data Verifier = Verifier { _verifier_name :: Maybe Text - , _verifier_proof :: Maybe Text + , _verifier_proof :: Value , _verifier_capList :: [SigCapability] } deriving (Eq, Show) @@ -22,12 +22,12 @@ instance Ord Verifier where instance ToJSON Verifier where toJSON Verifier{..} = object $ catMaybes [ fmap ("name" .=) _verifier_name - , fmap ("proof" .=) _verifier_proof + , Just $ "proof" .= _verifier_proof , Just $ "clist" .= _verifier_capList ] instance FromJSON Verifier where parseJSON = withObject "Verifier" $ \o -> Verifier <$> o .:? "name" - <*> o .:? "proof" + <*> o .: "proof" <*> o .: "clist"