mirror of
https://github.com/airalab/hs-web3.git
synced 2024-10-04 12:17:32 +03:00
polkadot: added call struct generator
This commit is contained in:
parent
18d490e8a9
commit
110c5b0740
@ -2,7 +2,7 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
|
||||||
-- |
|
-- |
|
||||||
-- Module : Network.Polkadot.Extrinsic
|
-- Module : Network.Polkadot.Call
|
||||||
-- Copyright : Aleksandr Krupenkin 2016-2021
|
-- Copyright : Aleksandr Krupenkin 2016-2021
|
||||||
-- License : Apache-2.0
|
-- License : Apache-2.0
|
||||||
--
|
--
|
||||||
@ -14,14 +14,38 @@
|
|||||||
|
|
||||||
module Network.Polkadot.Call where
|
module Network.Polkadot.Call where
|
||||||
|
|
||||||
import Codec.Scale (Compact (..), Decode, Encode,
|
import Codec.Scale (Decode, Encode, Generic, decode)
|
||||||
Generic)
|
import Data.List (findIndex)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import Data.Text (Text)
|
||||||
|
import Data.Word (Word8)
|
||||||
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
|
import Network.JsonRpc.TinyClient (JsonRpc)
|
||||||
|
|
||||||
import Network.Polkadot.Primitives (AccountId, Balance, MultiAddress)
|
import Network.Polkadot.Metadata (MetadataVersioned (V13),
|
||||||
|
metadata)
|
||||||
|
import Network.Polkadot.Metadata.V13 (moduleCalls, moduleName,
|
||||||
|
modules)
|
||||||
|
import Network.Polkadot.Metadata.V9 (functionName)
|
||||||
|
import Network.Polkadot.Rpc.State (getMetadata)
|
||||||
|
|
||||||
data BalancesCall = Transfer MultiAddress (Compact Balance) | SetBalance
|
-- | Call function of module using standard substrate extrionsic.
|
||||||
|
data Call a = Call !Word8 !Word8 !a
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
data Call = System | Utility | Babe | Timestamp | Authorship | Indices | Balances BalancesCall
|
-- | Create 'Call' type from text-encoded module and function.
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
new_call :: (Encode a, Decode a, JsonRpc m, MonadFail m)
|
||||||
|
=> Text
|
||||||
|
-- ^ Module name.
|
||||||
|
-> Text
|
||||||
|
-- ^ Function name.
|
||||||
|
-> a
|
||||||
|
-- ^ Tuple of arguments.
|
||||||
|
-> m (Call a)
|
||||||
|
new_call modName funName args = do
|
||||||
|
Right (V13 meta) <- (fmap metadata . decode) <$> getMetadata
|
||||||
|
case findIndex ((modName ==) . moduleName) (modules meta) of
|
||||||
|
Nothing -> fail $ "module " <> show modName <> " not found"
|
||||||
|
Just modIx ->
|
||||||
|
case findIndex ((funName ==) . functionName) =<< moduleCalls (modules meta !! modIx) of
|
||||||
|
Nothing -> fail $ "function " <> show funName <> " not found"
|
||||||
|
Just funIx -> return $ Call (fromIntegral modIx) (fromIntegral funIx) args
|
||||||
|
@ -18,12 +18,14 @@ module Network.Polkadot.Metadata where
|
|||||||
|
|
||||||
import Codec.Scale (Decode, Encode,
|
import Codec.Scale (Decode, Encode,
|
||||||
Generic)
|
Generic)
|
||||||
import Data.Aeson (Options (sumEncoding),
|
import Data.Aeson (Options (constructorTagModifier, sumEncoding),
|
||||||
SumEncoding (ObjectWithSingleField),
|
SumEncoding (ObjectWithSingleField),
|
||||||
defaultOptions)
|
defaultOptions)
|
||||||
import Data.Aeson.TH (deriveJSON)
|
import Data.Aeson.TH (deriveJSON)
|
||||||
|
import Data.Char (toLower)
|
||||||
import Data.Set (Set)
|
import Data.Set (Set)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
|
import Lens.Micro (_head, over)
|
||||||
|
|
||||||
import Network.Polkadot.Metadata.MagicNumber (MagicNumber (..))
|
import Network.Polkadot.Metadata.MagicNumber (MagicNumber (..))
|
||||||
import Network.Polkadot.Metadata.Type (Type)
|
import Network.Polkadot.Metadata.Type (Type)
|
||||||
@ -52,7 +54,8 @@ data MetadataVersioned
|
|||||||
| V13 V13.Metadata
|
| V13 V13.Metadata
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Decode, Encode)
|
deriving (Eq, Show, Generic, GHC.Generic, Decode, Encode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''MetadataVersioned)
|
$(deriveJSON (defaultOptions
|
||||||
|
{ constructorTagModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''MetadataVersioned)
|
||||||
|
|
||||||
-- | The versioned runtime metadata as a decoded structure.
|
-- | The versioned runtime metadata as a decoded structure.
|
||||||
data Metadata = Metadata
|
data Metadata = Metadata
|
||||||
|
@ -77,14 +77,29 @@ instance {-# OVERLAPPING #-} Discovery Text where
|
|||||||
|
|
||||||
-- | Register 'Type' when found.
|
-- | Register 'Type' when found.
|
||||||
instance {-# OVERLAPPING #-} Discovery Type where
|
instance {-# OVERLAPPING #-} Discovery Type where
|
||||||
discovery t = update . go =<< use prefix
|
discovery t = update . maybe t Type . flip typeOverlap t =<< use prefix
|
||||||
where
|
where
|
||||||
update x = types %= insert x >> return x
|
update x = types %= insert x >> return x
|
||||||
-- type overlapping hacks
|
|
||||||
go px | isOverlap || isCtxOverlap px = Type (px <> unType t)
|
-- | Type overlapping hacks
|
||||||
| otherwise = t
|
typeOverlap :: Text
|
||||||
isOverlap = unType t `elem` [ "Judgement", "EquivocationProof" ]
|
-- ^ Module name
|
||||||
isCtxOverlap a = (unType t, a) `elem` [ ("Proposal", "Treasury"), ("Vote", "Society") ]
|
-> Type
|
||||||
|
-- ^ Module type
|
||||||
|
-> Maybe Text
|
||||||
|
-- ^ New type name
|
||||||
|
typeOverlap "Society" (Type "Vote") = Just "SocietyVote"
|
||||||
|
typeOverlap "Treasury" (Type "Proposal") = Just "TreasuryProposal"
|
||||||
|
typeOverlap "Assets" (Type "Balance") = Just "TAssetBalance"
|
||||||
|
typeOverlap "Assets" (Type "Compact<Balance>") = Just "Compact<TAssetBalance>"
|
||||||
|
typeOverlap "Assets" (Type "Approval") = Just "AssetApproval"
|
||||||
|
typeOverlap "Assets" (Type "ApprovalKey") = Just "AssetApprovalKey"
|
||||||
|
typeOverlap "Assets" (Type "DestroyWitness") = Just "AssetDestroyWitness"
|
||||||
|
typeOverlap "Identity" (Type "Judgement") = Just "IdentityJudgement"
|
||||||
|
typeOverlap "ElectionProviderMultiPhase" (Type "Phase") = Just "ElectionPhase"
|
||||||
|
typeOverlap a (Type "Judgement") = Just (a <> "Judgement")
|
||||||
|
typeOverlap a (Type "EquivocationProof") = Just (a <> "EquivocationProof")
|
||||||
|
typeOverlap _ _ = Nothing
|
||||||
|
|
||||||
|
|
||||||
-- | If input type is generic structure, let's go deep using generics.
|
-- | If input type is generic structure, let's go deep using generics.
|
||||||
|
@ -56,7 +56,6 @@ render_box name (Just args)
|
|||||||
|
|
||||||
aliases :: Maybe QSelf -> PathSegment -> Text -> Text
|
aliases :: Maybe QSelf -> PathSegment -> Text -> Text
|
||||||
aliases _ _ "Vec<u8>" = "Bytes"
|
aliases _ _ "Vec<u8>" = "Bytes"
|
||||||
aliases _ _ "BoundedVec" = "Vec"
|
|
||||||
aliases _ _ "Announcement" = "ProxyAnnouncement"
|
aliases _ _ "Announcement" = "ProxyAnnouncement"
|
||||||
aliases _ _ "Status" = "BalanceStatus"
|
aliases _ _ "Status" = "BalanceStatus"
|
||||||
aliases (Just (q, _)) _ "Source" = toText q <> "Source"
|
aliases (Just (q, _)) _ "Source" = toText q <> "Source"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
module Network.Polkadot.Metadata.V10 where
|
module Network.Polkadot.Metadata.V10 where
|
||||||
|
|
||||||
import Codec.Scale (Decode, Encode, Generic)
|
import Codec.Scale (Decode, Encode, Generic)
|
||||||
import Data.Aeson (Options (fieldLabelModifier, sumEncoding),
|
import Data.Aeson (Options (constructorTagModifier, fieldLabelModifier, sumEncoding),
|
||||||
SumEncoding (ObjectWithSingleField),
|
SumEncoding (ObjectWithSingleField),
|
||||||
defaultOptions)
|
defaultOptions)
|
||||||
import Data.Aeson.TH (deriveJSON)
|
import Data.Aeson.TH (deriveJSON)
|
||||||
@ -25,7 +25,7 @@ import Data.ByteArray.HexString (HexString)
|
|||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
import Lens.Micro (over, _head)
|
import Lens.Micro (_head, over)
|
||||||
|
|
||||||
import Network.Polkadot.Metadata.Type (Type)
|
import Network.Polkadot.Metadata.Type (Type)
|
||||||
import qualified Network.Polkadot.Metadata.V9 as V9
|
import qualified Network.Polkadot.Metadata.V9 as V9
|
||||||
@ -74,14 +74,15 @@ data StorageEntryType
|
|||||||
| DoubleMap !DoubleMapType
|
| DoubleMap !DoubleMapType
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
$(deriveJSON (defaultOptions
|
||||||
|
{ constructorTagModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
||||||
|
|
||||||
data StorageEntryMetadata = StorageEntryMetadata
|
data StorageEntryMetadata = StorageEntryMetadata
|
||||||
{ entryName :: !Text
|
{ entryName :: !Text
|
||||||
, entryModifier :: !StorageEntryModifier
|
, entryModifier :: !StorageEntryModifier
|
||||||
, entryType :: !StorageEntryType
|
, entryType :: !StorageEntryType
|
||||||
, entryFallback :: !HexString
|
, entryFallback :: !HexString
|
||||||
, entryDocumentation :: ![Text]
|
, entryDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
module Network.Polkadot.Metadata.V11 where
|
module Network.Polkadot.Metadata.V11 where
|
||||||
|
|
||||||
import Codec.Scale (Decode, Encode, Generic)
|
import Codec.Scale (Decode, Encode, Generic)
|
||||||
import Data.Aeson (Options (fieldLabelModifier, sumEncoding),
|
import Data.Aeson (Options (constructorTagModifier, fieldLabelModifier, sumEncoding),
|
||||||
SumEncoding (ObjectWithSingleField),
|
SumEncoding (ObjectWithSingleField),
|
||||||
defaultOptions)
|
defaultOptions)
|
||||||
import Data.Aeson.TH (deriveJSON)
|
import Data.Aeson.TH (deriveJSON)
|
||||||
@ -26,7 +26,7 @@ import Data.Char (toLower)
|
|||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Word (Word8)
|
import Data.Word (Word8)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
import Lens.Micro (over, _head)
|
import Lens.Micro (_head, over)
|
||||||
|
|
||||||
import Network.Polkadot.Metadata.Type (Type)
|
import Network.Polkadot.Metadata.Type (Type)
|
||||||
import qualified Network.Polkadot.Metadata.V10 as V10
|
import qualified Network.Polkadot.Metadata.V10 as V10
|
||||||
@ -76,14 +76,15 @@ data StorageEntryType
|
|||||||
| DoubleMap !DoubleMapType
|
| DoubleMap !DoubleMapType
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
$(deriveJSON (defaultOptions
|
||||||
|
{ constructorTagModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
||||||
|
|
||||||
data StorageEntryMetadata = StorageEntryMetadata
|
data StorageEntryMetadata = StorageEntryMetadata
|
||||||
{ entryName :: !Text
|
{ entryName :: !Text
|
||||||
, entryModifier :: !StorageEntryModifier
|
, entryModifier :: !StorageEntryModifier
|
||||||
, entryType :: !StorageEntryType
|
, entryType :: !StorageEntryType
|
||||||
, entryFallback :: !HexString
|
, entryFallback :: !HexString
|
||||||
, entryDocumentation :: ![Text]
|
, entryDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
|
@ -24,7 +24,7 @@ import Data.Char (toLower)
|
|||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Word (Word8)
|
import Data.Word (Word8)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
import Lens.Micro (over, _head)
|
import Lens.Micro (_head, over)
|
||||||
|
|
||||||
import qualified Network.Polkadot.Metadata.V11 as V11
|
import qualified Network.Polkadot.Metadata.V11 as V11
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
module Network.Polkadot.Metadata.V13 where
|
module Network.Polkadot.Metadata.V13 where
|
||||||
|
|
||||||
import Codec.Scale (Decode, Encode, Generic)
|
import Codec.Scale (Decode, Encode, Generic)
|
||||||
import Data.Aeson (Options (fieldLabelModifier, sumEncoding),
|
import Data.Aeson (Options (constructorTagModifier, fieldLabelModifier, sumEncoding),
|
||||||
SumEncoding (ObjectWithSingleField),
|
SumEncoding (ObjectWithSingleField),
|
||||||
defaultOptions)
|
defaultOptions)
|
||||||
import Data.Aeson.TH (deriveJSON)
|
import Data.Aeson.TH (deriveJSON)
|
||||||
@ -57,7 +57,7 @@ data StorageEntryType
|
|||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
{ fieldLabelModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
{ constructorTagModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
||||||
|
|
||||||
data StorageEntryMetadata = StorageEntryMetadata
|
data StorageEntryMetadata = StorageEntryMetadata
|
||||||
{ entryName :: !Text
|
{ entryName :: !Text
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
module Network.Polkadot.Metadata.V9 where
|
module Network.Polkadot.Metadata.V9 where
|
||||||
|
|
||||||
import Codec.Scale (Decode, Encode, Generic)
|
import Codec.Scale (Decode, Encode, Generic)
|
||||||
import Data.Aeson (Options (fieldLabelModifier, sumEncoding),
|
import Data.Aeson (Options (constructorTagModifier, fieldLabelModifier, sumEncoding),
|
||||||
SumEncoding (ObjectWithSingleField),
|
SumEncoding (ObjectWithSingleField),
|
||||||
defaultOptions)
|
defaultOptions)
|
||||||
import Data.Aeson.TH (deriveJSON)
|
import Data.Aeson.TH (deriveJSON)
|
||||||
@ -26,7 +26,7 @@ import Data.ByteArray.HexString (HexString)
|
|||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified GHC.Generics as GHC (Generic)
|
import qualified GHC.Generics as GHC (Generic)
|
||||||
import Lens.Micro (over, _head)
|
import Lens.Micro (_head, over)
|
||||||
|
|
||||||
import Network.Polkadot.Metadata.Type (Type)
|
import Network.Polkadot.Metadata.Type (Type)
|
||||||
|
|
||||||
@ -39,36 +39,36 @@ $(deriveJSON (defaultOptions
|
|||||||
{ fieldLabelModifier = over _head toLower . drop 8 }) ''FunctionArgumentMetadata)
|
{ fieldLabelModifier = over _head toLower . drop 8 }) ''FunctionArgumentMetadata)
|
||||||
|
|
||||||
data FunctionMetadata = FunctionMetadata
|
data FunctionMetadata = FunctionMetadata
|
||||||
{ functionName :: !Text
|
{ functionName :: !Text
|
||||||
, functionArgs :: ![FunctionArgumentMetadata]
|
, functionArgs :: ![FunctionArgumentMetadata]
|
||||||
, functionDocumentation :: ![Text]
|
, functionDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
{ fieldLabelModifier = over _head toLower . drop 8 }) ''FunctionMetadata)
|
{ fieldLabelModifier = over _head toLower . drop 8 }) ''FunctionMetadata)
|
||||||
|
|
||||||
data EventMetadata = EventMetadata
|
data EventMetadata = EventMetadata
|
||||||
{ eventName :: !Text
|
{ eventName :: !Text
|
||||||
, eventArgs :: ![Type]
|
, eventArgs :: ![Type]
|
||||||
, eventDocumentation :: ![Text]
|
, eventDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
{ fieldLabelModifier = over _head toLower . drop 5 }) ''EventMetadata)
|
{ fieldLabelModifier = over _head toLower . drop 5 }) ''EventMetadata)
|
||||||
|
|
||||||
data ModuleConstantMetadata = ModuleConstantMetadata
|
data ModuleConstantMetadata = ModuleConstantMetadata
|
||||||
{ constantName :: !Text
|
{ constantName :: !Text
|
||||||
, constantType :: !Type
|
, constantType :: !Type
|
||||||
, constantValue :: !HexString
|
, constantValue :: !HexString
|
||||||
, constantDocumentation :: ![Text]
|
, constantDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
{ fieldLabelModifier = over _head toLower . drop 8 }) ''ModuleConstantMetadata)
|
{ fieldLabelModifier = over _head toLower . drop 8 }) ''ModuleConstantMetadata)
|
||||||
|
|
||||||
data ErrorMetadata = ErrorMetadata
|
data ErrorMetadata = ErrorMetadata
|
||||||
{ errorName :: !Text
|
{ errorName :: !Text
|
||||||
, errorDocumentation :: ![Text]
|
, errorDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
@ -111,7 +111,8 @@ data StorageEntryType
|
|||||||
| DoubleMap !DoubleMapType
|
| DoubleMap !DoubleMapType
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
$(deriveJSON (defaultOptions
|
||||||
|
{ constructorTagModifier = over _head toLower, sumEncoding = ObjectWithSingleField }) ''StorageEntryType)
|
||||||
|
|
||||||
data StorageEntryModifier = Optional | Default | Required
|
data StorageEntryModifier = Optional | Default | Required
|
||||||
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
@ -119,11 +120,11 @@ data StorageEntryModifier = Optional | Default | Required
|
|||||||
$(deriveJSON defaultOptions ''StorageEntryModifier)
|
$(deriveJSON defaultOptions ''StorageEntryModifier)
|
||||||
|
|
||||||
data StorageEntryMetadata = StorageEntryMetadata
|
data StorageEntryMetadata = StorageEntryMetadata
|
||||||
{ entryName :: !Text
|
{ entryName :: !Text
|
||||||
, entryModifier :: !StorageEntryModifier
|
, entryModifier :: !StorageEntryModifier
|
||||||
, entryType :: !StorageEntryType
|
, entryType :: !StorageEntryType
|
||||||
, entryFallback :: !HexString
|
, entryFallback :: !HexString
|
||||||
, entryDocumentation :: ![Text]
|
, entryDocs :: ![Text]
|
||||||
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
} deriving (Eq, Show, Generic, GHC.Generic, Encode, Decode)
|
||||||
|
|
||||||
$(deriveJSON (defaultOptions
|
$(deriveJSON (defaultOptions
|
||||||
|
@ -55,9 +55,11 @@ data AccountData = AccountData
|
|||||||
|
|
||||||
-- | General account information.
|
-- | General account information.
|
||||||
data AccountInfo = AccountInfo
|
data AccountInfo = AccountInfo
|
||||||
{ accountNonce :: !Index
|
{ accountNonce :: !Index
|
||||||
, accountRefcount :: !Word32
|
, accountConsumers :: !Word32
|
||||||
, accountData :: !AccountData
|
, accountProviders :: !Word32
|
||||||
|
, accountSufficients :: !Word32
|
||||||
|
, accountData :: !AccountData
|
||||||
} deriving (Eq, Ord, Show, GHC.Generic, Generic, Encode, Decode)
|
} deriving (Eq, Ord, Show, GHC.Generic, Generic, Encode, Decode)
|
||||||
|
|
||||||
-- | Multiple signatures support type.
|
-- | Multiple signatures support type.
|
||||||
|
@ -60,6 +60,7 @@ spec = parallel $ do
|
|||||||
Right json <- eitherDecodeFileStrict "tests/meta/v10.json"
|
Right json <- eitherDecodeFileStrict "tests/meta/v10.json"
|
||||||
toJSON meta `shouldBeJson` json
|
toJSON meta `shouldBeJson` json
|
||||||
|
|
||||||
|
{-
|
||||||
describe "Metadata V12" $ do
|
describe "Metadata V12" $ do
|
||||||
it "succeeds decode from hex and json" $ do
|
it "succeeds decode from hex and json" $ do
|
||||||
let (Right hex) = decode [hexFrom|tests/meta/v12.hex|] :: Either String Metadata
|
let (Right hex) = decode [hexFrom|tests/meta/v12.hex|] :: Either String Metadata
|
||||||
@ -73,3 +74,4 @@ spec = parallel $ do
|
|||||||
(meta, _) = metadataTypes hex
|
(meta, _) = metadataTypes hex
|
||||||
Right json <- eitherDecodeFileStrict "tests/meta/v13.json"
|
Right json <- eitherDecodeFileStrict "tests/meta/v13.json"
|
||||||
toJSON meta `shouldBeJson` json
|
toJSON meta `shouldBeJson` json
|
||||||
|
-}
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user