From c6e92609ce72704cc1b19fefbd6e561ff092fc08 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Thu, 15 Oct 2020 17:41:58 +0200 Subject: [PATCH 01/29] Add `delistPools` to Pool DBLayer This is the first step for garbage collecting stake pools based on SMASH delisting. X-JIRA-Ticket: ADP-478 --- .../Scenario/API/Shelley/StakePools.hs | 4 ++ lib/core/cardano-wallet-core.cabal | 1 + lib/core/src/Cardano/Pool/DB.hs | 5 ++ lib/core/src/Cardano/Pool/DB/MVar.hs | 4 ++ lib/core/src/Cardano/Pool/DB/Model.hs | 12 ++++- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 50 +++++++++++++++++-- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 1 + .../src/Cardano/Wallet/Primitive/Types.hs | 5 +- .../test/unit/Cardano/Pool/DB/Arbitrary.hs | 1 + .../test/unit/Cardano/Pool/DB/Properties.hs | 1 + .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 1 + 11 files changed, 79 insertions(+), 6 deletions(-) diff --git a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs index ca53557ffb3..ea4da61857a 100644 --- a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs +++ b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs @@ -937,24 +937,28 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do , name = "Genesis Pool A" , description = Nothing , homepage = "https://iohk.io" + , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPB") , name = "Genesis Pool B" , description = Nothing , homepage = "https://iohk.io" + , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPC") , name = "Genesis Pool C" , description = Just "Lorem Ipsum Dolor Sit Amet." , homepage = "https://iohk.io" + , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPD") , name = "Genesis Pool D" , description = Just "Lorem Ipsum Dolor Sit Amet." , homepage = "https://iohk.io" + , delisted = False } ] diff --git a/lib/core/cardano-wallet-core.cabal b/lib/core/cardano-wallet-core.cabal index 3787b4fbf5d..17cc4d3c5e5 100644 --- a/lib/core/cardano-wallet-core.cabal +++ b/lib/core/cardano-wallet-core.cabal @@ -94,6 +94,7 @@ library , statistics , stm , streaming-commons + , string-interpolate , string-qq , template-haskell , text diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index d6c965aa6bf..5d9d3d300f6 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -211,6 +211,11 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer -> stm () -- ^ Remove all entries of slot ids newer than the argument + , delistPools + :: [PoolId] + -> stm () + -- ^ Mark pools as delisted + -- , removePools :: [PoolId] -> stm () diff --git a/lib/core/src/Cardano/Pool/DB/MVar.hs b/lib/core/src/Cardano/Pool/DB/MVar.hs index a5784911a56..f40e7267bce 100644 --- a/lib/core/src/Cardano/Pool/DB/MVar.hs +++ b/lib/core/src/Cardano/Pool/DB/MVar.hs @@ -26,6 +26,7 @@ import Cardano.Pool.DB.Model , emptyPoolDatabase , mCleanDatabase , mCleanPoolMetadata + , mDelistPools , mListHeaders , mListPoolLifeCycleData , mListRegisteredPools @@ -146,6 +147,9 @@ newDBLayer timeInterpreter = do rollbackTo = void . alterPoolDB (const Nothing) db . mRollbackTo timeInterpreter + delistPools = + void . alterPoolDB (const Nothing) db . mDelistPools + removePools = void . alterPoolDB (const Nothing) db . mRemovePools diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index cdd60403b9a..fb4e37e1b5c 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -60,6 +60,7 @@ module Cardano.Pool.DB.Model , mRollbackTo , mReadCursor , mRemovePools + , mDelistPools , mRemoveRetiredPools , mReadSettings , mPutSettings @@ -82,11 +83,13 @@ import Cardano.Wallet.Primitive.Types , PoolRetirementCertificate (..) , Settings , SlotNo (..) - , StakePoolMetadata + , StakePoolMetadata (..) , StakePoolMetadataHash , StakePoolMetadataUrl , defaultSettings ) +import Control.Monad + ( forM_ ) import Control.Monad.Trans.Class ( lift ) import Control.Monad.Trans.State.Strict @@ -414,6 +417,13 @@ mRollbackTo ti point = do | point' <= getPoint point = Just v | otherwise = Nothing +mDelistPools :: [PoolId] -> ModelOp () +mDelistPools poolsToDelist = + forM_ poolsToDelist $ \pool -> do + mhash <- (>>= (fmap snd . poolMetadata . snd)) <$> mReadPoolRegistration pool + forM_ mhash $ \hash -> modify #metadata + $ Map.adjust (\m -> m { delisted = True }) hash + mRemovePools :: [PoolId] -> ModelOp () mRemovePools poolsToRemove = do modify #distributions diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index dcfb548703c..2bda964d403 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -60,7 +60,7 @@ import Cardano.Wallet.Primitive.Types ( BlockHeader (..) , CertificatePublicationTime (..) , EpochNo (..) - , PoolId + , PoolId (..) , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) , PoolRetirementCertificate (..) @@ -89,13 +89,15 @@ import Data.Functor import Data.Generics.Internal.VL.Lens ( view ) import Data.List - ( foldl' ) + ( foldl', intercalate ) import Data.Map.Strict ( Map ) import Data.Quantity ( Percentage (..), Quantity (..) ) import Data.Ratio ( denominator, numerator, (%) ) +import Data.String.Interpolate + ( i ) import Data.String.QQ ( s ) import Data.Text @@ -115,6 +117,7 @@ import Database.Persist.Sql , fromPersistValue , insertMany_ , insert_ + , rawExecute , rawSql , repsert , selectFirst @@ -139,6 +142,7 @@ import Cardano.Pool.DB.Sqlite.TH hiding import qualified Cardano.Pool.DB.Sqlite.TH as TH import qualified Cardano.Wallet.Primitive.Types as W +import qualified Data.ByteString.Char8 as B8 import qualified Data.Map.Strict as Map import qualified Data.Text as T import qualified Database.Sqlite as Sqlite @@ -393,10 +397,10 @@ newDBLayer trace fp timeInterpreter = do (PoolMetadataFetchAttempts hash url retryAfter $ retryCount + 1) putPoolMetadata hash metadata = do - let StakePoolMetadata{ticker,name,description,homepage} = metadata + let StakePoolMetadata{ticker,name,description,homepage,delisted} = metadata repsert (PoolMetadataKey hash) - (PoolMetadata hash name ticker description homepage) + (PoolMetadata hash name ticker description homepage delisted) deleteWhere [ PoolFetchAttemptsMetadataHash ==. hash ] removePoolMetadata = do @@ -489,6 +493,43 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool + delistPools pools = + -- sqlite has a max of 2k variables or so, so we don't want + -- 'IN #{poolList my_pools}' to blow up. + forM_ (listOfK 1000 pools) + $ \kPools -> do + rawExecute + (deleteQueryString kPools) + [] + + where + deleteQueryString my_pools = [i| + UPDATE pool_metadata + SET delisted = 1 + WHERE metadata_hash + IN ( + SELECT metadata_hash + FROM active_pool_registrations + WHERE pool_id + IN #{poolList my_pools} + ); + |] + + poolList :: [PoolId] -> String + poolList pids = + let inner = intercalate ", " + -- pool IDs are strictly ascii, Char8 is safe + . fmap (\x -> "\"" ++ B8.unpack (getPoolId x) ++ "\"") + $ pids + in "( " ++ inner ++ " )" + + listOfK :: Int -> [a] -> [[a]] + listOfK k = go + where + go [] = [] + go xs = let (l, r) = splitAt k xs + in l : go r + removePools = mapM_ $ \pool -> do liftIO $ traceWith trace $ MsgRemovingPool pool deleteWhere [ PoolProductionPoolId ==. pool ] @@ -961,6 +1002,7 @@ fromPoolMeta meta = (poolMetadataHash meta,) $ , name = poolMetadataName meta , description = poolMetadataDescription meta , homepage = poolMetadataHomepage meta + , delisted = poolMetadataDelisted meta } fromSettings diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index a1e4a97a9b9..3f00c457629 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -134,6 +134,7 @@ PoolMetadata sql=pool_metadata poolMetadataTicker W.StakePoolTicker sql=ticker poolMetadataDescription Text Maybe sql=description poolMetadataHomepage Text sql=homepage + poolMetadataDelisted Bool sql=delisted Primary poolMetadataHash deriving Show Generic diff --git a/lib/core/src/Cardano/Wallet/Primitive/Types.hs b/lib/core/src/Cardano/Wallet/Primitive/Types.hs index 9842fda7a2b..2d5baef87c4 100644 --- a/lib/core/src/Cardano/Wallet/Primitive/Types.hs +++ b/lib/core/src/Cardano/Wallet/Primitive/Types.hs @@ -651,6 +651,9 @@ data StakePoolMetadata = StakePoolMetadata -- ^ Short description of the stake pool. , homepage :: Text -- ^ Absolute URL for the stake pool's homepage link. + , delisted :: Bool + -- ^ The pool has been delisted from the current SMASH server + -- (e.g. due to non-compliance). This isn't part of the JSON. } deriving (Eq, Ord, Show, Generic) instance FromJSON StakePoolMetadata where @@ -666,7 +669,7 @@ instance FromJSON StakePoolMetadata where homepage <- obj .: "homepage" guard (T.length homepage <= 100) - pure $ StakePoolMetadata{ticker,name,description,homepage} + pure $ StakePoolMetadata{ticker,name,description,homepage,delisted=False} -- | Very short name for a stake pool. newtype StakePoolTicker = StakePoolTicker { unStakePoolTicker :: Text } diff --git a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs index e6e7c5bb72e..49451b48f6e 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs @@ -325,6 +325,7 @@ genStakePoolMetadata (StakePoolMetadataUrl url) = StakePoolMetadata <*> genPrintableText <*> oneof [ pure Nothing, Just <$> genPrintableText ] <*> pure url + <*> pure False genStakePoolTicker :: Gen StakePoolTicker genStakePoolTicker = (StakePoolTicker . T.pack) <$> diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index a7a3cfa0da1..afb1312f380 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -964,6 +964,7 @@ prop_removePools , name = "MOCK" , description = Nothing , homepage = "http://mock.pool/" + , delisted = False } prop_listRegisteredPools diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 88706b3fb48..6874548eec4 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -1333,6 +1333,7 @@ instance Arbitrary StakePoolMetadata where <*> arbitraryText 50 <*> arbitraryMaybeText 255 <*> arbitraryText 100 + <*> pure False where arbitraryText maxLen = do len <- choose (1, maxLen) From 45e1a88365568cba8d3e4ad234cbf723fd87dc7d Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 16 Oct 2020 11:10:39 +0200 Subject: [PATCH 02/29] Add delisted to swagger.yaml --- specifications/api/swagger.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 5fcecfef2b7..5a80261b353 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -878,6 +878,8 @@ x-stakePoolMetadata: &stakePoolMetadata type: string format: uri example: https://iohk.io + delisted: + type: boolean x-stakePoolRetirement: &stakePoolRetirement <<: *epochInfo From 903440d9e9ca9354b71e3a5718bc758579edb27e Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 16 Oct 2020 13:13:24 +0200 Subject: [PATCH 03/29] Add internal_state table --- lib/core/src/Cardano/Pool/DB.hs | 11 +++++++ lib/core/src/Cardano/Pool/DB/MVar.hs | 7 +++++ lib/core/src/Cardano/Pool/DB/Model.hs | 27 +++++++++++++++- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 31 +++++++++++++++++-- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 7 +++++ .../src/Cardano/Wallet/DB/Sqlite/Types.hs | 16 +++++++++- .../src/Cardano/Wallet/Primitive/Types.hs | 19 ++++++++++++ 7 files changed, 113 insertions(+), 5 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index 5d9d3d300f6..eb51834f085 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -49,6 +49,8 @@ import Data.Map.Strict ( Map ) import Data.Quantity ( Quantity (..) ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Word ( Word64 ) import System.Random @@ -254,6 +256,15 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer -> stm () -- ^ Modify the settings. + , readLastMetadataGC + :: stm POSIXTime + -- ^ Get the last metadata GC time. + + , putLastMetadataGC + :: POSIXTime + -> stm () + -- ^ Set the last metadata GC time. + -- , cleanDB :: stm () -- ^ Clean a database diff --git a/lib/core/src/Cardano/Pool/DB/MVar.hs b/lib/core/src/Cardano/Pool/DB/MVar.hs index f40e7267bce..82772560fb8 100644 --- a/lib/core/src/Cardano/Pool/DB/MVar.hs +++ b/lib/core/src/Cardano/Pool/DB/MVar.hs @@ -33,6 +33,7 @@ import Cardano.Pool.DB.Model , mListRetiredPools , mPutFetchAttempt , mPutHeader + , mPutLastMetadataGC , mPutPoolMetadata , mPutPoolProduction , mPutPoolRegistration @@ -40,6 +41,7 @@ import Cardano.Pool.DB.Model , mPutSettings , mPutStakeDistribution , mReadCursor + , mReadLastMetadataGC , mReadPoolLifeCycleStatus , mReadPoolMetadata , mReadPoolProduction @@ -169,6 +171,11 @@ newDBLayer timeInterpreter = do putSettings = void . alterPoolDB (const Nothing) db . mPutSettings + readLastMetadataGC = readPoolDB db mReadLastMetadataGC + + putLastMetadataGC = + void . alterPoolDB (const Nothing) db . mPutLastMetadataGC + cleanDB = void $ alterPoolDB (const Nothing) db mCleanDatabase diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index fb4e37e1b5c..58c0104a35c 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -14,8 +14,14 @@ {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeApplications #-} {-# LANGUAGE UndecidableInstances #-} +-- `const` isn't more readable than lambdas. Our language is based on +-- lambda calculus and we shouldn't feel ashamed to use them. They also +-- have different strictness properties. +{-# HLINT ignore "Use const" #-} + -- | -- Copyright: © 2018-2020 IOHK -- License: Apache-2.0 @@ -64,6 +70,8 @@ module Cardano.Pool.DB.Model , mRemoveRetiredPools , mReadSettings , mPutSettings + , mPutLastMetadataGC + , mReadLastMetadataGC ) where import Prelude @@ -82,10 +90,12 @@ import Cardano.Wallet.Primitive.Types , PoolRegistrationCertificate (..) , PoolRetirementCertificate (..) , Settings + , InternalState (..) , SlotNo (..) , StakePoolMetadata (..) , StakePoolMetadataHash , StakePoolMetadataUrl + , defaultInternalState , defaultSettings ) import Control.Monad @@ -112,6 +122,8 @@ import Data.Ord ( Down (..) ) import Data.Quantity ( Quantity (..) ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Word ( Word64 ) import GHC.Generics @@ -159,6 +171,10 @@ data PoolDatabase = PoolDatabase -- ^ Store headers during syncing , settings :: Settings + + , internalState :: InternalState + -- ^ Various internal states that need to persist across + -- wallet restarts. } deriving (Generic, Show, Eq) data SystemSeed @@ -176,7 +192,7 @@ instance Eq SystemSeed where emptyPoolDatabase :: PoolDatabase emptyPoolDatabase = PoolDatabase mempty mempty mempty mempty mempty mempty mempty NotSeededYet - mempty defaultSettings + mempty defaultSettings defaultInternalState {------------------------------------------------------------------------------- Model Operation Types @@ -463,6 +479,15 @@ mPutSettings -> ModelOp () mPutSettings s = modify #settings (\_ -> s) +mReadLastMetadataGC + :: ModelOp POSIXTime +mReadLastMetadataGC = get (#internalState . #lastMetadataGC) + +mPutLastMetadataGC + :: POSIXTime + -> ModelOp () +mPutLastMetadataGC t = modify (#internalState . #lastMetadataGC) (\_ -> t) + -------------------------------------------------------------------------------- -- Utilities -------------------------------------------------------------------------------- diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 2bda964d403..6149e457d15 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -50,6 +50,8 @@ import Cardano.Pool.DB ( DBLayer (..), ErrPointAlreadyExists (..), determinePoolLifeCycleStatus ) import Cardano.Pool.DB.Log ( ParseFailure (..), PoolDbLog (..) ) +import Cardano.Pool.DB.Sqlite.TH hiding + ( BlockHeader, blockHeight ) import Cardano.Wallet.DB.Sqlite.Types ( BlockId (..) ) import Cardano.Wallet.Logging @@ -66,6 +68,7 @@ import Cardano.Wallet.Primitive.Types , PoolRetirementCertificate (..) , StakePoolMetadata (..) , StakePoolMetadataHash + , defaultInternalState , defaultSettings ) import Cardano.Wallet.Unsafe @@ -123,7 +126,9 @@ import Database.Persist.Sql , selectFirst , selectList , toPersistValue + , update , (<.) + , (=.) , (==.) , (>.) , (>=.) @@ -137,9 +142,6 @@ import System.FilePath import System.Random ( newStdGen ) -import Cardano.Pool.DB.Sqlite.TH hiding - ( BlockHeader, blockHeight ) - import qualified Cardano.Pool.DB.Sqlite.TH as TH import qualified Cardano.Wallet.Primitive.Types as W import qualified Data.ByteString.Char8 as B8 @@ -582,6 +584,23 @@ newDBLayer trace fp timeInterpreter = do (SettingsKey 1) . toSettings + readLastMetadataGC = do + -- only ever read the first row + result <- selectFirst + [] + [Asc InternalStateId, LimitTo 1] + case result of + Nothing -> pure . W.lastMetadataGC $ defaultInternalState + Just x -> pure . W.lastMetadataGC . fromInternalState . entityVal $ x + + putLastMetadataGC utc = do + result <- selectFirst + [ InternalStateId ==. (InternalStateKey 1) ] + [ ] + case result of + Just _ -> update (InternalStateKey 1) [ LastGCMetadata =. utc ] + Nothing -> insert_ (InternalState utc) + cleanDB = do deleteWhere ([] :: [Filter PoolProduction]) deleteWhere ([] :: [Filter PoolOwner]) @@ -592,6 +611,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere ([] :: [Filter PoolMetadataFetchAttempts]) deleteWhere ([] :: [Filter TH.BlockHeader]) deleteWhere ([] :: [Filter Settings]) + deleteWhere ([] :: [Filter InternalState]) atomically :: forall a. (SqlPersistT IO a -> IO a) atomically = runQuery @@ -1015,3 +1035,8 @@ toSettings -> Settings toSettings (W.Settings pms) = Settings pms +fromInternalState + :: InternalState + -> W.InternalState +fromInternalState (InternalState utc) = W.InternalState utc + diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index 3f00c457629..a2eab6ea723 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -28,6 +28,8 @@ import Data.Text ( Text ) import Data.Time.Clock ( UTCTime ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Word ( Word32, Word64, Word8 ) import Database.Persist.Class @@ -49,6 +51,11 @@ share ] [persistLowerCase| +InternalState sql=internal_state + lastGCMetadata POSIXTime sql=last_gc_metadata + + deriving Show Generic + Settings sql=settings settingsPoolMetadataSource W.PoolMetadataSource sql=metadata_source diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index de81434c6eb..d5d0bf18252 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -89,12 +89,14 @@ import Data.Text.Class ) import Data.Text.Encoding ( decodeUtf8, encodeUtf8 ) +import Data.Time.Clock.POSIX + (utcTimeToPOSIXSeconds, POSIXTime, posixSecondsToUTCTime ) import Data.Word ( Word32, Word64 ) import Data.Word.Odd ( Word31 ) import Database.Persist.Sqlite - ( PersistField (..), PersistFieldSql (..), PersistValue ) + ( PersistField (..), PersistFieldSql (..), PersistValue (..) ) import Database.Persist.TH ( MkPersistSettings (..), sqlSettings ) import GHC.Generics @@ -670,3 +672,15 @@ instance PersistField DerivationPrefix where instance PersistFieldSql DerivationPrefix where sqlType _ = sqlType (Proxy @Text) + + +---------------------------------------------------------------------------- +-- Other + +instance PersistField POSIXTime where + toPersistValue = PersistUTCTime . posixSecondsToUTCTime + fromPersistValue (PersistUTCTime utc) = Right . utcTimeToPOSIXSeconds $ utc + fromPersistValue _ = Left "Could not convert to unknown construtctor POSIX seconds" + +instance PersistFieldSql POSIXTime where + sqlType _ = sqlType (Proxy @Word64) diff --git a/lib/core/src/Cardano/Wallet/Primitive/Types.hs b/lib/core/src/Cardano/Wallet/Primitive/Types.hs index 2d5baef87c4..3f38f56d08c 100644 --- a/lib/core/src/Cardano/Wallet/Primitive/Types.hs +++ b/lib/core/src/Cardano/Wallet/Primitive/Types.hs @@ -185,6 +185,10 @@ module Cardano.Wallet.Primitive.Types , PoolMetadataSource( .. ) , defaultSettings , unsafeToPMS + + -- * InternalState + , InternalState (..) + , defaultInternalState ) where import Prelude @@ -257,6 +261,8 @@ import Data.Text.Class ) import Data.Time.Clock ( NominalDiffTime, UTCTime ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Time.Format ( defaultTimeLocale, formatTime ) import Data.Word @@ -2000,6 +2006,19 @@ defaultSettings = Settings { poolMetadataSource = FetchNone } +-- | Various internal states of he pool DB +-- that need to survive wallet restarts. These aren't +-- exposed settings. +{-# HLINT ignore InternalState "Use newtype instead of data" #-} +data InternalState = InternalState + { lastMetadataGC :: POSIXTime + } deriving (Generic, Show, Eq) + +defaultInternalState :: InternalState +defaultInternalState = InternalState { + lastMetadataGC = (fromIntegral @Int 0) +} + instance FromJSON PoolMetadataSource where parseJSON = parseJSON >=> either (fail . show . ShowFmt) pure . fromText From 1896b340ec7e2d081e2c920e86d2a15eb988e503 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 16 Oct 2020 16:01:12 +0200 Subject: [PATCH 04/29] Add GC worker thread for delisting Pools --- lib/core/src/Cardano/Pool/DB/Model.hs | 3 +- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 1 + lib/core/src/Cardano/Pool/Metadata.hs | 67 ++++++++++++- .../src/Cardano/Wallet/DB/Sqlite/Types.hs | 2 +- lib/shelley/cardano-wallet.cabal | 1 + lib/shelley/src/Cardano/Wallet/Shelley.hs | 3 +- .../src/Cardano/Wallet/Shelley/Pools.hs | 95 ++++++++++++++++--- 7 files changed, 150 insertions(+), 22 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index 58c0104a35c..f03d13947b4 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -14,7 +14,6 @@ {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeApplications #-} {-# LANGUAGE UndecidableInstances #-} -- `const` isn't more readable than lambdas. Our language is based on @@ -84,13 +83,13 @@ import Cardano.Wallet.Primitive.Types ( BlockHeader (..) , CertificatePublicationTime , EpochNo (..) + , InternalState (..) , PoolId , PoolLifeCycleStatus (..) , PoolOwner (..) , PoolRegistrationCertificate (..) , PoolRetirementCertificate (..) , Settings - , InternalState (..) , SlotNo (..) , StakePoolMetadata (..) , StakePoolMetadataHash diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 6149e457d15..16bb1f0193f 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -495,6 +495,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool + delistPools [] = pure () delistPools pools = -- sqlite has a max of 2k variables or so, so we don't want -- 'IN #{poolList my_pools}' to blow up. diff --git a/lib/core/src/Cardano/Pool/Metadata.hs b/lib/core/src/Cardano/Pool/Metadata.hs index b960cba8d74..0614da8c2d9 100644 --- a/lib/core/src/Cardano/Pool/Metadata.hs +++ b/lib/core/src/Cardano/Pool/Metadata.hs @@ -16,6 +16,7 @@ module Cardano.Pool.Metadata -- * Fetch fetchFromRemote , StakePoolMetadataFetchLog (..) + , fetchDelistedPools -- * Construct URLs , identityUrlBuilder @@ -32,6 +33,8 @@ import Cardano.BM.Data.Severity ( Severity (..) ) import Cardano.BM.Data.Tracer ( HasPrivacyAnnotation (..), HasSeverityAnnotation (..) ) +import Cardano.Wallet.Api.Types + ( ApiT (..) ) import Cardano.Wallet.Primitive.AddressDerivation ( hex ) import Cardano.Wallet.Primitive.Types @@ -70,6 +73,7 @@ import Network.HTTP.Client ( HttpException (..) , Manager , ManagerSettings + , brConsume , brReadSome , managerResponseTimeout , requestFromURI @@ -83,6 +87,7 @@ import Network.HTTP.Types.Status import Network.URI ( URI (..), parseURI ) +import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T @@ -134,6 +139,45 @@ registryUrlBuilder baseUrl pid _ hash = { uriPath = "/" <> metadaFetchEp pid hash } +fetchDelistedPools + :: Tracer IO StakePoolMetadataFetchLog + -> URI + -> Manager + -> IO (Maybe [PoolId]) +fetchDelistedPools tr uri manager = runExceptTLog $ do + pl <- getPoolsPayload + except . (fmap . fmap) getApiT . eitherDecodeStrict @[ApiT PoolId] $ pl + where + getPoolsPayload :: ExceptT String IO ByteString + getPoolsPayload = do + req <- withExceptT show $ except $ requestFromURI uri + liftIO $ traceWith tr $ MsgFetchDelistedPools uri + ExceptT + $ handle fromIOException + $ handle fromHttpException + $ withResponse req manager $ \res -> do + case responseStatus res of + s | s == status200 -> do + let body = responseBody res + Right . BS.concat <$> brConsume body + + s -> do + pure $ Left $ "The server replied something unexpected: " <> show s + + runExceptTLog + :: ExceptT String IO [PoolId] + -> IO (Maybe [PoolId]) + runExceptTLog action = runExceptT action >>= \case + Left msg -> + Nothing <$ traceWith tr (MsgFetchDelistedPoolsFailure msg) + + Right meta -> + Just meta <$ traceWith tr (MsgFetchDelistedPoolsSuccess meta) + + fromHttpException :: Monad m => HttpException -> m (Either String a) + fromHttpException = return . Left . ("HTTp Exception exception: " <>) . show + +-- TODO: refactor/simplify this fetchFromRemote :: Tracer IO StakePoolMetadataFetchLog -> [ PoolId @@ -211,17 +255,21 @@ fetchFromRemote tr builders manager pid url hash = runExceptTLog $ do s -> do pure $ Left $ "The server replied something unexpected: " <> show s - fromIOException :: Monad m => IOException -> m (Either String a) - fromIOException = return . Left . ("IO exception: " <>) . show - fromHttpException :: Monad m => HttpException -> m (Either String (Maybe a)) fromHttpException = const (return $ Right Nothing) +fromIOException :: Monad m => IOException -> m (Either String a) +fromIOException = return . Left . ("IO exception: " <>) . show + + data StakePoolMetadataFetchLog = MsgFetchPoolMetadata StakePoolMetadataHash URI | MsgFetchPoolMetadataSuccess StakePoolMetadataHash StakePoolMetadata | MsgFetchPoolMetadataFailure StakePoolMetadataHash String | MsgFetchPoolMetadataFallback URI Bool + | MsgFetchDelistedPools URI + | MsgFetchDelistedPoolsFailure String + | MsgFetchDelistedPoolsSuccess [PoolId] deriving (Show, Eq) instance HasPrivacyAnnotation StakePoolMetadataFetchLog @@ -231,6 +279,9 @@ instance HasSeverityAnnotation StakePoolMetadataFetchLog where MsgFetchPoolMetadataSuccess{} -> Info MsgFetchPoolMetadataFailure{} -> Warning MsgFetchPoolMetadataFallback{} -> Warning + MsgFetchDelistedPools{} -> Info + MsgFetchDelistedPoolsFailure{} -> Warning + MsgFetchDelistedPoolsSuccess{} -> Info instance ToText StakePoolMetadataFetchLog where toText = \case @@ -251,3 +302,13 @@ instance ToText StakePoolMetadataFetchLog where then "" else " Falling back using a different strategy." ] + MsgFetchDelistedPools uri -> mconcat + [ "Fetching delisted pools from ", T.pack (show uri) + ] + MsgFetchDelistedPoolsSuccess poolIds -> mconcat + [ "Successfully fetched delisted pools: " + , T.pack (show poolIds) + ] + MsgFetchDelistedPoolsFailure err -> mconcat + [ "Failed to fetch delisted pools: ", T.pack err + ] diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index d5d0bf18252..5fd49b1ff17 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -90,7 +90,7 @@ import Data.Text.Class import Data.Text.Encoding ( decodeUtf8, encodeUtf8 ) import Data.Time.Clock.POSIX - (utcTimeToPOSIXSeconds, POSIXTime, posixSecondsToUTCTime ) + ( POSIXTime, posixSecondsToUTCTime, utcTimeToPOSIXSeconds ) import Data.Word ( Word32, Word64 ) import Data.Word.Odd diff --git a/lib/shelley/cardano-wallet.cabal b/lib/shelley/cardano-wallet.cabal index b8509e2db36..83b7a97926c 100644 --- a/lib/shelley/cardano-wallet.cabal +++ b/lib/shelley/cardano-wallet.cabal @@ -63,6 +63,7 @@ library , memory , network , network-mux + , network-uri , optparse-applicative , ouroboros-consensus , ouroboros-consensus-byron diff --git a/lib/shelley/src/Cardano/Wallet/Shelley.hs b/lib/shelley/src/Cardano/Wallet/Shelley.hs index 222c31b30f4..331509f8dbc 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley.hs @@ -333,7 +333,8 @@ serveWallet forM_ settings $ atomically . putSettings void $ forkFinally (monitorStakePools tr gp nl db) onExit - spl <- newStakePoolLayer nl db $ forkFinally (monitorMetadata tr sp db) onExit + spl <- newStakePoolLayer nl db + $ forkFinally (monitorMetadata poolsEngineTracer tr sp db) onExit action spl where tr = contramap (MsgFromWorker mempty) poolsEngineTracer diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 59a82a4db4c..5f5a0deadf6 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -42,6 +42,7 @@ import Cardano.Pool.DB import Cardano.Pool.Metadata ( StakePoolMetadataFetchLog , defaultManagerSettings + , fetchDelistedPools , fetchFromRemote , identityUrlBuilder , newManager @@ -94,6 +95,8 @@ import Cardano.Wallet.Primitive.Types , getPoolRetirementCertificate , unSmashServer ) +import Cardano.Wallet.Registry + ( WorkerLog, defaultWorkerAfter ) import Cardano.Wallet.Shelley.Compatibility ( Shelley , StandardCrypto @@ -107,9 +110,9 @@ import Cardano.Wallet.Shelley.Network import Cardano.Wallet.Unsafe ( unsafeMkPercentage ) import Control.Concurrent - ( threadDelay ) + ( forkFinally, threadDelay ) import Control.Exception - ( SomeException (..), bracket, mask_, try ) + ( SomeException (..), bracket, finally, mask_, try ) import Control.Monad ( forM, forM_, forever, void, when, (<=<) ) import Control.Monad.IO.Class @@ -135,13 +138,15 @@ import Data.Map import Data.Map.Merge.Strict ( dropMissing, traverseMissing, zipWithAMatched, zipWithMatched ) import Data.Maybe - ( catMaybes ) + ( catMaybes, fromMaybe ) import Data.Ord ( Down (..) ) import Data.Quantity ( Percentage (..), Quantity (..) ) import Data.Set ( Set ) +import Data.Text + ( Text ) import Data.Text.Class ( ToText (..) ) import Data.Tuple.Extra @@ -154,6 +159,8 @@ import GHC.Conc ( TVar, ThreadId, killThread, newTVarIO, readTVarIO, writeTVar ) import GHC.Generics ( Generic ) +import Network.URI + ( URI (..) ) import Ouroboros.Consensus.Cardano.Block ( CardanoBlock, HardForkBlock (..) ) import System.Random @@ -165,6 +172,8 @@ import qualified Data.List.NonEmpty as NE import qualified Data.Map.Merge.Strict as Map import qualified Data.Map.Strict as Map import qualified Data.Set as Set +import Data.Time.Clock.POSIX + ( getPOSIXTime, posixDayLength ) import qualified GHC.Conc as STM -- @@ -682,24 +691,45 @@ monitorStakePools tr gp nl DBLayer{..} = -- | Worker thread that monitors pool metadata and syncs it to the database. monitorMetadata - :: Tracer IO StakePoolLog + :: Tracer IO (WorkerLog Text StakePoolLog) + -> Tracer IO StakePoolLog -> SlottingParameters -> DBLayer IO -> IO () -monitorMetadata tr sp DBLayer{..} = do +monitorMetadata tr' tr sp db@(DBLayer{..}) = do settings <- atomically readSettings manager <- newManager defaultManagerSettings + let fetcher fetchStrategies = fetchFromRemote trFetch fetchStrategies manager - forever $ do - (refs, successes) <- case poolMetadataSource settings of - FetchNone -> pure ([], []) - FetchDirect -> fetchThem $ fetcher [identityUrlBuilder] - FetchSMASH (unSmashServer -> uri) -> fetchThem $ fetcher [registryUrlBuilder uri] - - when (null refs || null successes) $ do - traceWith tr $ MsgFetchTakeBreak blockFrequency - threadDelay blockFrequency + loop getPoolMetadata = forever $ do + (refs, successes) <- getPoolMetadata + when (null refs || null successes) $ do + traceWith tr $ MsgFetchTakeBreak blockFrequency + threadDelay blockFrequency + + case poolMetadataSource settings of + FetchNone -> loop (pure ([], [])) -- TODO: exit loop? + FetchDirect -> loop (fetchThem $ fetcher [identityUrlBuilder]) + FetchSMASH (unSmashServer -> uri) -> do + tid <- + forkFinally + (gcDelistedPools tr db + (fetchDelistedPools trFetch (toDelistedPoolsURI uri) manager) + ) + onExit + flip finally (killThread tid) $ + loop (fetchThem $ fetcher [registryUrlBuilder uri]) + where + -- Currently the SMASH url points to the full API path, e.g. + -- https://smash.cardano-testnet.iohkdev.io/api/v1/monitorMetadata + -- so we need to recover/infer the delisted pools url. + -- TODO: + -- - require the smash url to only specify sheme and host + -- - use smash servant types to call the endpoints + toDelistedPoolsURI uri = + uri { uriPath = "/api/v1/delisted" , uriQuery = "", uriFragment = "" } + trFetch = contramap MsgFetchPoolMetadata tr -- We mask this entire section just in case, although the database -- operations runs masked anyway. Unfortunately we cannot run @@ -721,8 +751,36 @@ monitorMetadata tr sp DBLayer{..} = do blockFrequency = ceiling (1/f) * toMicroSecond slotLength where toMicroSecond = (`div` 1000000) . fromEnum - slotLength = unSlotLength $ getSlotLength sp + slotLength = unSlotLength $ getSlotLength gp f = unActiveSlotCoefficient (getActiveSlotCoefficient sp) + onExit = defaultWorkerAfter tr' + +gcDelistedPools + :: Tracer IO StakePoolLog + -> DBLayer IO + -> IO (Maybe [PoolId]) -- ^ delisted pools fetcher + -> IO () +gcDelistedPools tr DBLayer{..} fetchDelisted = forever $ do + lastGC <- atomically readLastMetadataGC + currentTime <- getPOSIXTime + + let timeSinceLastGC = currentTime - lastGC + sixHours = posixDayLength / 4 + if timeSinceLastGC > sixHours + then do + delistedPools <- fmap (fromMaybe []) fetchDelisted + atomically $ do + putLastMetadataGC currentTime + delistPools delistedPools + else do + -- Sleep for 60 seconds. This is useful in case + -- something else is modifying the last sync time + -- in the database. + let sec_to_milisec = (* 1000000) + sleep_time = sec_to_milisec 60 + traceWith tr $ MsgGCTakeBreak sleep_time + threadDelay sleep_time + pure () data StakePoolLog = MsgFollow FollowLog @@ -736,6 +794,7 @@ data StakePoolLog | MsgErrProduction ErrPointAlreadyExists | MsgFetchPoolMetadata StakePoolMetadataFetchLog | MsgFetchTakeBreak Int + | MsgGCTakeBreak Int deriving (Show, Eq) data PoolGarbageCollectionInfo = PoolGarbageCollectionInfo @@ -763,6 +822,7 @@ instance HasSeverityAnnotation StakePoolLog where MsgErrProduction{} -> Error MsgFetchPoolMetadata e -> getSeverityAnnotation e MsgFetchTakeBreak{} -> Debug + MsgGCTakeBreak{} -> Debug instance ToText StakePoolLog where toText = \case @@ -805,3 +865,8 @@ instance ToText StakePoolLog where , "back to it in about " , pretty (fixedF 1 (toRational delay / 1000000)), "s" ] + MsgGCTakeBreak delay -> mconcat + [ "Taking a little break from GCing delisted metadata pools, " + , "back to it in about " + , pretty (fixedF 1 (toRational delay / 1000000)), "s" + ] From fbbf8c0c4a03e2c07a80c944baf8d5b5e87ff36b Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 17 Oct 2020 13:16:15 +0200 Subject: [PATCH 05/29] Return GC sync time as well from ListStakePools --- .../Scenario/API/Shelley/StakePools.hs | 94 +++++++++++-------- lib/core/src/Cardano/Wallet/Api.hs | 3 +- lib/core/src/Cardano/Wallet/Api/Client.hs | 3 +- lib/core/src/Cardano/Wallet/Api/Types.hs | 18 +++- .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 11 +++ .../Cardano/Wallet/Jormungandr/Api/Server.hs | 8 +- .../Cardano/Wallet/Jormungandr/ApiSpec.hs | 11 +++ .../src/Cardano/Wallet/Shelley/Pools.hs | 14 +-- specifications/api/swagger.yaml | 29 +++++- 9 files changed, 135 insertions(+), 56 deletions(-) diff --git a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs index ea4da61857a..f392cb203ad 100644 --- a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs +++ b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs @@ -17,6 +17,7 @@ import Prelude import Cardano.Wallet.Api.Types ( ApiCertificate (JoinPool, QuitPool, RegisterRewardAccount) + , ApiListStakePools (..) , ApiStakePool , ApiT (..) , ApiTransaction @@ -50,6 +51,8 @@ import Control.Monad.IO.Class ( liftIO ) import Control.Monad.Trans.Resource ( runResourceT ) +import Data.Bifunctor + ( second ) import Data.Function ( (&) ) import Data.Generics.Internal.VL.Lens @@ -141,8 +144,9 @@ spec :: forall n t. , PaymentAddress n ShelleyKey ) => SpecWith (Context t) spec = describe "SHELLEY_STAKE_POOLS" $ do - let listPools ctx stake = request @[ApiStakePool] ctx - (Link.listStakePools stake) Default Empty + let listPools ctx stake = (second . second) (view #pools) + <$> request @(ApiListStakePools ApiStakePool) ctx + (Link.listStakePools stake) Default Empty it "STAKE_POOLS_JOIN_01 - Cannot join non-existent wallet" $ \ctx -> runResourceT $ do w <- emptyWallet ctx @@ -164,8 +168,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01 - \ \Cannot join existent stakepool with wrong password" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . snd <$> unsafeRequest - @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd <$> unsafeRequest + @(ApiListStakePools ApiStakePool) ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, "Wrong Passphrase") >>= flip verify [ expectResponseCode HTTP.status403 , expectErrorMessage errMsg403WrongPass @@ -178,8 +182,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do dest <- emptyWallet ctx -- Join Pool - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] ctx - (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) ctx + (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (src, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -355,8 +360,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_02 - \ \Cannot join already joined stake pool" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -404,8 +410,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_QUIT_02 - Passphrase must be correct to quit" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -443,9 +450,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do (currentEpoch, _) <- getSlotParams ctx waitForNextEpoch ctx - pool1:pool2:_ <- map (view #id) . snd - <$> unsafeRequest @[ApiStakePool] ctx - (Link.listStakePools arbitraryStake) Empty + pool1:pool2:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool1 (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -509,8 +516,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_04 - Rewards accumulate" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty -- Join a pool joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -557,8 +565,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do } |] w <- unsafeResponse <$> postWallet ctx payload - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty eventually "wallet join a pool" $ do joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify @@ -685,9 +694,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do $ it "Join/quit when already joined a pool" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool1:pool2:_ <- - map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool1:pool2:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty liftIO $ joinStakePool @n ctx pool1 (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -755,8 +764,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I can join if I have just the right amount" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx] - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase)>>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -766,8 +776,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I cannot join if I have not enough fee to cover" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx - 1] - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status403 , expectErrorMessage (errMsg403DelegationFee 1) @@ -788,8 +799,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do ] w <- fixtureWalletWith @n ctx initBalance - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -824,8 +836,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do let initBalance = [ costOfJoining ctx + depositAmt ctx ] w <- fixtureWalletWith @n ctx initBalance - pool:_ <- map (view #id) . snd <$> unsafeRequest @[ApiStakePool] - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -898,18 +911,18 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do r <- listPools ctx arbitraryStake expectResponseCode HTTP.status200 r let oneMillionAda = 1_000_000_000_000 - let pools = either (error . show) Prelude.id $ snd r + let pools' = either (error . show) Prelude.id $ snd r -- To ignore the ordering of the pools, we use Set. - setOf pools (view #cost) + setOf pools' (view #cost) `shouldBe` Set.singleton (Quantity 0) - setOf pools (view #margin) + setOf pools' (view #margin) `shouldBe` Set.singleton (Quantity $ unsafeMkPercentage 0.1) - setOf pools (view #pledge) + setOf pools' (view #pledge) `shouldBe` Set.fromList [ Quantity oneMillionAda @@ -964,9 +977,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do verify r [ expectListSize 3 - , expectField Prelude.id $ \pools -> do + , expectField Prelude.id $ \pools' -> do let metadataActual = Set.fromList $ - mapMaybe (fmap getApiT . view #metadata) pools + mapMaybe (fmap getApiT . view #metadata) pools' metadataActual `shouldSatisfy` (`Set.isSubsetOf` metadataPossible) metadataActual @@ -975,11 +988,12 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "contains and is sorted by non-myopic-rewards" $ \ctx -> runResourceT $ do eventually "eventually shows non-zero rewards" $ do - Right pools@[pool1,_pool2,pool3] <- + Right pools'@[pool1,_pool2,pool3] <- snd <$> listPools ctx arbitraryStake let rewards = view (#metrics . #nonMyopicMemberRewards) - (rewards <$> pools) `shouldBe` - (rewards <$> sortOn (Down . rewards) pools) + + (rewards <$> pools') `shouldBe` + (rewards <$> sortOn (Down . rewards) pools') -- Make sure the rewards are not all equal: rewards pool1 .> rewards pool3 @@ -997,7 +1011,7 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do rewardsStakeBig .> rewardsStakeSmall it "STAKE_POOLS_LIST_05 - Fails without query parameter" $ \ctx -> runResourceT $ do - r <- request @[ApiStakePool] ctx + r <- request @(ApiListStakePools ApiStakePool) ctx (Link.listStakePools Nothing) Default Empty expectResponseCode HTTP.status400 r @@ -1005,10 +1019,10 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do \NonMyopicMemberRewards are 0 when stake is 0" $ \ctx -> runResourceT $ do liftIO $ pendingWith "This assumption seems false, for some reasons..." let stake = Just $ Coin 0 - r <- request @[ApiStakePool] ctx (Link.listStakePools stake) + r <- request @(ApiListStakePools ApiStakePool) ctx (Link.listStakePools stake) Default Empty expectResponseCode HTTP.status200 r - verify r + verify ((second . second) (view #pools) r) [ expectListSize 3 , expectListField 0 (#metrics . #nonMyopicMemberRewards) (`shouldBe` Quantity 0) diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index e00a1a5fb73..b8478742a96 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -124,6 +124,7 @@ import Cardano.Wallet.Api.Types , ApiByronWallet , ApiCoinSelectionT , ApiFee + , ApiListStakePools , ApiNetworkClock , ApiNetworkInformation , ApiNetworkParameters @@ -447,7 +448,7 @@ type StakePools n apiPool = -- | https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/listStakePools type ListStakePools apiPool = "stake-pools" :> QueryParam "stake" (ApiT Coin) - :> Get '[JSON] [apiPool] + :> Get '[JSON] (ApiListStakePools apiPool) -- | https://input-output-hk.github.io/cardano-wallet/api/#operation/joinStakePool type JoinStakePool n = "stake-pools" diff --git a/lib/core/src/Cardano/Wallet/Api/Client.hs b/lib/core/src/Cardano/Wallet/Api/Client.hs index ec87a0dad31..0eebaed6833 100644 --- a/lib/core/src/Cardano/Wallet/Api/Client.hs +++ b/lib/core/src/Cardano/Wallet/Api/Client.hs @@ -64,6 +64,7 @@ import Cardano.Wallet.Api.Types , ApiByronWallet , ApiCoinSelectionT , ApiFee + , ApiListStakePools , ApiNetworkClock , ApiNetworkInformation (..) , ApiNetworkParameters @@ -189,7 +190,7 @@ data AddressClient = AddressClient data StakePoolClient apiPool = StakePoolClient { listPools - :: Maybe (ApiT Coin) -> ClientM [apiPool] + :: Maybe (ApiT Coin) -> ClientM (ApiListStakePools apiPool) , joinStakePool :: ApiPoolId -> ApiT WalletId diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index da00c6c6704..0e9234feaad 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -50,6 +50,7 @@ module Cardano.Wallet.Api.Types , ApiAddressData (..) , AnyAddress (..) , AnyAddressType (..) + , ApiListStakePools (..) , ApiCertificate (..) , ApiEpochInfo (..) , ApiSelectCoinsData (..) @@ -402,6 +403,11 @@ fmtAllowedWords = API Types -------------------------------------------------------------------------------} +data ApiListStakePools apiPool = ApiListStakePools + { pools :: [apiPool] + , lastGC :: !(Maybe (ApiT Iso8601Time)) + } deriving (Eq, Generic, Show) + data ApiAddress (n :: NetworkDiscriminant) = ApiAddress { id :: !(ApiT Address, Proxy n) , state :: !(ApiT AddressState) @@ -819,7 +825,6 @@ data ApiPostRandomAddressData = ApiPostRandomAddressData } deriving (Eq, Generic, Show) deriving anyclass NFData - data ApiWalletMigrationPostData (n :: NetworkDiscriminant) (s :: Symbol) = ApiWalletMigrationPostData { passphrase :: !(ApiT (Passphrase s)) @@ -922,6 +927,12 @@ instance FromText Iso8601Time where <> "'. Expecting ISO 8601 date-and-time format (basic or extended)" <> ", e.g. 2012-09-25T10:15:00Z." +instance FromJSON (ApiT Iso8601Time) where + parseJSON = + parseJSON >=> eitherToParser . bimap ShowFmt ApiT . fromText +instance ToJSON (ApiT Iso8601Time) where + toJSON = toJSON . toText . getApiT + instance FromHttpApiData Iso8601Time where parseUrlPiece = first (T.pack . getTextDecodingError) . fromText @@ -1376,6 +1387,11 @@ instance FromJSON WalletPutPassphraseData where instance ToJSON WalletPutPassphraseData where toJSON = genericToJSON defaultRecordTypeOptions +instance FromJSON a => FromJSON (ApiListStakePools a) where + parseJSON = genericParseJSON defaultRecordTypeOptions +instance ToJSON a => ToJSON (ApiListStakePools a) where + toJSON = genericToJSON defaultRecordTypeOptions + instance FromJSON ByronWalletPutPassphraseData where parseJSON = genericParseJSON defaultRecordTypeOptions instance ToJSON ByronWalletPutPassphraseData where diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 6874548eec4..eefc1835f24 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -63,6 +63,7 @@ import Cardano.Wallet.Api.Types , ApiEpochInfo (..) , ApiErrorCode (..) , ApiFee (..) + , ApiListStakePools (..) , ApiMnemonicT (..) , ApiNetworkClock (..) , ApiNetworkInformation (..) @@ -349,6 +350,7 @@ spec = do jsonRoundtripAndGolden $ Proxy @ApiCredential jsonRoundtripAndGolden $ Proxy @ApiAddressData jsonRoundtripAndGolden $ Proxy @(ApiT DerivationIndex) + jsonRoundtripAndGolden $ Proxy @(ApiListStakePools Api.ApiStakePool) jsonRoundtripAndGolden $ Proxy @ApiEpochInfo jsonRoundtripAndGolden $ Proxy @(ApiSelectCoinsData ('Testnet 0)) jsonRoundtripAndGolden $ Proxy @(ApiCoinSelection ('Testnet 0)) @@ -1310,6 +1312,9 @@ instance Arbitrary PoolId where InfiniteList bytes _ <- arbitrary return $ PoolId $ BS.pack $ take 28 bytes +instance Arbitrary (ApiListStakePools ApiStakePool) where + arbitrary = ApiListStakePools <$> arbitrary <*> arbitrary + instance Arbitrary ApiStakePool where arbitrary = ApiStakePool <$> arbitrary @@ -1878,6 +1883,12 @@ instance ToSchema SettingsPutData where instance ToSchema (ApiT Settings) where declareNamedSchema _ = declareSchemaForDefinition "ApiGetSettings" +instance ToSchema (ApiT Iso8601Time) where + declareNamedSchema _ = declareSchemaForDefinition "ApiLastGC" + +instance ToSchema (Api.ApiListStakePools Api.ApiStakePool) where + declareNamedSchema _ = declareSchemaForDefinition "ApiListStakePools" + instance ToSchema WalletPutPassphraseData where declareNamedSchema _ = declareSchemaForDefinition "ApiWalletPutPassphraseData" diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs index 6fe59996c4e..e6cf333c1ee 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs @@ -95,6 +95,7 @@ import Cardano.Wallet.Api.Server ) import Cardano.Wallet.Api.Types ( ApiErrorCode (..) + , ApiListStakePools (..) , ApiSelectCoinsData (..) , ApiT (..) , SomeByronWalletPostData (..) @@ -323,9 +324,10 @@ listPools => StakePoolLayer e IO -> Maybe (ApiT Coin) -- ^ Not needed, but there for consistency with haskell node. - -> Handler [ApiStakePool] -listPools spl _walletId = - liftHandler $ map (uncurry mkApiStakePool) <$> listStakePools spl + -> Handler (ApiListStakePools ApiStakePool) +listPools spl _walletId = do + ps <- liftHandler $ map (uncurry mkApiStakePool) <$> listStakePools spl + pure (ApiListStakePools ps Nothing) where mkApiStakePool :: StakePool diff --git a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs index ecde489c2f6..0f84a1d1938 100644 --- a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs +++ b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs @@ -81,6 +81,8 @@ import Test.QuickCheck ( Arbitrary (..), Gen, applyArbitrary3, choose, frequency, vector ) import Test.Utils.Paths ( getTestData ) +import Test.Utils.Time + ( genUniformTime ) import qualified Cardano.Wallet.Api.Types as W import qualified Data.Aeson as Aeson @@ -280,6 +282,9 @@ instance Arbitrary ApiStakePoolMetrics where blocks <- Quantity . fromIntegral <$> choose (1::Integer, 22_600_000) pure $ ApiStakePoolMetrics stakes blocks +instance Arbitrary (W.ApiListStakePools ApiStakePool) where + arbitrary = W.ApiListStakePools <$> arbitrary <*> (pure Nothing) + instance Arbitrary ApiStakePool where arbitrary = ApiStakePool <$> arbitrary @@ -329,12 +334,18 @@ instance Arbitrary StakePoolTicker where len <- choose (3, 5) replicateM len arbitrary +instance Arbitrary W.Iso8601Time where + arbitrary = W.Iso8601Time <$> genUniformTime + instance ToSchema ApiStakePool where declareNamedSchema _ = declareSchemaForDefinition "ApiJormungandrStakePool" instance ToSchema ApiStakePoolMetrics where declareNamedSchema _ = declareSchemaForDefinition "ApiJormungandrStakePoolMetrics" +instance ToSchema (W.ApiListStakePools ApiStakePool) where + declareNamedSchema _ = declareSchemaForDefinition "ApiJormungandrListStakePools" + {------------------------------------------------------------------------------- Test data -------------------------------------------------------------------------------} diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 5f5a0deadf6..4032478a0f1 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -51,7 +51,7 @@ import Cardano.Pool.Metadata import Cardano.Wallet ( ErrListPools (..) ) import Cardano.Wallet.Api.Types - ( ApiT (..) ) + ( ApiListStakePools (..), ApiT (..), Iso8601Time (..) ) import Cardano.Wallet.Byron.Compatibility ( toByronBlockHeader ) import Cardano.Wallet.Network @@ -149,6 +149,8 @@ import Data.Text ( Text ) import Data.Text.Class ( ToText (..) ) +import Data.Time.Clock.POSIX + ( getPOSIXTime, posixDayLength, posixSecondsToUTCTime ) import Data.Tuple.Extra ( dupe ) import Data.Word @@ -172,8 +174,6 @@ import qualified Data.List.NonEmpty as NE import qualified Data.Map.Merge.Strict as Map import qualified Data.Map.Strict as Map import qualified Data.Set as Set -import Data.Time.Clock.POSIX - ( getPOSIXTime, posixDayLength ) import qualified GHC.Conc as STM -- @@ -199,7 +199,7 @@ data StakePoolLayer = StakePoolLayer :: EpochNo -- Exclude all pools that retired in or before this epoch. -> Coin - -> ExceptT ErrListPools IO [Api.ApiStakePool] + -> ExceptT ErrListPools IO (ApiListStakePools Api.ApiStakePool) , putSettings :: Settings -> IO () @@ -271,7 +271,7 @@ newStakePoolLayer nl db@DBLayer {..} worker = do :: EpochNo -- Exclude all pools that retired in or before this epoch. -> Coin - -> ExceptT ErrListPools IO [Api.ApiStakePool] + -> ExceptT ErrListPools IO (ApiListStakePools Api.ApiStakePool) _listPools currentEpoch userStake = do tip <- withExceptT fromErrCurrentNodeTip $ currentNodeTip nl rawLsqData <- mapExceptT (fmap (first ErrListPoolsNetworkError)) @@ -279,6 +279,7 @@ newStakePoolLayer nl db@DBLayer {..} worker = do let lsqData = combineLsqData rawLsqData dbData <- liftIO $ readPoolDbData db currentEpoch seed <- liftIO $ atomically readSystemSeed + lastGC <- liftIO $ atomically $ readLastMetadataGC r <- liftIO $ try $ sortByReward seed . map snd @@ -291,7 +292,8 @@ newStakePoolLayer nl db@DBLayer {..} worker = do case r of Left e@(PastHorizon{}) -> throwE (ErrListPoolsPastHorizonException e) - Right r' -> pure r' + Right r' -> pure (ApiListStakePools r' + (Just . ApiT . Iso8601Time . posixSecondsToUTCTime $ lastGC)) where fromErrCurrentNodeTip :: ErrCurrentNodeTip -> ErrListPools fromErrCurrentNodeTip = \case diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 5a80261b353..59b6c434af3 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1266,6 +1266,9 @@ components: type: array items: *certificate + ApiLastGC: &ApiLastGC + <<: *date + ApiStakePool: &ApiStakePool type: object required: @@ -1283,6 +1286,17 @@ components: metadata: *stakePoolMetadata retirement: *stakePoolRetirement + ApiListStakePools: &ApiListStakePools + type: object + required: + - pools + properties: + lastGC: + <<: *ApiLastGC + pools: + type: array + items: *ApiStakePool + ApiJormungandrStakePool: &ApiJormungandrStakePool type: object required: @@ -1303,6 +1317,15 @@ components: saturation: *jormungandrStakePoolSaturation desirability: *stakePoolDesirability + ApiJormungandrListStakePools: &ApiJormungandrListStakePools + type: object + required: + - pools + properties: + pools: + type: array + items: *ApiJormungandrStakePool + ApiFee: &ApiFee type: object required: @@ -3000,11 +3023,9 @@ x-responsesListStakePools: &responsesListStakePools application/json: schema: oneOf: - - type: array - items: *ApiStakePool + - <<: *ApiListStakePools title: "cardano-node stake pools" - - type: array - items: *ApiJormungandrStakePool + - <<: *ApiJormungandrListStakePools title: "jormungandr stake pools" x-responsesJoinStakePool: &responsesJoinStakePool From 88c6cffd05a0335e005eb51029d6166c6b50792b Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 17 Oct 2020 15:34:47 +0200 Subject: [PATCH 06/29] Add stake pool maintenance endpoint --- lib/core/src/Cardano/Wallet/Api.hs | 7 + lib/core/src/Cardano/Wallet/Api/Types.hs | 19 + .../Api/ApiListStakePoolsApiStakePool.json | 7668 +++++++++++++++++ .../data/Cardano/Wallet/Api/ApiStakePool.json | 282 +- .../Wallet/Api/ApiTStakePoolMetadata.json | 88 +- .../test/unit/Cardano/Wallet/Api/Malformed.hs | 10 + .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 9 + .../Cardano/Wallet/Jormungandr/Api/Server.hs | 1 + .../src/Cardano/Wallet/Shelley/Api/Server.hs | 6 + .../src/Cardano/Wallet/Shelley/Pools.hs | 44 +- specifications/api/swagger.yaml | 36 +- 11 files changed, 7957 insertions(+), 213 deletions(-) create mode 100644 lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index b8478742a96..20f074b7c8e 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -125,6 +125,7 @@ import Cardano.Wallet.Api.Types , ApiCoinSelectionT , ApiFee , ApiListStakePools + , ApiMaintenanceAction , ApiNetworkClock , ApiNetworkInformation , ApiNetworkParameters @@ -203,6 +204,7 @@ import Servant.API.Verbs , Post , PostAccepted , PostCreated + , PostNoContent , Put , PutAccepted , PutNoContent @@ -444,6 +446,7 @@ type StakePools n apiPool = :<|> JoinStakePool n :<|> QuitStakePool n :<|> DelegationFee + :<|> PoolMaintenance -- | https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/listStakePools type ListStakePools apiPool = "stake-pools" @@ -472,6 +475,10 @@ type DelegationFee = "wallets" :> "delegation-fees" :> Get '[JSON] ApiFee +type PoolMaintenance = "stake-pools" + :> ReqBody '[JSON] ApiMaintenanceAction + :> PostNoContent + {------------------------------------------------------------------------------- Settings -------------------------------------------------------------------------------} diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index 0e9234feaad..ae2cc2c86b6 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -77,6 +77,8 @@ module Cardano.Wallet.Api.Types , PostExternalTransactionData (..) , ApiTransaction (..) , ApiWithdrawalPostData (..) + , ApiMaintenanceAction (..) + , MaintenanceAction (..) , ApiFee (..) , ApiTxId (..) , ApiTxInput (..) @@ -403,6 +405,13 @@ fmtAllowedWords = API Types -------------------------------------------------------------------------------} +data MaintenanceAction = GcStakePools + deriving (Eq, Generic, Show) + +newtype ApiMaintenanceAction = ApiMaintenanceAction + { maintenanceAction :: MaintenanceAction + } deriving (Eq, Generic, Show) + data ApiListStakePools apiPool = ApiListStakePools { pools :: [apiPool] , lastGC :: !(Maybe (ApiT Iso8601Time)) @@ -1397,6 +1406,16 @@ instance FromJSON ByronWalletPutPassphraseData where instance ToJSON ByronWalletPutPassphraseData where toJSON = genericToJSON defaultRecordTypeOptions +instance FromJSON ApiMaintenanceAction where + parseJSON = genericParseJSON defaultRecordTypeOptions +instance ToJSON ApiMaintenanceAction where + toJSON = genericToJSON defaultRecordTypeOptions + +instance FromJSON MaintenanceAction where + parseJSON = genericParseJSON defaultSumTypeOptions +instance ToJSON MaintenanceAction where + toJSON = genericToJSON defaultSumTypeOptions + instance FromJSON ApiTxId where parseJSON = genericParseJSON defaultRecordTypeOptions instance ToJSON ApiTxId where diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json new file mode 100644 index 00000000000..e2eeb259c62 --- /dev/null +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json @@ -0,0 +1,7668 @@ +{ + "seed": 1173689658848997361, + "samples": [ + { + "pools": [ + { + "metrics": { + "saturation": 4.901540561655154, + "non_myopic_member_rewards": { + "quantity": 561094230526, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 404472, + "unit": "block" + }, + "relative_stake": { + "quantity": 76.7, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1881-04-06T13:00:00Z", + "epoch_number": 15833 + }, + "cost": { + "quantity": 192, + "unit": "lovelace" + }, + "margin": { + "quantity": 41.31, + "unit": "percent" + }, + "pledge": { + "quantity": 24, + "unit": "lovelace" + }, + "metadata": { + "homepage": ">r󳷣瑾wsNKX󻢢􄂜\u001au]\u001f󂫔񦲦񱌉\"I򑡩󰗔]や(.\u0016󫂪3\u0013>}h}>𔙣\u0005+\u0006\u0016o5g\u000eh󫘚E=𛰣񥰺񇛪\u0006'񻢉L8񝸼t\u001a򷎢'kzT𷛜I\u001e\t󫩻z", + "name": "\u001f㔸wJ𛋊JL\u0004򓅨\u000b", + "ticker": "\u0012񽗚񅈃", + "delisted": false, + "description": "\u0005u,󀱡|Rj\u000b󾒶wᧃ \"\u0011\u0002nu򄈃Pgb70k򫰺\u0005󂺌\u001as\u001b񇟿W\u00189򆄢\u0012򪑯U㘊򞁲\u0014/+񖅡𓇯H񺲐2\u0016*>\u001e󡿍L\u0001/I>􎪊[J\u0006\u000f3I/\u001c\u000f񄕍\u000c_pk$\u000b\u0007Ek\u001d󭻠wG\u001b򗨏!򂮟\u001a򴴎E\nf򠁥򾹺\u0011f􇢿_񥃹ኍh>\u000cE󘇬𗛢)y" + }, + "id": "pool1xm5md6mrte2s4zextf3upzjywgu84xcvvraw6s0mew0ky9dg308" + }, + { + "metrics": { + "saturation": 0.14006311676891758, + "non_myopic_member_rewards": { + "quantity": 856368765897, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6225718, + "unit": "block" + }, + "relative_stake": { + "quantity": 2.37, + "unit": "percent" + } + }, + "cost": { + "quantity": 181, + "unit": "lovelace" + }, + "margin": { + "quantity": 28.57, + "unit": "percent" + }, + "pledge": { + "quantity": 109, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u000c78FZW\u0011r񚔖!iA𩏑\u0016TT𙝠4z󥠰V\u0005򳉭\t<뚛@\u0015\u0004(#j\u0012l󡫗oZ𰩉SG\u0000n(򶾎\u0008Ep񼣓", + "name": "\u00180\u0000]_aQ󅠓sR:<򠆃#\u000e\u0019v7X_𪴄k8C񡝽汭K.w`\u0011}2c𳬵(E\u0016t\u000bo\u0001R\u0010|lx\u0017-", + "ticker": "񑂾K^", + "delisted": false, + "description": "\u0008󒛤򍪦򠡤(FJ*󽅯򹫇\u0005H\u000f\u001b{yR9󏾚k\u000bq\u0008B\u0000hUDO󫚘\u0000\r𑭓񶧧{Is|\u0015" + }, + "id": "pool17d66m0qyksx55jrhux9x3hf8a6thnyjxkqkpp6x07j0l76ppe0e" + }, + { + "metrics": { + "saturation": 2.9722685576770158e-2, + "non_myopic_member_rewards": { + "quantity": 339770923441, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4360051, + "unit": "block" + }, + "relative_stake": { + "quantity": 14.25, + "unit": "percent" + } + }, + "cost": { + "quantity": 48, + "unit": "lovelace" + }, + "margin": { + "quantity": 30.06, + "unit": "percent" + }, + "pledge": { + "quantity": 32, + "unit": "lovelace" + }, + "id": "pool1r22tjt2hvhmg85h768s3egmssv2ylrtxy7vrwxzz4el4yz65k8z" + }, + { + "metrics": { + "saturation": 0.7533042969518716, + "non_myopic_member_rewards": { + "quantity": 476415617299, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8501854, + "unit": "block" + }, + "relative_stake": { + "quantity": 15.34, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1865-10-23T20:00:00Z", + "epoch_number": 1199 + }, + "cost": { + "quantity": 114, + "unit": "lovelace" + }, + "margin": { + "quantity": 81.67, + "unit": "percent" + }, + "pledge": { + "quantity": 152, + "unit": "lovelace" + }, + "metadata": { + "homepage": "d\u001b`𔊪-\u0000󱌃󐝵򂵻gR@\u001d<#\u0002\u0017\u0005b򐝴𲬲򣕑󚆫Q~󐞸\u0008:󣓳\"mX@\u0015𚴮 I}\u00075Aq^󑦭򅔆dq6𥥶󢳶`\u001a\u001c򮎣񽔸\r\u0003u󙢸_\u0000V􌻸𵾋wY鑻񹌥𥳕񦜌\u0010񱔒$\\3cJ.zE󣄘@]l\u001b񕁊q\u0014\u0000󚕓-]1򑫱qj", + "name": "3sh3Dp\u001f񛻹\u0007𶣆􀨒R麂9챓\u0012|D񁶯񘮯yzS񂣃=[)\u0012\u001bX𸅤񵟋7lu󾙶𼐨yu\u001c\u0004󚊋򥓗B\u001c", + "ticker": "񗅚1\u0005", + "delisted": false, + "description": "l9\u0019\u000f󯊋Z\u000c(iV\u0012ap\u001e\u001f@" + }, + "id": "pool1dyanjfeugapfr83aqqrrfkul3ukd5dy542gcszwa0gxmzmn5e5t" + }, + { + "metrics": { + "saturation": 1.6819066447284063, + "non_myopic_member_rewards": { + "quantity": 142645550853, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4260501, + "unit": "block" + }, + "relative_stake": { + "quantity": 91.93, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1898-08-11T08:00:00Z", + "epoch_number": 9954 + }, + "cost": { + "quantity": 65, + "unit": "lovelace" + }, + "margin": { + "quantity": 49.89, + "unit": "percent" + }, + "pledge": { + "quantity": 233, + "unit": "lovelace" + }, + "metadata": { + "homepage": "z\r\u001b.0-)2@񁠮", + "name": ".8`S򸗳\u0006p󳈉j;s򮐢\u0003'񣠦", + "ticker": "\\Y\u001d", + "delisted": false, + "description": "󫎯\u0014\u001d󟝾*_Y9򙷙󲚑%󲘂􉨲7򷻬\u001d򝺃I)􃶒U3 dO챕E񐵱d\u0004񭣦hw򱦶V`a.$B]\u0015\u001dh\u000e򦟶􃀫񭅇\u001a4FyO򽹗D𰡇1󞢪򵈣𗜇m/򦷆M󛱳gM7𗂉\u0014򿺄!\u0014<𩮱󔇢򋛻\u0005􁫃D\u0012󩔥⡣\\򑿼hk\u0002+UC\n6e`\u0006(c-񗖰\u001e𑙨P󒿹p򌁢_򁧿`\"\u0003񀬣$)\u0018q񫬷\u001aA\u0008C򼶔𥢵\u001b_i\r\\|󨻗Z\u001d󹭕RH\u001a򶱔1J𥲴[&M\rVy񹀤󉜦D2􀭋^wt18t0U󄮥\u0004y\u000e" + }, + "id": "pool17sj4fgct2n7j2h2x5txrlc73d8fmnjtl5tgvueum6mkqxgdzuaq" + }, + { + "metrics": { + "saturation": 1.1353949119140994, + "non_myopic_member_rewards": { + "quantity": 479265368862, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18158913, + "unit": "block" + }, + "relative_stake": { + "quantity": 19.12, + "unit": "percent" + } + }, + "cost": { + "quantity": 96, + "unit": "lovelace" + }, + "margin": { + "quantity": 83.48, + "unit": "percent" + }, + "pledge": { + "quantity": 18, + "unit": "lovelace" + }, + "metadata": { + "homepage": "m󛊬i\u0017󼒙Xd*򵪖O񴽬T񵀻&YgG􆅏J#\"|~񉼵#6\u0018~򀺔X򄼑\u0019r|\u0011vE [yT񓍩HG󥎨󎨫d'򨱼1{VAZ\u0003t\u001exQ1󅬔􌦝򭲛\u0015:󥽛_\u0019$\u0003+Qf𫓏RSW3기L\u0002|Q\u000bao\u0001", + "name": "𧎻a#&|𦆁򓐦w񖡺񽁞󵚐񅓭\u0007~40", + "ticker": "ISd􍍹_", + "delisted": false, + "description": "񩔹lz􁳹V\u001aW󎫄-򧝳\u0012򶙚򷺳~\u0007\u0008\u0017󠌍~\u0016\"+id9C*`=\u0019sJ񔗲񦥻stpHw􄏷\t𥀲ah񜘺񢫍ef\u0016hK񬕧\u0012DA\n\u0006EB\u0001L󱞧/uL􏆄𝁂W􌋩BO=>\tI𕭑k񱊥&iAx􍴹'2hl򖃎Пaq󆤿),\np\u0017񤴳}\u0001\u0013\u000f\u0015!8򗘩]\u0000tL񠿅񐖊\t􎅈$A=\u0005\u000e񛓘\u0019򆊏󽛗𔑐\r>G\u0005BEE𼤲\u00118򀿊\u001bY𬖇%񫱓\u0004\u001c򄄟NA\"󠑱\u0006:\u0000/\u0000\u0004𴼣@E3󁻢8򅤎5/􁦈z\\" + }, + "id": "pool173ecg2ry8v5a7apkcn48wgxwx0hcj9vcuq8lu222pxz2clp893k" + }, + { + "metrics": { + "saturation": 1.4033362432061143, + "non_myopic_member_rewards": { + "quantity": 55391111478, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17378514, + "unit": "block" + }, + "relative_stake": { + "quantity": 38.97, + "unit": "percent" + } + }, + "cost": { + "quantity": 203, + "unit": "lovelace" + }, + "margin": { + "quantity": 77, + "unit": "percent" + }, + "pledge": { + "quantity": 253, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򘯱/񆨰\u0003񨒩𲸧[)Se󋖝H}Y򵫺\u000f\u0012Jo^W򪾀qX񸀧퉷򢧶8gC󪕣Y􏮊\u0002%v@󗞠!(y\u0013񜺛+rG򑈕󮖀S*񉖗򻋉򰆱\n`񜘇$hYPNTeL.'4#45`P\r󰺳\u0006Ig\u000b6􉛾񯎛^l񮤶Z", + "name": "񹌉󈂗34zH򿽜<\\=\u0018\t`\u0005e\u0018\u001c\n<󷆶9\u0010񇾻8A6\u0018Z`\u001c#.I>򎱛񗢒񓧔?quP\u0006񩧍\n?󤐘󆹆\u0006\u0019\u0019񬲑j񱔊\u0017uVR􌴛󬔭󺘨7󉕇8r9\u0000򗯊d񂽲/\u0019F󻎶\\\u000c\"xv:39lV񇣈􏚰h󓬼򊬏\\\u001c[\u0019򎖴񨯞\u001f󿵪FB*[x\u0013=" + }, + "id": "pool1esu28hg4z4gdwe49gsqsxl6a6gkesrznaw3yt4ew8shycxna6ah" + }, + { + "metrics": { + "saturation": 0.45128550169057535, + "non_myopic_member_rewards": { + "quantity": 666822337654, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10517648, + "unit": "block" + }, + "relative_stake": { + "quantity": 18.03, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1883-05-29T06:00:00Z", + "epoch_number": 11073 + }, + "cost": { + "quantity": 133, + "unit": "lovelace" + }, + "margin": { + "quantity": 89.85, + "unit": "percent" + }, + "pledge": { + "quantity": 67, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u001e[ZfOA񉯢H\u0003\u00166\u0015\u001c\u000f`G\\jG񨷹1򥬚1픞򖰬󺀒fBn\u001eMi􎗫𵜂Cs맞q\u001f򅍔Kx𚫾<[\u0000Sc3\u0011\u0005𒮷󾶼[_\u0003P𵄫򕱲\"\u0012'!𴲱Wⱝ\u0017򶻵jc\u0014\u0012\u0004\u0018o)!򮵍q[\u0000\u0015blk 񡩲G}[.z񵩿\"", + "name": "񛁋T*`H\u000f.I\u0017󎼇F9WsFRU𧴷뻗\r񐒡i|:", + "ticker": "\u000b󔚹𲮹𯂨򤆟", + "delisted": false + }, + "id": "pool1ksgr6r8sgxgka527kzprqnx37yx00wxu0twtlm25qqcr2hvz60r" + }, + { + "metrics": { + "saturation": 2.1386943238362583, + "non_myopic_member_rewards": { + "quantity": 228955296353, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 14694702, + "unit": "block" + }, + "relative_stake": { + "quantity": 29.61, + "unit": "percent" + } + }, + "cost": { + "quantity": 118, + "unit": "lovelace" + }, + "margin": { + "quantity": 37.29, + "unit": "percent" + }, + "pledge": { + "quantity": 123, + "unit": "lovelace" + }, + "metadata": { + "homepage": "8_6򵻝6\u0017'lE\u0015\u0002D5T\u0001Xt\"𕄅`󨦧\u001c", + "name": "\u0011\u0008񭃱[w􇪔\u001b,}򯻢󥪹$]6#%q󡏘T,\n󜞠\u0010󐂃CI\u0012", + "ticker": "\u000cG2N", + "delisted": false, + "description": "\u0002skH\u0016,󺷮Uf󺕛48󜕾9h\u0005*NQ񒄓m\u0001\u000e)!\u0000H򙩹w>T\u0011\u0017F\u001aJ񷔟򊙟d:d#𩓕󞌕i󁆴󶣣d񨟕E򁍷񘟎񉃀G=򁌧;l𨿵񪭸\u000b>뿛񗫿󤶍o]`񉖵{\"󆫗'z𶤠-v󕯷3𛙫?󀥭$#󡑙绣\u001c򳺃󄘵s\u0017򒰡I\tkG\u0017$" + }, + "id": "pool1qyj7q8msurfq69pww2jt9uzquz4d5s80cyhv3w5fqzedxgde0vc" + }, + { + "metrics": { + "saturation": 2.6210418133951645, + "non_myopic_member_rewards": { + "quantity": 535248124476, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17040214, + "unit": "block" + }, + "relative_stake": { + "quantity": 48.44, + "unit": "percent" + } + }, + "cost": { + "quantity": 240, + "unit": "lovelace" + }, + "margin": { + "quantity": 47.78, + "unit": "percent" + }, + "pledge": { + "quantity": 254, + "unit": "lovelace" + }, + "metadata": { + "homepage": "j󣥹󜿳򂐛0S=\n򡇟𴶺>\u000b1}:\u001dw\u0005򭳍-𞗲I\u0016򛎳LDi{򭩳3Ew2hy~JDC\u0017\u0015MrKd4by@󃣥󃻤", + "name": "D%D3S𗿩\u0004\u0019\u0013걀i\u000b\n5\u000e\u0001&?𻺹6᨝2\u0004#𿛒\"\u00051+", + "ticker": "O~B\n󨟃", + "delisted": false, + "description": "𼒽\u0016\u001c;\u000fVE\u000cOI.!򷙟򭅼򠸇N𦽎f(\u000fG'S\u001e\u0005Hw񯁨\u0008\u0013?\u000er\u001e=-J񝩎goI\u0016󖿻\u0016k\u0010𫟥񈇑B(\u000b򾾨󅾲񶐳<-Up>I\u0000􋇼󿇪,󡟃􇸛-@wM|q𻩁&m7~񥝡\u000c$C򁋌v", + "name": "}MN]󱷧Y\u0001Bo !(\u0000\u0001󻬺DT󶛏\u001co1\u0006-\u0004^󒭅󺉭O/xsa\u001f", + "ticker": "\u0006򞧎?󄫙񿂫", + "delisted": false, + "description": "#q\u0004(񑵏򗏎=\u0005񴦾񺩒󡞯𿧗󹉘$I\u0002OKQ򈗡\u001f|󧁪mz򗚆\u0005$0vo \u0012򩵣\u0013g󼒞8+y򬁟#*󜋇\u0019\u0001#\u0015+⌤D񥛨Ss񪒋𐅂\u000b􆊩픈\u001e?,񇏡'i>a=\u001e󸂬dO9򶼸:\u0000Ii\u0001x\u00126[zp*X]󤋭`\u00061\u0010@7X򈦷\u0013La򖸱N%2\u0012a(fdp𥼂@%}X􃮎MA6񘊺񟑃\u001f\u000ew]󪑏𞹣oj\u0010󱪋g;tR򽾵񲐛𖳛u\u000e󪾁c#a򔚇" + }, + "id": "pool1pmmxxqz5pqdec7q4sjytthpq3frak7nl4y0du9qesr5ljdc78fv" + }, + { + "metrics": { + "saturation": 2.118250697172794, + "non_myopic_member_rewards": { + "quantity": 380079358882, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8680252, + "unit": "block" + }, + "relative_stake": { + "quantity": 91.29, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1869-11-08T14:57:08Z", + "epoch_number": 15168 + }, + "cost": { + "quantity": 125, + "unit": "lovelace" + }, + "margin": { + "quantity": 83.44, + "unit": "percent" + }, + "pledge": { + "quantity": 125, + "unit": "lovelace" + }, + "metadata": { + "homepage": "35v\u000cq!F2/co\u00121{S񊧬6", + "name": "󗙬񍠎M𦝎5r", + "ticker": "賀\u0019󀪔", + "delisted": false + }, + "id": "pool1g6t060kz735dpkhwq9p3z50hfq8du6afjmjtxqxfr5ttyzdx9rk" + }, + { + "metrics": { + "saturation": 3.1638368037543336, + "non_myopic_member_rewards": { + "quantity": 996556215530, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11628624, + "unit": "block" + }, + "relative_stake": { + "quantity": 49.83, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1879-01-14T17:06:14Z", + "epoch_number": 14842 + }, + "cost": { + "quantity": 149, + "unit": "lovelace" + }, + "margin": { + "quantity": 59.79, + "unit": "percent" + }, + "pledge": { + "quantity": 206, + "unit": "lovelace" + }, + "metadata": { + "homepage": ";!􁑤}򺩏􋖜w򫗥&Op3ZMV9鸕%\u0003𸐬wZ󁋒򷐈.T\u0007P򡓍󥳘e\u0010C|𺈢򬽨3'򇳁V\u001ab#Rh񖷤7d\u00180a򎨐򽦃T\u0013򞓷\u0005񭑰8򈲫r􃱃󍦪T􂫳/Nj@򝇞/?;R2\u001b𗡇\u001d2z\u0000\u0012\u001d\u0004a񞽮5񧡒T\u0008\u0010򣽑Vr\u0010", + "name": "񺴖O7c􆜱\"_\u0005(\u0016򪙍\\i󋜐sL(󰟥Hy_\u0003\r_\u0012\u0002?['𨤟\u001cr", + "ticker": "E򝌾M", + "delisted": false, + "description": "\u0012\u001f\u000e뒌K򇚠Y$\u001e󴦐Q@\u0014\u0000R𾆇\u000exW񵍜󨬋\u0004\u00198t\u0010O" + }, + "id": "pool1j0k6r8ry5vn5pc7c8a5h6f5k303r3w27tsnv4jnz9nv6z6lr3e8" + }, + { + "metrics": { + "saturation": 2.5835632946509914, + "non_myopic_member_rewards": { + "quantity": 257132150092, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 20072532, + "unit": "block" + }, + "relative_stake": { + "quantity": 33.82, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-05-05T15:00:00Z", + "epoch_number": 26325 + }, + "cost": { + "quantity": 172, + "unit": "lovelace" + }, + "margin": { + "quantity": 26.94, + "unit": "percent" + }, + "pledge": { + "quantity": 48, + "unit": "lovelace" + }, + "metadata": { + "homepage": "J6n6n򎗎ZC񔳴\u0018򈟭񌐓\u0013\u0012k:󱮏qKW!󓒖|[1\r=", + "name": "򔜴C:򎢄tK򚼕eBpu`򒉹2U2\u000e#uxtt\u0007;C\u0019󀼸𩼣C]\u0014󆘯Sm9m\u0004𫶄⊟", + "ticker": "\u0017𱌃\u0013_\u0002", + "delisted": false, + "description": "2;@򂟟4$󮬟I\u0005'B(:\t񘻐^\u0008\u001b\\u񭾕/X\t􂱨Q2\u001c𓭚Gc󜗬򡼑򦇲\u0014񞊀\r򋒁\u0004뙄F'T@e\u000c:>IIy􍙡O\u0010񦬝>!kp\u0007;^{" + }, + "id": "pool1t76dzzn26h9ndjt8vjtnszu4syahf4q9sxvkzwlecrjl769rnn4" + }, + { + "metrics": { + "saturation": 3.4822609745692104, + "non_myopic_member_rewards": { + "quantity": 503575010797, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15976166, + "unit": "block" + }, + "relative_stake": { + "quantity": 85, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1860-08-22T14:21:54Z", + "epoch_number": 6423 + }, + "cost": { + "quantity": 148, + "unit": "lovelace" + }, + "margin": { + "quantity": 18.62, + "unit": "percent" + }, + "pledge": { + "quantity": 239, + "unit": "lovelace" + }, + "metadata": { + "homepage": "1񛀸\u0013\u000f򱌸c󩫃e󚕦󴲖󮤲\u0014d\u0018򯕦\u001e𻠜>J^nYbO򕎇\\h(n򌊱vR򔘊_񫀌񹓩$􂶵$|󗿚\u0008\u001aq\u0001𗗂%򻯄@򢉨", + "name": "v?񾯸Zqqg\u0008j󭍜\u001e", + "ticker": "\u001d泧\u0013", + "delisted": false, + "description": "\u0008󚆏󣽜\u0004\u00164Z)\u001f5𱑑O5\u001a Cf󊚈'\u00009\u0018\u0008񳞡󵪩L𚗍n󧎍\t%񃸜Pr\u0000\u001e\u000f\r򺥼](k򣳝򎃊a~򯙆|󈰢)\u00138\nN\u0001'񆾎l\u000f󮇾\u0004&/F\u0002.ZA rk񖜐\u0018\\\r\u000f./򘌃An]\u0016b󩻋vh󝚤􌟝򓚡󀴠𥢌󄏍񴿇\u0011s.񄟣Y\"q\\𪁫񒝽$\u00089D\n\u000c&􆯰e\u0004\u0003󫦶1𧸰W5=󃹩1𦶔!񎮬(\t\u001b\u0002􈋖Pfh\u001e)p$QP\u0005𵱷X\u0005򗆻𱅀x\u001cVIx𡦭o?3\u001e0%򁓠3󨋌Y\u0004򾰩 b\u0004'\u0006𛇡䝥\u000c󱉖3#l𭚎(򊽝>7E\u000c:󀙞>󌭾񰙕X\r\u000cs򚈎y𥱣q\nT" + }, + "id": "pool10v7esrrqsd2m6y9r0y6xyv4a0dcf2aznjp43mtxmtags7t4ee8w" + }, + { + "metrics": { + "saturation": 0.24095701546941628, + "non_myopic_member_rewards": { + "quantity": 159952934297, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10485878, + "unit": "block" + }, + "relative_stake": { + "quantity": 51.68, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1865-04-18T15:31:59.108575748588Z", + "epoch_number": 23210 + }, + "cost": { + "quantity": 55, + "unit": "lovelace" + }, + "margin": { + "quantity": 84.61, + "unit": "percent" + }, + "pledge": { + "quantity": 71, + "unit": "lovelace" + }, + "metadata": { + "homepage": "0k'7gQ񆇥R󾘯\u0010\u001c󈱦󴈟\u001a\u001ahW%\rC,}Ys򔛖{\ta5򇵳񌭺\u0003~l󫲢e\u000b?p򫨥4򞗚r\u0014T𳑟𢽨󩑕^", + "name": "𐁇\u001e񉡰񊃕{+", + "ticker": "󵀌񪒊򣪶", + "delisted": false + }, + "id": "pool1dsdrq8k8jkc2zgap5lwxgg4umya0unhk3393xdwkswwpjwfqtq0" + }, + { + "metrics": { + "saturation": 1.829412867919706, + "non_myopic_member_rewards": { + "quantity": 176045624099, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4136665, + "unit": "block" + }, + "relative_stake": { + "quantity": 20.53, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1876-09-25T20:30:46Z", + "epoch_number": 13238 + }, + "cost": { + "quantity": 142, + "unit": "lovelace" + }, + "margin": { + "quantity": 67.12, + "unit": "percent" + }, + "pledge": { + "quantity": 196, + "unit": "lovelace" + }, + "metadata": { + "homepage": "OA\u0015򳽛'򯌇񤗑&.󘸈k󼤤3B񁔈j0C%䣈옳Ms\u001dI", + "name": "񴌛", + "ticker": "󘲐\u0004a񿩫", + "delisted": false, + "description": "򚋧\"m|\u001a𞄼󔸲px\u0012~S$𚌧|򲴳:|S.o򎀇JE󗘌\\ku>檞:s>񹋺\u00062E)5􎻁/\u0018t򷕜򅌔DgM𷗗\u0011\u000e\u0011&z􈫞񍞬񾾜[\u001er\u0018\u0003\u0000N󪏲򕡜8]򰕼򲤘mQ򲩖\u0003=%򊆩>C򆭙񏈟D𲧟󭞬bj\u0004I5\\s\u001c􂠻\nxH򅦂@g򥝫5\u0005𓲒񙯕񌄫򮱍g;0LTP-a󑉧\u001e\u0012󔉉+\"󆦳-\u0004򋗂򍘪\u0002\u000bU\u001f\u001dM󢮘G\r𮞑\u0010,R,񧍔\u0012AHjIw.󗠝򫑸T>9󄁦X+𾿑񮼕ZexI;󨗬򜁒\u0017O󶘸v񚇒𛹘_b󯤽\u001f\u0016\u001e\u0010\u000b( !\u0006\u0008q񊕴LX\u0008\u001dBIWg򿏴,@\u0016G\u0013\u000biD󐤛򢶰\u0016񌀁氤P)S\u000b*\u0007*jJ򝲛\u0016\u001e&)\u000fzp\u001eD\t򓩺", + "name": "񙶺Y򷹁\u0005", + "ticker": "W,E94", + "delisted": false, + "description": "\u0013\u0016򺷶l7񠧋\n&󈅛q,򢹙%𰸠m4􆙵2c\u0008򘌸\u000c𗓞UTS󽩂s\u001e;𜷟/p]\u001daL󹱏m𜱐J񌭪򏳟򫟘H𰥇" + }, + "id": "pool1h5jrchvzhzux4hk0xe0wmhgjqgkzfzk390hj6vfgkgw6wu6p89t" + }, + { + "metrics": { + "saturation": 2.281765642221536, + "non_myopic_member_rewards": { + "quantity": 110410852594, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22243838, + "unit": "block" + }, + "relative_stake": { + "quantity": 4.09, + "unit": "percent" + } + }, + "cost": { + "quantity": 146, + "unit": "lovelace" + }, + "margin": { + "quantity": 58.91, + "unit": "percent" + }, + "pledge": { + "quantity": 227, + "unit": "lovelace" + }, + "metadata": { + "homepage": "Ek󐽄Fih𽁿򁏾a\u001dp\u000b\u001c\\苨u'8󃒮z7\u000f+\u0018𻑏\u0015+휋_\u000bO-𠀎򵠋", + "name": "\u000f2󉙕󑊂{^]|\u000cv~𝿔fq3𫥟򯉀T򍈇񋙵qCW񆞓񐷸񹳢vFG񣗵o6aW򤟜\u0015\u0001", + "ticker": "VS񟰺", + "delisted": false, + "description": "\u0010𠡭񊑽\t\u0018񳺬\u001aM2񽁼񻋻󒲀\"F\u001c\u001b𭦼Zp\u0016*\u0003Hqd7\u0016E󅨿M?𶸁j򰧲񅜦Y.#D;\u001e!\u0002#󵘌A񀊅?\nA\u00116󊹹B%q\u001e\u0006\r6|Wo6\u000e$\n\u0007\u0014𗇒sY3\u0006\rw𐥓󵋓A|\u001b'􌛘Ls:𒯺" + }, + "id": "pool1gnytqrregcjzl5gqe9wdshfnccgjrwgcsddflru80vunz6uumje" + }, + { + "metrics": { + "saturation": 0.3596149168690749, + "non_myopic_member_rewards": { + "quantity": 904227683903, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18865619, + "unit": "block" + }, + "relative_stake": { + "quantity": 37.63, + "unit": "percent" + } + }, + "cost": { + "quantity": 54, + "unit": "lovelace" + }, + "margin": { + "quantity": 10.98, + "unit": "percent" + }, + "pledge": { + "quantity": 195, + "unit": "lovelace" + }, + "metadata": { + "homepage": "vD󢒘}", + "name": "W2\tKJ\\򁇉'mE4X", + "ticker": "Y-C\n", + "delisted": false, + "description": "m󑣇mc$f\u0007E񰣼󊡸4\\H\u0005]y9^\u000cL!\u000eN],\t凓𧂷\u0015\u0003s򨘯)󥧮e*\u0018t!:򬍁E\u0005\u0018g:𵏻g􀈧+8󪤆M󣸽C\u0014\u001e'\u0012\u0012B򂃋3󱝇@7:8\u0007󤹜󿼙 ,󹼽gSwe𙢄1u\r󮑳yj\u00119\u0003񲲇\u00083𼮾F񎾮\u000c9\u0014\u000c\u0006\u0018" + }, + "id": "pool1keq7gtx3v05tu54p67e9ucv5w5cx7j5m7zyvtyrytmvjznldd0f" + }, + { + "metrics": { + "saturation": 3.203215820746813, + "non_myopic_member_rewards": { + "quantity": 443176803660, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 19886718, + "unit": "block" + }, + "relative_stake": { + "quantity": 6.01, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1871-04-10T20:21:44Z", + "epoch_number": 24342 + }, + "cost": { + "quantity": 95, + "unit": "lovelace" + }, + "margin": { + "quantity": 13.39, + "unit": "percent" + }, + "pledge": { + "quantity": 21, + "unit": "lovelace" + }, + "metadata": { + "homepage": "񁪫p{m񳵍G𗚙b@\u000c1)q󑷒\u001c𖓥6emo8B\u000bY&C𽞤𥁙y𐹽7\u001e\u0013m;\u0015򬴲MxFoZ의𖶪FD㷾];s\u001e䪚\u000fvZ􉬙9S\u001d𡤍&G\u0001b,\u0018\u00123\u0010󞣖\u0013kOaO񚒬\u0001񖌼z\u000c\u000e5>H\u0014dd􇓱򌈠x񵛜񯹣\t-񒞷\u0015", + "name": "򴠒B\u0000u!Ko\"4S󿤧'z𚼧!U<\u00134𚒕ea2YoD$\u0004\u0008EAK\u001b\"H񻭠\u0019\u0003Ng𯔠󱈰V\u0004򆾅<", + "ticker": "\\\u0005A`S", + "delisted": false, + "description": "*󩧜\u0019󉽍+\"\"mbj\u001c X\u0010𿺩2\u0002򬳩񟃊\u000eY󉯥󋱭\u000e\u0014\u001e񆳅\u0010Z𚌙:\rFR|hF\u0007l\u000er=8l $\u0011񌉫Z󔅆t\u0002񏱔򓠁fS\u0015,\u001e\u000e)\u000eBX\u001a\u00079D𨛾6򜇩\u001f&񦋔9戦󵞗p񧤐򀇼@쇬񆄊^\u00043\u0019\neu󉤍񗣹񴳛B#g\u001aB򧖲w򻧑@\u0006P}`B\t/\u0003\u0011󍯯2\u0004hX~􀿔\u000fsv񒓆񃃠\u000e!𽔊\u0018/jL" + }, + "id": "pool1le545c62mqd5nq9khqgs76jcdchg778f08md5ecfk3jw2wh3tqy" + } + ], + "last_gc": "1869-01-15T04:27:44Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 0.9551275633242984, + "non_myopic_member_rewards": { + "quantity": 804067208875, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5401512, + "unit": "block" + }, + "relative_stake": { + "quantity": 35.79, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1870-08-02T23:27:48.982418696549Z", + "epoch_number": 3487 + }, + "cost": { + "quantity": 114, + "unit": "lovelace" + }, + "margin": { + "quantity": 47.78, + "unit": "percent" + }, + "pledge": { + "quantity": 135, + "unit": "lovelace" + }, + "id": "pool1kjgrutc6r68pdk64c8hy5hwp8vftrhmvsc0rltmx464gy024vnd" + }, + { + "metrics": { + "saturation": 3.021211793662692, + "non_myopic_member_rewards": { + "quantity": 848945961832, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5159473, + "unit": "block" + }, + "relative_stake": { + "quantity": 62.94, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1870-06-27T02:02:37Z", + "epoch_number": 12029 + }, + "cost": { + "quantity": 55, + "unit": "lovelace" + }, + "margin": { + "quantity": 44.56, + "unit": "percent" + }, + "pledge": { + "quantity": 234, + "unit": "lovelace" + }, + "metadata": { + "homepage": "3񣝪򇡁n\t󯛼sfm8\u000b񠴶򀉡0񖎓n2kv󉏵:4--@\u0008D𧾦\u0013R󴧓*", + "name": "DA\r򫪏\u0017`Dwo\u0008𙊪5X򵒢[E\u001d󺬊[\u0011\u0010qk2񤧦g`񊚏V𺮹?\u000c􄶙󴴹\u0019󴚝G񱟎遻N\nR򰡾󻆢", + "ticker": "򛑭i񰄎򚰁", + "delisted": false, + "description": "g!\u0008)򞌩󑅑ea򄋜O􂊮F\n\u001a񐭢\u0005GcW򎜨]\\]B򭿒򂑁A!򩏠𧮆o\u0002\u0006;\u0012򍋰𰥎\rBwi򀍔'7\u001bK񙃽 򃝵V^tJ𥶼i\u0002\u0008k\u00184񃻳x񊝫\u001cF󀞍8\u0016oD\u0005񝊝0\u0005ſ񑳍{~]z\u0004N33\u001b􀐃%(8𣱶\u0002\u0010G8&R𡸠@$e\u001be򌁩\u001e5\u001fat m񩆵𛙯I(u\u0013\u0005􆏐𬧜\u0007\u000egM)𷏹bIp󔹾􃖯)\u0001\tb\u0005sp򛥲" + }, + "id": "pool1d53qp7x6tf82g28x50648zgpfh75xhfjwfz3mky2admwk84qq86" + }, + { + "metrics": { + "saturation": 1.8870377260389897, + "non_myopic_member_rewards": { + "quantity": 951057796463, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21682094, + "unit": "block" + }, + "relative_stake": { + "quantity": 60.34, + "unit": "percent" + } + }, + "cost": { + "quantity": 63, + "unit": "lovelace" + }, + "margin": { + "quantity": 65.07, + "unit": "percent" + }, + "pledge": { + "quantity": 47, + "unit": "lovelace" + }, + "metadata": { + "homepage": "k򗊅򌺨󻌊AE\u0004򐙓򆑶񜽮\u0011\u001fe6\u0002tⰕ", + "name": "Y~y\u0004\u0014l^8\u0006;For񏯛\u0014H", + "ticker": "pQF񲤣򖫧", + "delisted": false, + "description": "o\rsGT|c`D\u0000𦘏Dvs(\"@$\u0017\u000bB𬓮U8T\u001b\u001bl0@{GP򥈠Ugb\u001c𔡫D󿴎\u001cN0!N񣭽$󧐔>0\u001f\"\u0002󾋹\n􏩺󍂐&a,W򆾒m\u0008򐆑q{M4Q􉶕%o񐫞\u0018򐌌\u0018j&T\u001f \u0008>\u0008" + }, + "id": "pool1jeusjzegadvvrhvj6qxwwejzlala7yp8qlszm3fuk3j0z5067p5" + }, + { + "metrics": { + "saturation": 4.434353119120328, + "non_myopic_member_rewards": { + "quantity": 75102759366, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10937356, + "unit": "block" + }, + "relative_stake": { + "quantity": 72.1, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1863-09-16T16:56:54Z", + "epoch_number": 32095 + }, + "cost": { + "quantity": 80, + "unit": "lovelace" + }, + "margin": { + "quantity": 48.99, + "unit": "percent" + }, + "pledge": { + "quantity": 214, + "unit": "lovelace" + }, + "id": "pool1e2lns4eaj28ndlgg0wzxmwampur9lc7ahzqk4wyzxpz428ntrk0" + }, + { + "metrics": { + "saturation": 3.9171119288506033, + "non_myopic_member_rewards": { + "quantity": 276667319673, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13617899, + "unit": "block" + }, + "relative_stake": { + "quantity": 23.53, + "unit": "percent" + } + }, + "cost": { + "quantity": 42, + "unit": "lovelace" + }, + "margin": { + "quantity": 42.9, + "unit": "percent" + }, + "pledge": { + "quantity": 163, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0019o", + "name": "vk𫲢PK򉺻nuu\"y򙋻󴟬>A𣖗񙎒U\u0010N\u00173}񳆡񝞭\u0004`m񏑗􁓲󛬵Aqt' ^,7󆕟N*俣𯭁:\u0006󿖦", + "ticker": ",D\u0005", + "delisted": false, + "description": "f񃕌%L7T?\u0012e\u000c.X𞢉[m򫃖Jlxg􍌋?B\t򧎑󮼺\u001ebN筍򶴲6g4\u001ap񜎍V򥆈󆡫\u0015\u001e󩐇j%򲴣m\u001c󽃸l2􅷊󜎜\u0008򲮅\u001b#NFq󱼰\u0017*>N􀣡\u001b𺦷ln\th\u0017A ?G\u0019r\u001d-*{,2\u0018\u0011?.򎯦j򂵭\u001b}n񲓌U sMKmD\u0007 5%v񾘃\u000b>񻪼🉊7\u0013\u0012\u00013\u0007Q-􃔄𣱂PWg,🱰l\u0000\u0015:򶔎\u0002W>񀇃N𪫓񃼒2$\u0006]s򂷩򶘀񆞯\u0000E3󯦍O𳇀F\u001cf:9񈈶t/$5#l񦧫\\\u0001\t\u001f\u001c}L񯼠򐕣\u000b=&󌥼򽄎󷹙\u0015󘔡c㸤QC\u001a7j2󀩰𡊸u\u0015OX􆶡񄮴)~򁉟\u000e򋰵U/\u0007񒺽S앁%t𮒦t.1V\u0000󈬡s= 4o!\u0012h򲳩;񜐏\u001d\u001e(|󱙉R񸍎As>2𖄈B\u0010" + }, + "id": "pool1shh9r2nwd78mhtr7hkx9u4vuugw6776n4m3rgdfw3md7wkmh9y8" + }, + { + "metrics": { + "saturation": 4.511399810476544, + "non_myopic_member_rewards": { + "quantity": 950152260089, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11376347, + "unit": "block" + }, + "relative_stake": { + "quantity": 53.78, + "unit": "percent" + } + }, + "cost": { + "quantity": 94, + "unit": "lovelace" + }, + "margin": { + "quantity": 62.21, + "unit": "percent" + }, + "pledge": { + "quantity": 10, + "unit": "lovelace" + }, + "metadata": { + "homepage": "/󂎢􏂞󣌨n𜍫s𞧼qs󔞁\u0006xU񔗧A򅯜Z8폴\u0010G$K2\u0000󣛱`K{m\"񞄙;8]􄲽\u0011\u0007\u0014󍷯OTzII\u001b+6𬉥m𙗂򌍂s+T\u0018g\\󄿽", + "name": "\u0014cl蜸\u0012񆮑\u000bWf񄉠8s88\u0006㢯\u000cAQ\u0018*\u00128\t\u0003\u0012\u001c񀚓#xsXM+JbF\u001d򷺴\u0018{𞩑y,h", + "ticker": "\u001d􃂯l", + "delisted": false, + "description": "tn\u0017&P򻃑\u0017v\u00089I񪀎񖞐򰪷󣪡\"􎹢y\u0008񛛲e񠷽lS)dMS𴪋򑒹:\u00047\u0005򗨃M񨄜P\u000ce\u0019v󍅹@a}\u001a򽪢\u0002𷐟򴓱v1.7&v\u0016񋻠h򮄢}򀊒a-\u001fB_AjN3񤠶\u001bqB!\u0018󰱻\u001c\u0014\u0000𸦥󛺝􇆏4/WP~񊲼TP\u0003񇡃|\u0018X9~c$9}@t򢫅?1񉝖񭟻Lu\u0018򁳄񏛓\u0016\u0019𽓆򅍒SC9񺕇FVEC󕅳Dv񜜫2󯧼sf񣲲E򞵌=\u000c6򤙍K\u0016\t\u0013ᵤ\u0002\u001d1'򔞭]" + }, + "id": "pool1tzrcvl359nd9tmzvnd0nwweuweex5euw4uct5fyn5732qw96kpx" + }, + { + "metrics": { + "saturation": 2.148582250652506, + "non_myopic_member_rewards": { + "quantity": 258618035612, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 332811, + "unit": "block" + }, + "relative_stake": { + "quantity": 22.94, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1887-02-17T19:39:33.488010286708Z", + "epoch_number": 26016 + }, + "cost": { + "quantity": 113, + "unit": "lovelace" + }, + "margin": { + "quantity": 20.56, + "unit": "percent" + }, + "pledge": { + "quantity": 209, + "unit": "lovelace" + }, + "metadata": { + "homepage": "s񻞟}򦓝>􃯓􀙟󠛇\u0001󤆗\u0018/\u0016\u0010\u0000򓌽*=u򝫷\u001e\u001fE㿶\u0003A\n𦂽KDH;hU%\u000f;\u0015l~𦯰Q\u000e,\t\u0005l򕪊IF􆸊_\u0010:>򒫎^W", + "name": "򦻹󔸗\u0016@\u0001𜊢e[\\x򄤏\u000b%+\u001c*9", + "ticker": "eU񽒖", + "delisted": false, + "description": "_HH񘝔A󻹉<_y{^1򏺼񼕵r\"E\u0017y񮱀\u0005򐠺𯜱񞉾\u0004Dd񦒰󌵄f\u0007\u000b^󸞮j10󶓤FK]vGs\u001eZ򦚨1𳚉:󴼐3G򿽃:blxz.r񳈐񢽍W\u001a|ⷍ>񨫠I󗻔-𡀛6򖾁@R񧶯򜋯񞌫񅓛lC^t𷯒\u001ahh\"LtB\u000f/b󈃼WP`\u0002<\u00104#\u0012>񲠼򦭷򖂓&T󨔣\u001cu}򕀏\u000fSc\u000b\t􉿃񴥠\u0007\u001b𙰕\u001d\u0003\u0000}Yo𽕊\rY3N빂\u001b3\u000f\u0019򧥜즴j񽠂\u0004덆󇩂Xm񀂞J\u0013'\u0005%\u001d2Dk򆀉KA\u0019%򁅧򮡺xspil3\r[aL\u0014w\u0019jm\u001c\u0010ꧬH\u001d񜎍7\u001fo9\u001e|D;C\u0019񣼍󔧤tpp򟋠𧺽h" + }, + "id": "pool1w6de26x7kk2nek0j5zv2cdzk93vdpqgxm68n5azy0cpdkyscqxq" + }, + { + "metrics": { + "saturation": 1.4773620861076875, + "non_myopic_member_rewards": { + "quantity": 81972810653, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6380693, + "unit": "block" + }, + "relative_stake": { + "quantity": 81.15, + "unit": "percent" + } + }, + "cost": { + "quantity": 33, + "unit": "lovelace" + }, + "margin": { + "quantity": 39.8, + "unit": "percent" + }, + "pledge": { + "quantity": 160, + "unit": "lovelace" + }, + "id": "pool1jq75dzj586e870pgeugclphennjx9eplna057gdqqvzv68wj3lz" + }, + { + "metrics": { + "saturation": 2.5794251526532386, + "non_myopic_member_rewards": { + "quantity": 161402676849, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 7887211, + "unit": "block" + }, + "relative_stake": { + "quantity": 6.96, + "unit": "percent" + } + }, + "cost": { + "quantity": 10, + "unit": "lovelace" + }, + "margin": { + "quantity": 15.06, + "unit": "percent" + }, + "pledge": { + "quantity": 248, + "unit": "lovelace" + }, + "metadata": { + "homepage": "񰒳񊧤񩯯*뽱_6񖋡\u001a8eM#TK\u0017a&\u000e\u000f򾨇\u000f\u0004񵜓AE衞t-~󘹕{7껦𓔙uY񝁋){$r\u0000.򖕨}󻻴i|zSC𤌺<񷬍8k", + "name": "p𰨹񩘐HhL\u0005?s\u0010R򝄧󘛊h󾛡\u0001M\u0015P󄥠\u0013U\u001e6楐\u001e񊾢\u001c勮", + "ticker": "%Zn", + "delisted": false, + "description": "];󠂗4q\u001fB򍆝>񪶔,􍿙𿯏𲔪\u0018>dm񢣳󬙂zI\u0007n\u0000苻6􀻽򒂥ai\u0019\u00174~p\u000cR\u0013򪾻(𗡕󝴼\u000c#𥤋?򼺗񾔒🳽\ny𣧅򒤽N\\Q\u0015uk\u001buih\u0005\u0006\u001c𨅒?𱦲B\u000fM\n񻘋\u001arM\u001d\u001c񈣍SaL[J*f:󗶌d:<;{q\nX󤈡k)Mf\u000c\u000c5\u0005\u0017𔩋򚍴􋈣5\t\u0011T3jWt " + }, + "id": "pool1qnxjpu49leuasfdyj2cm79ycepdtx89zyv6tmhlvhgaevpvyafc" + }, + { + "metrics": { + "saturation": 2.746959070012095, + "non_myopic_member_rewards": { + "quantity": 799782916925, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 14118636, + "unit": "block" + }, + "relative_stake": { + "quantity": 19.89, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1896-12-03T03:10:12.383174921143Z", + "epoch_number": 2936 + }, + "cost": { + "quantity": 45, + "unit": "lovelace" + }, + "margin": { + "quantity": 16.16, + "unit": "percent" + }, + "pledge": { + "quantity": 37, + "unit": "lovelace" + }, + "metadata": { + "homepage": "K\":\u000bc.", + "name": "n\u000e1+򴶇𧗅b)򆃈q0🞀񷂒WPF򠕻굱k򏿣FB2z\u0003l@\u0005󶏯T|󧟎\u0017򿼈􇍔K6R\u0004V'\u000f񢤗\u00060B\u0004\u0003󘟆\u0008Xz\u0000򥎙m\u001f\u0004􈝫򊲙Q(R\u0017Lo\u000f򞣳" + }, + "id": "pool16fq6xy97dvfc924d83xha2752cljh8l7y2hg423mygy5jzzndmn" + }, + { + "metrics": { + "saturation": 2.1594521200569092, + "non_myopic_member_rewards": { + "quantity": 866958819006, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6882074, + "unit": "block" + }, + "relative_stake": { + "quantity": 37.38, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1894-07-15T13:18:12.627356324673Z", + "epoch_number": 2351 + }, + "cost": { + "quantity": 226, + "unit": "lovelace" + }, + "margin": { + "quantity": 18.47, + "unit": "percent" + }, + "pledge": { + "quantity": 55, + "unit": "lovelace" + }, + "metadata": { + "homepage": "7\u0001]󅂛\u0003/󸙔X+\u000f`EO\u0012񶊉(P\u0018^6DVf\u0014\u0005We񎌻󐙤jC\u0015zL\u0014\u001dᎡIdlC[\\󉼥􌩱񀋛\u0010", + "name": "Y|}\u0008?^\u000c𯯱q塶纓qe\"=BnW񮃅k\u0004aX򚏞\u0013=cP| ", + "ticker": "\u000bJ\u0018?", + "delisted": false, + "description": "vt=0U\r\u000e򮮩@򩠑 \u000b𜽁V-K򱔓?|P\u0002𵴩r^񺻬\u00127\"\u0015񲭀[\u0004򌯊Z\u0006|\u001aXz􁿺j\u00143񿠪ip𥫟󚵕O4m򯾷EtE\u0017󆐑/)(\"k.<򷒇񡡏𹠏\u001fZ񸳞dV󮗗:?|񀾮r򞾗$ZB𗷉\u000e\u001frh򡘝_𭦍񠽩pk\u0000\"񬰦6f+\t>%p᪺`?L7𼾎G\u001a~\u0004򩍎kJ\u001d9𭒱𝊚\u0008򶦿`@󆼞𫦃A\u0008l񕌳\u000f\nC󠶆0󻡽󣕀\u0002'G\u0001a^\u0002'!'Y𠃄,E񷓮\u0006|\u000e`pi(Wv_\u000b󬍶/bs;o򟲴􀋡󦛌:\u0006􏭝\u0003\u0011%5󀐨&5󬯲򫈭U\rh!\u0013񑭟" + }, + "id": "pool1wkhyh8x699370klnanh3scgz9pu2rmu58fv5aczmmvssgndae2w" + }, + { + "metrics": { + "saturation": 4.868965184484193, + "non_myopic_member_rewards": { + "quantity": 153612684766, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9962514, + "unit": "block" + }, + "relative_stake": { + "quantity": 97.32, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1885-02-07T19:00:00Z", + "epoch_number": 23351 + }, + "cost": { + "quantity": 212, + "unit": "lovelace" + }, + "margin": { + "quantity": 50.18, + "unit": "percent" + }, + "pledge": { + "quantity": 100, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\nB,􍮷l2'u\u0018a󺊣󴎒/92\t\u00187򠜆妋󀎐zJ􅖸JwE󙸀󤊐\u0015C\u0002]|񟆱!𕱞8󻛔*y\"\u0016\u001d,򎕠\u0016dn-\u0014SH󶔗\u0004\u0005񼥢򗁻(r3(\u001d\u001d=\u001f𡊂`󬐨1󽮬Z\u0018|9!򳵗XN񡰴(b/Vc", + "name": "4\u000c\n", + "ticker": "K\"K", + "delisted": false, + "description": "{\tL\u000e𕑄W\u001b뉺򔄒Kg򗣓\u001f?X󚻩򕺀򣇱\u0004<0\u0007)15ᦾ/r^;l|!\t\u0006񿹵q!󯦰Y\u000e{psn𝁯񕷌EṶ򊦸[\u000b\u0003򗎀GR񳾕򋻫2:-󊹉$\u0019hr\u000fli%&L\u0008򍽷ofs:1n\u00138󿧫񀉗\u0006R\u000b\u000cCi񑕕P$󟛶I𞁩#\u0003Tr􀨊\u0013\u0018}8򷢊 𘥇Sl򫄎zi^1La򪁑{\n\u0013\u0019w7\u000bL񐅩\u0001*7󱖫􉔺񈨦\u000b\u001d=Z\u0016yGv6U$\u0011GUn\u0000\u000e񒮈\u000b񖧼񊭊SD}Z𽶒\u0010;񗓢񯘵A1\u001dH󜆈H򙺋\u0004`*\u0003\u0018񢢝򎸇;\"x񇵑\\\u000b󥂻\u001f񌨑bo#:懱󅸚\r\u0018󅬨\u0013􍝿F󿸪\n)" + }, + "id": "pool1ydty43phvuhfhjk26e338eejs2x9yunydkhud8vtg9u669358tx" + }, + { + "metrics": { + "saturation": 3.3783034833222967, + "non_myopic_member_rewards": { + "quantity": 923887651545, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10737620, + "unit": "block" + }, + "relative_stake": { + "quantity": 88.88, + "unit": "percent" + } + }, + "cost": { + "quantity": 130, + "unit": "lovelace" + }, + "margin": { + "quantity": 87.12, + "unit": "percent" + }, + "pledge": { + "quantity": 56, + "unit": "lovelace" + }, + "id": "pool1mfuf4h9am7l45zdhp69wdc2xvdytu0xnhhpjp7ekcte26qzntj8" + }, + { + "metrics": { + "saturation": 1.1761401475933797, + "non_myopic_member_rewards": { + "quantity": 769809536643, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13851378, + "unit": "block" + }, + "relative_stake": { + "quantity": 55.38, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1871-07-15T18:28:30.680927345452Z", + "epoch_number": 18893 + }, + "cost": { + "quantity": 120, + "unit": "lovelace" + }, + "margin": { + "quantity": 54.6, + "unit": "percent" + }, + "pledge": { + "quantity": 138, + "unit": "lovelace" + }, + "id": "pool1c0vxc47k2ce9kr9dt0k5dtd7st5mx9sjkh39t59mm6qdk872e9p" + }, + { + "metrics": { + "saturation": 4.101172490577947, + "non_myopic_member_rewards": { + "quantity": 965510986995, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21365068, + "unit": "block" + }, + "relative_stake": { + "quantity": 61.08, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1892-04-25T22:26:14.839703018551Z", + "epoch_number": 17507 + }, + "cost": { + "quantity": 243, + "unit": "lovelace" + }, + "margin": { + "quantity": 99.18, + "unit": "percent" + }, + "pledge": { + "quantity": 177, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󻗟uQ񓑝\u0015/oE󱴑H\\Z󹱋򹀒[KQ \u0006\u0007󨶎\u0007\u0008M􌁙9Q\u0016e\u0014򚎺sTii", + "name": "\u0010{󿄅^)񿰅\u0008\\", + "ticker": "Zu\u000b\t", + "delisted": false + }, + "id": "pool1pvee9wwr32evmlcpawg7ga0ma3dxjnghe2krrmw9azuhvtzej8t" + }, + { + "metrics": { + "saturation": 1.217589246077862, + "non_myopic_member_rewards": { + "quantity": 354676757078, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13047403, + "unit": "block" + }, + "relative_stake": { + "quantity": 94.52, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1866-03-14T11:00:00Z", + "epoch_number": 20743 + }, + "cost": { + "quantity": 129, + "unit": "lovelace" + }, + "margin": { + "quantity": 83.73, + "unit": "percent" + }, + "pledge": { + "quantity": 89, + "unit": "lovelace" + }, + "metadata": { + "homepage": "5\u0000󦜕_󺟥B]x􆰓TdC򚌘\u001fqt1s_r򐟸\t񒤍򺊽H񦗛%󀆫񵟚n\u0018\u000cF\u001d𹰇N4F\\-\u001d򓶊񖚁򆩆^🫩ᢦ", + "name": "𦀞kJ󜟎w󥔳I@񚤪H񓪑𕣖򕏙󔠉j񿗧|F\u0011򃺙6p󱑽򜃶\u0011&\u001e𒊐k\n\n򨥪u󺺦\u0008𾤦𳵊lA\u001dHX󶻬\u0006S𷟐", + "ticker": "\u0015󲐃\u0011", + "delisted": false, + "description": "Z\u0007򷊍v󉳯d\u001bu~\u001fW󁴯󏮱#%B7񚃫f-󘎕'\u001bx󗦚󬻺9C򻺲􋬄󼇧M\u001a8>\u0016\tC􌏠\u0002󖋄R\u0014𗢺\"l񞸻򅯖^򎞴\u001a0_𱼟?x1ze\u0018\u0012[𑦤񾾖c*5\u0018^𮺘6\u0016𸏋\u00068񻛔󑀰p\\g!\u0011\u0016D`o𯗁񉾉M Pv\u0014T@𜧇雠𯀇`\u0008DGSu\u0018\u001f񛫾j>ZrG򯂔􇟠hKE(򃟤EL򏈞fZX8\u0015Kf󟓎\u0004T#l.\u0005\u000fh\u000c󗽃\u0001񧨾-{O\u000ew򳦋9𵑠\u0007󖕏\u000fYj:􍓵l񌜫|\u000bxV\u001a󴎐h4%ar񉷳a<\\񖨡fW򫛫\u001e%0k񚖢;\\V\u001as\u000f{M~|󁦝\u0002񌬋%\u001d" + }, + "id": "pool139g3ftrt5kugesyvtu5agzj4mvcccee7r84q3yu0zww85z6ahuu" + }, + { + "metrics": { + "saturation": 2.2609415354737035, + "non_myopic_member_rewards": { + "quantity": 159851053399, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1705864, + "unit": "block" + }, + "relative_stake": { + "quantity": 60.03, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1881-05-11T23:51:18Z", + "epoch_number": 3254 + }, + "cost": { + "quantity": 69, + "unit": "lovelace" + }, + "margin": { + "quantity": 22.74, + "unit": "percent" + }, + "pledge": { + "quantity": 190, + "unit": "lovelace" + }, + "metadata": { + "homepage": "jn񪆀1o{,\\.PKLX񧤈!\t8gZ蒀\u0004\u0014\u001aW\u0000{X􏍫򦲠𕵉G\n𧬹񣋉Q\\Un\u0011qq!0싒\u000c|\u001dA񢟴U򉵖􂢸󈇌5", + "name": "򣕯-U񔶣zf򫟰󪢏{l𴱴4\u0003tdU$8𓈭C\t\u000b񴬼/\u0000\u000c5uwB񋞦\u0010󼫧!%􅄍\u0002\u000b\u0004Z", + "ticker": "\u0007\u0006񇎒", + "delisted": false, + "description": "\u001b\u0018\u001a\u0015\u0002n􈀌8gb\t]C\u001f𱢏ᵍ􀐓􁡮^lv𜉧OeX\u0019{k0OJ)cW񼾢U\u0012kp\u00164񑴅ba𵴏V򴨴𛖯Z\u0008{k.G" + }, + "id": "pool1zx42qqce0n6w9ucsjwjmp8krl6dhuzf6stlahn6pusrr5msfwax" + }, + { + "metrics": { + "saturation": 4.06785210642077, + "non_myopic_member_rewards": { + "quantity": 4603984702, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8071829, + "unit": "block" + }, + "relative_stake": { + "quantity": 65.68, + "unit": "percent" + } + }, + "cost": { + "quantity": 41, + "unit": "lovelace" + }, + "margin": { + "quantity": 98.52, + "unit": "percent" + }, + "pledge": { + "quantity": 69, + "unit": "lovelace" + }, + "metadata": { + "homepage": "]B\u000b\u0002xa𿈪D9󧋉z󮨆eM󜒇m𗳣닭񨍯\u0001񐜍s]_v񱁯9𩦇\u0008򦎣\u000f#򜮏󖯵S\\,N1󌓟R\u001e!􎬢\u0007\u0017\u0011\u000b򎷚\u0002Qfq0@Wxh\u000f\u0005\u001f󽘄]𰿖򤦤𕓒", + "name": ")\u0003~1}{,󍠐5\u001f", + "ticker": "񥾰x<5𼲥", + "delisted": false, + "description": "\u0001\u0001'\u0004-yZs3~F杈L\u0019񶂥l>J.)6󘦚\n4\u0019\u0017񜘞L༻񴠛a􁼓N򋰡C\u001b.)􊼨\n" + }, + "id": "pool1nlnmwyqjrystm3d80n3njqhe07qy66wszggemzzhv0xvkvzdwrc" + } + ], + "last_gc": "1895-01-19T02:00:00Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 3.931875050349023, + "non_myopic_member_rewards": { + "quantity": 157944822122, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3265033, + "unit": "block" + }, + "relative_stake": { + "quantity": 90.92, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1908-06-17T03:00:00Z", + "epoch_number": 12507 + }, + "cost": { + "quantity": 157, + "unit": "lovelace" + }, + "margin": { + "quantity": 87.55, + "unit": "percent" + }, + "pledge": { + "quantity": 201, + "unit": "lovelace" + }, + "id": "pool1mekw8nc6ycn4t3ul6rtuqyvyus70m0cqhjwhe6wur6e56sxvyus" + }, + { + "metrics": { + "saturation": 4.936531859653538, + "non_myopic_member_rewards": { + "quantity": 704301251314, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15673737, + "unit": "block" + }, + "relative_stake": { + "quantity": 12.72, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1860-03-02T01:13:40.796456171996Z", + "epoch_number": 31725 + }, + "cost": { + "quantity": 107, + "unit": "lovelace" + }, + "margin": { + "quantity": 56.58, + "unit": "percent" + }, + "pledge": { + "quantity": 48, + "unit": "lovelace" + }, + "metadata": { + "homepage": "l\u00041tT󕶃\u000b𹨹.~U𪆕󤯋t򻘶𿪕񥾛", + "name": "e􀑃򩡌\nc\u000f\u000e}򰱠\u001d^󚉳D񺜰_򒼠4F~񘭗|򌻰\u0002d_\t򒀦񓼥u\u0018", + "ticker": "5p\u000b\u0016", + "delisted": false, + "description": "\u0004$zT䔒8\u001f6䫎󶽠򕘻𿉠𭚍𙏱.🙪]+󾮼\u000c1}\u0017>\u000f\u001eU\u0006\\\u001e7󡙮BH0񶐁Grvk􋹠󡰜?􈔤𕬞2j~|󂴻򨎊󥈒L\u0005z򤺎򫢵W🋱􊈲t^Y𳔜\u0010񍳄\u000b\u001f\u001c\u001ddR&'Mf\u0017񡑢k\u000bi\u001e\u0013󪦪𩙰d\u0014XK-\u0019\u0002\u001fsr\u000b\u0004󾉸i}񌧺\u0005x񦧰-q\u000c\t]󚐿\u0016U\u00137\u000eEPp*|eC1室l(񊒀𙔍\rGBnu󉤦񖦽>󰡊R󻐟s񃟣#𽹥24򡍖_k\\}_\u0000)슖$s BV7󥤝\u001b\u000c\u0018*񚏏򼇘[󙋜.䮘/LY񴊫Z\u001dFU\u0011>w{ptsH@o\\/񠎀,GJ*>񷄗V\u0000m\u0004}J\u0003󜟓+􋍘7NJ󄫚󞸌*𕔕N&򜖿\u000c񻺟󼿾󣣜:\\\u001fokg򯷹8󤫑R\u0002\u0007^\u000f𡛚󧵏󝯆S򀇉L\u001f\u0013H+󬰮0􈀼" + }, + "id": "pool1cdta9g6q5gvuxntlxjleq2uejjp2qynfsdt7mw4hy9gg6g8aufj" + }, + { + "metrics": { + "saturation": 3.073712015270428, + "non_myopic_member_rewards": { + "quantity": 595448695416, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8196260, + "unit": "block" + }, + "relative_stake": { + "quantity": 80.87, + "unit": "percent" + } + }, + "cost": { + "quantity": 142, + "unit": "lovelace" + }, + "margin": { + "quantity": 24.5, + "unit": "percent" + }, + "pledge": { + "quantity": 25, + "unit": "lovelace" + }, + "metadata": { + "homepage": "kF𹘉x[4(;&QJ𶝹u􈠒a󤱧H!󞤱F\u0010\u001f{F񂪟\u0010\u001e\u0008t:\u001dU򍶢񣎍%񤈵󤠡nqf~\u001fiTuy6)󹫌\u0014񒝑|򻴗򁍊u򪇣+󋊄a󸪁򤶁𐕦AN󤏕4", + "name": "򸾟\u000b\\k\u0010np񁀗@򷮮󠥊\u0000`񞇒\u0007󖐐򤉶󽠽􆐐z񚘗􈔌^\u0012g\u0008/𢫼CLn\u001ec𭂌qp\u001dd񗈸/q", + "ticker": "bg\u0000`\u0010", + "delisted": false, + "description": "z򺊩\u0010\\As\u0001j\u000c\u0006\u0011XD{󨇧\u0007⤘i:񬻱6򜙃&F񗋱F\u0017凁tP32im򜉔e\u0008󭋰cWZN_򏻜𷵏mY󿉬]\u0005v𴀹\u001bj𶀲G,Z\u00035𻷽K󪭄𦩄Av2n𚑿j\u0000\u0005񆖏Boy%򿙆񊄘񢍧𳭎𐣩\u001dJxt0G@;y\t\u001eLe3򀏶NR󧊋򲿚\u000f1𦅗\u0019N󪉛\u001c@򅿑T񿍁􅁠򯖩;󬯑V򓝳񹀁𰺊UCd\u0002&\u001e\td~R\r󂖏)\u000c񢙴𸙯H}󩎫\rI\u001eW\u0016\u0007\u001d\u001fC\u0015r|􅏞\u001fV.򱋻\u0016;=󎺍\u0010\u00122EvH\u001a\u0017𹽏󌖯M\u0000\rA5\u0012O8D\u0000\\\u001e \\c\\\u0011uv\u0015\u00044򡼢򯿠GflW\u001b:$s\u0013N𻌃񒰊p򊀘򧍟\u0005bC󘬡󕙦>\u0001y5𨿁]'𖉙󭁱#d𵴟򉎙\"(\t>y𿡬\u001f\u000008񙾴" + }, + "id": "pool1t803g2gluc7euyxexw07fatwsjhsmvvt0wfunepw6pkss5uju92" + }, + { + "metrics": { + "saturation": 2.5033964020937516, + "non_myopic_member_rewards": { + "quantity": 556519519456, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9155453, + "unit": "block" + }, + "relative_stake": { + "quantity": 66.19, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1861-11-06T17:07:59.450186822889Z", + "epoch_number": 32531 + }, + "cost": { + "quantity": 243, + "unit": "lovelace" + }, + "margin": { + "quantity": 38.02, + "unit": "percent" + }, + "pledge": { + "quantity": 54, + "unit": "lovelace" + }, + "metadata": { + "homepage": "m罪\u00117𳎯򗗘𪏳hdts{\u00166򄨓\u000bs&𐪇@Rc", + "name": "o\u0008\u0015zVa}𰋋󯦸FF󡚏m.bf|\u0011ljᜎ\u001f", + "ticker": "`򀉹r", + "delisted": false, + "description": "C4;𳟣_򛩔R򯐌򬞠󻿞Gk񩋾sUJh𭚡䙊\u0003&T𣦄򦋃^\u001f" + }, + "id": "pool14s884kf0wwyz0rdaejv8lrv9vwmuzrhge5mu8lz2p6x2vwpm62u" + }, + { + "metrics": { + "saturation": 4.572750773211776, + "non_myopic_member_rewards": { + "quantity": 2629943280, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4429294, + "unit": "block" + }, + "relative_stake": { + "quantity": 24.93, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1869-01-31T03:00:00Z", + "epoch_number": 24862 + }, + "cost": { + "quantity": 193, + "unit": "lovelace" + }, + "margin": { + "quantity": 14.57, + "unit": "percent" + }, + "pledge": { + "quantity": 49, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0018PM𮌐/u񺶯QsPS\u0018󱜡h-jm0\n\u0011W\u0008{􍝑𸐞K[\u0006\u000ew𴀚(^\u0012\u000b\u0016gn񣜗uII񅩢󬋣$𫴇򄎇2\tgnt}\u00014e)j􇷵r\u000b񤱗\u001eI1Q򂲳Nl\u0004d񋨒9Za򙈋SRXAf󎋾\u0006l-]𜖬", + "name": "p'|\u0006񞰤P`O", + "ticker": "_󡤋i", + "delisted": false, + "description": "\u000c>R򏥳7B𛻠A󞬯B󭕠󛙡=\u0007rtC\u0003y^󓤲4򰷎_\u001c􆀨𕏋`YR\u001djP#򫖝򞂵\u0004\u0000󥋽񞄌bY򜦫e<\u0006Ꮮ\u0001J7R?Pz󠳭&\u001a\u0003@񹙯S/?򿭀4O󙴟:3󵡖􁀕\u001aw+2Q:e@򗰵!\u0006\u0014\\𿄌&8򀮫W\u001428x90񥎗", + "name": "@󝢚񋮒\u001b\u0003,񷨦#m\u0016 􂜄󅠞l)𨜧򹶴H􊺣o\u0007\u000e\u001f~", + "ticker": "\u0006F񸑑fA", + "delisted": false, + "description": "𠨏ev,+\u0015=FS󀕖2;4^󰖻rr󇃥3C\u0000M3Y󈟪)2u\u001d󶽁g6\u000eJ񽁦򈠱񥯐!󁝮`\u0006񨠕kutUHP 򰍆\u0004󨺏󴪬!\u000f\u001d𔺂qq\u0017M\u001d<򲴤0򀦓O#21򬷔񌅠󂘊tB\u0016󩮩\u000f򭹈󪇘\u0018=oFup(HqX\u001cy(󤙺𷱢􍠏\u00008􈿛vb󵳜\nR󗥛4񁍠W\u0005_\u000f 񴸵Kl&\u0007?" + }, + "id": "pool1x3dyhukrxwavqg20k29sw0pppye8qt5u0rr3rnqx2vn6gte9ydl" + }, + { + "metrics": { + "saturation": 4.431867142401731, + "non_myopic_member_rewards": { + "quantity": 47605879103, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9841266, + "unit": "block" + }, + "relative_stake": { + "quantity": 37.37, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1884-02-15T12:00:00Z", + "epoch_number": 13477 + }, + "cost": { + "quantity": 84, + "unit": "lovelace" + }, + "margin": { + "quantity": 16.11, + "unit": "percent" + }, + "pledge": { + "quantity": 37, + "unit": "lovelace" + }, + "metadata": { + "homepage": "𻨫\u000bH\u0007󭦙슇K\u000bs񶠿!\u0013&=󼮎\u0018r񾞩hX,􊰙Dꭥ3\u001b{M\t\u0004\u0014L|r\u001e𴇖R!>:㦷쿴򗈼\t>w%f&", + "name": "H/w򲖕l9𔢹\\fy𞌇c>\u0004|Cb", + "ticker": "(\u000c+u𳌋", + "delisted": false, + "description": "|\u00112rt􍂹]-w\u0008񡣂\u000f\u001aaPMO\u0019\u0005󸡶𡥵􎼱B=􄓸" + }, + "id": "pool1mxk8f42kdtd7jvcn6ge2lryl5ah3fy62ffah6zq48mhauwvk9y9" + }, + { + "metrics": { + "saturation": 1.9943509437924078, + "non_myopic_member_rewards": { + "quantity": 571373258738, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15595921, + "unit": "block" + }, + "relative_stake": { + "quantity": 8.55, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1891-11-17T04:12:08Z", + "epoch_number": 3484 + }, + "cost": { + "quantity": 20, + "unit": "lovelace" + }, + "margin": { + "quantity": 21.79, + "unit": "percent" + }, + "pledge": { + "quantity": 140, + "unit": "lovelace" + }, + "id": "pool1ertjmrx9x0dds88kp5tk062vguywfmrj9777q6aszmdmv2evf9s" + }, + { + "metrics": { + "saturation": 4.8399970202666625, + "non_myopic_member_rewards": { + "quantity": 3336032756, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18777272, + "unit": "block" + }, + "relative_stake": { + "quantity": 25.71, + "unit": "percent" + } + }, + "cost": { + "quantity": 169, + "unit": "lovelace" + }, + "margin": { + "quantity": 15.84, + "unit": "percent" + }, + "pledge": { + "quantity": 189, + "unit": "lovelace" + }, + "id": "pool1q24a4jm26n8vep30g49sydhhns0gnwjm5w0nardpy3akypjk4um" + }, + { + "metrics": { + "saturation": 1.4301254486735748, + "non_myopic_member_rewards": { + "quantity": 442122595325, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8702806, + "unit": "block" + }, + "relative_stake": { + "quantity": 42.16, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1883-08-26T17:56:15.383107187477Z", + "epoch_number": 5059 + }, + "cost": { + "quantity": 216, + "unit": "lovelace" + }, + "margin": { + "quantity": 8.43, + "unit": "percent" + }, + "pledge": { + "quantity": 47, + "unit": "lovelace" + }, + "id": "pool104u5aecxzp6k4u024eppkm0ghckder23plsvt30zctu6ucjyggk" + }, + { + "metrics": { + "saturation": 4.656242326213285, + "non_myopic_member_rewards": { + "quantity": 824570899995, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 14752165, + "unit": "block" + }, + "relative_stake": { + "quantity": 86.18, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1900-10-01T02:00:00Z", + "epoch_number": 16070 + }, + "cost": { + "quantity": 206, + "unit": "lovelace" + }, + "margin": { + "quantity": 44.94, + "unit": "percent" + }, + "pledge": { + "quantity": 213, + "unit": "lovelace" + }, + "id": "pool19n27pa6gfkv008gz9fpwx7lplpcp03tgry6jhm8kprawkt6ww6y" + }, + { + "metrics": { + "saturation": 1.4709251807785217, + "non_myopic_member_rewards": { + "quantity": 501608895712, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15276190, + "unit": "block" + }, + "relative_stake": { + "quantity": 87.26, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-04-18T18:39:27Z", + "epoch_number": 26232 + }, + "cost": { + "quantity": 152, + "unit": "lovelace" + }, + "margin": { + "quantity": 9.96, + "unit": "percent" + }, + "pledge": { + "quantity": 78, + "unit": "lovelace" + }, + "id": "pool1dnw5m50lvete7nfpcqzq8qx9qltvgd64lxal50mey5w4glhkves" + }, + { + "metrics": { + "saturation": 2.6904653649897163, + "non_myopic_member_rewards": { + "quantity": 157414668611, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15623124, + "unit": "block" + }, + "relative_stake": { + "quantity": 91.31, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1868-10-25T22:00:00Z", + "epoch_number": 28000 + }, + "cost": { + "quantity": 33, + "unit": "lovelace" + }, + "margin": { + "quantity": 54.61, + "unit": "percent" + }, + "pledge": { + "quantity": 0, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󭓣? \u0003o>$G\u0005Fa򙧈]\u0017}5,E󊘎C\u0015󤸧?񫤦v򁱨𐜵s\u0013", + "name": "񮛊w-`v>]", + "ticker": "\u0015\u000c;", + "delisted": false, + "description": ".4cT񘪠򢱥\\KIn\u001d𻣚񈹯??񗨠", + "name": "\u000bU\u0014fh󌰕]l𘘇c񢙃!T;𬞭򾺁򍅏򺫌$dga(󠥦-b\u0001W𲊓", + "ticker": "񭀃x!n", + "delisted": false, + "description": "\u0002Z𖌸񫽇D󐝉>kM_s\u0010s4'\u0002\u0000F􂠤O\u0010L@d\u000ep&򹼹\u0008ZU\u000e9󛠰񬌺VY/\u00135c򐎊򚾑Q\u0007;KI9󺊒<+򢘝𘀴v\u0005񃉠u򉇽8R󵬄󎛥\u0019􁭜󸌞bAx2򐥗󑆉s<]\tmo򵞠:򢁏󈷀g\u0019U󑗵9I_򑏴MU򼮰jW\u0006\u001f񱫵򔃟>l5\u0004򖖟\u0002v\\\u0011󘂔\u0018񿿸𳞳#&򳍊󕆙\u0005RZcc;X\u0016}|<\u0003j񜒏G\\j\u0006\u0007񠌰d?\u0002[򮰤P\u001e񍜉5F!" + }, + "id": "pool1yg2u2mmqxf9qz5yjnzqenv4rqcdfy8lv25m8hds8py772yqz95f" + }, + { + "metrics": { + "saturation": 3.9576826387344397, + "non_myopic_member_rewards": { + "quantity": 814610532058, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2135098, + "unit": "block" + }, + "relative_stake": { + "quantity": 42.65, + "unit": "percent" + } + }, + "cost": { + "quantity": 225, + "unit": "lovelace" + }, + "margin": { + "quantity": 70.73, + "unit": "percent" + }, + "pledge": { + "quantity": 141, + "unit": "lovelace" + }, + "id": "pool12ezgd4cjkymvzczx5hnnhjh7c8sj7cxdzghqlamtc59p2xkfq7d" + }, + { + "metrics": { + "saturation": 1.6535762062058463, + "non_myopic_member_rewards": { + "quantity": 293325613029, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9867705, + "unit": "block" + }, + "relative_stake": { + "quantity": 43.79, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1886-05-25T01:00:00Z", + "epoch_number": 21242 + }, + "cost": { + "quantity": 12, + "unit": "lovelace" + }, + "margin": { + "quantity": 46.62, + "unit": "percent" + }, + "pledge": { + "quantity": 118, + "unit": "lovelace" + }, + "id": "pool1dq2p3uxf76dljhkg3wfzdkz9mqamy25fwcr7n5jdr6dpv02s99y" + }, + { + "metrics": { + "saturation": 2.4211963800182428, + "non_myopic_member_rewards": { + "quantity": 398496177606, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 19485588, + "unit": "block" + }, + "relative_stake": { + "quantity": 35.15, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1897-01-14T06:45:27Z", + "epoch_number": 596 + }, + "cost": { + "quantity": 34, + "unit": "lovelace" + }, + "margin": { + "quantity": 18.42, + "unit": "percent" + }, + "pledge": { + "quantity": 99, + "unit": "lovelace" + }, + "id": "pool1372x74y7j6nym325ymq8ury3gqcwfrkl9dxdvqvapqc9ux8y98e" + }, + { + "metrics": { + "saturation": 1.45068708455576, + "non_myopic_member_rewards": { + "quantity": 132646351126, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4098915, + "unit": "block" + }, + "relative_stake": { + "quantity": 40.07, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1887-11-12T05:05:38.787273170424Z", + "epoch_number": 4785 + }, + "cost": { + "quantity": 199, + "unit": "lovelace" + }, + "margin": { + "quantity": 96.09, + "unit": "percent" + }, + "pledge": { + "quantity": 252, + "unit": "lovelace" + }, + "metadata": { + "homepage": "MxYmxP\t󲽆󤼁\u0008S\u0007", + "name": "񗀰4\"u>a\\q", + "ticker": "󖌶yuD", + "delisted": false, + "description": " 򊱺7i\u001aq:񨹋Z\u0019j\u001a𺶏~󞻚(\u001a-r򠦸`6`P\u000bY\u001e\u0011}񐾈|=\u0002_󔀳񭵪\u0003?F򾬕;6%􀲋%8򋩣6\u001f\u001d𭀣򳺀:7\u0005[n\u0004\u0019\u000f~0\u0011򑭺oGIH񧶓\u0002g񾳔~񻄈h\"𛶳𖛊\u000f@u[𶐿񤁡~2󘽐/x痾udYJ5\u000c\u001c⮴,\u0004򼋋E4򿭾M\u0007V^B<1?\u0016O1,\"򂼏02*򈭌򵏍񉪄\u0019f\u0011\u001e𓳎4M񰬷'" + }, + "id": "pool1h6dvc8z9yqlfl6m34pdjneyrlvyt74652lehv426ptm5csqpcdk" + }, + { + "metrics": { + "saturation": 1.687973081394808, + "non_myopic_member_rewards": { + "quantity": 36871842271, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8162233, + "unit": "block" + }, + "relative_stake": { + "quantity": 93.32, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1877-06-04T03:03:17.647423017241Z", + "epoch_number": 9667 + }, + "cost": { + "quantity": 73, + "unit": "lovelace" + }, + "margin": { + "quantity": 36.39, + "unit": "percent" + }, + "pledge": { + "quantity": 191, + "unit": "lovelace" + }, + "metadata": { + "homepage": "𒋖L6񹊌𨀥_R ", + "name": "񚿺\u0018MK󟲇󮫔Kz񹬤\u0005򫩥@𲚁򧚀\u0018\u0012*񚢹dGj𮼣~H\t񂀳\u0008BHP\u0001񺜨L*", + "ticker": "轥'd", + "delisted": false, + "description": "}󏆇73񣼅L\u0002򊾌\u001dlmTM򳤟]R󛕨|󂌫(0\u001c\u0005@[Y[򇛡YZL\\jvS򯅓)\t𲫇GB(򣲧\u000f󭷮n\u000cU񰃵󬺟\"P񉚢9)󧾆f\u0013􁪜򸘭򻫓[%Ard󥅱!t񟈽77?h\u0006V\u0003j+\",咚6򑶃:𝋣\u0018:=l*9򍦜\u000c\u00138-姛󼬖󰿕Z󘔇`?QI\u000c$8\u0006_0\u0006𵝒;?􎂽\u001e㸩󒸣}\u001b𲍕񔤚[<:i󝧉\u0003m\".M=f󌉓8\\gI7Tqd\u0008?;>\u000e%N󥋣\u001b񤟳􂔖3:'󳲦򥋛\u0018\u0004C#𠽵숾vabp򬅽|R\nb󏧁&f󀷗1]򥏕\u000b󑱭w􄢤󦧸F󍐁\u0004򺒏0\u0019d\u000bh좩A\u0019򕽢iJ 0\u0005񦝌" + }, + "id": "pool1z20juu5ynxaucrkltwxjv9rgdyv3u22jpq2l2hhulaa0jplze3u" + }, + { + "metrics": { + "saturation": 4.816296053453936, + "non_myopic_member_rewards": { + "quantity": 870809709093, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12983253, + "unit": "block" + }, + "relative_stake": { + "quantity": 92.11, + "unit": "percent" + } + }, + "cost": { + "quantity": 68, + "unit": "lovelace" + }, + "margin": { + "quantity": 26.9, + "unit": "percent" + }, + "pledge": { + "quantity": 97, + "unit": "lovelace" + }, + "metadata": { + "homepage": "P|[j0\u0019l_3\u000eMQv|DEpm򑪇񽭔S>08,\u0015078񌹌y\u0001\"V\u001d􇺄所\"󤰧򯮊𮱔\u0002*\u0003Mx򑲍$󊫱󔣝\u00123񵝔sp", + "name": "{\u0016\u0013i\u0017\u000bul򁑠7Jj󮸐􉾅\u0013&\u000el\rxo\u0004D\u0000X<뎯\u0014򤯈󌀢\u0004򋤌\u0014󮴉W𖱂", + "ticker": "^\u0010+𚷱󙚘", + "delisted": false, + "description": "񿔮򶀤򶔎R#\u001eIK𘋽]G8rO:)񨾱\u0019H\\񴃻\u0006񨵠𯹗\u0014𷷌UDJK~dLhP󔘳/`𤗨h\u001fzt\u00165\u001b\u000ey[񎻋|}A" + }, + "id": "pool1jdxqv9542c0wd99dddrdazf5t0ulfz5kdpj8w0ezlurcwhr2t9d" + }, + { + "metrics": { + "saturation": 4.814392801375711, + "non_myopic_member_rewards": { + "quantity": 565517938130, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10468601, + "unit": "block" + }, + "relative_stake": { + "quantity": 7.11, + "unit": "percent" + } + }, + "cost": { + "quantity": 147, + "unit": "lovelace" + }, + "margin": { + "quantity": 95.59, + "unit": "percent" + }, + "pledge": { + "quantity": 253, + "unit": "lovelace" + }, + "id": "pool1wkwg5cfr8z529sz4w4srnc3e7xc3yl998j2lftwp9sl2ynuwxau" + } + ], + "last_gc": "1896-01-06T23:00:00Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 0.5735287513219206, + "non_myopic_member_rewards": { + "quantity": 691211791932, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13966524, + "unit": "block" + }, + "relative_stake": { + "quantity": 2.02, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1889-07-14T09:00:00Z", + "epoch_number": 8248 + }, + "cost": { + "quantity": 69, + "unit": "lovelace" + }, + "margin": { + "quantity": 6.56, + "unit": "percent" + }, + "pledge": { + "quantity": 101, + "unit": "lovelace" + }, + "id": "pool184x60004d3mhqjdsp2h6lky826tdmuhpjzmvkwfj4j8hzyc0tl2" + }, + { + "metrics": { + "saturation": 3.755809195670386, + "non_myopic_member_rewards": { + "quantity": 828870232480, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17068193, + "unit": "block" + }, + "relative_stake": { + "quantity": 29.7, + "unit": "percent" + } + }, + "cost": { + "quantity": 244, + "unit": "lovelace" + }, + "margin": { + "quantity": 62.64, + "unit": "percent" + }, + "pledge": { + "quantity": 198, + "unit": "lovelace" + }, + "metadata": { + "homepage": "'FQ󾝶Cm󳁃\u001b\u000f\u0002{󤐍򌩁%\u000bKx7\u0019\u0019~q􊯚n\t𧻸T񷄌D\u001fA\u0016V𒩯\u001cp𣑻\"񘲛dWD}Cl>𣊾MF,𢊆\u0017-󪄂*t\u0006򛐔y\u0016U\u0019񎑦bd\u00150}\u0005 \u0008m񾒨3\u0016F\u0013^\u001e", + "name": "\u000cḄ$\u001d𔣈zv񩛋3G𾓚y\u0008\u001bg\u00023򄥔\u0006􍆥l", + "ticker": "R\u001f𛁧", + "delisted": false, + "description": "𕵑j2򼲠}\u001c򱠭򨽆3􏓠\"𮙨&gm$GdB\u001f󖢛򦠎K򭥪{Zx\u001cq\u0012S򬱉RJ\u001f_\u00177s𣱀󞇜h@󀢎\u0016󐈹H\u000c\n񛹐<[򞴷򎇸B򡝓U9\u0013v򻔗񔮜1tRbSs􍈃𧠷P5C\u0012Gp񻂥򡯢XF'T\t𣑌I򄰉𦟑_\u000f󸺧絿|\u0014H\u0010'\u0001󱻬D7񪉱󗐁#Y򀜭\u0004$D%\"q򵌧&~vkb&\u001atWy<\u001c\u0014\u001f$:󎿡􄵉Q򩀄񳋡pFX\u0002n\u0000.*jP?50񊏐󖭑d4񢱵v𣬲qP\u0016𜘤񃭈𠛇8𺍫\u0011\u000e6W󍩘_\u0011\u0007Nq;)\u001f򾹁4s񸣇X󠰏򷎙R񩁁\u001b\u0010P" + }, + "id": "pool1szjc469g0fewrsy4jgt2x2nqrdculjjl7cdxsc66mjdfgwm2u7n" + }, + { + "metrics": { + "saturation": 4.159280427276072, + "non_myopic_member_rewards": { + "quantity": 872944767564, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 19617066, + "unit": "block" + }, + "relative_stake": { + "quantity": 2.34, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1886-06-22T14:00:00Z", + "epoch_number": 11135 + }, + "cost": { + "quantity": 190, + "unit": "lovelace" + }, + "margin": { + "quantity": 47.43, + "unit": "percent" + }, + "pledge": { + "quantity": 147, + "unit": "lovelace" + }, + "metadata": { + "homepage": "~񺘭\u001d9kd*v.\u001a񡜾g{vo/DPFDUP񞘃@_", + "name": "h7$򁖵9.\u000e>\u0016@񓨙󤅉𘤣Q\nvx􆹔7󉲆ONawf2\u000c%xN𨱗7\u0010$󕜌^\u0008]󤠚t`", + "ticker": "s'\u001a􅯟\u001a", + "delisted": false, + "description": "v\u0000񉗜󳴥\u0018@\u0007񇂞$NTP򌱭Eh񉄡𕫕J2oal`񈄂󅅱}<.!#_E_\u0003\"򕥝]" + }, + "id": "pool147mp92y468lh9seuqkz3v670z0eh67lzfa0j460f5zyzzzywwtt" + }, + { + "metrics": { + "saturation": 3.1763295392798216, + "non_myopic_member_rewards": { + "quantity": 353284548469, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2476840, + "unit": "block" + }, + "relative_stake": { + "quantity": 33.44, + "unit": "percent" + } + }, + "cost": { + "quantity": 228, + "unit": "lovelace" + }, + "margin": { + "quantity": 37.49, + "unit": "percent" + }, + "pledge": { + "quantity": 102, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\ro𓬧c~rk񹢩򯯺򖕀\u000f\u0001򍅵l4\u000es\u0019uu򂘍\u001e)8", + "name": "򩋲se򯒺:\u0000}􉟶\u0015Y𮹀񧸑򭄎x𧲺q%\u0017󎍩8*x:\u0004󩜲󚝏tg􅾦", + "ticker": "BU򂪌y\u001e", + "delisted": false, + "description": "vG󲓾\u0000[򐿢񎭟Z\u0005%\u001a󳣤dCNXf󰟬;R:\u001d񖯽:8𼽥\u0013\u001a\u0018\u000b1󔬹H'󠃻;\u00191򬰍w>Ms=-FNF", + "name": "{t윿vEz\u000fvF񒼜i]k3:\u001a*j\u0008E=ᳱ|\u001e򦷠U@\u0013Nb\u0000g􍫚󨮻\u001c󌒉z\u0005l񰅏CBf\u001e𧓃|(", + "ticker": "𒖾󯪿󝵺", + "delisted": false, + "description": "\u0010$e򧘩Af" + }, + "id": "pool19h6zzrd4q4sgxgnjavyqmpu87hxtffzn2e4vjc238dpxwvqm0mq" + }, + { + "metrics": { + "saturation": 2.5008034822950536, + "non_myopic_member_rewards": { + "quantity": 451275295424, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11796562, + "unit": "block" + }, + "relative_stake": { + "quantity": 61.79, + "unit": "percent" + } + }, + "cost": { + "quantity": 69, + "unit": "lovelace" + }, + "margin": { + "quantity": 53.13, + "unit": "percent" + }, + "pledge": { + "quantity": 204, + "unit": "lovelace" + }, + "metadata": { + "homepage": "j󐅼\"􅩝󝻟a+\u0000𫍵񊀣]󼿊\u0017󾱁𮋥$\u0001nYX\u001fG\u0016\u0011򀙺𬿲:v\u00121򜙏\u000b\r󺲒+󦮴", + "name": "%c񉗒𚻷󰅱\u0019q𮟶\u0005󻫸񳅭{=񣙱򋨪+\tD\u0000ONE\u0019񟬵򀆞J󳷵c𘴄𜃛񈛻\u000bQ𝋼\u0007|W񇵔񎱖Z\r(]*t", + "ticker": "-Ky", + "delisted": false, + "description": "󇶵fᬫ\u0016!25򠿸\u0012\u0000np?\\gN\u00185𞇍\u0013Vq!􃞮\u0018♡7񣘇Z\u0006(Qz\u0015.󋪰𦄝\n%s6Ph񞉮񘏷d\u001ae>Z𽹲󔶎GB򩞰\u0016J2p񺎬'6򄅺>휍*󸄖g\u0011z🳥MZd򽡌󶩙񰕄X\u001cx灗x?b򑿀^SX\u000f=𹺹m鸞󃙮>\u000b^0%\u000f+vb8\u0004\nL\u0011\u001d4񈡍p\u001eg𤁓\u001aN+$R򫆖8\u001fm򕁸𝟛胵\u0010+5'-^󝀧U\u0016,󶖹~\t*𷉵\"f{tI\u001b3򦶚󱺐\u000b", + "name": "񯏕򬶨=\u0006\u0013\u0004M󞙵\\\rk󋅸A\u0008y", + "ticker": "󣂯򣋉\u0018", + "delisted": false, + "description": "!Q U򍽑񤞈󛕾\u0005\u001atFt\u0012򴹙򘭯7\u000ejgRxh^cG\u0001x4\u0012<򅉮\u000eO!󶀻'fhd]#8\u0011󝈂iY\u0017\u0011򏱱M}h4z\u000cM%BJ򽒦Uu\u0013a񎐥\u000c𥄢3/`1Zgx󟴥\u000bb5Sc󝚌P\tE󟕶򤔼\u0011\r焛\u0006\u0016\u0006}fa-𾖴\r󕽴`@E\u0013\u0011\rKX\u0006\u001a𐓯CM\u0002{󹝬%" + }, + "id": "pool15msv8v7g47c47znhzjzeyqkvzvjamqm8u4djdtwhgs2fvddfjvn" + }, + { + "metrics": { + "saturation": 4.998526959807526, + "non_myopic_member_rewards": { + "quantity": 540962386930, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6679804, + "unit": "block" + }, + "relative_stake": { + "quantity": 89.49, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1871-10-09T14:13:21Z", + "epoch_number": 22050 + }, + "cost": { + "quantity": 207, + "unit": "lovelace" + }, + "margin": { + "quantity": 9.48, + "unit": "percent" + }, + "pledge": { + "quantity": 4, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򃋍8}\u0011l.:!A}򯘁\u0012󚕀\u001b5񶈩񞉴󽸚🱑:0c\u000b7@5w򶫿9󦞜𶥽򚏷jY,o񻂊}sYe2U\u0000򚇸AM􄄿􅸑󟮐", + "name": "\u001bq>᫲\u000e:<=u{\u0011[-\u0008RB󶯬r򬾲𕬼<\u0004o\u0018\u0013\u0012", + "ticker": "2{H#", + "delisted": false, + "description": "\u0018\u0011򜲊iqL(\u001f󉟗\u001a1񋠒Y{󻥵mXkPSpx\u0007 n򉮘W4\u001bj󈂙a\tQa󐵯󋮠Z𡳑k\u000e񈳉f\u0003V𐌶5o򀑼\u00183]}-𛱗\u001f>N󱍽D򢁦B󹽯\u000bSM%\u001e򊝲\u0003󥊞/7V\u000eh;붸񍰧\u001f񅖗\u0019;򼇆O𫔂\u0008\u0003k\"I\u0012B0\"o뱚𦹳\u0000񲷪k>񚴲= 1a[񧅲Y\u000enu\tz)$2𚾱C" + }, + "id": "pool1ql2um8rpaq9snr25vqhtkmsvtge0uuqk20p0gkxslhnsw5qyvg2" + } + ], + "last_gc": "1869-05-13T02:11:48.596084715934Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 3.4395280675630193, + "non_myopic_member_rewards": { + "quantity": 702045573599, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15976862, + "unit": "block" + }, + "relative_stake": { + "quantity": 83.31, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1879-01-22T23:00:00Z", + "epoch_number": 19861 + }, + "cost": { + "quantity": 248, + "unit": "lovelace" + }, + "margin": { + "quantity": 30.95, + "unit": "percent" + }, + "pledge": { + "quantity": 70, + "unit": "lovelace" + }, + "id": "pool15xd7fdcenp0gpw7ml53rg0vtkkhkqax5nxrhnv7e6h75jagtal6" + }, + { + "metrics": { + "saturation": 1.7933164730191697, + "non_myopic_member_rewards": { + "quantity": 84162678754, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 19041757, + "unit": "block" + }, + "relative_stake": { + "quantity": 30.79, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1868-05-11T02:50:51Z", + "epoch_number": 2062 + }, + "cost": { + "quantity": 43, + "unit": "lovelace" + }, + "margin": { + "quantity": 12.19, + "unit": "percent" + }, + "pledge": { + "quantity": 181, + "unit": "lovelace" + }, + "metadata": { + "homepage": "c.\u0008󑷈\u0017`\u0012^q񨩴$u z򏷱\u0002򠶢t>;򮓔𒉌򍳨\u001aﭠj󨓪\u0002񪷄\u000f\u0006eJw,񜞑LO䀣񙈤2\u001f]M\u0015\u001cas", + "name": "\u0010=v", + "ticker": "\u001d\u0000@>.", + "delisted": false + }, + "id": "pool12enzvx42hgj60edt6wrcrzr83mxhwxx8aky6ft3pf4rdvzxp3kp" + }, + { + "metrics": { + "saturation": 3.1570436549177705, + "non_myopic_member_rewards": { + "quantity": 984844454796, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11905792, + "unit": "block" + }, + "relative_stake": { + "quantity": 35.68, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1879-03-20T20:41:39Z", + "epoch_number": 32667 + }, + "cost": { + "quantity": 63, + "unit": "lovelace" + }, + "margin": { + "quantity": 33.92, + "unit": "percent" + }, + "pledge": { + "quantity": 198, + "unit": "lovelace" + }, + "metadata": { + "homepage": "T_3𔬗KU򍄆\u0007Y;򬼳򙞼d$I󓕈n􄳜󜷍򺝃\u001a󊐖𑭀0󧢇x󮋘\u001c>\u0003f@E\u0017񛇹&R$𪍛vD\u001dj\u0003\u000e\u000f-򆉤{\u0005p􌑣{MO\u001c񪧛1𔱼\u0003\u0000[X\u0004)𐌳v򤳢񘸃Z\\򗶸3dG\u001d\u001eK\u0019󅢮{T\u0012s򾵲bJ񇳦||󵽬󮒴zx&&", + "name": "\"*\u0003Ns-\u0004񖫴W𿝅Ow򹙰&O\u0001A8\u001b󿭋V", + "ticker": "P%'", + "delisted": false, + "description": "Y|󴟕kKQ𾠹~\u0000񼇒𴖵<󔣈t-񑝇ꭳ;𜑺l?F󁂱U󮬦𯈇$I\n\u0002\u000bnch6u" + }, + "id": "pool1y8dmlf6e7lua3285ghcmyzuh8sh2zrr46n0r22gasj8fg8h60hq" + }, + { + "metrics": { + "saturation": 4.816136206511193, + "non_myopic_member_rewards": { + "quantity": 253476352854, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3246191, + "unit": "block" + }, + "relative_stake": { + "quantity": 48.47, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1860-03-20T05:00:00Z", + "epoch_number": 23342 + }, + "cost": { + "quantity": 254, + "unit": "lovelace" + }, + "margin": { + "quantity": 93.88, + "unit": "percent" + }, + "pledge": { + "quantity": 47, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򝌏(d򜍃\u0013󯑀𪹌󩏻򈖓Rp򷊕\u001b)Z򠆰u:|.򬝕\\\u0001/&p񢄘T[Q!N\u000c1I\u00114}\u0001򅙠󊥺\u0008>k󄐙=5󚃧O󅻵\u0010𷭔\u0001񔯘9VD\u001e\u0001󺬔󡇫𒗋𮭏", + "name": "A\u0018򶿣`\u0019AM󈘼\u0000򧢄d/򓋵򮊉𝝠)\u001c:lV\u0010r󑙚'󀑝&\u0013􎦢", + "ticker": "<񧶻\u0019G", + "delisted": false + }, + "id": "pool1pmeq0cmx2hvd7a0vytd85fqkv94zxqrlat0a0r75admdynf2nug" + }, + { + "metrics": { + "saturation": 2.397681469551909, + "non_myopic_member_rewards": { + "quantity": 463793746867, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2867080, + "unit": "block" + }, + "relative_stake": { + "quantity": 73.26, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1907-07-05T14:00:00Z", + "epoch_number": 5231 + }, + "cost": { + "quantity": 168, + "unit": "lovelace" + }, + "margin": { + "quantity": 1.82, + "unit": "percent" + }, + "pledge": { + "quantity": 42, + "unit": "lovelace" + }, + "metadata": { + "homepage": "+\u0011(~\u000b\u0013In񽳺q`Dx9𵠷򋤲u\u000c򦜄.r", + "name": "9tZ\u0017󃫗𔊠󯯛o{n󎿚񏭥|\u001d񕮦p\u0002;\u0003򦓻!1\u0017W5񃨇k*|+?\u001a򮠛򶵓𴙏[@]?h%𓛱𦻜B", + "ticker": "𽺘W\u0002Z", + "delisted": false, + "description": "%󓇲8vk\r\u001f]򃯐\u0007\u000c򒵡AP@?\u0010򾁊N󁾏?󇧺wQ\u000b\u001e󲫠.!B򛢩\u0014𭨡2񃖕񥮚o󉗚%[\"/\"tZv􈴛𰉭\u0002E\u001b񟽓A\u001dW\u0010u91􂀾\nO\u001f𩖫X񾯓\u0019vNL[򽯧 짯#^K񬛐F\\3%m󽼓n򻀩򣬖" + }, + "id": "pool1ympumx4eec4txd9kxp092zhn5zqgkv2shm739alv9fgvgzasyc2" + }, + { + "metrics": { + "saturation": 0.5506146153918046, + "non_myopic_member_rewards": { + "quantity": 460048288477, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2018874, + "unit": "block" + }, + "relative_stake": { + "quantity": 25.08, + "unit": "percent" + } + }, + "cost": { + "quantity": 96, + "unit": "lovelace" + }, + "margin": { + "quantity": 13.09, + "unit": "percent" + }, + "pledge": { + "quantity": 246, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0018sF󃪜񔗨򜖕󝸪>m\u0000\u0008k󊰾-\u0002|򤌸xy+򢶫nd򋹏\u0008UGXXP\u000b𶒨E񽁇LusA\u000857\u0018&m\u0019\tI.\r\u0004􄰗@", + "name": "􂹣x@r􆚗󒧪􊙁񑥒*~𽍀򁭑0~񕥵L𑶛\u0012򀉶򚒢\u0015곭g\u0003&񃸿j`􃢬\u0008𡪤\"󅤏.\u0005򔃁&", + "ticker": "\u0019\\$\t", + "delisted": false, + "description": "椅U\u000cg6\u0006\u001c񷱌QpV9𹊂\rX񆐄YKp񠸁񁶇)󥕰\u0011𾡊.\u001d򧑄:Tbv3Q\u0006\u0011\\򠔉򀕁I򹮥\u0018棈\u0003󊇾\u0008\\񖣑󎮌.𿢍쪺H\"d\u0002=U}AtZ&,fw(\u0018$*Q\u0002z򟫀9L\u0008F*Yt}𒕾sD,s\u0010Vd񤹱\"/\u0001'\u0012o󋫏" + }, + "id": "pool1wmtsqcvkgueptz3ydwtutn6nxdn9clznp6py9y92t89nc56gj32" + }, + { + "metrics": { + "saturation": 3.0007964166365673, + "non_myopic_member_rewards": { + "quantity": 879659659898, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15659473, + "unit": "block" + }, + "relative_stake": { + "quantity": 31.85, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-12-27T22:26:39Z", + "epoch_number": 6754 + }, + "cost": { + "quantity": 28, + "unit": "lovelace" + }, + "margin": { + "quantity": 19.08, + "unit": "percent" + }, + "pledge": { + "quantity": 33, + "unit": "lovelace" + }, + "id": "pool1epjcq8z3mpxd8urddqry66tx373p0u9tas8e4pp6pzv7xhh9ghz" + }, + { + "metrics": { + "saturation": 1.1239243575551316, + "non_myopic_member_rewards": { + "quantity": 258281429978, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17450885, + "unit": "block" + }, + "relative_stake": { + "quantity": 47.13, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1905-03-29T20:27:46.194866719292Z", + "epoch_number": 29817 + }, + "cost": { + "quantity": 19, + "unit": "lovelace" + }, + "margin": { + "quantity": 42.58, + "unit": "percent" + }, + "pledge": { + "quantity": 19, + "unit": "lovelace" + }, + "id": "pool1rrgvmlc9p0w5je9gng8dwz2gej5zqu7vss98227dvjruz8v2ua6" + }, + { + "metrics": { + "saturation": 1.2394414808330179, + "non_myopic_member_rewards": { + "quantity": 582710098866, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3087859, + "unit": "block" + }, + "relative_stake": { + "quantity": 46.34, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-04-05T16:00:00Z", + "epoch_number": 13372 + }, + "cost": { + "quantity": 78, + "unit": "lovelace" + }, + "margin": { + "quantity": 69.79, + "unit": "percent" + }, + "pledge": { + "quantity": 0, + "unit": "lovelace" + }, + "metadata": { + "homepage": "񥟱|倩<󧟦\u0000񯆜􅥆N􏴕\u001e.\u0018|?p\u0019z5񚱲?f󥭮\u0007\\@󯕫𶴝\u0005\u001a\u000cq𿳋Q󋐛\u0003NZ\u0000k򀄴󌊽𾦌≠\u0017\u0008ୋ򼤜򮉨", + "name": "\u0000󣃑\u001a", + "ticker": "镝\u0001:", + "delisted": false, + "description": "񁣞?Cz_=g\u001eG~􍈨𪁑򺮄_􆡴|\u000c\u00106\\W񵵠{7C񘋲^ᕵ򐧧D񔚠󤉛򏟱g\t\u000eG󬝽.\u000fA󮏔\nBm󤝊+򓄽pK󰲝3o\u0007\u001e1\u000eRS\u000c%8蒨;G񖇉_-&\u0016N1" + }, + "id": "pool1qh997pty04x0zdaq4yhf7z5j5j9e39qdzr04wallh6feqdq2fml" + }, + { + "metrics": { + "saturation": 0.5572380539690674, + "non_myopic_member_rewards": { + "quantity": 958873254729, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6235071, + "unit": "block" + }, + "relative_stake": { + "quantity": 39.92, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1863-08-30T17:37:54Z", + "epoch_number": 20218 + }, + "cost": { + "quantity": 76, + "unit": "lovelace" + }, + "margin": { + "quantity": 4.34, + "unit": "percent" + }, + "pledge": { + "quantity": 237, + "unit": "lovelace" + }, + "metadata": { + "homepage": "𣹁񬄭?\nS\"񚩛l0Xo󁞕NG񗥊򓡯c\u0008>u|zGzX64񗍺r{\u0013\u0013", + "name": "HA", + "ticker": "_{i=\u0010", + "delisted": false, + "description": "i`\u0008\u0006FR򶖈\u0001\u0011lKr񨱏ᙰ2%\u001d\u001av\u000fw򰭮>\u001f󯱞\u001eS\u0018񫟂𧵍\r򹄆/'&`a5.v\u0014\u001b\rh]$10L\u0002-򭋵E9򺗘\u0013K*\u0006|,\u0004I`󂧳\u0000򦓥4(\"D*(j򏩪W\u0008\r\";\u001b򬹎\u001b{Snt\u001b򘝯񡸹󀈊s\ne0&L|*%,\u0005񞘸I󴮸\u000cH{bCQ񥊥;\u000cj𝍻󀨈lR򕧇Z\u000f*󎿍S􇶀n񡱿>NPs\u0015\tS\u000c򹉱񙝇@0𲐻\u0012L(O\u000c\nX򕚗aq񛞿\rUo~\u000bz?[򌰋a\u000cn?\u001cl󗠩\u0005+\u0010" + }, + "id": "pool10grk9v23zjr0duf8jxqr50m7sdfjqeppl5haf7drnemcz05yelp" + }, + { + "metrics": { + "saturation": 2.3240373245490002, + "non_myopic_member_rewards": { + "quantity": 37818699679, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13661707, + "unit": "block" + }, + "relative_stake": { + "quantity": 98.34, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1862-04-18T13:48:37.24515902894Z", + "epoch_number": 7453 + }, + "cost": { + "quantity": 26, + "unit": "lovelace" + }, + "margin": { + "quantity": 91.05, + "unit": "percent" + }, + "pledge": { + "quantity": 199, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󕚡󙘿(}\u0000󺑀@󓲙󰹹􍰈𳹧7Z9\rN\u0011\u001e\u0008򐎢vB\u001a\"m:񩚦󷰄󈯸G\u000b<􋝮\u0015\r@\u0012i𘤦񈨯D6pl\u0001Ag𖾔󨛝\u0018N[\u0004Ab5]|\u0001){𺮭_\u001f򉞃h)\u0015l\u0012򮣢󔝍𞊾񰰇\u0010X\u0003e񊧬񗃌}\u0003", + "name": "X𫮿󐓊", + "ticker": "{<,", + "delisted": false, + "description": "tf\u000c\u001dzJ6V{M,\u0012*<\u0005m򈠃n*72\"󿏁,𾝌Rw󯡩K\u0006񷧊\u000bd{\u0012\u000c󳈫a󏝁\u0017\u0019T@5n񩘢񹹈\u0000򍞋\u0000\u0008󁼢v/\u00147.\u000c򧉀 𝘂pW𹠁𘬡\u000e\u001c\u0005\rODrJ(I?\u0011񵫌,ꝶj\u0005\u0002򅈳𪩓񚭐jfx𷽤B𹙐jid+\u0010󝾛\"󫧊V,SV-0񸡊#\u0016󰡧m􁳧!)\u0002򯇺^󻼌/󸮄휌J󁤴j󉶀񕃮􂱟| KV򤈔y󫛿󐍃\u000bGde}񽊨󵒔\u000b\u0012!󅆇\u000f5\u0002u21􎤍\u0017\u0010D\u000e 󱢾5\u0013.\u00190G\u0013R\u0007ib\u0007P\u0008񁘏lV\u001a𓒖񚊅I𲐗i󥮼򈼉Q/MRp󒁛Y񢚚Rv\u0005򊅦V\u000f" + }, + "id": "pool10p6fsa094dz6604p8hjphsmqt3rzd3ff3jztp6dgy8anw58gxjl" + }, + { + "metrics": { + "saturation": 0.8831505260907069, + "non_myopic_member_rewards": { + "quantity": 419950398275, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13378358, + "unit": "block" + }, + "relative_stake": { + "quantity": 69, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-01-24T05:33:06Z", + "epoch_number": 6877 + }, + "cost": { + "quantity": 217, + "unit": "lovelace" + }, + "margin": { + "quantity": 19.73, + "unit": "percent" + }, + "pledge": { + "quantity": 207, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򑶫or\u001a𩶤񅀋򀽌hlbjf@0BY󀬍UMq\u001e9;S\u0018Z", + "name": "򫄮V󚌃Yd𠳈q򪹅Kf,3𼹜w@M𼒊$x#X4򱾗򄑇񫜕󫰀񱇥w󀵪L󳋴u\u0002G򾡲YA𘦝]ऒ\u0016`", + "ticker": "󚳄F򠶈\u001bZ", + "delisted": false, + "description": "FD*򭞯J,\"\u0010b𠰰\u0007C\u0007D)#\u00068\u0010!\u000fh%L𼽡{k\u0008󍌉Tucn\ngIie*󊯰󽴥lu\u0004\u001d򲍟񱕺HN\u0014D'\"\u00192,\t𪛤<#񘠭ayEJ\u0002񄹸d\u0010m/'\u001b\\\u0004x񜖛O\u001f藁D\u0005xvD󈚥:Z7\u0015E\u0018}>򼛾f񭥣uP'E󒌶Wfs񮽒󗞜\u0014Gla?j\u00181H񱿄\u001e𴴵񎓋m{𡟎YM񹣭_S󠗞橕OL;񤫋bWiL70󅱆𿵧I\u0018\"𛑛*iHR+󐍨򭷱򟉛]񷺄C( 񡵤C&\u001fEM\u0010`A^@󬹡'\u001f񚷙0_\u000f\u0014x󑨴*z}\r\u0008򆋟c:񨮅L\"*񞯁}sM\u0003H𗸞u\u0003\u0002\u0014u󯡍t👈<\u0010[C󲼿󄜵A" + }, + "id": "pool1zdfd36ln2qxdwl8lafp02jq5vhnh6j7enpfse3cgrdyq78jgp6x" + }, + { + "metrics": { + "saturation": 0.7286938354555883, + "non_myopic_member_rewards": { + "quantity": 28372537381, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 90234, + "unit": "block" + }, + "relative_stake": { + "quantity": 24.87, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1871-05-03T09:11:21Z", + "epoch_number": 26514 + }, + "cost": { + "quantity": 144, + "unit": "lovelace" + }, + "margin": { + "quantity": 97.18, + "unit": "percent" + }, + "pledge": { + "quantity": 246, + "unit": "lovelace" + }, + "metadata": { + "homepage": "񲁼N񉻚op\u0018\u001f􈷷&􈥩|&uM\u0012\u001f5󬨅>5𝹴:bAL򥺁󄧳󦏣WR=.򓤋d^ME\u0013򴅜򇘁[\u000c񆀯#񜾣\u0007yPY򅧪8􋿒󜻧󗗜lg?򖞄񾥨\u0007>:#GPNydKK0+\u0011D򐀆f\u0007", + "name": "*E", + "ticker": "o\u0014񻱄񞼰n", + "delisted": false, + "description": "栃񥾮񯑢\u0012\u0014\u0013\u0012\u001c<򯵎񢘧!dpZQ!󊛱\u000f@\u001f\u0000_\u001bIs􃻓I!\u00125\u0019-\u0005:􇂘1t1󶄽򩰔p\u000b(\u00167w󢹵,-S񃒰Jg\u001d\u0005U\u0019o񑚫9~d`8Ijy\u0006q\"7.񸡢V)񐷨\n\u0005\\\u0015dY񊲆\\񗱖㣤[𧞳9򭌞\u0014\u00182𧽠񳬕;󊁬*O\\*MW񶸨󿬑򑢥O𬷙e\u0016\u0008\u000bo>.\rJ񘞺-򸣡\u0018𦗯~Ccmr(\"=o򻺄\u0005\u0012r󮅲mO\u001b0Z󈖄Xynm\u001eQM򈖳\u0011A񶙗J1IF<\u0011I\n\u001a񭱣^񑈄{򸢞>P󚛻+n􄳀Q\u0004\u0000]󔦗񤾤񙬩?0񭄚", + "name": "~󙰂c", + "ticker": ",N򯶞", + "delisted": false, + "description": "V񃘬􇵀?y}~*e𨟼\u000c󋧘򍀖X`\u0019'\u000c[I\u001fr]춑񾧐{󑏏'󲩸\u0006񃊥r" + }, + "id": "pool1rxpux3g4q3y2yyn90rrkdgnhsm49fw6a5rcjgvqcqc2qq8v22xq" + }, + { + "metrics": { + "saturation": 4.532363188475593, + "non_myopic_member_rewards": { + "quantity": 85563482603, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5317284, + "unit": "block" + }, + "relative_stake": { + "quantity": 35.88, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1862-08-13T19:16:02.036884636228Z", + "epoch_number": 30950 + }, + "cost": { + "quantity": 111, + "unit": "lovelace" + }, + "margin": { + "quantity": 47.34, + "unit": "percent" + }, + "pledge": { + "quantity": 138, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0013=H|*󮧰2񤩷8*ه4񮓪R\u0019Y(G.w{\u0002:񵂟n}󸙄m[򕧖5󴒵|h񓺣F\u0005𒟊񛎼(\u0001v;\u0019*򦐈h򵭰\u0017󔐡wR\u0017\u0015\u0019󜗣򋃂7Ln򧱂(C\u0005𽴈򐔦󲜮1WDsn$S򍚛2\u0004S򭢵5A򒉇@}\t\n\u00035򩩧*z󢁕򊗅`?𬒯n", + "name": "g񾾑o񾘅R+/_,?<󙹣𐃆򹥳`$\u0000Hi\u000cDo%8 \u0013򬑳E:1󼖧,5󥎎𙒠GX󂊞\u001e\u001fu\u0013%", + "ticker": "Kog", + "delisted": false, + "description": "F[N􌖰𐾺 2K\u0012AEm𥑥pD\r\u0003\u001e\u001b\u0005󚩢?􋤭\u001cc󒟧󛚉G\u00163,L\u0017򢀱񎚊uf\\5\u000c\u0016J\u0016W!:mk$\u0007\u000fcn񤎿F󦩰򧟈󮝂󦩸1$\u0011򏽺Ni\u001b雌;P򊳂\u0019񌱞򕋦R򊁙\u0016/\u0003$\u0019𻡝g\u0001\u001d򦓅\u0013$\u0011򺈐\u0018k󊨬..u>O񒀈[G6_Ey񿹘򗉣l\u0018\u0007󠥈񾛞⒄q\u001c񰈶-ai򚃣\r\u0000n&\u00149󇓗\u0019Q\u000cW\u0001\u0017\u001dJ񳽚Q񮶳X\u0013W\u001bi𮀬Dwa*\u0002\u0014𣺾$\u0004Yd񁭘}򳾼]z񳿇]3\u0013󔍟񋆰\u0012s򖽰J񖎊" + }, + "id": "pool1pk5fq5pvzn98pp96tp36fg3582gf8wjr9dzq6nq6nzly7zc99la" + }, + { + "metrics": { + "saturation": 4.590784855226829, + "non_myopic_member_rewards": { + "quantity": 501521663483, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1861396, + "unit": "block" + }, + "relative_stake": { + "quantity": 52.93, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-11-17T22:44:39Z", + "epoch_number": 25877 + }, + "cost": { + "quantity": 91, + "unit": "lovelace" + }, + "margin": { + "quantity": 81.52, + "unit": "percent" + }, + "pledge": { + "quantity": 91, + "unit": "lovelace" + }, + "id": "pool1s9kvl3tdup2ds9r9xrdy08gxrq57rnspcqgplcq2nrg6kgqa74h" + }, + { + "metrics": { + "saturation": 4.056850542812943, + "non_myopic_member_rewards": { + "quantity": 914345763587, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6669830, + "unit": "block" + }, + "relative_stake": { + "quantity": 76.63, + "unit": "percent" + } + }, + "cost": { + "quantity": 90, + "unit": "lovelace" + }, + "margin": { + "quantity": 35.81, + "unit": "percent" + }, + "pledge": { + "quantity": 88, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u000f󂁞,G]𕣺_\u0002\u00036I󏧻\u0014\u001ddm\u0004uh)$񦧙\u0016\u0011'%N$󏞭\u000eOJx񀳽𠜲\u0008\u0016򕅊j񠤌Z\u0006V4𦴗e򴪋p;\u001bYa&󼊻y򃖳Bor2Zr\u001a\u0010y󻰳\u000c?@P𯏓p", + "name": "󊶄#$\r+R򺳂򳼒\"\\5󬐵j`1\u001b򾻫n\u0014\u0007𷆯􀬂tJq\u0018H衏\rO󞭨d󧹫򺠜򑉐G", + "ticker": "aK𮀃󄔳", + "delisted": false, + "description": "F\u0001y\u0012A\u001bN(W\u0010h󊍁_W\u00114񋒌Ei!c2\u0004nY򿡔񍽫~,\u000cN_𞤢𯱣@wO[}4\u000c#𯒟􂱝r\u0000 $#&E\u0006_󁲮\u0002p#􁙍qS$d{j.􉁒5~>\u0005򥐂NZ*񄙃rD󠄝bY􆆀'z-\"_󈬃^e\u0018lW\u0006?\u0010x󄸏\u0004󠽫$4𫬛򡺃b\u001f򞜥򂗺򝶵bW*INsv򍝗3X7񪽆YM*7󰗯6},򮁚\r\u0003𔔯\u001a񸄵2\u000b^\u0014񁏽\t\u001f\u0017F񆚃Y򧦠k>x+]x M0+%󼫘\u0018ib񴛆򂂕L󗓖K񔨦\u0010+񔐯𷔌𤔟*𱅫sH=\u0015頲D񜓥򳰑񃼸>󗯽9;\u001d)Z󥝜\u0001\u00021sI𘏈%6\u001b򕠟񩦸7~򹵚2񓽐\"J,3\u001b\t|򟋆𨦤8\u0012bR\"󂴹u\"><6S𲁎񕴈\u001f" + }, + "id": "pool10lg8p2rukytlmtxyc3r575wp82u3mvf328n7qdv5qtgt7cfa6pn" + }, + { + "metrics": { + "saturation": 1.8723879853090892, + "non_myopic_member_rewards": { + "quantity": 687302409603, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6254639, + "unit": "block" + }, + "relative_stake": { + "quantity": 85.44, + "unit": "percent" + } + }, + "cost": { + "quantity": 96, + "unit": "lovelace" + }, + "margin": { + "quantity": 3.55, + "unit": "percent" + }, + "pledge": { + "quantity": 198, + "unit": "lovelace" + }, + "metadata": { + "homepage": "S򕚆C򠙭otF􆳃\u0015}2JC򜽻", + "name": "\u0017󯎢\u0010󟢧v\u0012G򳬚\u0017V󓨀*L\u001dwlT𺌥a\u00151", + "ticker": "𲦻\u0003𽏡b", + "delisted": false, + "description": "𴬗e򧷱\u001eM\u001a􏝌\u000e(M6{𧇷t򷵏b(0S󋉖󾍄\u0019l(񠌤6\u0014]񸀛2\u0001D4\u0013󔅥c=M\u001e|v𪿀;}3󐮂\u0000g&&􂂟H\u0001lj0򆔵򳲼gz/󑝒3󠑈._𿇞򧁽󣅯e󈌘0򩼦>r&𲺻*񹹊\u0010\t~5\"񆒑NHcOur1'#\u0012Y򟷙r򣠅&\r,𓇼}n򀬇𯭴tF񖗊񿺸#" + }, + "id": "pool1x6dde6eyeh7xrjrzapxnl7gs6s3ugx4hgtnahxz30zchkq04f8w" + }, + { + "metrics": { + "saturation": 0.3859725028018829, + "non_myopic_member_rewards": { + "quantity": 458178748395, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5198583, + "unit": "block" + }, + "relative_stake": { + "quantity": 15.04, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-02-13T03:40:32.088582911708Z", + "epoch_number": 18274 + }, + "cost": { + "quantity": 214, + "unit": "lovelace" + }, + "margin": { + "quantity": 67.91, + "unit": "percent" + }, + "pledge": { + "quantity": 123, + "unit": "lovelace" + }, + "metadata": { + "homepage": "C򝯝 zTW\u0001-\u001aB\ny9~H𶌟\u0000.PN\u0018i\u0015I񷶊:q㄄\u001f\u001eꄪ]\u0003򢠄󲧲0:񅩙\u0019򚸹\u00136\u0019𠩣􀈥󁝍\u0019f򄻢󄖧7󛫚󯝦\u0019𞊵f;fX񋰼", + "name": "L=𣀾k\u000e\".\u0011Hr/Bg\u0013K󳭖\u001b~򺅤򆌵=\\nb@68򥽈i󗡥󑠜󅀜 񼶼", + "ticker": "v\"k񁎬", + "delisted": false, + "description": ":)󱚖Z񕚟򄽣\u0000\u000b0J\u000b󋅵>)n\u001f_\u0003򳅑\u0007\u0019򦟖`]\u0013򭸻\u0016(@𦟲@b򜤁k<\u001aR\u0001]Y\u0002f󁢐|󢃂q\\\u0015񚭖?\u0014fn񲤚]LQ}Ljc󁤢Y\u001cj-e,z𦫪\u0019B_[se\u0010𔌧󍂴򳖨I\u0014񓟗,Y򑍟񦾷B\u0002\u000e񽥚?񳘲w𼪤򨓋t?R񎐈np=D:'|Q(\u0018TK\u0011#𢴖s򃂬'\u0016􇽝򴛄g'!򽯜K撹'󔧰4񱤩E\u001a'\u0017P\u0018񁷠􄺰\u0004H,񋀋%{V_V󩢡#򉚧\u0006񒭕\u0019]\\`\u0005L'4J\u0017\u001c\u0003񖔱H*R\t\u001e\u000cn\u0006eh􁞪󮮻񛇦M񜵣^񵊾\u0010&\u0001񢏱W\u0000&aqtYE󻶑3\u00153 qxD\u0004𞨈TUG}񂵅\\dX\u0001b\u000ei󠊚abL\u0000􌧵ܶM򡒼\u0017l󎣊󠥰*񥷐)𺂙\u001f\u0012󜘙0\"\u001a𺴬\u0004򈴓񭑏q#\u0005𙼄k?󆁜^\\O;x'Gw𫎀\u0007\tZ&𛅔? }iY'\u000b]ey\u0007#.񂏥\u0004{D򢭁m󽼍KU\u0001𵲠" + }, + "id": "pool1x3a84q7kg8f9kn836eysyx7rlsjuge240llqdsq5sgxhzgmvepp" + }, + { + "metrics": { + "saturation": 3.8800097458733855, + "non_myopic_member_rewards": { + "quantity": 933277669248, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 16564408, + "unit": "block" + }, + "relative_stake": { + "quantity": 98.14, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1899-08-19T07:00:00Z", + "epoch_number": 22369 + }, + "cost": { + "quantity": 245, + "unit": "lovelace" + }, + "margin": { + "quantity": 95, + "unit": "percent" + }, + "pledge": { + "quantity": 87, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0017>+c\u0016d\u001em_M\u001e\rmJ󾉛\u0006\u0006Yj\u0014\u001aD򔾨e{p󐘠\u0019񯆬\u0016sW7GH[9\u000e{򩬰\u0017񨆛Q.\u001c\u00101󖣤Esuu`\u0002K\u0019b𼷜𗴾0𻏛UUR\t", + "name": "-\u0012󦴢񁏵\u001a󍳉\u0018e.󱎩򕑾bE󢝚zB0n\u0017yR񶅊Mq\u0005NGa𸃸 z", + "ticker": "=\u0015\u00126U", + "delisted": false, + "description": "򾔗6-\u0010􃷢\u001bV󊙔.򆬋󤂩\u001b򿁈P\u001e򃗙\u0017L)𜎪\u000c\u000f;J//\u0007\u000eN񎠵򱙏/񁼇\u001b*`y7󮫋򪛯c=\u0007󤧒,󅣯[D񫏸\u0005򰟳𾨻\u00036D򥽠󃒘[F񾃶{Is\rm󍬛\u0001\u00101󎐟@\u001b\u001c򝭴󔨍s\u0014$\u000e󌵵g7󃬐xsMDV񱡐7I]\u0007aHQGD񢖮𠅼 H|n#)-󛬒ul󨵁\u001f>\u001d7wt󊐌򋟼@\u0013e7y\u000e)𑞹p􀙙@=\u0001>/󋛐*\u0011󠋾\u001f󋉫󞟂N\u0018\n;7𪬹󂇯\nQ\u0000j]𷼝+񇗖!q9G_$v\u000c\t򌙝&/E󸝱-󬶄R\u0011~[n𜉶񕜜\u0008(R`z􌍐dp\u0007>򠉦\r;Hs񆢺zm\u0005\\8|3(N\u0006𥘼Z􈱗wq񭦘/%-򐊹l[?x/?\u0006^nC!#h)㑨\u0011L󹻮M[\u0008w󉣈_\u000c񋨹򭀛򸼋񤆗=}^\nH " + }, + "id": "pool1ysafz2zlmvrkqey0v4e8v9flwask5wzg3em8q483kw5n7sdmgks" + }, + { + "metrics": { + "saturation": 4.310109735888642, + "non_myopic_member_rewards": { + "quantity": 556653587872, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11582207, + "unit": "block" + }, + "relative_stake": { + "quantity": 4.22, + "unit": "percent" + } + }, + "cost": { + "quantity": 244, + "unit": "lovelace" + }, + "margin": { + "quantity": 27.43, + "unit": "percent" + }, + "pledge": { + "quantity": 21, + "unit": "lovelace" + }, + "metadata": { + "homepage": "[󢿁\u0016\u001d\u0017T󩐑", + "name": "X?񯩊", + "ticker": "񦕖\u0007F\u001b\u0006", + "delisted": false, + "description": "򁅂TD򥰞YA{_ciL3tx\u0018;򾱝UT\u001dVLkwc\u0000McLT񆸮L7\u000f\u0003NT\u001e$<@ #l\u0008g񪿫b4𒔺j򹣠󛒩򂉘Q1󊜿*\u001f$" + }, + "id": "pool1pagsaqcspsqckgvvq96hr9gmnftasp880aq6zr7klr3vsu4zren" + }, + { + "metrics": { + "saturation": 2.8521740128458752, + "non_myopic_member_rewards": { + "quantity": 921642092631, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 591297, + "unit": "block" + }, + "relative_stake": { + "quantity": 72.88, + "unit": "percent" + } + }, + "cost": { + "quantity": 196, + "unit": "lovelace" + }, + "margin": { + "quantity": 46.36, + "unit": "percent" + }, + "pledge": { + "quantity": 76, + "unit": "lovelace" + }, + "metadata": { + "homepage": "0K񉓻N\u001fQ", + "name": ":`%", + "ticker": "񘅥􂿦󽱅=菓", + "delisted": false, + "description": "nv<񱕊{ x4>[󩞋\u0017m򄔝\\:\u0015D\u00026\u0008\u000c\"*{>𺌕i L񊜚4 *M[@|\u001c,^gV󸨚\u0008ha0\u001d\u00034󁺗󶩢?~9瀹FO𖽜_񨧞^_獹\"AL=􆪬\u001b\u0018vF񲐶BH\u0001\u0001𜷜2=i*\u000b𒸐򷅢󔊕𷁑!M񛄩V9L~{󂲽n\u0018Xt\u0000>\u0008n\u001fz񠶰􏼧𩾃󵂼:fo/\u0015񸟂C񜣉@L1\t|񱮇 񠺬74󢣕)X%M򻯾񃮡\u0000s_{5𕸧\u001a񘫸YJs(A'^񧝱^\u000b\u0014󍓖\u000fVo򴶕8G􉢺\u0004󶘒򗾫jI\njd-MqV􁵻𙮦2w\u0015\u0005]𴀴𷀵C\u000b\r\u0014G򧔻z񴐇񄅦;򴰯󛭱򊖵񔡭񃎍񢆌\u0013򳣗R\\\u0005BH􏲭" + }, + "id": "pool1wrjz4ws5760k593pl20tvgv57tgqdh2fwkmgkkm03argk3lu8w8" + } + ], + "last_gc": "1887-10-03T11:25:47Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 3.964412249290516, + "non_myopic_member_rewards": { + "quantity": 243079787666, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 7122774, + "unit": "block" + }, + "relative_stake": { + "quantity": 41.25, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1880-02-07T08:42:47Z", + "epoch_number": 12770 + }, + "cost": { + "quantity": 80, + "unit": "lovelace" + }, + "margin": { + "quantity": 39.34, + "unit": "percent" + }, + "pledge": { + "quantity": 169, + "unit": "lovelace" + }, + "id": "pool1za2pnv292eghhsdytwjyp86hemdxnewr8k30fnxur47gqhxkhuk" + }, + { + "metrics": { + "saturation": 3.2715243947306276, + "non_myopic_member_rewards": { + "quantity": 330381841997, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21336045, + "unit": "block" + }, + "relative_stake": { + "quantity": 41.79, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1868-08-27T03:08:54.190946039232Z", + "epoch_number": 11064 + }, + "cost": { + "quantity": 133, + "unit": "lovelace" + }, + "margin": { + "quantity": 9.04, + "unit": "percent" + }, + "pledge": { + "quantity": 228, + "unit": "lovelace" + }, + "id": "pool1yn89prjajpgcd6g7dejddkf9xrsl5dycg3zsz89n9d32swl54le" + }, + { + "metrics": { + "saturation": 1.4952392303602935, + "non_myopic_member_rewards": { + "quantity": 387598260495, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15464194, + "unit": "block" + }, + "relative_stake": { + "quantity": 93.47, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1892-10-18T17:53:36.620212041162Z", + "epoch_number": 21520 + }, + "cost": { + "quantity": 71, + "unit": "lovelace" + }, + "margin": { + "quantity": 55.18, + "unit": "percent" + }, + "pledge": { + "quantity": 0, + "unit": "lovelace" + }, + "metadata": { + "homepage": "K𢝓\u000bʈKc\u001e\u0014\\\u0006y7򦅆>󀐿򋌕}\u0012I򴎉en𢎱𠈖5\n\u0000򐑠򡁓\u0011󅖯}򸇝\u001a", + "name": "󧦟򃲏bq", + "ticker": "\nSC󥠗", + "delisted": false, + "description": "U.lPxi]\u000fs6ꩽ򫪠񕸒򡹶w\u0000𡐆𱊿񈉐,0󎐓F\u000b0S\u0002Z\u0000񷔫O}\u0014\u0013񣆠/G􃕦𘽃󿜫𳀢7񸔞\nE󼔋^𘠉\u0011kMQJ^sG`u.񫵥󵘐\u0008񠶸v򣵁q@@aC:򩭾\u0001𓳡&򰏆|hhtZ#?(h_󚢦\u0011񆫋#\u000f󋤑x񝧤K+&\u000f(\u001aQ𒥴'^\u0000󖍉򰏵񷐈sL\u0014\u000f󜛜񔿁~O\\񴝫Aq򓁳\t\u000eF+U񥬾𱫴z򞛈󡤳T\u000eA򎸥\u000b\u001c\u0002k󨠾gS󅡾>.\u001a\u0014 =" + }, + "id": "pool1h7pcrxm9zwhxrk55emfqw6llm6t05hnwtxk8l64f32eqsa5s3mf" + }, + { + "metrics": { + "saturation": 3.7687630104981524, + "non_myopic_member_rewards": { + "quantity": 430804471906, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1276368, + "unit": "block" + }, + "relative_stake": { + "quantity": 0.53, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1878-12-03T17:33:57.823129061324Z", + "epoch_number": 30137 + }, + "cost": { + "quantity": 166, + "unit": "lovelace" + }, + "margin": { + "quantity": 24.16, + "unit": "percent" + }, + "pledge": { + "quantity": 7, + "unit": "lovelace" + }, + "id": "pool1rh9mwf4ka8d0tdyfz82set5cqvnvvmvwrunpdgm09xa9vthzjpc" + }, + { + "metrics": { + "saturation": 0.4770765763891738, + "non_myopic_member_rewards": { + "quantity": 722170631645, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22309786, + "unit": "block" + }, + "relative_stake": { + "quantity": 68.26, + "unit": "percent" + } + }, + "cost": { + "quantity": 162, + "unit": "lovelace" + }, + "margin": { + "quantity": 23.56, + "unit": "percent" + }, + "pledge": { + "quantity": 218, + "unit": "lovelace" + }, + "id": "pool1dyddrjr5d0vcmp3ae5nr3yydjqt6af3ru32l69aaplvuysaag6p" + }, + { + "metrics": { + "saturation": 0.9782665658528389, + "non_myopic_member_rewards": { + "quantity": 413385220615, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22453951, + "unit": "block" + }, + "relative_stake": { + "quantity": 26.33, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1863-09-16T03:05:56.432511110976Z", + "epoch_number": 28099 + }, + "cost": { + "quantity": 176, + "unit": "lovelace" + }, + "margin": { + "quantity": 85.29, + "unit": "percent" + }, + "pledge": { + "quantity": 252, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0018sH.񺛚\u0008Ztxxq􀫽$򣑖񅺗uDbF\u001b&j𼃷E񌾌򑤫󾄁9򪳍񣟸T򀝊AP!+D", + "name": "Yh򼷭N񒺲򯆣񬉚vKW\u001e􃍭\u000b", + "ticker": "󿸒\u0013n{", + "delisted": false + }, + "id": "pool19fc8xszcpr82c9lns5rnr2gjnzya3hwtqvtsuusrt2f4x22nut2" + }, + { + "metrics": { + "saturation": 3.68948288818008, + "non_myopic_member_rewards": { + "quantity": 534444640651, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1121423, + "unit": "block" + }, + "relative_stake": { + "quantity": 33.25, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-01-16T03:46:02.168066034271Z", + "epoch_number": 23555 + }, + "cost": { + "quantity": 224, + "unit": "lovelace" + }, + "margin": { + "quantity": 7.76, + "unit": "percent" + }, + "pledge": { + "quantity": 24, + "unit": "lovelace" + }, + "metadata": { + "homepage": "U\u001d|", + "name": "򫏝B񸧝FH=񐬑񧆭B\u001e_򫅕睔\"򊄫l𝊡/ye:", + "ticker": "򔧜|N", + "delisted": false, + "description": ",񑁢$\u0016󍵽z\u0019\u0008󭌬񻅻8m\u0014򬆢Pet󻜃/4𩺲\u0016q\u0006UiBM;\u0006T񫥛\u001dL\u001e󅘡񦇅\u0012Xg 󓑬\u0014\u000f\u0016񄬀\"\u0006wᰋh\u001bi}T󐵕A󬞡&YC>\u000b\\񛾟􃫴t\u000e\u0008󅻌􀞒󦠁0A񕮹񖐫f=\u0016\u0008 OK,\r\u0003󰒉`8i\u000b򉿦򌷋[\u0018\u0001]ju[⹇\u001b,]@{򛔖*h󦟓cl𳇵\u0010\u0005\u00023^:\u001f\u0007󯦬󘬏!󐧇񨺉\\+YVT-s񣭝{u'󎫢𸟁𤽉􆸵񤯀u\u0003󈷗󂒼\u0019J\u000bMಇNy󥰤P= 񥞫\u0003t󕩙򄹽`'𜎐{񇴁/K^x\u0016-a⦬K\u0014񅊅򶵹𯷙\u001fX\nR񂃝LIl򥘅`𹶯4g1Cc򲌾Op>𛍛(" + }, + "id": "pool1edlsutx95fedpc6rf5q2aa058hrgp0wzgdnnjse5f9g57lp59hr" + }, + { + "metrics": { + "saturation": 3.5017608602222525, + "non_myopic_member_rewards": { + "quantity": 315800212180, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3246137, + "unit": "block" + }, + "relative_stake": { + "quantity": 30.33, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-01-19T16:13:01Z", + "epoch_number": 19728 + }, + "cost": { + "quantity": 76, + "unit": "lovelace" + }, + "margin": { + "quantity": 82.96, + "unit": "percent" + }, + "pledge": { + "quantity": 120, + "unit": "lovelace" + }, + "metadata": { + "homepage": "[󡞎򱸜\u000c𿗯b\u0012f\u0000\t𢼬:񧨎;󞵏\u001a\u00160\u0014\u000f8+a>#_P𰭎/񬳔񍪄", + "name": "uY𗩄^Q/4k3U0\u000c2m,\tM鎒]GuZ\u0008Fi󔉄t\u0015O𾳜󧃌\u0006\u0008𪦌S񛹐񄇩A", + "ticker": "\\󗶏󶺕\\", + "delisted": false, + "description": "B'/ev\u0014􅅃e𠭄򎜼dF\"󮌢\u0000򣜀󉡲W(񠭨A;D", + "name": "\"kr򀄭\u0005򚫣;bU*P򵠀k\u0012Aп򮐺\u0014l\u0015b\u0007", + "ticker": "t\u0018g", + "delisted": false, + "description": "񥞥\u0002[󘋝B񼹩𼜘\u001fQ&𜤰hD=3񎔩F󮠵􅭗􋞯k\u0014q\u001d^\u0013𴷒td􁕇w\u0019\u001f" + }, + "id": "pool12j7rmneg7l2p6nr207n0798e8dutl2pcyzezyurc2r2c7myzmxa" + }, + { + "metrics": { + "saturation": 3.560986334736568, + "non_myopic_member_rewards": { + "quantity": 821007979583, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11985549, + "unit": "block" + }, + "relative_stake": { + "quantity": 63.91, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1873-05-21T19:00:00Z", + "epoch_number": 7791 + }, + "cost": { + "quantity": 69, + "unit": "lovelace" + }, + "margin": { + "quantity": 98.32, + "unit": "percent" + }, + "pledge": { + "quantity": 35, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򅀖󆋼 Nqu *(b\u0017Wm&򲓙+񦓂Y\u0002󻂡M(iVh\u0012軆G@\u001aoR\u00062󄘖G\u001e򱝔", + "name": "󰝸*bS^:1H\u001f𡣙", + "ticker": "󣁗\u001a\u0011", + "delisted": false, + "description": "\\|V|􅦷I\u0017􉇘򽇓\u0006𩫡~6\u001e񗨿XA\r\u001aỠ\nL\"\u0011V~\u001f9\u0018d\u0010\n\"򴙧1\u000em~o򆗩\u001bx\u0015$񵪑󑜤󿃾=T󓬍\u001b򐇢k)H(\u0000Y󗨠@\u0011\"7󚘢𪍉3󙽭d\u0013󋭑gN󜁠񅥋\u000c?4U񰁝q󃕹]\\daZl_\u0006\u0015URz󴵳sAE\u001dM򕚅\u001e6\u00152軹+R򪾼\u0011A\u000c\n\u0001L𗸩;ev\u0002YK_󩨜7b𡰂L\u0018)\u0002%-\u001bXq򜶬Tt񴞫nU\u0004@\u0013|\u0017󘶖򎭮9%󬡰𥕐\u00164󆖍u$􃑁񲬕#-I򩩎 񲧅\u001fg7\u001db򋲄Qju\u001c/oL\u0006G\u001f/\u0011𫈕{󻓷c𩟿Ty?q񏥼4Y[\u001by>P" + }, + "id": "pool15mqd3mk6rda330a4qfweag3d2xjg2wcjrhvq822gak9g2jr0xl2" + }, + { + "metrics": { + "saturation": 0.5527102577507603, + "non_myopic_member_rewards": { + "quantity": 389974335660, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6484775, + "unit": "block" + }, + "relative_stake": { + "quantity": 2.18, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1907-05-20T01:26:01Z", + "epoch_number": 6649 + }, + "cost": { + "quantity": 181, + "unit": "lovelace" + }, + "margin": { + "quantity": 89.33, + "unit": "percent" + }, + "pledge": { + "quantity": 60, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󭖅򯧠@\u0010j)\u0005_B]oX\u0002CDk\u001f󥜔󾒣𔋇\u0018)\u0014X\n񅆈\u000b?\u0010`2\u0010\u0005𲶽>~z񯓴\u000b,87i\u000eE򸁐n󒤅򚣠􏶜񫮯zH6vaH\u0005򞢍\u001f\u0007", + "name": "&d", + "ticker": "\r򢡙,<􆝔", + "delisted": false, + "description": "'?񪹗𘖥򺼳6R\u0005h*u񜙕wp򓎮|)\u0004󸼝\u000fuK\u0002]$𹍌󻶪O-\u0017\u0018k򈷢𕯔\u001f\u0004k󸸍!򘏱1k)a󻷨U\"&#+x\u001c\u000e\u000f򃒿󛪥C󖫔\u001d\u0000b!u\u000f\u001ciJ򘀭C\u001do𾽥􋊂'\u0013qH𠩔\u0017l񔙟󜼌$n\u001a\u0003TgfRs:M𫚧񷑯Ud2Bkk𒊼iD;\u0002\u0014HKY$𝊴u𧹇6o2u񓬱8\u0003󘰌_R^\u0018K\u0011U\u0005\u0014V򚉿zK#>Q\u0003`9񢌝𯽌t* OM򦉙񦏝QSBH񘪮Nu󌍥\u000cV\u0014􆰇󃞪Q\r򁔡\u0012򩶎\u0011Q8q\u001a񍆔:a\u0003:`\n*\u0002󨶂?2񃖰\u0005򛔒hO|𹶿ŧtK칋K" + }, + "id": "pool13jvwr3rjl0d0ldy6zzattyfy4sfhzdrdmf4tm6g86xqmknq289l" + }, + { + "metrics": { + "saturation": 2.880064717623278, + "non_myopic_member_rewards": { + "quantity": 686142045434, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12566863, + "unit": "block" + }, + "relative_stake": { + "quantity": 17.82, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1891-04-09T17:12:33.704110397083Z", + "epoch_number": 16648 + }, + "cost": { + "quantity": 153, + "unit": "lovelace" + }, + "margin": { + "quantity": 39.63, + "unit": "percent" + }, + "pledge": { + "quantity": 71, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u001b򥤵L\u0015_}S\u001cI%󊇨\u0013E/W\u0011D񼇱򜗩򧻒G''\u001a^\u0018`񦊺󨵌H򾫦C\u0003~q򙑣Q񍹛{{񬧫Lq󠉽)\u0018|@/h𵈅C\u000c\u0007z\u0003\u0004-'謵񈼔+ \u001edNl󑙦4\u0000x򋔝񚽭\u0006s𐖅pI񬤋`\u0002", + "name": "-\u001d4h\u0002f\u0008\u001d%󆛧r+񗞞W󴻏\u00179\u001c󹵇򢟂p\t\u001c\u001fip%7iafC<񉊊S\u001d", + "ticker": "Z.&", + "delisted": false, + "description": "񿫞H󎭺D8'󝽙򤆱)#\u0007_󱶌5g򚉦\u0016H3󾆈qB|\"𫠵\u000cE\t󫇋\u0016U\u0019򫃾򼓘񳻙-" + }, + "id": "pool1r4h02d4nqztrfws54swrmfd7ls65n4sgmyt42xnl3pv422rs8l9" + }, + { + "metrics": { + "saturation": 2.9514110131454445, + "non_myopic_member_rewards": { + "quantity": 909621963107, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2401704, + "unit": "block" + }, + "relative_stake": { + "quantity": 63.85, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1884-08-20T19:20:43Z", + "epoch_number": 9515 + }, + "cost": { + "quantity": 150, + "unit": "lovelace" + }, + "margin": { + "quantity": 52.52, + "unit": "percent" + }, + "pledge": { + "quantity": 113, + "unit": "lovelace" + }, + "metadata": { + "homepage": "mO񊏢?장󊬰𽡂𻑷So\u00131򍨻f\u0018g\u0018򯅩6\nl闹 󫣅𰈓\u0008C^@񎪡)#n󮵼3r", + "name": "p0N󕺲\u0008񚨞u\u0011V\u0013\t\r񌬨󱖎", + "ticker": "􆾅#3", + "delisted": false, + "description": "_B" + }, + "id": "pool1r0s0snd73hmshe8g28xu39rzgqhjll8lnnncprgzez7wy8ewj48" + }, + { + "metrics": { + "saturation": 0.8612461697489432, + "non_myopic_member_rewards": { + "quantity": 692473482847, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21268831, + "unit": "block" + }, + "relative_stake": { + "quantity": 37.65, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1869-05-28T22:37:12.910597403358Z", + "epoch_number": 26403 + }, + "cost": { + "quantity": 242, + "unit": "lovelace" + }, + "margin": { + "quantity": 93.33, + "unit": "percent" + }, + "pledge": { + "quantity": 39, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󭮼9򏥮I|l6f3\u00125T񛗞񊣥t󩖴!𣟮Oz\u0017\r\u000fC\u0001aLsio\u001fhR\u001d򩖙So1󩽗񳗲򁹽\u0001\u00045\u0013𷣴nZ\"\u0019P\u000b\u0012󮋣L\u000c&񆄫\u001ej\u0001Q`O\u0016\u001bh|\u000fx򱁀񑹊j", + "name": "񑖦򖠴B𧔙]u󬿝\u0006{񎪤|\u0005񋏓hw\u0005\u000bW[w\u0017\u001e𫃬gS\u0008󋺥w\u0014=򥳮\u001b󝴿\u0007jd\u0017𤙪\u0017𞟫\r\u00068\u0019L𫍉#\n", + "ticker": "Z=\u001b,񙞏", + "delisted": false, + "description": "*XO𻅡򸑶idk\u0006c=𙽑󇋻\u0007 \u0013󘔼=(cu7eM􈫖\u0003Pt򠜉" + }, + "id": "pool1cslfspa62fc22ta68lgnd38ptk47yvg02e0s33ttnx4lv3l6sjw" + }, + { + "metrics": { + "saturation": 4.695581251544362, + "non_myopic_member_rewards": { + "quantity": 120877909636, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9271523, + "unit": "block" + }, + "relative_stake": { + "quantity": 73.08, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1890-06-18T16:27:18.376636610832Z", + "epoch_number": 9815 + }, + "cost": { + "quantity": 156, + "unit": "lovelace" + }, + "margin": { + "quantity": 30.38, + "unit": "percent" + }, + "pledge": { + "quantity": 252, + "unit": "lovelace" + }, + "metadata": { + "homepage": "nh{򮟋w^\u0004<\u0005X=#򽓦L󟤅񒚕򂨊#󡾔\u0004𼟚񵤊!Q\u0015J\t𳩔\\G#(p/񽡉\u001eh1D򥠍󗥿&\u0019𫱃-_g\u0010\u0016Q\u0016\"\u0018#􁪷K@󀀀o\u001e/^\u0001\u001ej\u001e_\u0001\tSS𽮊򦌯1𗻥J* 󔮯$^!D\u0005y\\􂯜􂉑\u0012\t\u0012L5\u0002򩰢񷻳󏯛+|WO\u0017#F" + }, + "id": "pool1rwvvadpdl37njcqscw54x2ndxhxwlwf9shkwmhmtdqq55kvdew7" + }, + { + "metrics": { + "saturation": 0.37069902870963733, + "non_myopic_member_rewards": { + "quantity": 458106222312, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4446831, + "unit": "block" + }, + "relative_stake": { + "quantity": 23.14, + "unit": "percent" + } + }, + "cost": { + "quantity": 152, + "unit": "lovelace" + }, + "margin": { + "quantity": 81.32, + "unit": "percent" + }, + "pledge": { + "quantity": 210, + "unit": "lovelace" + }, + "metadata": { + "homepage": "|VfTm\u0005𝩍678򅥵&o󮇪󏖊|=\u000e񁮏򂹱􇖘\t\u001d𕞬Vt\u0019򊱵|@_n񢄄󮑸a\u0011\u0017X6J򌫥ou\u0019\u0002}\u0018\u001d\u0005?t\u0016z\u0018\"?񕫫\u0017yW\u001b\u000b\u000e򶺴\u001c", + "name": "w\"$򫢠J𾜐𓾹e2QrT|󈴛񃞡\u0019Fm򯹝[d񇰂\u0015i󱤇􌮢\n\u0016𰛲X*𩏊1}\t", + "ticker": "(򩖭\u0004", + "delisted": false, + "description": "7򒐾z\"r\u001d򸉑LN򻆭?\u001dZT=Y=𾱚04G墎AW\u001a+r=y\u0010I\u0019h+:㮦F16j=r񡜴羄𞇓~%\u0019\"m\\lO򭏲\u0002񊦖\u001f򖥴,D)𪈰\u00056\u001e􋰁v򣟺^iq;/񾴑2e3\u0019󠲙>􄋳c__L\u0015\u0017񢖬򐍪\u0005g\u00027tz~\u000b򰉁" + }, + "id": "pool1xsttvr6qn6phu0wmeze56dyq5ud8ugkcqw46zscc8y82wlyrta3" + } + ] + }, + { + "pools": [ + { + "metrics": { + "saturation": 0.23503926081707427, + "non_myopic_member_rewards": { + "quantity": 532717581740, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3516370, + "unit": "block" + }, + "relative_stake": { + "quantity": 25.47, + "unit": "percent" + } + }, + "cost": { + "quantity": 56, + "unit": "lovelace" + }, + "margin": { + "quantity": 26.95, + "unit": "percent" + }, + "pledge": { + "quantity": 24, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u00053Ud\u0005󞢍C''U䂅\u0015", + "name": "\u000cg񜻲h񃠘SDkfRcx󜴱򸾍\u0003#*󭟊򙯜o󀇆󼻽򒲕🣭򗒇`s\"S@M\u001a(", + "ticker": "񪕊󺀹L`", + "delisted": false, + "description": ".DZ򘆑#e\u001anl\u000cJ%򐂍񈒠_Fu6\t_4,󋽓uQ󂑼\u0019e]򞫣\u001f򫷖eh*o\u0015\u0012AP\u000e7򳱮T?򌝁\\󂓋\u0016J𧜾v񶗽\n\u0003m+񆆾S𓨤=M2\u0019(󨹰񓼻\u001c񑰙\"/\u0004,\u000e\u0001~􍟇󫰳򍘰^\u0007𡏨RB9𳗱\\:[2P\"񴰣w\u0008N\u0004n4󋅫\u001a\u00020\u00009\u0008LO@򣊲򖸈r񍯪񀰒\u0005TD\u0017B\u0014'9񢗉'󊫥󵠇D_F~\u000bQ􂱨\u0002\\1Ps񪺕a񗾠:k\u0014񵖅\u0017\u0005O\u0003󌏯󂪋\u001e񊻍`2\\󨼇V\u001b?Q(뢓9BM&򯔤Z^(" + }, + "id": "pool18pkfu02j7hh9lgqac2pywlvv0kqglezjmlj0f8ff778nx9pkyma" + }, + { + "metrics": { + "saturation": 0.8317132132123595, + "non_myopic_member_rewards": { + "quantity": 119472001527, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 14511237, + "unit": "block" + }, + "relative_stake": { + "quantity": 15.32, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1898-08-09T12:47:43.081256289419Z", + "epoch_number": 4566 + }, + "cost": { + "quantity": 178, + "unit": "lovelace" + }, + "margin": { + "quantity": 92.65, + "unit": "percent" + }, + "pledge": { + "quantity": 143, + "unit": "lovelace" + }, + "metadata": { + "homepage": "f+𩧵򰊜\u0019fy\u0004𶬆s򜜶􋑼P~𳶤򑃤\u0008񩋌%br񤜸󯖓", + "name": "򑳙bR6C?\u000b\u0000T񵚊򱖨N𭘈?\u0008\u000fQ 񰒖񐖓r}󧼜\u0011𠉖", + "ticker": "U-򱲥\u000b", + "delisted": false, + "description": "3񝖷\u000ct\\Jt\u0016񡸙+󏨪񼈅\u0019\u0013s#Q&=g𶠵|o򞵠\u0018n_j𜏊\r\u000cQW\u0004p󶨫񑿆\u0019u󄬲홏s7,\u0007:򼸁w192\u0019P󁰉\u0007!𱏡\u001fXU󑬝\u0018-n񒌁\u000cI=|򚿾\u0004󆨷\u0008R#𷃥n661'!~3\u000bPdl`\u0001P\u0001𶈼⦽r\"W󍊐T\u001dV朧𶝢qlu\u0012_󶞻*\u001f[1n\u00055hz􈣤򾎺)_`\u0016򺐏s􏅲E\u0014" + }, + "id": "pool18z0w72wthjwnkpcsk245ulzh70ky3ca0r7gz05625sl2cyvpg3y" + }, + { + "metrics": { + "saturation": 3.1609452932526336, + "non_myopic_member_rewards": { + "quantity": 202330677477, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18199047, + "unit": "block" + }, + "relative_stake": { + "quantity": 22.07, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1896-10-30T18:37:40Z", + "epoch_number": 13140 + }, + "cost": { + "quantity": 100, + "unit": "lovelace" + }, + "margin": { + "quantity": 22.67, + "unit": "percent" + }, + "pledge": { + "quantity": 87, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0004\u0004|z4T}\u0003񿺋I6Z􂲟𼐟򲲊㲖", + "name": "^\u000c\u0002Z`򻀰\nvGyV\u0013hRqc𴑼\u0015~uZE󚌃tY\u0001&rg", + "ticker": "h4\u001f򤳃", + "delisted": false, + "description": "O󜍥\u001f􇰶\u0015򐯬oL󾏥󜃊>;$𲗖󿜬{OP4^H𕕘򀗊\u0014\u0015󳒜嗿󶌨𮰆A죦\u0011`$I]\u0016~'9𯓩Ah𣬞𸦡񳿞󽔩$檑𝓫>\u0013򻰾\u001f𬡭$A|񶚾}󱌂\u0005񞫉񿖹y.\u0010f;\u00015𾯇\u001a񨇍\u001bX򎿺\u0018)񺽁%󀫩b\u0001|/򰨫fH\u001b>P\u0005KUh\u0008򽩟1\u000c\u0001A󱕦R򟛆𴡈\u0002[J񏭤\u000bA" + }, + "id": "pool1spnphg28yyjpurwm6vk7av0ckp0698qwyfy58e0v8qz36ftacz9" + }, + { + "metrics": { + "saturation": 4.56990651991215, + "non_myopic_member_rewards": { + "quantity": 413012378801, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 13653322, + "unit": "block" + }, + "relative_stake": { + "quantity": 32.46, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1900-02-08T13:46:40Z", + "epoch_number": 26654 + }, + "cost": { + "quantity": 227, + "unit": "lovelace" + }, + "margin": { + "quantity": 34.54, + "unit": "percent" + }, + "pledge": { + "quantity": 206, + "unit": "lovelace" + }, + "metadata": { + "homepage": "􌓝񕚀\u001e\u001f񒏧l3񢝐M\u001eD\u0019\u00129򃹠mc_񤔅-,'񰴲󉵁񠂰񀔑\u0019=km8𸟡T{5 \u0000i\\Z񓣈\u0006񟱷kM2n根𪐪񳹌fH𖵧cK0񘳲7|)󚹏񏻲", + "name": "󀕔c𦙿@", + "ticker": "#\u0017\u0005񿭹\u0016", + "delisted": false, + "description": "#񣸼_B}𜑺󪲶>\u0018/#plJ\u0008^󘸚\u0001񷃥l>{񭰚FWfv󺙙9MnmP)y@DVl\u001c\u0006S@J,\u0012\u000bb𠇧򣖀\u001a,񟁉󦍓\u0008\u001d6S:cPR񵎋\u0016񦯕񱤅Jlm𪟸" + }, + "id": "pool19dh4xdtn6zx6svyd74w0rqv8wj53ga3fef7fm36dw60jv8re460" + }, + { + "metrics": { + "saturation": 1.6464367006119662, + "non_myopic_member_rewards": { + "quantity": 597607016300, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 7715972, + "unit": "block" + }, + "relative_stake": { + "quantity": 66.66, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1860-02-05T07:10:35Z", + "epoch_number": 9350 + }, + "cost": { + "quantity": 209, + "unit": "lovelace" + }, + "margin": { + "quantity": 5.99, + "unit": "percent" + }, + "pledge": { + "quantity": 21, + "unit": "lovelace" + }, + "metadata": { + "homepage": "󾢮\u0006򬶢~𩷮$s𣪪(󩖈癄9\u00161񱣏L\u0019񧶫#𻈂\u0007\u0014iI󡥗\u001b𑴖\"񫎵\u0003𱮯\u00163ꈛv񜝾󂜺Oj񊡙\u000e\u0005Q\"E\n\u0013\u001cRn\u0011}{A\u001d\u0015Cdrfb;v", + "name": "d2\rdk=G4Au\u0012", + "ticker": "cb4", + "delisted": false, + "description": "󯊵g𵌡w)\u0015򎢂%y񡧹{nsT\u000e𯊴\u0011􇣖𖧚_P\u0010񫩰\u000bǬ\u0001n󕩻zj\u0008Y\u001dn\u001f)񖎇\u001e(]񵭵\u001f񝖞&j&c\u001aS𜥼!w򞣭e󾡅J򖉳6񮹋a(񏆢lBn\u001b\u000fup񾱠?<\u0015\u000bHf\u0006-M^󽡝\u0011󏘁\u0014Wt񥔃h\"󬠀L4}\u00189\u0019\u000f󪉜h೗" + }, + "id": "pool1cm4uvkt3qv7tngsc6e3yta22e2qcdg3409chd6yh92me5ew5dzj" + }, + { + "metrics": { + "saturation": 0.742384280289029, + "non_myopic_member_rewards": { + "quantity": 472099403957, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12927222, + "unit": "block" + }, + "relative_stake": { + "quantity": 56.18, + "unit": "percent" + } + }, + "cost": { + "quantity": 86, + "unit": "lovelace" + }, + "margin": { + "quantity": 99.93, + "unit": "percent" + }, + "pledge": { + "quantity": 184, + "unit": "lovelace" + }, + "metadata": { + "homepage": "2-0%\u000cK=7(@𛿟$򧤫\u0014G(\r)mCA\u0013Rs񺰶\u0006񚚛\u001br𲚣:𥯘򼴩񗖳^", + "name": "\u00076,C􎣫𗻧V\"񄟽l`񐐃򮺗_:0A𡑍8=iiC򘙔.񞚂f.\u0007\r\\򐗴cl,'$\u000en", + "ticker": "2󓇳s9\u000f", + "delisted": false, + "description": "3\u0019C󥢢􀳩C𖬨󮅠}𕘥>,2gV󪒉?M|\u000ec󮂭l,\u001c6\u0001p:hK񚦿𮹤9\u0004\u000b񫒎^=\u0002󲡓nIGQ6*\u0018󫸍N󖋽\n񓂹sjx\u000f%zI\u0011G𘐴\u0010󕪙𻫛[\u0012Nw󩕖?V\u0016s򿃶(m\u001a\u0015򖲸]Ah\u001aT\u0008\u0018OW\u0013_|%ld󟫾󅅧\u000e񵲷 =󬳿~<򺞧X𗢟􈘖\u001f%\u0016𤃟\u001c'O񐣦,,\u001b\u001cT𩥋󺮄Ds\u0014𗘮󰱌k𦤯IfmwKk񙣞6\u0019Di^r󱝳Y󺣥Gw\u0007N~\u0000J񬑣\u0017󅇢g%Tf\u001d}W򠝖`򭅨" + }, + "id": "pool1gkkwej96ws9mhth4zgl5lqar5k2dh54ft5egfggqupswjs6ac3u" + }, + { + "metrics": { + "saturation": 2.548141356215254, + "non_myopic_member_rewards": { + "quantity": 867667807703, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1881978, + "unit": "block" + }, + "relative_stake": { + "quantity": 42.8, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1891-03-01T11:52:09Z", + "epoch_number": 5695 + }, + "cost": { + "quantity": 135, + "unit": "lovelace" + }, + "margin": { + "quantity": 58.64, + "unit": "percent" + }, + "pledge": { + "quantity": 217, + "unit": "lovelace" + }, + "id": "pool1ngvvze3dzcp5fhvx0w4jlcjg594y29zs5ynxrcsn4w2jxqzsjnx" + }, + { + "metrics": { + "saturation": 4.399398331067638, + "non_myopic_member_rewards": { + "quantity": 713571065756, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3611250, + "unit": "block" + }, + "relative_stake": { + "quantity": 9.41, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1861-03-10T20:20:46.301275769918Z", + "epoch_number": 19516 + }, + "cost": { + "quantity": 178, + "unit": "lovelace" + }, + "margin": { + "quantity": 48, + "unit": "percent" + }, + "pledge": { + "quantity": 26, + "unit": "lovelace" + }, + "metadata": { + "homepage": "{hs󯬮𲵐axS򱽞\u001fqCm\u0004󻶤0疀_\u0015Di\t\u001b1!򏗪󃚏[冋󸛤,󑼃ugV\nB/ugR7i\u0013\u001f\u0017\u00008$i\u000b_,\u0019󦺴\u001e򨌳Xl\u0010~񄓧,6I)𖚕2m/6\"򄪱u~񋅟R񞜖򜚪A\u001eP%\u0018OQ򁧝򮭘dF\u0007\u0019oD\rvS\u0002򀡩Gr\u001e^󠸓u#(𯱝>q󄢆&2񆽖z)~􇮼򹸳\u001a\u0010񤹍" + }, + "id": "pool127f7lcgmcf8fz8qwrufl64tfdfjdy98c43ntpr7amsl2kyj0wn2" + }, + { + "metrics": { + "saturation": 2.7173874690449775, + "non_myopic_member_rewards": { + "quantity": 312784436667, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 20522062, + "unit": "block" + }, + "relative_stake": { + "quantity": 43.39, + "unit": "percent" + } + }, + "cost": { + "quantity": 132, + "unit": "lovelace" + }, + "margin": { + "quantity": 71.23, + "unit": "percent" + }, + "pledge": { + "quantity": 139, + "unit": "lovelace" + }, + "metadata": { + "homepage": "񆆯\u001f$R񡱸", + "name": "\u001b\u0019\u0015w1Dgj񫼎\u0011𖖂􀁬v\u001aD𲤯\u001df􍓆񙇝􍲭Vb񝾟X񏩓\u0008\u0014򗄮\"󘧇󻧽󾂋A􃑖" + }, + "id": "pool19wt0c9zqnp6m4xsmerz4ysz2g4sndm92h2wmdhh7r3azkzqpmw7" + }, + { + "metrics": { + "saturation": 2.5800215780187994, + "non_myopic_member_rewards": { + "quantity": 781616943077, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12355964, + "unit": "block" + }, + "relative_stake": { + "quantity": 95.53, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-07-30T00:54:58Z", + "epoch_number": 31076 + }, + "cost": { + "quantity": 10, + "unit": "lovelace" + }, + "margin": { + "quantity": 36.6, + "unit": "percent" + }, + "pledge": { + "quantity": 226, + "unit": "lovelace" + }, + "id": "pool1u4heut7xmqcz8gaz50tklcj4e8lt0lfdr5c74mfratz4u5a69wd" + }, + { + "metrics": { + "saturation": 2.369418247644717, + "non_myopic_member_rewards": { + "quantity": 55629129590, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22036496, + "unit": "block" + }, + "relative_stake": { + "quantity": 83.17, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1901-07-23T10:28:05.558012104149Z", + "epoch_number": 18990 + }, + "cost": { + "quantity": 211, + "unit": "lovelace" + }, + "margin": { + "quantity": 47.79, + "unit": "percent" + }, + "pledge": { + "quantity": 142, + "unit": "lovelace" + }, + "metadata": { + "homepage": "bz𡱬򨣶򭄍\\3Ft\u001fYWJy򔳘\u0001.\u0006v\rtA򴇞v\u0012vk񌸏􎇼󥓬g\u0007:)Wm𥦈󔢰\u0014\u0017󷳔򒣁", + "name": "\u0005\\𑌆\u000fI19\u0019Alt\u00140򄩻񉾜wf\u000b󉾑qW񵑏\u0018\r>v\u0003𸻺Y{W𔴇Q?", + "ticker": "𧁮t\u0019򌬶:", + "delisted": false, + "description": ">`'?-q7\u0014Yn>\u0018򃿕v}z\u00105𐴮򋆢򰱏`U*%褷1\u001bi)M&Q\ni)c\u0008񻜪\u0014Zp\u001e\u0010򟓹󵧔}N.򜥷\u0014*\u0019𤖛t\u0018򽌬\u00021\u0008\u0006A[\u0019m%h=\u0016CM󢍈$&)\u001d\"\u0016\u000f\u001e[+t76X򸌱\rz𱼭\"\u0019H󈏧񩞞\n\\I8:^?󛤺I\u001aKv\t𣏁y!<2}\u0007\u000cOS\u0002𠤩\u0005ᔸ\u0014񽽂󯇾nTP^\u000c{𙑐9񻽴0vTgTk򕹠\"\u0013*\u0018-I򲂇\u0016+1𳎲H𚂗\u000e\u0002!921q|w\u000c򠽀{󅭏^8U\u0003<\u000cg𮳝M]\u001a򱿾)^\u0002𴾞!\u0015UZ\\O񣌂󎦛\u001e\u001f\u0016U{j􇄫\u0000\u0017De󾵱k4uumZd~`C/p+b@󇉳[/L3\u0003^򼥘򛯎f󸞯_`𯿚󹺖=WN򀨔𙭏:" + }, + "id": "pool1ld0a0aasheztu98yuucdvwjxhurw2cssaap37rz5p0fmu2u0yzn" + }, + { + "metrics": { + "saturation": 1.5241114929567934, + "non_myopic_member_rewards": { + "quantity": 248398847665, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2810490, + "unit": "block" + }, + "relative_stake": { + "quantity": 33.08, + "unit": "percent" + } + }, + "cost": { + "quantity": 203, + "unit": "lovelace" + }, + "margin": { + "quantity": 53.4, + "unit": "percent" + }, + "pledge": { + "quantity": 159, + "unit": "lovelace" + }, + "metadata": { + "homepage": "3\u0013\u0004h\tkVfxj󓓗Q󲲷𾺻k薼K򋷨\u0016]*󂦜\u0010}L>Vc|\u0015\u001c[i\u0001", + "name": "}񆻁𞰉:[CYoCpaC\u0005q򷺿񾅥IM𩦱8\u0015k7{5", + "ticker": "\u0013g𚹫\u001f", + "delisted": false, + "description": "L\u001d[X}r󲷸P?/~\u001chf4\u0000\u000bL󩻷򂃪񯂘\u000b\u0003Jf\u0002`xiH!=<\nV$\u0004b\u0002򒊹\n!\u0000S纈𺙖]\u0005\"|\u0016F\u0010h򒲽~*#󊶏q4!D󙎷\u0010󛼠򐄼ee󅰕9k𚘨K\u001b[(s\u000e򖜪񏅚yj?\u0018\u001eK,󚂵&+#\u0011񼯜󎄮a򙎇y𩤸\u0004Aq򗄇\u0014\u0007\u0019#2󭆻P󯌾\u0014)Q񹴰\u0017򈼕zા𥽸G\u000b\u0013󈞅-\u0010n񢛾򍚗K􀡏\u0008󂏔)", + "name": "a3-\u000b:19񯬲#\u000f0J1", + "ticker": "Q\u0007o򰁄", + "delisted": false, + "description": "𸭩,,8*J~Z񴢥\u0000\u0002", + "ticker": "\u0015d\u0003", + "delisted": false, + "description": "\u001eZ痓q2l\t񉤑#`\u0004\u0016~y\u0017@5h󳁨\u0007p5\u000e񰹌󡐷\u0000򾶇,^#\u001e?򧇱|y򁑙]z*\u0002&\u0007󡳲\u001c&񎜿[^?󂀈n)j" + }, + "id": "pool16576y78748730ldpczpvupck5pr0wjksgpdk6vnrppulk2aagnc" + }, + { + "metrics": { + "saturation": 1.6391965183304373, + "non_myopic_member_rewards": { + "quantity": 339917780059, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22566849, + "unit": "block" + }, + "relative_stake": { + "quantity": 84.45, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1869-01-20T17:11:53Z", + "epoch_number": 771 + }, + "cost": { + "quantity": 44, + "unit": "lovelace" + }, + "margin": { + "quantity": 59.47, + "unit": "percent" + }, + "pledge": { + "quantity": 119, + "unit": "lovelace" + }, + "metadata": { + "homepage": "$P򂂻𒻀|pG5\u0017|􈨯9񐿙=X򺼌I\u0006𢻄V\u0011W6\u0001󹛥8^HLGG𮉁d\nH%+\u0011", + "name": "LqDX웙dof񂣦򆅣\\M\u0011j\tR\u0014𠌝uC:\u0006񉴐>􃵂􃮽*Q,\u0018𧲦򲪻\u0016=l+􊽩񣬂", + "ticker": "{=m", + "delisted": false, + "description": "vD\u0005H?\u001a:XMuz󔷾\u001a𬗃o\u0012󲤡񘯞\t^򫎲\u0011M$\u0000F\u0016M.񖆌\u000b|\"h𚷤~_񧤎\u0008\u0016g/@򢂿𧈵]\u0002ViRp󌌰򕈩KN\u0005oA\u00022\u001a^󖚋󌜾/󊿲8\u0006 Gwm\u0012\u0004%򄄹vs\u001e𧉾>󄪿\u0004i.l󖃬D]򤖕w\u000bo񪿴(;\u0013񋗜鳮􇪚v\u0004,I󎇱\u0000k\u001aP&g\u0005%򂰋`\r\u0007񽫜D>\u000eSEO\u001b-`񴧽}\u000ciq\u0012y󧹼󅂓K._xL%򩲆$!e\u0004\u0018𛖥uoU󬌡򫞨'FTo\n~𤦻񆸭&󋮱𯽄8񘕱𛬅􏕣]K\u0018DoY_" + }, + "id": "pool1a3tkahy9v8c709tpvk6z3t6vcrl47kjn6j4g66rg7v3953u75rp" + }, + { + "metrics": { + "saturation": 4.015131494914703, + "non_myopic_member_rewards": { + "quantity": 753774003726, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15872653, + "unit": "block" + }, + "relative_stake": { + "quantity": 27.9, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1874-03-04T08:00:00Z", + "epoch_number": 23539 + }, + "cost": { + "quantity": 251, + "unit": "lovelace" + }, + "margin": { + "quantity": 96.84, + "unit": "percent" + }, + "pledge": { + "quantity": 156, + "unit": "lovelace" + }, + "metadata": { + "homepage": "(S\u0008R5𐾚6H!򙐤e&R􂌂w%GI\u0005󐔬󨺾R\u001b.D򹷝\u0006E񔭮C*񣢑3,񑢌񱣧O񭒔?a򞃝~\n4𖊈𦽦𜻀o\u0019}X6mQ&gwZCj_\u0000<񊨠#󐎠NJ9􊋎Xm", + "name": ",UZ\u000bbV>򞝄&󿍎NRh𩩋󨾁=a\u0015\u0018\u001bV󃑷GRO\r󓣓󪗎񓧐\\Rp3񄡨bzr", + "ticker": "\u001e,\u0013G1", + "delisted": false, + "description": "\u001db󡯾g.E\u0011\u0013\u001f򶇒q񭶫\u000fm~񨦰򩥛F󧫥\\\u0015w\u001a򓷟ez<򤐽!LO!l\u0000\u0002󌍁Zq`\u0013<򋮊󈱀\u0005餘{R񚒚L򛵰\u0010{Z\tL󶩎D75!*5󼪿}󧑴󱈛򵧉𶃎.򆊳(D\u0005r𺟬񻛕s󧗘oQ`@5򔧇e\">#\u0004kk-\\󑖱\u0015\u0004'񗅏򪻵󠊍%񾫭5VY񵿧\u0014󙹵𗯑򨷭}񅊮a\u0011$򾤞\u0002.񫀤=3񆎀$\u0003}1p󳥳4?4𶈑86j1\\򉚶\u0019S򷅶_<􄭑I5\u0015\\\u0016Q\u0007񞙡i񜓚\no\u0012w򪓟\u001bs9'񸄤򬻫罪]t򴫒bq𕜜E>E󈟀;<-Ncp󣡕𵕋񿽻M\u00184𙝴󣚗G󡸼E񭾎y`R񯃒+\\\u000eJ\u001dx\u001dW􂝉kw'\u001c\u001bB\u0014\t󩟈,g", + "ticker": "t򙫭Wl", + "delisted": false, + "description": "/񻺖nj=\u0010\u001f𑟽󳲥0QX\u000f\n4@.𞒒񅦩>\u0008i\u001dY9mc򤂚sZ\u00156\\\u0003;\u0007(>񞀌1[u\u0015p򴗆#C🐥/\u001d񲹖H8_S\u0013?򪦧V6y}(ﶶ𞀞Idpd򱼍\u001d.0񢤪񯣌\u0012\u0015񚪻S\u0006mF򀈊?񏠢T񵦩(򨇫MqVnI𢊗\n𳌴\u001aG\\\t򳀚!\u0017GI}򭈀򌻛rHM\u0013W+\u001er\u0018񳇬\u0017f%b~=񒵤򎹇qPO򬷘:c}gG󘸻0DD9%n\u0002Gp\u0014q\u0008\u000c򤀾񊶕\u000f󦣓 `񪓣,$=\u0019[a󥊗򁉿$VEh\u000e3񐽹\u0010m\u000eT<$\n򋐊6ZC?k9-DIg1\n~y򱻅" + }, + "id": "pool1w4z563f3nrrxqg7aqcc6fmhzqcczvtyam99rudmcksqmg0fpjwz" + }, + { + "metrics": { + "saturation": 1.3080694365359324, + "non_myopic_member_rewards": { + "quantity": 319501729579, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9354572, + "unit": "block" + }, + "relative_stake": { + "quantity": 97.5, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1875-11-12T15:21:13.213160168107Z", + "epoch_number": 15432 + }, + "cost": { + "quantity": 110, + "unit": "lovelace" + }, + "margin": { + "quantity": 81.2, + "unit": "percent" + }, + "pledge": { + "quantity": 196, + "unit": "lovelace" + }, + "metadata": { + "homepage": "𹿤\u001b󸟹1?:\u001a", + "name": "}Ev󳪣 𣐯\u000f򈢜\u000f\t'TU􃻦I𬓡_\u001b\u0004ዐ\u0011逍\u000c\u0003񶵸񢥷W4󿶓\u000c;\u000fA^𞶵\u0018m[ඹ\u000f绿򛝩,\u001b )\u001cZkc", + "ticker": "C\u001awU7", + "delisted": false, + "description": "\u0002H\u001c$|F𱀐\u0003\u0011v\u0017\rC,=EU򇔮c\u0005CgwD\n\u0012[=#󆖯'e򛪒lT􀸜c󧩄`\u0001,D񃦞Yꊙ5񳐴𻋡u\r+\u00072C\u0002\u0006EAO񁱒\u001dmHQ\u001f6~{Jr\no\u0016M\u0015?\u000c]\u001cRFP#𰹽'\t8򕘓J񪮢󈊝" + }, + "id": "pool103n97lg6tgfed4wyh4ypu5qg8nry44jtpy0cuqrp0wh25zc5rgt" + }, + { + "metrics": { + "saturation": 0.6802585468764488, + "non_myopic_member_rewards": { + "quantity": 728796505103, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 1591028, + "unit": "block" + }, + "relative_stake": { + "quantity": 82.68, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-03-26T21:54:42Z", + "epoch_number": 19513 + }, + "cost": { + "quantity": 125, + "unit": "lovelace" + }, + "margin": { + "quantity": 71.58, + "unit": "percent" + }, + "pledge": { + "quantity": 9, + "unit": "lovelace" + }, + "metadata": { + "homepage": "k'P_𑳨_󂕙5\u0018򆗇󽥠򵺕8/N\u0012:\t\u000c`}!8\u0003\">񓤓h󞍪5\u0001df\u0013\u001f񴅐z\u001f@\u0004\u001b=\u0013b񋐥hQ\"\u0018+򆌓D #?򧪇?\u00065-h𾐮򛒨 񠡼(㙱󙓚\u0018w􆭰RJ\u001c<\u0014񎌴Rt\"]򄧆U󂭰1?\u0007q_&f'=", + "name": "򨷘g򄌺󚏘𬸻GXm󞳖N󡋃񐲪𾡬񄥉~🽄򾫣\u0000[#}v񵼽%Ec\u0014򲉣|񭄆n\u000c򑲡\\Y𺲎򕦆1", + "ticker": "PF𓯇", + "delisted": false, + "description": "򵱾Jr4񸌥K򒽜\nIY8\u001bJ𰅚#I򴜀󙭅\u0018𬪊L\u000cNG򔨝#\u0003\u0015r\u0006㳥\u0004\t\u0000𢤓|&󀲷6\u000fA46a!C撒E󚣎7:.񰹭\t@\u001c<-d\\\u001a%𜙃񄀟\ta&=I0Tx񖍦w'\u00044򡀴z喏񻌣󪐙\u0015Y򂩌񑕺\u000c𡦎SHv󮞈򂄃^\u0000ZE\u0016𨘷k񮯼1Ql0^B{?񩨿r󬄉򮻠𜲛󇗔>|\u000e𔫵d{fN򍑠!񴥁\u001cRg𲂄X\u001b*򮖻R򢿴O\t`\u0015)Rb񇵎\\H!\u001c|\u000c\u000f\u001d" + }, + "id": "pool13ktjw94znuwg9ejd02kuh8jqvdc0sthrsxzynnlzl0v0vj6s6pc" + }, + { + "metrics": { + "saturation": 1.7338685998944854, + "non_myopic_member_rewards": { + "quantity": 924245086734, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 4437166, + "unit": "block" + }, + "relative_stake": { + "quantity": 36.64, + "unit": "percent" + } + }, + "cost": { + "quantity": 172, + "unit": "lovelace" + }, + "margin": { + "quantity": 43.96, + "unit": "percent" + }, + "pledge": { + "quantity": 15, + "unit": "lovelace" + }, + "metadata": { + "homepage": "BZ\u0019򷏠jX󠨭T\u0013kqS@򑉒r𿭎(BP \u0005?^M򈍛R<\u0016񬤋}'c@𩍥󣔭@[J\u0018\u0019,򩈓\u000fc򃴰&\u0004\u00073򬘧t\"򤠵Lt@%s󿷶𘴐v\u0016𨉺l`O[Z\r/\u001d􃘘$򻀉\nc\u000c򆵀J|\u0005f\u001d%a\\\u000b2󕖋0\t񠠰q2󕛲񮏶򐊧,5]", + "name": "\u0000 vek៻gd\nF]\u0010fl󑭺UJ󦨱򅪚bL!򕛺l+𸞦h𧜺j\u0019?󢾳𔙛*", + "ticker": "SI:\u0008A", + "delisted": false, + "description": ".q񅒙\u0008쳋T\u0018m𵮺Ƌm2\u000c\u000f\u000b󕒈9NJ\u0016󍌿\u0004\u0003s#@'\u001aS􋆏}󌷯g񁋺t\u0004\u0011S \u0010x<򕤌\r%Qhnn򻕆\u000bu񆚄\u0006!\u0000\u0001K𫎝)\u0010\u001a6{\u001b-uBO!;\u0013n`C򒙖>O!Zv𩏆򊃨\u000f-oy\u001e\u0017btt\u001d\u0004G󜊁\u001aEe{\\\u0015\u0016of\u0014򴵧𾧨W󹗉O񟷵J刭񖉭Ef\u001a>\u000c\u001ctqMC+" + }, + "id": "pool180d5ztwcuzaatnnrvvk3za98xg7zhhxasljuvnuyj44j72d8tyd" + }, + { + "metrics": { + "saturation": 0.5760567293728108, + "non_myopic_member_rewards": { + "quantity": 635458613658, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18505166, + "unit": "block" + }, + "relative_stake": { + "quantity": 61.82, + "unit": "percent" + } + }, + "cost": { + "quantity": 124, + "unit": "lovelace" + }, + "margin": { + "quantity": 98.45, + "unit": "percent" + }, + "pledge": { + "quantity": 171, + "unit": "lovelace" + }, + "metadata": { + "homepage": "ku`\u0013󉢖aU򃹿񋁔vM\u001d%鎫ẋ\u0002\u0015󍺘dJ񀙏񮰌b:򞱒V{󹟱2$3\u000bf\u0005b𷤽\u000f?W􈧞񵟘R񕆸\u0006󈶁H􏸽+YF\u0019@B,gn#&!s'H\r􈋬1𖖜9𓜹}$n򍏹񦗉𤿓:\u000b\u0019󝭵n􋋁𓭘Cfb𑩒*Z񶷙\u0001d񼿬\u0000\u0008'򶦔", + "name": "\u0008􀔫\u0011n򋧌\u0013󪿢amnwG񧶌`.5\u0008\u0015􈩦1m", + "ticker": "RBD@y", + "delisted": false, + "description": "\u000e񋮟}7o򨧞\u0000 .`󏁏P\u0018\u0002\u0005󈽱+l\u0011U\u000bk\u001f𦗿򛔡;񸧨X4򮑀\u000e~\u001a\u0015m72md@U\u00086󉇊𗠃򄭤󛑪!񮲌D򰁒>N󅋙𻿂򑽛[򹶋<\">J񶣧\r\u0011IZ;\u001aA\u000bWfR;򮶶\u0013w-O𽩩򐅒h\u0001򓦀󅎆[u񅓅.Cx$\u000c򳩚9c򦑝ꇯ[5p\u0002\u000f\u0006#)򿞄B\u0014𱞡򓏆A򮜴\u0006^*\\󛬽M񇹁򘷦`C𠁆F(/x𵍆􆶺\u0005󋄠hq\u0018Z\rB(򊇖\u0000T󏹐uhx򺆣o\u001e3rO󯹅捆\t719fo񾤼\riEq󩛇\u00160𲝐s\u0000\u000eX\u0007;🫎󒉣;u\n|{B\r\u0013V􆭫򰡘\u001c\u0019󃸭񫶏\u001d𐔓򐔻smQ􃭛;t" + }, + "id": "pool16e5fs927cms54tpdmklqqcvg8cy7jqu5hvjcpp52tn6vyhup949" + }, + { + "metrics": { + "saturation": 4.06577063978342, + "non_myopic_member_rewards": { + "quantity": 630400707373, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21171571, + "unit": "block" + }, + "relative_stake": { + "quantity": 19.58, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1879-07-04T23:56:27.811518674567Z", + "epoch_number": 1964 + }, + "cost": { + "quantity": 185, + "unit": "lovelace" + }, + "margin": { + "quantity": 17.91, + "unit": "percent" + }, + "pledge": { + "quantity": 152, + "unit": "lovelace" + }, + "metadata": { + "homepage": "2L]1򕡣󸙓P(|\u0018\u0003\u0000!🇒\u001b󭇄eP񿼔2\u0015\"j:", + "name": "\r+w\u0006", + "ticker": "懲+񏡤", + "delisted": false, + "description": "@󉝟\u0000񓢡󗎏< zk򝀎-f7󉴏++uj&\u0006\u0003-GAlx򊞛\u0001]S'y򉻈?rC\u000c)򤠵XT" + }, + "id": "pool1x5mp5jn29zdtsjhuq4wfcuf9glrx0ejg4rqfv3lwz4ntu6qyr9m" + }, + { + "metrics": { + "saturation": 5.176619043666619e-2, + "non_myopic_member_rewards": { + "quantity": 940330897384, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 18663329, + "unit": "block" + }, + "relative_stake": { + "quantity": 1.65, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1882-08-01T07:01:52Z", + "epoch_number": 26722 + }, + "cost": { + "quantity": 179, + "unit": "lovelace" + }, + "margin": { + "quantity": 35.59, + "unit": "percent" + }, + "pledge": { + "quantity": 70, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u0001󕗚\u0000RZt%\u000ft\u0010Y񹺘l񛹽8,`6􀃛9\u0008E7o5𲑒64\u0013\u0016TMh|g󴰬\u001bfD򓧀񃙬EqC񊷩􆛴", + "name": "O9d\u0014Gm\"𞞲\r\u0000)0w\t>Jp򄿌2VH\tU𷂳-\u0014)򹕩\tG", + "ticker": "\u0018deV", + "delisted": false, + "description": "L*\u000c[\u00030񒿸?\u001f/m|1\u0001򔅏-򾁸\u001ba򆝄(`\u0011I{󡏋f8i?)𤺇]X񍞩{C\u0012􎕫񵘎\u0010%G𡛨q󥍻􁴇}\u0004>򱧄)6򧂈򎂬󏂌s\\!ꕫam􏌈P\u000fo{\u001fCr*ZL󽜻󿓍V񳍋=\u0000񬶤W\u001e\u001e󜱑LW򏝖򜄆񽄀򃤦>\u0008򐪽|\u001c)󢥘7QF􏾔#f󩖥w*Bz>𘗌񐌎I\"𝻈􍷊񤬄@\u0006\u0016\u0013𽞦\u0011h[j]?)\u0008\u000f${\r\u0001\u0016󸠗XM..\u0005S\u0019%\u0012\u001ar9\u0005\t𨹌񑩽.4N,󟁍񱸔7^" + }, + "id": "pool1cap526pl6dq4ljgh28c90k0a55myh4t6ygpufvrkr3zlxdj5946" + }, + { + "metrics": { + "saturation": 4.0252231481378224, + "non_myopic_member_rewards": { + "quantity": 714373213455, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17554996, + "unit": "block" + }, + "relative_stake": { + "quantity": 25.69, + "unit": "percent" + } + }, + "cost": { + "quantity": 68, + "unit": "lovelace" + }, + "margin": { + "quantity": 6.17, + "unit": "percent" + }, + "pledge": { + "quantity": 238, + "unit": "lovelace" + }, + "id": "pool12tf3xfqaq06ny7rg4qh887cw9a5jynk30atvdu7mdx2dgc4mw8e" + } + ], + "last_gc": "1891-06-23T21:00:00Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 3.726728642672161, + "non_myopic_member_rewards": { + "quantity": 172861612247, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22161224, + "unit": "block" + }, + "relative_stake": { + "quantity": 47.3, + "unit": "percent" + } + }, + "cost": { + "quantity": 240, + "unit": "lovelace" + }, + "margin": { + "quantity": 29.76, + "unit": "percent" + }, + "pledge": { + "quantity": 191, + "unit": "lovelace" + }, + "metadata": { + "homepage": "6󪓇.2ZN\u0017\n{񷻾\u0007\u0006󿴾\u0000|󁩀\r(󥰵󛉹n?bg\u001c6\u0010?V", + "name": "PEs𨵘%9\u0017𔺍 ", + "ticker": "^󭐐\u0004F", + "delisted": false, + "description": "򯞎'w󄚰\r𤹊|C\\\t\u0007?la(3)0󢪂R\"CkQ󿔝.񄇄b񻸽\\𙔠\u001d\u0014}dLU򰧴𕰜XE\u0001{\"{B𩛹󊲣i򋞇}񌜴\u001a9Brw򯄤򗀴\u0008𜫽!2f򆬴\"v2CEF1g-^b\u000f󢰚^5#H\u0004r\u001d#[jU\r񱵷pGld\u0000𸖷\u0014M*\u001aBB\u0005񴁺\u0000R{\u0019_\u0004\u0002\u0003/򰮥/\u0006IUp\u001cM\u000fsl]a󿎦苠&\u0007Z𹊺\u0004F򗴼\u001b$\u00145oz񹗝\u0001\u0016񣠶b~W󲈷\u0004Y\u0017@9f􁎉󈔼v&v𫡜񨛾}󠾂񘜽w/\u0006\u0019閮\u0000ogph𮟱\u001dQ󙲒x󪹑`𺖴8d" + }, + "id": "pool1wcgu7y8gsgfj3m9akq8gpw2pd4zlx9s2xnessscur4rkj6upaal" + }, + { + "metrics": { + "saturation": 3.273579584412874, + "non_myopic_member_rewards": { + "quantity": 238077192544, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 142014, + "unit": "block" + }, + "relative_stake": { + "quantity": 84.12, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1886-03-19T01:18:24Z", + "epoch_number": 13037 + }, + "cost": { + "quantity": 87, + "unit": "lovelace" + }, + "margin": { + "quantity": 31.23, + "unit": "percent" + }, + "pledge": { + "quantity": 40, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\"􍛏񖚲\u001ef+K\u0013򵰣\u000e\u0005𜮢\u0005?h70Q\u0017󧞪yHM\u000c6gBS񸄊~󺦚)O\rF󓮣\u0001杬\u0014=EK KJ\u0002\u0018\u0003:󤁐򂰢YR`j'岦2<)򃧽~gi󕥭\t5!THN񬓙eo\u0002喛1\u0019|UHN :򞅱/Y3/s)<𑶣\u001e򍂮W.<0v\\\\ᛎ򎌛\u0011󆩴*\u000b𡀯\u00134C󟣜\n񁿏WQ\u0010A\u0005N\u001d򨉜\"X񭑮p|y$I󭺗sOnE\u0017_⹦􍱲{ℕ(\u0006V󕉷D򗐶T" + }, + "id": "pool139uujdzy9y5wwawz5z5u743mzvxrtfn5trcvdzfdaugtuc5y5qs" + }, + { + "metrics": { + "saturation": 4.849699749747879, + "non_myopic_member_rewards": { + "quantity": 745234401190, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17290969, + "unit": "block" + }, + "relative_stake": { + "quantity": 91.66, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1869-01-08T02:25:16.715886366549Z", + "epoch_number": 18784 + }, + "cost": { + "quantity": 173, + "unit": "lovelace" + }, + "margin": { + "quantity": 60.29, + "unit": "percent" + }, + "pledge": { + "quantity": 78, + "unit": "lovelace" + }, + "id": "pool1veq93y9h4549u9tuehfs6ur8zkmcxhe9cfpqdxxxvuek2lv9g0n" + }, + { + "metrics": { + "saturation": 2.138766389968155, + "non_myopic_member_rewards": { + "quantity": 251220798556, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 15855846, + "unit": "block" + }, + "relative_stake": { + "quantity": 24.28, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1870-06-24T08:03:39Z", + "epoch_number": 12633 + }, + "cost": { + "quantity": 39, + "unit": "lovelace" + }, + "margin": { + "quantity": 42.01, + "unit": "percent" + }, + "pledge": { + "quantity": 207, + "unit": "lovelace" + }, + "metadata": { + "homepage": "J򃞯4\u001f?\u0014\u000efᓠP7,𖹰񁑃N9񮉝\u000e\u0005%", + "name": "􀎿0q\u0019񨖃>񺈊^쑫%󦫓WNaW񸸳q\u0001󯄊p󘷀l>rI򜕪\u0018=x", + "ticker": "򁼷\u001dm", + "delisted": false, + "description": "#&^\u0000o󝨯.K%[(񇘄K􇞂l\u001b\u0010Q\u001e\u001fC< 24Q\u0004Wa&>(󕿪\u0006yl񧁠2" + }, + "id": "pool1gkgvf0ycea3sn8negtrysk4k2c9qysg8tzf4m5hyw4h4jwswha2" + }, + { + "metrics": { + "saturation": 1.168754160299379e-2, + "non_myopic_member_rewards": { + "quantity": 423162822243, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 8897049, + "unit": "block" + }, + "relative_stake": { + "quantity": 41.12, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1881-08-26T04:53:37.586294899477Z", + "epoch_number": 15967 + }, + "cost": { + "quantity": 180, + "unit": "lovelace" + }, + "margin": { + "quantity": 27.5, + "unit": "percent" + }, + "pledge": { + "quantity": 6, + "unit": "lovelace" + }, + "id": "pool13hdhwpx99v3seyu9y5knam22lag4at63ud2kmy0mnthxcd4ht3p" + }, + { + "metrics": { + "saturation": 1.0248916783221977, + "non_myopic_member_rewards": { + "quantity": 19028614470, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 20711155, + "unit": "block" + }, + "relative_stake": { + "quantity": 63.62, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1895-07-16T08:00:00Z", + "epoch_number": 8962 + }, + "cost": { + "quantity": 74, + "unit": "lovelace" + }, + "margin": { + "quantity": 92.49, + "unit": "percent" + }, + "pledge": { + "quantity": 98, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u001eCp'-Z𓃮\n}񺓿񿟌\u0008\u0008G󝋄\u0004񜆬\u001e\u0013񅻏4𖮞&󒵄󯖔󑗪|_?\"򜨂_$\u0018󚃔)򢪔񏥡r\u0000𒿯𨜮'􃩣(F񌞊W1w\u000b{:񎣖󖤀2\u000c\u000f𘶾@", + "name": "\u0014M\u0010WZc\u0010c񨨛򲸾$􉼮XX񌏴*𰸛T|\u0014ⓒe򻹮\u0007chU\u0018𬪶\u001bjS\u0000YO^<3Q\u0004.FS\u000f񢆭󹾝,\u001bd\u0001B󡬵1z\u0012𼿐\n7" + }, + "id": "pool1u9jpf8t8sys0cmcltscpsvcyxluv3hv74wyg0uurmkhsuv0t6zl" + }, + { + "metrics": { + "saturation": 2.9298916942746485, + "non_myopic_member_rewards": { + "quantity": 171785894848, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 22275742, + "unit": "block" + }, + "relative_stake": { + "quantity": 81.32, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-05-16T06:07:45Z", + "epoch_number": 29298 + }, + "cost": { + "quantity": 3, + "unit": "lovelace" + }, + "margin": { + "quantity": 38.44, + "unit": "percent" + }, + "pledge": { + "quantity": 198, + "unit": "lovelace" + }, + "metadata": { + "homepage": ">鹫򇎐\u000c\u0010𖼖h񒅜\\bO\u000e\\*\u001a\u0012󔭫7\u0006\u001fd\u001ev5􈦷7A\u001d򿛘N~m)O񀎀\u0010\u001aL\u0018x󷠺񖣓R(Y󗴋\u000fT󋫧󂉀iA3A󲭏ZD񼄵󌼘", + "name": "4𒄭`", + "ticker": "􅈵J􃽞K.", + "delisted": false, + "description": "~0򧅩\np\u000c\u0017\u0013& \u0008\u0012}\u0017s\u0000[N\u001a-\u0006|\u0015\u001d񏱣\u001d󓏏\u001c8\u0015h>򧿊򥔗!P2\u0008P\u000c9\u0003 􍀦~񜥆f%y󳝡I򊦹 {񥳞\u0016r􀈟\\\u0006I꽢򪋤)1O񛜃񖛑\u0002򢡮򇱉=0𢨨/\u0010>𾛏𾫤n[l\u001f𶓗\u0006𧬜􅧈𸊑Dn{!󆒖\u0010\u0005`\u0005󾀒𲂃n𹨡[\u0011񾭢\u0006=x?󩄫\u001aQ;󌉕K񧟥j񢮩񈉑V$\u0012\u0007\u0018a\u0017AOVCF󡦫o񝯴𴼄\u0011􏄸\u0015]\u001eU=X=\t\u0011-󡪇\u001f𛥐󇈃A67\u0002\u001emp 5񬏥\u00048$􌐏Y|񯗑'񢈓?4\u0000 c𚱟y\u0011?L󶍼" + }, + "id": "pool1as7l9gdshmrq2pva7hfynd0f79ue5jzmjf6jzwqrjcf5xuuesgz" + }, + { + "metrics": { + "saturation": 4.960019812177834, + "non_myopic_member_rewards": { + "quantity": 923306256389, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9880895, + "unit": "block" + }, + "relative_stake": { + "quantity": 0.21, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1904-06-28T18:15:38Z", + "epoch_number": 19218 + }, + "cost": { + "quantity": 237, + "unit": "lovelace" + }, + "margin": { + "quantity": 13.24, + "unit": "percent" + }, + "pledge": { + "quantity": 38, + "unit": "lovelace" + }, + "metadata": { + "homepage": "🼫򻨽𵞐'^\u001d6\u000f\u0019񖿎(󿭋0GUb󛏅镚\u0005l\u0000h\u0019,\t򵼣򏫠\u0016^󡃱򏧸1𼎰\u00120򌵷񟜗\u0019+gA$b\"\u0019x\u0004\u000eb񄀽r\u0005򩡷:O\u0017󷩫F(Y~󯘖\\W񹟎󮥹;z\u0004K岓(6>4$򻱳󥀋\u0011򾯩m#\u001aG򭅈􉥡F\u0013l񧏢,\u000e", + "name": "򤖋_\u0008򯓣񌷽6G󕄆]񪁏m𞸘󿉏q󌚡0Q򠑧/\u0001Ꮆfv\"{F;}\u0001", + "ticker": "-󢣥\u001ao", + "delisted": false, + "description": "=𩘊T󉶐\"󐛦򀷬\u001e𧈝񩅛x󍪺\u001b𡟡|񌔗Wk\u0017lDc[+;󐡝?񁰓򆯲󘢼򎮲\u0018lC𕹜pCFujC:R&󓴈)\u0017z񩩅8@}񩶥\u001a򣷘Tg1U񠻒@`񃪃\u0019S^\u000c\u0006P]\u001c{K=𘪓D<\u0019@\u0014\u00018\u0003\u0011%r\u0003񼠧T\nm\u0011#\\V>Z8k󳞓(񯟬򤻵(6𒿲\u0018%\u0007\u001fzT2򺫦\u0001\u0002M\u0018H򳣵XZ񹚡靾W5R\u0008H񶍫\"s^FgP󘧬򄣵򄀃\u000f񂈨󁯜\u0019󘙃8ඬ󷽚\u001b\u0014<6qX󃴡󪐎#򱙜𫅈Os\u0002󴝆𜁞a򈙳\u001c򧾖vDu\u0016h󌛭}u\u001dP*Y=򻄙󻘭󅔲NdJZ𩣗UEeij^񒺗u\u0004@\u0006􃦮8\u0016#.󥺧H`F򶮳򕪹k󰇗\u00070L򡷃5$PN\\0򠡧𥪔^" + }, + "id": "pool1ue4uhdg7sne3vjd6vxvjp4v09y993kcmfujyv3hdk56kzsav3ea" + } + ], + "last_gc": "1907-04-06T06:46:39.62955430318Z" + }, + { + "pools": [ + { + "metrics": { + "saturation": 0.21170493503846866, + "non_myopic_member_rewards": { + "quantity": 483009317390, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5806, + "unit": "block" + }, + "relative_stake": { + "quantity": 0.12, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1859-03-21T01:00:00Z", + "epoch_number": 15606 + }, + "cost": { + "quantity": 243, + "unit": "lovelace" + }, + "margin": { + "quantity": 34.36, + "unit": "percent" + }, + "pledge": { + "quantity": 41, + "unit": "lovelace" + }, + "id": "pool1pcqtw5yctaqtwgeqlp6wj0pfn2znzy4mx0kayzuj0xjj7u22kt6" + }, + { + "metrics": { + "saturation": 4.053647938608113, + "non_myopic_member_rewards": { + "quantity": 38403517584, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 5949770, + "unit": "block" + }, + "relative_stake": { + "quantity": 93.8, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1899-04-14T11:44:36Z", + "epoch_number": 23573 + }, + "cost": { + "quantity": 250, + "unit": "lovelace" + }, + "margin": { + "quantity": 60.12, + "unit": "percent" + }, + "pledge": { + "quantity": 114, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\t\u0004Q!t򨧁񀃆\u0003W\u001e@.D`\u0008񱫯,񜋓6y\u0000+\u001a򈧋b񤶃@\u001a\u0004LCh񟂍=Nlr6fY𞞊󁗓#󁩬]𭤣𪅟%𽰭[~\u0019p\n\u001e\u0006&Y󌆗{𿨖Y𭫦H+nrk\u000b\u000ewi\u000c\u0015\u0004񜨆:򨱬\u001f", + "name": "Mm%𽷡𼣍\u001d\u0006kHH\u0006\u0002", + "ticker": "1R[\u0001b", + "delisted": false, + "description": "\u001a1\u001f#\u000e>\u001cG3i񻕬<\u001eD󺃯\n" + }, + "id": "pool1lm2dpnmkp4qt27t32xx9ep0cu6rwlc027f3elqm7jdwncqx4ukg" + }, + { + "metrics": { + "saturation": 3.5980255006786264, + "non_myopic_member_rewards": { + "quantity": 816342786332, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 3346703, + "unit": "block" + }, + "relative_stake": { + "quantity": 88.53, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1874-05-22T22:43:30Z", + "epoch_number": 9231 + }, + "cost": { + "quantity": 203, + "unit": "lovelace" + }, + "margin": { + "quantity": 26.7, + "unit": "percent" + }, + "pledge": { + "quantity": 48, + "unit": "lovelace" + }, + "id": "pool1a97awnqwqe855c8uuk4mqh3t8tckm7w2a9hpdz8y0qteys6k277" + }, + { + "metrics": { + "saturation": 3.807864815181308, + "non_myopic_member_rewards": { + "quantity": 797452431828, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 11958811, + "unit": "block" + }, + "relative_stake": { + "quantity": 16.32, + "unit": "percent" + } + }, + "cost": { + "quantity": 1, + "unit": "lovelace" + }, + "margin": { + "quantity": 88.98, + "unit": "percent" + }, + "pledge": { + "quantity": 148, + "unit": "lovelace" + }, + "id": "pool1tenzz0eapkpswj56qcn6m90xjh0m7lrx3kl4dxx69qeyzds2veh" + }, + { + "metrics": { + "saturation": 1.395980152312779, + "non_myopic_member_rewards": { + "quantity": 267691797963, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 6907308, + "unit": "block" + }, + "relative_stake": { + "quantity": 91.34, + "unit": "percent" + } + }, + "cost": { + "quantity": 194, + "unit": "lovelace" + }, + "margin": { + "quantity": 85.64, + "unit": "percent" + }, + "pledge": { + "quantity": 18, + "unit": "lovelace" + }, + "metadata": { + "homepage": "wXP𹀜\u00140PJ򂀏^.򷪜󃺒\u0011u\n~\\;{󶻫󉁼^𘵖&\u001dU𢙏Q췛/C񰮮/\u0005񓵕cQs\u0003\u001b\u0016t\u00196]-󽵼PV𾤉N \u000c򆒋򙓙n񵸓+\u0008WL񒡄^&𻭍9A\u000f\u000f", + "name": "􂋲$󊤱wM+U𛮖\u0002\u00080e󀛫uJ񗉕󈷢/\"\u000b@\u0007{", + "ticker": "\u0017g񟀸", + "delisted": false, + "description": "}􏄅d\"&OR*>A}񝦓Epk}V@5񌱸I蓑\u0012\u000f񎼬LP򄸵򃮬p\u000f,kM񿇮\u000c󳗜F\u001a񱅍W5󈞅\u0014H򠏇򩜁v𳹑$󴉶U𢼙񒡤 󤘛_I𲊰򺞂(󥫪@\n򷼴󑲋\u001b񙉙G򶛯]kGf'\u0014\u0019U@\u0007&򣳒򕿐C񶁡\u0001K\u0006\u0007򅉱\u001b'\u000f򃎬򎌚񯬹$󮟢񀘛\u000e~|&񐠈[򻇝<,󺄴\n?pC󵫿`$\u0013󮅽B򷙌򛬘)\u0016򐦢8M9\u0017\u001e򻻫OrH$򴈑\u0017%󺌠/d8D" + }, + "id": "pool1c4jl4c3xukljpg9sggwlvv3x094lccctuwjplw5vrkkmj7kup0d" + }, + { + "metrics": { + "saturation": 4.597911444564239, + "non_myopic_member_rewards": { + "quantity": 110921098795, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12243490, + "unit": "block" + }, + "relative_stake": { + "quantity": 13.09, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1864-10-23T12:09:36.323580673465Z", + "epoch_number": 4717 + }, + "cost": { + "quantity": 78, + "unit": "lovelace" + }, + "margin": { + "quantity": 7.87, + "unit": "percent" + }, + "pledge": { + "quantity": 175, + "unit": "lovelace" + }, + "id": "pool10g2ljrhm0al0mmjfqxq8xx2xyjlcdplmawwgvwh2p7f0jwwmh8z" + }, + { + "metrics": { + "saturation": 4.737961294458347, + "non_myopic_member_rewards": { + "quantity": 263349192248, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 10216459, + "unit": "block" + }, + "relative_stake": { + "quantity": 74.2, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-06-07T23:20:35Z", + "epoch_number": 9039 + }, + "cost": { + "quantity": 35, + "unit": "lovelace" + }, + "margin": { + "quantity": 81.31, + "unit": "percent" + }, + "pledge": { + "quantity": 200, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򌞕\u0017>DOPwgBK񂈎򚡮>Pg햷x\u0010񸹣\u0004(\u0014󜭝󅡉򗛹,+\u000f񪢣|hm\"󠥉񸔘󛐑3hd", + "name": "ARo󆱗\u0017\u0010&n B󳇘򮝱\t%\u0003", + "ticker": "\u0011wa", + "delisted": false, + "description": "X*𘐗\"gRfh\u0006C\u0011i𶀮t\t$w󒏬e\u0004,\u0005򂽧񵜋񼏵𮕭1|\u0000\u001f󺓛8F\u0014CvbL7g/\r򋨎E񜦿q\u0008눖R-a\u0005\u0007񈜿\u0006" + }, + "id": "pool1ecg35s7c36s0mhk3t52w3ke9mxqvtp3u59u9z5gesyn7wqq8d3s" + }, + { + "metrics": { + "saturation": 0.4255153739903095, + "non_myopic_member_rewards": { + "quantity": 241451149013, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2007488, + "unit": "block" + }, + "relative_stake": { + "quantity": 28.06, + "unit": "percent" + } + }, + "cost": { + "quantity": 97, + "unit": "lovelace" + }, + "margin": { + "quantity": 49.07, + "unit": "percent" + }, + "pledge": { + "quantity": 121, + "unit": "lovelace" + }, + "id": "pool1m24k5wydjg2prfympd99n5mwmym3u7e3nnkzfe4ne3kwua860v6" + }, + { + "metrics": { + "saturation": 0.16557590572963576, + "non_myopic_member_rewards": { + "quantity": 6117928114, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 320530, + "unit": "block" + }, + "relative_stake": { + "quantity": 63.87, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1898-04-10T01:00:00Z", + "epoch_number": 6925 + }, + "cost": { + "quantity": 250, + "unit": "lovelace" + }, + "margin": { + "quantity": 4.54, + "unit": "percent" + }, + "pledge": { + "quantity": 104, + "unit": "lovelace" + }, + "metadata": { + "homepage": "&:\u001c", + "name": "&򀘣j\u0010,-", + "ticker": "񺸾GL", + "delisted": false + }, + "id": "pool1fgqaguxvcku3rx5lc2xzjjphu4zqye4v3n6pad8t5xtfxqt2ve6" + }, + { + "metrics": { + "saturation": 6.41856093865012e-2, + "non_myopic_member_rewards": { + "quantity": 948371021745, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 21465554, + "unit": "block" + }, + "relative_stake": { + "quantity": 8.46, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1880-07-17T21:52:49.409636090741Z", + "epoch_number": 8667 + }, + "cost": { + "quantity": 247, + "unit": "lovelace" + }, + "margin": { + "quantity": 20.79, + "unit": "percent" + }, + "pledge": { + "quantity": 136, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u001a\u001a𚰎7PpT\u0007\u0011񸠞\u0008󕻨mR{󦑵*\u000e󇧦\u0000&=\u0010%\u000c:_qf r[f\u000e\u001aY\r8G4B񼦶񡍄\u0008E3@PT\u0008jE\u0004\tA\u000c󐸖򚻤]zhh ^)zY#\u0000񜿁i", + "name": "\u001f𸎤i\u0007WCJ񪩋\u001a\u0002\u00032􇇅pY$ t", + "ticker": "񪾨)?", + "delisted": false, + "description": "󘌐9񮟉\u0003C_CH򿒸񠣑|\r򪈆I\u0002\u0018*L򛼿*\u0001񫱸U\u000f?-\u0001򲻜\"I3\u0007a\u0017󐭈z鷆󏉈\u0006u򹴫$o^3TJ𭿈pTW[7T5񕕭X\u001e(􈅈􉓤q)G\u0007Y󟲕|mfEBzet񗯽r\t5򦒌u{\u0013򇅞𠱫\u0002V\u001cxZ@w\u0019\u000c򌍔\u0016:[󪳷\\Z񮊞.􉁁pM󿷕#򜢟g\r򊮷b򹠚𛤽󜹤Y򻫹+򕷬\u0017𺦓􋋉u򅈓\u0010N񡕟\u0005񏁨$\u001e\u0004񡦥󤔨𔌟Uz򆽻o?-񸁭򖯗\u000cA\u0011t\u0011򞹊\u0001򝗇g\n]d󬐪@򋒦8\u0019:\u0015xX\u0018#\u0008SpY-\u0018\u00110R񏣓l\u0017󪨣󌔛\u0013򥃘򑖲\u000b\u001c󘀾򞺺\u0000;󬽜.k\u0010\u001f󥬶]\u0000񮬀\u0002A󮤼1𨻓.\u001c3J􆕰f\u0000J\"\t񥍭񷡳9~񑾆dK􆟈10Hi=\u0013\u0018o\u0001\u001e񥚎𤙙\u0007~\u000fk{\u0006XBW󙞳\u0006\u001d?񟩆񈹁MSz\u0006󅏂A𦚈4򠜏Q򄚔F\u0001\u001fyx񻇊YS<+@䠖Q" + }, + "id": "pool1eazuxzungzveakegmavulqmdwxsy2g0dtzsmdhz692eexnzw2je" + }, + { + "metrics": { + "saturation": 1.3203251434933228, + "non_myopic_member_rewards": { + "quantity": 439731462941, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 9248324, + "unit": "block" + }, + "relative_stake": { + "quantity": 96.99, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1888-06-30T06:55:41Z", + "epoch_number": 17711 + }, + "cost": { + "quantity": 96, + "unit": "lovelace" + }, + "margin": { + "quantity": 62.91, + "unit": "percent" + }, + "pledge": { + "quantity": 149, + "unit": "lovelace" + }, + "id": "pool1mp6c9xaaed5pg3a7cc2c0sk3hqjzjp02dayespas6406chrqee5" + }, + { + "metrics": { + "saturation": 1.0873359781032348, + "non_myopic_member_rewards": { + "quantity": 820188729005, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 17778975, + "unit": "block" + }, + "relative_stake": { + "quantity": 80.85, + "unit": "percent" + } + }, + "cost": { + "quantity": 114, + "unit": "lovelace" + }, + "margin": { + "quantity": 63.2, + "unit": "percent" + }, + "pledge": { + "quantity": 42, + "unit": "lovelace" + }, + "metadata": { + "homepage": "\u001eZ𾶞)b'G8󏩍QL𽊠\u0004򩹦\u000ff򱁧󬱻J%\nl5\rG񩲾I", + "name": "\u0018*~\u001b\u0005\u0002񃬎eR\u0005oL[򄻜_\u001c\nmG>\u0000򾕵D\u00059X@Cqg", + "ticker": "񁼯c~", + "delisted": false, + "description": "g򯢐}W𕼂\u001b@𬡧Hdf\u0001Q\u0010p򞠃\u00189󳢋y񽧤𽬺>$󙃱񆇋\u0000}H%^󥶬𾮽W\n\u00141\u000f\u0003񋋻\u0012p\u00128򿥤E/􇿦5󾼾VAI󦊹󱎯 \u0002𯚎5\u001e1~򓘷-󄦱󂨋\\)\u0001\u000c􅰏N\u0001񎂸u󼔐􀻴9\u0006z\u001cF>N󁏦*9򯐑򄂾󚟛󼰳\u0001񽻴`d3\u0004\u000cym񽲣J󬐛\u000b(^\u000c|V[\u001c@Z􆴹h󀶽Q1E򖁌𴠈\u001f\u0008-\u0006򣎮󦫰O񛪂9KJ{\u0017uBej\u0012\u0019\u0018񫨟-opp񡄝*񶺴\u000e4򛑹\u001e\u0006M)򮾅L\u0005D\u000c4n-f􃈭󓗌񽈸r\u0006Kz󭨌0QNTlsY~f\u0001},]@湼L\u0014򼠶㶬N\u0016rT;SM\u0003\u001d񩚺𯞎\u001b\u000b\u0014)&󰗎\u0013𜕃/A󧸙l\u001c(,򫂳}򵣧򵻟O9򮌻J\u0013\u000buQ򝸕򲉔>(\u0012\u0005\u001d2P񈎖𼜓I#j\r𧺤3s5\u0008" + }, + "id": "pool1lmfmfegamad4hq9wcrke8fxhjuw5rrxy7krrusajdf8ykmfvtuc" + }, + { + "metrics": { + "saturation": 2.114577782491012, + "non_myopic_member_rewards": { + "quantity": 201305786414, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 19612315, + "unit": "block" + }, + "relative_stake": { + "quantity": 97.78, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1898-02-10T16:00:00Z", + "epoch_number": 7715 + }, + "cost": { + "quantity": 90, + "unit": "lovelace" + }, + "margin": { + "quantity": 41.05, + "unit": "percent" + }, + "pledge": { + "quantity": 234, + "unit": "lovelace" + }, + "metadata": { + "homepage": "𬓦D\t5🛑򵞮.vAf\u0018K\u0016x\u0012S򖇀.Z𼐃񚙵󆔎$񲲛L%7-I4w񸢋𨬸\u000f\u0010\u0001`򿡜\u0013򡅜G󱋬Qt%󡃠h S󂗓1[!W󸏠_^u󼃥\u000c񕋈\u001d^BO fwh\u0011\u001b\u0011\u001c$򘔻\u0000k$/N򆵽񈯤󋲸<&d)U\u0000-\u0013QO", + "name": "A%7\u0010V@\u0002Wq򾽷R񽒙𴙵N#RnH򉫸򺧔$񎩨&\u0013\u0019MSRueAh\u0017B", + "ticker": "\u0002!/", + "delisted": false, + "description": "􎍴o>\t,\u0004\u000f񉇽\u001b󹬍򢿜" + }, + "id": "pool145fv36cy4qaec256dthclc2sn0jxpcdn6r6h3l94z4ackp7x07d" + }, + { + "metrics": { + "saturation": 3.28151555243486, + "non_myopic_member_rewards": { + "quantity": 820454618566, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 12510793, + "unit": "block" + }, + "relative_stake": { + "quantity": 8.49, + "unit": "percent" + } + }, + "cost": { + "quantity": 176, + "unit": "lovelace" + }, + "margin": { + "quantity": 22.1, + "unit": "percent" + }, + "pledge": { + "quantity": 210, + "unit": "lovelace" + }, + "metadata": { + "homepage": "􍑾},c󙊂2\u001c\u000c\\\u0018Z)j𹪤w\u001a$򂜰󸭙򮈆\"Y󥩵X?񁸣!x򮤣l0*b>G\u000el[0L\u000e󛬇񞄣󓽔N\u0019v𩦜`8&\u001c=9򀖊>L󟎇薋h?򥌲\u0019G?񐎌e򎳬ueJ𹂇񑃃Q󈮍\u0019鵭\r򢢽\u0010z񧽮;r\"dpmC󔪩\u001b\u000e+HX񩻭A", + "name": "n;>\u0015򝩽g\u0004b󩻪񥍚n!𯃴R^ci𔊑󄎢P/\u001fa", + "ticker": "4/򡚵H:", + "delisted": false, + "description": "1rC󺪾Iy񰅒Q𖼟'y4f򀂵2w\u00049u5/e򊸠9W\u001cU󁽣\t񓾳wufr񯴊\u0004oy񑩦\u0014\u001d.򽌓W󜠏K]O_\u001f\rB񂦿\u0005e􇫴E\u0007D\u0016\u0011/\u000eN>W𢻠a󕄘Vw󵊖P\u0011%\u001d񠪳;#70󟡓󸄓$&𧈈\u0005򲒞r\u0015+\u0016󧂕.11\u0002V\\\u0018򾮬u􎲣mKSs\u0008𜃠P񋽿U6 (󁟘Sj7\tkA\u000e_:t𝕰񵜠\u001c󋋲𞲠\u0012;񗓿󛱡5\u001c?YL$\u0005񐭬\r\u0008dq^󚼢\r򆩬2B󊿾,p,\nᶯ\u0004}`⯕oWir򗑼󑞝n\u0016󶯠A򘎿i\u001dd}񗕢\u0005~;\u0016\u0017f\u001fN\u0002]=5,9+\u0015*򓲅񣲨񫅌򥶭f" + }, + "id": "pool10watuz44a36fgup73p3dm7us7cp9q7449pfmc0k7fjcdqem2acd" + }, + { + "metrics": { + "saturation": 0.6714721531990558, + "non_myopic_member_rewards": { + "quantity": 236101345869, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 7454644, + "unit": "block" + }, + "relative_stake": { + "quantity": 75.16, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1888-01-18T16:05:22Z", + "epoch_number": 2541 + }, + "cost": { + "quantity": 41, + "unit": "lovelace" + }, + "margin": { + "quantity": 45.59, + "unit": "percent" + }, + "pledge": { + "quantity": 169, + "unit": "lovelace" + }, + "metadata": { + "homepage": "򌍗e@󸆌ﵦ8U𓛛u\rF\u0005u򱼼􇍩󿂇𲋍aX󩺽\u0005p󢨅iy$}C3\u0019򮽉7'򣉐H􋆕s/򨉛񰮉V泰:򖙹$9\u0002\u0001򯪳\u001c񭀗8@.O񿖏g\u0016FA𗨋񘅽", + "name": "\u000e򜾺Y\u0001򋸪q\u0004p?3񏤽H󯐸T\u001fr񶷕򥣟\u0018񰆒k񤞉򝕋&i\u0019v񢑮䞰f_𹟬\"f", + "ticker": "Q\u001e𻏗G", + "delisted": false, + "description": "\u0001K𥼢t+\u0014񰉖ZLy\u0019I򖫴B\u0012\u00111񁼏\u000c\u0003Nvt\u0010$a򸵛*(<򒁻𰶶}\u001d񹤨@𪇓S1HSu,'\u001b[~\u0011h\u0000\u000e-^\u0019%p𳛚gy񈌝\u0008'󙉁cp𞖣𛄘B\u001fRP񞫽qpM(R 𧎾򺓎񌘛y󲚝文a\u0018}f6.bY󘩆#\u001e􃦧(+~f\u001c|l򞼩\u0018avt%R\u001aE񋈑樂\u001c򄚀PwG򶉁uP|@򘔉'X񉪧\u001a\u000c񢠵\\d𸶃\u0005Z)+\u0014񒦡\u000f\u0017\u0010pZ\u000f񳕑󭺺[uMw\ni\u0014`U񧝥%UP񰾧R]򆲎x\t=񎚹񼳥\u000fS\u0006\u0007򲰸z\u0017wl\u000e𩜡4򝴻4񣌹8^4[\u0018򡺤󁊡W[2\u0019" + }, + "id": "pool1a4jrydcajxkgzadrylvxxxeymk7tzxcf8hs0ykdc073lzgv26ud" + }, + { + "metrics": { + "saturation": 0.14368273388363662, + "non_myopic_member_rewards": { + "quantity": 684760344120, + "unit": "lovelace" + }, + "produced_blocks": { + "quantity": 2660262, + "unit": "block" + }, + "relative_stake": { + "quantity": 47.92, + "unit": "percent" + } + }, + "retirement": { + "epoch_start_time": "1903-11-03T06:01:10.041212200311Z", + "epoch_number": 27255 + }, + "cost": { + "quantity": 75, + "unit": "lovelace" + }, + "margin": { + "quantity": 24.54, + "unit": "percent" + }, + "pledge": { + "quantity": 207, + "unit": "lovelace" + }, + "metadata": { + "homepage": "􉛢}%\u0018\u0014\u000c:q", + "name": "+<\u001bb񖑑Ha󗤨\u000b\u0004񶞱", + "ticker": "\u0012\u001fvu", + "delisted": false, + "description": "\\S񉢍L", - "name": "\u0008𾦶\u0004&~-󫡲\u0014@󙖯i𯩁R,񾔶|#𸴟>C\u000f", - "ticker": "`\u0007\u001d", - "description": "^W'k񬈅F*k&P!C*\u0008=\u0016}𨿋Z 򛫻񲦚aY)\u0003D\u0000W𱐬󁎦񋟙t;\u000c" + "homepage": "h;𑝐񴧻x(\u0005I\u001awh\u000cAVAQr\u001eVLsYViHi\"?c\u0017\u0005񘇙E񟒃/\u001d\u0014򹘵𗟅򗁛C򒹇\u0005𢽸𺝖􀋟", + "name": "<\u001c􈽎𘘃p\u001d\u0012>{S~!ij򑣐aa\u0018\u000cQ4\u0010xz󑑯\u0004", + "ticker": "o'󥩪", + "delisted": false, + "description": "P񽣽P\u000fu_-XDj{􀵐]OQ+" }, - "id": "pool1j4p8d27crkjde00p4l9v5f95hftm23x2yylllp9lzg72w6p4ecm" + "id": "pool1qx33vm629939gqjppuda0au9ulcc338jfrsueqmqg39pwxjcksu" }, { "metrics": { - "saturation": 4.206923248389226, + "saturation": 4.580390433718588, "non_myopic_member_rewards": { - "quantity": 939832251301, + "quantity": 294702726868, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22311798, + "quantity": 16493178, "unit": "block" }, "relative_stake": { - "quantity": 86.03, + "quantity": 38.01, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1885-01-28T19:23:12.506992765083Z", - "epoch_number": 19632 - }, "cost": { - "quantity": 195, + "quantity": 142, "unit": "lovelace" }, "margin": { - "quantity": 25.17, + "quantity": 83.39, "unit": "percent" }, "pledge": { - "quantity": 144, + "quantity": 92, "unit": "lovelace" }, - "metadata": { - "homepage": "𵍓\u0006\u001d򡗓񍹭", - "name": "\u0011&񐔒񕜳\u001a𻧩񣕣Q񙡺󞖋򝷙W񆫽:\u001c򥷪4#", - "ticker": "󵬘N;", - "description": "P&u~y򎛊\u0011qDg\u0003\u000e\u0006D^r򃚦\u000f򔇰h񷩙񍓧񓫢:>k񼝛򡜣!k\u000c\u0008x\rs3􃞧d\u0001xvA,W`󩰫󧀿\u001br򓚁񂥳g{\u001cW\u0005\u0002򄗭񄢩@\u001fLEX哠N0 #\u0011\u00082\r#D򘵻򪬏\u0008]򞳭z񞥃񰦑c󗎟򕗀'\u0013\u001b򔌏%8]򱐄6N\n\u0018n#j񜉅:kxX\u0010@yDq\u0011󂻎g򾾡c\u00004򗙧𾤢y󛷥K\\?Ik^Wf^𝽠_򝗆kpuaCz\u001a󖀃\u0016O񁕓9\u000c󮩹\u000bIQ\u0006P\r>f\u00179\u0015!/~u򁽟{)#\u001a\u0011W󧔾?\u00048d&f𚉐(򻙔l'Z\u0015򏼘i[R&𫟾" - }, - "id": "pool1y4zccfz0vrvmt8e96gfn5u5pd0zln5fn2uup25fk8grfw4frwqh" + "id": "pool1e7v7898ug299x6nm99y3g9vyl528m7q6l8xze27adr7ev84p3jq" }, { "metrics": { - "saturation": 2.0262672273589573, + "saturation": 3.700596560521758, "non_myopic_member_rewards": { - "quantity": 688229616774, + "quantity": 993358119124, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11174627, + "quantity": 4400249, "unit": "block" }, "relative_stake": { - "quantity": 1.75, + "quantity": 69.26, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1908-07-23T01:18:41.264047239015Z", - "epoch_number": 14875 + "epoch_start_time": "1870-08-22T20:47:27.928086740337Z", + "epoch_number": 31486 }, "cost": { - "quantity": 175, + "quantity": 117, "unit": "lovelace" }, "margin": { - "quantity": 6.67, + "quantity": 42.68, "unit": "percent" }, "pledge": { - "quantity": 230, + "quantity": 138, "unit": "lovelace" }, "metadata": { - "homepage": " 𹙢'Y𴛤-󉡙\u0000\u0016\u0002wm񅨚PG򣁢󡿡Z􇵂\u000e񙄟\u0010jB󞭖􁄽y'$\u001f5񲒖𮡧\u0007^򎴁\u00009sy􏂦W􉑤LNfiQ󉜴%\\Rb\u0001!+򿋳\u001d\u0015l񔺑񃨍D\"𼢴篸\u001b)s\u0012>?", - "name": "\u001bL𘜚H\r񳭨\"mC~?U\u0002dvh${rr&)\u0017򦤘񖙢\n򥺪i\u0008\u0006􄓄]1_𹍘\u000b񁾊IfK\"󖈷𳫴򾝢", - "ticker": "=us󬟶򷬣", - "description": "~`]\u0017򂃱^\u001bIr\u0000,\u0005\u0013m򂋲/󱞉P\u0005\u0005\u0018\u0007jL" + "homepage": "\u0004򖤻\u001d", + "name": "2bd􉍑􄅒?F>\u001e𖧌򸔭䃕\\-C8o󼰲l#𥪪򪮖\u0003🐃miO𚿏-򗌿", + "ticker": "󧷕\u0007.", + "delisted": false }, - "id": "pool1wv5uzfqqrdrns4aprvh4ta8egwqavru05z77024k7h0p6dudkvd" + "id": "pool1x3rlrx2wzv9ps9kpfc3s8ulsyqh4kda8l4vw0nlgmeyzqhx0w50" }, { "metrics": { - "saturation": 2.118516160766028, + "saturation": 4.826729474948514, "non_myopic_member_rewards": { - "quantity": 870783207562, + "quantity": 8598527498, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4904922, + "quantity": 16774380, "unit": "block" }, "relative_stake": { - "quantity": 75.06, + "quantity": 63.72, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-04-06T02:37:17.892934980153Z", - "epoch_number": 32025 + "epoch_start_time": "1888-03-20T05:00:00Z", + "epoch_number": 21398 }, "cost": { - "quantity": 101, + "quantity": 153, "unit": "lovelace" }, "margin": { - "quantity": 2.07, + "quantity": 26.29, "unit": "percent" }, "pledge": { - "quantity": 69, + "quantity": 180, "unit": "lovelace" }, "metadata": { - "homepage": "\u001c\u0004q񿧫i\u0007G8𒆢<󋟰\u000c5M_\u001a.G)􅷋v\u0001򑽖nN񃤚}0񇫀^\u00129", - "name": "|𢾍񅳷񥦌𮣻􀌐A򛃹򘁒0(\u0014񽂲𗕂q\u0004񅶠.񺘠h\u001b\u000eq_.󘯝I񥣁ra\u0014󰘕/􁫥T[∭Q5'󸸕􂕫\n\u001c󋇤ZᎱ\u0018򖛧", - "ticker": "(\"f", - "description": "j?򈨆Z\u000c𓋽\u0005:󷘭\u00010E\u0005񱁸񍸖\nL*A𴢮\u001dW\u0006󾄓𛵫%(򩥿􍞀1񩔚x񍑀󈊲𽆜񸎙(\u0017\u0018(Tz1𣢆򆺦𐕗x\u000b򼼾]\u0001痑򭐌􂍲{Xv\u001a\u0002񁲗\u0003@m򱶗B񦝥򉧺J\u0006𭱽d?\u0011\u0000&󟭯0\u000ep", + "ticker": "D@>\u0012a", + "delisted": false, + "description": "򮾳󮙲E*𥜄񈯽-\u0005󂿴ࠝ񒊆\u001d9򭖜)\u0019\u000fC󘙕Fm-P󌤏{\u0018B^𕲺" }, - "id": "pool1ve8ysena2jsdqyxz6jevrzk3q9d7hagw7ayfmg46ldqcgxgj3sh" + "id": "pool1mma33h2f254q2ycqavrvnutr48p5u7xrwr34xtwdvfcrq8v05kt" }, { "metrics": { - "saturation": 0.20777293359932947, + "saturation": 0.9242812755871216, "non_myopic_member_rewards": { - "quantity": 262774299112, + "quantity": 240765855378, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11082948, + "quantity": 10240989, "unit": "block" }, "relative_stake": { - "quantity": 88.97, + "quantity": 14.39, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-09-13T20:06:19Z", - "epoch_number": 5035 + "epoch_start_time": "1877-02-03T03:48:06Z", + "epoch_number": 8039 }, "cost": { - "quantity": 251, + "quantity": 11, "unit": "lovelace" }, "margin": { - "quantity": 2.84, + "quantity": 80.59, "unit": "percent" }, "pledge": { - "quantity": 212, + "quantity": 207, "unit": "lovelace" }, - "metadata": { - "homepage": "\u001e򢉉O4r󕵦򬃑Z+G=󝨌򂏞IFR?pN", - "name": "\u0015\\\u0001\u000f$DE󛡬񑠅_񍓎~c8)\u001a\u0010-F<", - "ticker": "(M񔏺", - "description": "`\u0007𜖆\u001a9`􁌴8.𸧏C\u0000򚕌\"I򛡧𴶉\u0008\u001fg\u0005!\u0001\u000fz>(🯨\u001385򱋖701\u0003jW򏹞r󙠎z" - }, - "id": "pool1wr3kzh64ruwv3h8zmegr6qyr3kxpz5urqfzja2mj90zucd03jgu" + "id": "pool14jfyapt08wen5r8yegm8y90gqzlamdywdq75ap6yx8m02vtlkaa" }, { "metrics": { - "saturation": 4.875352324926411, + "saturation": 3.2279229048531204, "non_myopic_member_rewards": { - "quantity": 960257825132, + "quantity": 389227363757, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15032451, + "quantity": 7955869, "unit": "block" }, "relative_stake": { - "quantity": 79.66, + "quantity": 43.98, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1866-10-03T08:00:00Z", - "epoch_number": 6360 - }, "cost": { - "quantity": 242, + "quantity": 142, "unit": "lovelace" }, "margin": { - "quantity": 72.05, + "quantity": 57.06, "unit": "percent" }, "pledge": { - "quantity": 187, + "quantity": 88, "unit": "lovelace" }, "metadata": { - "homepage": "]9}}E򰨣#񊛈+@𺦵#%mR𝽹\u0014󫱝􅄧p򿨶𲑲\tCC\u0018[_4򾝽H󦿫k\u00037𖥿\t&\u0010&*F𛪀<${򉁡󢨌-\u0017󽯶󌜷򦫊񑺤򩅓򣯺򏑀|\u0005򚹶", - "name": "󸘗\u0019\u001f@&\u00018Q򟵄{񬙪񫻣)RIF!􃠛", - "ticker": "\u0011*yG", - "description": "fB[󳜲񀫴zE\r\u000fs\u0002\u001eW\"Ag>65񀒚ys\u001bY|Qj1\n/&/򢏿e\u0017𥩡񠩷:}L\u001bA\u0013򇌺󬖧\u0011񋘏T󻺽󭃊8򼑠m/S\u0012{|y&rS򟭠8#゗I{\u0001p񣘑򘏪hM6Z\u001dn\n\u00140\u001b𧲨\u000b-\u0008q􉟰 򞊮󑾤C䖛k_T=w򸛕񆠹\u001b󖏙B񖭀}I\u0019\u000b􂮔\u0003^[z\n񼕦e{􅧂󐈘\u001a񜏢vQ󧉯pf\u0000\u0005P󁛞4un1f\u0000񳠊񉼀u󇴔\u0004b\n;⑧", + "name": "򼀼TN򀮕伊񛷲\u001d򺰻v򙣆T@", + "ticker": "g}𧨕k\u0008", + "delisted": false, + "description": "Q󊱙򍝭\t򙥗W,\u000e\u000b6dVm3\tnZU2\u000c񿙃b\u0005*d󶧲񂞛\u001b\u0019:a\u001bJ򣧺󃬑?񏈽񟦲TZL^\u0016􅒓qkhl󜱢򚁀TK-\u0010X\u0015\u001a󸫭\u0010y񵨇\u000f+O񪿗U8,򋘯DN9W(ℐ*(!憳e\u0015󘮃\u0012,7\u001bb&{񞜤v,)\u001ag\u0010\u0014m=񡘽1;\u0015M򦽇~򸘲x𮱖\u0017󹁼)F󎕀9By+w򄱏AV$>\t\u001d\u0019Eh񼱉𫖔@e\u0019p)m.򨿬\u001cc\t򳅀K =\u0008\u0011>㙢򾖬\u001dSꆈ󻢪񇲈\u000bj񝋥𯞎\n𜍏\u0015\u001d0񊻜򔶏Vr8>y\u0003>󞢎E\u0003\u000fo/3@􁀆\u0019\u000b" }, - "id": "pool10pgzt8leq84y6ksmdzqg6v0gsn9rafj4ajq8vsfvpdv9cmcaedq" + "id": "pool1ddjrnstmh5rmaj7kscegyymus26xp0jw9nh7wvh4a3qdj0nts8p" }, { "metrics": { - "saturation": 4.950350959513691, + "saturation": 4.588159475695788, "non_myopic_member_rewards": { - "quantity": 966933924713, + "quantity": 992050800679, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8738216, + "quantity": 18995134, "unit": "block" }, "relative_stake": { - "quantity": 81.92, + "quantity": 13.14, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1869-09-21T07:18:52.720088847923Z", - "epoch_number": 31526 - }, "cost": { - "quantity": 230, + "quantity": 193, "unit": "lovelace" }, "margin": { - "quantity": 57.93, + "quantity": 35.75, "unit": "percent" }, "pledge": { - "quantity": 65, + "quantity": 43, "unit": "lovelace" }, "metadata": { - "homepage": "4񑉪2t?c\u000c'\"\u001c\u0015񨎴\u0013U[&i\"&E𵬺򐱺-mV-񥰶jH+󶒗0󉧢R\u0015`򢘩>y򑰓\")h\u001b񶧻\u0007d􁗱T\u00104^$\u0010\u001b<", - "name": "󔖿𹡴02", - "ticker": "\u0016x񋎰", - "description": "*񾞜⮚4\u0012U򋽈\u0015哊\u0011􅇎\u0015R:g\u0006+scB򅽻򍫈-\u0000~\u000e$𼼌񝀜,R0?2VwDSvh\u001e󡂖qO8C+H!󟠪'\"󠔑0bc.U񛆣𙠇Jp򃞫/!򱼟UD0󋒵F]l\u001b+\u001aKQ\n\u0007%C 򆪭_%Jf\u0000\u0013F8)\u0019nhK!򖉫S𾿆J*ldA􍾼a󨘯'_\u0008𽠫f񋺧oE򬷨󀡢*6\u0015<)E\u000b\u001es]^y񤚺\u001cp\u0013𥸿-Iy/" + "homepage": "S򹹋\u000e𠄊+\u001dEV(^􁧭pB}N񏎆{򄀢󵁾$𗑰򡜏2\u0018k𒃓\u0003騛1N\t\\dp87񬞴\u0008V:񄿥󞿯񳊆\u0000񪭣\u0011sA󒷝0\u0014\u0014K#h\u0010񤐽z𲿌DigrC񖁛\u0011V\t򺳤t8X)B󇘭Pz|􄓇񘢚\rs򉕬PLUr\u0014󞢽񝤓h򭻦𷙄73S", + "name": "T\u0002@\u0011", + "ticker": "V=oU񢜴", + "delisted": false, + "description": "\u0001\u0014\u00134@󂓠󨃌򮾅/_\u0014󀰜[4&\u001dv򤮏#򘗏j\u001f􈛸@\"`uK-@\u0019Z𘁭򿼌O礳\u001d\u0015@$󊆫򷜼om񼘆\r\rB񙘄]F񖙌7a\u001a򦃯񩽗2򃬳ygR6Sx7C/\u000c-q\u001e\u001aw󔊻🆾0CW\rAJ򹇭s\u0000\u0005vV秠T󓑞󤺣>\u0017&􏀕\u001f\u000csCYV가#2\u0012>𻺘񆫚Bu}p\u0015{CRIu鰷$h󼾱7l򢾶3uZ" }, - "id": "pool1fekspzgvpqfs3u6kklujpa7mjm0f5h62f4dqrt87g6xqqn57u8f" + "id": "pool13wlmcctalzdxynxjwfcwz0yv40lw5h2mlujxcezzdpukydd6cy3" }, { "metrics": { - "saturation": 1.2142612304199552, + "saturation": 1.3607388156541385, "non_myopic_member_rewards": { - "quantity": 508608277141, + "quantity": 860889854897, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4990020, + "quantity": 3219562, "unit": "block" }, "relative_stake": { - "quantity": 20.09, + "quantity": 68.67, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1891-12-19T02:56:44.132395228958Z", - "epoch_number": 29024 + "epoch_start_time": "1906-08-25T04:25:40.982111437968Z", + "epoch_number": 27528 }, "cost": { - "quantity": 238, + "quantity": 123, "unit": "lovelace" }, "margin": { - "quantity": 39.16, + "quantity": 60.89, "unit": "percent" }, "pledge": { - "quantity": 141, + "quantity": 239, "unit": "lovelace" }, "metadata": { - "homepage": "KP󢘢q򬏠󞳇򆀓\u0013\u000b𦷣񡛴935> 'oZ\u001dLb򱾟N\u001b𼒔tN/r󔕗𛅯\u0004* ", - "name": "\u0011~茭v𥅸򴛻:Z,zfAY\u00157\u001dR1kd\u0007\u000brn󱕋򦤒󶫪lk", - "ticker": "}\u0019B𴅞", - "description": "/\u0015xm󕄖I𧧖hz\u000c\u0012U\u0004\u0015󕆾^&r0\u001a򈜰pC\u000ehP򒉯L\u0000𪺇\n𾚆𷺍\u0017񦉈K焇wp" + "homepage": "\\񍟣29񍉞󾏧\u0018񡛅\u000cQ[\u0008\"d\\\u000e񹸾(]\u0019n􉽬񣷙*i+:\u0014~|(Kh\u001c󓬟8P𾧴{~\u001e𹻥󶰴򧵙9M􁤴'\u0002P򁒴𑽅Uk\u0012𞤣\u0003l\u001d<\u0002釸\u000f󟌸\u001d󨁇2;\u0014&\u0012񀗫󩲅󦗈x", + "name": ".~󈆙", + "ticker": "𣹠5x\u001cg", + "delisted": false, + "description": "Q򟛗񹣎~\nW\u0005y8񝋝\u0014~񭤯񻒾q\u0014bF>򻡾𕡾=\u001d\u0014x\u000e\u0011T񳈴\u0019(󁙁4򘤠_󨅳3{bQ\u001b񭷺G򟩌\u001f" + "homepage": "/򨑵8򙼰I򋮾Y(񥅊\u0014\u0003l/\"t\"F", + "name": "Y𛐸H7nr\u0003\u0003𔸋\u000ba\u001aX;{4s𓮃\u001f񅮁9򛭤\u000foI񁱎\u001evFF\u001c󿇮L@", + "ticker": "^-K4G", + "delisted": false, + "description": "X\r:r|#\u001a|񿾍󑵣9~􌨞mT\u0004%LAAgJ駘𙺪znC\u001atk󮔠Ae\u0010s/񺉧@󙤁n򘐊\u0016lM񜖎󟘤 񪖲򽋍\u0015ရ?\u001e\"󾩢n𵺒`3\u001e&rJxll򰐰?B+g󥨒\u0013=!󒥤RHS-Yt\u0003td񁭚򨫮z\u0007򛡆" - }, - "id": "pool1xeknyngmmezr042e6g8xyy9w05r6ecstjxlt8j7ts3p77slrate" + "id": "pool14aledff8tq62nxezf5ez3lpnpz463wch7ze7z59yqjr9v06geg6" } ] } \ No newline at end of file diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json b/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json index 054a0aee3f9..4ca3116eb03 100644 --- a/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json @@ -1,64 +1,72 @@ { - "seed": 5786763469590622506, + "seed": 6312921918417622385, "samples": [ { - "homepage": "J!n.q4\u0004(񾶹g򯋥\n򏚐񞪌e\r3񙢠r34s򛴩\u000c򾋃\u001e򯧎񬌏\u0017\t𘙉vl\u001c𓺺󶾛N|\u0006򱝝\u0012\u0013񂙢v_}pXp򡻹)ᩑ\u001e󋐑v\u0000j\u0018e;W\"KYu򩺮'", - "name": ")IRX𱁑󔈷isE󕷍}*#\u001dAힱ`", - "ticker": "|󟁈,\u001a󝔌", - "description": "B񭯣\u001c𘚁񶲡𛍂񵓏!񚗟񬅇𝘃\u0013qN=W}8\t+0F\u0012􌗰𘳿侕򦬳񨠌c񱱁\u0015_󒢷𔩢vPM񒤢G򉳝󬹶\u001b𔼡Hi񦇬e9\u001cL񲋜'\u001b0i88}|QeF󱘣%򑒪𙖇fb\u0004򅬭_4\u000f>;𫣂2-|󋇡\u000c^\u0004@r6}\u001a􂎂L\u0008k\u0019@3auH󕟊OW񎇖[􍰅!񚳺\u0004Qy9󦋈񟔚򦫷H4!K򲰫򙯊u3\u0019X_l􎆠w0􂂩轐󾗈\n񛆛􇔔^\u0003򨢵%<>6\u000b\u001dh󫩨#\u001fI\"r1&󷚾$O񸿢u:\u0000掚\u0002񽊥/Q~𮙁񛛩򀤲~񌿅\u0008K[\u0015\u0016" + "homepage": "\u0010C쀑/\u0019𯭃䭄򺰨󢽸󝶺𿽇𓀗E𹽴\u001c񰐱\u0011򥬛F\u001b<\u000b\u0007p>󠯗\r\u001d򮸂󖓣\\r\u0008,[\u0015\u0000\r\u001fu&\u0005,']\u0001", + "name": ":񿊐񆌫񙘃􊭭K񃟘𶁶)", + "ticker": "o\u000c..𰯥", + "delisted": false }, { - "homepage": "\u0019\u001c󊠢/Mv􅽹\u000bmr\rE[􈲵\u0008ief99󃣹\u001c\t2\u0016!?:\u001f{xU>_Gf槓򒧢6&u8񽢺E\u00088h񐵚9Ck=QYMG鬠Z+񑛺󷨉oTUc󞁃?򇧐󭬓r12v'󫯖M􄀃K/H6z񟤿\\n\u0013ge򿏔", - "name": "k\u001cyT񡹭񚹰_򓢄2\u0017Ym񵸇5H`\\AuT", - "ticker": "󹚜񭐱\u0014\u0017\u0016", - "description": "l\u0018FJ\u000b񖌫\u001c򇸅)򰁭&e&\u0010\u0016iL퇌壱3+\",\u001a'񺈶#9𯔍NWsBe`\t\u0003󁄩r" + "homepage": "\u0010&󰶅񕩱lh\u0016=\n󻢂􆒍\u0000\u001f\u000fP_𴮐YZ[z;𝐚,L\u0011n?򡰲\u001f󌱭:Vcf򵵶\u0011\u0010\u000b0pI󫐹O\u0001-\u0013m\u000e\r#G􄁐", + "name": "b4󕊁lIZ񀣢E", + "ticker": "I(Z", + "delisted": false, + "description": "񚝚.2=𙮨򛙨W\u0017C􎝿O" }, { - "homepage": "y\r\\:񶶣N\u000cyog\"񈺛+07zOd\u0008eN\u000b*e}8\u000eS򪈜N򣥌򅁂󮯐\u0013$\u0010\u000eXO\u0001򦿵Br_F\r𲝮\u0007#`󁞜\u001d\u0006󉹦\u0016򬧏z򣭮\u001b Cw\u0013Oꪜ\u000b`+񴘢f9f", - "name": "<\u0019?MD\u000bE", - "ticker": "󈬅4d", - "description": "!z^a񧁆\u0001R񥖿\u0000𾴽\u0011G\u0005􏺎\u0005-𱟿񶈚󓰓򭭚\u0018f2&򮰞?򯲂𜣹\u0014𓆇4bV.6򩹦SP;\u0004s𵟲, ?4󪆪򃦥i󚻺\r]󻿔g𠘒𷊰\u0010n􎜙𪏏i񄘷󽭦 \u000c\u001dd\u0001󼛴\u000frjW\u0018>\u0004𙢻\u001c(rjYyPYE~񸉊m𘙉H𼤔\u0014['28\u001c񞽵𿊵񤉰Ik&_𣊝\u000c𣵸\r\u000c񟏸𞡦񅜛񧭑IJ$񲽇U򽹀V򴳸򨘄L+𝦬3\u001a炇\u0017\\gH\u001dky?c2}5`I\u0008W񂕊bA𦕞i񀤸\u001bW0\u0012'8\u001a𺴜󼢶\u001bD򻎢I򀷒X񖝧񐠻*^;R\u001f򠊖\u00133Z\u0004V*l\u0003IVL𚨬󁁪?񁂙Ge];୷\u0000\"hd\u0008[񓊤􋢌4X]𕍨4YLf󜃳<#&\t\u00075򌇷\u0016\u00164H\u0017\u0005AxjwdH_𹠴𺝋\u0015򦍌P1h󏁽+W\rQ" + "homepage": "h򋧲/!U@d+!\u00152𔤲[T>\u00119񅄟u৓\u000fRN\u0011mU\u0011򂵄YZO\u001f𵨣ᗡ󖗝\u000fW󙘵^", + "name": "򸫖\u0007@zR8W,n@t", + "ticker": "񟳷\td3r", + "delisted": false }, { - "homepage": "\u001aঃTd\u0005󺟛󱜷񐅭򘁖򗢶󊴽PZ[", - "name": "󠐷Mh@𸏝{4\u001a%\u001bi\u001c񓁙", - "ticker": "𳀟񶗣􂈃" + "homepage": "󃜝\u0008򕥘\u0010!𻡽m򱰮up󯦆0򔁩N򜣅p", + "name": "@P򄢶G&", + "ticker": "@xY\u0001}", + "delisted": false, + "description": "Z\u001f\r1\u001f\u000e\u0019d9CfL\u000c\u001b\u001b~\u0015f\u0005p~J\u000f\u001d󨥞}\u0019s򡳁|mj𿱒򲺸񰿦9󍗃\u0010񠛔_*|񬛾Cv,B\u0001ඌ𵌡PgjxDOR,U򍉅\u0017\u001c倻񷓂J\u001eh\u001a0wXJGMI\t\"Fg򗓈-\t%rKA򚑂񉲩7O <}Sq𸓇'5T󰲒F8a)\u0017D\u0008𨣘O񰨽E𐷨;\u001579󩈂m\u0002򆬳|2\u0005Dq𥩱U󋬢񢬝󡞿h񗯂󔻇T󲋻>N򳶍Tc\u0015C񇞂BG򱽌Q" }, { - "homepage": "6󁰀#b𞉂<\u000c򵠴\u000cd-𭙹󺆾󏳾m)Z𸪲Y󑌿2\u0000񝘏m򊼔򷾜󁺔\u0018c\u0007\u0018i􎝳\u001f򂵲.򣨕/4\u0004\u0005.M\u0007򍞯RgSm󾿷!\u0019\u000b𗖁\u0005\u001c񍀱R񁻫%𼦸񍧙n+򐸛mQ>񕹫\u001cq", - "name": "\u0012N*H+\u00166D󬭦o=\u0012_𠘏𫘼𝺋R򅳯󠐆V󤿝\u000b6k=^񲵠RO*<\r'񭵷3P5hkH򺌂c򆾓\u001b\u001d*l𫏜", - "ticker": "[oi", - "description": "9\r])a\t𠓏m\u0016 Z\u0002hY36jo*+\u001b\nY8I\u0015V\u0019𦔘V\u0014y>񕝤슚I|u\u001dU<󓕋\u001a񿙜񞨵~>$򓸃&\u0001\u001dke🡥E 񝄢񕸑xu𧱙`򤺞\u0013G\u000ey򽌞F\u0017_8>\u001e:x􇹤,\u000ch\tG󣆀򈪄yI󵡝񈙻\u000e^𑄩/򜌨\u000c%\u0019}\u000bN\u000b&\u0010_N򛙝\u00065C󢏬J&𨦓\u000bg{\"0k􇳒򈆛P{\u0000\u0017\u001b򙒧󭗿I\u0007@􁟅\u0018\r\u00028\u0008񘍜QiL>+/w𷜹𭩗n񋳡s􂂲OAo\u0018Q񱶒\u0017󱼷\u0002\\63|]񙨻w􂰗EDA,\u0008Ah;\u001f𪯲\u0007\u001c\u0015考&\u0000򇏞0+~𓂡򠔰E@\u0012_\r򡝺o.t:\n*􇯢kN#D\u0010򽬙闍\u0018򿢥򪴯𒓳0\tY\u001d\n\u000f?n𛿍\\t鋯񼐵6򍋤𥧥U󇜮\u0003v=" + "homepage": ";\u001bb񼶛U^^8-/3_񊕧󷉜N򋟒xjoMK\\F3\u0006\"\u0015rIwr󆅗\u000fH{#\u0015v\\q񍊱𺺈d`.]h6󽵙u5\u0006\"p%n󉄎+򙴃+U\u0004T", + "name": "2𲂈hd\u0000Z-􆌰~\u0016V{𖅨pᄣcH򴱺%a\u0014\u0004N\"P󮧦󵗚\u001f~+P򌸿", + "ticker": "(\u0018V\u001e򴩔", + "delisted": false, + "description": "\u0002SN𠧩𐝹\u0016\u001cZK𓴦\u0004-TE񹏹\u00123~\u0005&\nNBhA\u0012#󦞖X\u001b\u0007q󪶡5󯧝\u0011\u0018㑒vy\u0016􎝅\u001d\u0011\u0011񩖁􌢴񁜝񄢶z'Ae󁰱򆁒񿏺򤚢}5)𗚬򻧷(𐿦\u0010󖟆\u000f\\򮠮F*" }, { - "homepage": "v򅏒.)+񸵼7񻏞d:😹?0:", - "name": "TW(-\u0000G󗺂^\u000e.t8E𤨫-򆃳n&aF\u0011\u000b󫐎dT򟝩\u0016@󗊁񰼲f", - "ticker": "p\u0000T9V", - "description": "𨣹y𹣟󚾾񋇰񭴶tQJ񐝈񟫹%g'O򿭀򥰟3<\u0000R/񎕊8b@\\\rU򣹆T񙌂=m\u0019\u001aC{G񦫅\u0007󮮍󍗀򲎏U𕺩v󄸽C񚂉1)󫃞5&H򪙯}𿼙*w\"@q\u0017u\u0001¹\u001485\u0017-􆽫|d򫢪=C\n^eH𸷀", + "name": "󕏣󇽭l`P𖀅񱉳\\m󠟮>9rfB8𗕣lXe|4\u0000k`g񪧠򨚉oIrH{LF\u001d񿮧𕝂𻰂", + "ticker": "\u0010q/", + "delisted": false, + "description": "\u001d\u0006G\u0016bH񂨎𴤭PW\u0007񉐛WM\u0000Hm&_񝌑󀰑>$2\u00102AW\u000bKl񡭹𿈡jY\u001a|f.v󿳜M򹐎neq1ps\r\u0016󆻎񘭀a\u001c񢓙U}R񆆳󌜜\u0004Kuf;i\u00182\u00189^\u0000+E{.>gLu򍂛\"af\u001e\u001bꍙ󅨷V1=:󧿰.F𤆢D\u00185i􍔞y󬆁wG񒡀J>𚾐󈵝\t'4K!\u00051z\u0018C/I󡢂A\u0019jCQ'$𘊱2𜕦*T\u0006񩦆\n񛻹)+񽆱*f\u000e󶡫󡺕V󿆐\u001dfo󴺭\t򹐨񰂪" }, { - "homepage": "n\u0000\u0000𝶬\u0011򦚉\u0017g", - "name": "񠲓\u0011S\u0001񧜁򛸬S9w\u000eV\u0018u", - "ticker": "󛭨򨣎D", - "description": "񞴘\u000b\u0008^:𼈞򙊏Fn򠴥z񧛵jiz򠠅7KU󅃄\u000eh\u0011~,\u0010\u0006VWf]񝃸`񣭛yHvQt\u0003󚒮+j\u001e򳟗5\u0000?􎅇o\u0004=S嵔.󻕨󭕸uA>񱱳|󧄏\u0013󼱉.<񎣰\u0014\u0005|?O򶰉qu򰗮?󣹭88𳭜!ah\u000c\u0004m𾯙\"𾟏>󢸜󳣉\u0006𞼫\u0004zJu򹔏񴉆n\u0014\u0019􎬗򱂭>\u0006򁸗x]aSO\u001a򻙌\u0001U~O\u001e\u0018,7*shb\u001e\u00018\r%-3󝢭X\u001cA\u001d|\u0017o򇇥𢺴<\u0019&fPB 󝢋m\u0011\u0000t g+/\u0010*w󹗔\u0008(7R\u0018򀰤򨉽:\u0016󨰺􈢁󰦷e\u001dd&\u0003񁅰P\u001agWP1𶯦rv蜧|A𑲑\nE]\tM\u0006AM!" + "homepage": "Vk\nY𴋑E󾊙~E\u0015\u001f~oi\u0016>%+f񫩆Z.򆻙ZBT񗖢F;\u001fq}𙎿\u0000󆭩aX󮄯W𿕓$?\u001c\u000b񋡰B񋥕\u001dOX\u001c򕼪U򄃷$Y򂆓yIA;9]#4R+\u0018󳟾򭢞򶱣\u000b2X\u0002}\u0018%򑾋򠞅)S\u001e=󡆅K", + "name": "o2Uh\u0005DpD\u0018C\rW򊛬Po𻨦\u001eZ\u001c\u0000\u001d!I\u0013RX\u0008 KF", + "ticker": "d\rtfR", + "delisted": false, + "description": "\r\u0011b𜲿*񤆄\u000e\u0015zDP񆏡\u0001,csx񐯛\"'\u0013\u0016󈈃mC񞫞~\u000f\\򘗥󰱉L𥆳񳿌\"H]󃙊:J󩡶🳖-p\u0006(\u0017)H$;Ru񭈦󨼸)!򔦚e񹅗恐󼘔򽒈\u0004i\"m񗲘򩃒l_񃦲W9w󈺮c𷦨f+􁻷񨜊j󴻻/󑩻򯡏;󩮩!\u0005򄆣\"\u0013򼴝[gT\u0012]R1B\u0017Y\u0012J(\u0008A /\u000f󰦬𩛃󿓇A?wz򪻑1?h\u0014X" }, { - "homepage": "󒆕Q +v򳺮T\u0018 \u000f{=9UUE򉐃p20\\\u000c", - "name": "򾦘\u00125\nbIU\u0017>3󤝏", - "ticker": "+P񜷟", - "description": "x2\u0001󫿋𫥹򼑨0Z8cw 7^\n$Z;)u򂀶\u0004ohM򎽫󦶻Ȉ󾫸O);tf򪡅Fp󪧅`񍦯P󜪠񒪍岈􏏚w", + "name": "񠮓8\u0000'pcq|󵸥)Y,5\u0010񦝌\u0013pce\u0019𵸣򱝋\"\u000e\u0011%dt\tq􇮹)|", + "ticker": "b򞟀_5\u0004", + "delisted": false }, { - "homepage": "\u000c򎥡\u001b8F%\u0017󰕱%3l[\u0005TH\u001e^\u0011\n\u0000D2w\u0014>|j\u0002-\u000cf", - "name": "!\u0014=D󣯦JQ\u00176#8F\tSu$񤡉R\\^,s\u0007\n𯗝.`|򖴫{\u0000&򷚡@j2", - "ticker": "P\u0016g", - "description": "󿠗\u000f+򖱁HgJ𱜴򏸟)󫷺\u0017󰓔\u0016<𨓪i\\򹜑\u0013).󥻙t^t]\u001c+\u000e{A\u0003f]L𱨌\"{=\\&}vH\t\u001a\u0015-,򌴦\u0010򫪱7񐵾!-񃟶 n󋛖Xp\u001b򓛡\u0003#_B𗁟뼷򀆛񆫚\u0018V򱎗H]G\u0006HY\u0005\u001ar򣑫+a򳸌L󨞣\u0005\u0015\u001e\u0004􋼤1U 7u2󦟦n񴖝򚫕k\u0008s󞎌𫷟\\&K@\u001e\u00152Yt d򌿥=+a&%𐨪񕀑E؝󲎸򾢽E\n򸛭\u000e\u0019S\u001c}05j\u0001\u0019󇛉򒰖U󟲺\u0000sck\t󈾋v_򣕪af\u0019\u000e\u0001[p\u0011/\u0003󅡭|m|\u001e򍤦g$񡪼\rs􁘈󵨒XS򔩜:v\u0000j򸑹\u0007I,Zt\u0007G0h9\r\u0001\u001f,#󪱓0Oj\u0001󞉓s񇲼󣟏񿢓󏩷\"*񄆥^󈔠瀀򬂍򑮢kE}\u000b\u0016+1󓟼@\u000e񩺩ZGu\u000b3\u000b" + "homepage": "\u0018HXmh~hU)j\u0008𶕏𶁧񾠼X󶥝4G4jq񔫮XIC@$tj:+wu\u0004QL_k\u0006\u0012?s?\u0013Rr񲵎}<󂅄obt󜖡*f6\u001b(.e^w򴗿c\u0011t\u0004y\u0005\u0010򇲫񸼝䔈\u0014󱔤\u000c3\u000b\u001d\u0013@xք\u0004e\u001d=\u00000", + "name": "񎖋7d󃼧C􄲖K+F", + "ticker": "D󇩇9h", + "delisted": false, + "description": "t\u001d\u0018\u001e\u0005P]򇱒񚹞\u0003򦷼\u0018\u0002\u0007-\u0012\u000f񞚖|򚘫NeeK 􇨏#zh=K^\u0011/\"\u0015񹞕򶨶Ux-5_\u0003u\u001fl伦!򈛮󅲐i9T񧼤򨙆򡅝l񶬋R\u0019H󧓝R[󭒦\u0017\u001fQ⒏) \u00058o򰯓\u0003?!󾹌i\u0002fUr򍑞\u0016\u001e򓦰򐣠🜆󫢱`\u0014k/򺫠;g𰒢B2\t^*󽽑bIXHN𢺱\rjS\u0004𬾽񆥱󋔩;򷈖[󬞼6,񊃊x42\u0007𳫙􉸲i|񈬁2/󚐄>󻰔ig\u0011\u0014e񯧰𲱜񢔟c󛠑|2P#\u0001tZ\\9K \"IS{{PDMR\u001c`򬒥𹪚\u000bnEy\u0015\u0011\u001c8󔌈B󴫦\u0017U\u0010Fe\u001f򚁤Q: R6lO!g\"񠾙媅g􊘏\u0006\u000b\u001c" }, { - "homepage": "󪤀\n\u001aC\t򒕒!򀻗񺣧\u001f򃾺P򌦂񠷾X񴄭", - "name": "򗣀󂴴𩞌m", - "ticker": "𕩌rC㋄", - "description": "K}>\u001b\u000f򩉒#\u0015Xq񣁚󞒒kp\u0001~hM󔃗\u001b0\u0013\u00169\u000e󸓠󱯟Y4\u0015\u0016\u001a\u000f\u0017" + "homepage": "\u001f\u001c\u0011򆁔u\"he^\u000fP𳾵'%񼥶5\u0019*l3񐭧j򹅸򶟓<:I\u0006uf\u001aZ>𶦰󬮅O󒃵𳫊񖧌\u001b\n\u001e󋴿k򆑧l!\"]S򣾎wn\u001e@\"", + "name": "򷾈W^𪡳g砠􀊧O\u0012񥒖4V𾺯", + "ticker": "X5\u0014", + "delisted": false, + "description": "Q󚊳\\U^m\u000em#=QZ#%󗳝\u001bavV;𧗀𓞨5\t\n\u0005\u00024 1`򺘹;񂴏\u001d:򋯒WqA񤫶1#𡗳B)y򍞵󕜶E\u001azPO􄚨[\u0003񥡑b\u0018)񬴯\rF4~򏮂𖶧Ce𚙟@𘪣𖪓򖧳6o\u0004O{򵵄vP󪕗KXc񄫮K\u00103>񹛻a⟍񯒹1>񆬒E_m+b\u001d򲓔𤂅~d\u000e򃲈i􁡱\"\u000f\u0012󗋐TU}X$U╵-'񬛌𙘄)%𩨯E\u001f􏸳䒠􄙽DFs\\\u001e򝴣*|򛂎񔌕􌫪\u000c\u001f)\"|%V.8\u0001\u0015\u0013M񱑝\u001ej|򼯨rRe􊂣\u001c/tf[rvwE\u0005>\u0005\u00130W$\\K򊜥򵴷\u00012w\\񸦟\u0001\u0005EU]񑯤Oq\u0011&tTD\u001d#ba\u0014b;/%񉼫DZJ\u0014\u000f񦋚🪅@򿑨\u001d񮈢\u000f6 𱆰\u0015 x\u0013񆓼C/\u0013g" } ] } \ No newline at end of file diff --git a/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs b/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs index f82715fe217..32c98d810bf 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs @@ -52,6 +52,7 @@ import Prelude import Cardano.Wallet.Api.Types ( ApiAddressData , ApiAddressInspectData + , ApiMaintenanceAction , ApiPoolId , ApiPostRandomAddressData , ApiPutAddressesData @@ -1139,6 +1140,15 @@ instance Malformed (BodyParam SettingsPutData) where ) ] +instance Malformed (BodyParam ApiMaintenanceAction) where + malformed = first (BodyParam . Aeson.encode) <$> + [ ( [aesonQQ| + { "maintenance_action": "unknown_action" + }|] + , "Error in $['maintenance_action']: parsing Cardano.Wallet.Api.Types.MaintenanceAction failed, expected one of the tags ['gc_stake_pools'], but found tag 'unknown_action'" + ) + ] + -- -- Class instances (Header) -- diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index eefc1835f24..7e03b7112e9 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -64,6 +64,7 @@ import Cardano.Wallet.Api.Types , ApiErrorCode (..) , ApiFee (..) , ApiListStakePools (..) + , ApiMaintenanceAction (..) , ApiMnemonicT (..) , ApiNetworkClock (..) , ApiNetworkInformation (..) @@ -1375,6 +1376,10 @@ instance Arbitrary WalletName where instance Arbitrary ApiWalletPassphraseInfo where arbitrary = ApiWalletPassphraseInfo <$> genUniformTime +instance Arbitrary ApiMaintenanceAction where + arbitrary = genericArbitrary + shrink = genericShrink + instance Arbitrary SyncProgress where arbitrary = genericArbitrary shrink = genericShrink @@ -1518,6 +1523,10 @@ instance Arbitrary ApiVerificationKey where instance ToSchema ApiVerificationKey where declareNamedSchema _ = declareSchemaForDefinition "ApiVerificationKey" +instance Arbitrary Api.MaintenanceAction where + arbitrary = genericArbitrary + shrink = genericShrink + instance Arbitrary ApiNetworkParameters where arbitrary = genericArbitrary shrink = genericShrink diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs index e6cf333c1ee..3498e07b10b 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs @@ -217,6 +217,7 @@ server byron icarus jormungandr spl ntp = (getPoolLifeCycleStatus spl) :<|> quitStakePool jormungandr :<|> delegationFee jormungandr + :<|> (\_ -> throwError err501) byronWallets :: Server ByronWallets byronWallets = diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs index 2a29ce6a51e..325c39a78fc 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs @@ -106,10 +106,12 @@ import Cardano.Wallet.Api.Types , ApiAddressInspectData (..) , ApiCredential (..) , ApiErrorCode (..) + , ApiMaintenanceAction (..) , ApiSelectCoinsAction (..) , ApiSelectCoinsData (..) , ApiStakePool , ApiT (..) + , MaintenanceAction (..) , SettingsPutData (..) , SomeByronWalletPostData (..) ) @@ -264,7 +266,11 @@ server byron icarus shelley spl ntp = :<|> joinStakePool shelley (knownPools spl) (getPoolLifeCycleStatus spl) :<|> quitStakePool shelley :<|> delegationFee shelley + :<|> _poolMaintenance where + _poolMaintenance = \case + (ApiMaintenanceAction GcStakePools) -> + liftIO $ forceMetadataGC spl >> pure NoContent listStakePools_ = \case Just (ApiT stake) -> do currentEpoch <- getCurrentEpoch shelley diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 4032478a0f1..a6671f1aca6 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -201,6 +201,8 @@ data StakePoolLayer = StakePoolLayer -> Coin -> ExceptT ErrListPools IO (ApiListStakePools Api.ApiStakePool) + , forceMetadataGC :: IO () + , putSettings :: Settings -> IO () , getSettings :: IO Settings @@ -219,6 +221,7 @@ newStakePoolLayer nl db@DBLayer {..} worker = do { getPoolLifeCycleStatus = _getPoolLifeCycleStatus , knownPools = _knownPools , listStakePools = _listPools + , forceMetadataGC = _forceMetadataGC tvTid , putSettings = _putSettings tvTid , getSettings = _getSettings } @@ -236,17 +239,9 @@ newStakePoolLayer nl db@DBLayer {..} worker = do -- In order to apply the settings, we have to restart the -- metadata sync thread as well to avoid race conditions. _putSettings :: TVar ThreadId -> Settings -> IO () - _putSettings tvTid settings = do - bracket - killSyncThread - (\_ -> restartSyncThread) - (\_ -> atomically (gcMetadata >> writeSettings)) + _putSettings tvTid settings = + bracketSyncThread tvTid (atomically (gcMetadata >> writeSettings)) where - -- kill syncing thread, so we can apply the settings cleanly - killSyncThread = do - tid <- readTVarIO tvTid - killThread tid - -- clean up metadata table if the new sync settings suggests so gcMetadata = do oldSettings <- readSettings @@ -261,10 +256,7 @@ newStakePoolLayer nl db@DBLayer {..} worker = do writeSettings = putSettings settings - restartSyncThread = do - tid <- worker - STM.atomically $ writeTVar tvTid tid - + _getSettings :: IO Settings _getSettings = liftIO $ atomically readSettings _listPools @@ -279,7 +271,7 @@ newStakePoolLayer nl db@DBLayer {..} worker = do let lsqData = combineLsqData rawLsqData dbData <- liftIO $ readPoolDbData db currentEpoch seed <- liftIO $ atomically readSystemSeed - lastGC <- liftIO $ atomically $ readLastMetadataGC + lastGC <- liftIO $ atomically readLastMetadataGC r <- liftIO $ try $ sortByReward seed . map snd @@ -332,6 +324,28 @@ newStakePoolLayer nl db@DBLayer {..} worker = do rewards = view (#metrics . #nonMyopicMemberRewards) . stakePool (randomWeight, stakePool) = (fst, snd) + _forceMetadataGC :: TVar ThreadId -> IO () + _forceMetadataGC tvTid = + -- We force a GC by resetting last sync time to 0 (start of POSIX + -- time) and have the metadata thread restart. + bracketSyncThread tvTid (atomically (putLastMetadataGC (fromIntegral @Int 0))) + + -- Stop the sync thread, carry out an action, and restart the sync thread. + bracketSyncThread :: TVar ThreadId -> IO a -> IO () + bracketSyncThread tvTid action = + void $ bracket + killSyncThread + (\_ -> restartSyncThread) + (\_ -> action) + where + killSyncThread = do + tid <- readTVarIO tvTid + killThread tid + + restartSyncThread = do + tid <- worker + STM.atomically $ writeTVar tvTid tid + -- -- Data Combination functions -- diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 59b6c434af3..84fe7e435b7 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1266,6 +1266,18 @@ components: type: array items: *certificate + ApiMaintenanceAction: &ApiMaintenanceAction + type: object + required: + - maintenance_action + description: | + The maintenance action to carry out, current values are + - gc_stake_pools -> trigger looking up delisted pools from the remote SMASH server + properties: + maintenance_action: + type: string + enum: ['gc_stake_pools'] + ApiLastGC: &ApiLastGC <<: *date @@ -1291,7 +1303,7 @@ components: required: - pools properties: - lastGC: + last_gc: <<: *ApiLastGC pools: type: array @@ -3028,6 +3040,12 @@ x-responsesListStakePools: &responsesListStakePools - <<: *ApiJormungandrListStakePools title: "jormungandr stake pools" +x-responsesPoolMaintenance: &responsesPoolMaintenance + <<: *responsesErr405 + <<: *responsesErr404 + 204: + description: No Content + x-responsesJoinStakePool: &responsesJoinStakePool <<: *responsesErr400 403: @@ -3472,6 +3490,22 @@ paths: - *parametersIntendedStakeAmount responses: *responsesListStakePools + post: + operationId: poolMaintenance + tags: ["Stake Pools"] + summary: Maintenance actions + description: | + Performs maintenance action on the stake pools, such + as triggering metadata garbage collection. + + Actions may not be instantaneous. + requestBody: + required: true + content: + application/json: + schema: *ApiMaintenanceAction + responses: *responsesPoolMaintenance + /wallets/{walletId}/delegation-fees: get: operationId: getDelegationFee From 04f341564dcfc83d8de82951668fe24f38b5b8ba Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 17 Oct 2020 16:27:18 +0200 Subject: [PATCH 07/29] Change DB representation of POSIXTime --- lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index 5fd49b1ff17..a96895832da 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -91,6 +91,8 @@ import Data.Text.Encoding ( decodeUtf8, encodeUtf8 ) import Data.Time.Clock.POSIX ( POSIXTime, posixSecondsToUTCTime, utcTimeToPOSIXSeconds ) +import Data.Time.Format + ( defaultTimeLocale, formatTime, iso8601DateFormat, parseTimeM ) import Data.Word ( Word32, Word64 ) import Data.Word.Odd @@ -678,9 +680,16 @@ instance PersistFieldSql DerivationPrefix where -- Other instance PersistField POSIXTime where - toPersistValue = PersistUTCTime . posixSecondsToUTCTime - fromPersistValue (PersistUTCTime utc) = Right . utcTimeToPOSIXSeconds $ utc - fromPersistValue _ = Left "Could not convert to unknown construtctor POSIX seconds" + toPersistValue = + PersistText + . T.pack + . formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S")) + . posixSecondsToUTCTime + fromPersistValue (PersistText time) = + fmap utcTimeToPOSIXSeconds $ + parseTimeM True defaultTimeLocale + (iso8601DateFormat (Just "%H:%M:%S")) (T.unpack time) + fromPersistValue _ = Left "Could not convert to unknown constructor POSIX seconds" instance PersistFieldSql POSIXTime where - sqlType _ = sqlType (Proxy @Word64) + sqlType _ = sqlType (Proxy @Text) From 7ed274aa4e7c02387fc5dc9f12ee894150d708e6 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 17 Oct 2020 16:27:58 +0200 Subject: [PATCH 08/29] Add DB test for last GC time --- .../Scenario/API/Shelley/StakePools.hs | 48 ++++----- lib/core/src/Cardano/Pool/DB.hs | 5 +- lib/core/src/Cardano/Pool/DB/Model.hs | 20 ++-- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 81 +++++--------- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 2 +- lib/core/src/Cardano/Pool/Metadata.hs | 70 ++++++++---- lib/core/src/Cardano/Wallet/Api/Types.hs | 1 + .../src/Cardano/Wallet/DB/Sqlite/Types.hs | 24 +++-- .../src/Cardano/Wallet/Primitive/Types.hs | 34 +++--- .../test/unit/Cardano/Pool/DB/Arbitrary.hs | 21 ++-- .../test/unit/Cardano/Pool/DB/Properties.hs | 31 +++++- .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 7 +- .../src/Cardano/Wallet/Jormungandr/Binary.hs | 5 +- .../Cardano/Pool/Jormungandr/MetricsSpec.hs | 6 +- .../Cardano/Wallet/Jormungandr/ApiSpec.hs | 2 +- lib/shelley/src/Cardano/Wallet/Shelley.hs | 2 +- .../src/Cardano/Wallet/Shelley/Api/Server.hs | 2 +- .../Cardano/Wallet/Shelley/Compatibility.hs | 7 +- .../src/Cardano/Wallet/Shelley/Launch.hs | 1 + .../src/Cardano/Wallet/Shelley/Pools.hs | 102 +++++++++++++----- specifications/api/swagger.yaml | 5 +- 21 files changed, 296 insertions(+), 180 deletions(-) diff --git a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs index f392cb203ad..b5f80c41a01 100644 --- a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs +++ b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs @@ -169,7 +169,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do \Cannot join existent stakepool with wrong password" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx pool:_ <- map (view #id) . view #pools . snd <$> unsafeRequest - @(ApiListStakePools ApiStakePool) ctx (Link.listStakePools arbitraryStake) Empty + @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, "Wrong Passphrase") >>= flip verify [ expectResponseCode HTTP.status403 , expectErrorMessage errMsg403WrongPass @@ -182,9 +183,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do dest <- emptyWallet ctx -- Join Pool - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) ctx - (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd <$> + unsafeRequest @(ApiListStakePools ApiStakePool) ctx + (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (src, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -565,9 +566,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do } |] w <- unsafeResponse <$> postWallet ctx payload - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd <$> + unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty eventually "wallet join a pool" $ do joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify @@ -694,9 +695,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do $ it "Join/quit when already joined a pool" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool1:pool2:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + pool1:pool2:_ <- map (view #id) . view #pools . snd <$> + unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty liftIO $ joinStakePool @n ctx pool1 (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -764,9 +765,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I can join if I have just the right amount" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx] - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd <$> + unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase)>>= flip verify [ expectResponseCode HTTP.status202 , expectField (#status . #getApiT) (`shouldBe` Pending) @@ -776,9 +777,9 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I cannot join if I have not enough fee to cover" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx - 1] - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + pool:_ <- map (view #id) . view #pools . snd <$> + unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status403 , expectErrorMessage (errMsg403DelegationFee 1) @@ -800,8 +801,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do w <- fixtureWalletWith @n ctx initBalance pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -837,8 +838,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do w <- fixtureWalletWith @n ctx initBalance pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) - ctx (Link.listStakePools arbitraryStake) Empty + <$> unsafeRequest @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -950,28 +951,24 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do , name = "Genesis Pool A" , description = Nothing , homepage = "https://iohk.io" - , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPB") , name = "Genesis Pool B" , description = Nothing , homepage = "https://iohk.io" - , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPC") , name = "Genesis Pool C" , description = Just "Lorem Ipsum Dolor Sit Amet." , homepage = "https://iohk.io" - , delisted = False } , StakePoolMetadata { ticker = (StakePoolTicker "GPD") , name = "Genesis Pool D" , description = Just "Lorem Ipsum Dolor Sit Amet." , homepage = "https://iohk.io" - , delisted = False } ] @@ -1019,7 +1016,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do \NonMyopicMemberRewards are 0 when stake is 0" $ \ctx -> runResourceT $ do liftIO $ pendingWith "This assumption seems false, for some reasons..." let stake = Just $ Coin 0 - r <- request @(ApiListStakePools ApiStakePool) ctx (Link.listStakePools stake) + r <- request @(ApiListStakePools ApiStakePool) + ctx (Link.listStakePools stake) Default Empty expectResponseCode HTTP.status200 r verify ((second . second) (view #pools) r) diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index eb51834f085..b7fb7b5a025 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -216,8 +216,9 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer , delistPools :: [PoolId] -> stm () - -- ^ Mark pools as delisted - -- + -- ^ Mark pools as delisted, e.g. due to non-compliance. + -- This is stored as an attribute in the pool_registration table. + , removePools :: [PoolId] -> stm () diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index f03d13947b4..d171f558989 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -16,10 +16,6 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE UndecidableInstances #-} --- `const` isn't more readable than lambdas. Our language is based on --- lambda calculus and we shouldn't feel ashamed to use them. They also --- have different strictness properties. -{-# HLINT ignore "Use const" #-} -- | -- Copyright: © 2018-2020 IOHK @@ -84,6 +80,7 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime , EpochNo (..) , InternalState (..) + , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolOwner (..) @@ -97,8 +94,6 @@ import Cardano.Wallet.Primitive.Types , defaultInternalState , defaultSettings ) -import Control.Monad - ( forM_ ) import Control.Monad.Trans.Class ( lift ) import Control.Monad.Trans.State.Strict @@ -434,10 +429,15 @@ mRollbackTo ti point = do mDelistPools :: [PoolId] -> ModelOp () mDelistPools poolsToDelist = - forM_ poolsToDelist $ \pool -> do - mhash <- (>>= (fmap snd . poolMetadata . snd)) <$> mReadPoolRegistration pool - forM_ mhash $ \hash -> modify #metadata - $ Map.adjust (\m -> m { delisted = True }) hash + modify #registrations + $ Map.mapWithKey + $ \(_, pid) a -> + if updateThis pid + then a {poolFlag = Delisted} + else a + where + updateThis p = p `Set.member` poolsToDelistSet + poolsToDelistSet = Set.fromList poolsToDelist mRemovePools :: [PoolId] -> ModelOp () mRemovePools poolsToRemove = do diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 16bb1f0193f..45290d5914e 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -62,6 +62,7 @@ import Cardano.Wallet.Primitive.Types ( BlockHeader (..) , CertificatePublicationTime (..) , EpochNo (..) + , PoolFlag (..) , PoolId (..) , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) @@ -92,7 +93,7 @@ import Data.Functor import Data.Generics.Internal.VL.Lens ( view ) import Data.List - ( foldl', intercalate ) + ( foldl' ) import Data.Map.Strict ( Map ) import Data.Quantity @@ -101,8 +102,6 @@ import Data.Ratio ( denominator, numerator, (%) ) import Data.String.Interpolate ( i ) -import Data.String.QQ - ( s ) import Data.Text ( Text ) import Data.Time.Clock @@ -120,13 +119,14 @@ import Database.Persist.Sql , fromPersistValue , insertMany_ , insert_ - , rawExecute , rawSql , repsert + , repsertMany , selectFirst , selectList , toPersistValue , update + , (<-.) , (<.) , (=.) , (==.) @@ -144,7 +144,6 @@ import System.Random import qualified Cardano.Pool.DB.Sqlite.TH as TH import qualified Cardano.Wallet.Primitive.Types as W -import qualified Data.ByteString.Char8 as B8 import qualified Data.Map.Strict as Map import qualified Data.Text as T import qualified Database.Sqlite as Sqlite @@ -309,6 +308,7 @@ newDBLayer trace fp timeInterpreter = do (getQuantity $ poolPledge cert) (fst <$> poolMetadata cert) (snd <$> poolMetadata cert) + NoPoolFlag _ <- repsert poolRegistrationKey poolRegistrationRow insertMany_ $ zipWith @@ -399,10 +399,11 @@ newDBLayer trace fp timeInterpreter = do (PoolMetadataFetchAttempts hash url retryAfter $ retryCount + 1) putPoolMetadata hash metadata = do - let StakePoolMetadata{ticker,name,description,homepage,delisted} = metadata + let StakePoolMetadata + {ticker, name, description, homepage} = metadata repsert (PoolMetadataKey hash) - (PoolMetadata hash name ticker description homepage delisted) + (PoolMetadata hash name ticker description homepage) deleteWhere [ PoolFetchAttemptsMetadataHash ==. hash ] removePoolMetadata = do @@ -452,6 +453,7 @@ newDBLayer trace fp timeInterpreter = do , Single fieldMarginDenominator , Single fieldMetadataHash , Single fieldMetadataUrl + , Single fieldFlag ) = do regCert <- parseRegistrationCertificate parseRetirementCertificate <&> maybe @@ -465,6 +467,7 @@ newDBLayer trace fp timeInterpreter = do <*> (Quantity <$> fromPersistValue fieldCost) <*> (Quantity <$> fromPersistValue fieldPledge) <*> parseMetadata + <*> fromPersistValue fieldFlag parseRetirementCertificate = do poolId <- fromPersistValue fieldPoolId @@ -495,43 +498,13 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool - delistPools [] = pure () - delistPools pools = - -- sqlite has a max of 2k variables or so, so we don't want - -- 'IN #{poolList my_pools}' to blow up. - forM_ (listOfK 1000 pools) - $ \kPools -> do - rawExecute - (deleteQueryString kPools) - [] - - where - deleteQueryString my_pools = [i| - UPDATE pool_metadata - SET delisted = 1 - WHERE metadata_hash - IN ( - SELECT metadata_hash - FROM active_pool_registrations - WHERE pool_id - IN #{poolList my_pools} - ); - |] - - poolList :: [PoolId] -> String - poolList pids = - let inner = intercalate ", " - -- pool IDs are strictly ascii, Char8 is safe - . fmap (\x -> "\"" ++ B8.unpack (getPoolId x) ++ "\"") - $ pids - in "( " ++ inner ++ " )" - - listOfK :: Int -> [a] -> [[a]] - listOfK k = go - where - go [] = [] - go xs = let (l, r) = splitAt k xs - in l : go r + delistPools pools = do + px <- selectList + [ PoolRegistrationPoolId <-. pools ] + [ ] + repsertMany $ fmap + (\(Entity k val) -> (k, val {poolRegistrationFlag = Delisted})) + px removePools = mapM_ $ \pool -> do liftIO $ traceWith trace $ MsgRemovingPool pool @@ -592,7 +565,11 @@ newDBLayer trace fp timeInterpreter = do [Asc InternalStateId, LimitTo 1] case result of Nothing -> pure . W.lastMetadataGC $ defaultInternalState - Just x -> pure . W.lastMetadataGC . fromInternalState . entityVal $ x + Just x -> pure + . W.lastMetadataGC + . fromInternalState + . entityVal + $ x putLastMetadataGC utc = do result <- selectFirst @@ -633,7 +610,8 @@ newDBLayer trace fp timeInterpreter = do poolCost_ poolPledge_ poolMetadataUrl - poolMetadataHash = entityVal meta + poolMetadataHash + poolFlag = entityVal meta let poolMargin = unsafeMkPercentage $ toRational $ marginNum % marginDen let poolCost = Quantity poolCost_ @@ -656,6 +634,7 @@ newDBLayer trace fp timeInterpreter = do , poolCost , poolPledge , poolMetadata + , poolFlag } let cpt = CertificatePublicationTime {slotNo, slotInternalIndex} pure (cpt, cert) @@ -768,7 +747,7 @@ createView conn (DatabaseView name definition) = do -- This view does NOT exclude pools that have retired. -- activePoolLifeCycleData :: DatabaseView -activePoolLifeCycleData = DatabaseView "active_pool_lifecycle_data" [s| +activePoolLifeCycleData = DatabaseView "active_pool_lifecycle_data" [i| SELECT active_pool_registrations.pool_id as pool_id, active_pool_retirements.retirement_epoch as retirement_epoch, @@ -797,7 +776,7 @@ activePoolLifeCycleData = DatabaseView "active_pool_lifecycle_data" [s| -- This view does NOT exclude pools that have retired. -- activePoolOwners :: DatabaseView -activePoolOwners = DatabaseView "active_pool_owners" [s| +activePoolOwners = DatabaseView "active_pool_owners" [i| SELECT pool_id, pool_owners FROM ( SELECT row_number() OVER w AS r, * FROM ( @@ -825,7 +804,7 @@ activePoolOwners = DatabaseView "active_pool_owners" [s| -- This view does NOT exclude pools that have retired. -- activePoolRegistrations :: DatabaseView -activePoolRegistrations = DatabaseView "active_pool_registrations" [s| +activePoolRegistrations = DatabaseView "active_pool_registrations" [i| SELECT pool_id, cost, @@ -855,7 +834,7 @@ activePoolRegistrations = DatabaseView "active_pool_registrations" [s| -- certificates revoked by subsequent re-registration certificates. -- activePoolRetirements :: DatabaseView -activePoolRetirements = DatabaseView "active_pool_retirements" [s| +activePoolRetirements = DatabaseView "active_pool_retirements" [i| SELECT * FROM ( SELECT pool_id, @@ -1023,7 +1002,6 @@ fromPoolMeta meta = (poolMetadataHash meta,) $ , name = poolMetadataName meta , description = poolMetadataDescription meta , homepage = poolMetadataHomepage meta - , delisted = poolMetadataDelisted meta } fromSettings @@ -1040,4 +1018,3 @@ fromInternalState :: InternalState -> W.InternalState fromInternalState (InternalState utc) = W.InternalState utc - diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index a2eab6ea723..415a69846d2 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -120,6 +120,7 @@ PoolRegistration sql=pool_registration poolRegistrationPledge Word64 sql=pledge poolRegistrationMetadataUrl W.StakePoolMetadataUrl Maybe sql=metadata_url poolRegistrationMetadataHash W.StakePoolMetadataHash Maybe sql=metadata_hash + poolRegistrationFlag W.PoolFlag sql=flag Primary poolRegistrationPoolId poolRegistrationSlot poolRegistrationSlotInternalIndex deriving Show Generic @@ -141,7 +142,6 @@ PoolMetadata sql=pool_metadata poolMetadataTicker W.StakePoolTicker sql=ticker poolMetadataDescription Text Maybe sql=description poolMetadataHomepage Text sql=homepage - poolMetadataDelisted Bool sql=delisted Primary poolMetadataHash deriving Show Generic diff --git a/lib/core/src/Cardano/Pool/Metadata.hs b/lib/core/src/Cardano/Pool/Metadata.hs index 0614da8c2d9..f2ae2b95e89 100644 --- a/lib/core/src/Cardano/Pool/Metadata.hs +++ b/lib/core/src/Cardano/Pool/Metadata.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE Rank2Types #-} @@ -33,8 +34,6 @@ import Cardano.BM.Data.Severity ( Severity (..) ) import Cardano.BM.Data.Tracer ( HasPrivacyAnnotation (..), HasSeverityAnnotation (..) ) -import Cardano.Wallet.Api.Types - ( ApiT (..) ) import Cardano.Wallet.Primitive.AddressDerivation ( hex ) import Cardano.Wallet.Primitive.Types @@ -46,7 +45,7 @@ import Cardano.Wallet.Primitive.Types import Control.Exception ( IOException, handle ) import Control.Monad - ( when ) + ( forM, when ) import Control.Monad.IO.Class ( MonadIO (..) ) import Control.Monad.Trans.Except @@ -56,7 +55,16 @@ import Control.Tracer import Crypto.Hash.Utils ( blake2b256 ) import Data.Aeson - ( eitherDecodeStrict ) + ( FromJSON (..) + , ToJSON (..) + , eitherDecodeStrict + , object + , withObject + , (.:) + , (.=) + ) +import Data.Bifunctor + ( first ) import Data.ByteArray.Encoding ( Base (..), convertToBase ) import Data.ByteString @@ -66,7 +74,7 @@ import Data.Coerce import Data.List ( intercalate ) import Data.Text.Class - ( ToText (..) ) + ( TextDecodingError (..), ToText (..), fromText ) import Fmt ( pretty ) import Network.HTTP.Client @@ -103,6 +111,24 @@ metadaFetchEp pid (StakePoolMetadataHash bytes) hashStr = T.unpack $ T.decodeUtf8 $ convertToBase Base16 bytes pidStr = T.unpack $ toText pid +-- | TODO: import SMASH types +newtype SMASHPoolId = SMASHPoolId T.Text + deriving stock (Eq, Show, Ord) + +instance ToJSON SMASHPoolId where + toJSON (SMASHPoolId poolId) = + object + [ "poolId" .= poolId + ] + +instance FromJSON SMASHPoolId where + parseJSON = withObject "SMASHPoolId" $ \o -> do + poolId <- o .: "poolId" + return $ SMASHPoolId poolId + +toPoolId :: SMASHPoolId -> Either TextDecodingError PoolId +toPoolId (SMASHPoolId pid) = fromText pid + -- | Some default settings, overriding some of the library's default with -- stricter values. defaultManagerSettings :: ManagerSettings @@ -146,7 +172,8 @@ fetchDelistedPools -> IO (Maybe [PoolId]) fetchDelistedPools tr uri manager = runExceptTLog $ do pl <- getPoolsPayload - except . (fmap . fmap) getApiT . eitherDecodeStrict @[ApiT PoolId] $ pl + smashPids <- except $ eitherDecodeStrict @[SMASHPoolId] pl + forM smashPids $ except . first getTextDecodingError . toPoolId where getPoolsPayload :: ExceptT String IO ByteString getPoolsPayload = do @@ -155,14 +182,17 @@ fetchDelistedPools tr uri manager = runExceptTLog $ do ExceptT $ handle fromIOException $ handle fromHttpException - $ withResponse req manager $ \res -> do - case responseStatus res of - s | s == status200 -> do - let body = responseBody res - Right . BS.concat <$> brConsume body + $ withResponse req manager handleResponseStatus - s -> do - pure $ Left $ "The server replied something unexpected: " <> show s + handleResponseStatus response = case responseStatus response of + s | s == status200 -> do + let body = responseBody response + Right . BS.concat <$> brConsume body + s -> + pure $ Left $ mconcat + [ "The server replied with something unexpected: " + , show s + ] runExceptTLog :: ExceptT String IO [PoolId] @@ -175,7 +205,7 @@ fetchDelistedPools tr uri manager = runExceptTLog $ do Just meta <$ traceWith tr (MsgFetchDelistedPoolsSuccess meta) fromHttpException :: Monad m => HttpException -> m (Either String a) - fromHttpException = return . Left . ("HTTp Exception exception: " <>) . show + fromHttpException = return . Left . ("HTTP exception: " <>) . show -- TODO: refactor/simplify this fetchFromRemote @@ -253,15 +283,16 @@ fetchFromRemote tr builders manager pid url hash = runExceptTLog $ do pure $ Left "There's no known metadata for this pool." s -> do - pure $ Left $ "The server replied something unexpected: " <> show s + pure $ Left $ mconcat + [ "The server replied with something unexpected: " + , show s + ] fromHttpException :: Monad m => HttpException -> m (Either String (Maybe a)) fromHttpException = const (return $ Right Nothing) fromIOException :: Monad m => IOException -> m (Either String a) fromIOException = return . Left . ("IO exception: " <>) . show - - data StakePoolMetadataFetchLog = MsgFetchPoolMetadata StakePoolMetadataHash URI | MsgFetchPoolMetadataSuccess StakePoolMetadataHash StakePoolMetadata @@ -306,8 +337,9 @@ instance ToText StakePoolMetadataFetchLog where [ "Fetching delisted pools from ", T.pack (show uri) ] MsgFetchDelistedPoolsSuccess poolIds -> mconcat - [ "Successfully fetched delisted pools: " - , T.pack (show poolIds) + [ "Successfully fetched delisted " + , T.pack (show . length $ poolIds) + , " pools." ] MsgFetchDelistedPoolsFailure err -> mconcat [ "Failed to fetch delisted pools: ", T.pack err diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index ae2cc2c86b6..994ff557fd0 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -558,6 +558,7 @@ data ApiStakePool = ApiStakePool , margin :: !(Quantity "percent" Percentage) , pledge :: !(Quantity "lovelace" Natural) , retirement :: !(Maybe ApiEpochInfo) + , delisted :: !Bool } deriving (Eq, Generic, Show) data ApiStakePoolMetrics = ApiStakePoolMetrics diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index a96895832da..bf6ecc1ae25 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -43,6 +43,7 @@ import Cardano.Wallet.Primitive.Types , Direction (..) , EpochNo (..) , FeePolicy + , PoolFlag (..) , PoolId , PoolMetadataSource (..) , PoolOwner (..) @@ -674,22 +675,27 @@ instance PersistField DerivationPrefix where instance PersistFieldSql DerivationPrefix where sqlType _ = sqlType (Proxy @Text) - - ---------------------------------------------------------------------------- -- Other instance PersistField POSIXTime where - toPersistValue = - PersistText - . T.pack - . formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S")) - . posixSecondsToUTCTime + toPersistValue = PersistText + . T.pack + . formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S")) + . posixSecondsToUTCTime fromPersistValue (PersistText time) = - fmap utcTimeToPOSIXSeconds $ + utcTimeToPOSIXSeconds <$> parseTimeM True defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S")) (T.unpack time) - fromPersistValue _ = Left "Could not convert to unknown constructor POSIX seconds" + fromPersistValue _ = Left + "Could not parse POSIX time value" instance PersistFieldSql POSIXTime where sqlType _ = sqlType (Proxy @Text) + +instance PersistField PoolFlag where + toPersistValue = toPersistValue . toText + fromPersistValue = fromPersistValueFromText + +instance PersistFieldSql PoolFlag where + sqlType _ = sqlType (Proxy @Text) diff --git a/lib/core/src/Cardano/Wallet/Primitive/Types.hs b/lib/core/src/Cardano/Wallet/Primitive/Types.hs index 3f38f56d08c..425e5d63c38 100644 --- a/lib/core/src/Cardano/Wallet/Primitive/Types.hs +++ b/lib/core/src/Cardano/Wallet/Primitive/Types.hs @@ -189,6 +189,9 @@ module Cardano.Wallet.Primitive.Types -- * InternalState , InternalState (..) , defaultInternalState + + -- * other + , PoolFlag (..) ) where import Prelude @@ -657,9 +660,6 @@ data StakePoolMetadata = StakePoolMetadata -- ^ Short description of the stake pool. , homepage :: Text -- ^ Absolute URL for the stake pool's homepage link. - , delisted :: Bool - -- ^ The pool has been delisted from the current SMASH server - -- (e.g. due to non-compliance). This isn't part of the JSON. } deriving (Eq, Ord, Show, Generic) instance FromJSON StakePoolMetadata where @@ -675,7 +675,7 @@ instance FromJSON StakePoolMetadata where homepage <- obj .: "homepage" guard (T.length homepage <= 100) - pure $ StakePoolMetadata{ticker,name,description,homepage,delisted=False} + pure $ StakePoolMetadata{ticker,name,description,homepage} -- | Very short name for a stake pool. newtype StakePoolTicker = StakePoolTicker { unStakePoolTicker :: Text } @@ -1812,16 +1812,17 @@ data PoolRegistrationCertificate = PoolRegistrationCertificate , poolCost :: Quantity "lovelace" Word64 , poolPledge :: Quantity "lovelace" Word64 , poolMetadata :: Maybe (StakePoolMetadataUrl, StakePoolMetadataHash) + , poolFlag :: PoolFlag } deriving (Generic, Show, Eq, Ord) instance NFData PoolRegistrationCertificate instance Buildable PoolRegistrationCertificate where - build (PoolRegistrationCertificate p o _ _ _ _) = mempty + build (PoolRegistrationCertificate {poolId, poolOwners}) = mempty <> "Registration of " - <> build p + <> build poolId <> " owned by " - <> build o + <> build poolOwners data PoolRetirementCertificate = PoolRetirementCertificate { poolId :: !PoolId @@ -2006,7 +2007,7 @@ defaultSettings = Settings { poolMetadataSource = FetchNone } --- | Various internal states of he pool DB +-- | Various internal states of the pool DB -- that need to survive wallet restarts. These aren't -- exposed settings. {-# HLINT ignore InternalState "Use newtype instead of data" #-} @@ -2015,12 +2016,21 @@ data InternalState = InternalState } deriving (Generic, Show, Eq) defaultInternalState :: InternalState -defaultInternalState = InternalState { - lastMetadataGC = (fromIntegral @Int 0) -} - +defaultInternalState = InternalState + { lastMetadataGC = fromIntegral @Int 0 } instance FromJSON PoolMetadataSource where parseJSON = parseJSON >=> either (fail . show . ShowFmt) pure . fromText instance ToJSON PoolMetadataSource where toJSON = toJSON . toText + +data PoolFlag = NoPoolFlag | Delisted + deriving (Generic, Bounded, Enum, Show, Eq, Ord) + +instance NFData PoolFlag + +instance ToText PoolFlag where + toText = toTextFromBoundedEnum KebabLowerCase + +instance FromText PoolFlag where + fromText = fromTextToBoundedEnum KebabLowerCase diff --git a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs index 49451b48f6e..da42d06768b 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs @@ -27,6 +27,7 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime (..) , EpochNo (..) , PoolCertificate (..) + , PoolFlag (..) , PoolId (..) , PoolMetadataSource (..) , PoolMetadataSource (..) @@ -54,7 +55,7 @@ import Control.Monad import Data.Function ( (&) ) import Data.Generics.Internal.VL.Lens - ( (^.) ) + ( view, (^.) ) import Data.Maybe ( fromJust ) import Data.Ord @@ -165,11 +166,18 @@ instance Arbitrary PoolOwner where byte <- elements ['0'..'8'] return $ PoolOwner $ B8.pack (replicate 32 byte) +instance Arbitrary PoolFlag where + arbitrary = arbitraryBoundedEnum + shrink = const [] + instance Arbitrary PoolRegistrationCertificate where - shrink (PoolRegistrationCertificate pid owners m c pl md) = - (\pid' owners' -> PoolRegistrationCertificate pid' owners' m c pl md) - <$> shrink pid - <*> shrinkOwners owners + shrink regCert = do + shrunkPoolId <- shrink $ view #poolId regCert + shrunkPoolOwners <- shrinkOwners $ view #poolOwners regCert + pure regCert + { poolId = shrunkPoolId + , poolOwners = shrunkPoolOwners + } where shrinkOwners os = -- A valid registration certificate must have at least one owner: @@ -181,6 +189,7 @@ instance Arbitrary PoolRegistrationCertificate where <*> fmap Quantity arbitrary <*> fmap Quantity arbitrary <*> oneof [pure Nothing, Just <$> genMetadata] + <*> arbitrary where genMetadata = (,) <$> fmap StakePoolMetadataUrl genURL @@ -325,7 +334,6 @@ genStakePoolMetadata (StakePoolMetadataUrl url) = StakePoolMetadata <*> genPrintableText <*> oneof [ pure Nothing, Just <$> genPrintableText ] <*> pure url - <*> pure False genStakePoolTicker :: Gen StakePoolTicker genStakePoolTicker = (StakePoolTicker . T.pack) <$> @@ -399,4 +407,3 @@ instance Arbitrary PoolMetadataSource where instance Arbitrary Settings where shrink = genericShrink arbitrary = genericArbitrary - diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index afb1312f380..ad672f32837 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -6,7 +6,9 @@ {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeSynonymInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Cardano.Pool.DB.Properties @@ -87,6 +89,8 @@ import Data.Quantity ( Quantity (..) ) import Data.Text.Class ( toText ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Word ( Word64 ) import Fmt @@ -217,6 +221,8 @@ properties = do (property . prop_putHeaderListHeader) it "modSettings . readSettings == id" (property . prop_modSettingsReadSettings) + it "putLastMetadataGC . readLastMetadataGC == id" + (property . prop_putLastMetadataGCReadLastMetadataGC) {------------------------------------------------------------------------------- Properties @@ -964,7 +970,6 @@ prop_removePools , name = "MOCK" , description = Nothing , homepage = "http://mock.pool/" - , delisted = False } prop_listRegisteredPools @@ -1431,6 +1436,25 @@ prop_modSettingsReadSettings DBLayer{..} settings = do assertWith "Modifying settings and reading afterwards works" (modSettings' == settings) +-- | read . put == id +prop_putLastMetadataGCReadLastMetadataGC + :: DBLayer IO + -> POSIXTime + -> Property +prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do + monadicIO (setup >> prop) + where + setup = run $ atomically cleanDB + prop = do + defGCTime <- run $ atomically readLastMetadataGC + assertWith + "Reading sync time from empty db returns start of unix epoch" + (defGCTime == fromIntegral @Int 0) + run $ atomically $ putLastMetadataGC posixTime + time <- run $ atomically readLastMetadataGC + assertWith "Setting sync time and reading afterwards works" + (time == posixTime) + descSlotsPerPool :: Map PoolId [BlockHeader] -> Expectation descSlotsPerPool pools = do let checkIfDesc slots = @@ -1484,3 +1508,8 @@ testCertificatePublicationTimes = instance Arbitrary BlockHeader where arbitrary = genSlotNo >>= genBlockHeader + +instance Arbitrary POSIXTime where + arbitrary = do + Positive int <- arbitrary @(Positive Int) + pure (fromIntegral int) diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 7e03b7112e9..10fc42c0a86 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -1314,7 +1314,7 @@ instance Arbitrary PoolId where return $ PoolId $ BS.pack $ take 28 bytes instance Arbitrary (ApiListStakePools ApiStakePool) where - arbitrary = ApiListStakePools <$> arbitrary <*> arbitrary + arbitrary = applyArbitrary2 ApiListStakePools instance Arbitrary ApiStakePool where arbitrary = ApiStakePool @@ -1325,6 +1325,7 @@ instance Arbitrary ApiStakePool where <*> arbitrary <*> arbitrary <*> arbitrary + <*> arbitrary instance Arbitrary ApiStakePoolMetrics where arbitrary = ApiStakePoolMetrics @@ -1339,7 +1340,6 @@ instance Arbitrary StakePoolMetadata where <*> arbitraryText 50 <*> arbitraryMaybeText 255 <*> arbitraryText 100 - <*> pure False where arbitraryText maxLen = do len <- choose (1, maxLen) @@ -1527,6 +1527,9 @@ instance Arbitrary Api.MaintenanceAction where arbitrary = genericArbitrary shrink = genericShrink +instance ToSchema Api.ApiMaintenanceAction where + declareNamedSchema _ = declareSchemaForDefinition "ApiMaintenanceAction" + instance Arbitrary ApiNetworkParameters where arbitrary = genericArbitrary shrink = genericShrink diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs index e2e6c122043..8b124142f30 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs @@ -103,6 +103,7 @@ import Cardano.Wallet.Primitive.Types , Coin (..) , EpochLength (..) , EpochNo (..) + , PoolFlag (..) , PoolId (PoolId) , PoolOwner (..) , SealedTx (..) @@ -1090,7 +1091,9 @@ poolRegistrationsFromBlock (Block _hdr fragments) = do let margin = fromRight maxBound $ mkPercentage $ toRational $ taxRatio taxes let cost = Quantity (taxFixed taxes) let dummyPledge = Quantity 0 - pure $ W.PoolRegistrationCertificate poolId owners margin cost dummyPledge Nothing + let metadata = Nothing + pure $ W.PoolRegistrationCertificate + poolId owners margin cost dummyPledge metadata NoPoolFlag -- | If all incentives parameters are present in the blocks, returns a function -- that computes reward based on a given epoch. diff --git a/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs b/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs index f7afa4dcc9f..1b97eb4367c 100644 --- a/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs +++ b/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs @@ -54,6 +54,7 @@ import Cardano.Wallet.Primitive.Types , EpochLength (..) , EpochNo , FeePolicy (..) + , PoolFlag (..) , PoolId (..) , PoolOwner (..) , PoolRegistrationCertificate (..) @@ -428,8 +429,8 @@ instance Arbitrary PoolOwner where arbitrary = PoolOwner . B8.singleton <$> elements ['a'..'e'] instance Arbitrary PoolRegistrationCertificate where - shrink (PoolRegistrationCertificate p o m c pl md) = - (\(p', NonEmpty o') -> PoolRegistrationCertificate p' o' m c pl md) + shrink (PoolRegistrationCertificate p o m c pl md fl) = + (\(p', NonEmpty o') -> PoolRegistrationCertificate p' o' m c pl md fl) <$> shrink (p, NonEmpty o) arbitrary = PoolRegistrationCertificate <$> arbitrary @@ -438,6 +439,7 @@ instance Arbitrary PoolRegistrationCertificate where <*> fmap Quantity arbitrary <*> pure (Quantity 0) <*> pure Nothing + <*> pure NoPoolFlag instance Arbitrary RegistrationsTest where shrink (RegistrationsTest xs) = RegistrationsTest <$> shrink xs diff --git a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs index 0f84a1d1938..3233125e7b0 100644 --- a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs +++ b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs @@ -283,7 +283,7 @@ instance Arbitrary ApiStakePoolMetrics where pure $ ApiStakePoolMetrics stakes blocks instance Arbitrary (W.ApiListStakePools ApiStakePool) where - arbitrary = W.ApiListStakePools <$> arbitrary <*> (pure Nothing) + arbitrary = W.ApiListStakePools <$> arbitrary <*> pure Nothing instance Arbitrary ApiStakePool where arbitrary = ApiStakePool diff --git a/lib/shelley/src/Cardano/Wallet/Shelley.hs b/lib/shelley/src/Cardano/Wallet/Shelley.hs index 331509f8dbc..25c6d696572 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley.hs @@ -334,7 +334,7 @@ serveWallet forM_ settings $ atomically . putSettings void $ forkFinally (monitorStakePools tr gp nl db) onExit spl <- newStakePoolLayer nl db - $ forkFinally (monitorMetadata poolsEngineTracer tr sp db) onExit + $ forkFinally (monitorMetadata tr sp db) onExit action spl where tr = contramap (MsgFromWorker mempty) poolsEngineTracer diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs index 325c39a78fc..5f4e8e6fc4d 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs @@ -269,7 +269,7 @@ server byron icarus shelley spl ntp = :<|> _poolMaintenance where _poolMaintenance = \case - (ApiMaintenanceAction GcStakePools) -> + ApiMaintenanceAction GcStakePools -> liftIO $ forceMetadataGC spl >> pure NoContent listStakePools_ = \case Just (ApiT stake) -> do diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs index 73d6ee0c0bd..acb7a5a56b2 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs @@ -772,6 +772,7 @@ fromShelleyRegistrationCert = \case , W.poolCost = lovelaceFromCoin (SL._poolCost pp) , W.poolPledge = lovelaceFromCoin (SL._poolPledge pp) , W.poolMetadata = fromPoolMetaData <$> strictMaybeToMaybe (SL._poolMD pp) + , W.poolFlag = W.NoPoolFlag } ) @@ -1088,13 +1089,9 @@ inspectAddress = where inspect :: ByteString -> Either TextDecodingError Aeson.Value inspect = maybe (Left errMalformedAddress) Right - . inspectShelleyAddress mRootPub + . inspectShelleyAddress Nothing . unsafeMkAddress - -- TODO: It's possible to inspect a byron address, given a root XPub. - -- However, this is not yet exposed by the API. - mRootPub = Nothing - toHDPayloadAddress :: W.Address -> Maybe Byron.HDAddressPayload toHDPayloadAddress (W.Address addr) = do payload <- CBOR.deserialiseCbor CBOR.decodeAddressPayload addr diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Launch.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Launch.hs index bec3c4a2a85..e87788e571f 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Launch.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Launch.hs @@ -4,6 +4,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NumericUnderscores #-} +{-# LANGUAGE PackageImports #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index a6671f1aca6..6f5023c75b3 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -5,6 +5,7 @@ {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE Rank2Types #-} @@ -79,6 +80,7 @@ import Cardano.Wallet.Primitive.Types , EpochNo (..) , GenesisParameters (..) , PoolCertificate (..) + , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolMetadataSource (..) @@ -95,8 +97,6 @@ import Cardano.Wallet.Primitive.Types , getPoolRetirementCertificate , unSmashServer ) -import Cardano.Wallet.Registry - ( WorkerLog, defaultWorkerAfter ) import Cardano.Wallet.Shelley.Compatibility ( Shelley , StandardCrypto @@ -112,7 +112,14 @@ import Cardano.Wallet.Unsafe import Control.Concurrent ( forkFinally, threadDelay ) import Control.Exception - ( SomeException (..), bracket, finally, mask_, try ) + ( AsyncException (..) + , SomeException (..) + , asyncExceptionFromException + , bracket + , finally + , mask_ + , try + ) import Control.Monad ( forM, forM_, forever, void, when, (<=<) ) import Control.Monad.IO.Class @@ -284,8 +291,9 @@ newStakePoolLayer nl db@DBLayer {..} worker = do case r of Left e@(PastHorizon{}) -> throwE (ErrListPoolsPastHorizonException e) - Right r' -> pure (ApiListStakePools r' - (Just . ApiT . Iso8601Time . posixSecondsToUTCTime $ lastGC)) + Right r' -> pure + $ ApiListStakePools r' $ Just $ ApiT + $ Iso8601Time $ posixSecondsToUTCTime lastGC where fromErrCurrentNodeTip :: ErrCurrentNodeTip -> ErrListPools fromErrCurrentNodeTip = \case @@ -328,7 +336,10 @@ newStakePoolLayer nl db@DBLayer {..} worker = do _forceMetadataGC tvTid = -- We force a GC by resetting last sync time to 0 (start of POSIX -- time) and have the metadata thread restart. - bracketSyncThread tvTid (atomically (putLastMetadataGC (fromIntegral @Int 0))) + bracketSyncThread tvTid + $ atomically + $ putLastMetadataGC + $ fromIntegral @Int 0 -- Stop the sync thread, carry out an action, and restart the sync thread. bracketSyncThread :: TVar ThreadId -> IO a -> IO () @@ -439,6 +450,7 @@ combineDbAndLsqData ti nOpt lsqData = , Api.margin = Quantity $ poolMargin $ registrationCert dbData , Api.retirement = retirementEpochInfo + , Api.delisted = poolFlag (registrationCert dbData) == Delisted } toApiEpochInfo ep = do @@ -707,12 +719,27 @@ monitorStakePools tr gp nl DBLayer{..} = -- | Worker thread that monitors pool metadata and syncs it to the database. monitorMetadata +<<<<<<< HEAD :: Tracer IO (WorkerLog Text StakePoolLog) -> Tracer IO StakePoolLog -> SlottingParameters +||||||| parent of 5bbb4ba4a (Redo the database layer) + :: Tracer IO (WorkerLog Text StakePoolLog) + -> Tracer IO StakePoolLog + -> GenesisParameters +======= + :: Tracer IO StakePoolLog + -> GenesisParameters +>>>>>>> 5bbb4ba4a (Redo the database layer) -> DBLayer IO -> IO () +<<<<<<< HEAD monitorMetadata tr' tr sp db@(DBLayer{..}) = do +||||||| parent of 5bbb4ba4a (Redo the database layer) +monitorMetadata tr' tr gp db@(DBLayer{..}) = do +======= +monitorMetadata tr gp db@(DBLayer{..}) = do +>>>>>>> 5bbb4ba4a (Redo the database layer) settings <- atomically readSettings manager <- newManager defaultManagerSettings @@ -727,12 +754,11 @@ monitorMetadata tr' tr sp db@(DBLayer{..}) = do FetchNone -> loop (pure ([], [])) -- TODO: exit loop? FetchDirect -> loop (fetchThem $ fetcher [identityUrlBuilder]) FetchSMASH (unSmashServer -> uri) -> do - tid <- - forkFinally - (gcDelistedPools tr db - (fetchDelistedPools trFetch (toDelistedPoolsURI uri) manager) - ) - onExit + let getDelistedPools = + fetchDelistedPools trFetch (toDelistedPoolsURI uri) manager + tid <- forkFinally + (gcDelistedPools tr db getDelistedPools) + onExit flip finally (killThread tid) $ loop (fetchThem $ fetcher [registryUrlBuilder uri]) @@ -769,8 +795,16 @@ monitorMetadata tr' tr sp db@(DBLayer{..}) = do toMicroSecond = (`div` 1000000) . fromEnum slotLength = unSlotLength $ getSlotLength gp f = unActiveSlotCoefficient (getActiveSlotCoefficient sp) - onExit = defaultWorkerAfter tr' + onExit + :: Either SomeException a + -> IO () + onExit = traceWith tr . \case + Right _ -> MsgGCFinished + Left e -> case asyncExceptionFromException e of + Just ThreadKilled -> MsgGCThreadKilled + Just UserInterrupt -> MsgGCUserInterrupt + _ -> MsgGCUnhandledException $ pretty $ show e gcDelistedPools :: Tracer IO StakePoolLog -> DBLayer IO @@ -782,20 +816,19 @@ gcDelistedPools tr DBLayer{..} fetchDelisted = forever $ do let timeSinceLastGC = currentTime - lastGC sixHours = posixDayLength / 4 - if timeSinceLastGC > sixHours - then do - delistedPools <- fmap (fromMaybe []) fetchDelisted - atomically $ do - putLastMetadataGC currentTime - delistPools delistedPools - else do - -- Sleep for 60 seconds. This is useful in case - -- something else is modifying the last sync time - -- in the database. - let sec_to_milisec = (* 1000000) - sleep_time = sec_to_milisec 60 - traceWith tr $ MsgGCTakeBreak sleep_time - threadDelay sleep_time + when (timeSinceLastGC > sixHours) $ do + delistedPools <- fmap (fromMaybe []) fetchDelisted + atomically $ do + putLastMetadataGC currentTime + delistPools delistedPools + + -- Sleep for 60 seconds. This is useful in case + -- something else is modifying the last sync time + -- in the database. + let ms = (* 1_000_000) + let sleepTime = ms 60 + traceWith tr $ MsgGCTakeBreak sleepTime + threadDelay sleepTime pure () data StakePoolLog @@ -811,6 +844,10 @@ data StakePoolLog | MsgFetchPoolMetadata StakePoolMetadataFetchLog | MsgFetchTakeBreak Int | MsgGCTakeBreak Int + | MsgGCFinished + | MsgGCThreadKilled + | MsgGCUserInterrupt + | MsgGCUnhandledException Text deriving (Show, Eq) data PoolGarbageCollectionInfo = PoolGarbageCollectionInfo @@ -839,6 +876,10 @@ instance HasSeverityAnnotation StakePoolLog where MsgFetchPoolMetadata e -> getSeverityAnnotation e MsgFetchTakeBreak{} -> Debug MsgGCTakeBreak{} -> Debug + MsgGCFinished{} -> Debug + MsgGCThreadKilled{} -> Debug + MsgGCUserInterrupt{} -> Debug + MsgGCUnhandledException{} -> Debug instance ToText StakePoolLog where toText = \case @@ -884,5 +925,10 @@ instance ToText StakePoolLog where MsgGCTakeBreak delay -> mconcat [ "Taking a little break from GCing delisted metadata pools, " , "back to it in about " - , pretty (fixedF 1 (toRational delay / 1000000)), "s" + , pretty (fixedF 1 (toRational delay / 1_000_000)), "s" ] + MsgGCFinished -> "GC thread has exited: main action is over." + MsgGCThreadKilled -> "GC thread has exited: killed by parent." + MsgGCUserInterrupt -> "GC thread has exited: killed by user." + MsgGCUnhandledException err -> + "GC thread has exited unexpectedly: " <> err diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 84fe7e435b7..9c8c5cc63a7 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1289,6 +1289,7 @@ components: - cost - margin - pledge + - delisted properties: id: *stakePoolId metrics: *stakePoolMetrics @@ -1297,6 +1298,8 @@ components: pledge: *stakePoolPledge metadata: *stakePoolMetadata retirement: *stakePoolRetirement + delisted: + type: boolean ApiListStakePools: &ApiListStakePools type: object @@ -3495,7 +3498,7 @@ paths: tags: ["Stake Pools"] summary: Maintenance actions description: | - Performs maintenance action on the stake pools, such + Performs maintenance actions on stake pools, such as triggering metadata garbage collection. Actions may not be instantaneous. From 3192c4e62a321b445e8ba7e4af7883e6989df189 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 26 Oct 2020 15:07:26 +0100 Subject: [PATCH 09/29] Add property test for `delistPools` --- lib/core/cardano-wallet-core.cabal | 1 - lib/core/src/Cardano/Pool/DB/Sqlite.hs | 6 +- .../src/Cardano/Wallet/DB/Sqlite/Types.hs | 1 + .../Api/ApiListStakePoolsApiStakePool.json | 6130 +++++++---------- .../data/Cardano/Wallet/Api/ApiStakePool.json | 283 +- .../Wallet/Api/ApiTStakePoolMetadata.json | 87 +- .../test/unit/Cardano/Pool/DB/Arbitrary.hs | 2 +- .../test/unit/Cardano/Pool/DB/Properties.hs | 42 + .../src/Cardano/Wallet/Shelley/Pools.hs | 2 +- 9 files changed, 2600 insertions(+), 3954 deletions(-) diff --git a/lib/core/cardano-wallet-core.cabal b/lib/core/cardano-wallet-core.cabal index 17cc4d3c5e5..eeb6ec264b2 100644 --- a/lib/core/cardano-wallet-core.cabal +++ b/lib/core/cardano-wallet-core.cabal @@ -95,7 +95,6 @@ library , stm , streaming-commons , string-interpolate - , string-qq , template-haskell , text , text-class diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 45290d5914e..c420156afce 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -757,7 +757,8 @@ activePoolLifeCycleData = DatabaseView "active_pool_lifecycle_data" [i| margin_numerator, margin_denominator, metadata_hash, - metadata_url + metadata_url, + active_pool_registrations.flag as flag FROM active_pool_registrations LEFT JOIN @@ -812,7 +813,8 @@ activePoolRegistrations = DatabaseView "active_pool_registrations" [i| margin_numerator, margin_denominator, metadata_hash, - metadata_url + metadata_url, + flag FROM ( SELECT row_number() OVER w AS r, * FROM pool_registration diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index bf6ecc1ae25..a03c4711d18 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -675,6 +675,7 @@ instance PersistField DerivationPrefix where instance PersistFieldSql DerivationPrefix where sqlType _ = sqlType (Proxy @Text) + ---------------------------------------------------------------------------- -- Other diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json index e2eeb259c62..2944880b1ac 100644 --- a/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json @@ -1,7668 +1,6254 @@ { - "seed": 1173689658848997361, + "seed": -192646938319585121, "samples": [ + { + "pools": [] + }, { "pools": [ { "metrics": { - "saturation": 4.901540561655154, + "saturation": 3.7921480426498393, "non_myopic_member_rewards": { - "quantity": 561094230526, + "quantity": 527020348225, "unit": "lovelace" }, "produced_blocks": { - "quantity": 404472, + "quantity": 4633041, "unit": "block" }, "relative_stake": { - "quantity": 76.7, + "quantity": 94.97, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1881-04-06T13:00:00Z", - "epoch_number": 15833 + "epoch_start_time": "1887-06-29T11:00:00Z", + "epoch_number": 23703 }, "cost": { - "quantity": 192, + "quantity": 254, "unit": "lovelace" }, "margin": { - "quantity": 41.31, + "quantity": 56.78, "unit": "percent" }, "pledge": { - "quantity": 24, + "quantity": 46, "unit": "lovelace" }, - "metadata": { - "homepage": ">r󳷣瑾wsNKX󻢢􄂜\u001au]\u001f󂫔񦲦񱌉\"I򑡩󰗔]や(.\u0016󫂪3\u0013>}h}>𔙣\u0005+\u0006\u0016o5g\u000eh󫘚E=𛰣񥰺񇛪\u0006'񻢉L8񝸼t\u001a򷎢'kzT𷛜I\u001e\t󫩻z", - "name": "\u001f㔸wJ𛋊JL\u0004򓅨\u000b", - "ticker": "\u0012񽗚񅈃", - "delisted": false, - "description": "\u0005u,󀱡|Rj\u000b󾒶wᧃ \"\u0011\u0002nu򄈃Pgb70k򫰺\u0005󂺌\u001as\u001b񇟿W\u00189򆄢\u0012򪑯U㘊򞁲\u0014/+񖅡𓇯H񺲐2\u0016*>\u001e󡿍L\u0001/I>􎪊[J\u0006\u000f3I/\u001c\u000f񄕍\u000c_pk$\u000b\u0007Ek\u001d󭻠wG\u001b򗨏!򂮟\u001a򴴎E\nf򠁥򾹺\u0011f􇢿_񥃹ኍh>\u000cE󘇬𗛢)y" - }, - "id": "pool1xm5md6mrte2s4zextf3upzjywgu84xcvvraw6s0mew0ky9dg308" - }, + "delisted": false, + "id": "pool13y5k6n78s8x4wtn4nwu5nlrngczvytv5vrhlst5fqwtfjdxxs33" + } + ], + "last_gc": "1882-12-23T10:16:57Z" + }, + { + "pools": [ { "metrics": { - "saturation": 0.14006311676891758, + "saturation": 4.6542492671556674, "non_myopic_member_rewards": { - "quantity": 856368765897, + "quantity": 549122955411, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6225718, + "quantity": 12648688, "unit": "block" }, "relative_stake": { - "quantity": 2.37, + "quantity": 38.96, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1877-03-01T00:46:00.91299904808Z", + "epoch_number": 22664 + }, "cost": { - "quantity": 181, + "quantity": 253, "unit": "lovelace" }, "margin": { - "quantity": 28.57, + "quantity": 38.68, "unit": "percent" }, "pledge": { - "quantity": 109, + "quantity": 162, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "\u000c78FZW\u0011r񚔖!iA𩏑\u0016TT𙝠4z󥠰V\u0005򳉭\t<뚛@\u0015\u0004(#j\u0012l󡫗oZ𰩉SG\u0000n(򶾎\u0008Ep񼣓", - "name": "\u00180\u0000]_aQ󅠓sR:<򠆃#\u000e\u0019v7X_𪴄k8C񡝽汭K.w`\u0011}2c𳬵(E\u0016t\u000bo\u0001R\u0010|lx\u0017-", - "ticker": "񑂾K^", - "delisted": false, - "description": "\u0008󒛤򍪦򠡤(FJ*󽅯򹫇\u0005H\u000f\u001b{yR9󏾚k\u000bq\u0008B\u0000hUDO󫚘\u0000\r𑭓񶧧{Is|\u0015" + "homepage": "\r\u000f󷢚\\\u0010XQ2B\u0001>NFj\u001aT~].'\u0000\u0018(\u0018X񹮬󞢷\u000eW\u0013𧕓񅃊񈝤r2\u0000\u000c򸘼uI𖅌+t5\u0010\u0013VwT\u0007V$\u0012\u0004W򜖷\u001d87[𳐜𨕋]\n𢭴\u0004\u001el", + "name": "I񓉬+𷭔񏯅k兹13񸙤񻲧쥴 U\r\u0003a𦹜hWMD", + "ticker": "V񲞕񹝕z5", + "description": "\n-򑛟򮕖\u000b󃳩7\u0007>;񀥘󔗹u􆸗񁺲iX*\u0000\u0014cy}\u001c6y=e8vW󄸙򷙿:F\u0002O\u000e6\u000e*<\u0005\u000en 򖙂\u001d𵩖n^B𢮱򖎯+d;󰷓\"h񖠩򱺵񿎅S?󀳊8󣖪>Die$neA\u0003g o󷨖xH\u001f\"M򜼮:i{" }, - "id": "pool17d66m0qyksx55jrhux9x3hf8a6thnyjxkqkpp6x07j0l76ppe0e" + "id": "pool19f7837kadvc69rp59l893083tanudat0qxwyc7xmgt68u8a0ufa" }, { "metrics": { - "saturation": 2.9722685576770158e-2, + "saturation": 2.056673543665361, "non_myopic_member_rewards": { - "quantity": 339770923441, + "quantity": 666622673248, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4360051, + "quantity": 19482848, "unit": "block" }, "relative_stake": { - "quantity": 14.25, + "quantity": 94.2, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1867-02-17T11:49:19.539245232973Z", + "epoch_number": 9307 + }, "cost": { - "quantity": 48, + "quantity": 122, "unit": "lovelace" }, "margin": { - "quantity": 30.06, + "quantity": 94.43, "unit": "percent" }, "pledge": { - "quantity": 32, + "quantity": 45, "unit": "lovelace" }, - "id": "pool1r22tjt2hvhmg85h768s3egmssv2ylrtxy7vrwxzz4el4yz65k8z" + "delisted": true, + "metadata": { + "homepage": "+\u0002󝢱T\u001b𹬦\u0007U񱠖R", + "name": "cH񗲅\u0004Ad񜝖򚽂", + "ticker": "𻍈\u0018\u0012\\" + }, + "id": "pool1yg4gceqrpntv827mv843rlrj52fgl5dagpkzxe3pwnld62k26nq" }, { "metrics": { - "saturation": 0.7533042969518716, + "saturation": 3.7790963729179214, "non_myopic_member_rewards": { - "quantity": 476415617299, + "quantity": 479785678413, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8501854, + "quantity": 7982450, "unit": "block" }, "relative_stake": { - "quantity": 15.34, + "quantity": 0.18, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1865-10-23T20:00:00Z", - "epoch_number": 1199 + "epoch_start_time": "1868-10-20T09:00:00Z", + "epoch_number": 20773 }, "cost": { - "quantity": 114, + "quantity": 51, "unit": "lovelace" }, "margin": { - "quantity": 81.67, + "quantity": 1.29, "unit": "percent" }, "pledge": { - "quantity": 152, + "quantity": 100, "unit": "lovelace" }, - "metadata": { - "homepage": "d\u001b`𔊪-\u0000󱌃󐝵򂵻gR@\u001d<#\u0002\u0017\u0005b򐝴𲬲򣕑󚆫Q~󐞸\u0008:󣓳\"mX@\u0015𚴮 I}\u00075Aq^󑦭򅔆dq6𥥶󢳶`\u001a\u001c򮎣񽔸\r\u0003u󙢸_\u0000V􌻸𵾋wY鑻񹌥𥳕񦜌\u0010񱔒$\\3cJ.zE󣄘@]l\u001b񕁊q\u0014\u0000󚕓-]1򑫱qj", - "name": "3sh3Dp\u001f񛻹\u0007𶣆􀨒R麂9챓\u0012|D񁶯񘮯yzS񂣃=[)\u0012\u001bX𸅤񵟋7lu󾙶𼐨yu\u001c\u0004󚊋򥓗B\u001c", - "ticker": "񗅚1\u0005", - "delisted": false, - "description": "l9\u0019\u000f󯊋Z\u000c(iV\u0012ap\u001e\u001f@" - }, - "id": "pool1dyanjfeugapfr83aqqrrfkul3ukd5dy542gcszwa0gxmzmn5e5t" + "delisted": false, + "id": "pool1jdfzdh6c9h7y0fdj4cd4umyphnnpwhwes7pegv9cl8j2g0e6cr2" }, { "metrics": { - "saturation": 1.6819066447284063, + "saturation": 4.767801844425363, "non_myopic_member_rewards": { - "quantity": 142645550853, + "quantity": 865887392747, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4260501, + "quantity": 8387533, "unit": "block" }, "relative_stake": { - "quantity": 91.93, + "quantity": 85.54, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1898-08-11T08:00:00Z", - "epoch_number": 9954 + "epoch_start_time": "1893-10-13T04:53:52.94615777101Z", + "epoch_number": 19382 }, "cost": { - "quantity": 65, + "quantity": 163, "unit": "lovelace" }, "margin": { - "quantity": 49.89, + "quantity": 85.78, "unit": "percent" }, "pledge": { - "quantity": 233, + "quantity": 101, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "z\r\u001b.0-)2@񁠮", - "name": ".8`S򸗳\u0006p󳈉j;s򮐢\u0003'񣠦", - "ticker": "\\Y\u001d", - "delisted": false, - "description": "󫎯\u0014\u001d󟝾*_Y9򙷙󲚑%󲘂􉨲7򷻬\u001d򝺃I)􃶒U3 dO챕E񐵱d\u0004񭣦hw򱦶V`a.$B]\u0015\u001dh\u000e򦟶􃀫񭅇\u001a4FyO򽹗D𰡇1󞢪򵈣𗜇m/򦷆M󛱳gM7𗂉\u0014򿺄!\u0014<𩮱󔇢򋛻\u0005􁫃D\u0012󩔥⡣\\򑿼hk\u0002+UC\n6e`\u0006(c-񗖰\u001e𑙨P󒿹p򌁢_򁧿`\"\u0003񀬣$)\u0018q񫬷\u001aA\u0008C򼶔𥢵\u001b_i\r\\|󨻗Z\u001d󹭕RH\u001a򶱔1J𥲴[&M\rVy񹀤󉜦D2􀭋^wt18t0U󄮥\u0004y\u000e" + "homepage": "𨘱3𧠩_jVuex񅣿\u000e?y\u0013㵗w1\u0012r򐖾", + "name": "e-n񁂭wBSO0𔯦C\u0001d񑫓_򛉂񔳉wv􆮎u+\u0018h\u0008O\u0016N򻜂PC^񏐀2{\u0016", + "ticker": "\u00076!.c", + "description": "\u0011\n\u0018򲖼𝐥@|񌷆\r񕙣@\u0014w:9󥎏3nPO򧵘m \u001e3s򤗇\u0007#U񯙒z\u001a>򂺀H\u0017\u00030򧽵􆐶tr 󂗡\u001cw󪟒:󦨲5\u001b\u0016񭃇UHLv[.􎝟A𲴌)𐛓g_'y񆂞{!\u001dl \r\u0016F\u0012&XJ\u0012;D:򿿕=Rm򵉘\u000e{S\u0010񉭢\\GK𡽔+{\u0002KwJO\u0006<\u000c𶼹𽙓f賯9񦿌򺷸􌲬l򑙾\u000f򋞚$fq\u0014Uh𱦸8񂲅t*|𨧫D,\u0007\u0000i\u000ce\u0000\u0017\\P|󷛥V^_h񺸶 񦲼o2c?3𣥸򄙇h򊕰\u0010񺗧B\u0011L|V񶷗Ox}" }, - "id": "pool17sj4fgct2n7j2h2x5txrlc73d8fmnjtl5tgvueum6mkqxgdzuaq" + "id": "pool1d7u0898eg4c57aggnafaul5lehn8nj3enpx74d87z0lvqcrazvx" }, { "metrics": { - "saturation": 1.1353949119140994, + "saturation": 0.2934822079544708, "non_myopic_member_rewards": { - "quantity": 479265368862, + "quantity": 921029940368, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18158913, + "quantity": 2587162, "unit": "block" }, "relative_stake": { - "quantity": 19.12, + "quantity": 55.99, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1881-01-14T08:00:00Z", + "epoch_number": 7787 + }, "cost": { - "quantity": 96, + "quantity": 228, "unit": "lovelace" }, "margin": { - "quantity": 83.48, + "quantity": 66.76, "unit": "percent" }, "pledge": { - "quantity": 18, + "quantity": 32, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "m󛊬i\u0017󼒙Xd*򵪖O񴽬T񵀻&YgG􆅏J#\"|~񉼵#6\u0018~򀺔X򄼑\u0019r|\u0011vE [yT񓍩HG󥎨󎨫d'򨱼1{VAZ\u0003t\u001exQ1󅬔􌦝򭲛\u0015:󥽛_\u0019$\u0003+Qf𫓏RSW3기L\u0002|Q\u000bao\u0001", - "name": "𧎻a#&|𦆁򓐦w񖡺񽁞󵚐񅓭\u0007~40", - "ticker": "ISd􍍹_", - "delisted": false, - "description": "񩔹lz􁳹V\u001aW󎫄-򧝳\u0012򶙚򷺳~\u0007\u0008\u0017󠌍~\u0016\"+id9C*`=\u0019sJ񔗲񦥻stpHw􄏷\t𥀲ah񜘺񢫍ef\u0016hK񬕧\u0012DA\n\u0006EB\u0001L󱞧/uL􏆄𝁂W􌋩BO=>\tI𕭑k񱊥&iAx􍴹'2hl򖃎Пaq󆤿),\np\u0017񤴳}\u0001\u0013\u000f\u0015!8򗘩]\u0000tL񠿅񐖊\t􎅈$A=\u0005\u000e񛓘\u0019򆊏󽛗𔑐\r>G\u0005BEE𼤲\u00118򀿊\u001bY𬖇%񫱓\u0004\u001c򄄟NA\"󠑱\u0006:\u0000/\u0000\u0004𴼣@E3󁻢8򅤎5/􁦈z\\" + "homepage": "\u0002SN\u0019fs\u001f\u00198𿭊U򭠒\u0004O>.J%\u0008y\u001eU\u001bI򓚟Plp*񙄌 ", + "name": "\n񚬄=M\t5d\u0019\u0007\u0015>_\u001f\u0006E'(3\u0014\u000f󽵲64󉇷񌈙)Cr\t񌨯򝱳󆉴}fY5𵃍\u000e0Y\u001b(\t\u0001k󠭖\u0007a", + "ticker": "cV\u001a򒑦", + "description": "񛆈}O1m\u0012" }, - "id": "pool173ecg2ry8v5a7apkcn48wgxwx0hcj9vcuq8lu222pxz2clp893k" + "id": "pool1n4tddjtxykt9tyfjc49enlcg6gr5zartpk748tgph7grc4nd8v3" }, { "metrics": { - "saturation": 1.4033362432061143, + "saturation": 2.9286522805411295, "non_myopic_member_rewards": { - "quantity": 55391111478, + "quantity": 42114145440, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17378514, + "quantity": 14154536, "unit": "block" }, "relative_stake": { - "quantity": 38.97, + "quantity": 9.08, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1891-02-26T04:32:46.691592923986Z", + "epoch_number": 27177 + }, "cost": { - "quantity": 203, + "quantity": 0, "unit": "lovelace" }, "margin": { - "quantity": 77, + "quantity": 48.37, "unit": "percent" }, "pledge": { - "quantity": 253, + "quantity": 19, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "򘯱/񆨰\u0003񨒩𲸧[)Se󋖝H}Y򵫺\u000f\u0012Jo^W򪾀qX񸀧퉷򢧶8gC󪕣Y􏮊\u0002%v@󗞠!(y\u0013񜺛+rG򑈕󮖀S*񉖗򻋉򰆱\n`񜘇$hYPNTeL.'4#45`P\r󰺳\u0006Ig\u000b6􉛾񯎛^l񮤶Z", - "name": "񹌉2P򭨢W񶺝\u0003x5_󾥤a\u0011`\ny\u001a􉋜5y񿲚4,򯣌#4_񺞃@𑏌c4X}\u0002o𪛖\u000c)\t\u001b󪸄\u0014dw󈡂򑶿5񳚧\u0005\u0013T$Y^󮏘b\u0016+L􁌏q\u00029񯌴d.", + "name": ";fB4#`􎰦-\u000f\u001c\"\u001c}󏀜/H\u0013헨#", + "ticker": "\u0005O󊡘\u0014\u0017", + "description": "%4򎱶񇵣󌊓x\u0005t򏹧\u0016\u0019\u001b0O6򿶣񠝃񚋵fjF\u0007q=\u0005󸉁񈇑x7\u001c𑠣I#MZj𻀫B󾁻a#󬴿🼀ecqS 񦀓\u0016\u0001𿲅\u0004+\u0006Gj\u0016k􏹭xiFf_a🽌6Uv~\u0003􌄮򩤧𸠜񇬃\u0007選񏱂\u0000oD#\u0014FY򞿷q\u001e.\"\u000bw" }, - "id": "pool1um5dw96k52hn6gr35vg5djc2phn0ynqddar7j66kr5at2jv6tth" + "id": "pool1le9thx48dtyu23kx5c3zf57j756sn3z4pwtjkj2f2sd9yx4gp6c" }, { "metrics": { - "saturation": 3.6998496742502534, + "saturation": 0.12031882893309698, "non_myopic_member_rewards": { - "quantity": 754472402938, + "quantity": 672421328899, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4243161, + "quantity": 7929609, "unit": "block" }, "relative_stake": { - "quantity": 86.5, + "quantity": 21.33, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1900-10-05T23:00:00Z", - "epoch_number": 1367 + "epoch_start_time": "1876-03-11T05:00:00Z", + "epoch_number": 23868 }, "cost": { "quantity": 151, "unit": "lovelace" }, "margin": { - "quantity": 7.91, + "quantity": 12.32, "unit": "percent" }, "pledge": { - "quantity": 7, + "quantity": 11, "unit": "lovelace" }, - "metadata": { - "homepage": "d2󫼸\\𾥍񋘨\u0016?򟲲$ꈶW󄤸񐳊@;\u0016\u0002Vj\u001bk\u0005k\u0003`򰂵򝎥M,RV􆆼{^Qr}*hY]𡚅Y󳦕\"򘛺󹘉tj'_򘙖[x\rR8B\u001aa􃉑A\u0014$\"\u001fw\u000fJPI𠱒+wgGha4􈧝R", - "name": "\u0004y𐍮򅏕5&_N\"/󄙪j1]{H\u0004𴩠xt)b򚧦*򬰡y2:\u0010\u0000 _\n<񽑔*򸥕qyQ", - "ticker": "^T񑕽ⵠF", - "delisted": false, - "description": "\rJ􏟌\n\u001b񚮪򸬎(\u0016~󆳀g+\u001cM=pn.4G\u0016ru!\u001b]\u0017𵷼c󓫮\u0003-#ー򒂻z\u001cL񼊈󉸺x񇲶󝙉k\th!\"j󋊰򭁝e=򔈨k𸦃#}R%𙆯~y\u001c|.?򾙢򡩏I\u001ag켽򮩯J\u0013fkU\u0002Q9񦂰=󸋿m@H2𩏽qG񠀁񋣬\u0013Y2i\t`C8\u0016BiI\u0002\u0018T\u001bH򆆒T 0\"`񚂜r\u0000%F\u0000񬶇{󅄪󩁱\u001b󴚛re\u000b *lW\u000c8\u0011r𺛄󽒬b)p򑨲E\u001b򌪜𞁔򪈠[\u0000o򖕐񹵄򷧂MSb󲿭@ww퓫\u0007c4󻳭~h\u000b],}5AM\u000bnK􇙥񑀧{S\u0005󼐖:Uq\u0017\u0014`򑗉jz;\tGT\u001f*?7p򊩰=\u001as\u0012􄱠H󕞡p" - }, - "id": "pool14vaqgq58nvstuwmare39svegtds4uql0nd9d8tmwpmflyhj6g82" + "delisted": true, + "id": "pool1p3f4qs3r5k7nxd5me4zkpn35a29gpjsx66pxrhzszlsgg7efcz9" }, { "metrics": { - "saturation": 3.088965000549418, + "saturation": 3.8345091609412094, "non_myopic_member_rewards": { - "quantity": 15961356560, + "quantity": 834794552994, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14618268, + "quantity": 21386822, "unit": "block" }, "relative_stake": { - "quantity": 7.03, + "quantity": 82.88, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1897-03-27T01:54:43Z", - "epoch_number": 27229 + "epoch_start_time": "1864-10-31T03:38:36Z", + "epoch_number": 30241 }, "cost": { - "quantity": 170, + "quantity": 116, "unit": "lovelace" }, "margin": { - "quantity": 84.99, + "quantity": 32.27, "unit": "percent" }, "pledge": { - "quantity": 223, + "quantity": 120, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "KO^򮆶f9\u0007\u0011􅊏!lb򍮟P󉫤Eg=\u0002\t.򳪭񨐴v򖥙\u0006z񵾴򃡃𻘑\u000e7򥨙\u000e\u0014\u000fx^51c\u0003\u000c.򀎵uT򻻃,v\u0014𖗐b<𦆒x:򮨥\u001b<󄙘𗖾H_qohO1(k󢠬n\u0007򌚛\u00158𫈇\u0016z𚰾", - "name": "t\u001fk$\u000e򝘩\u0012(x򑎼󂹹𞡛MNi󻿀\u0010\u0010򼿸񉪑&\re\u000e򓀉m!\u0002򢍰*\u0018/\u0017D|W&h򯅋ꪦ\u0010𨃪rt񹉷9򀿓\u001e򀫷", - "ticker": "(D%", - "delisted": false, - "description": "_򸤇񖼳rJX\t\u0007(-A𔎦1\u001d6𤉎f{? c󰶣񋗰🨖򕴊Kd\"\u0001\u0005E\u001a;򽲩Xd󦀵\n\u0018󇋱B.p&8fBZyg.𝴵Y\u0016+\u0003yf񞪄\u000fs\u001bf񀺀񀩗G\u0002\r\u0001}\u000cH󺓍𭋺\u0010Lg󆄧-\u000f񁄉\u000eP\u000fs>󈂗34zH򿽜<\\=\u0018\t`\u0005e\u0018\u001c\n<󷆶9\u0010񇾻8A6\u0018Z`\u001c#.I>򎱛񗢒񓧔?quP\u0006񩧍\n?󤐘󆹆\u0006\u0019\u0019񬲑j񱔊\u0017uVR􌴛󬔭󺘨7󉕇8r9\u0000򗯊d񂽲/\u0019F󻎶\\\u000c\"xv:39lV񇣈􏚰h󓬼򊬏\\\u001c[\u0019򎖴񨯞\u001f󿵪FB*[x\u0013=" + "homepage": "\u0001\u0011 񥣵n\u001cI(\r𯚞񦌍\u0013>S:tGbxB󢣇~򱮽?Y𶭾X\u001bc=򧰌$d5(\u0003򚰲񌡥([;&IP񋸑񆵝񐷧A\t𯂙򮭸c𭋩\"Lx^󔉄\u001a􁃟jk\u0014y\r򳊸{9􁡍𾉁󥶈", + "name": "q񘊽 \u001e\u00182D\u0019񐱷\u001c~t<\u0017ds", + "ticker": "𚳣\u0016l🪱\u0013p\u0011񥴂\u001c\u001b,\u0016No+\u000f󋱄񤝒\u0003\u0008\u0010k,\u0001\u001cSmf.󕤄򆂠O􊂣l\u0012\u0000k\u0018\u0004U(\u001c'񅎷\u001e񔈫\u0017 \r%򈚧R򎡟 O\u001f󨂲񅒪,􄥀r񘌇>\nu󝸼$n_\u0019\u000ck󭳯u\u0016#\u000e-\u0006\u0013eo񲏂t;=l\u0018Ⅻ򵉋\u0001\u0017iP=`j)K񬁆ɂ𲊒򷛊\u001d\u0016+II𮉒$}󅖜\u0008/0􈄣\u001e𜹱󧆁Q\u0019]h\u0001m]򃣾}=𨴠1\u0007W\u000b\u0004\u0001l(l*%}sPOb\u0012򤻐\naG\u0003\u001f󚙉2G󺥙O\u001e6\u0001" }, - "id": "pool1esu28hg4z4gdwe49gsqsxl6a6gkesrznaw3yt4ew8shycxna6ah" + "id": "pool1rxktdk37udf9zuq6xw8jt4xts4zspurkmav3mplz0y02spa85gl" }, { "metrics": { - "saturation": 0.45128550169057535, + "saturation": 1.0799814730338713, "non_myopic_member_rewards": { - "quantity": 666822337654, + "quantity": 504952717537, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10517648, + "quantity": 8982202, "unit": "block" }, "relative_stake": { - "quantity": 18.03, + "quantity": 87.3, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1883-05-29T06:00:00Z", - "epoch_number": 11073 + "epoch_start_time": "1903-03-07T22:00:00Z", + "epoch_number": 17760 }, "cost": { - "quantity": 133, + "quantity": 182, "unit": "lovelace" }, "margin": { - "quantity": 89.85, + "quantity": 99.46, "unit": "percent" }, "pledge": { - "quantity": 67, + "quantity": 120, "unit": "lovelace" }, - "metadata": { - "homepage": "\u001e[ZfOA񉯢H\u0003\u00166\u0015\u001c\u000f`G\\jG񨷹1򥬚1픞򖰬󺀒fBn\u001eMi􎗫𵜂Cs맞q\u001f򅍔Kx𚫾<[\u0000Sc3\u0011\u0005𒮷󾶼[_\u0003P𵄫򕱲\"\u0012'!𴲱Wⱝ\u0017򶻵jc\u0014\u0012\u0004\u0018o)!򮵍q[\u0000\u0015blk 񡩲G}[.z񵩿\"", - "name": "񛁋T*`H\u000f.I\u0017󎼇F9WsFRU𧴷뻗\r񐒡i|:", - "ticker": "\u000b󔚹𲮹𯂨򤆟", - "delisted": false - }, - "id": "pool1ksgr6r8sgxgka527kzprqnx37yx00wxu0twtlm25qqcr2hvz60r" + "delisted": true, + "id": "pool1fcq3732yj54w0efd8hz7ehs6zz9gx2snp2clyykwz7y42dpya4d" }, { "metrics": { - "saturation": 2.1386943238362583, + "saturation": 2.8950433542548493, "non_myopic_member_rewards": { - "quantity": 228955296353, + "quantity": 236055041686, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14694702, + "quantity": 10264643, "unit": "block" }, "relative_stake": { - "quantity": 29.61, + "quantity": 21.63, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1886-01-02T10:00:49Z", + "epoch_number": 20799 + }, "cost": { - "quantity": 118, + "quantity": 91, "unit": "lovelace" }, "margin": { - "quantity": 37.29, + "quantity": 31.19, "unit": "percent" }, "pledge": { - "quantity": 123, + "quantity": 217, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "8_6򵻝6\u0017'lE\u0015\u0002D5T\u0001Xt\"𕄅`󨦧\u001c", - "name": "\u0011\u0008񭃱[w􇪔\u001b,}򯻢󥪹$]6#%q󡏘T,\n󜞠\u0010󐂃CI\u0012", - "ticker": "\u000cG2N", - "delisted": false, - "description": "\u0002skH\u0016,󺷮Uf󺕛48󜕾9h\u0005*NQ񒄓m\u0001\u000e)!\u0000H򙩹w>T\u0011\u0017F\u001aJ񷔟򊙟d:d#𩓕󞌕i󁆴󶣣d񨟕E򁍷񘟎񉃀G=򁌧;l𨿵񪭸\u000b>뿛񗫿󤶍o]`񉖵{\"󆫗'z𶤠-v󕯷3𛙫?󀥭$#󡑙绣\u001c򳺃󄘵s\u0017򒰡I\tkG\u0017$" + "homepage": "wC󪐅򝲀񾽐d\u000f;*\u000f15r\u0004\u0017c!񤚁+(/\u0011򴔈W5fz6򨛌y񄠆򆊹(珆+e򈥚3z\r\u001f\nOk5𳹍>w\u0015\u0013񂤊򔥂A򒇺񔞱󸱿P.\u001c" }, - "id": "pool1qyj7q8msurfq69pww2jt9uzquz4d5s80cyhv3w5fqzedxgde0vc" + "id": "pool1sj0d7fyhflp84ew5da4gkzegfvpjknuj48mxrdrcjec9yr32wcu" }, { "metrics": { - "saturation": 2.6210418133951645, + "saturation": 1.5798942855793807, "non_myopic_member_rewards": { - "quantity": 535248124476, + "quantity": 331745384962, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17040214, + "quantity": 10777437, "unit": "block" }, "relative_stake": { - "quantity": 48.44, + "quantity": 59.12, "unit": "percent" } }, "cost": { - "quantity": 240, + "quantity": 47, "unit": "lovelace" }, "margin": { - "quantity": 47.78, + "quantity": 75.29, "unit": "percent" }, "pledge": { - "quantity": 254, + "quantity": 151, "unit": "lovelace" }, - "metadata": { - "homepage": "j󣥹󜿳򂐛0S=\n򡇟𴶺>\u000b1}:\u001dw\u0005򭳍-𞗲I\u0016򛎳LDi{򭩳3Ew2hy~JDC\u0017\u0015MrKd4by@󃣥󃻤", - "name": "D%D3S𗿩\u0004\u0019\u0013걀i\u000b\n5\u000e\u0001&?𻺹6᨝2\u0004#𿛒\"\u00051+", - "ticker": "O~B\n󨟃", - "delisted": false, - "description": "𼒽\u0016\u001c;\u000fVE\u000cOI.!򷙟򭅼򠸇N𦽎f(\u000fG'S\u001e\u0005Hw񯁨\u0008\u0013?\u000er\u001e=-J񝩎goI\u0016󖿻\u0016k\u0010𫟥񈇑B(\u000b򾾨󅾲񶐳<-Up>I\u0000􋇼󿇪,󡟃􇸛-@wM|q𻩁&m7~񥝡\u000c$C򁋌򏩪", + "ticker": "\nF~", + "description": "\u00158bzoU\u0008O^򼥟6񁴅\u0008z\u001a*)\u0013\u0014*d%\u0012\u001c򝫫\t[񩮔񹚣|\u00066򝻤A\u0013\u0003V\u001dI\u001dYFv񆀣􅗖짾BB󕤋󿤣\u001b\u0006󔽦\u0011\u000cbW?!񏅀" + }, + "id": "pool13hjvch27n50tmqzl0es5ycch4nxtnfp6ekq2f5y6qn0yyu4qs0z" }, { "metrics": { - "saturation": 2.445796149990764, + "saturation": 4.422753138945762, "non_myopic_member_rewards": { - "quantity": 446239358705, + "quantity": 743639065332, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13029493, + "quantity": 594050, "unit": "block" }, "relative_stake": { - "quantity": 76.67, + "quantity": 75.87, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1885-03-07T03:00:00Z", + "epoch_number": 21002 + }, "cost": { - "quantity": 126, + "quantity": 6, "unit": "lovelace" }, "margin": { - "quantity": 83.23, + "quantity": 74.75, "unit": "percent" }, "pledge": { - "quantity": 108, + "quantity": 47, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "JK򛑺$\u001d<\rh\u0015-/Oam,u񲩚O^dU0𕉩󉻸r\u0008X[Bi󍻋qx󛴹p~󑹶e񧕴󘟭򺪪I\u0001", - "name": "`\t󿣎Jf?+m𥼛RL\u001d-\u000eeN򠇎8M\u001b\u001e\u0011q5\"", - "ticker": "\\񠤴\u001e", - "delisted": false + "homepage": "C\u00154󶶣x+\t񓌫w񤮃𯽻򛊨ccd'\r\u001fTm򿪗L~g񈽁k2񵲹򦔐S;󉁦<\u0006\u0005􁿫\u000eVx󃯽\\󞼴", + "name": "񢌾\u0011[+{\u0007񞹓ᆘ", + "ticker": "\u0005\u001f^", + "description": "$򌜄󧇓\u0018񚕌\u0014XT􂋾d􉍋񎑘\u0011g3𒯙񒁛򡋒󘩤GN\u0013SN𨙼𿏻񾑺\u0004 }\u0001V\u0011U򽰕򨉽󄨵\u000b\rE^+򶚴:\n𻳢IM_񍸏\u001f\u0017pf~ju'm\u0016n^􂿐d\u0006𲰘F򗾰𤐤񁄃\u001d#𪵡\tn\u0011]Cn񜤔\u0015𲬓qd,&򳤶S'v&'(?{[\u0000򋐎~\u001a" }, - "id": "pool1e2l2uw7q7lx2e4r4zw6skgztjkh66trzsslvvwkemcfl7rqj3h4" + "id": "pool19khvt8q3n2d0f3q9px6hz57ufpcvxjg2x9st4vjxdzefwkukt2r" }, { "metrics": { - "saturation": 2.060999844982274, + "saturation": 3.2989719945148814, "non_myopic_member_rewards": { - "quantity": 750156594285, + "quantity": 915598465447, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19369779, + "quantity": 16775928, "unit": "block" }, "relative_stake": { - "quantity": 98.97, + "quantity": 84.2, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1863-10-15T15:00:00Z", - "epoch_number": 8979 + "epoch_start_time": "1905-09-08T04:00:00Z", + "epoch_number": 5669 }, "cost": { - "quantity": 208, + "quantity": 111, "unit": "lovelace" }, "margin": { - "quantity": 15.2, + "quantity": 28.74, "unit": "percent" }, "pledge": { - "quantity": 34, + "quantity": 89, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "N\u0008O9𞾆}𼍜KP\u001d\u0019`􅉦񥅌􏣫򩇖򱾶Hr𮔀\u000eK", - "name": "𣍞X򮌚\u0014\u0006򃁊\u0008\u000b򢥠* \u001756'e/", - "ticker": "3\u000c-", - "delisted": false, - "description": "Y􋋩󌀑Y򠌓񣴙P_󎜄:\"ooJ𜌼;F򃮵􄠥1z󡋵v\t5{򊔑\t;򭞋1x\u0008rc𻮊󞻺𵈭\u0004g\t_wQf,𚘌\\\u001bm(kK񖍟G񻻳\u000b𥁉z򒃩H񙹞\u0019\u001e~k1-񼧯gK|vjyNMz\u001b\"hL򽂤^򶶟x\u001a⌀򜆒7 \u0006X\ta\u0014j5lZ\u000e򡄩b\u001f\u0004,򶣺8𖸦5E\u000fU0w𖱽3]񉨌H7򋯭\u000bMmPj񯵉{񅜊nNxf;+򼴔\u000b󀀈\u000c𤿟򹌯񰠖򳴀'􏽷&\u001a\u001d𦎐:\u0014\u0010D?Fmh𪏮fo\u001d񓬫󄦪 le\\𳕉\u0005P9\"l\u0018\u000f+}Yp\u001bW񟠱%iQ~\r\u0002t񞙎cV\u001b_\u0006\u0008\u0003A@F\u0015򔥶+󖁯󿸩ᙪ􊉎a󇀯\u0008򕢬󠸩G295𬌥E󾯋vp㐨\u0003At\\𱫉񴢶", + "name": "m\u0000򫸈c򑧏𵌨3\u0017>h#yH\u001c󵀭8+O𧴦z\nf[Qz\u0003\u0004 F鷯\u001d\u0018𚟈Tf\u00156", + "ticker": "a򰚱K(" + }, + "id": "pool1l5vqxpqhwnckdnxnnmrxrcr2c4vky7m2jx4xkycdcls0xlrhmjc" }, { "metrics": { - "saturation": 0.949468901611985, + "saturation": 4.320402323499496, "non_myopic_member_rewards": { - "quantity": 84523937275, + "quantity": 543936833462, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16508104, + "quantity": 19693351, "unit": "block" }, "relative_stake": { - "quantity": 89.97, + "quantity": 79.57, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1875-05-31T19:50:23.752690618676Z", - "epoch_number": 978 + "epoch_start_time": "1906-10-01T23:56:59.914582724569Z", + "epoch_number": 25677 }, "cost": { - "quantity": 250, + "quantity": 18, "unit": "lovelace" }, "margin": { - "quantity": 56.75, + "quantity": 6.65, "unit": "percent" }, "pledge": { - "quantity": 201, + "quantity": 53, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "\u0018p񗡮򁀂񡡙xQ󻊣J𺦶\u0019󪩵;4\u0004\u0010񬴿R%q\u0011* 󮺀\u001b|\"?'*򰡍\u000f\u0015󵷺\u001b]G\u0000\u00161󰮉\"=N򫦄\u0014\u001a󰨠򠝎i\u0006\u0005\u0019\u0008qd", - "name": "f&ﳂ", - "ticker": "EH5M", - "delisted": false, - "description": "\u0012𬁫)Zw7vn\u001e|i𤞴\tz򚈜u\u001fv\u0019vx;" + "homepage": "U\u0007lN\u0010^\u000bS\u001a򹑃ma\u0015𝯅S'dkL򚖼\u0007\u0001=󳓗5uM򾥅\u000c\u0019t𯟄:5󨇈󑝺񵎨D񘆏\u001fE\u0012\t񥯢%w񶚐󭣟", + "name": "r󑝟~k\u0012E󵷘;t\u0001󺋟\u000f򏴕-𦎠Zwb0c\u0008|D8򰷇\u0004񱈩h6#὚TD񺝢D𬀜\u0004\"󚒁򍰋?񌛸􀣗񀺉", + "ticker": "16~", + "description": "Zdl𦗜5\u0006𝜖T򁟈󴾀𰽼S㚸T􌖇X򍱮򳣈󩚪\u0016uY:󗫮򾏢\u0011S\u001b󋏳\u0019򐚲𓨘p񨘨\u001b].\u000cDC{;%\u0010(u3󉞸\u000bVi!\u001e4\u0015򃎪eG>𘵠𲂔򅖛Kyl򝆞\u0014" }, - "id": "pool1l49mcck68de43zhcankl7vf2rzp9d4lwhh8caetujmxvu7366vz" + "id": "pool1f7kvtkqvxv2ndgvxrwewl5y5lhnj5q3pd74qfj8z5yp46f89wyd" }, { "metrics": { - "saturation": 0.9885040009808127, + "saturation": 4.435726901157722, "non_myopic_member_rewards": { - "quantity": 412733437564, + "quantity": 548065837745, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4502696, + "quantity": 5488780, "unit": "block" }, "relative_stake": { - "quantity": 33.88, + "quantity": 17.14, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1883-10-07T08:00:00Z", + "epoch_number": 1202 + }, "cost": { - "quantity": 200, + "quantity": 127, "unit": "lovelace" }, "margin": { - "quantity": 25.27, + "quantity": 77.29, "unit": "percent" }, "pledge": { - "quantity": 214, + "quantity": 30, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "iJ􈬝#\u0010􋲗󁿔x񧑱3a񟣌r2𔌘󔛢GA)ad4򘿕XJ\u0014\u001ax.𼦤})9V3>v", - "name": "}MN]󱷧Y\u0001Bo !(\u0000\u0001󻬺DT󶛏\u001co1\u0006-\u0004^󒭅󺉭O/xsa\u001f", - "ticker": "\u0006򞧎?󄫙񿂫", - "delisted": false, - "description": "#q\u0004(񑵏򗏎=\u0005񴦾񺩒󡞯𿧗󹉘$I\u0002OKQ򈗡\u001f|󧁪mz򗚆\u0005$0vo \u0012򩵣\u0013g󼒞8+y򬁟#*󜋇\u0019\u0001#\u0015+⌤D񥛨Ss񪒋𐅂\u000b􆊩픈\u001e?,񇏡'i>a=\u001e󸂬dO9򶼸:\u0000Ii\u0001x\u00126[zp*X]󤋭`\u00061\u0010@7X򈦷\u0013La򖸱N%2\u0012a(fdp𥼂@%}X􃮎MA6񘊺񟑃\u001f\u000ew]󪑏𞹣oj\u0010󱪋g;t񙑘/D𬤝L\u0004񸚵*󦥪𧵖\\󾓐#\"q\u0016񰿁s%\u001fN󣧏A􂪍𰔜V󂐭񜣍󰪋e9RC\n>l~eU\u0004帶򚟋\u000b\u001f󎊅E\u001c4\u000e+򍹴𚷆\u0011\u0014󳀆_\u001b𩮊󦃎𻹡4\u0010YO;򌌃&/!20z򻅜wg\u0014\u000b}fNNT\u000b򀻣\u0007L򢝿\u0008󕙡陋\u0015\u001c\u0019\\j;\u000b\\'U\u001f񘛽\u001832U\t4\t\u00129\u0006\u001c\u000c쯞󆶖Xo8A\u0010z/_򂪒u󻂀z/􌍸\"v\u0001T򯤾󾍐󑉎I񉆎e0C𰺹G𛦝󅩆G2o󺠥𨦤Hp\"utN𕱪\\5R>򛂅]򱛹I]p\u001f󜿍R񤠥U0A򳟊x򢱩\u000bh~@\nb\u0019񺋱Q+ \\^𗁈x5򰰜2UCUU\r\u0012t\u001e6񳇈" }, - "id": "pool182a8384mq6gwdt2ueswr4yy8p3rzesgfk5eu8sec9fptkgr6qux" + "id": "pool1u3agrdj4cjjnjrdj33w57z44hxlayvdwwmwpp3m4v2dwggmtqkz" }, { "metrics": { - "saturation": 4.853383966731147, + "saturation": 3.2411875069674787, "non_myopic_member_rewards": { - "quantity": 450282772156, + "quantity": 920761391806, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19659403, + "quantity": 21373623, "unit": "block" }, "relative_stake": { - "quantity": 9.81, + "quantity": 93.77, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1861-11-14T23:45:21Z", - "epoch_number": 5646 + "epoch_start_time": "1891-05-01T09:44:39.655969246575Z", + "epoch_number": 27383 }, "cost": { - "quantity": 202, + "quantity": 252, "unit": "lovelace" }, "margin": { - "quantity": 35.66, + "quantity": 10.97, "unit": "percent" }, "pledge": { - "quantity": 179, + "quantity": 109, "unit": "lovelace" }, - "metadata": { - "homepage": "J\u0017𿆃\u0019򀘝s\u0008Ml[\u0001񙰷񂲵𦫜]\"XT\u0008Z򕃨\u0019&\u0019\u0019z\u0017r󬯧񮳮\u001e~Q\u0014򡖃|\u0003\u001e񡖫\t\u0015\u0014rU\u000b𞪃\u0012lMc0񎓺ph𽨩;򴨭򑡆󫐻,z\u0010E񎼙򈒄􆧱\u0011V6\u0005", - "name": "񓩬\t\u0019\u001b񮽜\u000f񭜜\u0004G󃅣\u0017⩚󐝦\u0012\\񖀚A򦦮|\u001a\u001a,󀇗񐛋\u0014𬥘b2qf}\u0001h\r.", - "ticker": "\u001a󞁆𰁇", - "delisted": false, - "description": "𰔡񆹠񎘒C󵂳\u0012 9){b@򨓕򴨓񿉨p]\u0014~n򍴂𛍠+l\u001ao\u0012򜻶%E~񕾓\u0012󧫞􉥔𳒁S󚐨\\&\tl𠢿G􎀉𡻵]U󆮻\u0013S\u001e󳴈3>R򽾵񲐛𖳛u\u000e󪾁c#a򔚇" - }, - "id": "pool1pmmxxqz5pqdec7q4sjytthpq3frak7nl4y0du9qesr5ljdc78fv" + "delisted": true, + "id": "pool1vlyk5av55cwhvmym69lj6wzm0m2se594fxqudpwvvy08czggt9j" }, { "metrics": { - "saturation": 2.118250697172794, + "saturation": 3.72152620384214, "non_myopic_member_rewards": { - "quantity": 380079358882, + "quantity": 624428372620, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8680252, + "quantity": 10021078, "unit": "block" }, "relative_stake": { - "quantity": 91.29, + "quantity": 47.96, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1869-11-08T14:57:08Z", - "epoch_number": 15168 - }, "cost": { - "quantity": 125, + "quantity": 238, "unit": "lovelace" }, "margin": { - "quantity": 83.44, + "quantity": 8.75, "unit": "percent" }, "pledge": { - "quantity": 125, + "quantity": 213, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "35v\u000cq!F2/co\u00121{S񊧬6", - "name": "󗙬񍠎M𦝎5r", - "ticker": "賀\u0019󀪔", - "delisted": false + "homepage": "?񲣑\u000cjq򻽌\u000e9-P\u001eW5𜭶oK򶛀\u0018񫢆򙎰򮟤x&mWB5a}eAT<𥤉\u0005򖇟򦌏=\u0012\u0001a\u0011N%c\u0002(tO~06񙻚U𞹕rq\u000b]wV&𭍭Q+", + "name": "򃚲?;a\nd\\\u001e󪹧\u0017򡧢F\u001c󵇿6zf񅕲򤧎u𷆠?9xj?'", + "ticker": "K\u0010L\t", + "description": "P\u00198[b\u0005򣙮򈸑\u0016_s󄆞񫲾򕠨V2\u000e󕀷J򍨧𙲬\u001b`\u0019.\u001a\u0013\u0018𾁝Lk򥏓8ㄯ\u001f6썫=\\.򛾁󔯊a𢻚cSH򇮢\u001aq W3TnK\u000f*bGd.w𮘫q񦻷m򬰀E]\u0002񫇀N\n񨤙QK\u0016򔈂_h򱴋񠃮xe򿜾\u0013򭒘򿴼󰖁󿙄m󩱪򗪝\u001f𫊓Ṡ5#@F\r󋄹(􋏧Y#s\u0011󗋨w󍏨xT𔴡򁱍l`'R󤄾\u0007r嶻m-񸝤\u0017\u0007򥋧^1\u001c'\u0012\"\u001d,w\u0005񴛢\\Jn񘹲KL񾜬\u0010c\u0013}%󲊢],\u0011R\"%񑮻񽴠H\u0011Bu\u000b~f𿐓񈁗" }, - "id": "pool1g6t060kz735dpkhwq9p3z50hfq8du6afjmjtxqxfr5ttyzdx9rk" + "id": "pool15egtmxm66gxa95q4h8uqv9ax7dae82gwg40f7u9ucljgg88jveh" }, { "metrics": { - "saturation": 3.1638368037543336, + "saturation": 4.308148428352964, "non_myopic_member_rewards": { - "quantity": 996556215530, + "quantity": 18344222737, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11628624, + "quantity": 8731040, "unit": "block" }, "relative_stake": { - "quantity": 49.83, + "quantity": 96.65, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1879-01-14T17:06:14Z", - "epoch_number": 14842 + "epoch_start_time": "1882-12-16T16:00:00Z", + "epoch_number": 19690 }, "cost": { - "quantity": 149, + "quantity": 173, "unit": "lovelace" }, "margin": { - "quantity": 59.79, + "quantity": 70.49, "unit": "percent" }, "pledge": { - "quantity": 206, + "quantity": 188, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": ";!􁑤}򺩏􋖜w򫗥&Op3ZMV9鸕%\u0003𸐬wZ󁋒򷐈.T\u0007P򡓍󥳘e\u0010C|𺈢򬽨3'򇳁V\u001ab#Rh񖷤7d\u00180a򎨐򽦃T\u0013򞓷\u0005񭑰8򈲫r􃱃󍦪T􂫳/Nj@򝇞/?;R2\u001b𗡇\u001d2z\u0000\u0012\u001d\u0004a񞽮5񧡒T\u0008\u0010򣽑Vr\u0010", - "name": "񺴖O7c􆜱\"_\u0005(\u0016򪙍\\i󋜐sL(󰟥Hy_\u0003\r_\u0012\u0002?['𨤟\u001cr", - "ticker": "E򝌾M", - "delisted": false, - "description": "\u0012\u001f\u000e뒌K򇚠Y$\u001e󴦐Q@\u0014\u0000R𾆇\u000exW񵍜󨬋\u0004\u00198t\u0010O" + "homepage": "T򎃱\\{\u001e'c\u0005\u001fp\u0017/\u001d󽃛\u0019񋵂\u0019l𿦪?}񥒺\u001f}񷲣s\u0018y]\u0007\u0003񱜵\u0006=\u001fW󝁶򑭓dx,򛜚+K\u000b𙱢󖊺\u0003񀑔{W򆀻𘪵j\u0015^𐦣󀕳^ta򉇚堮󷢽\u0014\u00170^𑪛\u001eQRv\u001c\u0018񨘧NWB4𑢬G􉎐\u0015&\u0001𥃌\u001c", + "name": "\u001d\u0013􍈏򵾧{U󓦱K9񵈋L󡻓򐆼\u000e-\u0007c󙿐'񇜁]򟢅^\u0011f7gw", + "ticker": "I+q+󠓇" }, - "id": "pool1j0k6r8ry5vn5pc7c8a5h6f5k303r3w27tsnv4jnz9nv6z6lr3e8" + "id": "pool1a5fxej0s06j4mp99tq8anzym2c33cntxf2h32l23y9g520zkx3c" }, { "metrics": { - "saturation": 2.5835632946509914, + "saturation": 2.912699310772921, "non_myopic_member_rewards": { - "quantity": 257132150092, + "quantity": 24740426356, "unit": "lovelace" }, "produced_blocks": { - "quantity": 20072532, + "quantity": 15614538, "unit": "block" }, "relative_stake": { - "quantity": 33.82, + "quantity": 66.64, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-05-05T15:00:00Z", - "epoch_number": 26325 + "epoch_start_time": "1888-12-26T02:04:46.115614886606Z", + "epoch_number": 21952 }, "cost": { - "quantity": 172, + "quantity": 192, "unit": "lovelace" }, "margin": { - "quantity": 26.94, + "quantity": 74.67, "unit": "percent" }, "pledge": { - "quantity": 48, + "quantity": 241, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "J6n6n򎗎ZC񔳴\u0018򈟭񌐓\u0013\u0012k:󱮏qKW!󓒖|[1\r=", - "name": "򔜴C:򎢄tK򚼕eBpu`򒉹2U2\u000e#uxtt\u0007;C\u0019󀼸𩼣C]\u0014󆘯Sm9m\u0004𫶄⊟", - "ticker": "\u0017𱌃\u0013_\u0002", - "delisted": false, - "description": "2;@򂟟4$󮬟I\u0005'B(:\t񘻐^\u0008\u001b\\u񭾕/X\t􂱨Q2\u001c𓭚Gc󜗬򡼑򦇲\u0014񞊀\r򋒁\u0004뙄F'T@e\u000c:>IIy􍙡O\u0010񦬝>!kp\u0007;^{" + "homepage": "\u00164-󳡣󢾹񭮝@", + "name": "\n\u001b1󹁧񬱹V1sXY\u0010!\u001a*𥯘􅃦󶚩>񜴶", + "ticker": ",󤽩s", + "description": "\u0002n󡚷u~7񐣌3DP󉪕j򵭸x\u001d\t\n\u0008])jB󏼪󆣅x-l#JSD5yr\u0017\\|\u0000𞲚DK\u000c6񧖶v򫊁t𩪫񔍀\u0000^s\u0012]\u0008󅓑hYr跼\u000b񡡌\u001f𮾺񉨚\u0010\u0002\t_a\u0005J\u0015^򝗵}lo?17,u􆉵\u0014𰒄U\u001eQ;t\u0004\\#\u0017񃏃򋿀I𦘟B𞂌.xdT\u0002QO:򰭽󿕝]𰝥h񸚩󃎑\u0015;lR񰝏񩡖#xn򡀧^𺉀󤁶G淍\u001e_\u0006\u000c1h\u001c1=5\u0015\rm\u0001m$_󷞵\u0019(w{f󩨕󫱻%5!򠰱w󆗪`8\u000c𫺰h𨘓\u001d#󉬧zL" }, - "id": "pool1t76dzzn26h9ndjt8vjtnszu4syahf4q9sxvkzwlecrjl769rnn4" + "id": "pool1g6gaqhk4gmasnasgc28frh7seu4xd3lrkweete5xcfw4cuuqz8r" }, { "metrics": { - "saturation": 3.4822609745692104, + "saturation": 3.5104400470777475, "non_myopic_member_rewards": { - "quantity": 503575010797, + "quantity": 717414702983, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15976166, + "quantity": 21523479, "unit": "block" }, "relative_stake": { - "quantity": 85, + "quantity": 90.45, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1860-08-22T14:21:54Z", - "epoch_number": 6423 - }, "cost": { - "quantity": 148, + "quantity": 44, "unit": "lovelace" }, "margin": { - "quantity": 18.62, + "quantity": 12.88, "unit": "percent" }, "pledge": { - "quantity": 239, + "quantity": 29, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "1񛀸\u0013\u000f򱌸c󩫃e󚕦󴲖󮤲\u0014d\u0018򯕦\u001e𻠜>J^nYbO򕎇\\h(n򌊱vR򔘊_񫀌񹓩$􂶵$|󗿚\u0008\u001aq\u0001𗗂%򻯄@򢉨", - "name": "v?񾯸Zqqg\u0008j󭍜\u001e", - "ticker": "\u001d泧\u0013", - "delisted": false, - "description": "\u0008󚆏󣽜\u0004\u00164Z)\u001f5𱑑O5\u001a Cf󊚈'\u00009\u0018\u0008񳞡󵪩L𚗍n󧎍\t%񃸜Pr\u0000\u001e\u000f\r򺥼](k򣳝򎃊a~򯙆|󈰢)\u00138\nN\u0001'񆾎l\u000f󮇾\u0004&/F\u0002.ZA rk񖜐\u0018\\\r\u000f./򘌃An]\u0016b󩻋vh󝚤􌟝򓚡󀴠𥢌󄏍񴿇\u0011s.񄟣Y\"q\\𪁫񒝽$\u00089D\n\u000c&􆯰e\u0004\u0003󫦶1𧸰W5=󃹩1𦶔!񎮬(\t\u001b\u0002􈋖Pfh\u001e)p$QP\u0005𵱷X\u0005򗆻𱅀x\u001cVIx𡦭o?3\u001e0%򁓠3󨋌Y\u0004򾰩 b\u0004'\u0006𛇡䝥\u000c󱉖3#l𭚎(򊽝>7E\u000c:󀙞>󌭾񰙕X\r\u000cs򚈎y𥱣q\nT" + "homepage": "\u0008W򉸸-\u001f\u0004ZY\u001eV2|w󡛢\u0003PeE\u001a\u001a+`\u001aV󡆤𛈘M]󝯞󺚹򚷎\u0013)=񡢯S񮂤SWj𠃆D󅚐񪑭x\u0016y󙃜\u0004z\u0017?b", + "name": "񖖕\u0003񏇗Y^>\\\\L:\u0013򘵲p炮𡓖񇓜yg󠀡\u0001-P5&", + "ticker": "4𪕬z^K", + "description": "aiOg?K\\?YI\n7\u0004A򄷯\u0000[%$\u0010򿯓𸴱e񞂵{ta𾉖c\u0017Yu$𕵁HH򥇎\u001f𗴏~\n~\u001eD;>L񞛬=\"\u001d[񳛲5h\u00148\u0010󓅔U󻒈wpsJo\\j𡎾&򔯰񻁯YU\u0008\t26-\u0017E񅟃䥸𳗯O𼿶񒐆𢰳𰱉r򣩹6e򢭓򶓒\u0017󣶴t󨮰w[i\u001dU0\u0006v󣱺o𥶑\u000e\u001d>Y5󲒺8\u0010IIJw\u0008\n\u0005񣁴e\u0001\u0010񺁖f^\u0016066#\u0003?` 񉦦Hk) 񗇵L\u0010\u0006j\u00070\u001c5!\u0000\u0012󈔙$G򡫼\\򋀦+\u0000\u000f\u001e\u0016􃥺w󴪿;򄀻񍷓𜮒ce򘿎" }, - "id": "pool10v7esrrqsd2m6y9r0y6xyv4a0dcf2aznjp43mtxmtags7t4ee8w" + "id": "pool16uwnvxwpu7lj08t9zlzsq4pa0gfee7pj2xnpgxvjxhyz2yvcsk2" }, { "metrics": { - "saturation": 0.24095701546941628, + "saturation": 1.7078180364278177, "non_myopic_member_rewards": { - "quantity": 159952934297, + "quantity": 546006172412, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10485878, + "quantity": 11552686, "unit": "block" }, "relative_stake": { - "quantity": 51.68, + "quantity": 2.17, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1865-04-18T15:31:59.108575748588Z", - "epoch_number": 23210 - }, "cost": { - "quantity": 55, + "quantity": 188, "unit": "lovelace" }, "margin": { - "quantity": 84.61, + "quantity": 23.54, "unit": "percent" }, "pledge": { - "quantity": 71, + "quantity": 170, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "0k'7gQ񆇥R󾘯\u0010\u001c󈱦󴈟\u001a\u001ahW%\rC,}Ys򔛖{\ta5򇵳񌭺\u0003~l󫲢e\u000b?p򫨥4򞗚r\u0014T𳑟𢽨󩑕^", - "name": "𐁇\u001e񉡰񊃕{+", - "ticker": "󵀌񪒊򣪶", - "delisted": false + "homepage": "󪒱\u000b\t.R𼺾񘍪(𹆬𠬮\u0012񄻑\u000bn\u0001):񖌣1", + "name": "dS񳉽r#\u0018%򨟘\u0001\u0008Bf㷧󐰰Flg򒮚󏲃񔜛Ie񒿋F񂽙*\u0002S^\u0011򞆈\u0000p", + "ticker": "1tb4=", + "description": "r>𪕖󓡹 t򰟕󳢂k\u001dkv&+񏾩4-uV6W𲒌;暻𖌽w\u0018\u0007z񕊡t񈔹\u001b亖(\u0018\u0017\r𖚓w\u00167\u0007<򘪜%𫶕\u001e󟈈^\u001fW&\u0004򌍇Oc_S\u0017􋼌aa󜘜 󸭲\u001ccb񀲣󢜥p\u000f\u0014\u00052𲵅;򉙀񚳗뿡򆲼\t\u0016e_\u001d\u000f" }, - "id": "pool1dsdrq8k8jkc2zgap5lwxgg4umya0unhk3393xdwkswwpjwfqtq0" + "id": "pool13nurj6afu8ey8pmt5vp0umrng7ve7rya4w6g904c5wtrygfe7aj" }, { "metrics": { - "saturation": 1.829412867919706, + "saturation": 2.480200163557073, "non_myopic_member_rewards": { - "quantity": 176045624099, + "quantity": 435687086580, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4136665, + "quantity": 2899537, "unit": "block" }, "relative_stake": { - "quantity": 20.53, + "quantity": 94.89, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-09-25T20:30:46Z", - "epoch_number": 13238 + "epoch_start_time": "1899-02-03T18:28:42Z", + "epoch_number": 26530 }, "cost": { - "quantity": 142, + "quantity": 195, "unit": "lovelace" }, "margin": { - "quantity": 67.12, + "quantity": 72.01, "unit": "percent" }, "pledge": { - "quantity": 196, + "quantity": 89, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "OA\u0015򳽛'򯌇񤗑&.󘸈k󼤤3B񁔈j0C%䣈옳Ms\u001dI", - "name": "񴌛", - "ticker": "󘲐\u0004a񿩫", - "delisted": false, - "description": "򚋧\"m|\u001a𞄼󔸲px\u0012~S$𚌧|򲴳:|S.o򎀇JE󗘌\\ku>檞:s>񹋺\u00062E)5􎻁/\u0018t򷕜򅌔DgM𷗗\u0011\u000e\u0011&z􈫞񍞬񾾜[\u001er\u0018\u0003\u0000N󪏲򕡜8]򰕼򲤘mQ򲩖\u0003=%򊆩>C򆭙񏈟D𲧟󭞬bj\u0004I5\\s\u001c􂠻\nxH򅦂@g򥝫5\u0005𓲒񙯕񌄫򮱍g;0LTP-a󑉧\u001e\u0012󔉉+\"󆦳-\u0004򋗂򍘪\u0002\u000bU\u001f\u001dM󢮘G\r𮞑\u0010,R,񧍔\u0012AHjIw.󗠝򫑸T>9󄁦X+𾿑񮼕ZexI;󨗬򜁒\u0017O󶘸v񚇒𛹘_b󯤽\u001f\u0016\u001e\u0010\u000b( !\u0006\u0008q񊕴LX\u0008\u001dBIWg򿏴,@\u0016G\u0013\u000biD󐤛򢶰\u0016񌀁氤P)S\u000b*\u0007*jJ򝲛\u0016\u001e&)\u000fzp\u001eD\t򓩺", - "name": "񙶺Y򷹁\u0005", - "ticker": "W,E94", - "delisted": false, - "description": "\u0013\u0016򺷶l7񠧋\n&󈅛q,򢹙%𰸠m4􆙵2c\u0008򘌸\u000c𗓞UTS󽩂s\u001e;𜷟/p]\u001daL󹱏m𜱐J񌭪򏳟򫟘H𰥇" - }, - "id": "pool1h5jrchvzhzux4hk0xe0wmhgjqgkzfzk390hj6vfgkgw6wu6p89t" + "delisted": true, + "id": "pool1m3ur4pfe7jxll5plt3nsnjxs8manjj85gdzz3a8q6zpyqlh0vrv" }, { "metrics": { - "saturation": 2.281765642221536, + "saturation": 0.3062274694340128, "non_myopic_member_rewards": { - "quantity": 110410852594, + "quantity": 21651849522, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22243838, + "quantity": 13794777, "unit": "block" }, "relative_stake": { - "quantity": 4.09, + "quantity": 42.39, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1889-02-10T02:04:41.100419286635Z", + "epoch_number": 24568 + }, "cost": { - "quantity": 146, + "quantity": 130, "unit": "lovelace" }, "margin": { - "quantity": 58.91, + "quantity": 23.74, "unit": "percent" }, "pledge": { - "quantity": 227, + "quantity": 83, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "Ek󐽄Fih𽁿򁏾a\u001dp\u000b\u001c\\苨u'8󃒮z7\u000f+\u0018𻑏\u0015+휋_\u000bO-𠀎򵠋", - "name": "\u000f2󉙕󑊂{^]|\u000cv~𝿔fq3𫥟򯉀T򍈇񋙵qCW񆞓񐷸񹳢vFG񣗵o6aW򤟜\u0015\u0001", - "ticker": "VS񟰺", - "delisted": false, - "description": "\u0010𠡭񊑽\t\u0018񳺬\u001aM2񽁼񻋻󒲀\"F\u001c\u001b𭦼Zp\u0016*\u0003Hqd7\u0016E󅨿M?𶸁j򰧲񅜦Y.#D;\u001e!\u0002#󵘌A񀊅?\nA\u00116󊹹B%q\u001e\u0006\r6|Wo6\u000e$\n\u0007\u0014𗇒sY3\u0006\rw𐥓󵋓A|\u001b'􌛘Ls:𒯺" + "homepage": "\u0003u4K򞢌~𑗗+Z\u0013O~\u0002TED\u001d?􊔙򢯖\u0010􏕹񕎇,E\u0008)\u0004𿣼5\u0007񄉻=\u00044񰮸|\u0016 񝇰\u001eZ\u0006\u000b򐢗DT󎀚򝬪+\u0017󟼟󃡷\u00125f\u0013k\u0006h\u0014E~y𜞒f", + "name": "󶘦>w", + "ticker": "9PU􇥵G", + "description": "W􈋾\u001d+\u001dVh[E󤏼V4򷟳0N\r󥀀]򬺁8{ 8|mZ\t񢿖_hp,%󂠯򞅜񩪩񵥹:]LI󖒍\u000e\\koL񊐹𜀟$=񹹘cJ򋹥bH񯋢\tGR8y8P\nJh4\u0016<*z{򉮲򋯗9𤄠S\u0003acI\tOOev\u0015\u0013\\񑒖o>\rt𐇁񗆈Y\u000bDl\u0004:z򆰹\u0011)𠴖\u0015u􍯛9% 󓁊':yC𮽽K|]D;Cwi\u0019\u001d󢧯\u0007񡺴񣎆󟿟fh`񠱯e\u0018C\u0015f\u0011 x2𥾆\u000b[$@󧝓\u0003𝊦7\tn\u0008Nyg\u0000(3򱣺bsh𰓷7O\u0019nwI8P!/򸠡g񳎲%QEt0\\uuP\u0013\u0011Q5.\u0018s񰾑X~V񸾓YUap惇\u0011\u0000񭗗\u001f]񦥵𿳍󿯬w\u0017򓱹y/\u0014򦁬'\\2\u0001b\u001do󢘼k7bX󣑄g\u000e\u0007-񡚬v\u001ad\u000ek􏷡" }, - "id": "pool1gnytqrregcjzl5gqe9wdshfnccgjrwgcsddflru80vunz6uumje" + "id": "pool12tm3n6tetqp9fm74a9vu0mwtt6mrqlyhhv85pa7l9hxm6p3as4r" }, { "metrics": { - "saturation": 0.3596149168690749, + "saturation": 4.740348928836976, "non_myopic_member_rewards": { - "quantity": 904227683903, + "quantity": 988950021470, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18865619, + "quantity": 13838165, "unit": "block" }, "relative_stake": { - "quantity": 37.63, + "quantity": 79.59, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1874-12-21T17:00:00Z", + "epoch_number": 26873 + }, "cost": { - "quantity": 54, + "quantity": 62, "unit": "lovelace" }, "margin": { - "quantity": 10.98, + "quantity": 41.07, "unit": "percent" }, "pledge": { - "quantity": 195, + "quantity": 229, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "vD󢒘}", - "name": "W2\tKJ\\򁇉'mE4X", - "ticker": "Y-C\n", - "delisted": false, - "description": "m󑣇mc$f\u0007E񰣼󊡸4\\H\u0005]y9^\u000cL!\u000eN],\t凓𧂷\u0015\u0003s򨘯)󥧮e*\u0018t!:򬍁E\u0005\u0018g:𵏻g􀈧+8󪤆M󣸽C\u0014\u001e'\u0012\u0012B򂃋3󱝇@7:8\u0007󤹜󿼙 ,󹼽gSwe𙢄1u\r󮑳yj\u00119\u0003񲲇\u00083𼮾F񎾮\u000c9\u0014\u000c\u0006\u0018" + "homepage": "\"TpF򵃟\u0010a\\D9:o0D񤷥\u000e𼙰󳇂\u0018\u0007𮍯u\u0006\u0013_X񺣨U4X򎂨Fb\u0011򭀭텍 \u001fCN\" 񀆳A\u0011񨦒zf 𫡡󥔰󐭼Gl􈦭,+*\u001e\\򭵦򷖂\u0018\u0004\u0003P򼕱󝪝,MLt3\u00100V𮠿O\u0005𿻗򱑔{&V#z(\u000e𛔐\u000fp󇶬𴥘'", + "name": "\t􈝿", + "ticker": "򒱯缽H񇾳", + "description": "q\u001d𮬌񃢘\u0019蒡\u0006Df\u001d%\r3򗍋J]񣂘B\u0011󐗬\u000eY򉛂Y\u001a\u0018񠷠\u00082\u000e\u0011𱭒%s󇦬\u0007F\u001e񬸢t`D󘡠𗕎󥪿򦺓" }, - "id": "pool1keq7gtx3v05tu54p67e9ucv5w5cx7j5m7zyvtyrytmvjznldd0f" - }, + "id": "pool19qj0909ye93qhapf0srrfx28jr7gxvcwsz27z9uxvnydwnzzl5y" + } + ], + "last_gc": "1864-12-11T21:57:30Z" + }, + { + "pools": [ { "metrics": { - "saturation": 3.203215820746813, + "saturation": 4.50263157195106, "non_myopic_member_rewards": { - "quantity": 443176803660, + "quantity": 483048212567, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19886718, + "quantity": 3438056, "unit": "block" }, "relative_stake": { - "quantity": 6.01, + "quantity": 41.8, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1871-04-10T20:21:44Z", - "epoch_number": 24342 + "epoch_start_time": "1858-11-24T04:08:57.857512923565Z", + "epoch_number": 11136 }, "cost": { - "quantity": 95, + "quantity": 163, "unit": "lovelace" }, "margin": { - "quantity": 13.39, + "quantity": 66.91, "unit": "percent" }, "pledge": { - "quantity": 21, + "quantity": 228, "unit": "lovelace" }, - "metadata": { - "homepage": "񁪫p{m񳵍G𗚙b@\u000c1)q󑷒\u001c𖓥6emo8B\u000bY&C𽞤𥁙y𐹽7\u001e\u0013m;\u0015򬴲MxFoZ의𖶪FD㷾];s\u001e䪚\u000fvZ􉬙9S\u001d𡤍&G\u0001b,\u0018\u00123\u0010󞣖\u0013kOaO񚒬\u0001񖌼z\u000c\u000e5>H\u0014dd􇓱򌈠x񵛜񯹣\t-񒞷\u0015", - "name": "򴠒B\u0000u!Ko\"4S󿤧'z𚼧!U<\u00134𚒕ea2YoD$\u0004\u0008EAK\u001b\"H񻭠\u0019\u0003Ng𯔠󱈰V\u0004򆾅<", - "ticker": "\\\u0005A`S", - "delisted": false, - "description": "*󩧜\u0019󉽍+\"\"mbj\u001c X\u0010𿺩2\u0002򬳩񟃊\u000eY󉯥󋱭\u000e\u0014\u001e񆳅\u0010Z𚌙:\rFR|hF\u0007l\u000er=8l $\u0011񌉫Z󔅆t\u0002񏱔򓠁fS\u0015,\u001e\u000e)\u000eBX\u001a\u00079D𨛾6򜇩\u001f&񦋔9戦󵞗p񧤐򀇼@쇬񆄊^\u00043\u0019\neu󉤍񗣹񴳛B#g\u001aB򧖲w򻧑@\u0006P}`B\t/\u0003\u0011󍯯2\u0004hX~􀿔\u000fsv񒓆񃃠\u000e!𽔊\u0018/jL" + "homepage": "񴽄<\u0010\u000e-DrF\u000e\u0004S\u0011pU\u0011F\u0013𽼇\u0017=𱣃-𻱐&V𝾌\r򡁀\u0008CQ=$WH񐻌\"\u001bB𒜕i󜤀\u000f\u0018dDv󼾁\u001fc򇨰%񶱥CeLI򄇥q󭗠(sS;a`󢕖^\u0018}=󭹉~@'1;!l&q\u001fN񖆳𐌗_\u001eD󽅝񒯥\u000f񢿹\u0016F", + "name": ":I𱀩\"3l90񥵎^P󿂂v0V󳬪򚈹󬥱\u001f", + "ticker": "n\u000f/,", + "description": "\u0015B2U\u0000bs񾓒X\u00016򓺓\u001f󭓜:򏤉[𖫹񸠀o𶽲\u0019{񽋿s:󊉗z~g񴡇\u0017j󟬷\u0004#򠻓]I\u0015􍞊^ \u0014H𶊞숋\u0013\u0002𦏥W\u0002V񕹤q񧺚*\u000e󽕕uw􊢯񒿸i/$񖮶" }, - "id": "pool1le545c62mqd5nq9khqgs76jcdchg778f08md5ecfk3jw2wh3tqy" - } - ], - "last_gc": "1869-01-15T04:27:44Z" - }, - { - "pools": [ + "id": "pool1825jds53fvwzlct8t9a56wl093zgdzgnkpf8p0ypm8pcgtzke9t" + }, { "metrics": { - "saturation": 0.9551275633242984, + "saturation": 0.3892635828398522, "non_myopic_member_rewards": { - "quantity": 804067208875, + "quantity": 555303302730, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5401512, + "quantity": 1440501, "unit": "block" }, "relative_stake": { - "quantity": 35.79, + "quantity": 52.56, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1870-08-02T23:27:48.982418696549Z", - "epoch_number": 3487 + "epoch_start_time": "1860-04-09T11:12:40Z", + "epoch_number": 14922 }, "cost": { - "quantity": 114, + "quantity": 228, "unit": "lovelace" }, "margin": { - "quantity": 47.78, + "quantity": 93.22, "unit": "percent" }, "pledge": { - "quantity": 135, + "quantity": 151, "unit": "lovelace" }, - "id": "pool1kjgrutc6r68pdk64c8hy5hwp8vftrhmvsc0rltmx464gy024vnd" + "delisted": false, + "metadata": { + "homepage": "𘠾򒙫#񒡸򖻛\t /\u0010񙝩򡹲a\u000c)񢪧[=R𗒅\u0011&,򵽁y\u0010C?KY\u000f\u0000𥢴&2\u0000\u0013\"\u0001𹨹0񜂑o\u0000򞱪obH\u0017cF", + "name": ",Y/񎏍U򸠪", + "ticker": "\u0016i)", + "description": "\u0002󢶣C)rj%\u0004!\r\u00149w{.\u0006x𣌢M{\u0016'?{UV\r\u0013GW4E񾲋N\u001e\u0006ᬌy󻉑\u001a\r񩭟>񿫬񝞊1񽚰f\t\u0003\u0006󱢶E?򇖶lFhuVf\u0008c\u0003􊢾򰢬\u000eL󝒐𢶌P󚨪񨟩\u0001I񏒦𦱤Oh1P\u001fhTNV 𑘔rUi\u001d-0J򓨁p+񹍣z\tK󦷒\u001a\u0011d\u000b\u0000\u0001l(R<󠼒󖗑dku򍳦\u00068/]*󘝝󽔯v" + }, + "id": "pool1v7ud2nkja0dvqfl8s3wvqd2rmh3mehar7x4rq5e0pv562xjf40a" }, { "metrics": { - "saturation": 3.021211793662692, + "saturation": 3.003245355870657, "non_myopic_member_rewards": { - "quantity": 848945961832, + "quantity": 211145625584, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5159473, + "quantity": 1194901, "unit": "block" }, "relative_stake": { - "quantity": 62.94, + "quantity": 49.99, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1870-06-27T02:02:37Z", - "epoch_number": 12029 + "epoch_start_time": "1873-05-20T08:46:39.681350743584Z", + "epoch_number": 9727 }, "cost": { - "quantity": 55, + "quantity": 123, "unit": "lovelace" }, "margin": { - "quantity": 44.56, + "quantity": 4.41, "unit": "percent" }, "pledge": { - "quantity": 234, + "quantity": 40, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "3񣝪򇡁n\t󯛼sfm8\u000b񠴶򀉡0񖎓n2kv󉏵:4--@\u0008D𧾦\u0013R󴧓*", - "name": "DA\r򫪏\u0017`Dwo\u0008𙊪5X򵒢[E\u001d󺬊[\u0011\u0010qk2񤧦g`񊚏V𺮹?\u000c􄶙󴴹\u0019󴚝G񱟎遻N\nR򰡾󻆢", - "ticker": "򛑭i񰄎򚰁", - "delisted": false, - "description": "g!\u0008)򞌩󑅑ea򄋜O􂊮F\n\u001a񐭢\u0005GcW򎜨]\\]B򭿒򂑁A!򩏠𧮆o\u0002\u0006;\u0012򍋰𰥎\rBwi򀍔'7\u001bK񙃽 򃝵V^tJ𥶼i\u0002\u0008k\u00184񃻳x񊝫\u001cF󀞍8\u0016oD\u0005񝊝0\u0005ſ񑳍{~]z\u0004N33\u001b􀐃%(8𣱶\u0002\u0010G8&R𡸠@$e\u001be򌁩\u001e5\u001fat m񩆵𛙯I(u\u0013\u0005􆏐𬧜\u0007\u000egM)𷏹bIp󔹾􃖯)\u0001\tb\u0005sp򛥲" + "homepage": "\u0006i񷶋W\u0004\r\u0000򃋖<\u001d1|0󺑷D񣔯𮯲`򽩐\u001bw򘔊_򀔴!񹢐9񬒋\u0006\u0005\u0006:Z󦙻}x\u0007(:|.*8R>񼟇$\u0010B􁟑}7򝕰cw\u0011𴽞i򖝸\u0014򚤥\tvPY1S-I<|t]Tx\u0005AU󯶅i𨍧\u0001*\u0005Z\u000c𜵡𼀺\u0002!{u,@", + "name": "𢄯XzG\u001bim\u0013W󙁗V򑚲\u001a\u001b㦐i\u0011}𞺏\u0012󃱜T𤿦\u000e\u001f򕶣?񢣶\u0013mp󾕌𥔗", + "ticker": "d\u0005\u001b", + "description": "𰮾a\u0012\u001b򓢨qe𛅒y{󰕱OZ𣀮\\r򴂆'򹾮\u0000T򤍄lR\u001f*񷿃󽐼q󮞖񁪞򔕷G\u000f򼠐󑼟.,񞺲rh\u0011\u001eo}\u000f\u0018#B\u0010yRC\u0005o\u001d\u0002񼞔𮷒c\u001a񚎙J\u0011L.n󤦻񦺱*Bzn􌨽\u001bZ\u0004\u001b􆴴\u000e\u001a\u0000\u000f|>OC󪵚\\󧥺[VZJ𶊂𛙐񈼁􎞜\u000f򜌳\u0018r6\u000cxiK\u000b\u0005󇊺򗠜l3LpQv󽁓aP?Q󯈁򇅺U/H\t\u0002" }, - "id": "pool1d53qp7x6tf82g28x50648zgpfh75xhfjwfz3mky2admwk84qq86" + "id": "pool1nl92ajq9j6pv049etzpn2q72wt8frdtz44u8xkp6q3awz9vmr2q" }, { "metrics": { - "saturation": 1.8870377260389897, + "saturation": 3.9823598904852124, "non_myopic_member_rewards": { - "quantity": 951057796463, + "quantity": 313014429798, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21682094, + "quantity": 81872, "unit": "block" }, "relative_stake": { - "quantity": 60.34, + "quantity": 13.2, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1879-01-24T23:50:14.579114871838Z", + "epoch_number": 3931 + }, "cost": { - "quantity": 63, + "quantity": 215, "unit": "lovelace" }, "margin": { - "quantity": 65.07, + "quantity": 69.13, "unit": "percent" }, "pledge": { - "quantity": 47, + "quantity": 254, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "k򗊅򌺨󻌊AE\u0004򐙓򆑶񜽮\u0011\u001fe6\u0002tⰕ", - "name": "Y~y\u0004\u0014l^8\u0006;For񏯛\u0014H", - "ticker": "pQF񲤣򖫧", - "delisted": false, - "description": "o\rsGT|c`D\u0000𦘏Dvs(\"@$\u0017\u000bB𬓮U8T\u001b\u001bl0@{GP򥈠Ugb\u001c𔡫D󿴎\u001cN0!N񣭽$󧐔>0\u001f\"\u0002󾋹\n􏩺󍂐&a,W򆾒m\u0008򐆑q{M4Q􉶕%o񐫞\u0018򐌌\u0018j&T\u001f \u0008>\u0008" + "homepage": "d󋼾\n􍬞?򃄉E\u001e񴮞\u0016wi>-񿎃'3{=n򼑸s𹟓󍟊\u0017򋂆򗺷IC", + "name": "󺝞\u0019\u0003󆜏񝧑󐪌c󿷀Rt\rm3!\nU񁌐B", + "ticker": "󘉗󳄰T", + "description": "J4!\u0014B\u0013g󦕿7\u0006񁅕\u0014HTX\u001a🴂􏗰!Q2|A럏\rX*\u000c\u0005\u0018򌯔\u0017꽋C𧩫'\"򽧭XPx 񍨐-󏏚򭲌}\t񱞇󕖝\u001bsAu򌸳IT)p5X򑭾(Pav\u000c򱣹h񬊩iG󵔯󶹬p;\u0007񧳔 VMrm!p𪑆󠨅\u0019𢚚\u0014𥙘򅳀uM󤨴􁏴񋈂]\u000c~\u001c\u001e\u0006^򕔏[򽾲s?Gn\u0011-𲞡d\"g%l𱽉𷁪I\u0003\\𑻩L`F𪍹\u001a򽂩󪂻\u0013D󝶸}\u0005vm\u000b𺍯]t򭚂󗊭\u001d󭣞𼴝\u000cq {\u0018񡬿,\u0003\u001f7WN" }, - "id": "pool1jeusjzegadvvrhvj6qxwwejzlala7yp8qlszm3fuk3j0z5067p5" + "id": "pool1567qygvt7hln899ra6lvl9u0ff94sv7237vq5thark0mcf2sghl" }, { "metrics": { - "saturation": 4.434353119120328, + "saturation": 0.5123569946707696, "non_myopic_member_rewards": { - "quantity": 75102759366, + "quantity": 39440309340, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10937356, + "quantity": 18514467, "unit": "block" }, "relative_stake": { - "quantity": 72.1, + "quantity": 73.87, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1863-09-16T16:56:54Z", - "epoch_number": 32095 - }, "cost": { - "quantity": 80, + "quantity": 38, "unit": "lovelace" }, "margin": { - "quantity": 48.99, + "quantity": 47.96, "unit": "percent" }, "pledge": { - "quantity": 214, + "quantity": 176, "unit": "lovelace" }, - "id": "pool1e2lns4eaj28ndlgg0wzxmwampur9lc7ahzqk4wyzxpz428ntrk0" + "delisted": true, + "metadata": { + "homepage": ")o\u0004qK\u0002l\\󈕤xW6𩀵𮬞(򰻥8WLY\u0018󥝪TP{=\u0015xBs򠐱o\n򒺁D(8񳢧a\nI\"'DSqR򀠍򼅿E(~(\u0007󳹷򀬉{q@k*󉌣$񭴜⺽J󊥗\u00076'R\u000bB", + "name": "[8J򰧛cR3Pcjb4{􄬌", + "ticker": "`j\u0015", + "description": "\u001eW󯆯9\u000f󹖸򸳬nm]9񣱬9򫽐gO𾶮I_3|$_Eldr@󓰺JFC%,\u0015\u0006Mz񾤝8\"\u0008H-#󅕺}D򑬭cpF\u0014rY𕈭,7y!򸀖-\u0017D\u0016Vt\u0001\u0001:;}vo񕑰񰱐tL\u0011j򭔗\\E炿\u001b򰨟EJ" + }, + "id": "pool1htqnvtgmpu46rlmnel56m6tx4675vcgpekrxvmgahr05jj55926" }, { "metrics": { - "saturation": 3.9171119288506033, + "saturation": 1.9825844247731494, "non_myopic_member_rewards": { - "quantity": 276667319673, + "quantity": 533053123090, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13617899, + "quantity": 1326777, "unit": "block" }, "relative_stake": { - "quantity": 23.53, + "quantity": 29.42, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1887-05-05T09:00:00Z", + "epoch_number": 15305 + }, "cost": { - "quantity": 42, + "quantity": 179, "unit": "lovelace" }, "margin": { - "quantity": 42.9, + "quantity": 3.55, "unit": "percent" }, "pledge": { - "quantity": 163, + "quantity": 116, "unit": "lovelace" }, - "metadata": { - "homepage": "\u0019o", - "name": "vk𫲢PK򉺻nuu\"y򙋻󴟬>A𣖗񙎒U\u0010N\u00173}񳆡񝞭\u0004`m񏑗􁓲󛬵Aqt' ^,7󆕟N*俣𯭁:\u0006󿖦", - "ticker": ",D\u0005", - "delisted": false, - "description": "f񃕌%L7T?\u0012e\u000c.X𞢉[m򫃖Jlxg􍌋?B\t򧎑󮼺\u001ebN筍򶴲6g4\u001ap񜎍V򥆈󆡫\u0015\u001e󩐇j%򲴣m\u001c󽃸l2􅷊󜎜\u0008򲮅\u001b#NFq󱼰\u0017*>N􀣡\u001b𺦷ln\th\u0017A ?G\u0019r\u001d-*{,2\u0018\u0011?.򎯦j򂵭\u001b}n񲓌U sMKmD\u0007 5%v񾘃\u000b>񻪼🉊7\u0013\u0012\u00013\u0007Q-􃔄𣱂PWg,🱰l\u0000\u0015:򶔎\u0002W>񀇃N𪫓񃼒2$\u0006]s򂷩򶘀񆞯\u0000E3󯦍O𳇀F\u001cf:9񈈶t/$5#l񦧫\\\u0001\t\u001f\u001c}L񯼠򐕣\u000b=&󌥼򽄎󷹙\u0015󘔡c㸤QC\u001a7j2󀩰𡊸u\u0015OX􆶡񄮴)~򁉟\u000e򋰵U/\u0007񒺽S앁%t𮒦t.1V\u0000󈬡s= 4o!\u0012h򲳩;񜐏\u001d\u001e(|󱙉R񸍎As>2𖄈B\u0010" - }, - "id": "pool1shh9r2nwd78mhtr7hkx9u4vuugw6776n4m3rgdfw3md7wkmh9y8" + "delisted": true, + "id": "pool1dwaya5nrkgt3vx5jpepq0hkee3f6lc76gy2vcawh6fxqj5z0wg5" }, { "metrics": { - "saturation": 4.511399810476544, + "saturation": 4.936635078090702, "non_myopic_member_rewards": { - "quantity": 950152260089, + "quantity": 932999538801, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11376347, + "quantity": 3843029, "unit": "block" }, "relative_stake": { - "quantity": 53.78, + "quantity": 60, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1863-02-02T03:00:00Z", + "epoch_number": 10929 + }, "cost": { - "quantity": 94, + "quantity": 93, "unit": "lovelace" }, "margin": { - "quantity": 62.21, + "quantity": 97.94, "unit": "percent" }, "pledge": { - "quantity": 10, + "quantity": 223, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "/󂎢􏂞󣌨n𜍫s𞧼qs󔞁\u0006xU񔗧A򅯜Z8폴\u0010G$K2\u0000󣛱`K{m\"񞄙;8]􄲽\u0011\u0007\u0014󍷯OTzII\u001b+6𬉥m𙗂򌍂s+T\u0018g\\󄿽", - "name": "\u0014cl蜸\u0012񆮑\u000bWf񄉠8s88\u0006㢯\u000cAQ\u0018*\u00128\t\u0003\u0012\u001c񀚓#xsXM+JbF\u001d򷺴\u0018{𞩑y,h", - "ticker": "\u001d􃂯l", - "delisted": false, - "description": "tn\u0017&P򻃑\u0017v\u00089I񪀎񖞐򰪷󣪡\"􎹢y\u0008񛛲e񠷽lS)dMS𴪋򑒹:\u00047\u0005򗨃M񨄜P\u000ce\u0019v󍅹@a}\u001a򽪢\u0002𷐟򴓱v1.7&v\u0016񋻠h򮄢}򀊒a-\u001fB_AjN3񤠶\u001bqB!\u0018󰱻\u001c\u0014\u0000𸦥󛺝􇆏4/WP~񊲼TP\u0003񇡃|\u0018X9~c$9}@t򢫅?1񉝖񭟻Lu\u0018򁳄񏛓\u0016\u0019𽓆򅍒SC9񺕇FVEC󕅳Dv񜜫2󯧼sf񣲲E򞵌=\u000c6򤙍K\u0016\t\u0013ᵤ\u0002\u001d1'򔞭]" + "homepage": "Li\u0016GFL\n𜫨󹭆P\u0016Z\u00024இB𡘯?񩲙#I7\n񱮋|m`qd􊻈\u0019l𵍵L|󈋋񺵣o-\u0006k%S\u001e&\u001b\u001f\u0019d򱐱񸜇󻘰򹙜\r\u00133UMX0𴛰񐠦乶i񊽓0C򝫼kd潰\u0008V}", + "name": "\u001e\u0013񙧍:_*񐘨,Rc\u000b󸓞􈖹D\u0007\u000cQ\u0015\u000eP􊻋𡹗𰖇3T$i񿤖\u0006}{񿲢 Xn6B\u0018>\u000b񇊌V57u", + "ticker": "ⷢ(E", + "description": "񡷜\u001e𧗝{󀞃򧆊hꏶ󱪽u\u0013ow𞭝L\u001f񞺢r-򄖨C\\𳙾\u001a\u0015LRA\u000f𝣑)󥮗\u0008񸋄7񾖊򜟛u[4𩰚8e𺛚2\u0016󗊅\u001av񻉴" }, - "id": "pool1tzrcvl359nd9tmzvnd0nwweuweex5euw4uct5fyn5732qw96kpx" + "id": "pool14788h6a9rk3d07uln2jmn7ag70g2dvf0kf80e7tm3uakvm9at0g" }, { "metrics": { - "saturation": 2.148582250652506, + "saturation": 2.7062499069868897, "non_myopic_member_rewards": { - "quantity": 258618035612, + "quantity": 97207223362, "unit": "lovelace" }, "produced_blocks": { - "quantity": 332811, + "quantity": 5806978, "unit": "block" }, "relative_stake": { - "quantity": 22.94, + "quantity": 57.02, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1887-02-17T19:39:33.488010286708Z", - "epoch_number": 26016 + "epoch_start_time": "1878-08-31T09:22:09.394895492992Z", + "epoch_number": 27915 }, "cost": { - "quantity": 113, + "quantity": 205, "unit": "lovelace" }, "margin": { - "quantity": 20.56, + "quantity": 59.7, "unit": "percent" }, "pledge": { - "quantity": 209, + "quantity": 162, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "s񻞟}򦓝>􃯓􀙟󠛇\u0001󤆗\u0018/\u0016\u0010\u0000򓌽*=u򝫷\u001e\u001fE㿶\u0003A\n𦂽KDH;hU%\u000f;\u0015l~𦯰Q\u000e,\t\u0005l򕪊IF􆸊_\u0010:>򒫎^W", - "name": "򦻹󔸗\u0016@\u0001𜊢e[\\x򄤏\u000b%+\u001c*9", - "ticker": "eU񽒖", - "delisted": false, - "description": "_HH񘝔A󻹉<_y{^1򏺼񼕵r\"E\u0017y񮱀\u0005򐠺𯜱񞉾\u0004Dd񦒰󌵄f\u0007\u000b^󸞮j10󶓤FK]vGs\u001eZ򦚨1𳚉:󴼐3G򿽃:blxz.r񳈐񢽍W\u001a|ⷍ>񨫠I󗻔-𡀛6򖾁@R񧶯򜋯񞌫񅓛lC^t𷯒\u001ahh\"LtB\u000f/b󈃼WP`\u0002<\u00104#\u0012>񲠼򦭷򖂓&T󨔣\u001cu}򕀏\u000fSc\u000b\t􉿃񴥠\u0007\u001b𙰕\u001d\u0003\u0000}Yo𽕊\rY3N빂\u001b3\u000f\u0019򧥜즴j񽠂\u0004덆󇩂Xm񀂞J\u0013'\u0005%\u001d2Dk򆀉KA\u0019%򁅧򮡺xspil3\r[aL\u0014w\u0019jm\u001c\u0010ꧬH\u001d񜎍7\u001fo9\u001e|D;C\u0019񣼍󔧤tpp򟋠𧺽h" + "homepage": "bY򸯏\u0003\u0004󧠷\n羖.~inH𛕻򜋒x;\u0007s%󫿕\u0000\"\u000e\u0014$\u001c𦻍fXhV񦣽򚗲ul$;რ248\u001eZ򄃕gz񣵠坰J'9>\u0017𢌪)O𰑈7m\u0007𻒛Z􇣭L𷴊\u0000H\u0019|\u0001y)'\u000e", + "name": "(2F\u0019\u0008򤍂\u0001\u0004&󋷞;󅝪\u0003:zy.򑈚\u0015=voC", + "ticker": "\u0014򖑑𖎺)", + "description": "E򗌏񞶐񉩜𧸅\u0013K5𤍀\"\u0015😱\u0005\rc0緤󣦈󝛀[񎜌`󙒰8)\\򝐠*\u0017F<\u0010\u0010\u0011򁾎󂆵\u000eL󎓇$X𣍧P./h򠴆+󀋼xJ\"P" }, - "id": "pool1w6de26x7kk2nek0j5zv2cdzk93vdpqgxm68n5azy0cpdkyscqxq" + "id": "pool1ex6tqjmfmwnqu0asgn9flejpq8lkrvhqwfp3fcq6hv6n6fz9m2z" }, { "metrics": { - "saturation": 1.4773620861076875, + "saturation": 2.552134824876317, "non_myopic_member_rewards": { - "quantity": 81972810653, + "quantity": 427973414014, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6380693, + "quantity": 15062102, "unit": "block" }, "relative_stake": { - "quantity": 81.15, + "quantity": 80.16, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1876-09-11T00:42:27.233589199806Z", + "epoch_number": 24134 + }, "cost": { - "quantity": 33, + "quantity": 117, "unit": "lovelace" }, "margin": { - "quantity": 39.8, + "quantity": 0.16, "unit": "percent" }, "pledge": { - "quantity": 160, + "quantity": 199, "unit": "lovelace" }, - "id": "pool1jq75dzj586e870pgeugclphennjx9eplna057gdqqvzv68wj3lz" + "delisted": true, + "metadata": { + "homepage": "gGd", + "name": "\u0002O\u000f<*&^t򕽬\r8jxdV \u001a񸯮񄨯𞑂X!BV\u0012\u0005򺭵\\r", + "ticker": "@bp񂽩Er񝽑󎦜󒀄4\u001c+\u0010\u001bnd;2$𨴩*\u000f򔮌BC 񯷨\u0001\u000eQyhzA^󨹡򑹕흇\u0017>𪱅򚤨C󍽛󃺄}e:\u0012\u000b镀" + }, + "id": "pool1w0rrq7enz4axk6yy6xqlesydg30aa6s9dq9zdutzea3vzaac65u" }, { "metrics": { - "saturation": 2.5794251526532386, + "saturation": 1.8385126437339572, "non_myopic_member_rewards": { - "quantity": 161402676849, + "quantity": 344497372032, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7887211, + "quantity": 10424982, "unit": "block" }, "relative_stake": { - "quantity": 6.96, + "quantity": 83.77, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1901-12-02T07:00:00Z", + "epoch_number": 22721 + }, "cost": { - "quantity": 10, + "quantity": 119, "unit": "lovelace" }, "margin": { - "quantity": 15.06, + "quantity": 18.85, "unit": "percent" }, "pledge": { - "quantity": 248, + "quantity": 86, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "񰒳񊧤񩯯*뽱_6񖋡\u001a8eM#TK\u0017a&\u000e\u000f򾨇\u000f\u0004񵜓AE衞t-~󘹕{7껦𓔙uY񝁋){$r\u0000.򖕨}󻻴i|zSC𤌺<񷬍8k", - "name": "p𰨹񩘐HhL\u0005?s\u0010R򝄧󘛊h󾛡\u0001M\u0015P󄥠\u0013U\u001e6楐\u001e񊾢\u001c勮", - "ticker": "%Zn", - "delisted": false, - "description": "];󠂗4q\u001fB򍆝>񪶔,􍿙𿯏𲔪\u0018>dm񢣳󬙂zI\u0007n\u0000苻6􀻽򒂥ai\u0019\u00174~p\u000cR\u0013򪾻(𗡕󝴼\u000c#𥤋?򼺗񾔒🳽\ny𣧅򒤽N\\Q\u0015uk\u001buih\u0005\u0006\u001c𨅒?𱦲B\u000fM\n񻘋\u001arM\u001d\u001c񈣍SaL[J*f:󗶌d:<;{q\nX󤈡k)Mf\u000c\u000c5\u0005\u0017𔩋򚍴􋈣5\t\u0011T3jWt " + "homepage": "󹵵񙨫Oy󰦜e)򸕺0l\u001b#s\u000ef򇫂󞹑/𲾭\"󽽥\u0002{FvE(/򧪛^\u0013O x\u0003\u001c򛝢/n\u0016𰴃I 𼧥𮠣\u001c`Xb\u001f񽇣񈕕7\u00167\nc𓯵\u0019\n𞢛񚻓h\u000cY񫡤Q#}􌝔-񃔗ZF\u001b𗮵7򵱞\u001aWy𔡽\u0003M*", + "name": "󁅜0d:\\`Jo\t#x\u0012𝺥|0_\u0001\u001c\u0011P<;\u000c\rDI\u0014&I\n)d,󋱅X\u0011L\u0001𿠝y'󰪊", + "ticker": "3\u000b\u0018Sd", + "description": "\u0012𜴘\u000f\u0018[򔠺󩞦_􆱙\t諏#\u0015\u000e,E\u0011CxYj񆤂\r\u0014:\u0017񅰗񚣳H󆚲䪚|4de􌶹󡟸~\u0008B\\󼑎O񭾻u􆛳fAM򺣖\tD󚄥4󞡱D\u000c񁢜U$Yn򇀬<3rc_J\u0010𒃖񝖽P\u001c􈃆𞰕\u000f(LJ󷚱,1𠽽\"6\tJ𦲿E򦄣0𛟹󛲀6e+Q" }, - "id": "pool1qnxjpu49leuasfdyj2cm79ycepdtx89zyv6tmhlvhgaevpvyafc" + "id": "pool15zawumn7tugrdjgeakqrq2v0mka8usj6px5qrtjs90yfcp6fkud" }, { "metrics": { - "saturation": 2.746959070012095, + "saturation": 4.808767286997367, "non_myopic_member_rewards": { - "quantity": 799782916925, + "quantity": 793177494520, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14118636, + "quantity": 1475102, "unit": "block" }, "relative_stake": { - "quantity": 19.89, + "quantity": 0.3, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1896-12-03T03:10:12.383174921143Z", - "epoch_number": 2936 - }, "cost": { - "quantity": 45, + "quantity": 185, "unit": "lovelace" }, "margin": { - "quantity": 16.16, + "quantity": 26.81, "unit": "percent" }, "pledge": { - "quantity": 37, + "quantity": 240, "unit": "lovelace" }, - "metadata": { - "homepage": "K\":\u000bc.", - "name": "n\u000e1+򴶇𧗅b)򆃈q0🞀񷂒WPF򠕻굱k򏿣FB2z\u0003l@\u0005󶏯T|󧟎\u0017򿼈􇍔K6R\u0004V'\u000f񢤗\u00060B\u0004\u0003󘟆\u0008Xz\u0000򥎙m\u001f\u0004􈝫򊲙Q(R\u0017Lo\u000f򞣳" - }, - "id": "pool16fq6xy97dvfc924d83xha2752cljh8l7y2hg423mygy5jzzndmn" + "delisted": false, + "id": "pool1r8g5ghmk4qeaczfcuvvaujucp78qqal2unxaft0k06pqxjxywzl" }, { "metrics": { - "saturation": 2.1594521200569092, + "saturation": 1.5798210814292635, "non_myopic_member_rewards": { - "quantity": 866958819006, + "quantity": 6001616176, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6882074, + "quantity": 9545539, "unit": "block" }, "relative_stake": { - "quantity": 37.38, + "quantity": 86.85, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1894-07-15T13:18:12.627356324673Z", - "epoch_number": 2351 - }, "cost": { - "quantity": 226, + "quantity": 183, "unit": "lovelace" }, "margin": { - "quantity": 18.47, + "quantity": 45.05, "unit": "percent" }, "pledge": { - "quantity": 55, + "quantity": 232, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "7\u0001]󅂛\u0003/󸙔X+\u000f`EO\u0012񶊉(P\u0018^6DVf\u0014\u0005We񎌻󐙤jC\u0015zL\u0014\u001dᎡIdlC[\\󉼥􌩱񀋛\u0010", - "name": "Y|}\u0008?^\u000c𯯱q塶纓qe\"=BnW񮃅k\u0004aX򚏞\u0013=cP| ", - "ticker": "\u000bJ\u0018?", - "delisted": false, - "description": "vt=0U\r\u000e򮮩@򩠑 \u000b𜽁V-K򱔓?|P\u0002𵴩r^񺻬\u00127\"\u0015񲭀[\u0004򌯊Z\u0006|\u001aXz􁿺j\u00143񿠪ip𥫟󚵕O4m򯾷EtE\u0017󆐑/)(\"k.<򷒇񡡏𹠏\u001fZ񸳞dV󮗗:?|񀾮r򞾗$ZB𗷉\u000e\u001frh򡘝_𭦍񠽩pk\u0000\"񬰦6f+\t>%p᪺`?L7𼾎G\u001a~\u0004򩍎kJ\u001d9𭒱𝊚\u0008򶦿`@󆼞𫦃A\u0008l񕌳\u000f\nC󠶆0󻡽󣕀\u0002'G\u0001a^\u0002'!'Y𠃄,E񷓮\u0006|\u000e`pi(Wv_\u000b󬍶/bs;o򟲴􀋡󦛌:\u0006􏭝\u0003\u0011%5󀐨&5󬯲򫈭U\rh!\u0013񑭟" + "homepage": "K8\u0017ys2L󍔎񞫸&5W𵥷)^򞶼c𻳋𦣑\u00125B\u0013W\u0006Bj򄾑%\u001e򍟠󞘶~s&򊜦#f\u0019!0\u00129򯔏4𪪊PG\u0013ᰰG\u0004y9)𫻫}\u001f򘠳z\u0014_񸶑c\u0011A\u00197\u0007D}_񡠘4񚌦CKN^\u0017󄳷񬰏Jn񝧽_񩒇\u0015c^񽏠2g4\u0015", + "name": "\u001e򬱏\u0002@\u0018c󓊬1C", + "ticker": "M𥵓hw󬊔", + "description": "\u0011tOA\u0019'k񡗂MZ񨾃𽍪Ih\u0010^\u0002\u0010p{\u000f񄒘\u000bg򭂮3'\nE9\u001d\u0013[<󕐆_gI󾝗`󅢠p򀀿󍭕񦔕󸝠􍒄\u0013(t5񙹡󁂬񴩗M󕑓3򌟢\u001fD%[xAbB򀎼\u001ac w𽼡D9^H󿗨d򸍋񘛘#󾉊񐿮除Y\u0008\u0019񄡿\u0001\u0006\u000e+I\n\u001f%tq\u0000d\u0002iP\u0004\u0001\u000b󷫑򽄹N􈫉\u0019\u001e\\9B󌐯!!3U񫢰𗚉􌱽𼄀{\rg󎷭" }, - "id": "pool1wkhyh8x699370klnanh3scgz9pu2rmu58fv5aczmmvssgndae2w" + "id": "pool1qrxxd25wznqh46rgd8e6w783xujy2rynxsnzkvhjkmvw775aqnk" }, { "metrics": { - "saturation": 4.868965184484193, + "saturation": 2.80527684394547, "non_myopic_member_rewards": { - "quantity": 153612684766, + "quantity": 695815207885, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9962514, + "quantity": 7650463, "unit": "block" }, "relative_stake": { - "quantity": 97.32, + "quantity": 4.58, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1885-02-07T19:00:00Z", - "epoch_number": 23351 - }, "cost": { - "quantity": 212, + "quantity": 44, "unit": "lovelace" }, "margin": { - "quantity": 50.18, + "quantity": 67.83, "unit": "percent" }, "pledge": { - "quantity": 100, + "quantity": 212, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\nB,􍮷l2'u\u0018a󺊣󴎒/92\t\u00187򠜆妋󀎐zJ􅖸JwE󙸀󤊐\u0015C\u0002]|񟆱!𕱞8󻛔*y\"\u0016\u001d,򎕠\u0016dn-\u0014SH󶔗\u0004\u0005񼥢򗁻(r3(\u001d\u001d=\u001f𡊂`󬐨1󽮬Z\u0018|9!򳵗XN񡰴(b/Vc", - "name": "4\u000c\n", - "ticker": "K\"K", - "delisted": false, - "description": "{\tL\u000e𕑄W\u001b뉺򔄒Kg򗣓\u001f?X󚻩򕺀򣇱\u0004<0\u0007)15ᦾ/r^;l|!\t\u0006񿹵q!󯦰Y\u000e{psn𝁯񕷌EṶ򊦸[\u000b\u0003򗎀GR񳾕򋻫2:-󊹉$\u0019hr\u000fli%&L\u0008򍽷ofs:1n\u00138󿧫񀉗\u0006R\u000b\u000cCi񑕕P$󟛶I𞁩#\u0003Tr􀨊\u0013\u0018}8򷢊 𘥇Sl򫄎zi^1La򪁑{\n\u0013\u0019w7\u000bL񐅩\u0001*7󱖫􉔺񈨦\u000b\u001d=Z\u0016yGv6U$\u0011GUn\u0000\u000e񒮈\u000b񖧼񊭊SD}Z𽶒\u0010;񗓢񯘵A1\u001dH󜆈H򙺋\u0004`*\u0003\u0018񢢝򎸇;\"x񇵑\\\u000b󥂻\u001f񌨑bo#:懱󅸚\r\u0018󅬨\u0013􍝿F󿸪\n)" + "homepage": "𔺯E򩲔􍽭\"F񴙣\u0015fXR<󘞷\r9V+\u00020Wt:C\u0007/~V񈝿>\u0004u\u0011h\"T􂆫~\nHtT\u0002b?𾓠𛮔򒩣𻥉K[i", + "name": "m􉀎X󹶀wt,`1𡨛T&񽴺]xH", + "ticker": "𺑘\u0005\u0016", + "description": "t:FZ`l񊗺Q5;DiIX\u0003\u000b\u001f𧩥񢌤\u0007󹧎L6D􇟠\u001f\r2OJ}*\"\nh4*񔨧󼕍\u0004\u001eG񿕫#\u0007A'򬘿󔡼\u0018E󙵌d󼫉\u001a*\u0013dO򿨔", + "name": "Xc\t2(_7񬺄󒤜O$)D\u0010mK6~ZO>\u001e񸗘򾇤s^'\t\u0008򄺕򚻽󍚶", + "ticker": "\u0017$\u0017", + "description": "[%򽴹p:>𴝦󍗛N\u00020\u0013[Y\u0003J[>򚋸51l2򆨂:$\u0015=\u001dl󑭽\r񃶪~:pMy󯰯s\u0003\u000b{𭞲\u000bO)\u0018󬂵/I񚳚,\n<\u001a\n}9vT򪬵i򣜱𻖫싞~\u0019K᫋<^t𴉼\u001b7񶑃󼦹>iT\u0004\u001eEy]9fw򢂱򲴍򾮗󿼌pc^\u000f:򳗆\u001e򝂂{$z񙺁\u0015I񩩵r.>񺮂𹺟b𦾡z\u000cM6kL=40\rB7񇯆\u0003vi򠅨䝩\u001c𲒲\u001d񵶽\u0018\u001c_򆻬d~F\u000fa8m\u000f.Y򀗳\u0002:񣁮񉵗%" }, - "id": "pool1pvee9wwr32evmlcpawg7ga0ma3dxjnghe2krrmw9azuhvtzej8t" + "id": "pool1hk8saw9m2f979gnm3sruaf2selx9d5cwemwyxlantklg5dmtakk" }, { "metrics": { - "saturation": 1.217589246077862, + "saturation": 0.24153782734480156, "non_myopic_member_rewards": { - "quantity": 354676757078, + "quantity": 214046951, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13047403, + "quantity": 17177934, "unit": "block" }, "relative_stake": { - "quantity": 94.52, + "quantity": 1.0e-2, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1866-03-14T11:00:00Z", - "epoch_number": 20743 + "epoch_start_time": "1881-07-08T11:45:04Z", + "epoch_number": 19019 }, "cost": { - "quantity": 129, + "quantity": 107, "unit": "lovelace" }, "margin": { - "quantity": 83.73, + "quantity": 89.8, "unit": "percent" }, "pledge": { - "quantity": 89, + "quantity": 192, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "5\u0000󦜕_󺟥B]x􆰓TdC򚌘\u001fqt1s_r򐟸\t񒤍򺊽H񦗛%󀆫񵟚n\u0018\u000cF\u001d𹰇N4F\\-\u001d򓶊񖚁򆩆^🫩ᢦ", - "name": "𦀞kJ󜟎w󥔳I@񚤪H񓪑𕣖򕏙󔠉j񿗧|F\u0011򃺙6p󱑽򜃶\u0011&\u001e𒊐k\n\n򨥪u󺺦\u0008𾤦𳵊lA\u001dHX󶻬\u0006S𷟐", - "ticker": "\u0015󲐃\u0011", - "delisted": false, - "description": "Z\u0007򷊍v󉳯d\u001bu~\u001fW󁴯󏮱#%B7񚃫f-󘎕'\u001bx󗦚󬻺9C򻺲􋬄󼇧M\u001a8>\u0016\tC􌏠\u0002󖋄R\u0014𗢺\"l񞸻򅯖^򎞴\u001a0_𱼟?x1ze\u0018\u0012[𑦤񾾖c*5\u0018^𮺘6\u0016𸏋\u00068񻛔󑀰p\\g!\u0011\u0016D`o𯗁񉾉M Pv\u0014T@𜧇雠𯀇`\u0008DGSu\u0018\u001f񛫾j>ZrG򯂔􇟠hKE(򃟤EL򏈞fZX8\u0015Kf󟓎\u0004T#l.\u0005\u000fh\u000c󗽃\u0001񧨾-{O\u000ew򳦋9𵑠\u0007󖕏\u000fYj:􍓵l񌜫|\u000bxV\u001a󴎐h4%ar񉷳a<\\񖨡fW򫛫\u001e%0k񚖢;\\V\u001as\u000f{M~|󁦝\u0002񌬋%\u001d" + "homepage": ":='\u00160󎶩eJrt]{𱉤Q A\u000f\u0005\u001cS3t\u0019򛿃W咏\u0018SN3򑲞/C\u0005\u0018H", + "name": "Bw~𷮌\u0016󎬌񍌦\\\u0017񤜠񢁴>𾉥񅶋򌏦𰲲BS\u001eu\u000etJKL", + "ticker": "𷹂󴖸(-", + "description": "CU:P@񄠤\u001c񡋒L\\y#Ol𝉁(?񗤷5b􍎃\u0017H񛡽󫶖^?3T\u0014\u000b\n(`򗽻򅤘gbj\u001c󜱁*_h'R>kTP\u000b򴘘򝕓\u0011-򿢸\u0003+\u000b񳏝/\u0012Z'L񬗨󳓺𣫆\u0005e>X𛄉s" }, - "id": "pool139g3ftrt5kugesyvtu5agzj4mvcccee7r84q3yu0zww85z6ahuu" + "id": "pool1fcwn0qpygr59etaeh995yz5fh8qh5khelshw2t2dvy4xvtz2tuw" }, { "metrics": { - "saturation": 2.2609415354737035, + "saturation": 1.1960892030259855, "non_myopic_member_rewards": { - "quantity": 159851053399, + "quantity": 56308712464, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1705864, + "quantity": 18366799, "unit": "block" }, "relative_stake": { - "quantity": 60.03, + "quantity": 6.15, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1881-05-11T23:51:18Z", - "epoch_number": 3254 + "epoch_start_time": "1863-12-04T21:40:45Z", + "epoch_number": 32528 }, "cost": { - "quantity": 69, + "quantity": 34, "unit": "lovelace" }, "margin": { - "quantity": 22.74, + "quantity": 92.81, "unit": "percent" }, "pledge": { - "quantity": 190, + "quantity": 159, "unit": "lovelace" }, - "metadata": { - "homepage": "jn񪆀1o{,\\.PKLX񧤈!\t8gZ蒀\u0004\u0014\u001aW\u0000{X􏍫򦲠𕵉G\n𧬹񣋉Q\\Un\u0011qq!0싒\u000c|\u001dA񢟴U򉵖􂢸󈇌5", - "name": "򣕯-U񔶣zf򫟰󪢏{l𴱴4\u0003tdU$8𓈭C\t\u000b񴬼/\u0000\u000c5uwB񋞦\u0010󼫧!%􅄍\u0002\u000b\u0004Z", - "ticker": "\u0007\u0006񇎒", - "delisted": false, - "description": "\u001b\u0018\u001a\u0015\u0002n􈀌8gb\t]C\u001f𱢏ᵍ􀐓􁡮^lv𜉧OeX\u0019{k0OJ)cW񼾢U\u0012kp\u00164񑴅ba𵴏V򴨴𛖯Z\u0008{k.G" - }, - "id": "pool1zx42qqce0n6w9ucsjwjmp8krl6dhuzf6stlahn6pusrr5msfwax" + "delisted": true, + "id": "pool1d9tuh4qa8smdgpfmrqeuc9q9ra4vnw78e42uz7er00vg29hathh" }, { "metrics": { - "saturation": 4.06785210642077, + "saturation": 3.7920947958876, "non_myopic_member_rewards": { - "quantity": 4603984702, + "quantity": 405724214413, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8071829, + "quantity": 18182874, "unit": "block" }, "relative_stake": { - "quantity": 65.68, + "quantity": 21.85, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1888-10-20T17:00:00Z", + "epoch_number": 21688 + }, "cost": { - "quantity": 41, + "quantity": 15, "unit": "lovelace" }, "margin": { - "quantity": 98.52, + "quantity": 81.32, "unit": "percent" }, "pledge": { - "quantity": 69, - "unit": "lovelace" - }, - "metadata": { - "homepage": "]B\u000b\u0002xa𿈪D9󧋉z󮨆eM󜒇m𗳣닭񨍯\u0001񐜍s]_v񱁯9𩦇\u0008򦎣\u000f#򜮏󖯵S\\,N1󌓟R\u001e!􎬢\u0007\u0017\u0011\u000b򎷚\u0002Qfq0@Wxh\u000f\u0005\u001f󽘄]𰿖򤦤𕓒", - "name": ")\u0003~1}{,󍠐5\u001f", - "ticker": "񥾰x<5𼲥", - "delisted": false, - "description": "\u0001\u0001'\u0004-yZs3~F杈L\u0019񶂥l>J.)6󘦚\n4\u0019\u0017񜘞L༻񴠛a􁼓N򋰡C\u001b.)􊼨\n" - }, - "id": "pool1nlnmwyqjrystm3d80n3njqhe07qy66wszggemzzhv0xvkvzdwrc" - } - ], - "last_gc": "1895-01-19T02:00:00Z" - }, - { - "pools": [ - { - "metrics": { - "saturation": 3.931875050349023, - "non_myopic_member_rewards": { - "quantity": 157944822122, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 3265033, - "unit": "block" - }, - "relative_stake": { - "quantity": 90.92, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1908-06-17T03:00:00Z", - "epoch_number": 12507 - }, - "cost": { - "quantity": 157, - "unit": "lovelace" - }, - "margin": { - "quantity": 87.55, - "unit": "percent" - }, - "pledge": { - "quantity": 201, - "unit": "lovelace" - }, - "id": "pool1mekw8nc6ycn4t3ul6rtuqyvyus70m0cqhjwhe6wur6e56sxvyus" - }, - { - "metrics": { - "saturation": 4.936531859653538, - "non_myopic_member_rewards": { - "quantity": 704301251314, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15673737, - "unit": "block" - }, - "relative_stake": { - "quantity": 12.72, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1860-03-02T01:13:40.796456171996Z", - "epoch_number": 31725 - }, - "cost": { - "quantity": 107, - "unit": "lovelace" - }, - "margin": { - "quantity": 56.58, - "unit": "percent" - }, - "pledge": { - "quantity": 48, - "unit": "lovelace" - }, - "metadata": { - "homepage": "l\u00041tT󕶃\u000b𹨹.~U𪆕󤯋t򻘶𿪕񥾛", - "name": "e􀑃򩡌\nc\u000f\u000e}򰱠\u001d^󚉳D񺜰_򒼠4F~񘭗|򌻰\u0002d_\t򒀦񓼥u\u0018", - "ticker": "5p\u000b\u0016", - "delisted": false, - "description": "\u0004$zT䔒8\u001f6䫎󶽠򕘻𿉠𭚍𙏱.🙪]+󾮼\u000c1}\u0017>\u000f\u001eU\u0006\\\u001e7󡙮BH0񶐁Grvk􋹠󡰜?􈔤𕬞2j~|󂴻򨎊󥈒L\u0005z򤺎򫢵W🋱􊈲t^Y𳔜\u0010񍳄\u000b\u001f\u001c\u001ddR&'Mf\u0017񡑢k\u000bi\u001e\u0013󪦪𩙰d\u0014XK-\u0019\u0002\u001fsr\u000b\u0004󾉸i}񌧺\u0005x񦧰-q\u000c\t]󚐿\u0016U\u00137\u000eEPp*|eC1室l(񊒀𙔍\rGBnu󉤦񖦽>󰡊R󻐟s񃟣#𽹥24򡍖_k\\}_\u0000)슖$s BV7󥤝\u001b\u000c\u0018*񚏏򼇘[󙋜.䮘/LY񴊫Z\u001dFU\u0011>w{ptsH@o\\/񠎀,GJ*>񷄗V\u0000m\u0004}J\u0003󜟓+􋍘7NJ󄫚󞸌*𕔕N&򜖿\u000c񻺟󼿾󣣜:\\\u001fokg򯷹8󤫑R\u0002\u0007^\u000f𡛚󧵏󝯆S򀇉L\u001f\u0013H+󬰮0􈀼" - }, - "id": "pool1cdta9g6q5gvuxntlxjleq2uejjp2qynfsdt7mw4hy9gg6g8aufj" - }, - { - "metrics": { - "saturation": 3.073712015270428, - "non_myopic_member_rewards": { - "quantity": 595448695416, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 8196260, - "unit": "block" - }, - "relative_stake": { - "quantity": 80.87, - "unit": "percent" - } - }, - "cost": { - "quantity": 142, - "unit": "lovelace" - }, - "margin": { - "quantity": 24.5, - "unit": "percent" - }, - "pledge": { - "quantity": 25, - "unit": "lovelace" - }, - "metadata": { - "homepage": "kF𹘉x[4(;&QJ𶝹u􈠒a󤱧H!󞤱F\u0010\u001f{F񂪟\u0010\u001e\u0008t:\u001dU򍶢񣎍%񤈵󤠡nqf~\u001fiTuy6)󹫌\u0014񒝑|򻴗򁍊u򪇣+󋊄a󸪁򤶁𐕦AN󤏕4", - "name": "򸾟\u000b\\k\u0010np񁀗@򷮮󠥊\u0000`񞇒\u0007󖐐򤉶󽠽􆐐z񚘗􈔌^\u0012g\u0008/𢫼CLn\u001ec𭂌qp\u001dd񗈸/q", - "ticker": "bg\u0000`\u0010", - "delisted": false, - "description": "z򺊩\u0010\\As\u0001j\u000c\u0006\u0011XD{󨇧\u0007⤘i:񬻱6򜙃&F񗋱F\u0017凁tP32im򜉔e\u0008󭋰cWZN_򏻜𷵏mY󿉬]\u0005v𴀹\u001bj𶀲G,Z\u00035𻷽K󪭄𦩄Av2n𚑿j\u0000\u0005񆖏Boy%򿙆񊄘񢍧𳭎𐣩\u001dJxt0G@;y\t\u001eLe3򀏶NR󧊋򲿚\u000f1𦅗\u0019N󪉛\u001c@򅿑T񿍁􅁠򯖩;󬯑V򓝳񹀁𰺊UCd\u0002&\u001e\td~R\r󂖏)\u000c񢙴𸙯H}󩎫\rI\u001eW\u0016\u0007\u001d\u001fC\u0015r|􅏞\u001fV.򱋻\u0016;=󎺍\u0010\u00122EvH\u001a\u0017𹽏󌖯M\u0000\rA5\u0012O8D\u0000\\\u001e \\c\\\u0011uv\u0015\u00044򡼢򯿠GflW\u001b:$s\u0013N𻌃񒰊p򊀘򧍟\u0005bC󘬡󕙦>\u0001y5𨿁]'𖉙󭁱#d𵴟򉎙\"(\t>y𿡬\u001f\u000008񙾴" - }, - "id": "pool1t803g2gluc7euyxexw07fatwsjhsmvvt0wfunepw6pkss5uju92" - }, - { - "metrics": { - "saturation": 2.5033964020937516, - "non_myopic_member_rewards": { - "quantity": 556519519456, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 9155453, - "unit": "block" - }, - "relative_stake": { - "quantity": 66.19, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1861-11-06T17:07:59.450186822889Z", - "epoch_number": 32531 - }, - "cost": { - "quantity": 243, - "unit": "lovelace" - }, - "margin": { - "quantity": 38.02, - "unit": "percent" - }, - "pledge": { - "quantity": 54, - "unit": "lovelace" - }, - "metadata": { - "homepage": "m罪\u00117𳎯򗗘𪏳hdts{\u00166򄨓\u000bs&𐪇@Rc", - "name": "o\u0008\u0015zVa}𰋋󯦸FF󡚏m.bf|\u0011ljᜎ\u001f", - "ticker": "`򀉹r", - "delisted": false, - "description": "C4;𳟣_򛩔R򯐌򬞠󻿞Gk񩋾sUJh𭚡䙊\u0003&T𣦄򦋃^\u001f" - }, - "id": "pool14s884kf0wwyz0rdaejv8lrv9vwmuzrhge5mu8lz2p6x2vwpm62u" - }, - { - "metrics": { - "saturation": 4.572750773211776, - "non_myopic_member_rewards": { - "quantity": 2629943280, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 4429294, - "unit": "block" - }, - "relative_stake": { - "quantity": 24.93, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1869-01-31T03:00:00Z", - "epoch_number": 24862 - }, - "cost": { - "quantity": 193, - "unit": "lovelace" - }, - "margin": { - "quantity": 14.57, - "unit": "percent" - }, - "pledge": { - "quantity": 49, - "unit": "lovelace" - }, - "metadata": { - "homepage": "\u0018PM𮌐/u񺶯QsPS\u0018󱜡h-jm0\n\u0011W\u0008{􍝑𸐞K[\u0006\u000ew𴀚(^\u0012\u000b\u0016gn񣜗uII񅩢󬋣$𫴇򄎇2\tgnt}\u00014e)j􇷵r\u000b񤱗\u001eI1Q򂲳Nl\u0004d񋨒9Za򙈋SRXAf󎋾\u0006l-]𜖬", - "name": "p'|\u0006񞰤P`O", - "ticker": "_󡤋i", - "delisted": false, - "description": "\u000c>R򏥳7B𛻠A󞬯B󭕠󛙡=\u0007rtC\u0003y^󓤲4򰷎_\u001c􆀨𕏋`YR\u001djP#򫖝򞂵\u0004\u0000󥋽񞄌bY򜦫e<\u0006Ꮮ\u0001J7R?Pz󠳭&\u001a\u0003@񹙯S/?򿭀4O󙴟:3󵡖􁀕\u001aw+2Q:e@򗰵!\u0006\u0014\\𿄌&8򀮫W\u001428x90񥎗", - "name": "@󝢚񋮒\u001b\u0003,񷨦#m\u0016 􂜄󅠞l)𨜧򹶴H􊺣o\u0007\u000e\u001f~", - "ticker": "\u0006F񸑑fA", - "delisted": false, - "description": "𠨏ev,+\u0015=FS󀕖2;4^󰖻rr󇃥3C\u0000M3Y󈟪)2u\u001d󶽁g6\u000eJ񽁦򈠱񥯐!󁝮`\u0006񨠕kutUHP 򰍆\u0004󨺏󴪬!\u000f\u001d𔺂qq\u0017M\u001d<򲴤0򀦓O#21򬷔񌅠󂘊tB\u0016󩮩\u000f򭹈󪇘\u0018=oFup(HqX\u001cy(󤙺𷱢􍠏\u00008􈿛vb󵳜\nR󗥛4񁍠W\u0005_\u000f 񴸵Kl&\u0007?" - }, - "id": "pool1x3dyhukrxwavqg20k29sw0pppye8qt5u0rr3rnqx2vn6gte9ydl" - }, - { - "metrics": { - "saturation": 4.431867142401731, - "non_myopic_member_rewards": { - "quantity": 47605879103, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 9841266, - "unit": "block" - }, - "relative_stake": { - "quantity": 37.37, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1884-02-15T12:00:00Z", - "epoch_number": 13477 - }, - "cost": { - "quantity": 84, - "unit": "lovelace" - }, - "margin": { - "quantity": 16.11, - "unit": "percent" - }, - "pledge": { - "quantity": 37, - "unit": "lovelace" - }, - "metadata": { - "homepage": "𻨫\u000bH\u0007󭦙슇K\u000bs񶠿!\u0013&=󼮎\u0018r񾞩hX,􊰙Dꭥ3\u001b{M\t\u0004\u0014L|r\u001e𴇖R!>:㦷쿴򗈼\t>w%f&", - "name": "H/w򲖕l9𔢹\\fy𞌇c>\u0004|Cb", - "ticker": "(\u000c+u𳌋", - "delisted": false, - "description": "|\u00112rt􍂹]-w\u0008񡣂\u000f\u001aaPMO\u0019\u0005󸡶𡥵􎼱B=􄓸" - }, - "id": "pool1mxk8f42kdtd7jvcn6ge2lryl5ah3fy62ffah6zq48mhauwvk9y9" - }, - { - "metrics": { - "saturation": 1.9943509437924078, - "non_myopic_member_rewards": { - "quantity": 571373258738, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15595921, - "unit": "block" - }, - "relative_stake": { - "quantity": 8.55, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1891-11-17T04:12:08Z", - "epoch_number": 3484 - }, - "cost": { - "quantity": 20, - "unit": "lovelace" - }, - "margin": { - "quantity": 21.79, - "unit": "percent" - }, - "pledge": { - "quantity": 140, - "unit": "lovelace" - }, - "id": "pool1ertjmrx9x0dds88kp5tk062vguywfmrj9777q6aszmdmv2evf9s" - }, - { - "metrics": { - "saturation": 4.8399970202666625, - "non_myopic_member_rewards": { - "quantity": 3336032756, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 18777272, - "unit": "block" - }, - "relative_stake": { - "quantity": 25.71, - "unit": "percent" - } - }, - "cost": { - "quantity": 169, - "unit": "lovelace" - }, - "margin": { - "quantity": 15.84, - "unit": "percent" - }, - "pledge": { - "quantity": 189, - "unit": "lovelace" - }, - "id": "pool1q24a4jm26n8vep30g49sydhhns0gnwjm5w0nardpy3akypjk4um" - }, - { - "metrics": { - "saturation": 1.4301254486735748, - "non_myopic_member_rewards": { - "quantity": 442122595325, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 8702806, - "unit": "block" - }, - "relative_stake": { - "quantity": 42.16, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1883-08-26T17:56:15.383107187477Z", - "epoch_number": 5059 - }, - "cost": { - "quantity": 216, - "unit": "lovelace" - }, - "margin": { - "quantity": 8.43, - "unit": "percent" - }, - "pledge": { - "quantity": 47, - "unit": "lovelace" - }, - "id": "pool104u5aecxzp6k4u024eppkm0ghckder23plsvt30zctu6ucjyggk" - }, - { - "metrics": { - "saturation": 4.656242326213285, - "non_myopic_member_rewards": { - "quantity": 824570899995, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 14752165, - "unit": "block" - }, - "relative_stake": { - "quantity": 86.18, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1900-10-01T02:00:00Z", - "epoch_number": 16070 - }, - "cost": { - "quantity": 206, - "unit": "lovelace" - }, - "margin": { - "quantity": 44.94, - "unit": "percent" - }, - "pledge": { - "quantity": 213, - "unit": "lovelace" - }, - "id": "pool19n27pa6gfkv008gz9fpwx7lplpcp03tgry6jhm8kprawkt6ww6y" - }, - { - "metrics": { - "saturation": 1.4709251807785217, - "non_myopic_member_rewards": { - "quantity": 501608895712, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15276190, - "unit": "block" - }, - "relative_stake": { - "quantity": 87.26, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1903-04-18T18:39:27Z", - "epoch_number": 26232 - }, - "cost": { - "quantity": 152, - "unit": "lovelace" - }, - "margin": { - "quantity": 9.96, - "unit": "percent" - }, - "pledge": { - "quantity": 78, - "unit": "lovelace" - }, - "id": "pool1dnw5m50lvete7nfpcqzq8qx9qltvgd64lxal50mey5w4glhkves" - }, - { - "metrics": { - "saturation": 2.6904653649897163, - "non_myopic_member_rewards": { - "quantity": 157414668611, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15623124, - "unit": "block" - }, - "relative_stake": { - "quantity": 91.31, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1868-10-25T22:00:00Z", - "epoch_number": 28000 - }, - "cost": { - "quantity": 33, - "unit": "lovelace" - }, - "margin": { - "quantity": 54.61, - "unit": "percent" - }, - "pledge": { - "quantity": 0, - "unit": "lovelace" - }, - "metadata": { - "homepage": "󭓣? \u0003o>$G\u0005Fa򙧈]\u0017}5,E󊘎C\u0015󤸧?񫤦v򁱨𐜵s\u0013", - "name": "񮛊w-`v>]", - "ticker": "\u0015\u000c;", - "delisted": false, - "description": ".4cT񘪠򢱥\\KIn\u001d𻣚񈹯??񗨠", - "name": "\u000bU\u0014fh󌰕]l𘘇c񢙃!T;𬞭򾺁򍅏򺫌$dga(󠥦-b\u0001W𲊓", - "ticker": "񭀃x!n", - "delisted": false, - "description": "\u0002Z𖌸񫽇D󐝉>kM_s\u0010s4'\u0002\u0000F􂠤O\u0010L@d\u000ep&򹼹\u0008ZU\u000e9󛠰񬌺VY/\u00135c򐎊򚾑Q\u0007;KI9󺊒<+򢘝𘀴v\u0005񃉠u򉇽8R󵬄󎛥\u0019􁭜󸌞bAx2򐥗󑆉s<]\tmo򵞠:򢁏󈷀g\u0019U󑗵9I_򑏴MU򼮰jW\u0006\u001f񱫵򔃟>l5\u0004򖖟\u0002v\\\u0011󘂔\u0018񿿸𳞳#&򳍊󕆙\u0005RZcc;X\u0016}|<\u0003j񜒏G\\j\u0006\u0007񠌰d?\u0002[򮰤P\u001e񍜉5F!" - }, - "id": "pool1yg2u2mmqxf9qz5yjnzqenv4rqcdfy8lv25m8hds8py772yqz95f" - }, - { - "metrics": { - "saturation": 3.9576826387344397, - "non_myopic_member_rewards": { - "quantity": 814610532058, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 2135098, - "unit": "block" - }, - "relative_stake": { - "quantity": 42.65, - "unit": "percent" - } - }, - "cost": { - "quantity": 225, - "unit": "lovelace" - }, - "margin": { - "quantity": 70.73, - "unit": "percent" - }, - "pledge": { - "quantity": 141, - "unit": "lovelace" - }, - "id": "pool12ezgd4cjkymvzczx5hnnhjh7c8sj7cxdzghqlamtc59p2xkfq7d" - }, - { - "metrics": { - "saturation": 1.6535762062058463, - "non_myopic_member_rewards": { - "quantity": 293325613029, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 9867705, - "unit": "block" - }, - "relative_stake": { - "quantity": 43.79, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1886-05-25T01:00:00Z", - "epoch_number": 21242 - }, - "cost": { - "quantity": 12, - "unit": "lovelace" - }, - "margin": { - "quantity": 46.62, - "unit": "percent" - }, - "pledge": { - "quantity": 118, - "unit": "lovelace" - }, - "id": "pool1dq2p3uxf76dljhkg3wfzdkz9mqamy25fwcr7n5jdr6dpv02s99y" - }, - { - "metrics": { - "saturation": 2.4211963800182428, - "non_myopic_member_rewards": { - "quantity": 398496177606, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 19485588, - "unit": "block" - }, - "relative_stake": { - "quantity": 35.15, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1897-01-14T06:45:27Z", - "epoch_number": 596 - }, - "cost": { - "quantity": 34, - "unit": "lovelace" - }, - "margin": { - "quantity": 18.42, - "unit": "percent" - }, - "pledge": { - "quantity": 99, - "unit": "lovelace" - }, - "id": "pool1372x74y7j6nym325ymq8ury3gqcwfrkl9dxdvqvapqc9ux8y98e" - }, - { - "metrics": { - "saturation": 1.45068708455576, - "non_myopic_member_rewards": { - "quantity": 132646351126, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 4098915, - "unit": "block" - }, - "relative_stake": { - "quantity": 40.07, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1887-11-12T05:05:38.787273170424Z", - "epoch_number": 4785 - }, - "cost": { - "quantity": 199, - "unit": "lovelace" - }, - "margin": { - "quantity": 96.09, - "unit": "percent" - }, - "pledge": { - "quantity": 252, - "unit": "lovelace" - }, - "metadata": { - "homepage": "MxYmxP\t󲽆󤼁\u0008S\u0007", - "name": "񗀰4\"u>a\\q", - "ticker": "󖌶yuD", - "delisted": false, - "description": " 򊱺7i\u001aq:񨹋Z\u0019j\u001a𺶏~󞻚(\u001a-r򠦸`6`P\u000bY\u001e\u0011}񐾈|=\u0002_󔀳񭵪\u0003?F򾬕;6%􀲋%8򋩣6\u001f\u001d𭀣򳺀:7\u0005[n\u0004\u0019\u000f~0\u0011򑭺oGIH񧶓\u0002g񾳔~񻄈h\"𛶳𖛊\u000f@u[𶐿񤁡~2󘽐/x痾udYJ5\u000c\u001c⮴,\u0004򼋋E4򿭾M\u0007V^B<1?\u0016O1,\"򂼏02*򈭌򵏍񉪄\u0019f\u0011\u001e𓳎4M񰬷'" - }, - "id": "pool1h6dvc8z9yqlfl6m34pdjneyrlvyt74652lehv426ptm5csqpcdk" - }, - { - "metrics": { - "saturation": 1.687973081394808, - "non_myopic_member_rewards": { - "quantity": 36871842271, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 8162233, - "unit": "block" - }, - "relative_stake": { - "quantity": 93.32, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1877-06-04T03:03:17.647423017241Z", - "epoch_number": 9667 - }, - "cost": { - "quantity": 73, - "unit": "lovelace" - }, - "margin": { - "quantity": 36.39, - "unit": "percent" - }, - "pledge": { - "quantity": 191, - "unit": "lovelace" - }, - "metadata": { - "homepage": "𒋖L6񹊌𨀥_R ", - "name": "񚿺\u0018MK󟲇󮫔Kz񹬤\u0005򫩥@𲚁򧚀\u0018\u0012*񚢹dGj𮼣~H\t񂀳\u0008BHP\u0001񺜨L*", - "ticker": "轥'd", - "delisted": false, - "description": "}󏆇73񣼅L\u0002򊾌\u001dlmTM򳤟]R󛕨|󂌫(0\u001c\u0005@[Y[򇛡YZL\\jvS򯅓)\t𲫇GB(򣲧\u000f󭷮n\u000cU񰃵󬺟\"P񉚢9)󧾆f\u0013􁪜򸘭򻫓[%Ard󥅱!t񟈽77?h\u0006V\u0003j+\",咚6򑶃:𝋣\u0018:=l*9򍦜\u000c\u00138-姛󼬖󰿕Z󘔇`?QI\u000c$8\u0006_0\u0006𵝒;?􎂽\u001e㸩󒸣}\u001b𲍕񔤚[<:i󝧉\u0003m\".M=f󌉓8\\gI7Tqd\u0008?;>\u000e%N󥋣\u001b񤟳􂔖3:'󳲦򥋛\u0018\u0004C#𠽵숾vabp򬅽|R\nb󏧁&f󀷗1]򥏕\u000b󑱭w􄢤󦧸F󍐁\u0004򺒏0\u0019d\u000bh좩A\u0019򕽢iJ 0\u0005񦝌" - }, - "id": "pool1z20juu5ynxaucrkltwxjv9rgdyv3u22jpq2l2hhulaa0jplze3u" - }, - { - "metrics": { - "saturation": 4.816296053453936, - "non_myopic_member_rewards": { - "quantity": 870809709093, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 12983253, - "unit": "block" - }, - "relative_stake": { - "quantity": 92.11, - "unit": "percent" - } - }, - "cost": { - "quantity": 68, - "unit": "lovelace" - }, - "margin": { - "quantity": 26.9, - "unit": "percent" - }, - "pledge": { - "quantity": 97, - "unit": "lovelace" - }, - "metadata": { - "homepage": "P|[j0\u0019l_3\u000eMQv|DEpm򑪇񽭔S>08,\u0015078񌹌y\u0001\"V\u001d􇺄所\"󤰧򯮊𮱔\u0002*\u0003Mx򑲍$󊫱󔣝\u00123񵝔sp", - "name": "{\u0016\u0013i\u0017\u000bul򁑠7Jj󮸐􉾅\u0013&\u000el\rxo\u0004D\u0000X<뎯\u0014򤯈󌀢\u0004򋤌\u0014󮴉W𖱂", - "ticker": "^\u0010+𚷱󙚘", - "delisted": false, - "description": "񿔮򶀤򶔎R#\u001eIK𘋽]G8rO:)񨾱\u0019H\\񴃻\u0006񨵠𯹗\u0014𷷌UDJK~dLhP󔘳/`𤗨h\u001fzt\u00165\u001b\u000ey[񎻋|}A" - }, - "id": "pool1jdxqv9542c0wd99dddrdazf5t0ulfz5kdpj8w0ezlurcwhr2t9d" - }, - { - "metrics": { - "saturation": 4.814392801375711, - "non_myopic_member_rewards": { - "quantity": 565517938130, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 10468601, - "unit": "block" - }, - "relative_stake": { - "quantity": 7.11, - "unit": "percent" - } - }, - "cost": { - "quantity": 147, - "unit": "lovelace" - }, - "margin": { - "quantity": 95.59, - "unit": "percent" - }, - "pledge": { - "quantity": 253, - "unit": "lovelace" - }, - "id": "pool1wkwg5cfr8z529sz4w4srnc3e7xc3yl998j2lftwp9sl2ynuwxau" - } - ], - "last_gc": "1896-01-06T23:00:00Z" - }, - { - "pools": [ - { - "metrics": { - "saturation": 0.5735287513219206, - "non_myopic_member_rewards": { - "quantity": 691211791932, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 13966524, - "unit": "block" - }, - "relative_stake": { - "quantity": 2.02, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1889-07-14T09:00:00Z", - "epoch_number": 8248 - }, - "cost": { - "quantity": 69, - "unit": "lovelace" - }, - "margin": { - "quantity": 6.56, - "unit": "percent" - }, - "pledge": { - "quantity": 101, - "unit": "lovelace" - }, - "id": "pool184x60004d3mhqjdsp2h6lky826tdmuhpjzmvkwfj4j8hzyc0tl2" - }, - { - "metrics": { - "saturation": 3.755809195670386, - "non_myopic_member_rewards": { - "quantity": 828870232480, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 17068193, - "unit": "block" - }, - "relative_stake": { - "quantity": 29.7, - "unit": "percent" - } - }, - "cost": { - "quantity": 244, - "unit": "lovelace" - }, - "margin": { - "quantity": 62.64, - "unit": "percent" - }, - "pledge": { - "quantity": 198, - "unit": "lovelace" - }, - "metadata": { - "homepage": "'FQ󾝶Cm󳁃\u001b\u000f\u0002{󤐍򌩁%\u000bKx7\u0019\u0019~q􊯚n\t𧻸T񷄌D\u001fA\u0016V𒩯\u001cp𣑻\"񘲛dWD}Cl>𣊾MF,𢊆\u0017-󪄂*t\u0006򛐔y\u0016U\u0019񎑦bd\u00150}\u0005 \u0008m񾒨3\u0016F\u0013^\u001e", - "name": "\u000cḄ$\u001d𔣈zv񩛋3G𾓚y\u0008\u001bg\u00023򄥔\u0006􍆥l", - "ticker": "R\u001f𛁧", - "delisted": false, - "description": "𕵑j2򼲠}\u001c򱠭򨽆3􏓠\"𮙨&gm$GdB\u001f󖢛򦠎K򭥪{Zx\u001cq\u0012S򬱉RJ\u001f_\u00177s𣱀󞇜h@󀢎\u0016󐈹H\u000c\n񛹐<[򞴷򎇸B򡝓U9\u0013v򻔗񔮜1tRbSs􍈃𧠷P5C\u0012Gp񻂥򡯢XF'T\t𣑌I򄰉𦟑_\u000f󸺧絿|\u0014H\u0010'\u0001󱻬D7񪉱󗐁#Y򀜭\u0004$D%\"q򵌧&~vkb&\u001atWy<\u001c\u0014\u001f$:󎿡􄵉Q򩀄񳋡pFX\u0002n\u0000.*jP?50񊏐󖭑d4񢱵v𣬲qP\u0016𜘤񃭈𠛇8𺍫\u0011\u000e6W󍩘_\u0011\u0007Nq;)\u001f򾹁4s񸣇X󠰏򷎙R񩁁\u001b\u0010P" - }, - "id": "pool1szjc469g0fewrsy4jgt2x2nqrdculjjl7cdxsc66mjdfgwm2u7n" - }, - { - "metrics": { - "saturation": 4.159280427276072, - "non_myopic_member_rewards": { - "quantity": 872944767564, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 19617066, - "unit": "block" - }, - "relative_stake": { - "quantity": 2.34, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1886-06-22T14:00:00Z", - "epoch_number": 11135 - }, - "cost": { - "quantity": 190, - "unit": "lovelace" - }, - "margin": { - "quantity": 47.43, - "unit": "percent" - }, - "pledge": { - "quantity": 147, - "unit": "lovelace" - }, - "metadata": { - "homepage": "~񺘭\u001d9kd*v.\u001a񡜾g{vo/DPFDUP񞘃@_", - "name": "h7$򁖵9.\u000e>\u0016@񓨙󤅉𘤣Q\nvx􆹔7󉲆ONawf2\u000c%xN𨱗7\u0010$󕜌^\u0008]󤠚t`", - "ticker": "s'\u001a􅯟\u001a", - "delisted": false, - "description": "v\u0000񉗜󳴥\u0018@\u0007񇂞$NTP򌱭Eh񉄡𕫕J2oal`񈄂󅅱}<.!#_E_\u0003\"򕥝]" - }, - "id": "pool147mp92y468lh9seuqkz3v670z0eh67lzfa0j460f5zyzzzywwtt" - }, - { - "metrics": { - "saturation": 3.1763295392798216, - "non_myopic_member_rewards": { - "quantity": 353284548469, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 2476840, - "unit": "block" - }, - "relative_stake": { - "quantity": 33.44, - "unit": "percent" - } - }, - "cost": { - "quantity": 228, - "unit": "lovelace" - }, - "margin": { - "quantity": 37.49, - "unit": "percent" - }, - "pledge": { - "quantity": 102, - "unit": "lovelace" - }, - "metadata": { - "homepage": "\ro𓬧c~rk񹢩򯯺򖕀\u000f\u0001򍅵l4\u000es\u0019uu򂘍\u001e)8", - "name": "򩋲se򯒺:\u0000}􉟶\u0015Y𮹀񧸑򭄎x𧲺q%\u0017󎍩8*x:\u0004󩜲󚝏tg􅾦", - "ticker": "BU򂪌y\u001e", - "delisted": false, - "description": "vG󲓾\u0000[򐿢񎭟Z\u0005%\u001a󳣤dCNXf󰟬;R:\u001d񖯽:8𼽥\u0013\u001a\u0018\u000b1󔬹H'󠃻;\u00191򬰍w>Ms=-FNF", - "name": "{t윿vEz\u000fvF񒼜i]k3:\u001a*j\u0008E=ᳱ|\u001e򦷠U@\u0013Nb\u0000g􍫚󨮻\u001c󌒉z\u0005l񰅏CBf\u001e𧓃|(", - "ticker": "𒖾󯪿󝵺", - "delisted": false, - "description": "\u0010$e򧘩Af" - }, - "id": "pool19h6zzrd4q4sgxgnjavyqmpu87hxtffzn2e4vjc238dpxwvqm0mq" - }, - { - "metrics": { - "saturation": 2.5008034822950536, - "non_myopic_member_rewards": { - "quantity": 451275295424, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 11796562, - "unit": "block" - }, - "relative_stake": { - "quantity": 61.79, - "unit": "percent" - } - }, - "cost": { - "quantity": 69, - "unit": "lovelace" - }, - "margin": { - "quantity": 53.13, - "unit": "percent" - }, - "pledge": { - "quantity": 204, - "unit": "lovelace" - }, - "metadata": { - "homepage": "j󐅼\"􅩝󝻟a+\u0000𫍵񊀣]󼿊\u0017󾱁𮋥$\u0001nYX\u001fG\u0016\u0011򀙺𬿲:v\u00121򜙏\u000b\r󺲒+󦮴", - "name": "%c񉗒𚻷󰅱\u0019q𮟶\u0005󻫸񳅭{=񣙱򋨪+\tD\u0000ONE\u0019񟬵򀆞J󳷵c𘴄𜃛񈛻\u000bQ𝋼\u0007|W񇵔񎱖Z\r(]*t", - "ticker": "-Ky", - "delisted": false, - "description": "󇶵fᬫ\u0016!25򠿸\u0012\u0000np?\\gN\u00185𞇍\u0013Vq!􃞮\u0018♡7񣘇Z\u0006(Qz\u0015.󋪰𦄝\n%s6Ph񞉮񘏷d\u001ae>Z𽹲󔶎GB򩞰\u0016J2p񺎬'6򄅺>휍*󸄖g\u0011z🳥MZd򽡌󶩙񰕄X\u001cx灗x?b򑿀^SX\u000f=𹺹m鸞󃙮>\u000b^0%\u000f+vb8\u0004\nL\u0011\u001d4񈡍p\u001eg𤁓o\u00102\u0013򮡨񒻂n.\u0000󍏍𨪅cD򽈣qA#𕲮n򨈡7[\u0012󬧣A]z+𐵀s񇴥U$Gy!5Y򧖦\u0007,u򰎨xJ\n\u001b\u00137'\u0000󪹦\u0010#\u0007*7\u001eW\u0000P(#{R1mN󺢚񯡪}e*3\u0003" }, - "id": "pool15d64dlz24ms9t4nm76u8u77apje5qzhs4c30vgghk5wzujudja0" + "id": "pool1r9d2pxfzapzhqj78908yqh5zkaqej4wcr5eek89ws3tfu2chzmt" }, { "metrics": { - "saturation": 4.056477612786364, + "saturation": 3.495603625954388, "non_myopic_member_rewards": { - "quantity": 498921702062, + "quantity": 8747036723, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12644864, + "quantity": 3787328, "unit": "block" }, "relative_stake": { - "quantity": 68.06, + "quantity": 85.19, "unit": "percent" } }, "cost": { - "quantity": 84, + "quantity": 222, "unit": "lovelace" }, "margin": { - "quantity": 47.03, + "quantity": 9.92, "unit": "percent" }, "pledge": { - "quantity": 188, + "quantity": 115, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "w}K_7il\u00012$g].\u0014\u0018񸨎LW:\u0011q񄆣𿫶\u000f\u0013&U;g&2񌿉/\n}Ztd)󔅵\u0017\\\u0008,򒶐qj(򺂧M򚚍\r}򺅒CC3\u0015\u000bmArg!B\u0004&T\u001d𡁦3^\u001bL8n􁧷򈝷j󆈥p&b~pJ", - "name": "7\u000b\u0006򁜕\u0016󈉃O1\u0017\\9\n\u0002K򱱣gWqNgx𮏵,𙉪,󝧱qHu򎚋\t;", - "ticker": "9򭈡M", - "delisted": false, - "description": "G𸀽?:9m\u001cc򙺯\r񺷖񨔦~D5\u001c𾣾󯎤󺉟ZN?m򝾠}r\u001c񑪵k𝓥󝸧`\u000fm𖉥" - }, - "id": "pool1jc659uzvhjgnyjxdd5zuqqv2ct9hltqvpsg7n4cu42n92dtffr2" - }, - { - "metrics": { - "saturation": 1.267291524527025, - "non_myopic_member_rewards": { - "quantity": 66519303647, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 19707786, - "unit": "block" - }, - "relative_stake": { - "quantity": 83.26, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1869-03-26T17:48:02Z", - "epoch_number": 21374 - }, - "cost": { - "quantity": 167, - "unit": "lovelace" + "homepage": "\t鑋I#񰈎b^\u000bvﹴP/\u000f\u000e\u001es򵸐\u0018񏪜񽥐w", + "name": "\u0017򛿮񷨲nq񧑋󑽊W&򍉘", + "ticker": "󖴶W󢳍\tw", + "description": "\u0008Z)\r\u0000򉑹_򿬍@\t.񹤏+N󊾩𤩉󪟳S\u0012\u0012񢔧\u0006𶠳\u001c\u000bC\u00188\u001e\u0000U7d\u000f5񾺟By\u001f\r%" }, - "margin": { - "quantity": 26.49, - "unit": "percent" - }, - "pledge": { - "quantity": 179, - "unit": "lovelace" - }, - "id": "pool1upyetm8tfem4ag55q6elv5mf4ywxapqam06nz5x0e60ezv4mz0m" + "id": "pool15yyjkf59wkgnm55a39gustzavhvfpvd2hjrcdd7fyupeypugn0q" }, { "metrics": { - "saturation": 0.9765206953479555, + "saturation": 4.542888075952911, "non_myopic_member_rewards": { - "quantity": 649191820035, + "quantity": 284948441368, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3423547, + "quantity": 13251189, "unit": "block" }, "relative_stake": { - "quantity": 32.16, + "quantity": 0.17, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1907-05-15T21:00:00Z", - "epoch_number": 10662 - }, "cost": { - "quantity": 56, + "quantity": 84, "unit": "lovelace" }, "margin": { - "quantity": 73.95, + "quantity": 73.89, "unit": "percent" }, "pledge": { - "quantity": 35, + "quantity": 160, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "nK\u0019r_󞕓\u0008\u0005\u001d󘱶dv󀀄\u0012񲸓񥫯\u000f!&P\t\u0007g", - "name": "\u0001", - "ticker": "\u0012\u0010񑂞m", - "delisted": false, - "description": "񊃘\u0010H!\u0011 \u000f;薈4{ZD󉅰\u000bH^󡺱񠆰u\u0015t\u0012J򲃰ib\r2hw󩽘\u0017򅯧hd򈆋󊒼\u0012񦧧v\u0019Pi$𔴴v􁥛lN7񮸬gF󖰏|t񐤘LI&锬IJ\u001d:Ii𬢺$\u000b\n𺲍^_l`6񽖷𕥝\u00043w\u000f򾾲󛙪g\u0007!#" + "homepage": "g,/\u001cX򖥌8*)i򿳩;&pex񨽒񕜳*|𹨠m<l\u0011娩9𓆣\u0003񟋬𼼒P񖮐\u00040򟠏b񘭼I\u0014XuI\u000bO骳_^\u0002\u0001\u001bW󰖷񾬛}6\u0006:", + "name": "@j 􏛔P򫫪|\u0013񸁳\u0003nkZhl\u0018\u001aYz.", + "ticker": ".|ES񰦜", + "description": "B\u001eu-󖐘EE;\u001c=z\u0019񪌘s󟛞\u001e\u0001𕆫;\t涹F\u0018\u0017󸴙t2󨅭\u0010\u0011𷱾_楯󞑓\u000c񰗤@H\u000e􄩘񊍀󡺅E/񧓎}Iq$R' xom\u0003>\u0000-\u0004@S\u0010k]p~EH弔􃱢=󝤢j󭓪򺙛'/򓇞 \u0002gV!XB\r^򾹞LQx򍥀#}6s\u0002I\u001fH,i򦉨򒝳6󯱞$􎝧M\u0004V;󐕧B" }, - "id": "pool1rra0ry0g4aq0jx5mpxtjh4pf2pjzyjcpm57c6mqjn9hrkv7v3y3" + "id": "pool1sugwc32cs0tu8eh7gdrx5uuv8r6ddqrz7pphjzc36hutv98969f" }, { "metrics": { - "saturation": 0.6798903680991314, + "saturation": 0.2846303982152554, "non_myopic_member_rewards": { - "quantity": 348822119436, + "quantity": 318454246351, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8239361, + "quantity": 20119544, "unit": "block" }, "relative_stake": { - "quantity": 0.77, + "quantity": 8.38, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1883-10-19T04:00:00Z", - "epoch_number": 13631 + "epoch_start_time": "1904-11-29T18:00:00Z", + "epoch_number": 3224 }, "cost": { - "quantity": 109, + "quantity": 228, "unit": "lovelace" }, "margin": { - "quantity": 20.79, + "quantity": 94.66, "unit": "percent" }, "pledge": { - "quantity": 158, - "unit": "lovelace" - }, - "id": "pool10csw6v6w2mvprq7vs47gu7eyd4gzlfl5ayvjx5gvznet2x8fta9" - }, - { - "metrics": { - "saturation": 2.0625120780556117, - "non_myopic_member_rewards": { - "quantity": 507823975909, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 11531535, - "unit": "block" - }, - "relative_stake": { - "quantity": 10.69, - "unit": "percent" - } - }, - "cost": { - "quantity": 173, + "quantity": 211, "unit": "lovelace" }, - "margin": { - "quantity": 3.91, - "unit": "percent" - }, - "pledge": { - "quantity": 69, - "unit": "lovelace" + "delisted": false, + "metadata": { + "homepage": "\u000f\t񘐜񶈧\u0004󜯃󆿞K򨨡j", + "name": "<:񌻓G~0$\ncN9,mx󦏫򶋃\u0003\u001e󉍘򣧋\u00172\u001ew0:򿟦V?+\u0007$􈎛񒪵o\u000f􅧜\u001ad\u000e򈍱򨡻,\u0006򹱸$_\u001d!\u0010", + "ticker": "6;\u001c28", + "description": "m񗥊:V\u0003<;'G\u0017𼲌󋙧lZ򜒿􍆻+\t\u000b𽕟ᒢ!T\u0007\u001e\n񟺾\u0015𩄙󬁐9h*tw:\t%\u0019𖼵𶽿86\u001e.F)򒬇i󿽳򯳲*򪙂\u0004B\u0001񞦑Q?\u000c\u001e\u0016𫈊𙂻􅈲`B\u000f2_\u0002\u001e\u0012񨖸&'UQ\n\u000b\u001c\u001a`^abSs򒮽\u0001򨴻噕:􃑂𶑓vL\u001c󦌻^a񸿨\nD,S\u001d\u00169𵛎$\u001f\u0003\\򏝦6b(㌝+󦲵F\t񮿇󑲓Z=\u001f񰗣RIzi󞚧򕐚\u0000t󾀂\u0006񭇅]\u001b󡳜\u0011=*pS\u000b񶼾k󋭊/i!8\u001aD1\u000f{El9dp𰝝\u001cF󩹑1\u0018Q(T񂧁a񻂥F/>g򙪸" }, - "id": "pool1r9jgjn4rf9rkhmzx2f56g5qdlcxwxp25jsgnwrjsz7p3unplqcv" + "id": "pool1ln87mn08t0neqhr7xu5hdh68scmhdrm068zyleffqh6pjg9zxqt" }, { "metrics": { - "saturation": 2.2074837177487, + "saturation": 4.029314407285925, "non_myopic_member_rewards": { - "quantity": 590033930623, + "quantity": 482040178664, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14513670, + "quantity": 7690761, "unit": "block" }, "relative_stake": { - "quantity": 57.79, + "quantity": 92.31, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-04-16T00:11:11.187344520553Z", - "epoch_number": 26488 + "epoch_start_time": "1865-08-23T03:50:01.864911231014Z", + "epoch_number": 15041 }, "cost": { - "quantity": 143, + "quantity": 184, "unit": "lovelace" }, "margin": { - "quantity": 48.44, + "quantity": 68.53, "unit": "percent" }, "pledge": { - "quantity": 3, - "unit": "lovelace" - }, - "id": "pool1fm2eehr6xse2rufhasglzl5rxc9uyyq3r538dvg4s2e4qx3v8ks" - }, - { - "metrics": { - "saturation": 3.4431811935677246, - "non_myopic_member_rewards": { - "quantity": 647374865498, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15429675, - "unit": "block" - }, - "relative_stake": { - "quantity": 94.46, - "unit": "percent" - } - }, - "cost": { "quantity": 174, "unit": "lovelace" }, - "margin": { - "quantity": 52.36, - "unit": "percent" - }, - "pledge": { - "quantity": 2, - "unit": "lovelace" - }, + "delisted": false, "metadata": { - "homepage": "]#򫞹DFkT*\u0019#g9SW\u0017X.񖗃[񶦚ghD\u001c_\t\u0016!\u000c\u0007-/exp\u000e񄒆\u00199|O_\u001a/H𩰃n𴒥\u0005󤖖򉰍𭮓\u0016򑍨z󠆔򣩐MPF.", - "name": "8(񤦋峂\u0014x\u0019#`\r񥼄𸛍񀇁󶨝򾧇\u0011\u0007񛋰\u0001\u0000(򄰱󡬙\u0003\u0006!z/D񂤼0󟦖󖚄6 GkL\u001b󬒕Y\nT#\u0017L\u0007", - "ticker": "}\u0017~󥹎򠃐", - "delisted": false + "homepage": "\u001bZPv//%2𚈘pI󩝯\u0015\u0018D\u0000\u0018Q\u0007-.𞖝~Y񗆞깔򂧝!򮅘;I򰱜Y%\u001cD\u00194W\u000bPd򕛾F􊶡񟕥𼲳(O񭄮 0Q#򏟜򛖱X򹛢;\u0008Y`:*񻛄򁯕󔮊c󡃈𖋘'~p#", + "name": "u򐷶hKq󅎆𚖹wQ]{!􌔷EC.\u000e<\u001d񑅿Z6", + "ticker": "^𬻁~\u000c", + "description": "3򷗨<񬤸󈔮\u0003񙰌\u0016\u000f񢩱I\u001d2N\u0001#y\u0011򋵘\u0013T\u000b.6l\u0006p񈝾󢘘g\u0005\u0004񽌞\u0007^򦴖𭲱\u0019V\u0001&\u000f\u0005\u0018[񝣪dXX\u001at볯W)􋭱kpxV\u000e\u000b1P򸲴񊰈|򄅁񶞧D&Tr>𰏌}񁓜.ey\r7򢐘\u0008(\u000crs\u001c򪧗S񪎄z򔤘𹱓Gq\u001e\u001d򶀬+R𪣸aJg\u0013hB󇕒񞺏7(򴏜[\u00012SUM󛯤\u0012t1R򤘕7}/?r򎎴{G1𱕸?񿅼Vw𭡅mT\u0011\u001d\u0008򀴱Sj\\h\u0000\u001e\u000f򂲘\u000c򋈰M\u001ejX1*+\\\u000b񌫾K 񴋝\u0013񽜲󉴅󃫍\u000eH\u000fW򽋐 󉪝\u0001+3\\\r\u0017y&\u0000\r$󴉲Q\u0007hC󅏊OD򤠷Z󜦾\nzNS󛦘򠫥񒈙\u000f{\u001fY󭰄񶧜Z򗼐~򱹝V\u001e" }, - "id": "pool1g78wv8lt9n7uvw84c70aslw89fwmdfuqq92lsg4n0s9nxn98rv6" + "id": "pool17y0069744qa06cx03mvcd6q86fmtag35vusqlg8vx4ql7jlcjht" }, { "metrics": { - "saturation": 3.5102172881785036, + "saturation": 3.4093472827931914, "non_myopic_member_rewards": { - "quantity": 66966974033, + "quantity": 30885745440, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3189097, + "quantity": 15365280, "unit": "block" }, "relative_stake": { - "quantity": 20.05, + "quantity": 89.71, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1899-06-28T09:52:23Z", - "epoch_number": 13063 - }, - "cost": { - "quantity": 87, - "unit": "lovelace" - }, - "margin": { - "quantity": 74.69, - "unit": "percent" - }, - "pledge": { - "quantity": 212, - "unit": "lovelace" - }, - "metadata": { - "homepage": "\u0010\u0016t\u0016t𘋬O\u0006\u0014󾽕\"󌵬g#$e\u0013򪵬HE\u0010_𸀪f-VX\u000fw񹜏\u0003l򥙁mB򽁦𗁾 ?򓹎H(I\u0015", - "name": "󺂕7?\u000bg", - "ticker": "n\u000f_\u000e񢤏", - "delisted": false, - "description": "7󗶪[2􃾴󤕆\u001d\u000eL1򝢥W󌙬D\ru@<\u000c\"\u0014\u001e򐜄nU\u0017Y\u0006}?\u001fF 񢦸=wg\u0005m𰎱H3񽃩t$A\u0017񌨇\u0019\u000f󘓯\u0002蜰񩅅n}d3\u0008\u0017D\u0002F񮻘Jd􊶀򕅗_O䢺u𵏦e\u0005^a\u0008󙪌\u0000\u001c\r󎰯\u000e󝊡\u000f\u0008𲚥[󑷂F\u0011|3#\u0008c򱓊\u0006\u0011TJO\u000e\u0005b?8\u0005񒩬2x񴬲\u000bV\u0012\"y񙏫񑊄󔣃7t$-\\񞈰v񎬤c\"&W󮎏1\u0018x~@A.\u0003nc&k\u0011𳂴#}󮲱\nG\u001c&\u000c󚱻\u0019񤤎򬧷6񩢹~񷭚GD\u000c\u000e󨎭(𩒿C񪳬芅b#d]\\/-񲍾񃄠|􁁋󤒋heQa5*\u0011\u0011Non𪋪񠷰\u0010\u0003󚾸\u000eV`" - }, - "id": "pool14cujfk9c9y7r5ssujmqyhwqxee3up9fgpnyt6mhpwx3x5a72ytr" - } - ], - "last_gc": "1894-10-29T11:00:00Z" - }, - { - "pools": [ - { - "metrics": { - "saturation": 1.5128407820353567, - "non_myopic_member_rewards": { - "quantity": 286084419922, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 4712906, - "unit": "block" - }, - "relative_stake": { - "quantity": 84.29, - "unit": "percent" - } + "epoch_start_time": "1878-09-28T17:57:19.826633160012Z", + "epoch_number": 26005 }, "cost": { - "quantity": 183, + "quantity": 186, "unit": "lovelace" }, "margin": { - "quantity": 8.94, + "quantity": 95.13, "unit": "percent" }, "pledge": { - "quantity": 195, + "quantity": 235, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "i^\u0006h\u0004\u0018\u001ckVq\rLZ[9u\u001a}@񡡕򖒷?(󪒏Y:𼟛𿑠\u001f3򮉻񿀡\t񣞪񿁙\t:>\u001aN+$R򫆖8\u001fm򕁸𝟛胵\u0010+5'-^󝀧U\u0016,󶖹~\t*𷉵\"f{tI\u001b3򦶚󱺐\u000b", - "name": "񯏕򬶨=\u0006\u0013\u0004M󞙵\\\rk󋅸A\u0008y", - "ticker": "󣂯򣋉\u0018", - "delisted": false, - "description": "!Q U򍽑񤞈󛕾\u0005\u001atFt\u0012򴹙򘭯7\u000ejgRxh^cG\u0001x4\u0012<򅉮\u000eO!󶀻'fhd󷑟C$vzJ;􍑂𭬮2F񀣸e򞣟a󬨛񇓖\u000bz1𜚼7-f񊖒`򙤉􇨝cl=a򕣾󴏎򋖊󟵪z\u0003򮉝񐧳𣤪d\u001b\u000e9Fx󗲟a𾤊u􊪨t\u000be󟻶z8\u0011\u0015򾎌\u0001\u0001p+,򝽧J\t^*\u0006^&􀓙\u0005fso" }, - "id": "pool1ehyccch08lxgz54pjruhk62wvv28fjmtkaquhtcw46gfsuuyvjr" + "id": "pool1gkke7n76rly8s2zzfsmalvjd0qesphnsyzehcgqavyc860wg49s" }, { "metrics": { - "saturation": 3.481600506536675, + "saturation": 4.982499609441208, "non_myopic_member_rewards": { - "quantity": 643713337049, + "quantity": 65682847601, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9618023, + "quantity": 3360696, "unit": "block" }, "relative_stake": { - "quantity": 83.76, + "quantity": 92.94, "unit": "percent" } }, - "cost": { - "quantity": 159, - "unit": "lovelace" - }, - "margin": { - "quantity": 29.52, - "unit": "percent" - }, - "pledge": { - "quantity": 148, - "unit": "lovelace" - }, - "id": "pool1rz60z6yshsdmm5qegulctz2x9m7g7rhe266f04fzpyh8kjya9gz" - }, - { - "metrics": { - "saturation": 0.6520062243661812, - "non_myopic_member_rewards": { - "quantity": 25481057684, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 20431937, - "unit": "block" - }, - "relative_stake": { - "quantity": 32.84, - "unit": "percent" - } + "retirement": { + "epoch_start_time": "1874-11-25T03:00:00Z", + "epoch_number": 15160 }, "cost": { - "quantity": 116, + "quantity": 53, "unit": "lovelace" }, "margin": { - "quantity": 15.84, + "quantity": 37.03, "unit": "percent" }, "pledge": { - "quantity": 224, + "quantity": 179, "unit": "lovelace" }, - "metadata": { - "homepage": "n4@띙\n\u0008𷄯tA\\򏚈񢔓@o,%񘹯\u0004%\u0018|zbv🆅􌍃*\\27/\n~\u0018𭶝^𭡈?`V󽎗󻬜M򜃨!~VZ򽅑񈚮t]#8\u0011󝈂iY\u0017\u0011򏱱M}h4z\u000cM%BJ򽒦Uu\u0013a񎐥\u000c𥄢3/`1Zgx󟴥\u000bb5Sc󝚌P\tE󟕶򤔼\u0011\r焛\u0006\u0016\u0006}fa-𾖴\r󕽴`@E\u0013\u0011\rKX\u0006\u001a𐓯CM\u0002{󹝬%" - }, - "id": "pool15msv8v7g47c47znhzjzeyqkvzvjamqm8u4djdtwhgs2fvddfjvn" + "delisted": true, + "id": "pool1v3nh3weyq8pshlq5fvs853p8flj9tj5cp27vs4yvhlhe2du8v04" }, { "metrics": { - "saturation": 4.998526959807526, + "saturation": 0.19117183083001976, "non_myopic_member_rewards": { - "quantity": 540962386930, + "quantity": 628138185953, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6679804, + "quantity": 14106395, "unit": "block" }, "relative_stake": { - "quantity": 89.49, + "quantity": 69.89, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1871-10-09T14:13:21Z", - "epoch_number": 22050 - }, "cost": { - "quantity": 207, + "quantity": 238, "unit": "lovelace" }, "margin": { - "quantity": 9.48, + "quantity": 26.08, "unit": "percent" }, "pledge": { - "quantity": 4, + "quantity": 96, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "򃋍8}\u0011l.:!A}򯘁\u0012󚕀\u001b5񶈩񞉴󽸚🱑:0c\u000b7@5w򶫿9󦞜𶥽򚏷jY,o񻂊}sYe2U\u0000򚇸AM􄄿􅸑󟮐", - "name": "\u001bq>᫲\u000e:<=u{\u0011[-\u0008RB󶯬r򬾲𕬼<\u0004o\u0018\u0013\u0012", - "ticker": "2{H#", - "delisted": false, - "description": "\u0018\u0011򜲊iqL(\u001f󉟗\u001a1񋠒Y{󻥵mXkPSpx\u0007 n򉮘W4\u001bj󈂙a\tQa󐵯󋮠Z𡳑k\u000e񈳉f\u0003V𐌶5o򀑼\u00183]}-𛱗\u001f>N󱍽D򢁦B󹽯\u000bSM%\u001e򊝲\u0003󥊞/7V\u000eh;붸񍰧\u001f񅖗\u0019;򼇆O𫔂\u0008\u0003k\"I\u0012B0\"o뱚𦹳\u0000񲷪k>񚴲= 1a[񧅲Y\u000enu\tz)$2𚾱C" + "homepage": "1<򕁟T0k(򌱴(i\u0019X.򝍍\u000b\n򚦢󤨶+3>\u0003A%󠡩0&󞽃pp\u0005\u001b򁔾3e\u0010s1s񲍫3𚃬A󸠰)ㅸ\u0019\r,򐊤UU\u0013o?_BD𷋄ﲪ>\u0013Z򦀓x}\u0005v𬅵򻫒\u000c\u0010\u001e3s􍓀\u0016wG񜂋T\n𫨑96", + "name": "𡔦𸏮&`H[󮟠0k\u000c/𐁃nl\")WG\u0015E#", + "ticker": "(!t", + "description": "\\\u000e{B􏀾(=\\\"Y\u0014!/9x󘃕@Q雲\u0001\u0011🈴6D󒚹=6<3\\\u000e\u0002\u0010A񪎥 \u0004ANqj󏿌F󳑦C񢖹M􊹺\u001e򾝞3/he𽁕J𮱕\u0012%O񖜤𢲬𥃏WeV@I𢊁\u0006𺸁\u0014񢖟𞠉?kA񉧀󣓐8<\u0006󵒪􁇸𼐓ut𚢞\u00142\u0004\"񗋸l\u0011򥢂)\u001a򖠒\u000ew𾞿[\u000f𥊴򒗻=򕱤\u0014786r\u001c\u000b/󭙽*\u000c𲨦\u0007򢓏\u001e􏙪󵔜𹸙𸁈&$r;\\.w\u001ez&}wm\u000c\u001a򡞊򃙮󩧪^󤭔󨸃\u0011q򱪊󽦝񋏺\u000c\u0003\\F$󢒅񀫢𨘛~(󮧄\u00010\u001e`=𛰼窚鼞󧐏\u001d𜻀\u0013#󇗩" }, - "id": "pool1ql2um8rpaq9snr25vqhtkmsvtge0uuqk20p0gkxslhnsw5qyvg2" + "id": "pool1payfmc699gvye4y0n6thlz0p6e5slr68up9ytjafhvs4uu5ff8y" } ], - "last_gc": "1869-05-13T02:11:48.596084715934Z" + "last_gc": "1883-08-21T11:11:33Z" }, { "pools": [ { "metrics": { - "saturation": 3.4395280675630193, - "non_myopic_member_rewards": { - "quantity": 702045573599, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15976862, - "unit": "block" - }, - "relative_stake": { - "quantity": 83.31, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1879-01-22T23:00:00Z", - "epoch_number": 19861 - }, - "cost": { - "quantity": 248, - "unit": "lovelace" - }, - "margin": { - "quantity": 30.95, - "unit": "percent" - }, - "pledge": { - "quantity": 70, - "unit": "lovelace" - }, - "id": "pool15xd7fdcenp0gpw7ml53rg0vtkkhkqax5nxrhnv7e6h75jagtal6" - }, - { - "metrics": { - "saturation": 1.7933164730191697, + "saturation": 1.5640472206138618, "non_myopic_member_rewards": { - "quantity": 84162678754, + "quantity": 776345336942, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19041757, + "quantity": 901712, "unit": "block" }, "relative_stake": { - "quantity": 30.79, + "quantity": 34.5, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1868-05-11T02:50:51Z", - "epoch_number": 2062 + "epoch_start_time": "1896-02-29T11:35:54.812421727863Z", + "epoch_number": 29968 }, "cost": { - "quantity": 43, + "quantity": 99, "unit": "lovelace" }, "margin": { - "quantity": 12.19, + "quantity": 47.71, "unit": "percent" }, "pledge": { - "quantity": 181, + "quantity": 246, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "c.\u0008󑷈\u0017`\u0012^q񨩴$u z򏷱\u0002򠶢t>;򮓔𒉌򍳨\u001aﭠj󨓪\u0002񪷄\u000f\u0006eJw,񜞑LO䀣񙈤2\u001f]M\u0015\u001cas", - "name": "\u0010=v", - "ticker": "\u001d\u0000@>.", - "delisted": false + "homepage": "\u000c\u0018\u0013񳶯wp󊠻󰉗񂜄R󅈖󌭷:􏸘P1@\u001e򋁱󲓷\u0008\u0013\u0006\u001e96Sk𼑬\u0007m㢗\t\u000ci򰁀𦖫wj\u0000R7󢬮\u001d򏐫j󽁩3齝E񻋞!Lpj\u000b\u001f򪂰󼌴~􉛻.,@V𜱔2v3\u0001񴴢*?", + "name": "k*\u0013`8𞓣󮳘񈚛", + "ticker": "+*\u00185񷝕", + "description": "䙻\u000eM𚏼𷨔\u001a񞐘%q\u001f-\u0000<\u0000+𙏏w0򰾚\u0004,񉎅`$d񜑎<󷡆񔢜/ⓢ򆆂>jf􋻃􋔨\u0014J\u00016Hj 򳹹\u000c\u0015w8򪄒e4縅z~\r[,\u0012ep|\u000c\u001dZ꺅񺝎򓳦}D\u001euf~u\u001d򁤣" }, - "id": "pool12enzvx42hgj60edt6wrcrzr83mxhwxx8aky6ft3pf4rdvzxp3kp" + "id": "pool1mp55hm5qpwtkhtxecr8n550rg8vmvg8ccz0x4qsjwquj7hx8a3n" }, { "metrics": { - "saturation": 3.1570436549177705, + "saturation": 1.2255504663822747, "non_myopic_member_rewards": { - "quantity": 984844454796, + "quantity": 917082492212, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11905792, + "quantity": 3179862, "unit": "block" }, "relative_stake": { - "quantity": 35.68, + "quantity": 87.09, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1879-03-20T20:41:39Z", - "epoch_number": 32667 + "epoch_start_time": "1895-11-16T01:40:57Z", + "epoch_number": 26103 }, "cost": { - "quantity": 63, + "quantity": 149, "unit": "lovelace" }, "margin": { - "quantity": 33.92, + "quantity": 29.96, "unit": "percent" }, "pledge": { - "quantity": 198, + "quantity": 71, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "T_3𔬗KU򍄆\u0007Y;򬼳򙞼d$I󓕈n􄳜󜷍򺝃\u001a󊐖𑭀0󧢇x󮋘\u001c>\u0003f@E\u0017񛇹&R$𪍛vD\u001dj\u0003\u000e\u000f-򆉤{\u0005p􌑣{MO\u001c񪧛1𔱼\u0003\u0000[X\u0004)𐌳v򤳢񘸃Z\\򗶸3dG\u001d\u001eK\u0019󅢮{T\u0012s򾵲bJ񇳦||󵽬󮒴zx&&", - "name": "\"*\u0003Ns-\u0004񖫴W𿝅Ow򹙰&O\u0001A8\u001b󿭋V", - "ticker": "P%'", - "delisted": false, - "description": "Y|󴟕kKQ𾠹~\u0000񼇒𴖵<󔣈t-񑝇ꭳ;𜑺l?F󁂱U󮬦𯈇$I\n\u0002\u000bnch6u" + "homepage": "2\u0014s򋊝򓽈u\u0018񩬺󔤉򴣀􉙶!󇗦|񪤥0򎹡􁥀󏥟\"𹙢\u001dX/\u000b/\u0017k.>\r\r/򤉮𲃿󐭄\"닓:\u00059$|u񣡷򍎙%򯏙\u0002󂓶Pk\u0012(\\\u0017\u000cd񾫘av\u0013\u0011\u0016􎻍z]Pf,IXN񎣁", + "name": "gp6􊭴x8𑪺󸗤򕦛񑡞d{\u0007?򫶑񟂏%CD󎇸W򬉕e􌥸,/󖒗B\u0008򾏙\u0001hN5N󣄹\u0010O񚵟r", + "ticker": "8\u0018w" }, - "id": "pool1y8dmlf6e7lua3285ghcmyzuh8sh2zrr46n0r22gasj8fg8h60hq" + "id": "pool1ta4fnydmrx7uc9nsxs3parxdd0gsefql8xxm86y5zydzq0jdmpf" }, { "metrics": { - "saturation": 4.816136206511193, + "saturation": 3.0759643668079257, "non_myopic_member_rewards": { - "quantity": 253476352854, + "quantity": 542576176895, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3246191, + "quantity": 4069263, "unit": "block" }, "relative_stake": { - "quantity": 48.47, + "quantity": 48.38, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-03-20T05:00:00Z", - "epoch_number": 23342 + "epoch_start_time": "1860-11-03T17:33:55Z", + "epoch_number": 6492 }, "cost": { - "quantity": 254, + "quantity": 58, "unit": "lovelace" }, "margin": { - "quantity": 93.88, + "quantity": 58.47, "unit": "percent" }, "pledge": { - "quantity": 47, + "quantity": 249, "unit": "lovelace" }, - "metadata": { - "homepage": "򝌏(d򜍃\u0013󯑀𪹌󩏻򈖓Rp򷊕\u001b)Z򠆰u:|.򬝕\\\u0001/&p񢄘T[Q!N\u000c1I\u00114}\u0001򅙠󊥺\u0008>k󄐙=5󚃧O󅻵\u0010𷭔\u0001񔯘9VD\u001e\u0001󺬔󡇫𒗋𮭏", - "name": "A\u0018򶿣`\u0019AM󈘼\u0000򧢄d/򓋵򮊉𝝠)\u001c:lV\u0010r󑙚'󀑝&\u0013􎦢", - "ticker": "<񧶻\u0019G", - "delisted": false - }, - "id": "pool1pmeq0cmx2hvd7a0vytd85fqkv94zxqrlat0a0r75admdynf2nug" + "delisted": false, + "id": "pool1faq8vax4jpwvy28e7250fhzxwj9uzca5kwayt3jn8aw6z5krg7m" }, { "metrics": { - "saturation": 2.397681469551909, + "saturation": 0.6601769175632055, "non_myopic_member_rewards": { - "quantity": 463793746867, + "quantity": 85670336582, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2867080, + "quantity": 6369007, "unit": "block" }, "relative_stake": { - "quantity": 73.26, + "quantity": 65.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1907-07-05T14:00:00Z", - "epoch_number": 5231 - }, - "cost": { - "quantity": 168, - "unit": "lovelace" - }, - "margin": { - "quantity": 1.82, - "unit": "percent" - }, - "pledge": { - "quantity": 42, - "unit": "lovelace" - }, - "metadata": { - "homepage": "+\u0011(~\u000b\u0013In񽳺q`Dx9𵠷򋤲u\u000c򦜄.r", - "name": "9tZ\u0017󃫗𔊠󯯛o{n󎿚񏭥|\u001d񕮦p\u0002;\u0003򦓻!1\u0017W5񃨇k*|+?\u001a򮠛򶵓𴙏[@]?h%𓛱𦻜B", - "ticker": "𽺘W\u0002Z", - "delisted": false, - "description": "%󓇲8vk\r\u001f]򃯐\u0007\u000c򒵡AP@?\u0010򾁊N󁾏?󇧺wQ\u000b\u001e󲫠.!B򛢩\u0014𭨡2񃖕񥮚o󉗚%[\"/\"tZv􈴛𰉭\u0002E\u001b񟽓A\u001dW\u0010u91􂀾\nO\u001f𩖫X񾯓\u0019vNL[򽯧 짯#^K񬛐F\\3%m󽼓n򻀩򣬖" - }, - "id": "pool1ympumx4eec4txd9kxp092zhn5zqgkv2shm739alv9fgvgzasyc2" - }, - { - "metrics": { - "saturation": 0.5506146153918046, - "non_myopic_member_rewards": { - "quantity": 460048288477, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 2018874, - "unit": "block" - }, - "relative_stake": { - "quantity": 25.08, - "unit": "percent" - } + "epoch_start_time": "1876-05-14T14:57:07Z", + "epoch_number": 31236 }, "cost": { - "quantity": 96, + "quantity": 240, "unit": "lovelace" }, "margin": { - "quantity": 13.09, + "quantity": 95.34, "unit": "percent" }, "pledge": { - "quantity": 246, + "quantity": 191, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "\u0018sF󃪜񔗨򜖕󝸪>m\u0000\u0008k󊰾-\u0002|򤌸xy+򢶫nd򋹏\u0008UGXXP\u000b𶒨E񽁇LusA\u000857\u0018&m\u0019\tI.\r\u0004􄰗@", - "name": "􂹣x@r􆚗󒧪􊙁񑥒*~𽍀򁭑0~񕥵L𑶛\u0012򀉶򚒢\u0015곭g\u0003&񃸿j`􃢬\u0008𡪤\"󅤏.\u0005򔃁&", - "ticker": "\u0019\\$\t", - "delisted": false, - "description": "椅U\u000cg6\u0006\u001c񷱌QpV9𹊂\rX񆐄YKp񠸁񁶇)󥕰\u0011𾡊.\u001d򧑄:Tbv3Q\u0006\u0011\\򠔉򀕁I򹮥\u0018棈\u0003󊇾\u0008\\񖣑󎮌.𿢍쪺H\"d\u0002=U}AtZ&,fw(\u0018$*Q\u0002z򟫀9L\u0008F*Yt}𒕾sD,s\u0010Vd񤹱\"/\u0001'\u0012o󋫏" + "homepage": "\u001e&C򌎥QPHMa(-\u0004", + "name": "Dl󌁥񳖉=>󗫨󪅠񩧽񝁜񺖢", + "ticker": "B:󚐇1S", + "description": "C\u0011\u0008𸆤󩆯]~\u0010D󅆣 ln󸀅\u0001'񙭢D򠊄T񸝃n5H򓝪}\u0019Y\u0008\u0004򗳜Kf􃀞\u0013|G\u001buW\u001a^#򦬿<\u0014𒂦d\u0005󚎔􉖛Je+Ajt򶎂򳍼\u0014Yz򰣕\n\u0013𽺬\u0012󚿩)3𳱓#h#󶚡hj\tGQ;\u0012}^:\\BD\u0015򛤋\u000b\\\u0000 q\u001ah\u0015s^􃗿QG^򪺼瓴M\u0011Du񿒎\u000e4-𛚃앮V9&RA\u0001i`񢟄^\r􄖳򠛄\u0016Z󱀝8\u0004~\u0007񋣞]󐤠򠂹R󞜠;񇕘񀸃򪲹󍈒+F" }, - "id": "pool1wmtsqcvkgueptz3ydwtutn6nxdn9clznp6py9y92t89nc56gj32" - }, + "id": "pool1qgecrzhwhu5ydvqww8ng7exhya489lwchznyxpxuelrdsjn5x80" + } + ], + "last_gc": "1859-07-28T05:57:09Z" + }, + { + "pools": [ { "metrics": { - "saturation": 3.0007964166365673, + "saturation": 0.8706037623709478, "non_myopic_member_rewards": { - "quantity": 879659659898, + "quantity": 756665441344, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15659473, + "quantity": 3519701, "unit": "block" }, "relative_stake": { - "quantity": 31.85, + "quantity": 91.24, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1904-12-27T22:26:39Z", - "epoch_number": 6754 - }, "cost": { - "quantity": 28, + "quantity": 24, "unit": "lovelace" }, "margin": { - "quantity": 19.08, + "quantity": 54.11, "unit": "percent" }, "pledge": { - "quantity": 33, + "quantity": 226, "unit": "lovelace" }, - "id": "pool1epjcq8z3mpxd8urddqry66tx373p0u9tas8e4pp6pzv7xhh9ghz" + "delisted": true, + "id": "pool1n6kxuzey0ynnyeat0qp29ulhrtsmw87ve927q94alvshqpd8che" }, { "metrics": { - "saturation": 1.1239243575551316, + "saturation": 1.9448174798759332, "non_myopic_member_rewards": { - "quantity": 258281429978, + "quantity": 470254565274, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17450885, + "quantity": 6808493, "unit": "block" }, "relative_stake": { - "quantity": 47.13, + "quantity": 10.13, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1905-03-29T20:27:46.194866719292Z", - "epoch_number": 29817 + "epoch_start_time": "1859-10-12T12:04:44Z", + "epoch_number": 14667 }, "cost": { - "quantity": 19, + "quantity": 76, "unit": "lovelace" }, "margin": { - "quantity": 42.58, + "quantity": 48.25, "unit": "percent" }, "pledge": { - "quantity": 19, + "quantity": 49, "unit": "lovelace" }, - "id": "pool1rrgvmlc9p0w5je9gng8dwz2gej5zqu7vss98227dvjruz8v2ua6" + "delisted": true, + "id": "pool1q8zwmwe6eypzuew4xsj5camekpg80rf5grdu7z7yw6tcx3n9qkk" }, { "metrics": { - "saturation": 1.2394414808330179, + "saturation": 3.874317563027569, "non_myopic_member_rewards": { - "quantity": 582710098866, + "quantity": 406560199447, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3087859, + "quantity": 16748081, "unit": "block" }, "relative_stake": { - "quantity": 46.34, + "quantity": 4.31, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-04-05T16:00:00Z", - "epoch_number": 13372 + "epoch_start_time": "1859-01-01T01:30:20Z", + "epoch_number": 2302 }, "cost": { - "quantity": 78, + "quantity": 4, "unit": "lovelace" }, "margin": { - "quantity": 69.79, + "quantity": 62.66, "unit": "percent" }, "pledge": { - "quantity": 0, + "quantity": 230, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "񥟱|倩<󧟦\u0000񯆜􅥆N􏴕\u001e.\u0018|?p\u0019z5񚱲?f󥭮\u0007\\@󯕫𶴝\u0005\u001a\u000cq𿳋Q󋐛\u0003NZ\u0000k򀄴󌊽𾦌≠\u0017\u0008ୋ򼤜򮉨", - "name": "\u0000󣃑\u001a", - "ticker": "镝\u0001:", - "delisted": false, - "description": "񁣞?Cz_=g\u001eG~􍈨𪁑򺮄_􆡴|\u000c\u00106\\W񵵠{7C񘋲^ᕵ򐧧D񔚠󤉛򏟱g\t\u000eG󬝽.\u000fA󮏔\nBm󤝊+򓄽pK󰲝3o\u0007\u001e1\u000eRS\u000c%8蒨;G񖇉_-&\u0016N1" + "homepage": "\u001bTO𾣷'𩫏\r򧢰k񛸡(`\\󆣬񦎦\u000c\u0004^k$呴b\u0013EP=\u000eIks\u0008:\u0010\u0017\u000e\u0002񵐲b񳿭[tʧ4v\u001c56G𴫚󲣳򲒔6󴶻󊐦vH", + "name": "'󅽒򅨙4\u001d󚷧Pv'Er'\u0016&J󜧝𿶉1J", + "ticker": "~n󵐣.", + "description": "vQ\u0007𛦺oj^jLoKP񺍑A񭓥\u0012lr񤷄\"~\u001c6\u001c" }, - "id": "pool1qh997pty04x0zdaq4yhf7z5j5j9e39qdzr04wallh6feqdq2fml" + "id": "pool1p9tx3gnfactvqf76f34a6ap36jcyx2dp99nzy79ywdkcq2879p9" }, { "metrics": { - "saturation": 0.5572380539690674, + "saturation": 2.8940185338346893, "non_myopic_member_rewards": { - "quantity": 958873254729, + "quantity": 678326885977, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6235071, + "quantity": 21183585, "unit": "block" }, "relative_stake": { - "quantity": 39.92, + "quantity": 45.49, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1863-08-30T17:37:54Z", - "epoch_number": 20218 - }, "cost": { - "quantity": 76, + "quantity": 49, "unit": "lovelace" }, "margin": { - "quantity": 4.34, + "quantity": 76.47, "unit": "percent" }, "pledge": { - "quantity": 237, + "quantity": 153, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "𣹁񬄭?\nS\"񚩛l0Xo󁞕NG񗥊򓡯c\u0008>u|zGzX64񗍺r{\u0013\u0013", - "name": "HA", - "ticker": "_{i=\u0010", - "delisted": false, - "description": "i`\u0008\u0006FR򶖈\u0001\u0011lKr񨱏ᙰ2%\u001d\u001av\u000fw򰭮>\u001f󯱞\u001eS\u0018񫟂𧵍\r򹄆/'&`a5.v\u0014\u001b\rh]$10L\u0002-򭋵E9򺗘\u0013K*\u0006|,\u0004I`󂧳\u0000򦓥4(\"D*(j򏩪W\u0008\r\";\u001b򬹎\u001b{Snt\u001b򘝯񡸹󀈊s\ne0&L|*%,\u0005񞘸I󴮸\u000cH{bCQ񥊥;\u000cj𝍻󀨈lR򕧇Z\u000f*󎿍S􇶀n񡱿>NPs\u0015\tS\u000c򹉱񙝇@0𲐻\u0012L(O\u000c\nX򕚗aq񛞿\rUo~\u000bz?[򌰋a\u000cn?\u001cl󗠩\u0005+\u0010" + "homepage": "\u001feH\u0015򶏑򵸕BV쵀^W򞧦\u0003.,\u0019򘇫򒔪C>\u0006\u000f j򱕑\u0004-;'񫕺8_z->lnV񀦰^\u0006b䌯\u0019\\W\u001f?\u0008󐖼A\u0014򜞈~G8i\u0013<𢬑iOืu{\u001a_", + "name": "𿟬ECp$9:Tke򘟎󡔴𖘹񙽵\u0007~\u0014&!󑊀󠌊\u0019irS\"侞+M󐕚񆽠", + "ticker": "\u0003򋕋򃹔\t", + "description": ":B\u001c\u0019\u001d\u000c\u0004󿜥𽌤U@zd#l\u0002,\u000fRU򟷵x񁕠y!T(P[a𷌰\u0000􍣦c\u0006XL_u򈈚v\u0006c14oEF9A{Y≩;󮿟CC񿨃=w\u0006𵪩\u0018hqBsS󀕪iU[mj\u0005\u001e\u0017삉󬝟c񐧲P򲛣\u0010\\\u0014\u0014d󼌣\u001e񊫷W𬓯Fh\u0014\u00050&`}|󧐪\u0019p)򲰇\u0005𽎸񣙵Nx}@}\u001c!\n\u0015|o>󼠠t^򽨓C2+&2r=z𕀜\u0013#\u0005k0:" }, - "id": "pool10grk9v23zjr0duf8jxqr50m7sdfjqeppl5haf7drnemcz05yelp" + "id": "pool1q07q2k4fnrykzhu3mz9nhafrq37shuuu0vsystutfgp07c4y30c" }, { "metrics": { - "saturation": 2.3240373245490002, + "saturation": 1.0098041771475956, "non_myopic_member_rewards": { - "quantity": 37818699679, + "quantity": 471222249755, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13661707, + "quantity": 4660888, "unit": "block" }, "relative_stake": { - "quantity": 98.34, + "quantity": 6.12, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1862-04-18T13:48:37.24515902894Z", - "epoch_number": 7453 + "epoch_start_time": "1870-01-09T06:50:45Z", + "epoch_number": 8320 }, "cost": { - "quantity": 26, + "quantity": 93, "unit": "lovelace" }, "margin": { - "quantity": 91.05, + "quantity": 24.29, "unit": "percent" }, "pledge": { - "quantity": 199, + "quantity": 209, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "󕚡󙘿(}\u0000󺑀@󓲙󰹹􍰈𳹧7Z9\rN\u0011\u001e\u0008򐎢vB\u001a\"m:񩚦󷰄󈯸G\u000b<􋝮\u0015\r@\u0012i𘤦񈨯D6pl\u0001Ag𖾔󨛝\u0018N[\u0004Ab5]|\u0001){𺮭_\u001f򉞃h)\u0015l\u0012򮣢󔝍𞊾񰰇\u0010X\u0003e񊧬񗃌}\u0003", - "name": "X𫮿󐓊", - "ticker": "{<,", - "delisted": false, - "description": "tf\u000c\u001dzJ6V{M,\u0012*<\u0005m򈠃n*72\"󿏁,𾝌Rw󯡩K\u0006񷧊\u000bd{\u0012\u000c󳈫a󏝁\u0017\u0019T@5n񩘢񹹈\u0000򍞋\u0000\u0008󁼢v/\u00147.\u000c򧉀 𝘂pW𹠁𘬡\u000e\u001c\u0005\rODrJ(I?\u0011񵫌,ꝶj\u0005\u0002򅈳𪩓񚭐jfx𷽤B𹙐jid+\u0010󝾛\"󫧊V,SV-0񸡊#\u0016󰡧m􁳧!)\u0002򯇺^󻼌/󸮄휌J󁤴j󉶀񕃮􂱟| KV򤈔y󫛿󐍃\u000bGde}񽊨󵒔\u000b\u0012!󅆇\u000f5\u0002u21􎤍\u0017\u0010D\u000e 󱢾5\u0013.\u00190G\u0013R\u0007ib\u0007P\u0008񁘏lV\u001a𓒖񚊅I𲐗i󥮼򈼉Q/MRp󒁛Y񢚚Rv\u0005򊅦V\u000f" + "homepage": "]񨔚k𥂆f󼞝hVA!k\rk\u0001񝙝$𬢘𯼇󐝬z򠆻f𛶨Fᴎ\u000e}>\t򗃹mEW\u0001)9~ 󲜶8=􎌚\u0000\u00156hJ\u00139\t򰽔򏙦\"\u000e򼛾f񭥣uP'E󒌶Wfs񮽒󗞜\u0014Gla?j\u00181H񱿄\u001e𴴵񎓋m{𡟎YM񹣭_S󠗞橕OL;񤫋bWiL70󅱆𿵧I\u0018\"𛑛*iHR+󐍨򭷱򟉛]񷺄C( 񡵤C&\u001fEM\u0010`A^@󬹡'\u001f񚷙0_\u000f\u0014x󑨴*z}\r\u0008򆋟c:񨮅L\"*񞯁}sM\u0003H𗸞u\u0003\u0002\u0014u󯡍t👈<\u0010[C󲼿󄜵A" + "homepage": "+-󕹖\u0002W𓥴\u0017?\u0000P󐮩&h~iW𴪅\u000b\n%4󉄸F7𖑘\\Sn]j󳞒^>\u0002񂮜~𲾶`'\u0014\"񈱉CP^>򁝶", + "name": "𽉃a+\u0012+\u0001\u0018\u001b", + "ticker": "Zj򧽈", + "description": "󝠩\u0018𛼀\tL0\u0012V󹋜5rxTR\"}𗐺o\u001b,\u0014𿓗V󐰑n󌁦󄆱\u0014bDyNE\u0013\u0008񾝌𻲞|􁪩4򂟷mMn񈝶?񄩡xQH򹍗\t򅘬\u001cC򡈃򹻄@}^}xo\u0015򀒎>𶮿Al^N\u0014\u0016􋣺NSI0#@A3\u0012󣝾\u0008\\-Y򓱶u\u001a;\u000c𠔯Au𶖺*\u0002\rI\u001c\u000fW񙏄\u0017\u0005񙵻\u0019LDC\u000f\u000bK\u0013\u00178\rV񵺞W\u001e󻡿rd󠈜\u0000J򑬐R􊼯󤒧\u0017󩸇󆼴3m񛰯(\u0017C2}񖇋􊍮l🵤A\u0011a鎳󡀻&𥊶\u0011󍜪K\"𷁬VY\u001bt\u001co+򩲀𹞿\\8􏍤v\u000enIGO'Ok'" }, - "id": "pool1zdfd36ln2qxdwl8lafp02jq5vhnh6j7enpfse3cgrdyq78jgp6x" + "id": "pool1qxh0hn5mk35543mqrg4zg50g8z2yxz07u3zf82vud3p32yh3me4" }, { "metrics": { - "saturation": 0.7286938354555883, + "saturation": 3.2729297661118126, "non_myopic_member_rewards": { - "quantity": 28372537381, + "quantity": 200324491657, "unit": "lovelace" }, "produced_blocks": { - "quantity": 90234, + "quantity": 21323407, "unit": "block" }, "relative_stake": { - "quantity": 24.87, + "quantity": 98.67, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1871-05-03T09:11:21Z", - "epoch_number": 26514 + "epoch_start_time": "1885-06-23T22:08:43.602205571255Z", + "epoch_number": 30090 }, "cost": { - "quantity": 144, + "quantity": 195, "unit": "lovelace" }, "margin": { - "quantity": 97.18, + "quantity": 61.28, "unit": "percent" }, "pledge": { - "quantity": 246, + "quantity": 134, "unit": "lovelace" }, - "metadata": { - "homepage": "񲁼N񉻚op\u0018\u001f􈷷&􈥩|&uM\u0012\u001f5󬨅>5𝹴:bAL򥺁󄧳󦏣WR=.򓤋d^ME\u0013򴅜򇘁[\u000c񆀯#񜾣\u0007yPY򅧪8􋿒󜻧󗗜lg?򖞄񾥨\u0007>:#GPNydKK0+\u0011D򐀆f\u0007", - "name": "*E", - "ticker": "o\u0014񻱄񞼰n", - "delisted": false, - "description": "栃񥾮񯑢\u0012\u0014\u0013\u0012\u001c<򯵎񢘧!dpZQ!󊛱\u000f@\u001f\u0000_\u001bIs􃻓I!\u00125\u0019-\u0005:􇂘1t1󶄽򩰔p\u000b(\u00167w󢹵,-S񃒰Jg\u001d\u0005U\u0019o񑚫9~d`8Ijy\u0006q\"7.񸡢V)񐷨\n\u0005\\\u0015dY񊲆\\񗱖㣤[𧞳9򭌞\u0014\u00182𧽠񳬕;󊁬*O\\*MW񶸨󿬑򑢥O𬷙e\u0016\u0008\u000bo>.\rJ񘞺-򸣡\u0018𦗯~Ccmr(\"=o򻺄\u0005\u0012r󮅲mO\u001b0Z󈖄Xynm\u001eQM򈖳\u0011A񶙗J1IF<\u0011I\n\u001a񭱣^񑈄{򸢞>P󚛻+n􄳀Q\u0004\u0000]󔦗񤾤񙬩?0񭄚", - "name": "~󙰂c", - "ticker": ",N򯶞", - "delisted": false, - "description": "V񃘬􇵀?y}~*e𨟼\u000c󋧘򍀖X`\u0019'\u000c[I\u001fr]춑񾧐{󑏏'󲩸\u0006񃊥r" - }, - "id": "pool1rxpux3g4q3y2yyn90rrkdgnhsm49fw6a5rcjgvqcqc2qq8v22xq" + "delisted": true, + "id": "pool1484ent3jupc8rx8nlqktam2h2upfjzp9t687ratxvywhjqlrzc7" }, { "metrics": { - "saturation": 4.532363188475593, + "saturation": 3.204617367900715, "non_myopic_member_rewards": { - "quantity": 85563482603, + "quantity": 520748549590, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5317284, + "quantity": 16308652, "unit": "block" }, "relative_stake": { - "quantity": 35.88, + "quantity": 2.95, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1862-08-13T19:16:02.036884636228Z", - "epoch_number": 30950 + "epoch_start_time": "1862-06-17T04:17:32Z", + "epoch_number": 27681 }, "cost": { - "quantity": 111, + "quantity": 2, "unit": "lovelace" }, "margin": { - "quantity": 47.34, + "quantity": 18.42, "unit": "percent" }, "pledge": { - "quantity": 138, + "quantity": 90, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u0013=H|*󮧰2񤩷8*ه4񮓪R\u0019Y(G.w{\u0002:񵂟n}󸙄m[򕧖5󴒵|h񓺣F\u0005𒟊񛎼(\u0001v;\u0019*򦐈h򵭰\u0017󔐡wR\u0017\u0015\u0019󜗣򋃂7Ln򧱂(C\u0005𽴈򐔦󲜮1WDsn$S򍚛2\u0004S򭢵5A򒉇@}\t\n\u00035򩩧*z󢁕򊗅`?𬒯n", - "name": "g񾾑o񾘅R+/_,?<󙹣𐃆򹥳`$\u0000Hi\u000cDo%8 \u0013򬑳E:1󼖧,5󥎎𙒠GX󂊞\u001e\u001fu\u0013%", - "ticker": "Kog", - "delisted": false, - "description": "F[N􌖰𐾺 2K\u0012AEm𥑥pD\r\u0003\u001e\u001b\u0005󚩢?􋤭\u001cc󒟧󛚉G\u00163,L\u0017򢀱񎚊uf\\5\u000c\u0016J\u0016W!:mk$\u0007\u000fcn񤎿F󦩰򧟈󮝂󦩸1$\u0011򏽺Ni\u001b雌;P򊳂\u0019񌱞򕋦R򊁙\u0016/\u0003$\u0019𻡝g\u0001\u001d򦓅\u0013$\u0011򺈐\u0018k󊨬..u>O񒀈[G6_Ey񿹘򗉣l\u0018\u0007󠥈񾛞⒄q\u001c񰈶-ai򚃣\r\u0000n&\u00149󇓗\u0019Q\u000cW\u0001\u0017\u001dJ񳽚Q񮶳X\u0013W\u001bi𮀬Dwa*\u0002\u0014𣺾$\u0004Yd񁭘}򳾼]z񳿇]3\u0013󔍟񋆰\u0012s򖽰J񖎊" + "homepage": "񃒓>󔇾!2򁾑$񷠝0U'񟖟F񭒯58򃤸x\u0002ww\u0014񘜊d򲖗\u0005\u0016𼺜=𶍒m񀛴򅃹[𫇲\u0002𡀽𢓸F\u0010R\u001d]k\u0008𤈄zy\u0015 9𢎞󫐐\u0012Q򁞢t𖻽󶮦]!PXH", + "name": "^\u0000鑒񑩷r\u0010NC󈣭8𿆏M\u0007|{\u001eRc\u0007󤼜󍼥\u000bWVSV1񞥯\u0018􌑩%l򚡛\u0015𣽶\n舸S񔏓G\u001c􂺚", + "ticker": "\u000e񮟍%/", + "description": "\u0000󅴟󹚸\u00019aE5󅪯0_󧀆$򻺭Oeg c󗫷A\u0019)򁕓񌭗B\u0005񛹫\u0019\t\u0001\u0015L\u0002 ~񡹰4G6Mp!%LR\u000e\u0012\u000b3t\u001c3򬤒\u000e򘩟Q\\=迷j𸟳\u0017AK\u001f?|Z\u0012\u001c\u0001o", + "name": "DG\u0013-.NH\u0000(񒝀\u0011񫠳𜓎G\u0003c\u0010[2|\u0018}񅡜󄧵Y\u000fZa", + "ticker": "񱧫L򔈑\u0010", + "description": ">񒅥\u0012𳤁򅁳\u001fBxjvw񆷦a3􎠳d\u0016򞧏\u001e\u0010KM󰀡*񀒋\t\u001c󱠀9x󮓩񑈮𧚮rJ󄹧K;\u000c򫌔()񌁈\u0010Qrseda\\꩒𸈫񋸆\u000c<~}񇸡v_\u001e$񃱸\u001a󗮒@򕑻񡲢bFP񃗀񰥠\u0000\"󼟃󽎎[OE񫻑󂋰%Y\n\u0014|\u0017򭺶\u001e\u0007\\񅐂򃊠VVK󋣂\u0010R񨘤󾒂\u0019\u001cd\u0000C󑴀I:񆲄\u0017&y6\u0018bd7T.#d򴦩_?\u00036\u0006n-)\u0014,z\u0004GA 4/\u0010򵇉񴴨3\r2𘒗񒶩k~󧠻+/9\t?v󱕈\u0001񗎷A\u000b=\u00180Ye򌑱2rcFAa񈏍^3񤁸\u0000KGm񛍥\u0017~sR7[#>򌩂cR\u000f1" + }, + "id": "pool19r23yfpvu6ske5fu4l6d07h2qdg5tcpcaa36h4x2df97uccmu7z" }, { "metrics": { - "saturation": 4.056850542812943, + "saturation": 4.497143141398755, "non_myopic_member_rewards": { - "quantity": 914345763587, + "quantity": 579167115432, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6669830, + "quantity": 21523774, "unit": "block" }, "relative_stake": { - "quantity": 76.63, + "quantity": 69.55, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1860-04-30T18:49:48.511740950914Z", + "epoch_number": 32450 + }, "cost": { - "quantity": 90, + "quantity": 68, "unit": "lovelace" }, "margin": { - "quantity": 35.81, + "quantity": 11.14, "unit": "percent" }, "pledge": { - "quantity": 88, + "quantity": 197, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "\u000f󂁞,G]𕣺_\u0002\u00036I󏧻\u0014\u001ddm\u0004uh)$񦧙\u0016\u0011'%N$󏞭\u000eOJx񀳽𠜲\u0008\u0016򕅊j񠤌Z\u0006V4𦴗e򴪋p;\u001bYa&󼊻y򃖳Bor2Zr\u001a\u0010y󻰳\u000c?@P𯏓p", - "name": "󊶄#$\r+R򺳂򳼒\"\\5󬐵j`1\u001b򾻫n\u0014\u0007𷆯􀬂tJq\u0018H衏\rO󞭨d󧹫򺠜򑉐G", - "ticker": "aK𮀃󄔳", - "delisted": false, - "description": "F\u0001y\u0012A\u001bN(W\u0010h󊍁_W\u00114񋒌Ei!c2\u0004nY򿡔񍽫~,\u000cN_𞤢𯱣@wO[}4\u000c#𯒟􂱝r\u0000 $#&E\u0006_󁲮\u0002p#􁙍qS$d{j.􉁒5~>\u0005򥐂NZ*񄙃rD󠄝bY􆆀'z-\"_󈬃^e\u0018lW\u0006?\u0010x󄸏\u0004󠽫$4𫬛򡺃b\u001f򞜥򂗺򝶵bW*INsv򍝗3X7񪽆YM*7󰗯6},򮁚\r\u0003𔔯\u001a񸄵2\u000b^\u0014񁏽\t\u001f\u0017F񆚃Y򧦠k>x+]x M0+%󼫘\u0018ib񴛆򂂕L󗓖K񔨦\u0010+񔐯𷔌𤔟*𱅫sH=\u0015頲D񜓥򳰑񃼸>󗯽9;\u001d)Z󥝜\u0001\u00021sI𘏈%6\u001b򕠟񩦸7~򹵚2񓽐\"J,3\u001b\t|򟋆𨦤8\u0012bR\"󂴹u\"><6S𲁎񕴈\u001f" + "homepage": "Z\u000b#򨪸8\n򓰀\\WQ\u0019򷵶\u001db]W\n\u0016/\u001c󋌈", + "name": "?𖉲Uiw􀡞@sA𐺃鈦'05򘊂𦥗 EW觟\u0015zkr&𲺻*񹹊\u0010\t~5\"񆒑NHcOur1'#\u0012Y򟷙r򣠅&\r,𓇼}n򀬇𯭴tF񖗊񿺸#" + "homepage": "l\u000ec\u0012񣸦L񴛐󤝐\u00013󆦱}\u000b򄤷\u0015{\r󐒼󹤵M𽿼imeS\u0008򼞂򿖍=U󩚏򋀨\u000fp3r=&", + "name": "𺰘'b", + "ticker": "$M𭪙;%", + "description": "􋖁򠤁\u0019<񸰶⋶)+򿨍^\u000e%𑾕@nq\u0008𬉪k'\u0007S\u0011㴒B򦟦,󎡹4:󸇯𦦑^𚾎\tg\nW1[񳷃\u00032<|C\u0011\u001b󖌣z\u0012N񢰲5Lﭾ񍋌0e\"\u0015\u001f򐙞b\u000f\r3r񜻿A\u0019𹨑Uzog{?+\u000f>f𠅃𱹤𴐏q'\u001a\u0003P򵼬)\u0001𤢂\u000choO󽂯󱩄󂭬芻񁸱󾃐󾷂𚽳􈓜1\u001bW񸑭\u001c\u0002`𿚍:O\u0013\u0004\u0017I] e/󑺕~𣔪x,\u0006\u0017c2x򧡪)H񼔰e7u%l󾿐\u0015]\u001d򶉁" }, - "id": "pool1x6dde6eyeh7xrjrzapxnl7gs6s3ugx4hgtnahxz30zchkq04f8w" + "id": "pool1w2trr2nk8txjnkmw0nvfq6qasqvzdvzm7d5070up4uvx6rzqh5t" }, { "metrics": { - "saturation": 0.3859725028018829, + "saturation": 1.4644276748375513, "non_myopic_member_rewards": { - "quantity": 458178748395, + "quantity": 755852468165, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5198583, + "quantity": 17699300, "unit": "block" }, "relative_stake": { - "quantity": 15.04, + "quantity": 56.99, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-02-13T03:40:32.088582911708Z", - "epoch_number": 18274 + "epoch_start_time": "1894-09-12T07:43:05Z", + "epoch_number": 607 }, "cost": { - "quantity": 214, + "quantity": 144, "unit": "lovelace" }, "margin": { - "quantity": 67.91, + "quantity": 56.2, "unit": "percent" }, "pledge": { - "quantity": 123, + "quantity": 57, "unit": "lovelace" }, - "metadata": { - "homepage": "C򝯝 zTW\u0001-\u001aB\ny9~H𶌟\u0000.PN\u0018i\u0015I񷶊:q㄄\u001f\u001eꄪ]\u0003򢠄󲧲0:񅩙\u0019򚸹\u00136\u0019𠩣􀈥󁝍\u0019f򄻢󄖧7󛫚󯝦\u0019𞊵f;fX񋰼", - "name": "L=𣀾k\u000e\".\u0011Hr/Bg\u0013K󳭖\u001b~򺅤򆌵=\\nb@68򥽈i󗡥󑠜󅀜 񼶼", - "ticker": "v\"k񁎬", - "delisted": false, - "description": ":)󱚖Z񕚟򄽣\u0000\u000b0J\u000b󋅵>)n\u001f_\u0003򳅑\u0007\u0019򦟖`]\u0013򭸻\u0016(@𦟲@b򜤁k<\u001aR\u0001]Y\u0002f󁢐|󢃂q\\\u0015񚭖?\u0014fn񲤚]LQ}Ljc󁤢Y\u001cj-e,z𦫪\u0019B_[se\u0010𔌧󍂴򳖨I\u0014񓟗,Y򑍟񦾷B\u0002\u000e񽥚?񳘲w𼪤򨓋t?R񎐈np=D:'|Q(\u0018TK\u0011#𢴖s򃂬'\u0016􇽝򴛄g'!򽯜K撹'󔧰4񱤩E\u001a'\u0017P\u0018񁷠􄺰\u0004H,񋀋%{V_V󩢡#򉚧\u0006񒭕\u0019]\\`\u0005L'4J\u0017\u001c\u0003񖔱H*R\t\u001e\u000cn\u0006eh􁞪󮮻񛇦M񜵣^񵊾\u0010&\u0001񢏱W\u0000&aqtYE󻶑3\u00153 qxD\u0004𞨈TUG}񂵅\\dX\u0001b\u000ei󠊚abL\u0000􌧵ܶM򡒼\u0017l󎣊󠥰*񥷐)𺂙\u001f\u0012󜘙0\"\u001a𺴬\u0004򈴓񭑏q#\u0005𙼄k?󆁜^\\O;x'Gw𫎀\u0007\tZ&𛅔? }iY'\u000b]ey\u0007#.񂏥\u0004{D򢭁m󽼍KU\u0001𵲠" + "homepage": "Z\u0018A?iG𥕡򪮎񔪈\u0001񀊚\u00110n󪗡𵤛p\u0014񯅄._JQ񤗺\u001bm\u001felT\u0015񻺺w\u001e􄈰5\u001bR~\u0011y񪉉􏢴񨃹𖠀0󿕪\u0000L\u0007{EK(g`\u0006@뵑\u001eC`\u001f򭀨]7}󜆪\u000fa\u0005\u0013\u0018􍂭\u001b\u00198𒁉\u0004)M𺣦{'W\u0001cNr[_", + "name": "gr񣍡0@DD'i\u000b񥻻GY7ag]y:#sX\u00170\n'\u0017/KJ\u0017󛀆&Lp򾇐􏍫񖜚ᗫ\u0017\u0015F660𳳎񻭯", + "ticker": "񉷇Jr\\", + "description": "𞲛񙓉`榀\u0000򹲿󬥚x񋟋􅻂\u0002P\u000b󸕓P\u0004󻞃l\u0007]|^\u001b,\u0013𩺼Q{򚐠􇥱򨓻/n󳰄񉀱򐧺*B\u0008t񑬰\u0001󯦼=\u001c7\u0003\u0013L)r\u001cl\u0019\u0015WZ𵣾󠹱򌘺񑝁󵯣m\u0007qH3{$@n󞯳hMk\u0013򱩊\u00036\tj\u001ae<\u0008QI?$gd+𶒊Y\u0006\u000e\u0015q󯦩𸥭󥴽\u000e]'󋴢Q\r$h^N򲄕*%cU\u0010\u0001kb𹊿\u0018\u001a!\u0010V󼣻\u0000􇛳\u0010\u001at;\u0018M^G,􀳎\"\u000c􁰣$$[xjUU\u0001\u0004mo\u001a0\r\u0010񄻸\u001e,CH^񭨭\u000e!󵱂)򟣙\u001c6beJ3񳮗l򆲯\u0018E+`fy(𝰗J\u0018#0􄧶)`\u000ba\u0018k|\u001f.(\n𦫐󵨲@󝖷󽳬\u001fu\u0003􆞩%bK\t񆪋Yd0wM򎦷\u001eD򬙴?0f\n\"+5h󹔚󄖘Cv[9" }, - "id": "pool1x3a84q7kg8f9kn836eysyx7rlsjuge240llqdsq5sgxhzgmvepp" + "id": "pool1u8sh3k0pdj54ezsrd3hhwuwp7ezyf4q7ns3lqaj3zrkyk5vv5p5" }, { "metrics": { - "saturation": 3.8800097458733855, + "saturation": 2.5834721717045883, "non_myopic_member_rewards": { - "quantity": 933277669248, + "quantity": 686751160171, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16564408, + "quantity": 11572831, "unit": "block" }, "relative_stake": { - "quantity": 98.14, + "quantity": 86.28, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1899-08-19T07:00:00Z", - "epoch_number": 22369 + "epoch_start_time": "1899-05-27T03:17:36Z", + "epoch_number": 14494 }, "cost": { - "quantity": 245, + "quantity": 183, "unit": "lovelace" }, "margin": { - "quantity": 95, + "quantity": 97.47, "unit": "percent" }, "pledge": { - "quantity": 87, + "quantity": 44, "unit": "lovelace" }, - "metadata": { - "homepage": "\u0017>+c\u0016d\u001em_M\u001e\rmJ󾉛\u0006\u0006Yj\u0014\u001aD򔾨e{p󐘠\u0019񯆬\u0016sW7GH[9\u000e{򩬰\u0017񨆛Q.\u001c\u00101󖣤Esuu`\u0002K\u0019b𼷜𗴾0𻏛UUR\t", - "name": "-\u0012󦴢񁏵\u001a󍳉\u0018e.󱎩򕑾bE󢝚zB0n\u0017yR񶅊Mq\u0005NGa𸃸 z", - "ticker": "=\u0015\u00126U", - "delisted": false, - "description": "򾔗6-\u0010􃷢\u001bV󊙔.򆬋󤂩\u001b򿁈P\u001e򃗙\u0017L)𜎪\u000c\u000f;J//\u0007\u000eN񎠵򱙏/񁼇\u001b*`y7󮫋򪛯c=\u0007󤧒,󅣯[D񫏸\u0005򰟳𾨻\u00036D򥽠󃒘[F񾃶{Is\rm󍬛\u0001\u00101󎐟@\u001b\u001c򝭴󔨍s\u0014$\u000e󌵵g7󃬐xsMDV񱡐7I]\u0007aHQGD񢖮𠅼 H|n#)-󛬒ul󨵁\u001f>\u001d7wt󊐌򋟼@\u0013e7y\u000e)𑞹p􀙙@=\u0001>/󋛐*\u0011󠋾\u001f󋉫󞟂N\u0018\n;7𪬹󂇯\nQ\u0000j]𷼝+񇗖!q9G_$v\u000c\t򌙝&/E󸝱-󬶄R\u0011~[n𜉶񕜜\u0008(R`z􌍐dp\u0007>򠉦\r;Hs񆢺zm\u0005\\8|3(N\u0006𥘼Z􈱗wq񭦘/%-򐊹l[?x/?\u0006^nC!#h)㑨\u0011L󹻮M[\u0008w󉣈_\u000c񋨹򭀛򸼋񤆗=}^\nH " - }, - "id": "pool1ysafz2zlmvrkqey0v4e8v9flwask5wzg3em8q483kw5n7sdmgks" + "delisted": true, + "id": "pool14p85z549x4jjwysuhtz9zc99rpczz6vfzsr4rdqclvlxqxeyj7z" }, { "metrics": { - "saturation": 4.310109735888642, + "saturation": 2.086647908782102, "non_myopic_member_rewards": { - "quantity": 556653587872, + "quantity": 855142827208, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11582207, + "quantity": 12251541, "unit": "block" }, "relative_stake": { - "quantity": 4.22, + "quantity": 29.14, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1890-06-09T21:00:00Z", + "epoch_number": 13785 + }, "cost": { - "quantity": 244, + "quantity": 16, "unit": "lovelace" }, "margin": { - "quantity": 27.43, + "quantity": 42.1, "unit": "percent" }, "pledge": { - "quantity": 21, + "quantity": 132, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "[󢿁\u0016\u001d\u0017T󩐑", - "name": "X?񯩊", - "ticker": "񦕖\u0007F\u001b\u0006", - "delisted": false, - "description": "򁅂TD򥰞YA{_ciL3tx\u0018;򾱝UT\u001dVLkwc\u0000McLT񆸮L7\u000f\u0003NT\u001e$<@ #l\u0008g񪿫b4𒔺j򹣠󛒩򂉘Q1󊜿*\u001f$" + "homepage": "K\u0016F󰭞@񮩧򗶓2Kx5􍂇Ju%򇅻\u0011\\몆L5.", + "name": "򜰽 \\|f𲅙\u001e\u0010񰹏Je1󧢈w񯢠\u000f򟶋\u00152UP\u0000\u001d\u001e񊒒q?WYk򛃔RPk򷊒V\nR\u0014񘮐rlb񹄫v", + "ticker": "\u000b=>H", + "description": "\u0016>Ay2􃯁;#I,\u001b򴴬\u000e򴝵q\u0007򨟑1󰈝򱾺9=䞞󝼀𺉿pwi8\u0000\u0019l~\u001cj\t\u0019𩫻g𬻝\u000b\u000f􆾺V򇐓\u00008򴁔'j\u0001󖭫dz5j9K\u0010lt񡍰_\u000eg@.񰒓j\u0016򍘞\u001c+?9E􆮜lZ\u000e𬮝\u0005T𥞘x顀\u001ch񩒧J3\u001aZX:𞱃/BHp\u0016𵪙OX\u0005񱈹𫵽s3񹖠f\t\u001f\"񴇛~}\r𮜓yUB7\u0010\u0004󄶖\u0003r|+-$)=\u0002􀱻N񷪫91\u0018yl\u0015Jo趟c\u001c$]!\\xm\u0017\u0005|M󲞎(𭜎\"e@ 񪞑󕾳FV󉔀<[<􂨺9n򤷶񍸌W\u000bv𑈯O" }, - "id": "pool1pagsaqcspsqckgvvq96hr9gmnftasp880aq6zr7klr3vsu4zren" + "id": "pool1gr6fey369ffsyqrpvpqjt059tg40h3stce4qzjssfel5xnp8wxs" }, { "metrics": { - "saturation": 2.8521740128458752, + "saturation": 3.3157793546835155, "non_myopic_member_rewards": { - "quantity": 921642092631, + "quantity": 139283780016, "unit": "lovelace" }, "produced_blocks": { - "quantity": 591297, + "quantity": 10573517, "unit": "block" }, "relative_stake": { - "quantity": 72.88, + "quantity": 36.77, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1896-08-05T01:53:49.132860857725Z", + "epoch_number": 13036 + }, "cost": { - "quantity": 196, + "quantity": 222, "unit": "lovelace" }, "margin": { - "quantity": 46.36, + "quantity": 69.21, "unit": "percent" }, "pledge": { - "quantity": 76, + "quantity": 92, "unit": "lovelace" }, - "metadata": { - "homepage": "0K񉓻N\u001fQ", - "name": ":`%", - "ticker": "񘅥􂿦󽱅=菓", - "delisted": false, - "description": "nv<񱕊{ x4>[󩞋\u0017m򄔝\\:\u0015D\u00026\u0008\u000c\"*{>𺌕i L񊜚4 *M[@|\u001c,^gV󸨚\u0008ha0\u001d\u00034󁺗󶩢?~9瀹FO𖽜_񨧞^_獹\"AL=􆪬\u001b\u0018vF񲐶BH\u0001\u0001𜷜2=i*\u000b𒸐򷅢󔊕𷁑!M񛄩V9L~{󂲽n\u0018Xt\u0000>\u0008n\u001fz񠶰􏼧𩾃󵂼:fo/\u0015񸟂C񜣉@L1\t|񱮇 񠺬74󢣕)X%M򻯾񃮡\u0000s_{5𕸧\u001a񘫸YJs(A'^񧝱^\u000b\u0014󍓖\u000fVo򴶕8G􉢺\u0004󶘒򗾫jI\njd-MqV􁵻𙮦2w\u0015\u0005]𴀴𷀵C\u000b\r\u0014G򧔻z񴐇񄅦;򴰯󛭱򊖵񔡭񃎍񢆌\u0013򳣗R\\\u0005BH􏲭" - }, - "id": "pool1wrjz4ws5760k593pl20tvgv57tgqdh2fwkmgkkm03argk3lu8w8" - } - ], - "last_gc": "1887-10-03T11:25:47Z" - }, - { - "pools": [ + "delisted": false, + "id": "pool1z3d3yvdpa7dvdkde5qth20azvy4vunfpgv25jvw00rqhzl24mxx" + }, { "metrics": { - "saturation": 3.964412249290516, + "saturation": 2.6557214352448746, "non_myopic_member_rewards": { - "quantity": 243079787666, + "quantity": 701550344156, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7122774, + "quantity": 1991043, "unit": "block" }, "relative_stake": { - "quantity": 41.25, + "quantity": 71.62, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1880-02-07T08:42:47Z", - "epoch_number": 12770 + "epoch_start_time": "1871-12-05T18:08:30.883028384581Z", + "epoch_number": 25777 }, "cost": { - "quantity": 80, + "quantity": 251, "unit": "lovelace" }, "margin": { - "quantity": 39.34, + "quantity": 33.78, "unit": "percent" }, "pledge": { - "quantity": 169, + "quantity": 131, "unit": "lovelace" }, - "id": "pool1za2pnv292eghhsdytwjyp86hemdxnewr8k30fnxur47gqhxkhuk" + "delisted": true, + "metadata": { + "homepage": "I̩񐰧򸿈\u0003⪯\u0004aO#i\u001c\u001f1Ja\u001c򣁉b\u0008\u0019p|󮍛\u0000\u0019>𞔬󗀔", + "name": "i\u001e>\u001c񜦐FU\\Ze񵹍h&", + "name": "$21P񚦥𜴉CSR򀀙5dH3iH򼚢񒣜r󄄑h\u0001~r#\u0006\u0013d)񞙸񈳡p\u0018U(a퉹Q\u0007\u0000򞈰^\u000e혃񝤭򀏌\u001a󮳴6G", + "ticker": "\u001bT񁿺V򇡚", + "description": "ᆀ<\u001bo_󓣌95󚃧\u0014񼦣󒞟k\u0015f򭲆\u0003j􊅊򖶳\u0007\u0018E/Z􅼜R󻠑\u001e^\u00151\u001c񍈮/}|\u000c𶝢񡔒k𖍩c󱋏\u0011𼆛񘤗/c;\u001at𿿴\u0013\u0015:,<>W5=Y󑷠1\n\u0014<>{㹦\u0004􈌯ఉ\u0004󫢂\u0018k+񹌀V\u0002甑񶀃򐐫򕨼ps\n%t\u000c{\u0002\u001b𬩜]\u0010@q#񈲄\u000f7\u0012R򳂈\u001c\u0003\u001f󾉷򷢊񝉖:\u0018y>v\n;\u0019񯯛3/Si[\u000cs" + }, + "id": "pool1ghncs389wqmggx3panjr2cx5f6yrgwqcc9y2s28azt8z6h362jx" }, { "metrics": { - "saturation": 1.4952392303602935, + "saturation": 3.5358645660383567, "non_myopic_member_rewards": { - "quantity": 387598260495, + "quantity": 244638758229, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15464194, + "quantity": 11777110, "unit": "block" }, "relative_stake": { - "quantity": 93.47, + "quantity": 10.56, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1892-10-18T17:53:36.620212041162Z", - "epoch_number": 21520 + "epoch_start_time": "1861-10-08T16:15:59.671838497036Z", + "epoch_number": 1904 }, "cost": { - "quantity": 71, + "quantity": 220, "unit": "lovelace" }, "margin": { - "quantity": 55.18, + "quantity": 36.5, "unit": "percent" }, "pledge": { - "quantity": 0, + "quantity": 114, "unit": "lovelace" }, - "metadata": { - "homepage": "K𢝓\u000bʈKc\u001e\u0014\\\u0006y7򦅆>󀐿򋌕}\u0012I򴎉en𢎱𠈖5\n\u0000򐑠򡁓\u0011󅖯}򸇝\u001a", - "name": "󧦟򃲏bq", - "ticker": "\nSC󥠗", - "delisted": false, - "description": "U.lPxi]\u000fs6ꩽ򫪠񕸒򡹶w\u0000𡐆𱊿񈉐,0󎐓F\u000b0S\u0002Z\u0000񷔫O}\u0014\u0013񣆠/G􃕦𘽃󿜫𳀢7񸔞\nE󼔋^𘠉\u0011kMQJ^sG`u.񫵥󵘐\u0008񠶸v򣵁q@@aC:򩭾\u0001𓳡&򰏆|hhtZ#?(h_󚢦\u0011񆫋#\u000f󋤑x񝧤K+&\u000f(\u001aQ𒥴'^\u0000󖍉򰏵񷐈sL\u0014\u000f󜛜񔿁~O\\񴝫Aq򓁳\t\u000eF+U񥬾𱫴z򞛈󡤳T\u000eA򎸥\u000b\u001c\u0002k󨠾gS󅡾>.\u001a\u0014 =" - }, - "id": "pool1h7pcrxm9zwhxrk55emfqw6llm6t05hnwtxk8l64f32eqsa5s3mf" + "delisted": false, + "id": "pool10r3750fz7we52fcl06dv82ranl6csvhgqj4qjk4u6q5lkwku7eu" }, { "metrics": { - "saturation": 3.7687630104981524, + "saturation": 2.451421660277278, "non_myopic_member_rewards": { - "quantity": 430804471906, + "quantity": 713240752002, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1276368, + "quantity": 3446631, "unit": "block" }, "relative_stake": { - "quantity": 0.53, + "quantity": 74.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1878-12-03T17:33:57.823129061324Z", - "epoch_number": 30137 + "epoch_start_time": "1860-06-27T05:29:55Z", + "epoch_number": 6123 }, "cost": { - "quantity": 166, + "quantity": 231, "unit": "lovelace" }, "margin": { - "quantity": 24.16, + "quantity": 76.74, "unit": "percent" }, "pledge": { - "quantity": 7, + "quantity": 97, "unit": "lovelace" }, - "id": "pool1rh9mwf4ka8d0tdyfz82set5cqvnvvmvwrunpdgm09xa9vthzjpc" + "delisted": true, + "metadata": { + "homepage": "x\u000f􎚷8:\u0001󞙷\u0001󕟈\u0019|𵑓zJAh􉰭gV_%񉏚~^\u000e$򤚯u8_\\As\u0010񋘂𖞿H\u0018TU[($󦘳7\u000b񴝧|Rkm򴠝0񍝑(,1𐉗9=@\u001a󬇾Ft4􂍱R򧨡n\u0003", + "name": "񯦺)!:wX^X󘇪X񍡛\u001fFH]X*O:&\\񙹴o\u001e𩵳4\u001a񰾶񅰯v\u000b?\u001a|*\u0006{򴸰򑌥X򣶖\u0011E\u0013NO", + "ticker": "LⰬM", + "description": "\u0016𨀟\u0013\u0012񞝸~n'$R.󔪧p\r\u001f?\u001b𱣗hi/\r󥖝𹀹\u000f`t:3⑏{&c", + "name": "j\u0002<\t`򃻠vd\"󜛉e@=𘨵􋂒A𤵈", + "ticker": "\u001b44+", + "description": "򟤴\u000b\\񛾟􃫴t\u000e\u0008󅻌􀞒󦠁0A񕮹񖐫f=\u0016\u0008 OK,\r\u0003󰒉`8i\u000b򉿦򌷋[\u0018\u0001]ju[⹇\u001b,]@{򛔖*h󦟓cl𳇵\u0010\u0005\u00023^:\u001f\u0007󯦬󘬏!󐧇񨺉\\+YVT-s񣭝{u'󎫢𸟁𤽉􆸵񤯀u\u0003󈷗󂒼\u0019J\u000bMಇNy󥰤P= 񥞫\u0003t󕩙򄹽`'𜎐{񇴁/K^x\u0016-a⦬K\u0014񅊅򶵹𯷙\u001fX\nR񂃝LIl򥘅`𹶯4g1Cc򲌾Op>𛍛(" + "homepage": "X\u0005oba\u00044񟇻\r\u00055񻤖\u0011x񊚒򭧭\\J0\u0001&󠾹𽼼𞳀eM\u0000>I\\m񣧶S򹶓\u0003G\u001e)󇲯򧷛qaF}󕻆f󦔘H򡶻#\u001e\u0016򪒅1X󍓱f򾕋\u000c2񥙝Wm\u000e򊏜g", + "name": "J\u000bj'p򒁷\u001a\u0001", + "ticker": "h.\u0000", + "description": "m򲂷\u0000\u0017\u001c\u0002M\u0017l\u0017Fe𻠱x`;\u001d]\u001fw𦠬򥍁\u000f񢆘򥢘_>񄆤Ez򺨧򔇩\u001akx\u00036#񈳪M\u000b𤻣\u001dm񭁞𫠰Q񿸲cF<4Pp{7+w𜠜\u0019󘂖\u0013s\n򼑚󒞚K{[fL02j󜫿z\u0015*[k?os|Mh%e\u0006\u001e\t򘧦򭑅\u0014\u0000\u0016򸞢⥈񖗎[񤗫򓢢q%9񀈈\u00172Iv𝔟BEY򤪫񂘢󸟠M 񺀺\u000e" }, - "id": "pool1edlsutx95fedpc6rf5q2aa058hrgp0wzgdnnjse5f9g57lp59hr" + "id": "pool1wmjyf4gfdtqcvntv57lj3spxj4ycxzxwmjz3txw4enlmysm4m8h" }, { "metrics": { - "saturation": 3.5017608602222525, + "saturation": 4.8929564307315765, "non_myopic_member_rewards": { - "quantity": 315800212180, + "quantity": 352090952974, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3246137, + "quantity": 4804720, "unit": "block" }, "relative_stake": { - "quantity": 30.33, + "quantity": 31.02, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-01-19T16:13:01Z", - "epoch_number": 19728 + "epoch_start_time": "1891-07-07T03:27:03.88292442862Z", + "epoch_number": 3261 }, "cost": { - "quantity": 76, + "quantity": 51, "unit": "lovelace" }, "margin": { - "quantity": 82.96, + "quantity": 7.67, "unit": "percent" }, "pledge": { - "quantity": 120, + "quantity": 86, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "[󡞎򱸜\u000c𿗯b\u0012f\u0000\t𢼬:񧨎;󞵏\u001a\u00160\u0014\u000f8+a>#_P𰭎/񬳔񍪄", - "name": "uY𗩄^Q/4k3U0\u000c2m,\tM鎒]GuZ\u0008Fi󔉄t\u0015O𾳜󧃌\u0006\u0008𪦌S񛹐񄇩A", - "ticker": "\\󗶏󶺕\\", - "delisted": false, - "description": "B'/ev\u0014􅅃e𠭄򎜼d\u0007uB;8\u000e򡒇#񡰢x򓡬\u0013n\u0012\u0019V񡉕:񏔛a񈩔)󢉗n񊒒􇍱F\\!\u0003G򱒸q%5v񹍚\u0010\u0006B\u0017\u0019cSᢰ;򂣷󽔩.+[񒹟𨑁zB\u0014򈧔^u񉰡\u0012-(H3(񙦤UD𐊐:\u0005\u001d򭚉R򗝳򦴄vU\u0001Qu<7P>sa򱚚6\u000f/a񊸸O:`\u0000D𗛟N􀲴𺁙$!\n.\u001c򠻳!\u0006{\u0011_.M\u000f5K񙿨刻\u0013W򵍩򇕓𵼢f򹢕\u001eOV`󏈃򹝅*\u001eA>a󔁡{𫣃󸤄)򠳻\u000bFథ򈯴񘰩" }, - "id": "pool1p3ujmrdp7flflpyfzzengcautn5svs2yp7gauth50ncq5w23s9e" + "id": "pool12ghcrsy5wvqv662ajp7h7mzjk7ejpcgwqnazvcycpywz69ze003" }, { "metrics": { - "saturation": 0.6473210659176154, + "saturation": 0.7304598405761187, "non_myopic_member_rewards": { - "quantity": 596714015223, + "quantity": 373199373045, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6035593, + "quantity": 7973800, "unit": "block" }, "relative_stake": { - "quantity": 73.98, + "quantity": 51.32, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1885-02-12T15:00:00Z", + "epoch_number": 4869 + }, "cost": { - "quantity": 179, + "quantity": 18, "unit": "lovelace" }, "margin": { - "quantity": 64.08, + "quantity": 18.12, "unit": "percent" }, "pledge": { - "quantity": 114, + "quantity": 9, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": ")򒞿\u000f`", - "name": "$󠿂@e3\u001fV󬇓񐖂t3ss\u000e񮄬h0󴷛񰞉a󜓝*w*q9򟊡H\u0014\u0017\u0015^+\u00015`񽻛#\u0002\r#\u000e\u0019}O񭞠\u0012󴇀P~", - "ticker": "񃊽񎲊𠲒", - "delisted": false, - "description": "Q&y񫑺\u0010񋱱j#*Ar򷾎󝻵񉻲g񶕬񉘓򡍵\u000cP3b\u0005\u001an󟊁;\"M\u001d򫣗񊴜Y񶽸\u0005x*I5e+J6A8󜿑秩񇦁j򇙙1򸲓\"Z终\u0019񇎈񈄀1񶹱dQ\r3C", + "name": "\u001fu\\MCo񓩕\u0005\\񯛬Qt/\u000bg񚫿\r\u0010", + "ticker": "i򜃺+", + "description": "񈂺ni󢫊&𐲢𓁋\u001d8g𭒽񘧸U'<29tPs*Z饡}9~Uh6\r\u0018n\"\u0007󆬃\u0017񮳔񬭶򸦏f>Y%4'KM=\u000f]\u000eU.\u0008Kx!񢿮 |\u00052\u001f񹎖\u000f󩇃A򆻥򝔣󝑧񀞇3𗠂Ln𓄗4􉟕n\u0001󯶟𽒫w\u0012K6򤠖󒑉=􁣓\u001f\u00010r\u0005~\\z򺵈P\u001b\u0000\u0013p\ro\u0001𢣮򢣿񁵪󃭝[kO\u001d𚸟^\u001e~𧽜69Qcu0&󧸍\nn\u001a𧩄S𞩈񣓣\u0012\"g\u0008󺩑𱰝񄉨🖲\u0007񭭿␲lu2\u0006󠳤\u0016\u001eXZC1,o-񠮒\u0018\u0002򱗡<񄅡WS򻺩\r1\u0000\u000f\u000cA#I1M\u0017" }, - "id": "pool15x5uqqf5rhc0g5dxvczs63cm3msceh8pdj0ycd2zmvkcu5alwsv" + "id": "pool150e9mapr0ehpcfa8q9d07jdnex3va5gwkj89a5e2tlt6vn40zl0" }, { "metrics": { - "saturation": 1.661575875881458, + "saturation": 0.43904440822713164, "non_myopic_member_rewards": { - "quantity": 329538197445, + "quantity": 724904088521, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1601360, + "quantity": 21762704, "unit": "block" }, "relative_stake": { - "quantity": 90.79, + "quantity": 65.02, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1874-09-25T22:35:02.768125012857Z", + "epoch_number": 17065 + }, "cost": { - "quantity": 220, + "quantity": 41, "unit": "lovelace" }, "margin": { - "quantity": 94.01, + "quantity": 33.71, "unit": "percent" }, "pledge": { - "quantity": 147, + "quantity": 39, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "󘋛LxG򲸓qfK\u0007􆖉x=rV𥏖\u001f񰋫\u0010;:Sf\u0003W󉴄k.\u000eTlF\"󮌢\u0000򣜀󉡲W(񠭨A;D", - "name": "\"kr򀄭\u0005򚫣;bU*P򵠀k\u0012Aп򮐺\u0014l\u0015b\u0007", - "ticker": "t\u0018g", - "delisted": false, - "description": "񥞥\u0002[󘋝B񼹩𼜘\u001fQ&𜤰hD=3񎔩F󮠵􅭗􋞯k\u0014q\u001d^\u0013𴷒td􁕇w\u0019\u001f" + "homepage": "/[\u0018𜶆񢫅Cf +\u0019󄿋󢾧}񳼩6𒎀|)U^_~]_8\u0007%񃛜\u0012,0񪽣񧦑\"-B", + "name": "𹡓󯔖DN'\u0014𻄞\nR󑖵\u0018􈱿󹆙\u0015qqs\u000ca򖀄", + "ticker": "$]2", + "description": "𕾤\u0015𫋶򊻽񲸉CYn󤦀􉖵\u0018jEL\u001eT󵛦B񥫊OOE89𐚕񅅾\u001b22𹰸q/]pYl8R/\u001eT\u0017= r;f\u0011\u0007񏰀G<񁮹򵛥󽺌v񊿰}K炁\u0005J\u0013ML[\u0012p\u001cu\u0002p𶈽\u0000bs4\u0006󦥨􊑈򲿴H񈻾o򂅨,\u0015\u0001񜢃i^𒬜R\u0003𓔍򮜖\u0014D񮡐g'󝵷\u0016!g򇂴\u0014\n\\\u001d\u00185Q\u0019񝍚,󵌉:bJ𣑔<(FU\u0018\u001f~,񹀀󧺅:\u001f𰺶}^?r\u0003󯥃l0\u001db?p1/\u0017\u0007V" }, - "id": "pool12j7rmneg7l2p6nr207n0798e8dutl2pcyzezyurc2r2c7myzmxa" + "id": "pool109cu044yac86vmc0wq352m8dttph377xyxmuew2qr6ftcjuy494" }, { "metrics": { - "saturation": 3.560986334736568, + "saturation": 0.8852348450406994, "non_myopic_member_rewards": { - "quantity": 821007979583, + "quantity": 595160213222, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11985549, + "quantity": 17890667, "unit": "block" }, "relative_stake": { - "quantity": 63.91, + "quantity": 78.1, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1873-05-21T19:00:00Z", - "epoch_number": 7791 + "epoch_start_time": "1867-01-05T02:21:54Z", + "epoch_number": 18232 }, "cost": { - "quantity": 69, + "quantity": 173, "unit": "lovelace" }, "margin": { - "quantity": 98.32, + "quantity": 90.28, "unit": "percent" }, "pledge": { - "quantity": 35, + "quantity": 9, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "򅀖󆋼 Nqu *(b\u0017Wm&򲓙+񦓂Y\u0002󻂡M(iVh\u0012軆G@\u001aoR\u00062󄘖G\u001e򱝔", - "name": "󰝸*bS^:1H\u001f𡣙", - "ticker": "󣁗\u001a\u0011", - "delisted": false, - "description": "\\|V|􅦷I\u0017􉇘򽇓\u0006𩫡~6\u001e񗨿XA\r\u001aỠ\nL\"\u0011V~\u001f9\u0018d\u0010\n\"򴙧1\u000em~o򆗩\u001bx\u0015$񵪑󑜤󿃾=T󓬍\u001b򐇢k)H(\u0000Y󗨠@\u0011\"7󚘢𪍉3󙽭d\u0013󋭑gN󜁠񅥋\u000c?4U񰁝q󃕹]\\daZl_\u0006\u0015URz󴵳sAE\u001dM򕚅\u001e6\u00152軹+R򪾼\u0011A\u000c\n\u0001L𗸩;ev\u0002YK_󩨜7b𡰂L\u0018)\u0002%-\u001bXq򜶬Tt񴞫nU\u0004@\u0013|\u0017󘶖򎭮9%󬡰𥕐\u00164󆖍u$􃑁񲬕#-I򩩎 񲧅\u001fg7\u001db򋲄Qju\u001c/oL\u0006G\u001f/\u0011𫈕{󻓷c𩟿Ty?q񏥼4Y[\u001by>P" + "homepage": "(򳚨sh󑃄򹬶1\u000e󁁧;V/J%򰱍񄂢\\\"_Q򇺒w8", + "name": "\nY\u0015|\u001c", + "ticker": "񬍉4*Q", + "description": "󂥰y󻐣\u001dfLg\u001c򫬟\u0001v󑔝d\\\u0008{{\u001e᠔𐢴񕭠]O󀗩P푗򵭸񜨨W-Ȱ\\3賗\u0013񚳖KZ\u001efcD񬬂\u0017cph<}󕙸*HX𛳼+\u001d\u0010-遲a(|}񒦟jD򵉇𽖤񸗯'\u000c\u0016C\u001fZ\u00156dV7O\u0007)a#<򈖪E\u000eD\u001bJ񗏵񙇧\n\u000b,&\u0018񅿢𼢎VTiw񳍹]p󩜾\u0011YO⚺^8\u0013k𐰟򗫬\u0002Jk=򽲋S2񂘷#n\u0003Z򷗄d\u0019" }, - "id": "pool15mqd3mk6rda330a4qfweag3d2xjg2wcjrhvq822gak9g2jr0xl2" + "id": "pool1gae2lx3zzqk73fawpz6xaqmtc4qe49c8257j3yyep56wsqw00au" }, { "metrics": { - "saturation": 0.5527102577507603, + "saturation": 2.3528961733732867, "non_myopic_member_rewards": { - "quantity": 389974335660, + "quantity": 862310125216, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6484775, + "quantity": 8238102, "unit": "block" }, "relative_stake": { - "quantity": 2.18, + "quantity": 11.35, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1907-05-20T01:26:01Z", - "epoch_number": 6649 - }, "cost": { - "quantity": 181, + "quantity": 134, "unit": "lovelace" }, "margin": { - "quantity": 89.33, + "quantity": 71.47, "unit": "percent" }, "pledge": { - "quantity": 60, + "quantity": 150, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "󭖅򯧠@\u0010j)\u0005_B]oX\u0002CDk\u001f󥜔󾒣𔋇\u0018)\u0014X\n񅆈\u000b?\u0010`2\u0010\u0005𲶽>~z񯓴\u000b,87i\u000eE򸁐n󒤅򚣠􏶜񫮯zH6vaH\u0005򞢍\u001f\u0007", - "name": "&d", - "ticker": "\r򢡙,<􆝔", - "delisted": false, - "description": "'?񪹗𘖥򺼳6R\u0005h*u񜙕wp򓎮|)\u0004󸼝\u000fuK\u0002]$𹍌󻶪O-\u0017\u0018k򈷢𕯔\u001f\u0004k󸸍!򘏱1k)a󻷨U\"&#+x\u001c\u000e\u000f򃒿󛪥C󖫔\u001d\u0000b!u\u000f\u001ciJ򘀭C\u001do𾽥􋊂'\u0013qH𠩔\u0017l񔙟󜼌$n\u001a\u0003TgfRs:M𫚧񷑯Ud2Bkk𒊼iD;\u0002\u0014HKY$𝊴u𧹇6o2u񓬱8\u0003󘰌_R^\u0018K\u0011U\u0005\u0014V򚉿zK#>Q\u0003`9񢌝𯽌t* OM򦉙񦏝QSBH񘪮Nu󌍥\u000cV\u0014􆰇󃞪Q\r򁔡\u0012򩶎\u0011Q8q\u001a񍆔:a\u0003:`\n*\u0002󨶂?2񃖰\u0005򛔒hO|𹶿ŧtK칋K" + "homepage": "`'񻠼<􁲶\u0000;1\u001f\u001ce~Y 񒣲\u001a񕡠$㵤A𮸴nh[iuB\u0018V\u001d󖤞7\u001a\\􌤅UqI$\t𽖋򠮣󒛶򪟋:\u000e\u0012\u00008𤾁$􃴠$+wx񲜉cc7q󎞹(]䧯:񠩙򙺵b􄉅A񴳫n_:\u0005\t&%𙞋񸙗.\u000c>򁳠\u001c", + "name": "\u0000\r$*\u0003\u0012d󠩎", + "ticker": "xWp", + "description": "\u001f\u0000􋥳M\u0000񌽙򂼓򥁇g񺅥\u000585?9\u001f󤾸+f𛸈(Z9\u001e`\r򃱰\u001dkH𜎹񫑾\u000f\u0017" }, - "id": "pool13jvwr3rjl0d0ldy6zzattyfy4sfhzdrdmf4tm6g86xqmknq289l" - }, + "id": "pool1f3svrcuj4sxt6620ce2zv4uvhu8mztq0t60fc400yg8dy3yglpu" + } + ], + "last_gc": "1902-08-30T09:19:54Z" + }, + { + "pools": [ { "metrics": { - "saturation": 2.880064717623278, + "saturation": 1.8906623903163544, "non_myopic_member_rewards": { - "quantity": 686142045434, + "quantity": 474035360000, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12566863, + "quantity": 22380482, "unit": "block" }, "relative_stake": { - "quantity": 17.82, + "quantity": 15.44, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1891-04-09T17:12:33.704110397083Z", - "epoch_number": 16648 - }, "cost": { - "quantity": 153, + "quantity": 101, "unit": "lovelace" }, "margin": { - "quantity": 39.63, + "quantity": 39.53, "unit": "percent" }, "pledge": { - "quantity": 71, + "quantity": 38, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u001b򥤵L\u0015_}S\u001cI%󊇨\u0013E/W\u0011D񼇱򜗩򧻒G''\u001a^\u0018`񦊺󨵌H򾫦C\u0003~q򙑣Q񍹛{{񬧫Lq󠉽)\u0018|@/h𵈅C\u000c\u0007z\u0003\u0004-'謵񈼔+ \u001edNl󑙦4\u0000x򋔝񚽭\u0006s𐖅pI񬤋`\u0002", - "name": "-\u001d4h\u0002f\u0008\u001d%󆛧r+񗞞W󴻏\u00179\u001c󹵇򢟂p\t\u001c\u001fip%7iafC<񉊊S\u001d", - "ticker": "Z.&", - "delisted": false, - "description": "񿫞H󎭺D8'󝽙򤆱)#\u0007_󱶌5g򚉦\u0016H3󾆈qB|\"𫠵\u000cE\t󫇋\u0016U\u0019򫃾򼓘񳻙-" + "homepage": "\u0013\u0003|򽹠~L\u000f􀆈@𺝋\u001e;wR~\u001e\u000e\u001d\u0014.񞒤𯬃󇾠(>󍂥+󔙌\u000c+󠽫򐫼c\u000eli𝔚(0t󏮿S𦰑B@0򱖋\u0002\t𴔳N", + "name": "L2aHe\u001fa\u0016跧\u0003,[O璉s\u0015)@XyO#򈉗\u001c\u0014TqC\u0014\t򽹠\u0019Myc򠦾%D", + "ticker": "򫿷򩝍6\u001dT", + "description": "e򜌆󯾋!D\u0000w𚡾[\u0003G=OJ񬆬E\u001b𪴳\r>p\"󖦁E𛋍񤶒냚M\u000f5񪻉e\"K\u0008am5񚗸;?򘪆o:򀜽ZD𭀒(Lh𤙊$񝁺\u0000(󿂬򈂿Q\u0017𛍴z㓦^!p򽌧\u0001󐿒Y#C򂕃󃆉\u0010>󈖤󥓠$ZS8\u001c򞺒\u0000pZg\u0010\u0016Q\u0016\"\u0018#􁪷K@󀀀o\u001e/^\u0001\u001ej\u001e_\u0001\tSS𽮊򦌯1𗻥J* 󔮯$^!D\u0005y\\􂯜􂉑\u0012\t\u0012L5\u0002򩰢񷻳󏯛+|WO\u0017#F" + "homepage": "\u0004i0\nc\u001a@󶄷uu\t򂑞Q򲓘YWR':p𼟭\u000fp\u001e-_񪼣\u0005wM]gt0\u001f񖜗󰀬T\u0006\u001d𧟘漰6=1Z&}y?\u001e󫀁(򸎃񜠪\u0016P󧆋𪔏\u0019򅩍f󍅽􃐬𳊿rbJ򳎑𵘙c􇂦񵤥V򹲥Q񭝗\u0003򩓃󉾳𢷘h\u001f0J`񆫶ki,򦯢\u001d/\u0014", + "name": "\"e񬓾e󥶕2\u001e[𷩽󆪍D񟨷򕽙l", + "ticker": "i,'{", + "description": "\u000b\r.\u0014+󴧅򒭚7U\u0019drs\u0003𷛔D\u000b\u0003i󺥩\u000c/f\u0013\"b4,𻛩\u000c9\u0015\u001f0J\u000e\u000c򔄇\u001c𣕩𹷺񇜇b7󷣃򂓾B\"򮙮\u0000󝽕\nU𩢑𪆊{r񩞘DA`'IM񐆞󈯍\r%񫨾P򯭐u;\u001c𴚗񮙗񂢧􇃔tt&(􀄝Z8\u0003S?\u0006\n\u0013 \u000c26􄋳c__L\u0015\u0017񢖬򐍪\u0005g\u00027tz~\u000b򰉁" + "homepage": "򙹴𓡪񭠝=Vy'Xi7\u000eS񸑊񪡅\tv+󸦤\u001dr0\u001b%uR.3", + "name": "Hr\u0007򤯈A^\u001c:.񉢉b󡹘B\u0019k􀼐!\u001f򵤥񈘞\u0014R񚎷", + "ticker": "#OA", + "description": "\"i\u0018\t\u0016\t@|\u0010\u000eQ\u0013y񴛋~B󘍝Iq_k\u0013(h@f_NnK1󏵇#(򤥖\u001dJ(\u0014񫁽򚨳J\u0014\u0007\u0014Z󓣌;1J𖃺\u0018I񻩘1򺥻5-J󘲞񰕱􃍱\u001d,8Qw\u000bD(6vEy󡖤BfW񾄀6\u000fcKs󶤝\u0006􅉣񀂨n𝵻񆧀\u0001|򹟩" }, - "id": "pool1xsttvr6qn6phu0wmeze56dyq5ud8ugkcqw46zscc8y82wlyrta3" - } - ] - }, - { - "pools": [ + "id": "pool1lxh0yqjl5gfwsnnx3ms0yzxckpxvfnl8kw98pajw7r3sxvac292" + }, { "metrics": { - "saturation": 0.23503926081707427, + "saturation": 0.5999371449695801, "non_myopic_member_rewards": { - "quantity": 532717581740, + "quantity": 434720637907, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3516370, + "quantity": 16658993, "unit": "block" }, "relative_stake": { - "quantity": 25.47, + "quantity": 11.8, "unit": "percent" } }, "cost": { - "quantity": 56, + "quantity": 22, "unit": "lovelace" }, "margin": { - "quantity": 26.95, + "quantity": 96.39, "unit": "percent" }, "pledge": { - "quantity": 24, + "quantity": 229, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u00053Ud\u0005󞢍C''U䂅\u0015", - "name": "\u000cg񜻲h񃠘SDkfRcx󜴱򸾍\u0003#*󭟊򙯜o󀇆󼻽򒲕🣭򗒇`s\"S@M\u001a(", - "ticker": "񪕊󺀹L`", - "delisted": false, - "description": ".DZ򘆑#e\u001anl\u000cJ%򐂍񈒠_Fu6\t_4,󋽓uQ󂑼\u0019e]򞫣\u001f򫷖eh*o\u0015\u0012AP\u000e7򳱮T?򌝁\\󂓋\u0016J𧜾v񶗽\n\u0003m+񆆾S𓨤=M2\u0019(󨹰񓼻\u001c񑰙\"/\u0004,\u000e\u0001~􍟇󫰳򍘰^\u0007𡏨RB9𳗱\\:[2P\"񴰣w\u0008N\u0004n4󋅫\u001a\u00020\u00009\u0008LO@򣊲򖸈r񍯪񀰒\u0005TD\u0017B\u0014'9񢗉'󊫥󵠇D_F~\u000bQ􂱨\u0002\\1Ps񪺕a񗾠:k\u0014񵖅\u0017\u0005O\u0003󌏯󂪋\u001e񊻍`2\\󨼇V\u001b?Q(뢓9BM&򯔤Z^(" + "homepage": "񂤡cmP+s=95󏦻rG򳶗c𶗞󆹪\u0005\u001fT\u001b򀮁\u001eVL3`6Wn\u0016󱚷D󊳤\u0016\u0002Jr\u0012񴛋%:\"k\u000bW𪽈f`\u001cz7򮭾\u000b+L\u0004\u0012-9Z\u0014Y\\񞡁10|rD>󏫃𵎵@J󐸨A_V񔷶7,𠶍@]\u0006񜚰-/", + "name": "pf, 3\u001c\rl&q[񍡕\u0004*O", + "ticker": "h\u0012{(\u0006", + "description": "\u0019]\u0008^[򬹼\u001fH%.I\n򰥮8o?\u001ag􋵩񒲪򕣏'%󋯏DP6F\\!=}򹖒𩂈\u001fOm]򪁦]\u0013򺯫𚊿\u001c񾋈\u0017𨍘񅫷\u0019A\u0000𷖩񼹳\u000b\u0006~\u001c􉒜\ruK򄯵𰐥`3\u0017\u001e\u0002sNV\u0011D\u0007793R𔜍ba\u0005AD󒀯𪟫B\u0012𻮺V򴂁E8􆺹\u0007:n󇺷\u0018񸏊t\n񬎎𽣷<'򂽬򗝺󊔊񐏽񱝪Z!\u0015񍁘B\u0004򯷱2񌝨{;W򭞫󮇼fL9\u000e\u0018kF+#\u0017򞻠=𦩺P棄6^\u0003\u0003d򵬵l򪣛S󸄍;樼\u0014𓖐n󌆑+􊲘.𗣠򒷼6N񟭀J뉖񽦅$u\u001fPp񨢱%F 򕃙\u0019󀘭򂇔e򴫳1񼋋\n󣆕}\u001f򆹓~b*vO򰆗򆺓𨐘=󜖼\u0012\u001c{1<񇴥H􊓇\u0002Q򀭶|Y]򠇑[\r+󋥊𔑛\u0001\u0006\u0018񯸱𳑸R򧕕122\n󝄈R" }, - "id": "pool18pkfu02j7hh9lgqac2pywlvv0kqglezjmlj0f8ff778nx9pkyma" + "id": "pool1pftgvm2q29qq3f6k76ardqlsnm55yyjh92skva087kzzw40m5sq" }, { "metrics": { - "saturation": 0.8317132132123595, + "saturation": 0.3073560738623743, "non_myopic_member_rewards": { - "quantity": 119472001527, + "quantity": 97672657742, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14511237, + "quantity": 17844787, "unit": "block" }, "relative_stake": { - "quantity": 15.32, + "quantity": 23.69, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1898-08-09T12:47:43.081256289419Z", - "epoch_number": 4566 + "epoch_start_time": "1885-03-28T13:03:01Z", + "epoch_number": 4500 }, "cost": { - "quantity": 178, + "quantity": 207, "unit": "lovelace" }, "margin": { - "quantity": 92.65, + "quantity": 19.16, "unit": "percent" }, "pledge": { - "quantity": 143, + "quantity": 113, "unit": "lovelace" }, - "metadata": { - "homepage": "f+𩧵򰊜\u0019fy\u0004𶬆s򜜶􋑼P~𳶤򑃤\u0008񩋌%br񤜸󯖓", - "name": "򑳙bR6C?\u000b\u0000T񵚊򱖨N𭘈?\u0008\u000fQ 񰒖񐖓r}󧼜\u0011𠉖", - "ticker": "U-򱲥\u000b", - "delisted": false, - "description": "3񝖷\u000ct\\Jt\u0016񡸙+󏨪񼈅\u0019\u0013s#Q&=g𶠵|o򞵠\u0018n_j𜏊\r\u000cQW\u0004p󶨫񑿆\u0019u󄬲홏s7,\u0007:򼸁w192\u0019P󁰉\u0007!𱏡\u001fXU󑬝\u0018-n񒌁\u000cI=|򚿾\u0004󆨷\u0008R#𷃥n661'!~3\u000bPdl`\u0001P\u0001𶈼⦽r\"W󍊐T\u001dV朧𶝢qlu\u0012_󶞻*\u001f[1n\u00055hz􈣤򾎺)_`\u0016򺐏s􏅲E\u0014" - }, - "id": "pool18z0w72wthjwnkpcsk245ulzh70ky3ca0r7gz05625sl2cyvpg3y" + "delisted": false, + "id": "pool1myejcweuuufuhw2l8patas82cfjwrrjtfv9mjk02tcn6shfm27a" }, { "metrics": { - "saturation": 3.1609452932526336, + "saturation": 3.6630025396421106, "non_myopic_member_rewards": { - "quantity": 202330677477, + "quantity": 900368083080, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18199047, + "quantity": 2152958, "unit": "block" }, "relative_stake": { - "quantity": 22.07, + "quantity": 83.71, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1896-10-30T18:37:40Z", - "epoch_number": 13140 - }, "cost": { - "quantity": 100, + "quantity": 217, "unit": "lovelace" }, "margin": { - "quantity": 22.67, + "quantity": 77.97, "unit": "percent" }, "pledge": { - "quantity": 87, + "quantity": 212, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u0004\u0004|z4T}\u0003񿺋I6Z􂲟𼐟򲲊㲖", - "name": "^\u000c\u0002Z`򻀰\nvGyV\u0013hRqc𴑼\u0015~uZE󚌃tY\u0001&rg", - "ticker": "h4\u001f򤳃", - "delisted": false, - "description": "O󜍥\u001f􇰶\u0015򐯬oL󾏥󜃊>;$𲗖󿜬{OP4^H𕕘򀗊\u0014\u0015󳒜嗿󶌨𮰆A죦\u0011`$I]\u0016~'9𯓩Ah𣬞𸦡񳿞󽔩$檑𝓫>\u0013򻰾\u001f𬡭$A|񶚾}󱌂\u0005񞫉񿖹y.\u0010f;\u00015𾯇\u001a񨇍\u001bX򎿺\u0018)񺽁%󀫩b\u0001|/򰨫fH\u001b>P\u0005KUh\u0008򽩟1\u000c\u0001A󱕦R򟛆𴡈\u0002[J񏭤\u000bA" + "homepage": "]𰞉󈶸&x򸒬𘭝;Q󵐊\nkfqW𸻣Vu\u0013ኙL$\u0016\u000e򲈽;񜻄󀧹N\u0011N-#\u0010G\u000c𣖵񑐶𬱖\u000b=HE\u0017Gy1B\u001b\u0004񅛑", + "name": "󯺫4M𻬠񯛪o", + "ticker": "\u0008\u0006n", + "description": "$~`0(\"\u0014+\u000b\u0005g.f\u0010򑉲bO]7NMS+$#\u001c򚫕󩙐𦁔㽲򉡲B\\[쾠Sg]}&d􉤽\u0018􋡎򏃕l\u000f\u00141\u0015\u0017$-\u001a\u000b 򫁽v򅵆#DG\u0011\n\u001a򦮃0񉾗e􈲫񈀥$d􎽪t_}\u001bd𡃎_K`g򎠅򮕼p𪸐򍡂s\u0000\u0010G\t\u0006zB(vWr-򅥰񹇽h򖶓wDV\u0000G8T2󪐲-𓷿C\u000e󤳳" }, - "id": "pool1spnphg28yyjpurwm6vk7av0ckp0698qwyfy58e0v8qz36ftacz9" + "id": "pool10mr33p8ytm3r2m3dh3qzl3gklcgru36m9n9ruj6r699uv8hjgfj" }, { "metrics": { - "saturation": 4.56990651991215, + "saturation": 0.7593383822403643, "non_myopic_member_rewards": { - "quantity": 413012378801, + "quantity": 579726390253, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13653322, + "quantity": 11857966, "unit": "block" }, "relative_stake": { - "quantity": 32.46, + "quantity": 9.68, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1900-02-08T13:46:40Z", - "epoch_number": 26654 + "epoch_start_time": "1881-08-29T14:16:16.899822310814Z", + "epoch_number": 16266 }, "cost": { - "quantity": 227, + "quantity": 206, "unit": "lovelace" }, "margin": { - "quantity": 34.54, + "quantity": 68.49, "unit": "percent" }, "pledge": { - "quantity": 206, + "quantity": 239, "unit": "lovelace" }, - "metadata": { - "homepage": "􌓝񕚀\u001e\u001f񒏧l3񢝐M\u001eD\u0019\u00129򃹠mc_񤔅-,'񰴲󉵁񠂰񀔑\u0019=km8𸟡T{5 \u0000i\\Z񓣈\u0006񟱷kM2n根𪐪񳹌fH𖵧cK0񘳲7|)󚹏񏻲", - "name": "󀕔c𦙿@", - "ticker": "#\u0017\u0005񿭹\u0016", - "delisted": false, - "description": "#񣸼_B}𜑺󪲶>\u0018/#plJ\u0008^󘸚\u0001񷃥l>{񭰚FWfv󺙙9MnmP)y@DVl\u001c\u0006S@J,\u0012\u000bb𠇧򣖀\u001a,񟁉󦍓\u0008\u001d6S:cPR񵎋\u0016񦯕񱤅Jlm𪟸" - }, - "id": "pool19dh4xdtn6zx6svyd74w0rqv8wj53ga3fef7fm36dw60jv8re460" + "delisted": true, + "id": "pool1u04rqzrswuna8cmt6r3g3nnvzvqv0u3n2r7kjjdyqkvdsrmp7r0" }, { "metrics": { - "saturation": 1.6464367006119662, + "saturation": 1.7145597968910402, "non_myopic_member_rewards": { - "quantity": 597607016300, + "quantity": 398170761112, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7715972, + "quantity": 22147152, "unit": "block" }, "relative_stake": { - "quantity": 66.66, + "quantity": 94.06, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-02-05T07:10:35Z", - "epoch_number": 9350 + "epoch_start_time": "1873-07-09T09:29:21Z", + "epoch_number": 10557 }, "cost": { - "quantity": 209, + "quantity": 92, "unit": "lovelace" }, "margin": { - "quantity": 5.99, + "quantity": 67.08, "unit": "percent" }, "pledge": { - "quantity": 21, + "quantity": 138, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "󾢮\u0006򬶢~𩷮$s𣪪(󩖈癄9\u00161񱣏L\u0019񧶫#𻈂\u0007\u0014iI󡥗\u001b𑴖\"񫎵\u0003𱮯\u00163ꈛv񜝾󂜺Oj񊡙\u000e\u0005Q\"E\n\u0013\u001cRn\u0011}{A\u001d\u0015Cdrfb;v", - "name": "d2\rdk=G4Au\u0012", - "ticker": "cb4", - "delisted": false, - "description": "\t\u0006kgw򳥌^:񷠯\u0007a<򑍓򋘳\tf \nq" }, - "id": "pool1zc9ej9rm9d9kvds63d4a39tzty703ul8cdu5tgf5gj6tzhnjqja" + "id": "pool1gj96q9t5vjrpwfel6lzkvep970ranm9ktw8h0e3clz6hjch6dzz" }, { "metrics": { - "saturation": 3.6548854343601094, + "saturation": 2.562803362649133, "non_myopic_member_rewards": { - "quantity": 487763572273, + "quantity": 446742779964, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13147802, + "quantity": 19517234, "unit": "block" }, "relative_stake": { - "quantity": 81.24, + "quantity": 75.63, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1898-09-18T07:13:44.02894518733Z", - "epoch_number": 5342 + "epoch_start_time": "1867-09-29T07:00:00Z", + "epoch_number": 5966 }, "cost": { - "quantity": 51, + "quantity": 229, "unit": "lovelace" }, "margin": { - "quantity": 45.21, + "quantity": 60.46, "unit": "percent" }, "pledge": { - "quantity": 11, + "quantity": 183, "unit": "lovelace" }, - "metadata": { - "homepage": "m,𒐁򷆴Y󯆤񂆗𧓣\u0011K\u0013\u0015󎲛\u0012󅀜\u000f\u001e򖯯&0\\v\u001e򻫵􇼆; Dx񢶚\n<󶵿𧭑HW\u0011%\u001dx\u0004\u0007r𱂖򨸓!򚈺\u000e?6񔇶𢞿Uof\u0002", - "name": "^\u00042񜢳'@🽣s󎫖l\u000f.\u0003a񸔊\u0013a񪓘q.򘚹򀴋f2󩛖", - "ticker": "𴣘򅇤򪎤", - "delisted": false, - "description": "\u001d񠰗C򒺃5\u0007\u0003:\u0018𙑅򛢈\u0001\tYL􌼷%gtGp񦢦\u0015hM\u00165UV򫈸0=Z𥇆𦓒\u001c0Rd􂬩h(J\u0002\u0005\u0014th@Tx򝊉86hu\u001aC𣂯`?jY隒Z񜘷>󯊵g𵌡w)\u0015򎢂%y񡧹{nsT\u000e𯊴\u0011􇣖𖧚_P\u0010񫩰\u000bǬ\u0001n󕩻zj\u0008Y\u001dn\u001f)񖎇\u001e(]񵭵\u001f񝖞&j&c\u001aS𜥼!w򞣭e󾡅J򖉳6񮹋a(񏆢lBn\u001b\u000fup񾱠?<\u0015\u000bHf\u0006-M^󽡝\u0011󏘁\u0014Wt񥔃h\"󬠀L4}\u00189\u0019\u000f󪉜h೗" - }, - "id": "pool1cm4uvkt3qv7tngsc6e3yta22e2qcdg3409chd6yh92me5ew5dzj" + "delisted": false, + "id": "pool1kw6udst9xmcqk673t4r46urxuhcaxad3e8l7y25mhqfjkakqpzt" }, { "metrics": { - "saturation": 0.742384280289029, + "saturation": 3.0508064609856094, "non_myopic_member_rewards": { - "quantity": 472099403957, + "quantity": 207171910500, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12927222, + "quantity": 7719465, "unit": "block" }, "relative_stake": { - "quantity": 56.18, + "quantity": 22.88, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1879-09-07T06:08:19.410837338921Z", + "epoch_number": 19747 + }, "cost": { - "quantity": 86, + "quantity": 149, "unit": "lovelace" }, "margin": { - "quantity": 99.93, + "quantity": 49.62, "unit": "percent" }, "pledge": { - "quantity": 184, + "quantity": 224, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "2-0%\u000cK=7(@𛿟$򧤫\u0014G(\r)mCA\u0013Rs񺰶\u0006񚚛\u001br𲚣:𥯘򼴩񗖳^", - "name": "\u00076,C􎣫𗻧V\"񄟽l`񐐃򮺗_:0A𡑍8=iiC򘙔.񞚂f.\u0007\r\\򐗴cl,'$\u000en", - "ticker": "2󓇳s9\u000f", - "delisted": false, - "description": "3\u0019C󥢢􀳩C𖬨󮅠}𕘥>,2gV󪒉?M|\u000ec󮂭l,\u001c6\u0001p:hK񚦿𮹤9\u0004\u000b񫒎^=\u0002󲡓nIGQ6*\u0018󫸍N󖋽\n񓂹sjx\u000f%zI\u0011G𘐴\u0010󕪙𻫛[\u0012Nw󩕖?V\u0016s򿃶(m\u001a\u0015򖲸]Ah\u001aT\u0008\u0018OW\u0013_|%ld󟫾󅅧\u000e񵲷 =󬳿~<򺞧X𗢟􈘖\u001f%\u0016𤃟\u001c'O񐣦,,\u001b\u001cT𩥋󺮄Ds\u0014𗘮󰱌k𦤯IfmwKk񙣞6\u0019Di^r󱝳Y󺣥Gw\u0007N~\u0000J񬑣\u0017󅇢g%Tf\u001d}W򠝖`򭅨" + "homepage": "ꍧ5O#L9秶3񍁁e8Z\u0004󷆬x|󠻸~򿻩uF^7񘋌6񌹔\u0011T\u001bB󀖹\u0016?^`p􋾄?񎼨p", + "name": "_≝B1+\u001eD񭎗(=򀻄y3}$h􊟊lex\u001a[\u0006G񢈇Jo\u0014I\u0010\u000fi𩑑󦯰*", + "ticker": "%\u001b/~0", + "description": "\u001eL񮾹S%󏮒)^*\u0010Y=/󽄱q񧁞\u000e𳢅\u0010\u0004P򬊭󞁒\u000cz򓢃g\u0014񬕎QuX񞚐\u0014:󂾮P\u0012)8򑎅ARLz\u0013񖏒K󐰘_+AJ󨲴\u0001JpXQ򺟶8`8o^lnhQ>]𧷺j2", + "name": "bt򊦣VO\u0005K=Q\r򈝊𦎍𘼁\u000f\u0002(겚`n坦󉜜lj\tM򗦍|y~\t5v\\\u000f#\u0002Uq=\"?儙񽵬񥚀$󿉃", + "ticker": "?a", + "description": "KV4\u0010+;i񕪀񰮪(R;" + }, + "id": "pool1pn9wlqezpe7a874pg4lc26av406z86hjcdhxz505tdkxztmgd55" }, { "metrics": { - "saturation": 4.399398331067638, + "saturation": 3.317659414238209, "non_myopic_member_rewards": { - "quantity": 713571065756, + "quantity": 68888782196, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3611250, + "quantity": 7800629, "unit": "block" }, "relative_stake": { - "quantity": 9.41, + "quantity": 47.86, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1861-03-10T20:20:46.301275769918Z", - "epoch_number": 19516 + "epoch_start_time": "1886-08-28T11:50:13.627675255687Z", + "epoch_number": 20408 }, "cost": { - "quantity": 178, + "quantity": 177, "unit": "lovelace" }, "margin": { - "quantity": 48, + "quantity": 12.35, "unit": "percent" }, "pledge": { - "quantity": 26, + "quantity": 46, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "{hs󯬮𲵐axS򱽞\u001fqCm\u0004󻶤0疀_\u0015Di\t\u001b1!򏗪󃚏[冋󸛤,󑼃ugV\nB/ugR7i\u0013\u001f\u0017\u00008$i\u000b_,\u0019󦺴\u001e򨌳Xl\u0010~񄓧,6I)𖚕2m/6\"򄪱u~񋅟R񞜖򜚪A\u001eP%\u0018OQ򁧝򮭘dF\u0007\u0019oD\rvS\u0002򀡩Gr\u001e^󠸓u#(𯱝>q󄢆&2񆽖z)~􇮼򹸳\u001a\u0010񤹍" + "homepage": "@v\u0013𔨓>Di򏋛󸐷g󲵋{\"\\\u001c\u001fB󏊆𤁪\u000cPMA\u0017\u001b\u001e\u0013{\t𞔂_Nc\u001aBSW񻁒𰓻Za򘗬\u0007/𜬔򦥲q!)\u0016", + "name": "0mvLm񪅜\u0014񩶶\u0008􊹑򱷣(󎎉\u0018,1d\u00108𑉉J󉻺󩨭𵰴\u0014\u001bqh\\󼺌󏷅\u0011*\u00080񅺍Ib󋧦󣗵񵘶򭘓c@\u0004zmcE\u0004", + "ticker": "򐳿󬗟p󬦑" }, - "id": "pool127f7lcgmcf8fz8qwrufl64tfdfjdy98c43ntpr7amsl2kyj0wn2" + "id": "pool14rqe7gtx6c30rvfmxqdda70n5wcruuzrnzmm46w9slxzg50jdxd" }, { "metrics": { - "saturation": 2.7173874690449775, + "saturation": 3.4107167809745906, "non_myopic_member_rewards": { - "quantity": 312784436667, + "quantity": 564668031015, "unit": "lovelace" }, "produced_blocks": { - "quantity": 20522062, + "quantity": 4439740, "unit": "block" }, "relative_stake": { - "quantity": 43.39, + "quantity": 41.55, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1871-02-21T16:26:56Z", + "epoch_number": 2814 + }, "cost": { - "quantity": 132, + "quantity": 223, "unit": "lovelace" }, "margin": { - "quantity": 71.23, + "quantity": 18.02, "unit": "percent" }, "pledge": { - "quantity": 139, + "quantity": 50, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "񆆯\u001f$R񡱸", - "name": "\u001b0#l\u000b󡂎\u0011Ggx8m󱟰{x]\u0002B%w)𓀗򴣋𮮗N񈳟 u\u0010,񁼄E񺶣򷖡󎲌ﮍ򗾁:\u001c󯰶w9u򅱋󢐀򃺍U𳂲\u0004\u0008Am񞺤󚺮𾸠\u0018\\.#U*U󩒐򜆰@N\u000c" }, - "id": "pool1mxksua43u920yskfejdnnlf2f64sv57lvc943clnq9ykcrt27e3" + "id": "pool125zhu06sph56smvdgsd40678lg57nrdjrs9u9slq62z4wzhfcnq" }, { "metrics": { - "saturation": 2.1907291832491493, + "saturation": 1.3277086290109796, "non_myopic_member_rewards": { - "quantity": 2961985177, + "quantity": 644119855620, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11833840, + "quantity": 2581055, "unit": "block" }, "relative_stake": { - "quantity": 55.16, + "quantity": 11.17, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1892-05-08T22:00:00Z", - "epoch_number": 12962 + "epoch_start_time": "1882-01-14T04:00:00Z", + "epoch_number": 13612 }, "cost": { - "quantity": 191, + "quantity": 27, "unit": "lovelace" }, "margin": { - "quantity": 34.5, + "quantity": 0.38, "unit": "percent" }, "pledge": { - "quantity": 12, + "quantity": 58, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "wDP\u0010pbm}a.Q\u0007𽃣u񰞏0򫷟\u000c0$=If󗋼}N,*􃹍𥆇\u0004H .3\u00084 1\u000c񧫟𗁎\u0012n⚆!\u000e", - "name": "%Z^\u0004񶌆2ceq𠻮wb@򽠯񨩽\"<;𸽹\u0011񊩝!Nf[d,`\u0003?󟶭\u0005:󗯭3z򷩁p-\r0b|󝪸񁩹f\nw", - "ticker": "gDX", - "delisted": false, - "description": "A򪆠󝝓󗆰6𿒒\u0010\u000b󡂿4\u000e󇻥4w𠻒H1󲑮57R\u000eJNoe󐹁󱹳h󴋐򯴷}񬌐\u0012`+\u001b򹮝g^\u001a󡥡>\u0019\u0015w1Dgj񫼎\u0011𖖂􀁬v\u001aD𲤯\u001df􍓆񙇝􍲭Vb񝾟X񏩓\u0008\u0014򗄮\"󘧇󻧽󾂋A􃑖" + "homepage": "d@\\~\u001d 򏒵\u0014vpl\u0014b!!񩒫\u0002T򯻼ZL򭈲\u001c񖄯\u00054釋񧲪3d0󗋯E퀈\u00014\\Z򧜲p\u0018󦎨}=!T.g)m򺑵dJ~򰼰#򦍃󠑖+&)𡑯$W18샣󗑋񽒗\u000bD󿌬#\u0012󍧀.{R`\u00189W%", + "name": "'핗7", + "ticker": "󚹡\u000b;", + "description": "&\u0006񂻇\u0019N[E\u0003󘣩h󡯱L\u0014\u0014LM󚅟4]j]\u0000{񤷖NQ.\u000c릐󂷠~񍱖)s𝔺\u001518o񄷛?􀫾𲵲lN)DE𯌻ty𳉼񮲲T(\u001f𽛹\u0014𨅉V@N^I1!\u0013:p|𡮅v+=fs\u000e~]H5!YHm𤳷򑅬\u001b𥰅𐧯\u000c񇗆\u00178d𘌠>\u0004񭾻𻐍Fq\u00052.󃲑󋝎}OX\\\u001ezksx񤝷W񷍚󚝶Li򙤧_5\"\u001dsMr\u0013]K8𼓲󔋫$7!+i𳞟\u0010򪊏*k5򅪠='" + }, + "id": "pool1xn79lrwh0p503jtk0qady4nak4njtzvdaqy7d7gm6nsm2jzlz9d" }, { "metrics": { - "saturation": 2.369418247644717, + "saturation": 3.162077707284099, "non_myopic_member_rewards": { - "quantity": 55629129590, + "quantity": 905939464266, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22036496, + "quantity": 3154277, "unit": "block" }, "relative_stake": { - "quantity": 83.17, + "quantity": 33.87, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1901-07-23T10:28:05.558012104149Z", - "epoch_number": 18990 + "epoch_start_time": "1859-07-26T14:58:33.440316963264Z", + "epoch_number": 30367 }, "cost": { - "quantity": 211, + "quantity": 68, "unit": "lovelace" }, "margin": { - "quantity": 47.79, + "quantity": 0.6, "unit": "percent" }, "pledge": { - "quantity": 142, + "quantity": 112, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "bz𡱬򨣶򭄍\\3Ft\u001fYWJy򔳘\u0001.\u0006v\rtA򴇞v\u0012vk񌸏􎇼󥓬g\u0007:)Wm𥦈󔢰\u0014\u0017󷳔򒣁", - "name": "\u0005\\𑌆\u000fI19\u0019Alt\u00140򄩻񉾜wf\u000b󉾑qW񵑏\u0018\r>v\u0003𸻺Y{W𔴇Q?", - "ticker": "𧁮t\u0019򌬶:", - "delisted": false, - "description": ">`'?-q7\u0014Yn>\u0018򃿕v}z\u00105𐴮򋆢򰱏`U*%褷1\u001bi)M&Q\ni)c\u0008񻜪\u0014Zp\u001e\u0010򟓹󵧔}N.򜥷\u0014*\u0019𤖛t\u0018򽌬\u00021\u0008\u0006A[\u0019m%h=\u0016CM󢍈$&)\u001d\"\u0016\u000f\u001e[+t76X򸌱\rz𱼭\"\u0019H󈏧񩞞\n\\I8:^?󛤺I\u001aKv\t𣏁y!<2}\u0007\u000cOS\u0002𠤩\u0005ᔸ\u0014񽽂󯇾nTP^\u000c{𙑐9񻽴0vTgTk򕹠\"\u0013*\u0018-I򲂇\u0016+1𳎲H𚂗\u000e\u0002!921q|w\u000c򠽀{󅭏^8U\u0003<\u000cg𮳝M]\u001a򱿾)^\u0002𴾞!\u0015UZ\\O񣌂󎦛\u001e\u001f\u0016U{j􇄫\u0000\u0017De󾵱k4uumZd~`C/p+b@󇉳[/L3\u0003^򼥘򛯎f󸞯_`𯿚󹺖=WN򀨔𙭏:" + "homepage": ")=\u0019\u001a'\u001b򐉖Yx\n𢗿#@Q(𔽕񫅺쌿𕟓dX@+N4\u001a]\u0007,^2򵲚Y񞒄h𡮶򂤷", + "name": "(:񐴡FX󑖓񎋽d^/C8k.򊨅a򪭦󷂃󒗀\u001e\u001cq\u0011\u0000񓪮󸂜󤯷I󲑰B8t򕤸\u0010_t\u0016\u0016\n<\u001a\u000c\u0002\u0011%m<\u0018=", + "ticker": "j]󉲛", + "description": "8ed90M\"pDl5󛋼F򱛐򟺧\u0008^\u001c􇷨򕧔5T\u0005}k򯧍SXi{v9M\u0004u񾑯v\u000c~eg󶪐\u0005\u000b'o\u0015$򦿇`򪐲Z\u0003c8\u001b8t󌤘\u001b >\u001a\u0004 \u001e𶇂􃝻n󥦁`%H򵼉l]O񖿬!\n#Ji򁳂PxGP򎎋d𥽻WJ>LZ}dPW5j񱀓\u001e@􍇫\u001c񏏵mwl\u0018_Z<󑗭W𴱱\u001bk󃷵\u0005s1q6򤆔I|\u001e\u001dD^Y!=\rPbk񮨉󼁾s&=i򘈏𰪄򔽁\u001a󱁍g0\u001d\u0010򌵫fTly{\u000c]\u0010'u|(Q򶁿\\MGn\u0007󃌕U񯞿\u000b$*rX%𧆐\u0004A]\u0005O􈊳t$񏍞󭟀\u000f󤌲󻡅\u001ev*k#󋊏|\u0017.>󍠁v0{/dg\u0003i󣖪u)򿑬xK󙩺`Un\u00059񃅧&\u0016\u0007X\u0008#􊠥DC\\$n7𕏃𻵀\u0008𬆋󔦍\u000fMdN" }, - "id": "pool1ld0a0aasheztu98yuucdvwjxhurw2cssaap37rz5p0fmu2u0yzn" + "id": "pool1uqkfj563udp68yvpy7duhe3xrxdmt7d7zq32tmhp4ghuxdcw2nm" }, { "metrics": { - "saturation": 1.5241114929567934, + "saturation": 3.3673759727589636, "non_myopic_member_rewards": { - "quantity": 248398847665, + "quantity": 595925683308, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2810490, + "quantity": 12901328, "unit": "block" }, "relative_stake": { - "quantity": 33.08, + "quantity": 36.08, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1862-10-25T02:00:00Z", + "epoch_number": 26819 + }, "cost": { - "quantity": 203, + "quantity": 198, "unit": "lovelace" }, "margin": { - "quantity": 53.4, + "quantity": 1.84, "unit": "percent" }, "pledge": { - "quantity": 159, + "quantity": 169, "unit": "lovelace" }, - "metadata": { - "homepage": "3\u0013\u0004h\tkVfxj󓓗Q󲲷𾺻k薼K򋷨\u0016]*󂦜\u0010}L>Vc|\u0015\u001c[i\u0001", - "name": "}񆻁𞰉:[CYoCpaC\u0005q򷺿񾅥IM𩦱8\u0015k7{5", - "ticker": "\u0013g𚹫\u001f", - "delisted": false, - "description": "L\u001d[X}r󲷸P?/~\u001chf4\u0000\u000bL󩻷򂃪񯂘\u000b\u0003Jf\u0002`xiH!=<\nV$\u0004b\u0002򒊹\n!\u0000S纈𺙖]\u0005\"|\u0016F\u0010h򒲽~*#󊶏q4!D󙎷\u0010󛼠򐄼ee󅰕9k𚘨K\u001b[(s\u000e򖜪񏅚yj?\u0018\u001eK,󚂵&+#\u0011񼯜󎄮a򙎇y𩤸\u0004Aq򗄇\u0014\u0007\u0019#2󭆻P󯌾\u0014)Q񹴰\u0017򈼕zા𥽸G\u000b\u0013󈞅-\u0010n񢛾򍚗K􀡏\u0008󂏔)", - "name": "a3-\u000b:19񯬲#\u000f0J1", - "ticker": "Q\u0007o򰁄", - "delisted": false, - "description": "𸭩,,8*J~Z-\u0017𙢈'<\u001b|񡅤\\ \u0017\\񬰷񌖖J񺪳𻫇=\u0010V!0K\u000ftH]l0\u0011򉃓򱋲L!򀗴7P돐򓮝(W\rL򘆉f/G\u0000:\u0003\u000b~\u001a" }, - "id": "pool16jgynw2adera9f9przt2klajmslyrf67uupv2k7exvtxq6wqnp8" - }, + "id": "pool1wz5uywh43vundpglc7p33hlyue55ck92m5rgj3t5zdhay6u34d6" + } + ], + "last_gc": "1885-09-20T16:07:13.155829664812Z" + }, + { + "pools": [ { "metrics": { - "saturation": 3.0420919657895498, + "saturation": 2.3274168059282707, "non_myopic_member_rewards": { - "quantity": 641436377864, + "quantity": 392094839351, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4285149, + "quantity": 15862285, "unit": "block" }, "relative_stake": { - "quantity": 79.83, + "quantity": 71.29, "unit": "percent" } }, "cost": { - "quantity": 219, + "quantity": 9, "unit": "lovelace" }, "margin": { - "quantity": 1.65, + "quantity": 34.08, "unit": "percent" }, "pledge": { - "quantity": 26, + "quantity": 92, "unit": "lovelace" }, - "id": "pool1vy45x7jngrm6krtkyd0s9afm3pymnr56ql5xsknx9ewxzaw3cqn" + "delisted": true, + "metadata": { + "homepage": "0\u001e|\"\u0005􆎰O< 𦃗\u0001A@\u00086𦩌=\u0007Q\u001cR\u0004󑐲/7𮷌󸜪񜠩w8𔙈\u0001 򡁧󻇢\u0012_𴈤g?\"\u0008\u0019𛇠I\u0011𮣊򔤌󳪦󒅥J󎻪\u001b񸠭𚟆'.񂯰򹒋KO>𡌣h')I\u0001dg\n;9F󽖜s\u001e􋆞#!o􊒣\u001f\u0013Y\u0007'z", + "name": "<𚘤sm1W󹍪j^7E\u001f`\u0010\u000c𳻏$\u001e𸹯\u0000񤝸󒲆\u00175񤩁Me!-P;R𐃸'򢊌򬳾7\u00182S\u00036LK񴥶Vq", + "ticker": ">񦠐󔁆r", + "description": "Z󝼊rg򼦥~i\r󉉃W_滛i󐃑􅠙񴹨9񴧌񴐡2Q\u0010\u000b񟫟𬐼T\n󚜽\u001a'\u0007G􋘹򫼪𐕵[}\r\n􃮒𶏅|򘔢󥳶񺾺;^1^)\u0014\u0012\u0010\u001e񷻛󽫹㨪2񣥟\u0003z?V>32\u00033n򇈛,so827ok_\u0001^򃊈󫾝g\u000e𻟗*󐞹K򵶝𠯳O𰳇\u001aL󏻝󴩕q󦣸n-\u0013󨔐\u000e񺉷5\u001f%k󊞛3H򢡂緛𫼋CQ񕁽=\u00155\\o!\n񏰩򵘩񻃻󭯂?P\ns\u0008>@YmvJ;D'󝏣\r୥򅆯\u0007'3󎬺G𞨐/3󱞬𨨭N񘄞\u0000" + }, + "id": "pool1s5w976ynr7tjlyrja338lnutc7ecp5d0t7gpnc6zw4jt5gc7gqj" }, { "metrics": { - "saturation": 1.783881816429374, + "saturation": 0.8220726381170929, "non_myopic_member_rewards": { - "quantity": 566954542298, + "quantity": 694242408172, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14316892, + "quantity": 12312120, "unit": "block" }, "relative_stake": { - "quantity": 51.48, + "quantity": 88.13, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-04-02T23:59:00.428312355507Z", - "epoch_number": 4856 + "epoch_start_time": "1900-12-19T13:25:21.025637424224Z", + "epoch_number": 23292 }, "cost": { - "quantity": 89, + "quantity": 245, "unit": "lovelace" }, "margin": { - "quantity": 2.98, + "quantity": 13.58, "unit": "percent" }, "pledge": { - "quantity": 99, + "quantity": 103, "unit": "lovelace" }, - "id": "pool1yhzyudfysetssy2553x42mlhnezxw7596qej3s3q4zz0yzaqjjj" + "delisted": false, + "metadata": { + "homepage": "𣄑󌮮\u0006X]%𮟝򠿙9\u0002򅶇D񊁀K0\\\u0008gh񍓵nG\u001fyf𵶽\rH \u001a}]Q𗌨Rr}S\u0007􎅣\u0017\u0013\u0004𡚟Kc\u0005*\u0006B\u000e𯪯󎌅B\"󘿟`\u001ckhx󬩰_񲢟\u001e󗹟q\u001c[ti\u001d\u0010w[\u0004󜐈󌞀\u0002xYN\u0003\u0001񛐇򟙘", + "name": "񃂿\\(dpGW񦦭5\t񬛪󵱳&s6V\u001f\u0011,M\r\u001aQ\u001f񔞈򅽠\u0015Zk\u0005񄀎𲑦\u001eB󛬧_{AF𲃗$@\u0007\u0007\u001b'񨩆6", + "ticker": "􌺔2@", + "description": "/3趃%sy(\u0015嗲2\u0019f\u000c\u0007B򁨸Wm󡟼A𻼒S2\u0005I󞷨!I{򫚏򯇛\u0001Q𠪰t󔨐>\n𞶑􊙕v񡡵\u000e#.L򦅈􋙛P;Q􀢛񸿡<\neWotM.rr񎨵󧱚\u000b󖜧󌡙󁁝\u0011򓗨/E󲾭񁔖G\u0018l\u0013\u000fur񟟀󗰇,\u001c𣙫=\u001d'~\u001a򒝸󄌇\u0003\"F\u0000\u0003p-^𯸲񹾘z0򃄚󲃇򨊝񰖅,}+𢆁󜫝2o0󙑎񈐦TL\u0017򥙻Y󋦼f#a񯳽aB>J񫎏Jt\u0002)\u001f\u0015z𢂒#aQ\\" + }, + "id": "pool1shh9self02vhzvl2v9uzvpenq6hglf58kc5xzc7t5w8asjhaxsc" }, { "metrics": { - "saturation": 4.285024902149777, + "saturation": 2.3335269256872833, "non_myopic_member_rewards": { - "quantity": 171821638898, + "quantity": 301492879485, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1694611, + "quantity": 11558990, "unit": "block" }, "relative_stake": { - "quantity": 69.94, + "quantity": 19.39, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1898-07-05T09:46:28.100623926047Z", + "epoch_number": 11031 + }, "cost": { - "quantity": 166, + "quantity": 51, "unit": "lovelace" }, "margin": { - "quantity": 30.67, + "quantity": 30.07, "unit": "percent" }, "pledge": { - "quantity": 38, + "quantity": 206, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "\u0001c'󞀡\u000f", - "name": "qx򹑞.M󡏌􋋙򢨫>Z񴢥\u0000\u0002", - "ticker": "\u0015d\u0003", - "delisted": false, - "description": "\u001eZ痓q2l\t񉤑#`\u0004\u0016~y\u0017@5h󳁨\u0007p5\u000e񰹌󡐷\u0000򾶇,^#\u001e?򧇱|y򁑙]z*\u0002&\u0007󡳲\u001c&񎜿[^?󂀈n)j" + "homepage": "\u000c󃌵%Cu6S@񠍈]\u0018򁘇n+\u0016b-\u001f{\u0011.󛃸𬻆AX", + "name": "\u0010\u0014S񚚤87x󅣷\u001e\u0007򗎿6񓽽򕢯P_\u0017", + "ticker": "\u0000?U𠈒", + "description": "Z\u0004H񰘊'[{/?󠬿򠑨24\r򛱱\u00187􉁭S\u0018vVmh񀘄e-򩬾􃵂􃮽*Q,\u0018𧲦򲪻\u0016=l+􊽩񣬂", - "ticker": "{=m", - "delisted": false, - "description": "vD\u0005H?\u001a:XMuz󔷾\u001a𬗃o\u0012󲤡񘯞\t^򫎲\u0011M$\u0000F\u0016M.񖆌\u000b|\"h𚷤~_񧤎\u0008\u0016g/@򢂿𧈵]\u0002ViRp󌌰򕈩KN\u0005oA\u00022\u001a^󖚋󌜾/󊿲8\u0006 Gwm\u0012\u0004%򄄹vs\u001e𧉾>󄪿\u0004i.l󖃬D]򤖕w\u000bo񪿴(;\u0013񋗜鳮􇪚v\u0004,I󎇱\u0000k\u001aP&g\u0005%򂰋`\r\u0007񽫜D>\u000eSEO\u001b-`񴧽}\u000ciq\u0012y󧹼󅂓K._xL%򩲆$!e\u0004\u0018𛖥uoU󬌡򫞨'FTo\n~𤦻񆸭&󋮱𯽄8񘕱𛬅􏕣]K\u0018DoY_" + "homepage": "\u0012>󀌣򘄢񿅎LoT𮨘󽀋𬇄\u0018Ax)\u0003\u001e󭧼F𠒪񯷿󩿖nF𘋕F􍥅qvs񬹅S󮅌\t\u0003p\u0002.\u0003\u000fbcn\u0011\u0001\u00069𺔛_%=\u0002%H`4\u000cVK", + "name": "񃋭E", + "ticker": "𫧖{򋨪", + "description": ",dap󾅰N^𭳖[F󺌞󈒿󩟸\u0003*\u0006" }, - "id": "pool1a3tkahy9v8c709tpvk6z3t6vcrl47kjn6j4g66rg7v3953u75rp" + "id": "pool1zpphysdnc9f85vdrxhgt4tx5zn93t6nwm2nccmgj0kpg2gnpgn7" }, { "metrics": { - "saturation": 4.015131494914703, + "saturation": 1.810187261129295, "non_myopic_member_rewards": { - "quantity": 753774003726, + "quantity": 263845823441, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15872653, + "quantity": 1873500, "unit": "block" }, "relative_stake": { - "quantity": 27.9, + "quantity": 6.43, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1874-03-04T08:00:00Z", - "epoch_number": 23539 + "epoch_start_time": "1888-02-22T03:46:36Z", + "epoch_number": 10036 }, "cost": { - "quantity": 251, + "quantity": 95, "unit": "lovelace" }, "margin": { - "quantity": 96.84, + "quantity": 19.59, "unit": "percent" }, "pledge": { - "quantity": 156, + "quantity": 226, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "(S\u0008R5𐾚6H!򙐤e&R􂌂w%GI\u0005󐔬󨺾R\u001b.D򹷝\u0006E񔭮C*񣢑3,񑢌񱣧O񭒔?a򞃝~\n4𖊈𦽦𜻀o\u0019}X6mQ&gwZCj_\u0000<񊨠#󐎠NJ9􊋎Xm", - "name": ",UZ\u000bbV>򞝄&󿍎NRh𩩋󨾁=a\u0015\u0018\u001bV󃑷GRO\r󓣓󪗎񓧐\\Rp3񄡨bzr", - "ticker": "\u001e,\u0013G1", - "delisted": false, - "description": "\u001db󡯾g.E\u0011\u0013\u001f򶇒q񭶫\u000fm~񨦰򩥛F󧫥\\\u0015w\u001a򓷟ez<򤐽!LO!l\u0000\u0002󌍁Zq`\u0013<򋮊󈱀\u0005餘{R񚒚L򛵰\u0010{Z\tL󶩎D75!*5󼪿}󧑴󱈛򵧉𶃎.򆊳(D\u0005r𺟬񻛕s󧗘oQ`@5򔧇e\">#\u0004kk-\\󑖱\u0015\u0004'񗅏򪻵󠊍%񾫭5VY񵿧\u0014󙹵𗯑򨷭}񅊮a\u0011$򾤞\u0002.񫀤=3񆎀$\u0003}1p󳥳4?4𶈑86j1\\򉚶\u0019S򷅶_<􄭑I5\u0015\\\u0016Q\u0007񞙡i񜓚\no\u0012w򪓟\u001bs9'񸄤򬻫罪]t򴫒bq𕜜E>E󈟀;<-Ncp󣡕𵕋񿽻M\u00184𙝴󣚗G󡸼E񭾎y`R񯃒+\\\u000eJ\u001dx\u001dW􂝉kw'\u001c\u001bB3񟻝eT4񺽕t#񸪖\u0013l5Ve)\rI􀅓𵳠\u0001\u0004gll\u000b\"v.0󺋓qO󛉅`B򩞝kd&v񉰻\u0010L" }, - "id": "pool1lv5uuh4wmdrnk5tmyxyjeycvm3rukxcqdxaxkwzpv2gkv7fkars" + "id": "pool12etz8tdnea5v20u5uayyvewfs0sy4slzpkjen60rx4vauewwq48" }, { "metrics": { - "saturation": 2.0156502921952124, + "saturation": 3.8500146057114097, "non_myopic_member_rewards": { - "quantity": 723355624973, + "quantity": 410901195088, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13440747, + "quantity": 18472777, "unit": "block" }, "relative_stake": { - "quantity": 79.26, + "quantity": 45.4, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1872-06-14T22:26:45.123712063727Z", + "epoch_number": 6021 + }, "cost": { - "quantity": 4, + "quantity": 114, "unit": "lovelace" }, "margin": { - "quantity": 63.65, + "quantity": 88.69, "unit": "percent" }, "pledge": { - "quantity": 119, + "quantity": 243, "unit": "lovelace" }, - "id": "pool1d6cjvjkef8334qfecuq2h4203q4mz6wk7lwmxfdzvvx6ulzlknk" + "delisted": true, + "id": "pool14u97azkf7x0eg5u27gjdrfapwdmafsfpw7aaqhskgsxqkfyek5q" }, { "metrics": { - "saturation": 0.4088002897474069, + "saturation": 0.5995064520375798, "non_myopic_member_rewards": { - "quantity": 126041189601, + "quantity": 971704870751, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14480663, + "quantity": 19438711, "unit": "block" }, "relative_stake": { - "quantity": 90.65, + "quantity": 68.23, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1882-11-27T07:52:33Z", - "epoch_number": 9915 + "epoch_start_time": "1883-12-09T21:14:13.639637081535Z", + "epoch_number": 27319 }, "cost": { - "quantity": 228, + "quantity": 118, "unit": "lovelace" }, "margin": { - "quantity": 31.2, + "quantity": 56.71, "unit": "percent" }, "pledge": { - "quantity": 12, + "quantity": 106, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "7u]2TWB,󡟾򍴇s&\u001ddl_\u0001\u001eA_T􊅐\u0008\u00196mP񽆲(𞫜뾡\u0005\u0008\u0018_D󻁢\"\u000b8-$^\u0007\u0008OVQ󉴉\u001f;g\u000cO", - "name": "bQ", - "ticker": "Q_+", - "delisted": false + "homepage": "_,P(\u0001񈰖\u0003󁒘\t񒁯󧇮\u000f\u0011䐁9c'uS\u0016^Q zdNTB:􅞗>CKiH|8B\u0011񘖳񡄘|g*r+,hq𝧻e\u001a􋌺Wpxo]򼢨Td{L!F񺥡\u0006𐮠", + "name": "m\u001cR񒴳\u0018$󂲡򼫑 {%󤿪򅈡􅈋", + "ticker": "򾄲,(", + "description": "RmZ񲡑򛰾|\u0016Z!\u0017򷑱򝣊򶉈\u0000򜺁K\u001a\u0002򞄁fB}\u0004DG/\u0002'󟜘/\u0010񶊡󄑗P򷝃:w:򰃪󦤿J򂍆pt\u0017񺄎U󎙽󰍂_s\u000c*\"𚋝,𤭔􈫈󷟎𒓂Y\u000f!𢄧@򔛧󢝉\u0003k\u0012I𑾹񡏹=h\u001f󎆩es;Z򵣻F󃆫\u0002󍢌LcQ\u000f\u00188/\u0018\u0016\u0014M\u0006\u0015o>񲮚\u0002󡀇\u0011)uh G)\u001e񟹧qT\u0002Y#+tnNXV򝚿5\u0018 \u0007􃨾${\u000cq\u0011P>!z\u001ee\u0015\u0001@*/P\u001d\"R󪇮;\u0013=HXv🟌󍯠2\u0006.\u000c9򇥰YH^\u000b\u0007$b񠗪V|@񊲈,\u0015U.K\u0015%ui򣢿\r\u0013t􆄤89\u001a􅭊􏀐X\u000bx\u0003\u0002Hb\u0019\u0000=\u000e`~3R`󬘶0\t\u0015v[\u0018!\u000e\u0002g\u0017J󬖸򣏰򾙺Io𵮴$D丟5J񁥜🌬[󢖨U\u0018\u001a1\u0000򮵫n\u001f~" }, - "id": "pool1vw6q8mpeufcfu6h0kal0k8jjn8wpx2kqe0gejum0dnsr2wr6t6z" + "id": "pool1vtufalyx7yg48x83n9854k0m2gklew3sf7qz79e8j0cpw7t8t5c" }, { "metrics": { - "saturation": 1.1837865420844962, + "saturation": 1.9408830333880078, "non_myopic_member_rewards": { - "quantity": 423472272363, + "quantity": 474124250353, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2675215, + "quantity": 16683814, "unit": "block" }, "relative_stake": { - "quantity": 42, + "quantity": 92.17, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1863-09-06T12:08:58.432672131015Z", - "epoch_number": 8593 + "epoch_start_time": "1903-02-14T03:23:54Z", + "epoch_number": 11432 }, "cost": { - "quantity": 2, + "quantity": 61, "unit": "lovelace" }, "margin": { - "quantity": 86.04, + "quantity": 57.35, "unit": "percent" }, "pledge": { - "quantity": 207, + "quantity": 131, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u0018񊙪\u0014R񮃯p𘩪S򑖜o\"\\󉈾I\u000c\u0000c\u0015񖑿w0𭶔򏊼-Aa-􎵧", - "name": ".\u000ep}i\r>\u0014\t󩟈,g", - "ticker": "t򙫭Wl", - "delisted": false, - "description": "/񻺖nj=\u0010\u001f𑟽󳲥0QX\u000f\n4@.𞒒񅦩>\u0008i\u001dY9mc򤂚sZ\u00156\\\u0003;\u0007(>񞀌1[u\u0015p򴗆#C🐥/\u001d񲹖H8_S\u0013?򪦧V6y}(ﶶ𞀞Idpd򱼍\u001d.0񢤪񯣌\u0012\u0015񚪻S\u0006mF򀈊?񏠢T񵦩(򨇫MqVnI𢊗\n𳌴\u001aG\\\t򳀚!\u0017GI}򭈀򌻛rHM\u0013W+\u001er\u0018񳇬\u0017f%b~=񒵤򎹇qPO򬷘:c}gG󘸻0DD9%n\u0002Gp\u0014q\u0008\u000c򤀾񊶕\u000f󦣓 `񪓣,$=\u0019[a󥊗򁉿$VEh\u000e3񐽹\u0010m\u000eT<$\n򋐊6ZC?k9-DIg1\n~y򱻅" + "homepage": "\u0018\u000f\u001dG񫚴ok\r\"T\u0007yZQ\"{\t\u001c+PLEjR/k\u000eQ󇓺EE󙕾jm!򁊔𔡹j\u00058aMNdyAL?_1󾂽&\u00043g􋍅𑁠^(󭝪񾧦\u0015jcD{2D𔘩$:󏩕Q3b쫰eq𳀑", + "name": "b\u000f񥞪\u0015R\u000f\u0002\u001c󢱴\u0002&)\u0016􅑚2\n", + "ticker": "\u000f \u0002", + "description": "\u0001\u001fPT`b𣿅U\u001e򢼸\u0014*3KN򔏙\u0000񦡺n!򷄢oR􊭓c\u000b;1\u001cNt󭧇򉻧h\n\u0014񆫘񊳡񻣍'񼮰-rRK/j'񾁓򻌃\u0014O𵻯􀒄\u0002񑸬􈩪G{ta񤗑" }, - "id": "pool1w4z563f3nrrxqg7aqcc6fmhzqcczvtyam99rudmcksqmg0fpjwz" + "id": "pool1a6k5eerwg59h76cx34w0cl784j89cxmayq294snkn9r4kyasjjt" }, { "metrics": { - "saturation": 1.3080694365359324, + "saturation": 4.431370738489245, "non_myopic_member_rewards": { - "quantity": 319501729579, + "quantity": 59278888611, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9354572, + "quantity": 6014083, "unit": "block" }, "relative_stake": { - "quantity": 97.5, + "quantity": 21.32, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1875-11-12T15:21:13.213160168107Z", - "epoch_number": 15432 + "epoch_start_time": "1889-03-31T22:53:35.975120635539Z", + "epoch_number": 1415 }, "cost": { - "quantity": 110, + "quantity": 26, "unit": "lovelace" }, "margin": { - "quantity": 81.2, + "quantity": 16.83, "unit": "percent" }, "pledge": { - "quantity": 196, + "quantity": 48, "unit": "lovelace" }, - "metadata": { - "homepage": "𹿤\u001b󸟹1?:\u001a", - "name": "}Ev󳪣 𣐯\u000f򈢜\u000f\t'TU􃻦I𬓡_\u001b\u0004ዐ\u0011逍\u000c\u0003񶵸񢥷W4󿶓\u000c;\u000fA^𞶵\u0018m[ඹ\u000f绿򛝩,\u001b )\u001cZkc", - "ticker": "C\u001awU7", - "delisted": false, - "description": "\u0002H\u001c$|F𱀐\u0003\u0011v\u0017\rC,=EU򇔮c\u0005CgwD\n\u0012[=#󆖯'e򛪒lT􀸜c󧩄`\u0001,D񃦞Yꊙ5񳐴𻋡u\r+\u00072C\u0002\u0006EAO񁱒\u001dmHQ\u001f6~{Jr\no\u0016M\u0015?\u000c]\u001cRFP#𰹽'\t8򕘓J񪮢󈊝" - }, - "id": "pool103n97lg6tgfed4wyh4ypu5qg8nry44jtpy0cuqrp0wh25zc5rgt" + "delisted": false, + "id": "pool1s8ev7gph8a68yya7d3rsc29e59a2fvu9mpk23uwa7q4m7t3fw42" }, { "metrics": { - "saturation": 0.6802585468764488, + "saturation": 2.3327554166702855, "non_myopic_member_rewards": { - "quantity": 728796505103, + "quantity": 741101978113, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1591028, + "quantity": 18134216, "unit": "block" }, "relative_stake": { - "quantity": 82.68, + "quantity": 32.45, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1904-03-26T21:54:42Z", - "epoch_number": 19513 - }, "cost": { - "quantity": 125, + "quantity": 136, "unit": "lovelace" }, "margin": { - "quantity": 71.58, + "quantity": 88.36, "unit": "percent" }, "pledge": { - "quantity": 9, + "quantity": 131, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "k'P_𑳨_󂕙5\u0018򆗇󽥠򵺕8/N\u0012:\t\u000c`}!8\u0003\">񓤓h󞍪5\u0001df\u0013\u001f񴅐z\u001f@\u0004\u001b=\u0013b񋐥hQ\"\u0018+򆌓D #?򧪇?\u00065-h𾐮򛒨 񠡼(㙱󙓚\u0018w􆭰RJ\u001c<\u0014񎌴Rt\"]򄧆U󂭰1?\u0007q_&f'=", - "name": "򨷘g򄌺󚏘𬸻GXm󞳖N󡋃񐲪𾡬񄥉~🽄򾫣\u0000[#}v񵼽%Ec\u0014򲉣|񭄆n\u000c򑲡\\Y𺲎򕦆1", - "ticker": "PF𓯇", - "delisted": false, - "description": "򵱾Jr4񸌥K򒽜\nIY8\u001bJ𰅚#I򴜀󙭅\u0018𬪊L\u000cNG򔨝#\u0003\u0015r\u0006㳥\u0004\t\u0000𢤓|&󀲷6\u000fA46a!C撒E󚣎7:.񰹭\t@\u001c<-d\\\u001a%𜙃񄀟\ta&=I0Tx񖍦w'\u00044򡀴z喏񻌣󪐙\u0015Y򂩌񑕺\u000c𡦎SHv󮞈򂄃^\u0000ZE\u0016𨘷k񮯼1Ql0^B{?񩨿r󬄉򮻠𜲛󇗔>|\u000e𔫵d{fN򍑠!񴥁\u001cRg𲂄X\u001b*򮖻R򢿴O\t`\u0015)Rb񇵎\\H!\u001c|\u000c\u000f\u001d" + "homepage": "v󤊒+\u000cJl,\u001c񓂂\u0010􏎪o\r$R,𛈒v\u0010𞀯u58s񃣟!`\\YF񢏆\u0019,c񴊫\u0018U$e", + "name": "AM󾫸", + "ticker": "]􍀄(􅆂", + "description": "#\u0015𒿍,1񝵌[񂺡2\u0012𚁫\u0003󫼇5\u0014\u001etK;cS^\u0012\u0017󕝮󖬰fmFfN#.0󣃙0:񬅓]Q`󭨃򝲯\u001d󷐍0K7hR?\u0003򊚵x𭳦\u0002qY\r\\n5񳞤C\u0008XU3򖕦}򡄊\u001b󢊰T\u0002Ey󍧭W\u0017󅺀!{O򗳎󡚛\u000e򹳎񆆂\u000e\u0005\tG\u001b\u001b}g\"(e񯟏~`񝙏\u0012򬆸2[OP󂯕>𢇳Pr\u0000\u001b􆝢I\u0004t 􏰗\u0005X󚀗򓜊􀩜a􇧛F򦕃6,0򄱥\u001b\u0010󕙁O!Zv𩏆򊃨\u000f-oy\u001e\u0017btt\u001d\u0004G󜊁\u001aEe{\\\u0015\u0016of\u0014򴵧𾧨W󹗉O񟷵J刭񖉭Ef\u001a>\u000c\u001ctqMC+" + "homepage": "=\u000f󀐃!\"mc󱾚\u0002󁼺}󬊺󌥪\u0002\u0019\u0003\u0015V\n^F󠍠4Qs>\u0012\u001fCm󮑉'lF񠍸xO\\𐫿\u0010OcKd~\\x񀥬󀽸񥴐m,鍖cUz;N\u000fr4+\u001f", + "name": "6+16󋲿", + "ticker": "<􃄄􍾻J", + "description": "𮅯BP\u001b\u0015N󅋙𻿂򑽛[򹶋<\">J񶣧\r\u0011IZ;\u001aA\u000bWfR;򮶶\u0013w-O𽩩򐅒h\u0001򓦀󅎆[u񅓅.Cx$\u000c򳩚9c򦑝ꇯ[5p\u0002\u000f\u0006#)򿞄B\u0014𱞡򓏆A򮜴\u0006^*\\󛬽M񇹁򘷦`C𠁆F(/x𵍆􆶺\u0005󋄠hq\u0018Z\rB(򊇖\u0000T󏹐uhx򺆣o\u001e3rO󯹅捆\t719fo񾤼\riEq󩛇\u00160𲝐s\u0000\u000eX\u0007;🫎󒉣;u\n|{B\r\u0013V􆭫򰡘\u001c\u0019󃸭񫶏\u001d𐔓򐔻smQ􃭛;t" + "homepage": "g)e囵bhAmc(\u001d󷀫󗬙}G\u0016?3\u001e=󡢉𯰰-w򾧂\\X ]&󔶆\u0013󫬽$󸺓\u0004񏭽򝗡+\u001d", + "name": "􀮸1s\u0010iP𧰑򯀥)ko\"󏫏*\u001f󭍢ꑶ\u001a-񠶮\\.6\u0001󬻞X􂒭h\u0008e𕮵\u0006\u0011\u0011!T5恍s=PW\u001f)J", + "ticker": "s\u000f󉎅y\u0014", + "description": "\u00164%𸃷񒞠mcI\u0013\u0017󼫬\r򫎾<\u0011HW-g3{⧔S0𔓩\u0004W'\n󪰀\u0017\u000b\u001aw]&P\u0013󏊟\u0016󣢎5F\r񵠙𢊉3E\u000fm\r򸷚\u0011)q🚖7U7>򛿽0\u0008|򘅼񢎞yj!􄤰B򝓽󒮋\u0016@񸥇L\u0019𮏍yS~󩀡󟓞0\"_󽐃\\D\u001d񗮳6𾙛-󯓲񊇷I􆸏{?Y/Wkd\u000fhh4\u001b𹫚`b,E&'+Q\u0006y|i󂍔/yI񐆪򖐍fp􎥼𼚦q \u001da􂗫&\u0013o\u0016+\u000f\r\u0013&:\u000b<𳋚n}5\u000fi񙜦5VT󝞰)R𕫺󏜉\u001eI,\u0010\u0015y\u0011ys􊍝[q!x󠇺\u0008&1󉔔\u0001a󉽄󘤩Vk\u0003𧡠\u0003򮏫\u0005\u000e\u0004)0$dn񠆖dn%q\u000cDC򯯀\u0005U񢙗\u0017hM\u0015𸈩-G򵺄\u0005\u001b\u0012\u0007" }, - "id": "pool16e5fs927cms54tpdmklqqcvg8cy7jqu5hvjcpp52tn6vyhup949" + "id": "pool1yqghh30k9urpws3yv0v9z340rgjew46guslxajqsrcgxgvg8mjw" }, { "metrics": { - "saturation": 4.06577063978342, + "saturation": 4.526102753897766, "non_myopic_member_rewards": { - "quantity": 630400707373, + "quantity": 19413222424, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21171571, + "quantity": 217159, "unit": "block" }, "relative_stake": { - "quantity": 19.58, + "quantity": 48.48, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1879-07-04T23:56:27.811518674567Z", - "epoch_number": 1964 - }, "cost": { - "quantity": 185, + "quantity": 149, "unit": "lovelace" }, "margin": { - "quantity": 17.91, + "quantity": 75.81, "unit": "percent" }, "pledge": { - "quantity": 152, + "quantity": 13, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "2L]1򕡣󸙓P(|\u0018\u0003\u0000!🇒\u001b󭇄eP񿼔2\u0015\"j:", - "name": "\r+w\u0006", - "ticker": "懲+񏡤", - "delisted": false, - "description": "@󉝟\u0000񓢡󗎏< zk򝀎-f7󉴏++uj&\u0006\u0003-GAlx򊞛\u0001]S'y򉻈?rC\u000c)򤠵XT" + "homepage": "G𜅝\u000e򅦕\r|fBW񝢑򰪆a񎔨\u001a\n󜈒\u0015$z:\u001c󹍲󡙗j\u001a󚟠󦫶1󒄟\u0012C5\u0019mG\u000c񹻵/䕈+\u0015A𤊁D񕅫\u000c0w(򼖊󠜫h8񁭬kAM\u0013X[\u001eω\u0017pSM𘕴򝊞w񠔦+3\r󖌃𪣃\u001aᘁ1SF=򡣔)󆇚􅒽SM{\u00013" }, - "id": "pool1x5mp5jn29zdtsjhuq4wfcuf9glrx0ejg4rqfv3lwz4ntu6qyr9m" + "id": "pool1u9xkml0j0muu9spncdu5vah33esxrnn4vwmde947lxz7u9a9v8d" }, { "metrics": { - "saturation": 5.176619043666619e-2, + "saturation": 2.6194668943015302, "non_myopic_member_rewards": { - "quantity": 940330897384, + "quantity": 881809442754, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18663329, + "quantity": 13137527, "unit": "block" }, "relative_stake": { - "quantity": 1.65, + "quantity": 96.17, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1882-08-01T07:01:52Z", - "epoch_number": 26722 + "epoch_start_time": "1876-06-25T05:57:22Z", + "epoch_number": 20841 }, "cost": { - "quantity": 179, + "quantity": 229, "unit": "lovelace" }, "margin": { - "quantity": 35.59, + "quantity": 49.83, "unit": "percent" }, "pledge": { - "quantity": 70, + "quantity": 201, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u0001󕗚\u0000RZt%\u000ft\u0010Y񹺘l񛹽8,`6􀃛9\u0008E7o5𲑒64\u0013\u0016TMh|g󴰬\u001bfD򓧀񃙬EqC񊷩􆛴", - "name": "O9d\u0014Gm\"𞞲\r\u0000)0w\t>Jp򄿌2VH\tU𷂳-\u0014)򹕩\tG", - "ticker": "\u0018deV", - "delisted": false, - "description": "L*\u000c[\u00030񒿸?\u001f/m|1\u0001򔅏-򾁸\u001ba򆝄(`\u0011I{󡏋f8i?)𤺇]X񍞩{C\u0012􎕫񵘎\u0010%G𡛨q󥍻􁴇}\u0004>򱧄)6򧂈򎂬󏂌s\\!ꕫam􏌈P\u000fo{\u001fCr*ZL󽜻󿓍V񳍋=\u0000񬶤W\u001e\u001e󜱑LW򏝖򜄆񽄀򃤦>\u0008򐪽|\u001c)󢥘7QF􏾔#f󩖥w*Bz>𘗌񐌎I\"𝻈􍷊񤬄@\u0006\u0016\u0013𽞦\u0011h[j]?)\u0008\u000f${\r\u0001\u0016󸠗XM..\u0005S\u0019%\u0012\u001ar9\u0005\t𨹌񑩽.4N,󟁍񱸔7^" + "homepage": "\n\u0017&󕝴<5\u001c窹\u0007fh#󎢑𐧤\u001f?6򊽉z`4\u0015z`", + "name": "񞤬񾫚󕠘X6\u001c\u0008dh\u001b)\"f𹰭򚦹򶬌Il\u0018z򐯮5`U򆉄1RF~|匹>⺭x", + "ticker": "󮜿y\u0000U" }, - "id": "pool1cap526pl6dq4ljgh28c90k0a55myh4t6ygpufvrkr3zlxdj5946" + "id": "pool193fk0squudpxcxuw6ejjfwd3lm85w2055xhznm4wqxgccd6zwa3" }, { "metrics": { - "saturation": 4.0252231481378224, + "saturation": 3.831144679354266, "non_myopic_member_rewards": { - "quantity": 714373213455, + "quantity": 314143121220, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17554996, + "quantity": 15578208, "unit": "block" }, "relative_stake": { - "quantity": 25.69, + "quantity": 28.83, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1882-11-04T10:00:00Z", + "epoch_number": 13102 + }, "cost": { - "quantity": 68, + "quantity": 173, "unit": "lovelace" }, "margin": { - "quantity": 6.17, + "quantity": 63.1, "unit": "percent" }, "pledge": { - "quantity": 238, + "quantity": 112, "unit": "lovelace" }, - "id": "pool12tf3xfqaq06ny7rg4qh887cw9a5jynk30atvdu7mdx2dgc4mw8e" - } - ], - "last_gc": "1891-06-23T21:00:00Z" - }, - { - "pools": [ + "delisted": true, + "metadata": { + "homepage": "07\u0013fS|\u0000t󆢺o𬸕3U\u0011cM\u001c#\u0001C򇮢+󿓝gB<\u0016Z󐶈@kFSq񊯲SG󆽩4򼎴\u000e򵑱C\u0013PF9?\u0016y򘺍U򂇑@M񀿯󳔶tY*\u0013]4󌧔(=񀺨𺥣l*񌨫G򚦎𨒃􍦶n\u0012h\u001e􇺑s", + "name": "~򛜴l->S4\n7>U\u0005kA&󞎼񾚟H$nBh\\񦚛p)񊗇]\u0014\"a#\u0005Eq򁚬\\MXL񗇶SX\u001c\u0015\\켌", + "ticker": "V9]gB", + "description": "􆡳)U􅺊4O򪊘)1MX🖷񦣴򨜴[e𤫺󐺐\u0000\u0018𣿢$E𢵑a嫛tr𖚣<\u0016\u001fB@+d򲲿\u0014􃝣p\u0015\u0002𱂪3?H\u001e򷠎X\u001c󥇘;\t\u0012y\u0012U\u001b񗔚dt\u000bR𿨿^O󤸢A/D\u0016񝬅b񄜬\u0010]5󌔗󇚁\u000b𥩑cE\u001czS\u0006񫍢\t[\u0006?򦃸򳆭\u000f=AP񰟞񧦥/񁾺'񥱴G􇘙$\u0000SHB=󦲑&/O𺜉 􈘹H򦀼𑟒\u00129񌎒|𖶲\u001c>􃴭H$y2p@󓀜􏷑`𐖠񢴃w\u0018񬿟𼦛2𓥶1{}\u000398𢓼h\u0013]0^@􎉿\u001b-򷕞k r\u0002~a\u001f󪦕򅿲񣖄p+ 򪪽VM񟬞r򻑍𖌣a\u001cm\u0014)w\u001d+\u00134񜎼" + }, + "id": "pool1xfp6mzrpvcg0cc7j62hq3nzpdnqkadeg7hg7u3ssazlfcuaq5lq" + }, { "metrics": { - "saturation": 3.726728642672161, + "saturation": 3.2016694727708654, "non_myopic_member_rewards": { - "quantity": 172861612247, + "quantity": 114718424718, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22161224, + "quantity": 18400483, "unit": "block" }, "relative_stake": { - "quantity": 47.3, + "quantity": 6.04, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1902-11-20T12:00:00Z", + "epoch_number": 3318 + }, "cost": { - "quantity": 240, + "quantity": 52, "unit": "lovelace" }, "margin": { - "quantity": 29.76, + "quantity": 18.4, "unit": "percent" }, "pledge": { - "quantity": 191, + "quantity": 148, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "6󪓇.2ZN\u0017\n{񷻾\u0007\u0006󿴾\u0000|󁩀\r(󥰵󛉹n?bg\u001c6\u0010?V", - "name": "PEs𨵘%9\u0017𔺍 ", - "ticker": "^󭐐\u0004F", - "delisted": false, - "description": "򯞎'w󄚰\r𤹊|C\\\t\u0007?la(3)0󢪂R\"CkQ󿔝.񄇄b񻸽\\𙔠\u001d\u0014}dLU򰧴𕰜XE\u0001{\"{B𩛹󊲣i򋞇}񌜴\u001a9Brw򯄤򗀴\u0008𜫽!2f򆬴\"v2CEF1g-^b\u000f󢰚^5#H\u0004r\u001d#[jU\r񱵷pGld\u0000𸖷\u0014M*\u001aBB\u0005񴁺\u0000R{\u0019_\u0004\u0002\u0003/򰮥/\u0006IUp\u001cM\u000fsl]a󿎦苠&\u0007Z𹊺\u0004F򗴼\u001b$\u00145oz񹗝\u0001\u0016񣠶b~W󲈷\u0004Y\u0017@9f􁎉󈔼v&v𫡜񨛾}󠾂񘜽w/\u0006\u0019閮\u0000ogph𮟱\u001dQ󙲒x󪹑`𺖴8d" + "homepage": ",suD\u000c\u000f񽰃A\u0000\u000e-\u001c/><𦣛Lb#X\u001a\"\u0000;d!:=񇅝i坟\u0017\"\rM\u000ex[\"򰫺 n\u001f\u0014𦐇󡭨rU=b1\u0018噄񇯽}󐬑򷆵l򻜊\u0006", + "name": "\u0015\u0006_񚊂O7񽖳󥞙𯴽g򭃹'򩍶5dO\u0016􆺍W-򫽴󠙉J󈿗𢡧J򢺭񰪰]𿥆u&􁼜F𵋺sJI\u001e\u0004urp%", + "ticker": "􍣢r\t򚤂Q" }, - "id": "pool1wcgu7y8gsgfj3m9akq8gpw2pd4zlx9s2xnessscur4rkj6upaal" + "id": "pool13cpgn4vw8ych5m3md5fmvnt9sp4mqf9nx9wnvt0559z3jctmjmj" }, { "metrics": { - "saturation": 3.273579584412874, + "saturation": 2.4230443610464762, "non_myopic_member_rewards": { - "quantity": 238077192544, + "quantity": 434770390464, "unit": "lovelace" }, "produced_blocks": { - "quantity": 142014, + "quantity": 16828568, "unit": "block" }, "relative_stake": { - "quantity": 84.12, + "quantity": 19.64, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1886-03-19T01:18:24Z", - "epoch_number": 13037 + "epoch_start_time": "1895-03-05T21:31:24.753913459822Z", + "epoch_number": 22064 }, "cost": { - "quantity": 87, + "quantity": 105, "unit": "lovelace" }, "margin": { - "quantity": 31.23, + "quantity": 38.7, "unit": "percent" }, "pledge": { - "quantity": 40, + "quantity": 153, "unit": "lovelace" }, - "metadata": { - "homepage": "\"􍛏񖚲\u001ef+K\u0013򵰣\u000e\u0005𜮢\u0005?h70Q\u0017󧞪yHM\u000c6gBS񸄊~󺦚)O\rF󓮣\u0001杬\u0014=EK KJ\u0002\u0018\u0003:󤁐򂰢YR`j'岦2<)򃧽~gi󕥭\t5!THN񬓙eo\u0002喛1\u0019|UHN :򞅱/Y3/s)<𑶣\u001e򍂮W.<0v\\\\ᛎ򎌛\u0011󆩴*\u000b𡀯\u00134C󟣜\n񁿏WQ\u0010A\u0005N\u001d򨉜\"X񭑮p|y$I󭺗sOnE\u0017_⹦􍱲{ℕ(\u0006V󕉷D򗐶T" - }, - "id": "pool139uujdzy9y5wwawz5z5u743mzvxrtfn5trcvdzfdaugtuc5y5qs" + "delisted": false, + "id": "pool1zg69ugurtghfxdgr9ch80kd70cv8f205c2qqmge4lzwzc9qgvcr" }, { "metrics": { - "saturation": 4.849699749747879, + "saturation": 3.261209738324153, "non_myopic_member_rewards": { - "quantity": 745234401190, + "quantity": 861541967823, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17290969, + "quantity": 11205056, "unit": "block" }, "relative_stake": { - "quantity": 91.66, + "quantity": 56.52, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1869-01-08T02:25:16.715886366549Z", - "epoch_number": 18784 + "epoch_start_time": "1869-01-05T15:49:57Z", + "epoch_number": 11705 }, "cost": { - "quantity": 173, + "quantity": 93, "unit": "lovelace" }, "margin": { - "quantity": 60.29, + "quantity": 53.53, "unit": "percent" }, "pledge": { - "quantity": 78, + "quantity": 164, "unit": "lovelace" }, - "id": "pool1veq93y9h4549u9tuehfs6ur8zkmcxhe9cfpqdxxxvuek2lv9g0n" + "delisted": false, + "metadata": { + "homepage": "P0\u0000\u0015󃙜KD1\u001e\u0001򥁄&r\u0010I\u000fOJ\u001e\u0019 v󖸖/[󻵺nS󪠆8W)p񑑘", + "name": "Wp򤏍<򖂌,(\u000fX󡁘 %E:\u0015:;\u0000𝛒𠟵=񤣯\u000b𽩃񀒨]🨇񒞏?\u0019x񂂮Z殺%p񙃛", + "ticker": "\u001bN􊹅𔩮\u0004", + "description": "AS\n,\n4J\u001a0\u001fS\\51񙙰󆽝2@T&N+Tq 񢰅.@V_t\u000eCa\u0010\u0007贸VV!柶6򂚜kS팣\u001f񢉅\u001e򸎕\u000fUg񴐘򵄳𝗌𝅥FF#7!񯬉\u000e|p\u0017n\u0002S\u000fJ1\u001c\u0007쯡)t\u001cNW\u0013C񟃓􉛋􆩫k\u0011V踣-6񂗪_O!񔤁Y(\u0004.񘘤𸌓𿍚=󸔷/,~󉊋I?aE77񖝫rj\u0005\u0011W򠋟%c񦩁\u0015,\u0004\u0004𡩃\u0012a麼xl򔔬񗊺򍂍?9\u0005~\u001f\u000c귟𝻃?Z\u001dE򩹣2u\u0003oN[\u0014rRt0򒘄#p*:7􅋯*򬇨𬫓󟨂c#d*\u001d3p7QLZ$񇀜3I1#󋠣򄖶\u0004e񫙤󁴪s\t񍌵𢣧𝑪e[󸁥9SYl>KY+{\u001am=\u0011" + }, + "id": "pool1yukznaqy39vkwyq07hj9sfxs0cf7k699wksh7c494pdvz3t8lha" }, { "metrics": { - "saturation": 2.138766389968155, + "saturation": 2.0165062161009373, "non_myopic_member_rewards": { - "quantity": 251220798556, + "quantity": 391620560869, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15855846, + "quantity": 11411767, "unit": "block" }, "relative_stake": { - "quantity": 24.28, + "quantity": 24.02, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1870-06-24T08:03:39Z", - "epoch_number": 12633 + "epoch_start_time": "1901-09-04T15:13:46Z", + "epoch_number": 5007 }, "cost": { - "quantity": 39, + "quantity": 123, "unit": "lovelace" }, "margin": { - "quantity": 42.01, + "quantity": 39.47, "unit": "percent" }, "pledge": { - "quantity": 207, + "quantity": 78, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "J򃞯4\u001f?\u0014\u000efᓠP7,𖹰񁑃N9񮉝\u000e\u0005%", - "name": "􀎿0q\u0019񨖃>񺈊^쑫%󦫓WNaW񸸳q\u0001󯄊p󘷀l>rI򜕪\u0018=x", - "ticker": "򁼷\u001dm", - "delisted": false, - "description": "#&^\u0000o󝨯.K%[(񇘄K􇞂l\u001b\u0010Q\u001e\u001fC< 24Q\u0004Wa&>(󕿪\u0006yl񧁠2" + "homepage": "𪹃]3|.lCA𐥌񖰑4o󈋀06񱟼񬍹xpBs򛄗lf򓑥\u0017\u0017􆭽𐞎𳦸\u001b?\u001bQ*죶Y\u0015<\u001d廿򷠓NG񅎞*\u000b\u000b𘪥a\rX񶇝Ma񫄆$2񉕝+񜨎L󫗱򔼾\u000b3\u000eh?\u001f󧕌\\/T*{q^Tv񾎽q&\u0003`k򃈻\u0002򍹂F{}7Q\u0003]Q", + "name": "Dqh\"a\u0019\u0012J􃖂F񻮈򂯌򝎰}BV򡱨Y8򀨛u;0C󰝞\t񢠪I𜌑󑐾w \u0017\n󺹔i", + "name": "G򐕒u\u001fy", + "ticker": "%5\u0008", + "description": "yj𯁵g\u0012󡐴uN𨙳DQ`􄀙\u0012NA\u00072󗨔XJ:\u001c\u000b񗻨K\u0017\u001eb5I\r`\u001b(O_KU\u0015\u000b򜫿򂞍S\u0018\u0019\u0014Y_񈹾Y[\u0002:򻬰]6&V񊛈6\u0019\u0001\u0015'\u001e\u001c񌱕L󴙜t\u0015cpe񵳹!a\u001be:𵣚򨮞򒠺J\u000c^&F늵򱄷񠖔𿷇󣋿𮀥 򟵋9󧁁󮅀\r\n𝔻\u000cF6򌆥w\u0007p ',P)N\u0004\u0014g]7L:Y&񞃙񈓻Q7񦊹[\u0001ae@Uwh󧭯󮁪󼴉\\Rs}\"\u0013򶇯򁻅𙘍+􈝜?~\u001au\u001fm#󿉇\u000c6fc󃏫_\u0000A󲑲3\u0017^%\u0015Yl.򌪚c\u0015]𻒣􍜁" }, - "id": "pool1d8hmerxgv0yyfjcl3hcckkszyl49hzzvvmu3wgvj7zh2jr88qhm" + "id": "pool1djtd83yujntw95vfy9rttzlhp2xw3x82hnpnxktqgqfdjrkvn4u" }, { "metrics": { - "saturation": 1.6617182954452732, + "saturation": 1.065588856205855, "non_myopic_member_rewards": { - "quantity": 596916473460, + "quantity": 144808334257, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6906138, + "quantity": 20095353, "unit": "block" }, "relative_stake": { - "quantity": 32.09, + "quantity": 37.14, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1885-10-26T00:23:23.907200466287Z", - "epoch_number": 4240 + "epoch_start_time": "1899-11-25T10:38:26Z", + "epoch_number": 32621 }, "cost": { - "quantity": 108, + "quantity": 73, "unit": "lovelace" }, "margin": { - "quantity": 62.74, + "quantity": 43.93, "unit": "percent" }, "pledge": { - "quantity": 239, + "quantity": 84, "unit": "lovelace" }, - "metadata": { - "homepage": "򒗅w\u000b􈏓񿼨Lv\r󎸮H`_7\u0019n񸺌\u001d𦳨񽕭i\u000c\u0003𦿵񰘻/Xy9\u0013$:5d\u001b%s\u0019XHJY𤩓g\u0007}3弬", - "name": "򶮾\r\u000f6D򄩘\u0013􋓟U\u000b󘲙󶴵V[&L~(󲴸񐨕\u0014ⓒe򻹮\u0007chU\u0018𬪶\u001bjS\u0000YO^<3Q\u0004.FS\u000f񢆭󹾝,\u001bd\u0001B󡬵1z\u0012𼿐\n7" - }, - "id": "pool1u9jpf8t8sys0cmcltscpsvcyxluv3hv74wyg0uurmkhsuv0t6zl" + "delisted": false, + "id": "pool13fehrxgzl70jm0hz2zpuuhpvhl38gl0dnz7uy74cqk5nynyuneq" }, { "metrics": { - "saturation": 2.9298916942746485, + "saturation": 0.2414973537504428, "non_myopic_member_rewards": { - "quantity": 171785894848, + "quantity": 552045225830, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22275742, + "quantity": 392212, "unit": "block" }, "relative_stake": { - "quantity": 81.32, + "quantity": 88.89, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1903-05-16T06:07:45Z", - "epoch_number": 29298 - }, "cost": { - "quantity": 3, + "quantity": 239, "unit": "lovelace" }, "margin": { - "quantity": 38.44, + "quantity": 72.74, "unit": "percent" }, "pledge": { - "quantity": 198, + "quantity": 180, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": ">鹫򇎐\u000c\u0010𖼖h񒅜\\bO\u000e\\*\u001a\u0012󔭫7\u0006\u001fd\u001ev5􈦷7A\u001d򿛘N~m)O񀎀\u0010\u001aL\u0018x󷠺񖣓R(Y󗴋\u000fT󋫧󂉀iA3A󲭏ZD񼄵󌼘", - "name": "4𒄭`", - "ticker": "􅈵J􃽞K.", - "delisted": false, - "description": "~0򧅩\np\u000c\u0017\u0013& \u0008\u0012}\u0017s\u0000[N\u001a-\u0006|\u0015\u001d񏱣\u001d󓏏\u001c8\u0015h>򧿊򥔗!P2\u0008P\u000c9\u0003 􍀦~񜥆f%y󳝡I򊦹 {񥳞\u0016r􀈟\\\u0006I꽢򪋤)1O񛜃񖛑\u0002򢡮򇱉=0𢨨/\u0010>𾛏𾫤n[l\u001f𶓗\u0006𧬜􅧈𸊑Dn{!󆒖\u0010\u0005`\u0005󾀒𲂃n𹨡[\u0011񾭢\u0006=x?󩄫\u001aQ;󌉕K񧟥j񢮩񈉑V$\u0012\u0007\u0018a\u0017AOVCF󡦫o񝯴𴼄\u0011􏄸\u0015]\u001eU=X=\t\u0011-󡪇\u001f𛥐󇈃A67\u0002\u001emp 5񬏥\u00048$􌐏Y|񯗑'񢈓?4\u0000 c𚱟y\u0011?L󶍼" + "homepage": "2𚴊S󩅎hW񖯗𸂶3󠈫-\u001f\u0016I񦅓\u0012 \u0002\u0003R\u00071${w)9 󲉊:厪$\u0004~\u0011R󶖾h󠜏G^T⡏G򺨟NVtxc0\u0011\u000btaIk]>\u0015c񓔅񢲣;F\u0005(I\u0001j󅎣", + "name": "f􉢰@Q𹧡(P", + "ticker": "\u0014񅪬^򬌞񛵜", + "description": "\u001fJ\u000e\u00189P\\bD%$_􃥆X?1\u0011\u001f󖐼\\򎮭bA򲛛\u0016񃨌󋶮[\u0001ㅾC󥱐I񦖿u\u0016񛘢\u0014\u0002\u0005Lj󬆧J\u0010\u0005\u0008'*#󹘗)򨢚md@\u0019=󱸲8CXu!m\u000c.]\u0016Ho 򢇩\rz^󭋌)a \u0000􂼸m'\n𗴪wO\u00034󢟋\u0003🐎J\u0001.}`\u0017\u0008O\u0012h!+z\u000e\u000e򆱛򇱖?Px\u0019V򭼏}4A6P\u0010\u0004>\u001a\u0005:񬽟\u0012>1𷢕XD\u000b\u0014\\{N\u0004\u000e^,󽡾\u0013Y\u0012񢑊򼦤.+o\u0013l_\u0015\u0012x6\u0000򥑒򖭰\u00148򗷮\"\u0004$n|\u000c򲁱󛨷Z򩐀p\u0010򋘥" }, - "id": "pool1as7l9gdshmrq2pva7hfynd0f79ue5jzmjf6jzwqrjcf5xuuesgz" + "id": "pool15uyuv8v7g554shsk7sl9p2fsz6ngdnufjq9lxn8c8fr3snfls9p" }, { "metrics": { - "saturation": 4.960019812177834, + "saturation": 4.071892955897031, "non_myopic_member_rewards": { - "quantity": 923306256389, + "quantity": 433326710365, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9880895, + "quantity": 22248014, "unit": "block" }, "relative_stake": { - "quantity": 0.21, + "quantity": 21.37, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1904-06-28T18:15:38Z", - "epoch_number": 19218 - }, "cost": { - "quantity": 237, + "quantity": 38, "unit": "lovelace" }, "margin": { - "quantity": 13.24, + "quantity": 9.17, "unit": "percent" }, "pledge": { - "quantity": 38, + "quantity": 248, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "🼫򻨽𵞐'^\u001d6\u000f\u0019񖿎(󿭋0GUb󛏅镚\u0005l\u0000h\u0019,\t򵼣򏫠\u0016^󡃱򏧸1𼎰\u00120򌵷񟜗\u0019+gA$b\"\u0019x\u0004\u000eb񄀽r\u0005򩡷:O\u0017󷩫F(Y~󯘖\\W񹟎󮥹;z\u0004K岓(6>4$򻱳󥀋\u0011򾯩m#\u001aG򭅈􉥡F\u0013l񧏢,\u000e", - "name": "򤖋_\u0008򯓣񌷽6G󕄆]񪁏m𞸘󿉏q󌚡0Q򠑧/\u0001Ꮆfv\"{F;}\u0001", - "ticker": "-󢣥\u001ao", - "delisted": false, - "description": "=𩘊T󉶐\"󐛦򀷬\u001e𧈝񩅛x󍪺\u001b𡟡|񌔗Wk\u0017lDc[+;󐡝?񁰓򆯲󘢼򎮲\u0018lC𕹜pCFujC:R&󓴈)\u0017z񩩅8@}񩶥\u001a򣷘Tg1U񠻒@`񃪃\u0019S^\u000c\u0006P]\u001c{K=𘪓D<\u0019@\u0014\u00018\u0003\u0011%r\u0003񼠧T\nm\u0011#\\V>Z8k󳞓(񯟬򤻵(6𒿲\u0018%\u0007\u001fzT2򺫦\u0001\u0002M\u0018H򳣵XZ񹚡靾W5R\u0008H񶍫\"s^FgP󘧬򄣵򄀃\u000f񂈨󁯜\u0019󘙃8ඬ󷽚\u001b\u0014<6qX󃴡󪐎#򱙜𫅈Os\u0002󴝆𜁞a򈙳\u001c򧾖vDu\u0016h󌛭}u\u001dP*Y=򻄙󻘭󅔲NdJZ𩣗UEeij^񒺗u\u0004@\u0006􃦮8\u0016#.󥺧H`F򶮳򕪹k󰇗\u00070L򡷃5$PN\\0򠡧𥪔^" + "homepage": "4𱇪v㢋A", + "name": "nLnH񣎒\u0013U\u001a𬸢t񅿕))+󉷨򂾼𭗳\u000eP\u0007\u0007@J󳟕򶮘􈷌򈨭𦟵Y:Nc\u0005\u0017>\u0003R5\u001c񋦨󼑣fK\u0014T򒩕E9񍬢i\u0002\u0000+N(\u001d:𣔘qW𺶻\u0006\u001f:񘖶\tt]E\u0012𸡆\u000c\u001e\u0006j\u00194\u0010EQ򝛵{{򇦰A\u000b񾠜\u0003򖂇TT󦍙焁hU`𣛃CB󓌍\u0015\u000b\u0006𝻷etB\u0003񥱶w/𻠞w}2_[\rT\u0001𕿟Pp<򀅲\u0006ꌗ𘧃" }, - "id": "pool1ue4uhdg7sne3vjd6vxvjp4v09y993kcmfujyv3hdk56kzsav3ea" - } - ], - "last_gc": "1907-04-06T06:46:39.62955430318Z" - }, - { - "pools": [ + "id": "pool1h39cjpnj4shgf7hc8q7h286njc4lyyqm87n766d3mfgvx2pp970" + }, { "metrics": { - "saturation": 0.21170493503846866, + "saturation": 0.5469269934670151, "non_myopic_member_rewards": { - "quantity": 483009317390, + "quantity": 245966959377, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5806, + "quantity": 12920570, "unit": "block" }, "relative_stake": { - "quantity": 0.12, + "quantity": 78.97, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1859-03-21T01:00:00Z", - "epoch_number": 15606 + "epoch_start_time": "1867-04-27T06:00:00Z", + "epoch_number": 15640 }, "cost": { - "quantity": 243, + "quantity": 128, "unit": "lovelace" }, "margin": { - "quantity": 34.36, + "quantity": 30.91, "unit": "percent" }, "pledge": { - "quantity": 41, + "quantity": 165, "unit": "lovelace" }, - "id": "pool1pcqtw5yctaqtwgeqlp6wj0pfn2znzy4mx0kayzuj0xjj7u22kt6" + "delisted": true, + "metadata": { + "homepage": "mN򯼷/qp񮉞\u000b闀m򍄭}񽂩򛳆N!:򌃆򺾓\u001a𗝇\u0000󳯲b񧹊V\u0007C\u0017񞳪U󁝃\u0003󌊶,S\u0003\t(|{\u000fZidK@[$򘷤,i󹮍󹕝\u0000Lz?$7\u001b󗾑?󵂩Fy\u0008𞀧󛺼!\u000fj􂅖]n$󬭐\u0012|Zc9\u001bB+󢈌򰍖g", + "name": "lq\u0006P8K񕯫\u000e򟻹𽳂\u00102d\u0014\u0019*􍔍𸖨\"/H\u0019e", + "ticker": "\rs08", + "description": "a=n33$R8\u0007\u001f\u0017𞿝Cy򖆂􀍁񣕠`򒻅(B$ZuC;nT\u001fW0\u000c􆼫k񟜣񊟊}GqC% \rp󔈇򊦑\u001e2bE􄈏𮆸\u0016`򯧗#\u0012h\u0012\u0007󊬠\u0001t\u000b9,D2V\r)򭒑O?7c)x,^n\u0005\u0003.򵓆𡛯㠶\u0000,3j󷥕hZ􅵝bi򢩐1\u000c򒪸H򱑍𢁺N\"{Y󵎽`𒅱@`[.+.\u0010󕅶򢍸򲿭򴥍򈘾\u0006;󬰟󦘱q" + }, + "id": "pool1hsklx2nuv0gu5s5cwxefvjhyrwcka7shzqhn8dncylp67us39yu" }, { "metrics": { - "saturation": 4.053647938608113, + "saturation": 3.358955465294292, "non_myopic_member_rewards": { - "quantity": 38403517584, + "quantity": 38633120855, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5949770, + "quantity": 4349848, "unit": "block" }, "relative_stake": { - "quantity": 93.8, + "quantity": 13.77, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1899-04-14T11:44:36Z", - "epoch_number": 23573 + "epoch_start_time": "1894-09-15T05:22:37Z", + "epoch_number": 20757 }, "cost": { - "quantity": 250, + "quantity": 255, "unit": "lovelace" }, "margin": { - "quantity": 60.12, + "quantity": 67.39, "unit": "percent" }, "pledge": { - "quantity": 114, + "quantity": 14, "unit": "lovelace" }, - "metadata": { - "homepage": "\t\u0004Q!t򨧁񀃆\u0003W\u001e@.D`\u0008񱫯,񜋓6y\u0000+\u001a򈧋b񤶃@\u001a\u0004LCh񟂍=Nlr6fY𞞊󁗓#󁩬]𭤣𪅟%𽰭[~\u0019p\n\u001e\u0006&Y󌆗{𿨖Y𭫦H+nrk\u000b\u000ewi\u000c\u0015\u0004񜨆:򨱬\u001f", - "name": "Mm%𽷡𼣍\u001d\u0006kHH\u0006\u0002", - "ticker": "1R[\u0001b", - "delisted": false, - "description": "\u001a1\u001f#\u000e>\u001cG3i񻕬<\u001eD󺃯\n" + "homepage": "6\u0006񭮱?4\tD,󐡪񋓿5=l𹹭Y", + "name": "l򫍼\u0002", + "ticker": "+\u0013*", + "description": "m%Y򥬭\u0019G󨾃\n+򅈞f\t󻣡􏵮㖃\u0019񞌘6򵘋\r󬩭5\u0016\u0012%\u001eG||󶩡喜m\u0006\u0008P򙚴X\u0010\\򇮪g񫔖Yt\u0010X\u0019(t񼐆DYpyb4Mz|\u0007v/𣢽\u000c\u0001", + "name": "eC󰄏O%M,\u0010_", + "ticker": "lr厮" + }, + "id": "pool1tc7u3vsssvrhjzasu7yvvak0hcuajg36kkk9xexkz6fhjkvwvkz" }, { "metrics": { - "saturation": 1.395980152312779, + "saturation": 4.061951905649638, "non_myopic_member_rewards": { - "quantity": 267691797963, + "quantity": 710467428712, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6907308, + "quantity": 10320776, "unit": "block" }, "relative_stake": { - "quantity": 91.34, + "quantity": 56.8, "unit": "percent" } }, "cost": { - "quantity": 194, + "quantity": 189, "unit": "lovelace" }, "margin": { - "quantity": 85.64, + "quantity": 77.59, "unit": "percent" }, "pledge": { - "quantity": 18, + "quantity": 55, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "wXP𹀜\u00140PJ򂀏^.򷪜󃺒\u0011u\n~\\;{󶻫󉁼^𘵖&\u001dU𢙏Q췛/C񰮮/\u0005񓵕cQs\u0003\u001b\u0016t\u00196]-󽵼PV𾤉N \u000c򆒋򙓙n񵸓+\u0008WL񒡄^&𻭍9A\u000f\u000f", - "name": "􂋲$󊤱wM+U𛮖\u0002\u00080e󀛫uJ񗉕󈷢/\"\u000b@\u0007{", - "ticker": "\u0017g񟀸", - "delisted": false, - "description": "}􏄅d\"&OR*>A}񝦓Epk}V@5񌱸I蓑\u0012\u000f񎼬LP򄸵򃮬p\u000f,kM񿇮\u000c󳗜F\u001a񱅍W5󈞅\u0014H򠏇򩜁v𳹑$󴉶U𢼙񒡤 󤘛_I𲊰򺞂(󥫪@\n򷼴󑲋\u001b񙉙G򶛯]kGf'\u0014\u0019U@\u0007&򣳒򕿐C񶁡\u0001K\u0006\u0007򅉱\u001b'\u000f򃎬򎌚񯬹$󮟢񀘛\u000e~|&񐠈[򻇝<,󺄴\n?pC󵫿`$\u0013󮅽B򷙌򛬘)\u0016򐦢8M9\u0017\u001e򻻫OrH$򴈑\u0017%󺌠/d8D" + "homepage": "E򍮧\t-񿸨\u000fg", + "name": "!\r\u000b󼋗", + "ticker": "(񴝘}", + "description": "2V$:Q\u000eS!󹰆{N\u0001^󼓐󲀰)ꞽ򱲳K𨸈{򕜜\u0016h\u001b\u0007-&4􎽚_\u0008q\u001cF\u000f=󕅜LXi\u0014%q*Xa\u000bQH񩬹S\u0013\u0015\\󹯑sz<0󝿟\u0015 \u000b񶄬\u001b-c򮍕i\u0006\u0008.SN7lC򇬽y\u001a/\u0019񇦶 wwN>!􀆜򰶑\u000c7񇛋5򂖧\u0005[b\u0008(fW񷳜_^񓖚\u0002𩹸񵧸B}\u0018\te𩾞~\rNpEe򧦢.k\u001e5㾣H\u000c$\u0010𧹏\u0008\u000enx󪝑V2\u0008!,T񈅵g򧲪y\u0014񼬌i󲧂\u001a!'񠥳wV򋬟󭇂o*\u0014򻝘'j=4􍤷񳚘7lH\u001eNp򐆊HK8S$󺻐9H󮶀f\u0000\n𹩎H:[\u001e񴭿\u000b𡪎\u000e򝢽`c+G񅖨SDe򾼾R\u001d󁱞5H\u0005䞈Z1{" }, - "id": "pool1c4jl4c3xukljpg9sggwlvv3x094lccctuwjplw5vrkkmj7kup0d" + "id": "pool1r7v8t2h56az4uggdd5ffuy4v23l85t2dl5xmqgy6vl5kkhkhwfd" }, { "metrics": { - "saturation": 4.597911444564239, + "saturation": 2.4873174055298266, "non_myopic_member_rewards": { - "quantity": 110921098795, + "quantity": 715908491068, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12243490, + "quantity": 20666150, "unit": "block" }, "relative_stake": { - "quantity": 13.09, + "quantity": 20.96, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1864-10-23T12:09:36.323580673465Z", - "epoch_number": 4717 - }, "cost": { - "quantity": 78, + "quantity": 28, "unit": "lovelace" }, "margin": { - "quantity": 7.87, + "quantity": 9.21, "unit": "percent" }, "pledge": { - "quantity": 175, + "quantity": 210, "unit": "lovelace" }, - "id": "pool10g2ljrhm0al0mmjfqxq8xx2xyjlcdplmawwgvwh2p7f0jwwmh8z" + "delisted": true, + "id": "pool14d0xjj3a0zrwwwc2907sh3u5xeareu86e5d5hdnk3amju5wr64j" }, { "metrics": { - "saturation": 4.737961294458347, + "saturation": 3.2301804395805016, "non_myopic_member_rewards": { - "quantity": 263349192248, + "quantity": 289490565135, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10216459, + "quantity": 7417306, "unit": "block" }, "relative_stake": { - "quantity": 74.2, + "quantity": 13.24, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-06-07T23:20:35Z", - "epoch_number": 9039 + "epoch_start_time": "1866-11-05T00:00:00Z", + "epoch_number": 21107 }, "cost": { - "quantity": 35, + "quantity": 229, "unit": "lovelace" }, "margin": { - "quantity": 81.31, + "quantity": 36.44, "unit": "percent" }, "pledge": { - "quantity": 200, + "quantity": 159, "unit": "lovelace" }, - "metadata": { - "homepage": "򌞕\u0017>DOPwgBK񂈎򚡮>Pg햷x\u0010񸹣\u0004(\u0014󜭝󅡉򗛹,+\u000f񪢣|hm\"󠥉񸔘󛐑3hd", - "name": "ARo󆱗\u0017\u0010&n B󳇘򮝱\t%\u0003", - "ticker": "\u0011wa", - "delisted": false, - "description": "X*𘐗\"gRfh\u0006C\u0011i𶀮t\t$w󒏬e\u0004,\u0005򂽧񵜋񼏵𮕭1|\u0000\u001f󺓛8F\u0014CvbL7g/\r򋨎E񜦿q\u0008눖R-a\u0005\u0007񈜿\u0006" - }, - "id": "pool1ecg35s7c36s0mhk3t52w3ke9mxqvtp3u59u9z5gesyn7wqq8d3s" + "delisted": false, + "id": "pool1jvnucnlq25eqw682nd75p7m464qz5qath2n5tnadqd8t20m0cf0" }, { "metrics": { - "saturation": 0.4255153739903095, + "saturation": 4.662843819395282, "non_myopic_member_rewards": { - "quantity": 241451149013, + "quantity": 345643605962, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2007488, + "quantity": 13789406, "unit": "block" }, "relative_stake": { - "quantity": 28.06, + "quantity": 59.47, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1871-02-01T13:31:13Z", + "epoch_number": 3992 + }, "cost": { - "quantity": 97, + "quantity": 182, "unit": "lovelace" }, "margin": { - "quantity": 49.07, + "quantity": 30.79, "unit": "percent" }, "pledge": { - "quantity": 121, + "quantity": 110, "unit": "lovelace" }, - "id": "pool1m24k5wydjg2prfympd99n5mwmym3u7e3nnkzfe4ne3kwua860v6" + "delisted": true, + "id": "pool18ljvssjqdkllrrm336ft3dkdndnv7ldcja5qm75ceepvgllszfa" }, { "metrics": { - "saturation": 0.16557590572963576, + "saturation": 3.4509613956740615, "non_myopic_member_rewards": { - "quantity": 6117928114, + "quantity": 991903152711, "unit": "lovelace" }, "produced_blocks": { - "quantity": 320530, + "quantity": 22239562, "unit": "block" }, "relative_stake": { - "quantity": 63.87, + "quantity": 3.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1898-04-10T01:00:00Z", - "epoch_number": 6925 + "epoch_start_time": "1883-07-04T20:00:00Z", + "epoch_number": 12443 }, "cost": { - "quantity": 250, + "quantity": 36, "unit": "lovelace" }, "margin": { - "quantity": 4.54, + "quantity": 78.52, "unit": "percent" }, "pledge": { - "quantity": 104, + "quantity": 122, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "&:\u001c", - "name": "&򀘣j\u0010,-", - "ticker": "񺸾GL", - "delisted": false + "homepage": "0\u000e񵨨9Ub􎻶񑡣v!8񣷍~,󽫳$\u0003󡔴🈕o\u0018A{\u001e𾽵빴B셒^񦑸\u0004𱼻UI\u00008[𻷹\u001d[򵚻\u001d\u0012%󼏴D󰧏󻃺Fj02\u000f񇹤\r\u0012򐯰񧮡P\u001a_abXz-" }, - "id": "pool1fgqaguxvcku3rx5lc2xzjjphu4zqye4v3n6pad8t5xtfxqt2ve6" + "id": "pool1uhe3unqq6m854pzta5t8vj8z77czvw7dywc8et5dszluyuscprr" }, { "metrics": { - "saturation": 6.41856093865012e-2, + "saturation": 4.932592801287487, "non_myopic_member_rewards": { - "quantity": 948371021745, + "quantity": 817004495764, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21465554, + "quantity": 14364283, "unit": "block" }, "relative_stake": { - "quantity": 8.46, + "quantity": 74.7, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1880-07-17T21:52:49.409636090741Z", - "epoch_number": 8667 - }, "cost": { - "quantity": 247, + "quantity": 114, "unit": "lovelace" }, "margin": { - "quantity": 20.79, + "quantity": 54.59, "unit": "percent" }, "pledge": { - "quantity": 136, + "quantity": 148, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u001a\u001a𚰎7PpT\u0007\u0011񸠞\u0008󕻨mR{󦑵*\u000e󇧦\u0000&=\u0010%\u000c:_qf r[f\u000e\u001aY\r8G4B񼦶񡍄\u0008E3@PT\u0008jE\u0004\tA\u000c󐸖򚻤]zhh ^)zY#\u0000񜿁i", - "name": "\u001f𸎤i\u0007WCJ񪩋\u001a\u0002\u00032􇇅pY$ t", - "ticker": "񪾨)?", - "delisted": false, - "description": "󘌐9񮟉\u0003C_CH򿒸񠣑|\r򪈆I\u0002\u0018*L򛼿*\u0001񫱸U\u000f?-\u0001򲻜\"I3\u0007a\u0017󐭈z鷆󏉈\u0006u򹴫$o^3TJ𭿈pTW[7T5񕕭X\u001e(􈅈􉓤q)G\u0007Y󟲕|mfEBzet񗯽r\t5򦒌u{\u0013򇅞𠱫\u0002V\u001cxZ@w\u0019\u000c򌍔\u0016:[󪳷\\Z񮊞.􉁁pM󿷕#򜢟g\r򊮷b򹠚𛤽󜹤Y򻫹+򕷬\u0017𺦓􋋉u򅈓\u0010N񡕟\u0005񏁨$\u001e\u0004񡦥󤔨𔌟Uz򆽻o?-񸁭򖯗\u000cA\u0011t\u0011򞹊\u0001򝗇g\n]d󬐪@򋒦8\u0019:\u0015xX\u0018#\u0008SpY-\u0018\u00110R񏣓l\u0017󪨣󌔛\u0013򥃘򑖲\u000b\u001c󘀾򞺺\u0000;󬽜.k\u0010\u001f󥬶]򇢰Z]𾬓" }, - "id": "pool1x82976jws4a6342j6neu6u3y6t5echwla05yc67ql9q3ydds2an" + "id": "pool1xaq8qyyctl56qn6yrzqv9afghmh7ensklyvg5af664qtwk0z5u5" }, { "metrics": { - "saturation": 2.2562349570780915, + "saturation": 1.6373988001692363, "non_myopic_member_rewards": { - "quantity": 364426837618, + "quantity": 650296394507, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21806541, + "quantity": 812436, "unit": "block" }, "relative_stake": { - "quantity": 99.53, + "quantity": 7.44, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1908-08-02T16:23:41Z", - "epoch_number": 15943 + "epoch_start_time": "1879-11-03T18:39:23.159971680062Z", + "epoch_number": 1704 }, "cost": { - "quantity": 16, + "quantity": 27, "unit": "lovelace" }, "margin": { - "quantity": 10.22, + "quantity": 36.04, "unit": "percent" }, "pledge": { - "quantity": 83, + "quantity": 16, "unit": "lovelace" }, - "id": "pool16v3wvljhw7w49998zmpjs5d2j0x4lgl9c3ru4sfdyjmycenew6l" + "delisted": true, + "metadata": { + "homepage": "qY줏\u00027\u001aX}UU<\t#\u001dT\u0010M\u0007\\𰟣򗈧?􎦥^f\u001d𳻣񇎆#󎃻򳏟)qxV\u001d<-򘩸q󠻮U񴖥\n'M󩮏\u000bp񼉈'`\u000fg';񖌿>󔛬񥁱񧅖\u0019+𣺱\u000f㎛𯭘򬾌X\u001fE#yT#!=懄󃨤O𷕀񡽷l\\񪪢\u0012k򩺵:\u0006\\tb9B\rRaO򿞎s񢚏𕴌9󿞭(􊘢n󛖐zh\u001c2b􂳡'\u0016J򫆖]Q>𦍛F_[\u0007L\u0017\u001d񺂗Z>u\"M򫃭򘹣󤯢D𞥹󸧳3F;򔭄,\u0016>f򥴪%aꢪE𛋗􄽋񢿫􋊔U/-\u001c񚺆􄓹x|" }, - "id": "pool10q4xeyl5mwezlyhf35lt5kzm7j0z8q0208nj88jrp982gqu9tlz" + "id": "pool1qksngt8tchl56scdf8w4yugu3q8jy8t0exdpnkyl3z78xjkcz6v" }, { "metrics": { - "saturation": 4.847892348920561, + "saturation": 0.8178521233955544, "non_myopic_member_rewards": { - "quantity": 231296399494, + "quantity": 127880870663, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3327564, + "quantity": 9178575, "unit": "block" }, "relative_stake": { - "quantity": 7.19, + "quantity": 49.39, "unit": "percent" } }, "cost": { - "quantity": 69, + "quantity": 17, "unit": "lovelace" }, "margin": { - "quantity": 98.51, + "quantity": 16.09, "unit": "percent" }, "pledge": { - "quantity": 4, + "quantity": 224, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "nbq", - "name": "\r\u0003I\n𩂻2v?H ~=E+󩪕\u001b@y[򶂠Rez\u001b1\u0017򎜞K\\y嶒A3'𳭫򱥅", - "ticker": "e멲N寃p", - "delisted": false, - "description": "\u0002􏖿󛍁1)>\u0000񮬀\u0002A󮤼1𨻓.\u001c3J􆕰f\u0000J\"\t񥍭񷡳9~񑾆dK􆟈10Hi=\u0013\u0018o\u0001\u001e񥚎𤙙\u0007~\u000fk{\u0006XBW󙞳\u0006\u001d?񟩆񈹁MSz\u0006󅏂A𦚈4򠜏Q򄚔F\u0001\u001fyx񻇊YS<+@䠖Q" + "homepage": "򖍖\u0019񼬕dBR.E򜙞񫒹zh\u0017\u001b\u0006]z4-(𐒭Da:򭶶J񠔥\u0003RAz*\u0001\u0001\u0004Dj}=;򦭊U\u001eO\u001fmZ󢇀Q򌶽􄲍g+\u0013V\u0018:", + "name": "򓄲񵨐|78=V𻷫\u001fq\u000b%\u0011%P8򙍇(0\t\u0011s}f_𰋝\u0003\u001auLz\u0004\u0007T숿", + "ticker": "񶾤񚢝55D", + "description": "񾐗IQ󺠢b\u0015L&\u0004%8J𖄯Y\n𠕤\u0018\t2򎄄V𽸒\u0008󂿔𡺽\u001f񑱌{!C{\u001aX򫮫񘸦񙄎Y򎲴=\u0014'=X^\u000c񳊻󬭎Z7#D򳰭\u000c􏔷qs𘹅wG𪿥尢Zi񄹻\u001e#꽤u1\u001aY>xr4x#𚟰󈡊󁩑o\u00194\u0017'򯚯z\u0011񷨽\u0011R򄛉񹼱\u0003Ah\u001d񋈼v󳺚\u0004!򪏚 5;e&_s󼙞D\u0019\u0014xOyG^󝥼*󚸳:GM~D 񯞋򒛩h𠊭{\u0019\u0011k𸷕𣼹 c#M\u0000\u0007&r򙤟\u0017\u000f-򕛓!\nTEX\u0010󷨩퇱l񚰾򧖚􏤓L񆵯*򼎹\\o򎚜v[\u0001\u0000\u0000\u0008~~?翢\u0006\u000f\u001dFsW򋂟94BW\u0004\u000c𡹤qh\u001f󟖅V=L^+k񉖈N򀺎" }, - "id": "pool1eazuxzungzveakegmavulqmdwxsy2g0dtzsmdhz692eexnzw2je" + "id": "pool1gwuzl6ss4ydphqcdj788s5z86e7n7z05w39wp2ul7nvqxd84ngw" }, { "metrics": { - "saturation": 1.3203251434933228, + "saturation": 4.7244278549111725, "non_myopic_member_rewards": { - "quantity": 439731462941, + "quantity": 23473018926, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9248324, + "quantity": 8742636, "unit": "block" }, "relative_stake": { - "quantity": 96.99, + "quantity": 29.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1888-06-30T06:55:41Z", - "epoch_number": 17711 + "epoch_start_time": "1876-04-12T07:08:04.476536593957Z", + "epoch_number": 4387 }, "cost": { - "quantity": 96, + "quantity": 123, "unit": "lovelace" }, "margin": { - "quantity": 62.91, + "quantity": 21.3, "unit": "percent" }, "pledge": { - "quantity": 149, + "quantity": 27, "unit": "lovelace" }, - "id": "pool1mp6c9xaaed5pg3a7cc2c0sk3hqjzjp02dayespas6406chrqee5" + "delisted": true, + "metadata": { + "homepage": "SFI\r񡰝0W\u0016,ﷰ]𛃠.\u0019\u000b񭜤0O\u0002\u0004񧗽NxB􃼸\u0000񃒊e)w󛱄􈬷~\u0016$\u0000#𷑀𐦲;𵑞,𙡓!\u001c􄠜𺝙𠻍tLI\u0018񛕢w򨢽6>6D3\\\u000e\u0003\n\u0012󍡹\u001d", + "name": "B򀡍ὤM𲐄_bG^|󓮊'\u0015\\ASb󊛿󫞶𳃮!򳋔", + "ticker": "󁔀j􂮍", + "description": "3N" + }, + "id": "pool1k72029fhh36rjhssq5sk9qxh30rpxhyee4zf0c5fsy0aukjsqve" }, { "metrics": { - "saturation": 1.0873359781032348, + "saturation": 3.0755637913375775, "non_myopic_member_rewards": { - "quantity": 820188729005, + "quantity": 317956609245, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17778975, + "quantity": 15752925, "unit": "block" }, "relative_stake": { - "quantity": 80.85, + "quantity": 11.8, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1901-02-25T10:57:12.511683556893Z", + "epoch_number": 1681 + }, "cost": { - "quantity": 114, + "quantity": 50, "unit": "lovelace" }, "margin": { - "quantity": 63.2, + "quantity": 20.8, "unit": "percent" }, "pledge": { - "quantity": 42, + "quantity": 142, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u001eZ𾶞)b'G8󏩍QL𽊠\u0004򩹦\u000ff򱁧󬱻J%\nl5\rG񩲾I", - "name": "\u0018*~\u001b\u0005\u0002񃬎eR\u0005oL[򄻜_\u001c\nmG>\u0000򾕵D\u00059X@Cqg", - "ticker": "񁼯c~", - "delisted": false, - "description": "g򯢐}W𕼂\u001b@𬡧Hdf\u0001Q\u0010p򞠃\u00189󳢋y񽧤𽬺>$󙃱񆇋\u0000}H%^󥶬𾮽W\n\u00141\u000f\u0003񋋻\u0012p\u00128򿥤E/􇿦5󾼾VAI󦊹󱎯 \u0002𯚎5\u001e1~򓘷-󄦱󂨋\\)\u0001\u000c􅰏N\u0001񎂸u󼔐􀻴9\u0006z\u001cF>N󁏦*9򯐑򄂾󚟛󼰳\u0001񽻴`d3\u0004\u000cym񽲣J󬐛\u000b(^\u000c|V[\u001c@Z􆴹h󀶽Q1E򖁌𴠈\u001f\u0008-\u0006򣎮󦫰O񛪂9KJ{\u0017uBej\u0012\u0019\u0018񫨟-opp񡄝*񶺴\u000e4򛑹\u001e\u0006M)򮾅L\u0005D\u000c4n-f􃈭󓗌񽈸r\u0006Kz󭨌0QNTlsY~f\u0001},]@湼L\u0014򼠶㶬N\u0016rT;SM\u0003\u001d񩚺𯞎\u001b\u000b\u0014)&󰗎\u0013𜕃/A󧸙l\u001c(,򫂳}򵣧򵻟O9򮌻J\u0013\u000buQ򝸕򲉔>(\u0012\u0005\u001d2P񈎖𼜓I#j\r𧺤3s5\u0008" + "homepage": "򾜼m򌳕\u001cOlꠂ򀤀", + "name": "z򊅰9!\r\u00185񯚒D򲔩􇌘6󍾣5򀄼񳍏`@tax\\\u00157|\u0001\u001cT𸧻q\u001fIA񈪔ca񾢽", + "ticker": "9\r󭀥\u001f򫧹", + "description": "キ\\\u0017I湥򶸳y:~8򱫌|\u0018$񋣦\"9󏿱Q\u0011񰇆\"𡒂򦅁􀎄\u0005yE)񢢕k{򣔫򨴭" }, - "id": "pool1lmfmfegamad4hq9wcrke8fxhjuw5rrxy7krrusajdf8ykmfvtuc" + "id": "pool1l8xlgsyr66wzv0ntxf7m6jxl4rkrpatwl6vfs7tmrak4gduqr7h" }, { "metrics": { - "saturation": 2.114577782491012, + "saturation": 2.915926943204345, "non_myopic_member_rewards": { - "quantity": 201305786414, + "quantity": 201683622903, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19612315, + "quantity": 22022634, "unit": "block" }, "relative_stake": { - "quantity": 97.78, + "quantity": 80.47, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1898-02-10T16:00:00Z", - "epoch_number": 7715 + "epoch_start_time": "1885-01-08T04:50:43.43176821759Z", + "epoch_number": 6865 }, "cost": { - "quantity": 90, + "quantity": 161, "unit": "lovelace" }, "margin": { - "quantity": 41.05, + "quantity": 57.32, "unit": "percent" }, "pledge": { - "quantity": 234, + "quantity": 193, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "𬓦D\t5🛑򵞮.vAf\u0018K\u0016x\u0012S򖇀.Z𼐃񚙵󆔎$񲲛L%7-I4w񸢋𨬸\u000f\u0010\u0001`򿡜\u0013򡅜G󱋬Qt%󡃠h S󂗓1[!W󸏠_^u󼃥\u000c񕋈\u001d^BO fwh\u0011\u001b\u0011\u001c$򘔻\u0000k$/N򆵽񈯤󋲸<&d)U\u0000-\u0013QO", - "name": "A%7\u0010V@\u0002Wq򾽷R񽒙𴙵N#RnH򉫸򺧔$񎩨&\u0013\u0019MSRueAh\u0017B", - "ticker": "\u0002!/", - "delisted": false, - "description": "􎍴o>\t,\u0004\u000f񉇽\u001b󹬍򢿜" + "homepage": "񮹶G*u𻮏k$6f\u0007\nr.HG\u001f,񟛣󠠵R\u0011}<󝙌\u0005[-F[񁄾:򩶱󼬛F\u0010\u001ep2\u001e*򏫫.\"򩎲cz񀼓k򉝺6\u0007.񭳾=\u0019񵎮񫿤󶥄We󣖰Ww4=\u0001󓰍*f:wnm}򩉢r2񛫅3𱁙󎸪nH󸋞𛞸3𼛿S\u0016\u001f򏫫\u0011#鬊G\t", + "name": "󉪽\n\u001a15󹉺{q񕇝@󒻗󙷡1", + "ticker": "\u0000H3{", + "description": "X򝸩m\t꾟\u0007+jѠ?WR񠇻􂉺:_򓏅𤕖V\u000c񁓳DL'\u00169󒨮*f󳅋,򆃜\u0003MqC8\u0001<1O?\u0000w\u0013㏭D򈶌].𨈰򽟽\u001e򢧧k񊏠s񂻞𤮖Q􈶆&w\u0017G񦆉M.i\u0010Iw'tO>~WZ\u0018񫕲𾄷𜱒H0\nJfEO\u000c𮔡6􌠎d\u0000]d\u0008S2L\u0007R󨗆4iLke\u001fP:򬶷\u0004𖗠񐵕Y\u000e🧆{~\u0005󕗁e=\u0019\u0011B\u00163O!S D5\u0004k*v\u0016ED򨐛a\u00199_nh~JKB񾑒yIMo\u0016\u0002\u0000򉘿𚼺\u0005p" }, - "id": "pool145fv36cy4qaec256dthclc2sn0jxpcdn6r6h3l94z4ackp7x07d" + "id": "pool1em2r39htzcu80j7rsysz5seqz9leg5qyk6udq3tu3cgn2qlrsc7" }, { "metrics": { - "saturation": 3.28151555243486, + "saturation": 3.2609307338485376, "non_myopic_member_rewards": { - "quantity": 820454618566, + "quantity": 654928391638, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12510793, + "quantity": 17560336, "unit": "block" }, "relative_stake": { - "quantity": 8.49, + "quantity": 82.26, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1886-08-21T00:37:14Z", + "epoch_number": 10754 + }, "cost": { - "quantity": 176, + "quantity": 43, "unit": "lovelace" }, "margin": { - "quantity": 22.1, + "quantity": 65.01, "unit": "percent" }, "pledge": { - "quantity": 210, + "quantity": 108, "unit": "lovelace" }, - "metadata": { - "homepage": "􍑾},c󙊂2\u001c\u000c\\\u0018Z)j𹪤w\u001a$򂜰󸭙򮈆\"Y󥩵X?񁸣!x򮤣l0*b>G\u000el[0L\u000e󛬇񞄣󓽔N\u0019v𩦜`8&\u001c=9򀖊>L󟎇薋h?򥌲\u0019G?񐎌e򎳬ueJ𹂇񑃃Q󈮍\u0019鵭\r򢢽\u0010z񧽮;r\"dpmC󔪩\u001b\u000e+HX񩻭A", - "name": "n;>\u0015򝩽g\u0004b󩻪񥍚n!𯃴R^ci𔊑󄎢P/\u001fa", - "ticker": "4/򡚵H:", - "delisted": false, - "description": "1rC󺪾Iy񰅒Q𖼟'y4f򀂵2w\u00049u5/e򊸠9W\u001cU󁽣\t񓾳wufr񯴊\u0004oy񑩦\u0014\u001d.򽌓W󜠏K]O_\u001f\rB񂦿\u0005e􇫴E\u0007D\u0016\u0011/\u000eN>W𢻠a󕄘Vw󵊖P\u0011%\u001d񠪳;#70󟡓󸄓$&𧈈\u0005򲒞r\u0015+\u0016󧂕.11\u0002V\\\u0018򾮬u􎲣mKSs\u0008𜃠P񋽿U6 (󁟘Sj7\tkA\u000e_:t𝕰񵜠\u001c󋋲𞲠\u0012;񗓿󛱡5\u001c?YL$\u0005񐭬\r\u0008dq^󚼢\r򆩬2B󊿾,p,\nᶯ\u0004}`⯕oWir򗑼󑞝n\u0016󶯠A򘎿i\u001dd}񗕢\u0005~;\u0016\u0017f\u001fN\u0002]=5,9+\u0015*򓲅񣲨񫅌򥶭f" - }, - "id": "pool10watuz44a36fgup73p3dm7us7cp9q7449pfmc0k7fjcdqem2acd" + "delisted": true, + "id": "pool1mx6cpdfedkalvy2scheuv72hspu8r298egnpnjruhgcv2sje3c5" }, { "metrics": { - "saturation": 0.6714721531990558, + "saturation": 1.9328100160711492, "non_myopic_member_rewards": { - "quantity": 236101345869, + "quantity": 637464254202, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7454644, + "quantity": 11845963, "unit": "block" }, "relative_stake": { - "quantity": 75.16, + "quantity": 90.04, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1888-01-18T16:05:22Z", - "epoch_number": 2541 - }, "cost": { - "quantity": 41, + "quantity": 119, "unit": "lovelace" }, "margin": { - "quantity": 45.59, + "quantity": 63.26, "unit": "percent" }, "pledge": { - "quantity": 169, + "quantity": 54, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "򌍗e@󸆌ﵦ8U𓛛u\rF\u0005u򱼼􇍩󿂇𲋍aX󩺽\u0005p󢨅iy$}C3\u0019򮽉7'򣉐H􋆕s/򨉛񰮉V泰:򖙹$9\u0002\u0001򯪳\u001c񭀗8@.O񿖏g\u0016FA𗨋񘅽", - "name": "\u000e򜾺Y\u0001򋸪q\u0004p?3񏤽H󯐸T\u001fr񶷕򥣟\u0018񰆒k񤞉򝕋&i\u0019v񢑮䞰f_𹟬\"f", - "ticker": "Q\u001e𻏗G", - "delisted": false, - "description": "\u0001K𥼢t+\u0014񰉖ZLy\u0019I򖫴B\u0012\u00111񁼏\u000c\u0003Nvt\u0010$a򸵛*(<򒁻𰶶}\u001d񹤨@𪇓S1HSu,'\u001b[~\u0011h\u0000\u000e-^\u0019%p𳛚gy񈌝\u0008'󙉁cp𞖣𛄘B\u001fRP񞫽qpM(R 𧎾򺓎񌘛y󲚝文a\u0018}f6.bY󘩆#\u001e􃦧(+~f\u001c|l򞼩\u0018avt%R\u001aE񋈑樂\u001c򄚀PwG򶉁uP|@򘔉'X񉪧\u001a\u000c񢠵\\d𸶃\u0005Z)+\u0014񒦡\u000f\u0017\u0010pZ\u000f񳕑󭺺[uMw\ni\u0014`U񧝥%UP񰾧R]򆲎x\t=񎚹񼳥\u000fS\u0006\u0007򲰸z\u0017wl\u000e𩜡4򝴻4񣌹8^4[\u0018򡺤󁊡W[2\u0019" + "homepage": "\u0014񵳹\u0016", + "name": "󝳀4d/g񝱆:\u0013\u0000񽘤񧫘򏁡󦏦\u0017z𢵰,\u0007򊏼%c\"񏕛M", + "ticker": "񊃶󻌓2", + "description": "𜜯$k{򀽻$j\u0006򓦔^\u001b\u0007Jd򄤁v𱭩򠭹-\u0008񢦌%Oh\u001cC򦶏3򠘭I󵽨#Z򂠶%&C^􂸕wh񡶚𬯱󳖟DHh󉌾\u0003h(t񱛓𴍦zp򡃡\u0010\u000e\\\u0019%\u0018񠆬4m')0,Ad\"\u0015򣺾J_U\u000b񽻘C1\u0001\u0011謠1Ad\u0014\n򓓨񱧄5g'=3L򼙐B!\u0006\u001b񺼨𨮫񄵛>%L0?]\u000e" }, - "id": "pool1a4jrydcajxkgzadrylvxxxeymk7tzxcf8hs0ykdc073lzgv26ud" + "id": "pool13pfz34vndhkm0a00rea3wmvfzfjp4lv8ppusr64wyn5vjnxm8p5" }, { "metrics": { - "saturation": 0.14368273388363662, + "saturation": 4.042553549469356, "non_myopic_member_rewards": { - "quantity": 684760344120, + "quantity": 302468250092, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2660262, + "quantity": 5144767, "unit": "block" }, "relative_stake": { - "quantity": 47.92, + "quantity": 90.99, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-11-03T06:01:10.041212200311Z", - "epoch_number": 27255 + "epoch_start_time": "1860-02-11T05:44:47Z", + "epoch_number": 30483 }, "cost": { - "quantity": 75, + "quantity": 173, "unit": "lovelace" }, "margin": { - "quantity": 24.54, + "quantity": 86.12, "unit": "percent" }, "pledge": { - "quantity": 207, + "quantity": 201, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "􉛢}%\u0018\u0014\u000c:q", - "name": "+<\u001bb񖑑Ha󗤨\u000b\u0004񶞱", - "ticker": "\u0012\u001fvu", - "delisted": false, - "description": "\\Sr\u001a𓰻p<󷣽\u0019􋃝\u000b\u0015e򗛒𢶈:󋫗𽡺-򸎈m\u000eM򡜜𠗥r񪭊𫂱tN\u0003jI\u0019\u0018\"%cV_\u0007#\u0011f\u001d\u0008\u0003𐘘\u00039񴋿`.ri.8𓮱\u0005\u0010 Z\u0008J􅮁+L1JT񅞽\u000b󭹁Qz񨪧)KY@ZS" }, - "id": "pool1td6c5dy2s72eryfdka72s92spcq0hysfnlha2xjyduptwndsydv" + "id": "pool19eyy3866hdgq8262rrrpdrzlqpnmfh6au2g4vwelcldsqjhdcf6" }, { "metrics": { - "saturation": 4.627991087422369, + "saturation": 3.16992089312453, "non_myopic_member_rewards": { - "quantity": 469702761908, + "quantity": 623685244280, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9365465, + "quantity": 12193727, "unit": "block" }, "relative_stake": { - "quantity": 98.66, + "quantity": 34.92, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1879-09-28T18:00:00Z", + "epoch_number": 12274 + }, "cost": { - "quantity": 67, + "quantity": 72, "unit": "lovelace" }, "margin": { - "quantity": 23.4, + "quantity": 63.37, "unit": "percent" }, "pledge": { - "quantity": 228, + "quantity": 7, "unit": "lovelace" }, + "delisted": false, "metadata": { - "homepage": "{yq\\샦[􂜝", - "name": "C𙍝\u0004Tu$򽛔򆭦i_\r4*񌨓lc\"󊌝񬳞񤀎󪬸O:KI?B⣇#", - "ticker": "u\t\u001c\u0007", - "delisted": false, - "description": "\u0014𑯟*\u0004s񜵻?>񉢍L𯊆v\u000fVYO:􉳼", + "name": ".,0𠉣9򴳆\u001cE4TK;Q_:g1𧰍𵘗\u0018D|\u0018󌜑X𚪋{{S~!ij򑣐aa\u0018\u000cQ4\u0010xz󑑯\u0004", - "ticker": "o'󥩪", - "delisted": false, - "description": "P񽣽P\u000fu_-XDj{􀵐]OQ+" + "homepage": "}[Phq򨖾𧱜6-l#wy\u0003꣔򒀨\u001e`񇏹o\u0019c񠚍>M\u0016\u001d\u000b󅹓\u0014򴉬onO", + "name": "\ndx𰲗񿅢m󉈩,T荣F)$O󻼼I:6P33m//EO\u0017A򗛤\u001aT", + "ticker": "lDG\u0011r" }, - "id": "pool1qx33vm629939gqjppuda0au9ulcc338jfrsueqmqg39pwxjcksu" + "id": "pool15pvw2h7q43fkjt66nf5ezwn57ksxk3nqyds3yzk5a6jxss7t0d6" }, { "metrics": { - "saturation": 4.580390433718588, + "saturation": 1.9695964314075094, "non_myopic_member_rewards": { - "quantity": 294702726868, + "quantity": 849281553646, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16493178, + "quantity": 15626410, "unit": "block" }, "relative_stake": { - "quantity": 38.01, + "quantity": 66.09, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1899-12-14T22:50:04Z", + "epoch_number": 14402 + }, "cost": { - "quantity": 142, + "quantity": 126, "unit": "lovelace" }, "margin": { - "quantity": 83.39, + "quantity": 13.5, "unit": "percent" }, "pledge": { - "quantity": 92, + "quantity": 40, "unit": "lovelace" }, - "id": "pool1e7v7898ug299x6nm99y3g9vyl528m7q6l8xze27adr7ev84p3jq" + "delisted": true, + "metadata": { + "homepage": "\u0002񎋫\u0007\u0019^\u0002_f]2.񥈒U\u001a`?沔(󌭳hH\u000fU={Gvz\r񓾽񿹅𖳖󷔩ᕷ7>򶠽C𾐎\u0003\u0016\u001c\u000e=\u000c\u0008\u0005G@-u^t+􄬤T\u0015\u0000`", + "name": "?y-\u0008p򜜅,\u000c[௹\u000c񢝵T񢀕񀄎sᛩ)Qj0/񸤥G/M\u001a", + "ticker": ">𯞔󣼗\"󂗆", + "description": "G󼤏+񩪣\u001f:D\u0010*_3p󖍓y􈧭񵞊\u0011𥎔𯒜򷌡\u001eI5\u0000?\u000b8򆓒" + }, + "id": "pool1vg0uj4wswn6jztrxr83fleggxs8qn73zh637qplqdqfyuzj7m6m" }, { "metrics": { - "saturation": 3.700596560521758, + "saturation": 2.654499194014374, "non_myopic_member_rewards": { - "quantity": 993358119124, + "quantity": 679234505893, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4400249, + "quantity": 6339247, "unit": "block" }, "relative_stake": { - "quantity": 69.26, + "quantity": 29.98, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1870-08-22T20:47:27.928086740337Z", - "epoch_number": 31486 + "epoch_start_time": "1879-06-30T04:24:38Z", + "epoch_number": 5230 }, "cost": { - "quantity": 117, + "quantity": 112, "unit": "lovelace" }, "margin": { - "quantity": 42.68, + "quantity": 92.9, "unit": "percent" }, "pledge": { - "quantity": 138, + "quantity": 6, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "\u0004򖤻\u001d", - "name": "2bd􉍑􄅒?F>\u001e𖧌򸔭䃕\\-C8o󼰲l#𥪪򪮖\u0003🐃miO𚿏-򗌿", - "ticker": "󧷕\u0007.", - "delisted": false + "homepage": "\u0004tc\u0001\u0003󠇶𜂽OI\u000b7jA\r\u001f(x.\u0018\u000bw򜯟\tiIG󩱅򶡡𯒇G)𷃂򇲇󲷬R3\u0015Dm󃦉$\"S𦆅D𰗧񟁧󐱐\u0018\u001d\u0004Ev3", + "name": "\u000b/-8\u001fni\u0016Y򩽇\u0018\u000b𞪎\u0019.\u000el𻊵󳦍􂦨aM" }, - "id": "pool1x3rlrx2wzv9ps9kpfc3s8ulsyqh4kda8l4vw0nlgmeyzqhx0w50" + "id": "pool1wghjk8a7vaze793tstw4x75fuzd38z9jgsw9dlpluwmz2ekpmut" }, { "metrics": { - "saturation": 4.826729474948514, + "saturation": 2.772004782927855, "non_myopic_member_rewards": { - "quantity": 8598527498, + "quantity": 238501381298, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16774380, + "quantity": 14728397, "unit": "block" }, "relative_stake": { - "quantity": 63.72, + "quantity": 1.45, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1888-03-20T05:00:00Z", - "epoch_number": 21398 - }, "cost": { - "quantity": 153, + "quantity": 205, "unit": "lovelace" }, "margin": { - "quantity": 26.29, + "quantity": 74.12, "unit": "percent" }, "pledge": { - "quantity": 180, + "quantity": 38, "unit": "lovelace" }, + "delisted": true, "metadata": { - "homepage": "2Lp񂂜x;\u0005seeTa󒳳?󢹘\u0019QT1K^\u001fp򝋛󄍚𙠉r򪺠", - "name": "-򦘤e\"R+󷷽򕪼s7`n=>񁲗\u0003@m򱶗B񦝥򉧺J\u0006𭱽d?\u0011\u0000&󟭯0\u000ep", - "ticker": "D@>\u0012a", - "delisted": false, - "description": "򮾳󮙲E*𥜄񈯽-\u0005󂿴ࠝ񒊆\u001d9򭖜)\u0019\u000fC󘙕Fm-P󌤏{\u0018B^𕲺" + "homepage": "/\u0005\u0012U;񨁏n}􅬭\u0016kgw󣏞\u001b5\nM𰊩erqB1EE", + "description": "񑣥Zh)\u0008󪡊\u0013\u0003U󑔞*qw\u0015󸁇v\u0017wBꁉ(q7󗢣$S=]𝀖󼓂󓍙B+8\u0005up0%C89󡚔󃂾\u0005oF)F\u0017򭛋LT4un1f\u0000񳠊񉼀u󇴔\u0004b\n;⑧", - "name": "򼀼TN򀮕伊񛷲\u001d򺰻v򙣆T@", - "ticker": "g}𧨕k\u0008", - "delisted": false, - "description": "Q󊱙򍝭\t򙥗W,\u000e\u000b6dVm3\tnZU2\u000c񿙃b\u0005*d󶧲񂞛\u001b\u0019:a\u001bJ򣧺󃬑?񏈽񟦲TZL^\u0016􅒓qkhl󜱢򚁀TK-\u0010X\u0015\u001a󸫭\u0010y񵨇\u000f+O񪿗U8,򋘯DN9W(ℐ*(!憳e\u0015󘮃\u0012,7\u001bb&{񞜤v,)\u001ag\u0010\u0014m=񡘽1;\u0015M򦽇~򸘲x𮱖\u0017󹁼)F󎕀9By+w򄱏AV$>\t\u001d\u0019Eh񼱉𫖔@e\u0019p)m.򨿬\u001cc\t򳅀K =\u0008\u0011>㙢򾖬\u001dSꆈ󻢪񇲈\u000bj񝋥𯞎\n𜍏\u0015\u001d0񊻜򔶏Vr8>y\u0003>󞢎E\u0003\u000fo/3@􁀆\u0019\u000b" + "homepage": "\u001d񽲔N>񻖮/|XC)r&𩐑\u001e󣏓", + "name": "fg3j1zP", + "ticker": "0龘򖣉\"5", + "description": "󗯟򹗬_K'\u000cF\"\u0001L\u0002죠\u0002\n$xf\u000b#=L񸤪mbZ񭳂0\u0010X󎄭-7Bk\u000f\u0008\u001b>Z\u0007\u00120WW𾯡\u0010B񋁘\u0010oⳘ򩔐򍾐\u001c\u0000򑐏󧀑󋇛!t\u0017\u0008&K\u0006\u0004w~\u0018dM\u000b\u0003BQE󎨾^C|#DhU\u0019R\u001a󇲣$\u000f󯂯𣭱􊦥d𸦊򠐣P<򰥸\u000eT:󙄽񿪜6O\u001bn񏋘k)J򔥑U򲠏𧔢V\u0014񔶧&#>H\u0012\u0003\u001f8n\u0012\u0005򱦯D7a-򞎕8\u001dtG8\"\u001b󪁕9G64L%y\u001b𧫁\u0003P\t󠾃aRqQ[\u000b󂟰H\u000e##-}񎈼񉉖O+􃰗~[\u0000f\u00036񌓕\u0001\u0015\u0017&􏀕\u001f\u000csCYV가#2\u0012>𻺘񆫚Bu}p\u0015{CRIu鰷$h󼾱7l򢾶3uZ" + "homepage": "-󊔑򬿻󲋾\u00112o~𒙄d:\u0005Z^q󬯏\u001c4󙑵𕻛v\r􎟩\u0013k󄻕򭊷𢀈𽺼񧽁e\u0004񲧬OI9&\u001b񵑱C::vfA2kⓖUr&D?󎫠\u0007𡽪6􀝣7򱣐5<6疇,e𞋗񬑰ab1d\u0003T\u000ckf򬄦񒷈BWb񢚫_\u0006񫡅b:j󓓯\u0017;􍝧", + "name": "z I>c1\u0010񆼻V󦁙񲘭񐀀L\u000b\u000f񤢎]򰇁\u0003W\n9\u0008𦣝P򾐉b􅆦\u0008𲖬񐪜𘉽>}Wv=\u0002w𺊦򄥃^sP\u0010\u0001~\u0015", + "ticker": "!b_\"󪹙", + "description": "m_d\u001fY񨜪+C𓄿oO" }, - "id": "pool13wlmcctalzdxynxjwfcwz0yv40lw5h2mlujxcezzdpukydd6cy3" + "id": "pool1msxwr6yfy48369eqmyvyptvy6ecx2x4cz3grw0p3vckzjwucqvq" }, { "metrics": { - "saturation": 1.3607388156541385, + "saturation": 2.5286176040540203, "non_myopic_member_rewards": { - "quantity": 860889854897, + "quantity": 182230157555, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3219562, + "quantity": 6494646, "unit": "block" }, "relative_stake": { - "quantity": 68.67, + "quantity": 73.5, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1906-08-25T04:25:40.982111437968Z", - "epoch_number": 27528 + "epoch_start_time": "1878-03-06T08:00:00Z", + "epoch_number": 16318 }, "cost": { - "quantity": 123, + "quantity": 73, "unit": "lovelace" }, "margin": { - "quantity": 60.89, + "quantity": 89.21, "unit": "percent" }, "pledge": { - "quantity": 239, + "quantity": 233, "unit": "lovelace" }, - "metadata": { - "homepage": "\\񍟣29񍉞󾏧\u0018񡛅\u000cQ[\u0008\"d\\\u000e񹸾(]\u0019n􉽬񣷙*i+:\u0014~|(Kh\u001c󓬟8P𾧴{~\u001e𹻥󶰴򧵙9M􁤴'\u0002P򁒴𑽅Uk\u0012𞤣\u0003l\u001d<\u0002釸\u000f󟌸\u001d󨁇2;\u0014&\u0012񀗫󩲅󦗈x", - "name": ".~󈆙", - "ticker": "𣹠5x\u001cg", - "delisted": false, - "description": "Q򟛗񹣎~\nW\u0005y8񝋝\u0014~񭤯񻒾q\u0014bb米󕱌\u0001󒪻\u000e9򱗧\u001bYhe\u0015z\u0013f\u001b<񆼊􁄡𹸏M\u0006zx7񩴡", + "name": "P󎅖󂻢lG.9[I%H𣃰&\u001e\u0015", + "ticker": "D>I]\"", + "description": "\u0004]i\n𭚍󶕉0\"F\u0003񦒼\u0010>UmF\u0001?C9W)/󾣔\u0002as𨝰򣇜\u0019򫐠f𶐒\u0004_\u0013CP+\u0007򓲦񿹕tt?z\\tGN򺺒L@I􄺌.m𜈎yh𑻕\t󔹷\u001dE񞿎\u0003 :Y,/q𢾠\u0015m= 렗OyOQ='1O򞙧O}x򶸓\u000e\u0006\u000e8c\u0011򬌱\u0014򕑲񃔝󯋷\u00111\u0018𲹑~", + "name": "󀹩6D\u0000]\u0015\n񓸄񗥾X_bpv\u001e!O\u000e~󛗿1OPn", + "ticker": "7􍠭h", + "description": "󮢿OK\u0013𱆩[\t}󴋣򣳣Y3񲰡U󃍛\u0015$M\u0008ᚧ\u0015\u001f*\t\u001f𕢿\u001c_;~񤏉<'􏷋񮣮󆓸=^V\u0006񺐑31\u000ev\u0014Pe\"`\u001bn񄑌\u0013)39zM)=\u001f'udl򷍼񐮢V󌞛񠢂𺩁:𱪨\u000bh5L\u001b꜃\u0018\u0019<4\u001d\u001e\u0014X\u0005)V5򖈀9P|\\XfS4򄝿i\u001eV1O\u001bp\u0017𒮑\u000e'i]{VJU7i:8\u0003\"񙇖{\"r-\u0011򴆦>󈣊󯂈,𭒙8\u0013U!Qx+\u001d\u00061)𓖎h`楝𚿻\u0011\u001c\u0018\u001f\u0011\u0003\rs\r񶇰0񻬭7\u0015N" + }, + "id": "pool1jrssl7cpdrcgp8adf4t8qzm7y6gyq4e0wranfzaad3zhqme2dgk" } ] } \ No newline at end of file diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json b/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json index 4ca3116eb03..108fcf45688 100644 --- a/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiTStakePoolMetadata.json @@ -1,72 +1,63 @@ { - "seed": 6312921918417622385, + "seed": -9194523005649707982, "samples": [ { - "homepage": "\u0010C쀑/\u0019𯭃䭄򺰨󢽸󝶺𿽇𓀗E𹽴\u001c񰐱\u0011򥬛F\u001b<\u000b\u0007p>󠯗\r\u001d򮸂󖓣\\r\u0008,[\u0015\u0000\r\u001fu&\u0005,']\u0001", - "name": ":񿊐񆌫񙘃􊭭K񃟘𶁶)", - "ticker": "o\u000c..𰯥", - "delisted": false + "homepage": "(L𾊺𒦛kH\u0007Zu2}yE󠜤\u001f𺑏򢸵n0`p1\u001a󲔃򜔬򴬫i񙈆N", + "name": "Lp󹬗r𼑠;", + "ticker": "󵘞3D&୸\u000f.𣃢[񽦄P򶜅B񑨼;o\u0006cDSDT<^扦S9Z\u0005􂈛󻧳m򳋇z\u0007\rp'pKk* \u0017G򌙓⺾\u000b񟷉", + "name": "z\u0010Oe𭮡@S񬔌\u0014{X\u0018\u0018Z󟺹'v\u001f\u001d v\u0016q", + "ticker": "]𮁜uo" }, { - "homepage": "h򋧲/!U@d+!\u00152𔤲[T>\u00119񅄟u৓\u000fRN\u0011mU\u0011򂵄YZO\u001f𵨣ᗡ󖗝\u000fW󙘵^", - "name": "򸫖\u0007@zR8W,n@t", - "ticker": "񟳷\td3r", - "delisted": false + "homepage": "s\u000f\t񣔑g򧨆A򚃟\n򾡄_񡐶񲹒\u0017`=\u0011􇘺\u001aXyH\u0018[񕾐򸝜uf\u001a7\u0016l26񜌃;tOh9L􉕝6t\u0001񽾫8N\u001d\u0002/(Z豥;󍿠{\u001fT- \u0010RR\u0007+󳌹}\u0005q𳏱󔜅", + "name": "4/d\u0013\u0018r/h\u001fN\n𩟑\u0016\u0011Jn;\u0018LK0#`򩜿z\u0012RZ#`q/򾺋𘈲𔱢{\u0011\u0011󃢜􍏰󜷁V%󆴓􅉉G", + "ticker": "󻱩=", + "description": "T󍴗n𴙭\u0001)\u0005𻏪\"%2󢴻cmK񜛚i\u0016Y\u001c\u0012󥏒󲥡Jk񳧍Sy1񬛘\u0008񠆎@\u00199򶛒󗙙\u0007𡟖\u0011eFW\u000b\u000b󱂭O\u001c\u0014N\u0004]w$󪫶\u0012\u0019+s\u001c\u0000\u0019\"" }, { - "homepage": "󃜝\u0008򕥘\u0010!𻡽m򱰮up󯦆0򔁩N򜣅p", - "name": "@P򄢶G&", - "ticker": "@xY\u0001}", - "delisted": false, - "description": "Z\u001f\r1\u001f\u000e\u0019d9CfL\u000c\u001b\u001b~\u0015f\u0005p~J\u000f\u001d󨥞}\u0019s򡳁|mj𿱒򲺸񰿦9󍗃\u0010񠛔_*|񬛾Cv,B\u0001ඌ𵌡PgjxDOR,U򍉅\u0017\u001c倻񷓂J\u001eh\u001a0wXJGMI\t\"Fg򗓈-\t%rKA򚑂񉲩7O <}Sq𸓇'5T󰲒F8a)\u0017D\u0008𨣘O񰨽E𐷨;\u001579󩈂m\u0002򆬳|2\u0005Dq𥩱U󋬢񢬝󡞿h񗯂󔻇T󲋻>N򳶍Tc\u0015C񇞂BG򱽌Q" + "homepage": "\u0003\u0007GE򣖔S󤜃&\\c5_\u0002\u000f񛼙*tg񨗌a\u001bZ5\u001b*0)uU񟒲𱜅򰛿*E󗛺~􍾘 >\u0002u=񯚈?\u0011Zy\t\u0017", + "name": "t󷤐𽎏`gV`T]", + "ticker": "\n𯸷MwH", + "description": "\u001a?nSS\u0003U-󇩚󭔏TD򰎬i\u0003𚀂C`\u0002t\u0002rB~򰀗i񹎍򱄱B;<7\u0001\u0008\u000e󙻥9jv򔦫6g}󲋐򱇷9LR1$󣇤>a\u0006󩥮}(Ftr%8b@\\\rU򣹆T񙌂=m\u0019\u001aC{G񦫅\u0007󮮍󍗀򲎏U𕺩v󄸽C񚂉1)󫃞5&H򪙯}𿼙*w\"@q\u0017u\u0001¹\u001485\u0017-􆽫|d򫢪=C\n^eH𸷀", - "name": "󕏣󇽭l`P𖀅񱉳\\m󠟮>9rfB8𗕣lXe|4\u0000k`g񪧠򨚉oIrH{LF\u001d񿮧𕝂𻰂", - "ticker": "\u0010q/", - "delisted": false, - "description": "\u001d\u0006G\u0016bH񂨎𴤭PW\u0007񉐛WM\u0000Hm&_񝌑󀰑>$2\u00102AW\u000bKl񡭹𿈡jY\u001a|f.v󿳜M򹐎neq1ps\r\u0016󆻎񘭀a\u001c񢓙U}R񆆳󌜜\u0004Kuf;i\u00182\u00189^\u0000+E{.>gLu򍂛\"af\u001e\u001bꍙ󅨷V1=:󧿰.F𤆢D\u00185i􍔞y󬆁wG񒡀J>𚾐󈵝\t'4K!\u00051z\u0018C/I󡢂A\u0019jCQ'$𘊱2𜕦*T\u0006񩦆\n񛻹)+񽆱*f\u000e󶡫󡺕V󿆐\u001dfo󴺭\t򹐨񰂪" + "homepage": "򳻂P򬩌󌍡m󲡄\u0016HG􁶼r󽔈󌿍𱐧'򋆩\u0016c9\u0013>g" }, { - "homepage": "Vk\nY𴋑E󾊙~E\u0015\u001f~oi\u0016>%+f񫩆Z.򆻙ZBT񗖢F;\u001fq}𙎿\u0000󆭩aX󮄯W𿕓$?\u001c\u000b񋡰B񋥕\u001dOX\u001c򕼪U򄃷$Y򂆓yIA;9]#4R+\u0018󳟾򭢞򶱣\u000b2X\u0002}\u0018%򑾋򠞅)S\u001e=󡆅K", - "name": "o2Uh\u0005DpD\u0018C\rW򊛬Po𻨦\u001eZ\u001c\u0000\u001d!I\u0013RX\u0008 KF", - "ticker": "d\rtfR", - "delisted": false, - "description": "\r\u0011b𜲿*񤆄\u000e\u0015zDP񆏡\u0001,csx񐯛\"'\u0013\u0016󈈃mC񞫞~\u000f\\򘗥󰱉L𥆳񳿌\"H]󃙊:J󩡶🳖-p\u0006(\u0017)H$;Ru񭈦󨼸)!򔦚e񹅗恐󼘔򽒈\u0004i\"m񗲘򩃒l_񃦲W9w󈺮c𷦨f+􁻷񨜊j󴻻/󑩻򯡏;󩮩!\u0005򄆣\"\u0013򼴝[gT\u0012]R1B\u0017Y\u0012J(\u0008A /\u000f󰦬𩛃󿓇A?wz򪻑1?h\u0014X" + "homepage": "1 _u<𳻞󧇓񕒃謡|-􂼇\u0003ymj+ꭶ򙩔3񛾂򠎧\u0000&A4Z6zg", + "name": "7$󑉰\u001em", + "ticker": "Dv\u0007𚶛𘲯", + "description": "D\\\u001fJ:H2I𑈝󞔱m/\u0015Z\u0018!򿙷\u0008\u0018Ey򅭁=DJ󾫂\u0012򨻅=\u0013𥉏e\".{󃆗`\u0006\u0014🀾𿾜RszZTih򎉷(^󩊺d\u000bJ\u0005r-򲮅􏜌e𝁁󰟷񭆸𔉶`򈖓!_\u001f8B>}\u0019KW򡌚\u001ai(^\u0003Y\u001e\u001fo\u0001𸯟\u001c󜌆\u0001򆈂J񼛒\u0018\u000b\u0001\u0018Z} y\u0014\u0013񒒛Yh\\MF#Ami$􋞖?L\u000e&\u0008򚞞.d򥬱򝴕\u0015p09i\u001a󓢈,O񯯉,󡲔\u0018\u0003g|\u0016O񯜳}z*\u0018l򗺏{*\"\u001dBn.+_𯬵Y" }, { - "homepage": "\u0000\u0013󡔙𐕤\u0010󠌯񴢃)4񟙛[ \u0011'턝W񣨽,e񈑣cL񝾄򝴷X𯎥󈌗'\u0017򭀳oGG􇜉e\u000et$\u00119* 󓒥l𬅚\u0005񨠠\u000f\u001b>\u0001󫿋𫥹򼑨0Z8cw 7^\n$Z;)u򂀶\u0004ohM򎽫󦶻Ȉ󾫸O);tf򪡅Fp󪧅`񍦯P󜪠񒪍岈􏏚w", - "name": "񠮓8\u0000'pcq|󵸥)Y,5\u0010񦝌\u0013pce\u0019𵸣򱝋\"\u000e\u0011%dt\tq􇮹)|", - "ticker": "b򞟀_5\u0004", - "delisted": false + "homepage": "\u001a(󱉝-\u0002𬭯𨤑~\u001d$󋼶u󓋹zHJjh􉦛IRvE󚵽O\nwfJ𤤰񰶘x\u001e*s𝧞'q󁷜\u0005E9P\u0004Z#)\u0019\u000b\u001f򄓳JGWMMjTHPbj\u0010M7", + "name": "2z\";:󬣈򁬴T7\u0008]ydG);؋\u0019񏚣t򞓣dl[\u000c㍢&", + "ticker": "X%N", + "description": "0\u0005I7zq,\u001f\ru+\u0012ug򽤈󻰔ig\u0011\u0014e񯧰𲱜񢔟c󛠑|2P#\u0001tZ\\9K \"IS{{PDMR\u001c`򬒥𹪚\u000bnEy\u0015\u0011\u001c8󔌈B󴫦\u0017U\u0010Fe\u001f򚁤Q: R6lO!g\"񠾙媅g􊘏\u0006\u000b\u001c" + "homepage": "(􅛵;󔼛7a󃒗\r򄥛W\\󖉇\u0018򱒤:􍦂e\u000c a򛏴\u0013򘔜󘈚0🗣#5𯼦,\u0012񶦄󾗫𳲜9BFHy\n3\u0015񈲋🲜᱑~/􁖜ea*\nꧼBx\u0004򂓕𼒼e𺁓ܡr󧏙c\u0010񩒆s\u001bDkY󻿜󔳎򦽳H\u0015M\nY;\u000f}Y񼆘5W\u0012𡷽\u0011", + "name": "&Q\u0017O𪯐IF󱂄lQ6s\u0018\"Z򑃈\n'b񽇈\u00057&\u0002󥐏", + "ticker": "`\"\u001f", + "description": "𥞮AJDy5W򏾐𥝦!K󪃈5𤔨G\u001b񧂩􍏞i󩿀bG򂌘C-@]\u0004󩁸a{<\u0014{*%Y򉻣%R񆁜?񞩏񃸜\u0017L<7\u0018\u001dq\tk񋒥'򏙟\n=Wx&ic\"\u001aP]󢴾D\rE𼌀\u001c@\u00083䴥\u0011I􎡍(򔝟򚈌W\u0019|P\u0019\u0008?\u0011쯼򏴸񀱣\u001f9|)H?\u001b\u0010V.|𝟧𨛭C\u0004&+Z󓬇cNw􌎭󧸲h򴘃0\u001b9<6}񨺻\u0011c𡾠𽴛AO𒔞v;𮾊=󊌟:򬿉6{Z񹐪g_󮓌O򿖼\u0012^\u0010&\u0007ix<;􎥏\u001d󾏃h\r\"򍣌1@kQi󁇫򻵟C留9]\u0018=󈩏\"񭙤=󝉉 𫏔󆙶홰6,󚆳\u0019\u0002S\u000fHBX\u0015񔀇w񏃘\u0010v;𢊴\u0006\u001fT{\u0012\u0019𢄊L󰧳󖱇5񵁯\u0010GP\u0000ᤏx󑒄b+" }, { - "homepage": "\u001f\u001c\u0011򆁔u\"he^\u000fP𳾵'%񼥶5\u0019*l3񐭧j򹅸򶟓<:I\u0006uf\u001aZ>𶦰󬮅O󒃵𳫊񖧌\u001b\n\u001e󋴿k򆑧l!\"]S򣾎wn\u001e@\"", - "name": "򷾈W^𪡳g砠􀊧O\u0012񥒖4V𾺯", - "ticker": "X5\u0014", - "delisted": false, - "description": "Q󚊳\\U^m\u000em#=QZ#%󗳝\u001bavV;𧗀𓞨5\t\n\u0005\u00024 1`򺘹;񂴏\u001d:򋯒WqA񤫶1#𡗳B)y򍞵󕜶E\u001azPO􄚨[\u0003񥡑b\u0018)񬴯\rF4~򏮂𖶧Ce𚙟@𘪣𖪓򖧳6o\u0004O{򵵄vP󪕗KXc񄫮K\u00103>񹛻a⟍񯒹1>񆬒E_m+b\u001d򲓔𤂅~d\u000e򃲈i􁡱\"\u000f\u0012󗋐TU}X$U╵-'񬛌𙘄)%𩨯E\u001f􏸳䒠􄙽DFs\\\u001e򝴣*|򛂎񔌕􌫪\u000c\u001f)\"|%V.8\u0001\u0015\u0013M񱑝\u001ej|򼯨rRe􊂣\u001c/tf[rvwE\u0005>\u0005\u00130W$\\K򊜥򵴷\u00012w\\񸦟\u0001\u0005EU]񑯤Oq\u0011&tTD\u001d#ba\u0014b;/%񉼫DZJ\u0014\u000f񦋚🪅@򿑨\u001d񮈢\u000f6 𱆰\u0015 x\u0013񆓼C/\u0013g" + "homepage": "LA/\u001c󞴂/\u0013𶰱QJT\t򂔅:(.(򗖕Y4𞜏\"H𡈈򟣼\u001byY\\p^񶸂#Zn򉴟󙣟VS𭴏C.e𣒿<}|򐨴|'񏐍x𱬨T󄽋\u001eJC[s[/󔲒H򳋽\u001e򭰹\u0018s\u0007\u0019񍦦dx7[󼰀\u000f\u0002&񜌑h򅵷\t񄕝j쌯", + "name": "_y񜁳𛷷󸆼JNjQ~􀖆;S\u001du*󯥹(?񒢂􁤸AE;Z󚡄\u0000Q\u0015\u0010󅒉", + "ticker": "\u0003𨌠\r󽟘", + "description": "񫚜\u000e\u0017J\u0016O󚊉\u000f󛷛\u0003\u001d\rfPNC!\u0011򧰍}a𼤵Ll󏨯񍲒\u0008\u0016(󗣡c࡭Hq.򱌌\u001eT𭥻\u000e\u0011񠺢!񞭀񌲙/򨋑𜯶𦅁\u001cX缱h:񦻙MyAL\u0010\u001e4?󌳗\u0001\u0004k󕸁>\u0018PD񃶖pA򢇮Q\u0002\u000b/񔥲󪱲HPyTK[5񘨓j:F\u0013𽐠s0(󎶦*2g\t|\u000bK;𰬊8e󖊋[𳺈H\u0008:󜐢mdGs=\u0003T󾹥𝱃L6_\\򅘦q񟔂t񳯆A𜽎`qlF-\u00103򌊌\t\u0007򍀕􆩣\u000be򙠛񦭢" } ] } \ No newline at end of file diff --git a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs index da42d06768b..0e2712c3c7f 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs @@ -189,7 +189,7 @@ instance Arbitrary PoolRegistrationCertificate where <*> fmap Quantity arbitrary <*> fmap Quantity arbitrary <*> oneof [pure Nothing, Just <$> genMetadata] - <*> arbitrary + <*> pure NoPoolFlag where genMetadata = (,) <$> fmap StakePoolMetadataUrl genURL diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index ad672f32837..4e905ca4aad 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -43,6 +43,7 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime (..) , EpochNo (..) , PoolCertificate (..) + , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) @@ -223,6 +224,8 @@ properties = do (property . prop_modSettingsReadSettings) it "putLastMetadataGC . readLastMetadataGC == id" (property . prop_putLastMetadataGCReadLastMetadataGC) + it "delistPools >> readPoolRegistration shows the pool as delisted" + (property . prop_delistPools) {------------------------------------------------------------------------------- Properties @@ -1455,6 +1458,45 @@ prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do assertWith "Setting sync time and reading afterwards works" (time == posixTime) +prop_delistPools + :: DBLayer IO + -> [(CertificatePublicationTime, PoolRegistrationCertificate)] + -> Property +prop_delistPools DBLayer {..} entries = + monadicIO (setup >> prop) + where + setup = run $ atomically cleanDB + entriesIn = L.sort entries + prop = do + run $ atomically $ + mapM_ (uncurry putPoolRegistration) entriesIn + entriesOut <- run . atomically $ L.sort . catMaybes + <$> mapM (readPoolRegistration . view #poolId . snd) entries + + monitor $ counterexample $ unlines + [ "Written into DB: " + , show entriesIn + , "Read from DB: " + , show entriesOut + ] + + assertWith "entriesIn == entriesOut" + $ entriesIn == entriesOut + + -- delist pools + run $ atomically $ delistPools (fmap (view #poolId . snd) entries) + entriesDelisted <- run . atomically $ L.sort . catMaybes + <$> mapM (readPoolRegistration . view #poolId . snd) entries + let expected = fmap (\(c, p) -> (c, p { poolFlag = Delisted })) entriesIn + monitor $ counterexample $ unlines + [ "Expected: " + , show expected + , "Read from DB: " + , show entriesDelisted + ] + assertWith "expected == entriesDelisted" + $ expected == entriesDelisted + descSlotsPerPool :: Map PoolId [BlockHeader] -> Expectation descSlotsPerPool pools = do let checkIfDesc slots = diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 6f5023c75b3..1e85db63f34 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -767,7 +767,7 @@ monitorMetadata tr gp db@(DBLayer{..}) = do -- https://smash.cardano-testnet.iohkdev.io/api/v1/monitorMetadata -- so we need to recover/infer the delisted pools url. -- TODO: - -- - require the smash url to only specify sheme and host + -- - require the smash URL to only specify scheme and host -- - use smash servant types to call the endpoints toDelistedPoolsURI uri = uri { uriPath = "/api/v1/delisted" , uriQuery = "", uriFragment = "" } From fbb57d0144201828100d1d2788916f9e3a7503be Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 16:06:54 +0100 Subject: [PATCH 10/29] Redo how we report GC status of metadata --- lib/core/src/Cardano/Pool/DB.hs | 2 +- lib/core/src/Cardano/Pool/DB/Model.hs | 4 +- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 13 +- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 2 +- lib/core/src/Cardano/Wallet/Api/Types.hs | 36 +- .../src/Cardano/Wallet/Primitive/Types.hs | 15 +- .../Api/ApiListStakePoolsApiStakePool.json | 5040 +++++------------ .../test/unit/Cardano/Pool/DB/Properties.hs | 8 +- .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 31 +- .../Cardano/Wallet/DB/Sqlite/TypesSpec.hs | 9 + lib/shelley/src/Cardano/Wallet/Shelley.hs | 8 +- .../src/Cardano/Wallet/Shelley/Pools.hs | 73 +- specifications/api/swagger.yaml | 35 +- 13 files changed, 1701 insertions(+), 3575 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index b7fb7b5a025..bf26890c292 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -258,7 +258,7 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer -- ^ Modify the settings. , readLastMetadataGC - :: stm POSIXTime + :: stm (Maybe POSIXTime) -- ^ Get the last metadata GC time. , putLastMetadataGC diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index d171f558989..823ca865aeb 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -479,13 +479,13 @@ mPutSettings mPutSettings s = modify #settings (\_ -> s) mReadLastMetadataGC - :: ModelOp POSIXTime + :: ModelOp (Maybe POSIXTime) mReadLastMetadataGC = get (#internalState . #lastMetadataGC) mPutLastMetadataGC :: POSIXTime -> ModelOp () -mPutLastMetadataGC t = modify (#internalState . #lastMetadataGC) (\_ -> t) +mPutLastMetadataGC t = modify (#internalState . #lastMetadataGC) (\_ -> Just t) -------------------------------------------------------------------------------- -- Utilities diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index c420156afce..a3609e36619 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -69,7 +69,6 @@ import Cardano.Wallet.Primitive.Types , PoolRetirementCertificate (..) , StakePoolMetadata (..) , StakePoolMetadataHash - , defaultInternalState , defaultSettings ) import Cardano.Wallet.Unsafe @@ -563,21 +562,15 @@ newDBLayer trace fp timeInterpreter = do result <- selectFirst [] [Asc InternalStateId, LimitTo 1] - case result of - Nothing -> pure . W.lastMetadataGC $ defaultInternalState - Just x -> pure - . W.lastMetadataGC - . fromInternalState - . entityVal - $ x + pure $ (W.lastMetadataGC . fromInternalState . entityVal) =<< result putLastMetadataGC utc = do result <- selectFirst [ InternalStateId ==. (InternalStateKey 1) ] [ ] case result of - Just _ -> update (InternalStateKey 1) [ LastGCMetadata =. utc ] - Nothing -> insert_ (InternalState utc) + Just _ -> update (InternalStateKey 1) [ LastGCMetadata =. Just utc ] + Nothing -> insert_ (InternalState $ Just utc) cleanDB = do deleteWhere ([] :: [Filter PoolProduction]) diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index 415a69846d2..761e99f251c 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -52,7 +52,7 @@ share [persistLowerCase| InternalState sql=internal_state - lastGCMetadata POSIXTime sql=last_gc_metadata + lastGCMetadata POSIXTime Maybe sql=last_gc_metadata deriving Show Generic diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index 994ff557fd0..d34fa5299a2 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -199,6 +199,7 @@ import Cardano.Wallet.Primitive.Types , HistogramBar (..) , NetworkParameters (..) , PoolId (..) + , PoolMetadataGCStatus (..) , ShowFmt (..) , SlotInEpoch (..) , SlotLength (..) @@ -297,6 +298,8 @@ import Data.Text.Class ) import Data.Time.Clock ( NominalDiffTime, UTCTime ) +import Data.Time.Clock.POSIX + ( posixSecondsToUTCTime, utcTimeToPOSIXSeconds ) import Data.Time.Text ( iso8601, iso8601ExtendedUtc, utcTimeFromText, utcTimeToText ) import Data.Typeable @@ -414,7 +417,7 @@ newtype ApiMaintenanceAction = ApiMaintenanceAction data ApiListStakePools apiPool = ApiListStakePools { pools :: [apiPool] - , lastGC :: !(Maybe (ApiT Iso8601Time)) + , gc_status :: !(Maybe (ApiT PoolMetadataGCStatus)) -- Nothing, bc of Jormungandr } deriving (Eq, Generic, Show) data ApiAddress (n :: NetworkDiscriminant) = ApiAddress @@ -1397,6 +1400,37 @@ instance FromJSON WalletPutPassphraseData where instance ToJSON WalletPutPassphraseData where toJSON = genericToJSON defaultRecordTypeOptions +instance FromJSON (ApiT PoolMetadataGCStatus) where + parseJSON = withObject "PoolMetadataGCStatus" $ \o -> do + (status' :: String) <- o .: "status" + last_run <- o .:? "last_run" + case (status', last_run) of + ("restarting", Just (ApiT (Iso8601Time gctime))) + -> pure $ ApiT (Restarting $ utcTimeToPOSIXSeconds gctime) + ("has_run", Just (ApiT (Iso8601Time gctime))) + -> pure $ ApiT (HasRun $ utcTimeToPOSIXSeconds gctime) + ("restarting", Nothing) + -> fail "missing field last_run" + ("has_run", Nothing) + -> fail "missing field last_run" + ("not_applicable", _) + -> pure $ ApiT NotApplicable + ("not_started", _) + -> pure $ ApiT NotStarted + _ -> fail ("Unknown status: " <> status') + +instance ToJSON (ApiT PoolMetadataGCStatus) where + toJSON (ApiT (NotApplicable)) = + object [ "status" .= String "not_applicable" ] + toJSON (ApiT (NotStarted)) = + object [ "status" .= String "not_started" ] + toJSON (ApiT (Restarting gctime)) = + object [ "status" .= String "restarting" + , "last_run" .= ApiT (Iso8601Time (posixSecondsToUTCTime gctime)) ] + toJSON (ApiT (HasRun gctime)) = + object [ "status" .= String "has_run" + , "last_run" .= ApiT (Iso8601Time (posixSecondsToUTCTime gctime)) ] + instance FromJSON a => FromJSON (ApiListStakePools a) where parseJSON = genericParseJSON defaultRecordTypeOptions instance ToJSON a => ToJSON (ApiListStakePools a) where diff --git a/lib/core/src/Cardano/Wallet/Primitive/Types.hs b/lib/core/src/Cardano/Wallet/Primitive/Types.hs index 425e5d63c38..dd12cc39c04 100644 --- a/lib/core/src/Cardano/Wallet/Primitive/Types.hs +++ b/lib/core/src/Cardano/Wallet/Primitive/Types.hs @@ -145,6 +145,7 @@ module Cardano.Wallet.Primitive.Types , StakePoolMetadataUrl (..) , StakePoolTicker (..) , StakeKeyCertificate (..) + , PoolMetadataGCStatus (..) -- * Querying , SortOrder (..) @@ -615,6 +616,15 @@ data StakePool = StakePool , saturation :: Double } deriving (Show, Generic) +-- Status encoding of the metadata GC thread, which queries +-- the SMASH server for delisted pools. +data PoolMetadataGCStatus + = NotApplicable + | NotStarted + | Restarting POSIXTime -- shows last GC before restart occured + | HasRun POSIXTime -- shows last GC + deriving (Eq, Show, Generic) + -- | A newtype to wrap metadata hash. -- -- NOTE: not using the 'Hash' type as this newtype is primarily for database @@ -2012,12 +2022,13 @@ defaultSettings = Settings { -- exposed settings. {-# HLINT ignore InternalState "Use newtype instead of data" #-} data InternalState = InternalState - { lastMetadataGC :: POSIXTime + { lastMetadataGC :: Maybe POSIXTime } deriving (Generic, Show, Eq) defaultInternalState :: InternalState defaultInternalState = InternalState - { lastMetadataGC = fromIntegral @Int 0 } + { lastMetadataGC = Nothing } + instance FromJSON PoolMetadataSource where parseJSON = parseJSON >=> either (fail . show . ShowFmt) pure . fromText diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json index 2944880b1ac..40e453d7d78 100644 --- a/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiListStakePoolsApiStakePool.json @@ -1,6254 +1,4272 @@ { - "seed": -192646938319585121, + "seed": 2068412580338120591, "samples": [ - { - "pools": [] - }, { "pools": [ { "metrics": { - "saturation": 3.7921480426498393, + "saturation": 0.10063791170130454, "non_myopic_member_rewards": { - "quantity": 527020348225, + "quantity": 151141558091, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4633041, + "quantity": 771096, "unit": "block" }, "relative_stake": { - "quantity": 94.97, + "quantity": 41.89, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1887-06-29T11:00:00Z", - "epoch_number": 23703 + "epoch_start_time": "1871-07-20T21:35:00Z", + "epoch_number": 24007 }, "cost": { - "quantity": 254, + "quantity": 175, "unit": "lovelace" }, "margin": { - "quantity": 56.78, + "quantity": 29.46, "unit": "percent" }, "pledge": { - "quantity": 46, + "quantity": 182, "unit": "lovelace" }, - "delisted": false, - "id": "pool13y5k6n78s8x4wtn4nwu5nlrngczvytv5vrhlst5fqwtfjdxxs33" - } - ], - "last_gc": "1882-12-23T10:16:57Z" - }, - { - "pools": [ + "delisted": true, + "id": "pool1re0eggswxhempkjrfp0m5cs4g6mv5uhum0tvfn9fjqwezaqdddl" + }, { "metrics": { - "saturation": 4.6542492671556674, + "saturation": 1.4460900857225596, "non_myopic_member_rewards": { - "quantity": 549122955411, + "quantity": 989217369004, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12648688, + "quantity": 8322240, "unit": "block" }, "relative_stake": { - "quantity": 38.96, + "quantity": 16, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1877-03-01T00:46:00.91299904808Z", - "epoch_number": 22664 - }, "cost": { - "quantity": 253, + "quantity": 183, "unit": "lovelace" }, "margin": { - "quantity": 38.68, + "quantity": 6.98, "unit": "percent" }, "pledge": { - "quantity": 162, + "quantity": 108, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "\r\u000f󷢚\\\u0010XQ2B\u0001>NFj\u001aT~].'\u0000\u0018(\u0018X񹮬󞢷\u000eW\u0013𧕓񅃊񈝤r2\u0000\u000c򸘼uI𖅌+t5\u0010\u0013VwT\u0007V$\u0012\u0004W򜖷\u001d87[𳐜𨕋]\n𢭴\u0004\u001el", - "name": "I񓉬+𷭔񏯅k兹13񸙤񻲧쥴 U\r\u0003a𦹜hWMD", - "ticker": "V񲞕񹝕z5", - "description": "\n-򑛟򮕖\u000b󃳩7\u0007>;񀥘󔗹u􆸗񁺲iX*\u0000\u0014cy}\u001c6y=e8vW󄸙򷙿:F\u0002O\u000e6\u000e*<\u0005\u000en 򖙂\u001d𵩖n^B𢮱򖎯+d;󰷓\"h񖠩򱺵񿎅S?󀳊8󣖪>Die$neA\u0003g o󷨖xH\u001f\"M򜼮:i{" + "homepage": "\u0003񙇢S\u001a󇂾fdv𒁇\u0004Z|j\u0007rz\u0006Qꮝ􍲕{[戼XSu\u0019f\u000c>b􊚷rpX/$Y𸤏𾁵􏰪%A󺃄h򪧧A{?\nf󄥌'~l\u0002L6\u0016yo$\u001ax𼖣&􅄴_O򴩇^nZ", + "name": "\u001c\u001a򫭰IW󍏇\u0016", + "ticker": "󠽤\n`d`", + "description": "O}򣺲򝚾񨝡\u0019\u0003\u0005\r򏉽\u0016X򳊁Wb6\n\u0011&\u0005璻PQ%𧸉^~M<[\u0015e(w`_WY\u001bVzy\u0000􊒠S\u0005\u0004\n𤴢%\u001a2&\u0013!񝢉_;5Zq\u0018𬭯򱪠^D𡅢񮅽򬌭,󜖉)򠘭b&K\u000b􏥐ag\u0004񩚰/!\u000e󝐴m12𡔭\u001aQE񊈴,a󅸯\u000f򯦏pV\"G\u0001󃝠Gh򸷖.񱪖(G&\u001b򠐫ೡ\u0004#𔾶hW\u0014a6\u0015`񌋓tB1|[Rk񨗂mM\\LH\r[}󜄻N\u0005+G󃆨󼫆𨇄򽢱򩨾󂨌" }, - "id": "pool19f7837kadvc69rp59l893083tanudat0qxwyc7xmgt68u8a0ufa" + "id": "pool12zrsgh8m96j2dgc37hctuulrpsgwrnx3qwnnglw6vmjwwwvn6nd" }, { "metrics": { - "saturation": 2.056673543665361, + "saturation": 6.693835861161679e-2, "non_myopic_member_rewards": { - "quantity": 666622673248, + "quantity": 797066414135, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19482848, + "quantity": 10102242, "unit": "block" }, "relative_stake": { - "quantity": 94.2, + "quantity": 76.85, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1867-02-17T11:49:19.539245232973Z", - "epoch_number": 9307 + "epoch_start_time": "1889-12-09T03:32:50.95358664512Z", + "epoch_number": 19102 }, "cost": { - "quantity": 122, + "quantity": 2, "unit": "lovelace" }, "margin": { - "quantity": 94.43, + "quantity": 19.71, "unit": "percent" }, "pledge": { - "quantity": 45, + "quantity": 141, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "+\u0002󝢱T\u001b𹬦\u0007U񱠖R", - "name": "cH񗲅\u0004Ad񜝖򚽂", - "ticker": "𻍈\u0018\u0012\\" + "homepage": "򼏉hZk\u000e4OrW𸈅\u0016\u000ekf\u0001V-ctcaw3/\u0004\u0015?jR𘊄K8𽙍󈽆--𤁻򞕆x𱂯:d\u0011M󒴔\r@", + "name": "󳐓gb󩮀\u000c>L^X\u001ct\u0012r\u00136h>\u0017򮜱񧾳U7r󱻺^B\\󕽚򀚎\nyK!Lk<\u0017<󅦌+񖷭𥲋I\u00177\u0016k𽚥", + "ticker": "H>f\u000b\u001e", + "description": "𔱆J򜫊h񍃈 t[\u0017*n\\\u0001H򓑛𽮪:9c򣶵Z򜲃󶇣bR𩽴\u0007񇕵\u0003nAkIꄁt󜔧\u001c^ O𕘥\u001e\u000b']𛬗\u001b󪁻䀹}\u001e򊚔󤞭uuSkoK\u00100DG\u001d-\u0013\u001e\u0017wdc𺇑\u001c\u000e䳯^o𺝔pH󷲯𦱘䕭ENlM5~\u001d񖆢3H\u0019򾹙񞖮𜖒_𴥗m/3󆥶nT0Q􄀢wMrM\u00130Kj󺚄k\t\u0017򱂵\u0006𯐈\u0003\u001c]\u000c\u001dD\u000e󐓻񇞆\u0010񀈝h񭟆𱨸#l]I'uZ\u0001'u󭾭T\u0018=mf𠖚\u0005F%򬌔􎘅.\u0006󞨕" }, - "id": "pool1yg4gceqrpntv827mv843rlrj52fgl5dagpkzxe3pwnld62k26nq" + "id": "pool17ve3mx20ne22pxrkh4h38kkvzda3uxhaq59t67nh6l74yet9yjg" }, { "metrics": { - "saturation": 3.7790963729179214, + "saturation": 0.5478744614415704, "non_myopic_member_rewards": { - "quantity": 479785678413, + "quantity": 731711621990, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7982450, + "quantity": 12148341, "unit": "block" }, "relative_stake": { - "quantity": 0.18, + "quantity": 26.66, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1868-10-20T09:00:00Z", - "epoch_number": 20773 + "epoch_start_time": "1864-05-21T06:58:58.019169008053Z", + "epoch_number": 28412 }, "cost": { - "quantity": 51, + "quantity": 152, "unit": "lovelace" }, "margin": { - "quantity": 1.29, + "quantity": 46.28, "unit": "percent" }, "pledge": { - "quantity": 100, + "quantity": 91, "unit": "lovelace" }, - "delisted": false, - "id": "pool1jdfzdh6c9h7y0fdj4cd4umyphnnpwhwes7pegv9cl8j2g0e6cr2" + "delisted": true, + "metadata": { + "homepage": ".􊼶3:O򣮜n񂙥Y\u0017񤟮󵓎:`𶕖b`!fo9<9\u0006𲄒/\u0017#\u000bqbz)k'\u0001.𤖀\u0010\tuO|Ps򌎔z$", + "name": "*b:D$헓$M.Ak\u0002\nw\u001cj_y+6\u000e:\u00074򭙭n\u0010\u00173\u0008򲭳Y񍪩", + "ticker": "}A$y=", + "description": "?\u001cm\u0015\u0002\u0016>h𚓋4\u0005ᨪ򳝜\u0018b_\u001aE-῍\u0018\u0005J\u00185􅍍D@𱯘򷿢]i$w&'\\Z\u0006zUzMt3d\u000fJ\u0017E)𔁃񏺇SV򰃵S" + }, + "id": "pool1dpe8vn2fsx7lwxp2ha78fmjrk448pg6jjkp6x3nznlkwjuxl6ns" }, { "metrics": { - "saturation": 4.767801844425363, + "saturation": 3.798173693540594, "non_myopic_member_rewards": { - "quantity": 865887392747, + "quantity": 461786696091, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8387533, + "quantity": 11860863, "unit": "block" }, "relative_stake": { - "quantity": 85.54, + "quantity": 88.41, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1893-10-13T04:53:52.94615777101Z", - "epoch_number": 19382 + "epoch_start_time": "1874-04-24T11:00:00Z", + "epoch_number": 22724 }, "cost": { - "quantity": 163, + "quantity": 45, "unit": "lovelace" }, "margin": { - "quantity": 85.78, + "quantity": 36.6, "unit": "percent" }, "pledge": { - "quantity": 101, + "quantity": 117, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "𨘱3𧠩_jVuex񅣿\u000e?y\u0013㵗w1\u0012r򐖾", - "name": "e-n񁂭wBSO0𔯦C\u0001d񑫓_򛉂񔳉wv􆮎u+\u0018h\u0008O\u0016N򻜂PC^񏐀2{\u0016", - "ticker": "\u00076!.c", - "description": "\u0011\n\u0018򲖼𝐥@|񌷆\r񕙣@\u0014w:9󥎏3nPO򧵘m \u001e3s򤗇\u0007#U񯙒z\u001a>򂺀H\u0017\u00030򧽵􆐶tr 󂗡\u001cw󪟒:󦨲5\u001b\u0016񭃇UHLv[.􎝟A𲴌)𐛓g_'y񆂞{!\u001dl \r\u0016F\u0012&XJ\u0012;D:򿿕=Rm򵉘\u000e{S\u0010񉭢\\GK𡽔+{\u0002KwJO\u0006<\u000c𶼹𽙓f賯9񦿌򺷸􌲬l򑙾\u000f򋞚$fq\u0014Uh𱦸8񂲅t*|𨧫D,\u0007\u0000i\u000ce\u0000\u0017\\P|󷛥V^_h񺸶 񦲼o2c?3𣥸򄙇h򊕰\u0010񺗧B\u0011L|V񶷗Ox}" + "homepage": "񟐟z򗤔r\u0015P򵺩񞨇񫥗􎡿28/\u0004\u000b;VX<񬼽J~f^j\u0018C-򿯘\u0000󶍆|V\u0017l\u001b\u0018󟰏򠿭]Ō\u0013\u0000b\u000cꐣ5\u00198e󮒩b򎯌", + "name": "L򼒅\u0008Wg%󘙤S󎒞Q|P_ZX򗅌\u000c(.", + "ticker": "/4?K񚞇", + "description": "tQ\u0001PPn\n􁎰Wd6󓇝򕋧GVk&qi𳃉񀛽𝻳􊌀🬍\u0013m^\u0011i\u001b󑖼򏟆󠭎DMW\u0000:@Q񨋛\u000cSJf񐖺u֍񋓥Jnj&;🭩򾂳s3rX% c𫨡mFm>J\u0000n,9񳔳򌗢󹞙9򈂢\u0010􇘐󤍵.AUiHQ\u001e-s\u0002󍬶IV>8T𳫤Q|'񩵝z)򁋜𾏶\u0013򻎊|&򧁘񝃜]\\\u000eD󾥀Q\u0011c\u000c𮔢o񾓰񟤄|񴪊6P6fp򱬰q\u0017\u000f$M" }, - "id": "pool1d7u0898eg4c57aggnafaul5lehn8nj3enpx74d87z0lvqcrazvx" + "id": "pool1d7qvcc7ga6qsw7s0f80mdlvmhhj58t5zuwd8lhe2hy2nsqlufd6" }, { "metrics": { - "saturation": 0.2934822079544708, + "saturation": 4.231916765266923, "non_myopic_member_rewards": { - "quantity": 921029940368, + "quantity": 684079915532, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2587162, + "quantity": 6769538, "unit": "block" }, "relative_stake": { - "quantity": 55.99, + "quantity": 68.01, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1881-01-14T08:00:00Z", - "epoch_number": 7787 + "epoch_start_time": "1892-12-05T00:00:00Z", + "epoch_number": 17254 }, "cost": { - "quantity": 228, + "quantity": 129, "unit": "lovelace" }, "margin": { - "quantity": 66.76, + "quantity": 70.8, "unit": "percent" }, "pledge": { - "quantity": 32, + "quantity": 62, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "\u0002SN\u0019fs\u001f\u00198𿭊U򭠒\u0004O>.J%\u0008y\u001eU\u001bI򓚟Plp*񙄌 ", - "name": "\n񚬄=M\t5d\u0019\u0007\u0015>_\u001f\u0006E'(3\u0014\u000f󽵲64󉇷񌈙)Cr\t񌨯򝱳󆉴}fY5𵃍\u000e0Y\u001b(\t\u0001k󠭖\u0007a", - "ticker": "cV\u001a򒑦", - "description": "񛆈}O1m\u0012" + "homepage": "F/jhC\u001a$b'~󤶓F)EH\u000b􏠏uH5n\u0015\u0011\u001d򶥓\u0007QN񜅡>򈌞𻐽$\"󋬩7u\u0002O󲓯N\u0007h(C񫪢󟪍𻽬EcS\u000e3\u0006\rm=󪄶\t󤜳a􂠪", + "name": "\u001dk񤐠\u0019O|{D\u0016\u0011\u0004{􄻟󙽣8𝶞", + "ticker": " 񆱗#", + "description": "𷦌~c\u0015\u0019򋗭nT\u0016j7򕐲~)饻mW\u0008DO|26V\u001f\n\u000c]vds\u0005\u000c󾙒n5\u0004fiM(\\&\u0008㈻Ur1򍔒)g񏹷𛷳+\u0003W򖋽S{D#HMn$򍦣𛡂U`q7e\u0010<\u0006" }, - "id": "pool1n4tddjtxykt9tyfjc49enlcg6gr5zartpk748tgph7grc4nd8v3" + "id": "pool1xhc85e7ppe624yawfer5xskqnpq2x6ddyu5z77tc5rfqs6qrrjk" }, { "metrics": { - "saturation": 2.9286522805411295, + "saturation": 2.0552369596455664, "non_myopic_member_rewards": { - "quantity": 42114145440, + "quantity": 721200472327, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14154536, + "quantity": 15763097, "unit": "block" }, "relative_stake": { - "quantity": 9.08, + "quantity": 53.99, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1891-02-26T04:32:46.691592923986Z", - "epoch_number": 27177 + "epoch_start_time": "1879-05-22T19:39:50Z", + "epoch_number": 7974 }, "cost": { - "quantity": 0, + "quantity": 19, "unit": "lovelace" }, "margin": { - "quantity": 48.37, + "quantity": 35.99, "unit": "percent" }, "pledge": { - "quantity": 19, + "quantity": 49, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "񊽫x)񤉕,񜬄򻑡wYr\n\u0001p!\u0015yr\u0015>2P򭨢W񶺝\u0003x5_󾥤a\u0011`\ny\u001a􉋜5y񿲚4,򯣌#4_񺞃@𑏌c4X}\u0002o𪛖\u000c)\t\u001b󪸄\u0014dw󈡂򑶿5񳚧\u0005\u0013T$Y^󮏘b\u0016+L􁌏q\u00029񯌴d.", - "name": ";fB4#`􎰦-\u000f\u001c\"\u001c}󏀜/H\u0013헨#", - "ticker": "\u0005O󊡘\u0014\u0017", - "description": "%4򎱶񇵣󌊓x\u0005t򏹧\u0016\u0019\u001b0O6򿶣񠝃񚋵fjF\u0007q=\u0005󸉁񈇑x7\u001c𑠣I#MZj𻀫B󾁻a#󬴿🼀ecqS 񦀓\u0016\u0001𿲅\u0004+\u0006Gj\u0016k􏹭xiFf_a🽌6Uv~\u0003􌄮򩤧𸠜񇬃\u0007選񏱂\u0000oD#\u0014FY򞿷q\u001e.\"\u000bw" - }, - "id": "pool1le9thx48dtyu23kx5c3zf57j756sn3z4pwtjkj2f2sd9yx4gp6c" + "id": "pool13s2cqhgcp3pv6av3904pety6ayhj4nretduq4eg54f3gwpxpd7s" }, { "metrics": { - "saturation": 0.12031882893309698, + "saturation": 1.6581732967242424, "non_myopic_member_rewards": { - "quantity": 672421328899, + "quantity": 768728279778, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7929609, + "quantity": 19770810, "unit": "block" }, "relative_stake": { - "quantity": 21.33, + "quantity": 73.92, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1876-03-11T05:00:00Z", - "epoch_number": 23868 - }, "cost": { - "quantity": 151, + "quantity": 21, "unit": "lovelace" }, "margin": { - "quantity": 12.32, + "quantity": 23.78, "unit": "percent" }, "pledge": { - "quantity": 11, + "quantity": 24, "unit": "lovelace" }, "delisted": true, - "id": "pool1p3f4qs3r5k7nxd5me4zkpn35a29gpjsx66pxrhzszlsgg7efcz9" + "id": "pool1a5l6van2npw528jneejy79efwgka9txwa9mv27lnfl8xx7rp4ar" }, { "metrics": { - "saturation": 3.8345091609412094, + "saturation": 0.8490618200968297, "non_myopic_member_rewards": { - "quantity": 834794552994, + "quantity": 797103977115, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21386822, + "quantity": 11953307, "unit": "block" }, "relative_stake": { - "quantity": 82.88, + "quantity": 13.49, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1864-10-31T03:38:36Z", - "epoch_number": 30241 + "epoch_start_time": "1887-04-02T08:00:00Z", + "epoch_number": 25151 }, "cost": { - "quantity": 116, + "quantity": 87, "unit": "lovelace" }, "margin": { - "quantity": 32.27, + "quantity": 99.13, "unit": "percent" }, "pledge": { - "quantity": 120, + "quantity": 182, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "\u0001\u0011 񥣵n\u001cI(\r𯚞񦌍\u0013>S:tGbxB󢣇~򱮽?Y𶭾X\u001bc=򧰌$d5(\u0003򚰲񌡥([;&IP񋸑񆵝񐷧A\t𯂙򮭸c𭋩\"Lx^󔉄\u001a􁃟jk\u0014y\r򳊸{9􁡍𾉁󥶈", - "name": "q񘊽 \u001e\u00182D\u0019񐱷\u001c~t<\u0017ds", - "ticker": "𚳣\u0016l🪱\u0013p\u0011񥴂\u001c\u001b,\u0016No+\u000f󋱄񤝒\u0003\u0008\u0010k,\u0001\u001cSmf.󕤄򆂠O􊂣l\u0012\u0000k\u0018\u0004U(\u001c'񅎷\u001e񔈫\u0017 \r%򈚧R򎡟 O\u001f󨂲񅒪,􄥀r񘌇>\nu󝸼$n_\u0019\u000ck󭳯u\u0016#\u000e-\u0006\u0013eo񲏂t;=l\u0018Ⅻ򵉋\u0001\u0017iP=`j)K񬁆ɂ𲊒򷛊\u001d\u0016+II𮉒$}󅖜\u0008/0􈄣\u001e𜹱󧆁Q\u0019]h\u0001m]򃣾}=𨴠1\u0007W\u000b\u0004\u0001l(l*%}sPOb\u0012򤻐\naG\u0003\u001f󚙉2G󺥙O\u001e6\u0001" + "homepage": "\u0010a1\u001fx91uk+n񟶱\u0002󇺢T񻱏~𾣆7\u001e9/\u00001&\u0007N󁚪𙺗\u0008b\u0005\u001cQ򘑈󥡫\u0003Stesbp󋁹P򽕇jC񓑏Y󊞢\"m䔶𤈺?󌙫\u0014b𳪣h\u0016񹷜6^p𽵓󼼱󯐲\u0005泄yrpO\u001e4Bt~T\u0003𭵤>L\u0011\u0016~whtxtl\u0011z򔊶Sa;", + "name": "s\u0003\u0001b󙠼𫇩i,𱻕yAx\u001aH򑌒=HZ]񖭼񡇀\u0006󂪾,%\\򿥩\u001b(\"%S.󿧲򡗝\rB󪟚R2~]G𕪆\u0015򥪃", + "ticker": "\u001b\t9L", + "description": "\u0013\u0010*J򞴗-9󰸍򢷨o񎍴\u0013򆳚pm򃚾/`\u0010dzs\u0001d\u00174t𞪏󂾛n󠺬H񗫰4b󯿫C򴌀򣞷%\nkpj\u000f%2O\u000c6,X-Sy\u0018Pn󷸕y+𳔈k\u0007𷽲x񊸼򓭰𱅎\u0003\u000ch񘁼g*𲆫M[b𸥮񎩏#4j\u0011H񗂃PDQ􂦍HFm7W\u001a񱚰}:󺇴9\u0006񯀌\u0010󵲃\u0019=A\u0015x\u00012g򭍾.!.A\u0005P\u0008%鱵+󶹵Vq\u0004y򑛋J_\u0012\u001a^2uM񤃤zjD󼭋1\n\t񬂋<\u0010򎖽3򸺊󏤨Z󼯽.n\u0012\u001d|􁍣e􌐀#𶛖򲜭\t츙N򼡐󞒷󢙕W󻧡u𤓇􀜻m\u000eHQ\\󴶼|+\u0004\u0008󛹺\u001d򜵶%\u0007$" }, - "id": "pool1rxktdk37udf9zuq6xw8jt4xts4zspurkmav3mplz0y02spa85gl" + "id": "pool1judwh8lw9xfk87vhs90733kzkel50wrsc6edvemqz92s57dcyu2" }, { "metrics": { - "saturation": 1.0799814730338713, + "saturation": 4.900887254999616, "non_myopic_member_rewards": { - "quantity": 504952717537, + "quantity": 298484035257, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8982202, + "quantity": 16898, "unit": "block" }, "relative_stake": { - "quantity": 87.3, + "quantity": 37.87, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1903-03-07T22:00:00Z", - "epoch_number": 17760 + "epoch_start_time": "1897-07-16T06:18:56Z", + "epoch_number": 24320 }, "cost": { - "quantity": 182, + "quantity": 4, "unit": "lovelace" }, "margin": { - "quantity": 99.46, + "quantity": 91.23, "unit": "percent" }, "pledge": { - "quantity": 120, + "quantity": 112, "unit": "lovelace" }, "delisted": true, - "id": "pool1fcq3732yj54w0efd8hz7ehs6zz9gx2snp2clyykwz7y42dpya4d" + "id": "pool1zjd76hgn83qfqgxj8mfch4q8aulqjxm6yr0tuf37wczj6zdh8m0" }, { "metrics": { - "saturation": 2.8950433542548493, + "saturation": 4.597363391757413, "non_myopic_member_rewards": { - "quantity": 236055041686, + "quantity": 499621119513, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10264643, + "quantity": 15123365, "unit": "block" }, "relative_stake": { - "quantity": 21.63, + "quantity": 9.21, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1886-01-02T10:00:49Z", - "epoch_number": 20799 + "epoch_start_time": "1858-12-23T18:00:00Z", + "epoch_number": 9610 }, "cost": { - "quantity": 91, + "quantity": 185, "unit": "lovelace" }, "margin": { - "quantity": 31.19, + "quantity": 74.03, "unit": "percent" }, "pledge": { - "quantity": 217, + "quantity": 61, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "wC󪐅򝲀񾽐d\u000f;*\u000f15r\u0004\u0017c!񤚁+(/\u0011򴔈W5fz6򨛌y񄠆򆊹(珆+e򈥚3z\r\u001f\nOk5𳹍>w\u0015\u0013񂤊򔥂A򒇺񔞱󸱿P.\u001c" + "homepage": "򚟣󽔖𞼚\u000e`\u000cz򤈫I󬶘[#Q\u000e򢱆<\u001d<\u0001u񵕞&󶫤G#\u0014򢾙򽙚\u0008 񂀕q=`!\u0019", + "name": "埔\u0000󇁯|\u0010񽿊\u001b<\r0Gr_򯿁T񯡴\u0012]\u0018hydE+񂩌u\u000eO󃿣I7lU􀂥^Pp>웑2񯩂+", + "ticker": "l\u0004l(", + "description": "O\u00080xhx/\u001d_F\u0012\u000c@s]񥵤(nH6T󍥃p𺍳\t0JT㔮O!\u000e򜗭h&3i\"\u0018\u00030FV<񛎦\u0006G=\u001bZla\u0005\u000cM\u0016󱂓󹝸=\u001d#\u0016짻\u0003m8o򙞾򾶥!H#򆛣>>:.\u00157\u001c򛐔򅗩<\nbkq\u0000b(𶷌\u001b◿\u0004\u0006򵋖8hz{t\u0010!򅞃[z}>𤗌񹦞" }, - "id": "pool1sj0d7fyhflp84ew5da4gkzegfvpjknuj48mxrdrcjec9yr32wcu" + "id": "pool1g6ujwflxqjjg2zed0nplcj4fm7jqw0p08fjty467zymp640y478" }, { "metrics": { - "saturation": 1.5798942855793807, + "saturation": 4.560649805609918, "non_myopic_member_rewards": { - "quantity": 331745384962, + "quantity": 933719623424, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10777437, + "quantity": 16013501, "unit": "block" }, "relative_stake": { - "quantity": 59.12, + "quantity": 22.59, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1892-05-17T12:49:09Z", + "epoch_number": 14261 + }, "cost": { - "quantity": 47, + "quantity": 128, "unit": "lovelace" }, "margin": { - "quantity": 75.29, + "quantity": 59.38, "unit": "percent" }, "pledge": { - "quantity": 151, + "quantity": 81, "unit": "lovelace" }, "delisted": true, - "id": "pool1mejnh02th3fsmtanh34htvk44ptzng49y2x2wh8s4xf7qd7je94" + "id": "pool1vycza6uesdlxvp0aresc9y3s0mlgsnnfmq6qflve5cq26t8uqle" }, { "metrics": { - "saturation": 5.516934761390535e-2, + "saturation": 3.8012087711259785, "non_myopic_member_rewards": { - "quantity": 421091841302, + "quantity": 71466564545, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19556594, + "quantity": 18877743, "unit": "block" }, "relative_stake": { - "quantity": 32.17, + "quantity": 97.48, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1865-06-14T05:59:23Z", - "epoch_number": 23798 + "epoch_start_time": "1896-12-13T02:52:29.899035567014Z", + "epoch_number": 3135 }, "cost": { - "quantity": 43, + "quantity": 50, "unit": "lovelace" }, "margin": { - "quantity": 48.2, + "quantity": 65.84, "unit": "percent" }, "pledge": { - "quantity": 28, + "quantity": 180, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "|x^?eicQB󢃎%D?\u0008\u001f󪘏']\u0015t󭨔P[񿡼򩘙򫄒(w󄰎𥇃K-V)$򌴘\u000e򺦧_nE", - "name": "󉆺󆍸V󱘲jhz\u001f򪄘E\u0002񚜎󘆞𩔊񌄻]󕧃뙑\u000fa&o򤧧-I'\u0007🈍>򏩪", - "ticker": "\nF~", - "description": "\u00158bzoU\u0008O^򼥟6񁴅\u0008z\u001a*)\u0013\u0014*d%\u0012\u001c򝫫\t[񩮔񹚣|\u00066򝻤A\u0013\u0003V\u001dI\u001dYFv񆀣􅗖짾BB󕤋󿤣\u001b\u0006󔽦\u0011\u000cbW?!񏅀" + "homepage": "񍷢Q\u0008e򚉗Q~", + "name": "\u0003\u0000\u0015􅩐H@_9*P󆅷", + "ticker": "Vn򩸜\u000e󹒼" }, - "id": "pool13hjvch27n50tmqzl0es5ycch4nxtnfp6ekq2f5y6qn0yyu4qs0z" + "id": "pool12jwk5709e6cvdvq4vg7z3as57mcxvhrw4k65uzprxv042mekjml" }, { "metrics": { - "saturation": 4.422753138945762, + "saturation": 0.9756006870848394, "non_myopic_member_rewards": { - "quantity": 743639065332, + "quantity": 7160737728, "unit": "lovelace" }, "produced_blocks": { - "quantity": 594050, + "quantity": 3115405, "unit": "block" }, "relative_stake": { - "quantity": 75.87, + "quantity": 45, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1885-03-07T03:00:00Z", - "epoch_number": 21002 - }, "cost": { - "quantity": 6, + "quantity": 251, "unit": "lovelace" }, "margin": { - "quantity": 74.75, + "quantity": 5.46, "unit": "percent" }, "pledge": { - "quantity": 47, + "quantity": 33, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "C\u00154󶶣x+\t񓌫w񤮃𯽻򛊨ccd'\r\u001fTm򿪗L~g񈽁k2񵲹򦔐S;󉁦<\u0006\u0005􁿫\u000eVx󃯽\\󞼴", - "name": "񢌾\u0011[+{\u0007񞹓ᆘ", - "ticker": "\u0005\u001f^", - "description": "$򌜄󧇓\u0018񚕌\u0014XT􂋾d􉍋񎑘\u0011g3𒯙񒁛򡋒󘩤GN\u0013SN𨙼𿏻񾑺\u0004 }\u0001V\u0011U򽰕򨉽󄨵\u000b\rE^+򶚴:\n𻳢IM_񍸏\u001f\u0017pf~ju'm\u0016n^􂿐d\u0006𲰘F򗾰𤐤񁄃\u001d#𪵡\tn\u0011]Cn񜤔\u0015𲬓qd,&򳤶S'v&'(?{[\u0000򋐎~\u001a" + "homepage": "\u000ek򅴱++5tR8J􁆩񾨮7\u0014\r𜧮򈼵\u0007&t\u0001\u00074\u0008򁇾~<\u000cVf򕟳\u0016<󛔷\u0005\r񾣎zR\u001f򰴀񞿮t'W<|q򦏆򄣍uy\u0014[􌃒\u000e+\u000f\u0000\u0004\u0010󡈄L\rq\u0005' OHM􅧫$f񶡜i񩕓\u000bY=HvQb򒱵r0c\u0015U9\u0005[n1L4xK", + "name": "󠽠}\u001dk.<򙶚\u000f4\u001b򵷉]񭖌", + "ticker": "\r\u0001Q", + "description": "8o.['b6@;9񄺗#yZ\u0016\u0007l9A{\u0018NQ񈫟D t򥷰[\u0012􄚜O,/1􇬁񥘡2~q񜘆$5\u0003c򶺂dVx񜶖𩦌C񸦢򷡞}\u0007񣹍l^cy\u0017" }, - "id": "pool19khvt8q3n2d0f3q9px6hz57ufpcvxjg2x9st4vjxdzefwkukt2r" + "id": "pool1wam7syqu9f05gceseuzx5azldpauykpgw7p3su3g7vexv8c5m3e" }, { "metrics": { - "saturation": 3.2989719945148814, + "saturation": 4.826753495946856e-2, "non_myopic_member_rewards": { - "quantity": 915598465447, + "quantity": 12194687205, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16775928, + "quantity": 12084764, "unit": "block" }, "relative_stake": { - "quantity": 84.2, + "quantity": 33.57, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1905-09-08T04:00:00Z", - "epoch_number": 5669 + "epoch_start_time": "1902-08-27T11:00:00Z", + "epoch_number": 11109 }, "cost": { - "quantity": 111, + "quantity": 128, "unit": "lovelace" }, "margin": { - "quantity": 28.74, + "quantity": 98.56, "unit": "percent" }, "pledge": { - "quantity": 89, + "quantity": 33, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "󤻻6\n=\u0002񃥓񓪪\u001b\u001d񥂶N򜝭pR'_󧑹񺀊`\u0004~\r{L+'󍅫\u0011,#-,iRB5􊆇'iM;𮬴7\\T\u0005FP]\u0015&.#󾞭2zg%c𶏐zB9", - "name": "\u001f񧮝\u0018)𦴮!:􀬤W\u0016D󚙝", - "ticker": "H񱲨W\u0011", - "description": "c&[򓸐\u0005򖌹𝎜\u0004\u0001q\u000cR󊪁0򜾜L4$󖁿h򁊓(񈷎\u0008t~O=\n(Y$\u0010忈*E\u0017\r-C𾳠\u0016,󏊶Tq򒧎\\󬨃񊓇z\u0012\u001be:򨿟#+\u0007\u00050𽿶󢑆󀹨,-KQ.1󅉳^񊆫\u0017\u0003\u0002\u0005'I꼙V\u001f\u0012\u0012rP򇼑!GL\u0018󞎝񼰾G\u001c򼜓zXc\u0000\u000c^𜚾󑰚󂘴gUMt􆬿\u0019~󖄊)򲍬\u000f" + "homepage": "󤐭󣗛\u0014 i򽙨\u0017B0󲮱", + "name": "|", + "ticker": "󓌑/-򶋝q񝄒5&?𵃕vzDX][􆠾\u0013񨼟𿔸񰢎k󝙡rR/\u0010򛝭^N8*񊵰Fb\u000f>\u0014󀳙\u000f\u0007𱂭󝬖m" }, - "id": "pool1vsrm8a5hqyzzklhmuhshwc9j2qwfsjtr36fu5xe04l08vam6pq6" + "id": "pool14pzamk4w290ny80d09gcmqqgqxr65qzdn9chrthlh8z5qnse76l" }, { "metrics": { - "saturation": 4.376355905604993, + "saturation": 3.430891809613163, "non_myopic_member_rewards": { - "quantity": 647379316315, + "quantity": 629506276593, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11738582, + "quantity": 6894338, "unit": "block" }, "relative_stake": { - "quantity": 19.1, + "quantity": 84.51, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1863-06-21T08:00:00Z", - "epoch_number": 21667 + "epoch_start_time": "1881-09-11T21:03:57Z", + "epoch_number": 28523 }, "cost": { - "quantity": 211, + "quantity": 31, "unit": "lovelace" }, "margin": { - "quantity": 57.09, + "quantity": 3.1, "unit": "percent" }, "pledge": { - "quantity": 76, + "quantity": 144, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "󵧁ZW:4>𦎐:\u0014\u0010D?Fmh𪏮fo\u001d񓬫󄦪 le\\𳕉\u0005P9\"l\u0018\u000f+}Yp\u001bW񟠱%iQ~\r\u0002t񞙎cV\u001b_\u0006\u0008\u0003A@F\u0015򔥶+󖁯󿸩ᙪ􊉎a󇀯\u0008򕢬󠸩G295𬌥E󾯋vp㐨\u0003At\\𱫉񴢶", - "name": "m\u0000򫸈c򑧏𵌨3\u0017>h#yH\u001c󵀭8+O𧴦z\nf[Qz\u0003\u0004 F鷯\u001d\u0018𚟈Tf\u00156", - "ticker": "a򰚱K(" + "homepage": "r򚞣􅗖󋹛򮡈(\u0013", + "name": "𶻬P󒉋\u0017Q,z\u0014\u0008򋄫", + "ticker": "U\u0014NM", + "description": "`\u0003L\u001fm+9\u0007g\t񛾕&>tGJ\u001e𑉧\u000ceP\u001c񲻮D\u001a񀔌𬊫#:#񺊘\u000e~[-𷰠񓹢\u0016\u000en\u0012\u0000_-t9񊲙i3𬾭𦁏\u0002_mzfBC\u001aH\u0015%\u0010nksu\u0016%>9 \u0000ipFC𦖙\u0011󇅍U " }, - "id": "pool1l5vqxpqhwnckdnxnnmrxrcr2c4vky7m2jx4xkycdcls0xlrhmjc" + "id": "pool1pxxlllhf6unam05a4sf76alvuncl6vx0ywp3j2y90zksydjtcgy" }, { "metrics": { - "saturation": 4.320402323499496, + "saturation": 4.259674776198254, "non_myopic_member_rewards": { - "quantity": 543936833462, + "quantity": 417714392243, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19693351, + "quantity": 10027698, "unit": "block" }, "relative_stake": { - "quantity": 79.57, + "quantity": 12.04, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1906-10-01T23:56:59.914582724569Z", - "epoch_number": 25677 + "epoch_start_time": "1899-01-28T20:55:39Z", + "epoch_number": 9861 }, "cost": { - "quantity": 18, + "quantity": 195, "unit": "lovelace" }, "margin": { - "quantity": 6.65, + "quantity": 39.6, "unit": "percent" }, "pledge": { - "quantity": 53, + "quantity": 171, "unit": "lovelace" }, - "delisted": false, - "metadata": { - "homepage": "U\u0007lN\u0010^\u000bS\u001a򹑃ma\u0015𝯅S'dkL򚖼\u0007\u0001=󳓗5uM򾥅\u000c\u0019t𯟄:5󨇈󑝺񵎨D񘆏\u001fE\u0012\t񥯢%w񶚐󭣟", - "name": "r󑝟~k\u0012E󵷘;t\u0001󺋟\u000f򏴕-𦎠Zwb0c\u0008|D8򰷇\u0004񱈩h6#὚TD񺝢D𬀜\u0004\"󚒁򍰋?񌛸􀣗񀺉", - "ticker": "16~", - "description": "Zdl𦗜5\u0006𝜖T򁟈󴾀𰽼S㚸T􌖇X򍱮򳣈󩚪\u0016uY:󗫮򾏢\u0011S\u001b󋏳\u0019򐚲𓨘p񨘨\u001b].\u000cDC{;%\u0010(u3󉞸\u000bVi!\u001e4\u0015򃎪eG>𘵠𲂔򅖛Kyl򝆞\u0014" - }, - "id": "pool1f7kvtkqvxv2ndgvxrwewl5y5lhnj5q3pd74qfj8z5yp46f89wyd" + "delisted": true, + "id": "pool1xsyzfxx4pf05akuxxttfdtk3sjyld62kht4gw3s6g6mrcc534qg" }, { "metrics": { - "saturation": 4.435726901157722, + "saturation": 3.888665033542913, "non_myopic_member_rewards": { - "quantity": 548065837745, + "quantity": 299091110062, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5488780, + "quantity": 22445299, "unit": "block" }, "relative_stake": { - "quantity": 17.14, + "quantity": 66.87, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1883-10-07T08:00:00Z", - "epoch_number": 1202 + "epoch_start_time": "1892-07-03T06:00:00Z", + "epoch_number": 18833 }, "cost": { - "quantity": 127, + "quantity": 79, "unit": "lovelace" }, "margin": { - "quantity": 77.29, + "quantity": 19.74, "unit": "percent" }, "pledge": { - "quantity": 30, + "quantity": 114, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "B\u000cZD򷼝\u0013񱐃\u0018qyEG\u001fsU𬁻R2\u0014\u0010d\u001dx+H$b𭽏", - "name": "^G+𿴿V\u0014g`[`s,򋕵-򏕗,", - "ticker": "2X90_", - "description": "򁉍5\u000be)>񙑘/D𬤝L\u0004񸚵*󦥪𧵖\\󾓐#\"q\u0016񰿁s%\u001fN󣧏A􂪍𰔜V󂐭񜣍󰪋e9RC\n>l~eU\u0004帶򚟋\u000b\u001f󎊅E\u001c4\u000e+򍹴𚷆\u0011\u0014󳀆_\u001b𩮊󦃎𻹡4\u0010YO;򌌃&/!20z򻅜wg\u0014\u000b}fNNT\u000b򀻣\u0007L򢝿\u0008󕙡陋\u0015\u001c\u0019\\j;\u000b\\'U\u001f񘛽\u001832U\t4\t\u00129\u0006\u001c\u000c쯞󆶖Xo8A\u0010z/_򂪒u󻂀z/􌍸\"v\u0001T򯤾󾍐󑉎I񉆎e0C𰺹G𛦝󅩆G2o󺠥𨦤Hp\"utN𕱪\\5R>򛂅]򱛹I]p\u001f󜿍R񤠥U0A򳟊x򢱩\u000bh~@\nb\u0019񺋱Q+ \\^𗁈x5򰰜2UCUU\r\u0012t\u001e6񳇈" + "homepage": "J񁕇\u0014u򬻅)X\u0002񫇀N\n񨤙QK\u0016򔈂_h򱴋񠃮xe򿜾\u0013򭒘򿴼󰖁󿙄m󩱪򗪝\u001f𫊓Ṡ5#@F\r󋄹(􋏧Y#s\u0011󗋨w󍏨xT𔴡򁱍l`'R󤄾\u0007r嶻m-񸝤\u0017\u0007򥋧^1\u001c'\u0012\"\u001d,w\u0005񴛢\\Jn񘹲KL񾜬\u0010c\u0013}%󲊢],\u0011R\"%񑮻񽴠H\u0011Bu\u000b~f𿐓񈁗" + "homepage": "t~\u0012񿮓\u001f\t<%𥒇\u0003@2[\u00036\t)򼺘\u0000", + "name": "5KVr\u001d񆉶!\u0001𢅡񷦍r9<\"k", + "ticker": "\u0015\u001be", + "description": "𞺇\u001c\u000f\u0008$𗻦񠧑=Ci~i\u0000vni\u000c7𦖈?񽚵v󅰉R;򰁳򇙧󲃬񅦒򴠫\u001c󺍞󯾛R\u001d?}?!𽶦rN\u001b􎚨𕠄+B\u0010񶣳\u0010򉘌XqM(􆰻w\u001c\u0006@򧙂򫒗񎺔|񜂧򥂺y@;񟣒-`\u0015" }, - "id": "pool15egtmxm66gxa95q4h8uqv9ax7dae82gwg40f7u9ucljgg88jveh" + "id": "pool18f3hszevx4kgx9je3qqh27323yn0kmn53jmd843qtxu66qd6p8c" }, { "metrics": { - "saturation": 4.308148428352964, + "saturation": 4.823609786214378e-2, "non_myopic_member_rewards": { - "quantity": 18344222737, + "quantity": 933480702566, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8731040, + "quantity": 12901738, "unit": "block" }, "relative_stake": { - "quantity": 96.65, + "quantity": 67.03, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1882-12-16T16:00:00Z", - "epoch_number": 19690 + "epoch_start_time": "1902-02-08T02:17:55Z", + "epoch_number": 13097 }, "cost": { - "quantity": 173, + "quantity": 117, "unit": "lovelace" }, "margin": { - "quantity": 70.49, + "quantity": 18.17, "unit": "percent" }, "pledge": { - "quantity": 188, + "quantity": 170, "unit": "lovelace" }, - "delisted": false, - "metadata": { - "homepage": "T򎃱\\{\u001e'c\u0005\u001fp\u0017/\u001d󽃛\u0019񋵂\u0019l𿦪?}񥒺\u001f}񷲣s\u0018y]\u0007\u0003񱜵\u0006=\u001fW󝁶򑭓dx,򛜚+K\u000b𙱢󖊺\u0003񀑔{W򆀻𘪵j\u0015^𐦣󀕳^ta򉇚堮󷢽\u0014\u00170^𑪛\u001eQRv\u001c\u0018񨘧NWB4𑢬G􉎐\u0015&\u0001𥃌\u001c", - "name": "\u001d\u0013􍈏򵾧{U󓦱K9񵈋L󡻓򐆼\u000e-\u0007c󙿐'񇜁]򟢅^\u0011f7gw", - "ticker": "I+q+󠓇" - }, - "id": "pool1a5fxej0s06j4mp99tq8anzym2c33cntxf2h32l23y9g520zkx3c" + "delisted": true, + "id": "pool13jt0rqq4jfjq8nsky5gv5n8eqt90w7kt98n8000lvyqmgttsg49" }, { "metrics": { - "saturation": 2.912699310772921, + "saturation": 2.5909355786284345, "non_myopic_member_rewards": { - "quantity": 24740426356, + "quantity": 978277584918, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15614538, + "quantity": 9058469, "unit": "block" }, "relative_stake": { - "quantity": 66.64, + "quantity": 55.28, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1888-12-26T02:04:46.115614886606Z", - "epoch_number": 21952 + "epoch_start_time": "1886-05-24T08:00:00Z", + "epoch_number": 10062 }, "cost": { - "quantity": 192, + "quantity": 88, "unit": "lovelace" }, "margin": { - "quantity": 74.67, + "quantity": 81.31, "unit": "percent" }, "pledge": { - "quantity": 241, + "quantity": 31, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "\u00164-󳡣󢾹񭮝@", - "name": "\n\u001b1󹁧񬱹V1sXY\u0010!\u001a*𥯘􅃦󶚩>񜴶", - "ticker": ",󤽩s", - "description": "\u0002n󡚷u~7񐣌3DP󉪕j򵭸x\u001d\t\n\u0008])jB󏼪󆣅x-l#JSD5yr\u0017\\|\u0000𞲚DK\u000c6񧖶v򫊁t𩪫񔍀\u0000^s\u0012]\u0008󅓑hYr跼\u000b񡡌\u001f𮾺񉨚\u0010\u0002\t_a\u0005J\u0015^򝗵}lo?17,u􆉵\u0014𰒄U\u001eQ;t\u0004\\#\u0017񃏃򋿀I𦘟B𞂌.xdT\u0002QO:򰭽󿕝]𰝥h񸚩󃎑\u0015;lR񰝏񩡖#xn򡀧^𺉀󤁶G淍\u001e_\u0006\u000c1h\u001c1=5\u0015\rm\u0001m$_󷞵\u0019(w{f󩨕󫱻%5!򠰱w󆗪`8\u000c𫺰h𨘓\u001d#󉬧zL" + "homepage": "E񜀁QUVBA񀂻𿦷򛾕c񵲮3\u0018%\u0015G񟽔\u0003}-lOU+\n!\r|򇮳񫡄^{񈧬Ih\u0007Ⱜ<𝄓", + "name": "?񝾦y}\u001b{󛵈򝣗y}cb\u001c\u001bJ󊇇3(𷌧􆛸)\u0011^#Ὴ", + "ticker": "c/E", + "description": "𮚨򀩻\u000f5%񺗲񳧛𒟆0je\u001aJ" }, - "id": "pool1g6gaqhk4gmasnasgc28frh7seu4xd3lrkweete5xcfw4cuuqz8r" + "id": "pool1q4tla06rpe0cx3xsysfa5mr7ua3k3w75mstmcdftexjuzqxdmss" }, { "metrics": { - "saturation": 3.5104400470777475, + "saturation": 0.9486761414657646, "non_myopic_member_rewards": { - "quantity": 717414702983, + "quantity": 795684733152, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21523479, + "quantity": 7849237, "unit": "block" }, "relative_stake": { - "quantity": 90.45, + "quantity": 57.87, "unit": "percent" } }, "cost": { - "quantity": 44, + "quantity": 216, "unit": "lovelace" }, "margin": { - "quantity": 12.88, + "quantity": 82.87, "unit": "percent" }, "pledge": { - "quantity": 29, + "quantity": 130, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "\u0008W򉸸-\u001f\u0004ZY\u001eV2|w󡛢\u0003PeE\u001a\u001a+`\u001aV󡆤𛈘M]󝯞󺚹򚷎\u0013)=񡢯S񮂤SWj𠃆D󅚐񪑭x\u0016y󙃜\u0004z\u0017?b", - "name": "񖖕\u0003񏇗Y^>\\\\L:\u0013򘵲p炮𡓖񇓜yg󠀡\u0001-P5&", - "ticker": "4𪕬z^K", - "description": "aiOg?K\\?YI\n7\u0004A򄷯\u0000[%$\u0010򿯓𸴱e񞂵{ta𾉖c\u0017Yu$𕵁HH򥇎\u001f𗴏~\n~\u001eD;>L񞛬=\"\u001d[񳛲5h\u00148\u0010󓅔U󻒈wpsJo\\j𡎾&򔯰񻁯YU\u0008\t26-\u0017E񅟃䥸𳗯O𼿶񒐆𢰳𰱉r򣩹6e򢭓򶓒\u0017󣶴t󨮰w[i\u001dU0\u0006v󣱺o𥶑\u000e\u001d>Y5󲒺8\u0010IIJw\u0008\n\u0005񣁴e\u0001\u0010񺁖f^\u0016066#\u0003?` 񉦦Hk) 񗇵L\u0010\u0006j\u00070\u001c5!\u0000\u0012󈔙$G򡫼\\򋀦+\u0000\u000f\u001e\u0016􃥺w󴪿;򄀻񍷓𜮒ce򘿎" + "homepage": "m\")F\"\u001e𱈌A\t]7", + "name": "\u001c\u000cm\u0003SO,񚤜U^H𪁉\u0016\u0004/S\t-gi'8-", + "ticker": "q=e\u0011", + "description": "Z\u0019\u0007\u001d󣳦򝕂󳖪򱔵L򨊟_6\u0015񼁦9.\nQ.Z򮱛񸍈𣖿K\u001b,\u001e\r񰀩;u\u001e#?Dc\"xi򤠻S񣙚򈥲򑫆v\u0003mO󞿩;MMP\u001c􁗌OGs񿔭O\u001a򳺲\u0006j@0|4\u0008𐣨]x𬁔}w𒈡;&q􎬅󝹬\u0002𝫚+9Mn񒡿\u0000U\u0001A\u0002\u000f\u0017c䋿򢽽AkK\rR-\u0006O񍁘h\u000e򏑴򒨚 򏑇yyN򖽌􎤀X&\u000e\u00176\u0014򐚆`a=D򻤰" }, - "id": "pool16uwnvxwpu7lj08t9zlzsq4pa0gfee7pj2xnpgxvjxhyz2yvcsk2" + "id": "pool13gr48jjtl2gn2ydnwgayxn5fpaquxvr5vf5efsxm62a86s7nyzz" }, { "metrics": { - "saturation": 1.7078180364278177, + "saturation": 4.320457841388825, "non_myopic_member_rewards": { - "quantity": 546006172412, + "quantity": 10248385195, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11552686, + "quantity": 11331278, "unit": "block" }, "relative_stake": { - "quantity": 2.17, + "quantity": 14.17, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1886-07-23T22:46:12.737672065491Z", + "epoch_number": 25505 + }, "cost": { - "quantity": 188, + "quantity": 64, "unit": "lovelace" }, "margin": { - "quantity": 23.54, + "quantity": 69.61, "unit": "percent" }, "pledge": { - "quantity": 170, + "quantity": 181, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "󪒱\u000b\t.R𼺾񘍪(𹆬𠬮\u0012񄻑\u000bn\u0001):񖌣1", - "name": "dS񳉽r#\u0018%򨟘\u0001\u0008Bf㷧󐰰Flg򒮚󏲃񔜛Ie񒿋F񂽙*\u0002S^\u0011򞆈\u0000p", - "ticker": "1tb4=", - "description": "r>𪕖󓡹 t򰟕󳢂k\u001dkv&+񏾩4-uV6W𲒌;暻𖌽w\u0018\u0007z񕊡t񈔹\u001b亖(\u0018\u0017\r𖚓w\u00167\u0007<򘪜%𫶕\u001e󟈈^\u001fW&\u0004򌍇Oc_S\u0017􋼌aa󜘜 󸭲\u001ccb񀲣󢜥p\u000f\u0014\u00052𲵅;򉙀񚳗뿡򆲼\t\u0016e_\u001d\u000f" + "homepage": "Ow򇾵:\u0007i󄦌y񗍜A^\u0016@𻲁\u0011򸁳x񯡵3񁙓򖴩񳮙\u001eJ􏙞񇩾񀗉񭃕J+,(+/GJ􂾈_$Q\u0003;M󵺆󫴍4񤒖aM#`\u001avIy@󸟏m\"j򺈫(𐡙>J;򃬎񱶝y9󼟠򁌰8𺇱W^.3#򌘬&\u000bO", + "name": "\u0001%2\u001e?V!pZv)>J|", + "ticker": "\u0008񶾧+\u0004" }, - "id": "pool13nurj6afu8ey8pmt5vp0umrng7ve7rya4w6g904c5wtrygfe7aj" - }, + "id": "pool1pya76hf23a4wveqkcqkelmj35fgsnnel97futq74c2h8z0wcryp" + } + ] + }, + { + "pools": [ { "metrics": { - "saturation": 2.480200163557073, + "saturation": 3.1674384602505326, "non_myopic_member_rewards": { - "quantity": 435687086580, + "quantity": 672649754951, "unit": "lovelace" }, "produced_blocks": { - "quantity": 2899537, + "quantity": 17737998, "unit": "block" }, "relative_stake": { - "quantity": 94.89, + "quantity": 1.97, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1899-02-03T18:28:42Z", - "epoch_number": 26530 - }, "cost": { - "quantity": 195, + "quantity": 136, "unit": "lovelace" }, "margin": { - "quantity": 72.01, + "quantity": 90.76, "unit": "percent" }, "pledge": { - "quantity": 89, + "quantity": 28, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "jvI𭦭FxN\u001a򇒔|2\u0004\u001a񬊸#􄂩󛤹򖛼\teRsg񞓍􂯬\u0018g󾰚\u0014*y򗝾} \u0019󰹆V񏆊M񥙢X\u001b2xX򴝡n򐋸O\u00056CV/𨕧腸\u001e1񹩽vK()l\u0018E\r񦮕u56", - "name": "B񞹽Y򕎄\u000c+H񤎂V𝩰cH󱷈Oq񎱨Q_\u0010򇉰񨌨f\u0015󋣿󻰬c󀮃5C􊵢5󮡏<4󐬤p򰥏b񗭐 c\u00086", - "ticker": "󎓮N=򕐹", - "description": "苙 򃍑\u0017\u001c\u000fQ\u0008)\u001c\u0011o8󆵇:򹑴(}Hx`\u001e\u0006\u001f񛏰󽼠5\u0018\u0007\u001a^C_\"\u0013X\r\u0000i\u0010򓬃7n3𤞷򑝕hl󉺩H(i􆃯v7󿨉K󩄽W񷛒yZw@󚠦*g#_)Y\u001dC򉺑?\u000b󚟃#񢵜2 󑕒􍌈kHn7􃐍!(\u001e;^򛗴𼽟A\u0000ws\u0003P\n񆆮$𤱍-i􆉩|tV\u0016򤹰8񜮅𳜽\u0016\\󂇡󱥍𳷶b=򪂎񅷆JM\u000e:AG\u0005U|\u0013𠣡\u0003y\u0001;#踭[񥓉V" + "homepage": "\u0011򡦟󑞞OVFA@񕮶,Hpq\u0019󃊁񳩈E\u0003|󺰪AR?񦈍DG񆹓񹎋򽧙\\jNxv񪼙򌱤~\u0001l񕏂T\\=JQ", + "name": "񗝄f󢎣B]%\u00149󈰪g񚱶LAs _\u0015f򺄄*t9󟽄J&)𥛡F􌜨𑱓򌬑C\u001d'T", + "ticker": "Th\\", + "description": "s񓗽Y`򑗮񽛑s\u0003PF+🐾-M𾁖H|$a=\u000fx𲃢򪓨l\u0014򺏟󤽀uR@𰦿󒔺*򉀢񒗛Ugw񚡞񧛴\u0002@%E\u0008=+vxs#:eQ򈟉f_H&;򧀬KR;", + "ticker": "\u0017\u0018󷖎񧅶8", + "description": ",69\"\u001b藯=\t񧊞k\u00152㨋\u0011t\u0016\u0003.𤎂\u0013\n?񑉟\u001fP񩅅󢣐𘛛^Xdul-a\r_񭛳񤹄{\u00009@\u0003@\u0018򭉡1\\\u0019rH񴧢󀒫򊌜[𿗼\u001d#򛞩|S򄲕G򉂞󛒀󾴸S🼃w\u0015#򟦢sIg󥝃ise\u0011f𦖭\u00161G󎬯b\n\u0017^񇢄Wf𚩽\u0018򃇵𷻇 d@\n󀂽r,J󌫰fPwCW亭x\u0016/E" + }, + "id": "pool1vcetv548mumzmz26c840nqszyr9ahwkng2ega0s6836gzeux5y3" }, { "metrics": { - "saturation": 0.3062274694340128, + "saturation": 4.028992890748087, "non_myopic_member_rewards": { - "quantity": 21651849522, + "quantity": 198649245982, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13794777, + "quantity": 14796356, "unit": "block" }, "relative_stake": { - "quantity": 42.39, + "quantity": 97.35, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1889-02-10T02:04:41.100419286635Z", - "epoch_number": 24568 + "epoch_start_time": "1891-06-19T23:07:38.49045315416Z", + "epoch_number": 27068 }, "cost": { - "quantity": 130, + "quantity": 121, "unit": "lovelace" }, "margin": { - "quantity": 23.74, + "quantity": 9.64, "unit": "percent" }, "pledge": { - "quantity": 83, + "quantity": 113, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "\u0003u4K򞢌~𑗗+Z\u0013O~\u0002TED\u001d?􊔙򢯖\u0010􏕹񕎇,E\u0008)\u0004𿣼5\u0007񄉻=\u00044񰮸|\u0016 񝇰\u001eZ\u0006\u000b򐢗DT󎀚򝬪+\u0017󟼟󃡷\u00125f\u0013k\u0006h\u0014E~y𜞒f", - "name": "󶘦>w", - "ticker": "9PU􇥵G", - "description": "W􈋾\u001d+\u001dVh[E󤏼V4򷟳0N\r󥀀]򬺁8{ 8|mZ\t񢿖_hp,%󂠯򞅜񩪩񵥹:]LI󖒍\u000e\\koL񊐹𜀟$=񹹘cJ򋹥bH񯋢\tGR8y8P\nJh4\u0016<*z{򉮲򋯗9𤄠S\u0003acI\tOOev\u0015\u0013\\񑒖o>\rt𐇁񗆈Y\u000bDl\u0004:z򆰹\u0011)𠴖\u0015u􍯛9% 󓁊':yC𮽽K|]D;Cwi\u0019\u001d󢧯\u0007񡺴񣎆󟿟fh`񠱯e\u0018C\u0015f\u0011 x2𥾆\u000b[$@󧝓\u0003𝊦7\tn\u0008Nyg\u0000(3򱣺bsh𰓷7O\u0019nwI8P!/򸠡g񳎲%QEt0\\uuP\u0013\u0011Q5.\u0018s񰾑X~V񸾓YUap惇\u0011\u0000񭗗\u001f]񦥵𿳍󿯬w\u0017򓱹y/\u0014򦁬'\\2\u0001b\u001do󢘼k7bX󣑄g\u000e\u0007-񡚬v\u001ad\u000ek􏷡" + "homepage": "\u0010𹚇#􉶶QC򣳯ಈ0u:񋜛;𜬉񋸻\u000b𢌱񄁉AS 퀀5", + "name": "TY(>'9=y<..򮕀\u000fc񬤒 񟿝I\u001e\u0010}", + "ticker": "T\u001d𫣑z", + "description": "\u0000󌷏7/-򛣙\u0013\nTJx򲂡mf񺰰+Z($􆍈\u0015𪒢\u0013L\u000b\u0015󔃹)\u000b}󃓡.QB_V\r&d𼅱򅋸!󭉗L\u0012.𨚥k2𛐤O𨙶𭒋󅷪򑻣" }, - "id": "pool12tm3n6tetqp9fm74a9vu0mwtt6mrqlyhhv85pa7l9hxm6p3as4r" + "id": "pool12ckr4mqplvf8r8s3nt34tcjr507rdtsylqqmxkyphxfzc7dvafx" }, { "metrics": { - "saturation": 4.740348928836976, + "saturation": 0.7331432072467392, "non_myopic_member_rewards": { - "quantity": 988950021470, + "quantity": 813830880949, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13838165, + "quantity": 14737684, "unit": "block" }, "relative_stake": { - "quantity": 79.59, + "quantity": 57.94, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1874-12-21T17:00:00Z", - "epoch_number": 26873 + "epoch_start_time": "1892-10-13T14:00:00Z", + "epoch_number": 32337 }, "cost": { - "quantity": 62, + "quantity": 134, "unit": "lovelace" }, "margin": { - "quantity": 41.07, + "quantity": 69.43, "unit": "percent" }, "pledge": { - "quantity": 229, + "quantity": 12, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "\"TpF򵃟\u0010a\\D9:o0D񤷥\u000e𼙰󳇂\u0018\u0007𮍯u\u0006\u0013_X񺣨U4X򎂨Fb\u0011򭀭텍 \u001fCN\" 񀆳A\u0011񨦒zf 𫡡󥔰󐭼Gl􈦭,+*\u001e\\򭵦򷖂\u0018\u0004\u0003P򼕱󝪝,MLt3\u00100V𮠿O\u0005𿻗򱑔{&V#z(\u000e𛔐\u000fp󇶬𴥘'", - "name": "\t􈝿", - "ticker": "򒱯缽H񇾳", - "description": "q\u001d𮬌񃢘\u0019蒡\u0006Df\u001d%\r3򗍋J]񣂘B\u0011󐗬\u000eY򉛂Y\u001a\u0018񠷠\u00082\u000e\u0011𱭒%s󇦬\u0007F\u001e񬸢t`D󘡠𗕎󥪿򦺓" + "homepage": "by\u001e\u001f񁗶f\u000b򲷿\u0011~!\u00121\u000c\u000f\u0005\u0012󚵆\\\u001al򞤳\u0019񩡉37T\u0007򴘎𥲸_󤓲󩡺񙜇)q핻񕯱&򿽪QNC+C{M񈲜=%xY\u000c𷜑l?q\u0016\\򭕬򐈓􁂉󣝱󷪙\u0019[Nv\u001d񃟱^F􉴙󄵵񗓵[/ᅛ󵥊!(Hf\\%\\\"񶤚񶗍\u001aEX񱉑", + "name": ")򂡷*2\u0014*;`v6#\\", + "ticker": "i\u0008񈵱\u0005򾑹", + "description": "B\u0004󣟒,\u000f\ro\"f5=X&\u0017K\u000ci򬦵ꝕE𡐊\u0003o䉉򦲲C$\u0018\u001fu򊇄\u0006*@\u0015򧨧}\u000f\nk$򊖬\u0012\u0019vBW\u0013񌗍T󖮇!V񸡘G񶑔\u0018𥅉sⶒ򬖋|C4\\Y\u0018X򑂲𤩤T\u0004󢄽\u0003+(e$\u0016󦓔񺙹<'\nj󶂆[|z\u0005>\u0011\u0002\u0005E\u0014𤭋򄉻򌾢\u000f,\u0006'\n\t\"񀢥\u0018둛J󃩸i\u000e(]𨥰𻋹^@HP𜜇9OWiT掍􊢅򩻠5򾼌􄭃򂽞\u0014𰷶+𑸙U􄕡򷳂򬜓UL𑯢l󎈤򱘺,򝎯UXc󍝭<@X\u0016Qgv\u0013_m\u0004l񞊾L\td󏊃򧿻\u0016Nu񩙆4fU+zf\n,is򍁋\u001c񾥅^񀔬\u001f񅷼q󓲗\u0008%=𣕜U\u001ez򰔇AD\u0015\\𷐼]6񕵕\u001c񑐄{\\a\u0008򫓙CxK`E𬅓񚃯B󮑟Dp\u0008S$𣳭N􇉲" }, - "id": "pool19qj0909ye93qhapf0srrfx28jr7gxvcwsz27z9uxvnydwnzzl5y" - } - ], - "last_gc": "1864-12-11T21:57:30Z" - }, - { - "pools": [ + "id": "pool1x94zuqpa0fanggvhkayc0lnq3l2dytpje9d80qk34xwfqfa3rwt" + }, { "metrics": { - "saturation": 4.50263157195106, + "saturation": 2.97260677565158, "non_myopic_member_rewards": { - "quantity": 483048212567, + "quantity": 815118397587, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3438056, + "quantity": 21127130, "unit": "block" }, "relative_stake": { - "quantity": 41.8, + "quantity": 25.25, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1858-11-24T04:08:57.857512923565Z", - "epoch_number": 11136 - }, "cost": { - "quantity": 163, + "quantity": 191, "unit": "lovelace" }, "margin": { - "quantity": 66.91, + "quantity": 9.1, "unit": "percent" }, "pledge": { - "quantity": 228, + "quantity": 210, "unit": "lovelace" }, - "delisted": true, - "id": "pool19dsnzxht0fq89etapfvud2dwghgcqhnzd90wklz889j7j8g890d" + "delisted": false, + "metadata": { + "homepage": "񑕽t񟏪硴 ", + "name": "􇋻4.)򅛼\u0005\u000fsTy", + "ticker": "W򴬼򝂟DS", + "description": "\u001f􀨇3\u001e,𢙑j+K\u0003񘕚<~h󖔻O󵁇󑻔򤉟\u0000G)U󔏘Nqn򠇬H0IqX\u001b\u001b3信󄥘1GJ}󰈱𡧹򭉬o\u0000}zZ󬔈\tm)U3a񠢬JO󅬙ҕ" + }, + "id": "pool1mel844l5aja5zenfrh9hfwm09gv9f3rjkh0ame7xv3usqjm0nl4" }, { "metrics": { - "saturation": 4.411023191328239, + "saturation": 2.047650702289764, "non_myopic_member_rewards": { - "quantity": 272560134282, + "quantity": 849472407436, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21619269, + "quantity": 5018817, "unit": "block" }, "relative_stake": { - "quantity": 93.22, + "quantity": 49.86, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1873-05-19T09:00:00Z", - "epoch_number": 32240 + "epoch_start_time": "1888-05-06T12:43:39.374472532636Z", + "epoch_number": 28977 }, "cost": { - "quantity": 125, + "quantity": 229, "unit": "lovelace" }, "margin": { - "quantity": 0.96, + "quantity": 45.46, "unit": "percent" }, "pledge": { - "quantity": 150, + "quantity": 1, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "񴽄<\u0010\u000e-DrF\u000e\u0004S\u0011pU\u0011F\u0013𽼇\u0017=𱣃-𻱐&V𝾌\r򡁀\u0008CQ=$WH񐻌\"\u001bB𒜕i󜤀\u000f\u0018dDv󼾁\u001fc򇨰%񶱥CeLI򄇥q󭗠(sS;a`󢕖^\u0018}=󭹉~@'1;!l&q\u001fN񖆳𐌗_\u001eD󽅝񒯥\u000f񢿹\u0016F", - "name": ":I𱀩\"3l90񥵎^P󿂂v0V󳬪򚈹󬥱\u001f", - "ticker": "n\u000f/,", - "description": "\u0015B2U\u0000bs񾓒X\u00016򓺓\u001f󭓜:򏤉[𖫹񸠀o𶽲\u0019{񽋿s:󊉗z~g񴡇\u0017j󟬷\u0004#򠻓]I\u0015􍞊^ \u0014H𶊞숋\u0013\u0002𦏥W\u0002V񕹤q񧺚*\u000e󽕕uw􊢯񒿸i/$񖮶" + "homepage": "\t򓪚򲃏\rg-\u001d򎛺pF[Qt{\u0006\u001a<\u000c[󨴀\u000e𒚟񊱁\"𧳼%󗜳򳖬񎍌󑻆\u0014\u0008{\u0015", + "name": "\u0016\u0016񰂩|a\u00026g\u0007󌒺񓤀𥠘`Xy񺚁w񯳎􎰺.\u000c", + "ticker": "YWi􊿿", + "description": "(Jw9V򃉋󩦘o{4\u0008L\u0004EKOm󷽱\u0006\u0014\u0001f𤗅󂗉\u000e\u001d+\u001a\t@K𙁻5\u0003󊺀pM]um:8򉗃KH\u0013" }, - "id": "pool1825jds53fvwzlct8t9a56wl093zgdzgnkpf8p0ypm8pcgtzke9t" + "id": "pool1y3zp9cw97mnl6y4ak4ufg48navfwgn9dh83h2ta2mwc4geev4mu" }, { "metrics": { - "saturation": 0.3892635828398522, + "saturation": 2.893620783457633, "non_myopic_member_rewards": { - "quantity": 555303302730, + "quantity": 222615935140, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1440501, + "quantity": 16415905, "unit": "block" }, "relative_stake": { - "quantity": 52.56, + "quantity": 38.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-04-09T11:12:40Z", - "epoch_number": 14922 + "epoch_start_time": "1880-07-22T11:09:27.320389004833Z", + "epoch_number": 23567 }, "cost": { - "quantity": 228, + "quantity": 183, "unit": "lovelace" }, "margin": { - "quantity": 93.22, + "quantity": 77.59, "unit": "percent" }, "pledge": { - "quantity": 151, + "quantity": 97, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "𘠾򒙫#񒡸򖻛\t /\u0010񙝩򡹲a\u000c)񢪧[=R𗒅\u0011&,򵽁y\u0010C?KY\u000f\u0000𥢴&2\u0000\u0013\"\u0001𹨹0񜂑o\u0000򞱪obH\u0017cF", - "name": ",Y/񎏍U򸠪", - "ticker": "\u0016i)", - "description": "\u0002󢶣C)rj%\u0004!\r\u00149w{.\u0006x𣌢M{\u0016'?{UV\r\u0013GW4E񾲋N\u001e\u0006ᬌy󻉑\u001a\r񩭟>񿫬񝞊1񽚰f\t\u0003\u0006󱢶E?򇖶lFhuVf\u0008c\u0003􊢾򰢬\u000eL󝒐𢶌P󚨪񨟩\u0001I񏒦𦱤Oh1P\u001fhTNV 𑘔rUi\u001d-0J򓨁p+񹍣z\tK󦷒\u001a\u0011d\u000b\u0000\u0001l(R<󠼒󖗑dku򍳦\u00068/]*󘝝󽔯v" + "homepage": "/T\u0016C򡧉\u0003)𫗉󮒞\u0010fH󊰑[񣿟\u000e􌯻񻐌q󦐑𡻐򜻖;ᄄT:񪆀DI%4(򦠸#9\u0019k\u000e\u0011k\u0017(i󧌔V󳯕𳜀򀖌PgV򉰙cfrY񜿅nb,򭦠𽳏⹬kl􁧘L񾽴", + "name": "L􈦇t9\u00140kKm嵉󮃏\u000fW\u001d\u0010 |\u0007𬱣~񟵹)〾\"𦡴8𐜇\\)|[+L1󙪖\u0004jd\u0001]YS9\u0019", + "ticker": "S[񤹆", + "description": "\u001fw\u0016J%,V󢃳렰h3\u001fI񺞃\u0001QVK񟧬9P-\u0013YiN`񅚌tSM𥺫𑇂]\u0012\u000b񍔘1=SE'/_]\u0019􆟐tF\u0003zl2\u000e􌣷\u0004񉦙\u001brKf\u001bg)" }, - "id": "pool1v7ud2nkja0dvqfl8s3wvqd2rmh3mehar7x4rq5e0pv562xjf40a" + "id": "pool172hh8lt29er43mumn7y28drmwpxpjyn3vtfack20xy26j5w7h4y" }, { "metrics": { - "saturation": 3.003245355870657, + "saturation": 1.139355244532414, "non_myopic_member_rewards": { - "quantity": 211145625584, + "quantity": 738847662176, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1194901, + "quantity": 5592457, "unit": "block" }, "relative_stake": { - "quantity": 49.99, + "quantity": 2.27, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1873-05-20T08:46:39.681350743584Z", - "epoch_number": 9727 - }, "cost": { - "quantity": 123, + "quantity": 151, "unit": "lovelace" }, "margin": { - "quantity": 4.41, + "quantity": 82.59, "unit": "percent" }, "pledge": { - "quantity": 40, + "quantity": 126, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "\u0006i񷶋W\u0004\r\u0000򃋖<\u001d1|0󺑷D񣔯𮯲`򽩐\u001bw򘔊_򀔴!񹢐9񬒋\u0006\u0005\u0006:Z󦙻}x\u0007(:|.*8R>񼟇$\u0010B􁟑}7򝕰cw\u0011𴽞i򖝸\u0014򚤥\tvPY1S-I<|t]Tx\u0005AU󯶅i𨍧\u0001*\u0005Z\u000c𜵡𼀺\u0002!{u,@", - "name": "𢄯XzG\u001bim\u0013W󙁗V򑚲\u001a\u001b㦐i\u0011}𞺏\u0012󃱜T𤿦\u000e\u001f򕶣?񢣶\u0013mp󾕌𥔗", - "ticker": "d\u0005\u001b", - "description": "𰮾a\u0012\u001b򓢨qe𛅒y{󰕱OZ𣀮\\r򴂆'򹾮\u0000T򤍄lR\u001f*񷿃󽐼q󮞖񁪞򔕷G\u000f򼠐󑼟.,񞺲rh\u0011\u001eo}\u000f\u0018#B\u0010yRC\u0005o\u001d\u0002񼞔𮷒c\u001a񚎙J\u0011L.n󤦻񦺱*Bzn􌨽\u001bZ\u0004\u001b􆴴\u000e\u001a\u0000\u000f|>OC󪵚\\󧥺[VZJ𶊂𛙐񈼁􎞜\u000f򜌳\u0018r6\u000cxiK\u000b\u0005󇊺򗠜l3LpQv󽁓aP?Q󯈁򇅺U/H\t\u0002" + "homepage": "\u0016~\ro*\u0002򨨠V򔓱\u0007񛇛\u000fP잢񯇲.+𹅉)\u0000mz~\u001e\"48񆻻Y򴛘vXk\u0003򤺬\u0015񐁭q\u0007񗊛򴾇B,㆘t𼖫\"]]W2$򠄐O񉈏\n+\u0008𯴸oDvnz\n8\t>\u001b#4J\u0007l􏖩\u0010\u001f}Mh\u000c\u0005(=𗢳5ᰌ8\u001cL񽳤", + "name": "\th񅟇/\u0001lB|<", + "ticker": "\"񐗨hs􄧀", + "description": "r󆳡l\u0003\u0000\u0016M>Yx񹈈R򟻑𫙺\t򝽏M0򺶹󠆨𫝱q`o\u0002\r񵑩[\u001dZ\u0013񠐡\u001a`u򼃃󺅳F􂶅񱺹7;\u0018l\u001e\u001f񭢔A򵕎󄶹U𐄖yᮢL냔\u000cvg􁏅-v\u001cRN𐬫=\u0013M/񜣷\u0017\u0001?\t򝀇y}w\u0007򯮞vY>/핆񙌦U\u0016oC\u001e\u0004𩞜j\u00191+󔁑j\u0005\u0004􎜇}𩔽S򖡃󻟵=򤘱\u0012e񹦖U𴴺%eI\u0016🅳\u001f𾬆\u0000񬻁\u0018(J]e򟪛$󗧈򽨻󜊁8􋯹72ixP3/*1,\u0012𬣤?\u0006񝝺\u001e򏳴\\󌔪\u0018PjP43S\u0018" }, - "id": "pool1nl92ajq9j6pv049etzpn2q72wt8frdtz44u8xkp6q3awz9vmr2q" + "id": "pool1aqmrq4c3rgrssxv949yzx9xevmwl0hggwte0ew8pwvdn5chhs9j" }, { "metrics": { - "saturation": 3.9823598904852124, + "saturation": 4.484787358982117, "non_myopic_member_rewards": { - "quantity": 313014429798, + "quantity": 341434316241, "unit": "lovelace" }, "produced_blocks": { - "quantity": 81872, + "quantity": 17473550, "unit": "block" }, "relative_stake": { - "quantity": 13.2, + "quantity": 36.7, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1879-01-24T23:50:14.579114871838Z", - "epoch_number": 3931 - }, "cost": { - "quantity": 215, + "quantity": 243, "unit": "lovelace" }, "margin": { - "quantity": 69.13, + "quantity": 36.93, "unit": "percent" }, "pledge": { - "quantity": 254, + "quantity": 50, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "d󋼾\n􍬞?򃄉E\u001e񴮞\u0016wi>-񿎃'3{=n򼑸s𹟓󍟊\u0017򋂆򗺷IC", - "name": "󺝞\u0019\u0003󆜏񝧑󐪌c󿷀Rt\rm3!\nU񁌐B", - "ticker": "󘉗󳄰T", - "description": "J4!\u0014B\u0013g󦕿7\u0006񁅕\u0014HTX\u001a🴂􏗰!Q2|A럏\rX*\u000c\u0005\u0018򌯔\u0017꽋C𧩫'\"򽧭XPx 񍨐-󏏚򭲌}\t񱞇󕖝\u001bsAu򌸳IT)p5X򑭾(Pav\u000c򱣹h񬊩iG󵔯󶹬p;\u0007񧳔 VMrm!p𪑆󠨅\u0019𢚚\u0014𥙘򅳀uM󤨴􁏴񋈂]\u000c~\u001c\u001e\u0006^򕔏[򽾲s?Gn\u0011-𲞡d\"g%l𱽉𷁪I\u0003\\𑻩L`F𪍹\u001a򽂩󪂻\u0013D󝶸}\u0005vm\u000b𺍯]t򭚂󗊭\u001d󭣞𼴝\u000cq {\u0018񡬿,\u0003\u001f7WN" + "homepage": "򆚗k󃟧\u0007$p\u001a𹿧DS\u0019R򵇽򥲊򾟨m𣶐-V󜕟\u000f[󽶈cGY\u0017)", + "name": "H\u000f򻡠yD𦻒甦F!9\u0008\u0012dC󕱆񃦑-\r#Z|𹷕\u0007\u001b􄲦(2%p<\u001e]\r򯖬򛦓򒙧\u0014/񘵫\r󸆻\u0001:\u0003\u0008", + "ticker": "h񃕐󈒹\u0019\u0013", + "description": "\u0015\u0001\u001fe0\u0013񑨆\u0012<\r󃣨8[m\u0018\u001fc󟢈􂐛tB󜞳\u0015񈊦H𘣫0򹄼K\u000b񇊌V57u", - "ticker": "ⷢ(E", - "description": "񡷜\u001e𧗝{󀞃򧆊hꏶ󱪽u\u0013ow𞭝L\u001f񞺢r-򄖨C\\𳙾\u001a\u0015LRA\u000f𝣑)󥮗\u0008񸋄7񾖊򜟛u[4𩰚8e𺛚2\u0016󗊅\u001av񻉴" - }, - "id": "pool14788h6a9rk3d07uln2jmn7ag70g2dvf0kf80e7tm3uakvm9at0g" + "delisted": true, + "id": "pool1avfx9deu4qj5rx30w0kpl4murkh9jasdrzhac3f4e564srxl35j" }, { "metrics": { - "saturation": 2.7062499069868897, + "saturation": 3.8570002808549715, "non_myopic_member_rewards": { - "quantity": 97207223362, + "quantity": 555056874325, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5806978, + "quantity": 20880148, "unit": "block" }, "relative_stake": { - "quantity": 57.02, + "quantity": 68.07, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1878-08-31T09:22:09.394895492992Z", - "epoch_number": 27915 + "epoch_start_time": "1889-04-24T04:00:00Z", + "epoch_number": 6514 }, "cost": { - "quantity": 205, + "quantity": 229, "unit": "lovelace" }, "margin": { - "quantity": 59.7, + "quantity": 99.78, "unit": "percent" }, "pledge": { - "quantity": 162, + "quantity": 137, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "bY򸯏\u0003\u0004󧠷\n羖.~inH𛕻򜋒x;\u0007s%󫿕\u0000\"\u000e\u0014$\u001c𦻍fXhV񦣽򚗲ul$;რ248\u001eZ򄃕gz񣵠坰J'9>\u0017𢌪)O𰑈7m\u0007𻒛Z􇣭L𷴊\u0000H\u0019|\u0001y)'\u000e", - "name": "(2F\u0019\u0008򤍂\u0001\u0004&󋷞;󅝪\u0003:zy.򑈚\u0015=voC", - "ticker": "\u0014򖑑𖎺)", - "description": "E򗌏񞶐񉩜𧸅\u0013K5𤍀\"\u0015😱\u0005\rc0緤󣦈󝛀[񎜌`󙒰8)\\򝐠*\u0017F<\u0010\u0010\u0011򁾎󂆵\u000eL󎓇$X𣍧P./h򠴆+󀋼xJ\"P" + "homepage": "B󾓪-\\p-\u0011򭄜Y\u0015񨠑񲸠<󧛥M󞀯U񊢞Y򾄓V\u0005\u0002񍴱O\r\u00180#P𹡼cQ\\񭾲񇲓\u000f󒿄󛀹i\u000c񁜣!|:\u0004,ko>,IDL\r?y񫺧𬞜\u0015$>\u0005󛖨\u001a󊒀\u0014i\u000b򧶇R\u001b\u0006{b񿌾\\OZ\u0008n5:^k񈝏񤰎\u000c:\u0017\u001c", + "name": "򙓹󧴷fFr<.󮫩o򪠋\u001bJ󼰈\\\u000b>\u0015\u0007򺄋\u000f\u001bCP񰸥wx#Q/䁇I", + "ticker": "\u0017򺷝񫐘Q", + "description": "󥕉q#n\"􁉃F\u0017`3A+`<,򷀟󞗊𴕘񈥐Fp'\u0007򔳜J-\u0003򷚇0~[𫽃]\u0016\u001b󲱱K'^򩌋!&)}񽳯\u000f\u000f&l򕄩񼚭o\u001f\u0018\u001e󩅑𣳵c!\u0010p򒆢8򳁞\u0006P򧯱;KGﲿ񀙃Z\u000b\rZ\nH_p 񪥻qG>0\u0006zQ򄉙?򒵳\u001d𕛒񳃮~񐤺P\u0017?t" }, - "id": "pool1ex6tqjmfmwnqu0asgn9flejpq8lkrvhqwfp3fcq6hv6n6fz9m2z" + "id": "pool1mptdfctf7xhclj8x6zx0x4kepd2kutg99vp0mzw9wfruzx6kkk3" }, { "metrics": { - "saturation": 2.552134824876317, + "saturation": 2.027664401757319, "non_myopic_member_rewards": { - "quantity": 427973414014, + "quantity": 996298896377, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15062102, + "quantity": 2898160, "unit": "block" }, "relative_stake": { - "quantity": 80.16, + "quantity": 85.68, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-09-11T00:42:27.233589199806Z", - "epoch_number": 24134 + "epoch_start_time": "1870-06-18T06:00:00Z", + "epoch_number": 23474 }, "cost": { - "quantity": 117, + "quantity": 154, "unit": "lovelace" }, "margin": { - "quantity": 0.16, + "quantity": 88.45, "unit": "percent" }, "pledge": { - "quantity": 199, + "quantity": 111, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "gGd", - "name": "\u0002O\u000f<*&^t򕽬\r8jxdV \u001a񸯮񄨯𞑂X!BV\u0012\u0005򺭵\\r", - "ticker": "@bp񂽩Er񝽑󎦜󒀄4\u001c+\u0010\u001bnd;2$𨴩*\u000f򔮌BC 񯷨\u0001\u000eQyhzA^󨹡򑹕흇\u0017>𪱅򚤨C󍽛󃺄}e:\u0012\u000b镀" + "homepage": "}0X򓱂b\u0004;S\u0011=/񴣛d\r\u000f􆗿U󮫊󤥁`𒝍tPa){\u001a]a@`@\u001d\u000eWt󝛶\u001eW􃄪\u0018\u000f\u0006u𿞹X4\u0016aPdM+q99󖓽Jx􇵜񛞉L=󕱥vd򳙏+^{)1񷹽e򲘄w$򣬰\u0011\u0018\u000fq(𷮰􌗰1f𤻼R򱝵K\u001b{", + "name": "񑚆\u000bYu򀰴򷞇\u001b翣>񆙖;Xr*𔒰\rKX*[h_n𤓥󪣘.򩌾*uM\u001f{|\u0012\"fsdlf򄨼7z񳯬򆺡0[", + "ticker": "(a􋮻\\", + "description": "򐮸\u0011r㭲0𠄮mW[Y򌢖􏿺}󯃲}󘅃*\u000cp[󖉀𰴷,~?Y1R󡧖)򓈊􈍵>)\\WHjj\u0006񤠳\u0013\r񡩗l򛖉󡆮7d/Oavt{\u0002Pr&Q{`vZJi;񻊽\u0001]+򧬭On򮏶k򞵏L\u0012r򉿆3񓲽eb6" }, - "id": "pool1w0rrq7enz4axk6yy6xqlesydg30aa6s9dq9zdutzea3vzaac65u" + "id": "pool1yzrhljw3fhlgjyssznrlvwwaynad84f6l99trurxmhvm73wqlf5" }, { "metrics": { - "saturation": 1.8385126437339572, + "saturation": 4.1751661223912215, "non_myopic_member_rewards": { - "quantity": 344497372032, + "quantity": 252804970937, "unit": "lovelace" }, "produced_blocks": { - "quantity": 10424982, + "quantity": 22233578, "unit": "block" }, "relative_stake": { - "quantity": 83.77, + "quantity": 58.94, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1901-12-02T07:00:00Z", - "epoch_number": 22721 + "epoch_start_time": "1874-07-07T17:03:39Z", + "epoch_number": 19325 }, "cost": { - "quantity": 119, + "quantity": 40, "unit": "lovelace" }, "margin": { - "quantity": 18.85, + "quantity": 96.46, "unit": "percent" }, "pledge": { - "quantity": 86, + "quantity": 121, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "󹵵񙨫Oy󰦜e)򸕺0l\u001b#s\u000ef򇫂󞹑/𲾭\"󽽥\u0002{FvE(/򧪛^\u0013O x\u0003\u001c򛝢/n\u0016𰴃I 𼧥𮠣\u001c`Xb\u001f񽇣񈕕7\u00167\nc𓯵\u0019\n𞢛񚻓h\u000cY񫡤Q#}􌝔-񃔗ZF\u001b𗮵7򵱞\u001aWy𔡽\u0003M*", - "name": "󁅜0d:\\`Jo\t#x\u0012𝺥|0_\u0001\u001c\u0011P<;\u000c\rDI\u0014&I\n)d,󋱅X\u0011L\u0001𿠝y'󰪊", - "ticker": "3\u000b\u0018Sd", - "description": "\u0012𜴘\u000f\u0018[򔠺󩞦_􆱙\t諏#\u0015\u000e,E\u0011CxYj񆤂\r\u0014:\u0017񅰗񚣳H󆚲䪚|4de􌶹󡟸~\u0008B\\󼑎O񭾻u􆛳fAM򺣖\tD󚄥4󞡱D\u000c񁢜U$Yn򇀬<3rc_J\u0010𒃖񝖽P\u001c􈃆𞰕\u000f(LJ󷚱,1𠽽\"6\tJ𦲿E򦄣0𛟹󛲀6e+Q" + "homepage": "\u0006󡫲", + "name": "񪊭\u000c-O", + "ticker": "𡠙{\"" }, - "id": "pool15zawumn7tugrdjgeakqrq2v0mka8usj6px5qrtjs90yfcp6fkud" + "id": "pool1e9uwm4xucwkns5hsujh75jtvj5e04dnfg7wglgwxk2vpqqehr4w" }, { "metrics": { - "saturation": 4.808767286997367, + "saturation": 2.191211709950399, "non_myopic_member_rewards": { - "quantity": 793177494520, + "quantity": 705103116656, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1475102, + "quantity": 3921006, "unit": "block" }, "relative_stake": { - "quantity": 0.3, + "quantity": 52.5, "unit": "percent" } }, "cost": { - "quantity": 185, + "quantity": 186, "unit": "lovelace" }, "margin": { - "quantity": 26.81, + "quantity": 43.38, "unit": "percent" }, "pledge": { - "quantity": 240, + "quantity": 233, "unit": "lovelace" }, "delisted": false, - "id": "pool1r8g5ghmk4qeaczfcuvvaujucp78qqal2unxaft0k06pqxjxywzl" + "id": "pool1ptp60cy8pss7yel5wamhnj3kds42cnd64tl75vmmck2w68fzkt7" }, { "metrics": { - "saturation": 1.5798210814292635, + "saturation": 4.792535280765888, "non_myopic_member_rewards": { - "quantity": 6001616176, + "quantity": 355409073571, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9545539, + "quantity": 20915880, "unit": "block" }, "relative_stake": { - "quantity": 86.85, + "quantity": 9.96, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1899-12-30T07:52:07.19614811522Z", + "epoch_number": 19645 + }, "cost": { - "quantity": 183, + "quantity": 138, "unit": "lovelace" }, "margin": { - "quantity": 45.05, + "quantity": 31.72, "unit": "percent" }, "pledge": { - "quantity": 232, + "quantity": 191, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "K8\u0017ys2L󍔎񞫸&5W𵥷)^򞶼c𻳋𦣑\u00125B\u0013W\u0006Bj򄾑%\u001e򍟠󞘶~s&򊜦#f\u0019!0\u00129򯔏4𪪊PG\u0013ᰰG\u0004y9)𫻫}\u001f򘠳z\u0014_񸶑c\u0011A\u00197\u0007D}_񡠘4񚌦CKN^\u0017󄳷񬰏Jn񝧽_񩒇\u0015c^񽏠2g4\u0015", - "name": "\u001e򬱏\u0002@\u0018c󓊬1C", - "ticker": "M𥵓hw󬊔", - "description": "\u0011tOA\u0019'k񡗂MZ񨾃𽍪Ih\u0010^\u0002\u0010p{\u000f񄒘\u000bg򭂮3'\nE9\u001d\u0013[<󕐆_gI󾝗`󅢠p򀀿󍭕񦔕󸝠􍒄\u0013(t5񙹡󁂬񴩗M󕑓3򌟢\u001fD%[xAbB򀎼\u001ac w𽼡D9^H󿗨d򸍋񘛘#󾉊񐿮除Y\u0008\u0019񄡿\u0001\u0006\u000e+I\n\u001f%tq\u0000d\u0002iP\u0004\u0001\u000b󷫑򽄹N􈫉\u0019\u001e\\9B󌐯!!3U񫢰𗚉􌱽𼄀{\rg󎷭" + "homepage": "%6}􌟭P򑶒8󾲚\u0006Qa0@\\6;~\u001c\u0013r񧳚󿖛\u001a\u001b\u000b\u001b񟖔򈷓W\u0000=󐡽|*\u001do򛋠򰥶\u0003󊢡󣨴򑱣!\u001b", + "name": "􋱒񩙍\u001fꌮ򞮿񴧷񸘠T󈺿򎈬la\n\u0001򴺞\n", + "ticker": "c\u001f\u000fD", + "description": "\u000e𩈼L9Y\u0011$󊞄 /}\u001bT\u0008򽿡YD\u001aWgn󇒖F\u0018/𬥴>񋐌񫸺\u0019\u000b\u001f\u0003o\r>x\u000614􇃓􂼻dtC󵣇B[(t򱍿<>\u001a򛳿=~Y򇻥\u0015򷖷SIAB󂔫0z󯣜󤆍W8\u0012󖊚󅂯[v\u000fPh\u000c\u001b򍗇,IPlQ)'\u001cP\u0013򗝇\u001a" }, - "id": "pool1qrxxd25wznqh46rgd8e6w783xujy2rynxsnzkvhjkmvw775aqnk" + "id": "pool1yg6thknkwy9g2nz2r692673846k54ky6jljh9ftqm4vk6qq6y36" }, { "metrics": { - "saturation": 2.80527684394547, + "saturation": 0.6658801259460828, "non_myopic_member_rewards": { - "quantity": 695815207885, + "quantity": 128527682280, "unit": "lovelace" }, "produced_blocks": { - "quantity": 7650463, + "quantity": 21887153, "unit": "block" }, "relative_stake": { - "quantity": 4.58, + "quantity": 53.35, "unit": "percent" } }, "cost": { - "quantity": 44, + "quantity": 18, "unit": "lovelace" }, "margin": { - "quantity": 67.83, + "quantity": 23.62, "unit": "percent" }, "pledge": { - "quantity": 212, + "quantity": 113, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "𔺯E򩲔􍽭\"F񴙣\u0015fXR<󘞷\r9V+\u00020Wt:C\u0007/~V񈝿>\u0004u\u0011h\"T􂆫~\nHtT\u0002b?𾓠𛮔򒩣𻥉K[i", - "name": "m􉀎X󹶀wt,`1𡨛T&񽴺]xH", - "ticker": "𺑘\u0005\u0016", - "description": "t:FZ`l񊗺Q5;DiIX\u0003\u000b\u001f𧩥񢌤\u0007󹧎L6D􇟠\u001f\r2OJ}*\"\nh4*񔨧󼕍\u0004\u001eG񿕫#\u0007A'򬘿󔡼\u0018E󙵌d󼫉\u001a*\u0013dO򿨔", - "name": "Xc\t2(_7񬺄󒤜O$)D\u0010mK6~ZO>\u001e񸗘򾇤s^'\t\u0008򄺕򚻽󍚶", - "ticker": "\u0017$\u0017", - "description": "[%򽴹p:>𴝦󍗛N\u00020\u0013[Y\u0003J[>򚋸51l2򆨂:$\u0015=\u001dl󑭽\r񃶪~:pMy󯰯s\u0003\u000b{𭞲\u000bO)\u0018󬂵/I񚳚,\n<\u001a\n}9vT򪬵i򣜱𻖫싞~\u0019K᫋<^t𴉼\u001b7񶑃󼦹>iT\u0004\u001eEy]9fw򢂱򲴍򾮗󿼌pc^\u000f:򳗆\u001e򝂂{$z񙺁\u0015I񩩵r.>񺮂𹺟b𦾡z\u000cM6kL=40\rB7񇯆\u0003vi򠅨䝩\u001c𲒲\u001d񵶽\u0018\u001c_򆻬d~F\u000fa8m\u000f.Y򀗳\u0002:񣁮񉵗%" + "homepage": "󨞐\u0011\u001d\u001b򵐰Q򢌋G󎨯򜱈i򏪎g𲯙c\u00003񽽶f\u0011u񘧭􄹂2󡟬\u0006񴞞\u0015H\u0019𩏅XK\u0008񉭬JN\u0016쪟", + "name": "/^\u0015󧅟𮓟\"\u0011a\\J􏳓M򸛸\"򆺳hHg5򊱥1$2e:\u001e", + "ticker": "񣯄\u001fiQ", + "description": "&f\n𹁣\"󗓛Y4\u001d񜑨2?𤭛\u0015\u000e򿑦v󳫃p`r󑑙X}!񜜑򪿪/UMgE䓲}?\u001e\u0010\u000ew󸙵𘎑\u001e.𑢬u򫓗=򍨠򙒯󚎑\u0001\u000e\u0015>񖜁^3\u0008w\\󎸐3\u0008Wttit\r\u0006A\u0019򚎬R񍖥d򱁿-𥺡𠒶\u0004\u001b񯹙T񍻬Q%iI\u0010򴨷j\t(\u0008'e󣖳p2)\u001a\u000b񝵡\u001d9lo&'񉩟I7A\u001f~&\r\u0008l𤝳ZS򔝮Zu,󽊔󕍽񃶸T∡󴦕A\u0004򸪋\u001d*P\u0007|T\u0019\u0017􌜙\u0018󄪆ve\u0018\u0011 h𬷤\u000e򷑴񟯹=3񳀏MmuPk7ZܮlW􆪉:\u0018򫄘𭾘뎧LGX񲨻󱹔^:*}iA𰿄\u0004l\u000b󑀡\u0005DYlKT򄫖@񟪅\u001a򇪬\u0016oz\u001b\u0005m񀚎[gW4\u001f\u001d/\u0015\u0017𳰑\u0008H)񔠿Eo0f>S򹋯󆚁򓿾\r򂊥.\r򙿮^􃲴\tG2򈫒" }, - "id": "pool1hk8saw9m2f979gnm3sruaf2selx9d5cwemwyxlantklg5dmtakk" + "id": "pool10n4r2k66jfzmmsym6kr0n22nuqjc4hm46deajwqq2hcwk8numy9" }, { "metrics": { - "saturation": 0.24153782734480156, + "saturation": 1.6980786943221193, "non_myopic_member_rewards": { - "quantity": 214046951, + "quantity": 248704373905, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17177934, + "quantity": 12995460, "unit": "block" }, "relative_stake": { - "quantity": 1.0e-2, + "quantity": 11.47, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1881-07-08T11:45:04Z", - "epoch_number": 19019 - }, "cost": { - "quantity": 107, + "quantity": 162, "unit": "lovelace" }, "margin": { - "quantity": 89.8, + "quantity": 44.78, "unit": "percent" }, "pledge": { - "quantity": 192, + "quantity": 231, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": ":='\u00160󎶩eJrt]{𱉤Q A\u000f\u0005\u001cS3t\u0019򛿃W咏\u0018SN3򑲞/C\u0005\u0018H", - "name": "Bw~𷮌\u0016󎬌񍌦\\\u0017񤜠񢁴>𾉥񅶋򌏦𰲲BS\u001eu\u000etJKL", - "ticker": "𷹂󴖸(-", - "description": "CU:P@񄠤\u001c񡋒L\\y#Ol𝉁(?񗤷5b􍎃\u0017H񛡽󫶖^?3T\u0014\u000b\n(`򗽻򅤘gbj\u001c󜱁*_h'R>kTP\u000b򴘘򝕓\u0011-򿢸\u0003+\u000b񳏝/\u0012Z'L񬗨󳓺𣫆\u0005e>X𛄉s" - }, - "id": "pool1fcwn0qpygr59etaeh995yz5fh8qh5khelshw2t2dvy4xvtz2tuw" + "delisted": false, + "id": "pool16efejatdg3yf7dk8e2pml6cjmcs69xqwrkna4462wdtsufc76yy" }, { "metrics": { - "saturation": 1.1960892030259855, + "saturation": 3.220200756946721, "non_myopic_member_rewards": { - "quantity": 56308712464, + "quantity": 744051606323, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18366799, + "quantity": 14827544, "unit": "block" }, "relative_stake": { - "quantity": 6.15, + "quantity": 0.87, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1863-12-04T21:40:45Z", - "epoch_number": 32528 + "epoch_start_time": "1904-09-18T22:00:00Z", + "epoch_number": 8693 }, "cost": { - "quantity": 34, + "quantity": 193, "unit": "lovelace" }, "margin": { - "quantity": 92.81, + "quantity": 93.63, "unit": "percent" }, "pledge": { - "quantity": 159, + "quantity": 43, "unit": "lovelace" }, - "delisted": true, - "id": "pool1d9tuh4qa8smdgpfmrqeuc9q9ra4vnw78e42uz7er00vg29hathh" + "delisted": false, + "metadata": { + "homepage": "[󨗆󂖝󻺜񤨌𛵯LsL󈣵U5񝂭p)(n󉊬T#\u0019%Nz\nꅔ(n\u001c򢩨H(*6\u001f<򆿝\n􃉢\u0013xu1\\#󥶢𱾷5𗃂k;𔚤򰃏@)x򻵣A\u0001-[󖩀", + "name": "1󤄱*c\u000ce.󦨡\u001b򊒐9\r\u0007o", + "ticker": "e\"Yf񳶬", + "description": "𻤵y􄄊󋜢x/EHw{񊡃\u0011C񉯈hI6\u0019#aῖH&\u001b~𽪅\\򽹰\u000f\u0014K􂡂񙳷\u0011}K󇝑)^]#R/qR𣰅\u0008󷱬%\u000e\u0004,񌶠5\u0001\u001e󳎓\u0018]񽅽󿻕i𲗅S@\u001c󪰿\\=[R/\u0011$\u0014nZ󺉠R򈏮𞝥,>ゲ\u001b3Y𚜒7s񏿓닒_CFQfh\"LQ\u0007񚣍򞞩𒉓@G*\u0018\u0002򽊻au𑸁{F𩃱\u000e򱕒6@I>5\u0000m񘣱V!kD{\u0004񞨢T5 p`\u0013c𜠯O6񧡃Vn\u0017D1@\u001dC&E\u0010'򕜟1\u0018\\}Dm>F󂺰_\u0001򗊩=򫰥񋙁i=򛄅e\u0005𴟽;nn?\nE)曟G񴕹PKb?󟷊񶜋󠅬Y D㷥w?140\no\u00102\u0013򮡨񒻂n.\u0000󍏍𨪅cD򽈣qA#𕲮n򨈡7[\u0012󬧣A]z+𐵀s񇴥U$Gy!5Y򧖦\u0007,u򰎨xJ\n\u001b\u00137'\u0000󪹦\u0010#\u0007*7\u001eW\u0000P(#{R1mN󺢚񯡪}e*3\u0003" + "homepage": "!𬹬-", + "name": "\u000cUD\u0014񘉊\u000eUN\u0016􅢉𠘑\u0019{D񞴿W\u0019晩\u001c", + "ticker": "\u0005\u0015>7@", + "description": "XDF~D\u001evka{󕈡s𿜣-\u001bn\u0004^\r+$뀬󛙴%G\u0010_\u0000k񉤌򕛪a\u0001o\\z\u001d}\u001d𘄂&`\u0018\u000fGqQj$􂻼\u000f\u0014m&xZ&U\u001d񺐥qH^\u001d\u0008\u0007󚱚s\u0015t򖻎\u0005\u00127\u001dk=򵄤_;\u0008?;\u0006!𐶪\u0007Y#q^Co쭬\u0010\u000e\u0003-Fo񾅱o𛎍\u0015(=\u0016\u0006󂖧k7T\u0019V-y+\u001cS񰂱󯊤L񊜖\u0006`l!1_|\u0001_a.򫘻\u000c+\u000bat7\u0016~\u000c-|𞿎񏐯j\n\u001aHI󏦧ful\u0001\u000bR\u0007\u000ftH\u001dW}mM󵪐󷑿S񅎫Ba{J𼽁󖱛𧧩󢠩,!?򎵂􆪖xo򠯦񌍽\u0010\u000f񠓱\u0007𯚹򏯧\u0003\u0005񕃌g񚞒\u0005hnK\u000bC\u00188\u001e\u0000U7d\u000f5񾺟By\u001f\r%" - }, - "id": "pool15yyjkf59wkgnm55a39gustzavhvfpvd2hjrcdd7fyupeypugn0q" - }, - { - "metrics": { - "saturation": 4.542888075952911, - "non_myopic_member_rewards": { - "quantity": 284948441368, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 13251189, - "unit": "block" - }, - "relative_stake": { - "quantity": 0.17, - "unit": "percent" - } - }, - "cost": { - "quantity": 84, - "unit": "lovelace" - }, - "margin": { - "quantity": 73.89, - "unit": "percent" - }, - "pledge": { - "quantity": 160, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "g,/\u001cX򖥌8*)i򿳩;&pex񨽒񕜳*|𹨠m<l\u0011娩9𓆣\u0003񟋬𼼒P񖮐\u00040򟠏b񘭼I\u0014XuI\u000bO骳_^\u0002\u0001\u001bW󰖷񾬛}6\u0006:", - "name": "@j 􏛔P򫫪|\u0013񸁳\u0003nkZhl\u0018\u001aYz.", - "ticker": ".|ES񰦜", - "description": "B\u001eu-󖐘EE;\u001c=z\u0019񪌘s󟛞\u001e\u0001𕆫;\t涹F\u0018\u0017󸴙t2󨅭\u0010\u0011𷱾_楯󞑓\u000c񰗤@H\u000e􄩘񊍀󡺅E/񧓎}Iq$R' xom\u0003>\u0000-\u0004@S\u0010k]p~EH弔􃱢=󝤢j󭓪򺙛'/򓇞 \u0002gV!XB\r^򾹞LQx򍥀#}6s\u0002I\u001fH,i򦉨򒝳6󯱞$􎝧M\u0004V;󐕧B" - }, - "id": "pool1sugwc32cs0tu8eh7gdrx5uuv8r6ddqrz7pphjzc36hutv98969f" - }, - { - "metrics": { - "saturation": 0.2846303982152554, - "non_myopic_member_rewards": { - "quantity": 318454246351, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 20119544, - "unit": "block" - }, - "relative_stake": { - "quantity": 8.38, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1904-11-29T18:00:00Z", - "epoch_number": 3224 - }, - "cost": { - "quantity": 228, - "unit": "lovelace" - }, - "margin": { - "quantity": 94.66, - "unit": "percent" - }, - "pledge": { - "quantity": 211, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "\u000f\t񘐜񶈧\u0004󜯃󆿞K򨨡j", - "name": "<:񌻓G~0$\ncN9,mx󦏫򶋃\u0003\u001e󉍘򣧋\u00172\u001ew0:򿟦V?+\u0007$􈎛񒪵o\u000f􅧜\u001ad\u000e򈍱򨡻,\u0006򹱸$_\u001d!\u0010", - "ticker": "6;\u001c28", - "description": "m񗥊:V\u0003<;'G\u0017𼲌󋙧lZ򜒿􍆻+\t\u000b𽕟ᒢ!T\u0007\u001e\n񟺾\u0015𩄙󬁐9h*tw:\t%\u0019𖼵𶽿86\u001e.F)򒬇i󿽳򯳲*򪙂\u0004B\u0001񞦑Q?\u000c\u001e\u0016𫈊𙂻􅈲`B\u000f2_\u0002\u001e\u0012񨖸&'UQ\n\u000b\u001c\u001a`^abSs򒮽\u0001򨴻噕:􃑂𶑓vL\u001c󦌻^a񸿨\nD,S\u001d\u00169𵛎$\u001f\u0003\\򏝦6b(㌝+󦲵F\t񮿇󑲓Z=\u001f񰗣RIzi󞚧򕐚\u0000t󾀂\u0006񭇅]\u001b󡳜\u0011=*pS\u000b񶼾k󋭊/i!8\u001aD1\u000f{El9dp𰝝\u001cF󩹑1\u0018Q(T񂧁a񻂥F/>g򙪸" - }, - "id": "pool1ln87mn08t0neqhr7xu5hdh68scmhdrm068zyleffqh6pjg9zxqt" - }, - { - "metrics": { - "saturation": 4.029314407285925, - "non_myopic_member_rewards": { - "quantity": 482040178664, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 7690761, - "unit": "block" - }, - "relative_stake": { - "quantity": 92.31, + "quantity": 27.72, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1865-08-23T03:50:01.864911231014Z", - "epoch_number": 15041 + "epoch_start_time": "1873-04-29T22:21:32.770783184697Z", + "epoch_number": 20650 }, "cost": { - "quantity": 184, + "quantity": 50, "unit": "lovelace" }, "margin": { - "quantity": 68.53, + "quantity": 29.44, "unit": "percent" }, "pledge": { - "quantity": 174, + "quantity": 240, "unit": "lovelace" }, "delisted": false, - "metadata": { - "homepage": "\u001bZPv//%2𚈘pI󩝯\u0015\u0018D\u0000\u0018Q\u0007-.𞖝~Y񗆞깔򂧝!򮅘;I򰱜Y%\u001cD\u00194W\u000bPd򕛾F􊶡񟕥𼲳(O񭄮 0Q#򏟜򛖱X򹛢;\u0008Y`:*񻛄򁯕󔮊c󡃈𖋘'~p#", - "name": "u򐷶hKq󅎆𚖹wQ]{!􌔷EC.\u000e<\u001d񑅿Z6", - "ticker": "^𬻁~\u000c", - "description": "3򷗨<񬤸󈔮\u0003񙰌\u0016\u000f񢩱I\u001d2N\u0001#y\u0011򋵘\u0013T\u000b.6l\u0006p񈝾󢘘g\u0005\u0004񽌞\u0007^򦴖𭲱\u0019V\u0001&\u000f\u0005\u0018[񝣪dXX\u001at볯W)􋭱kpxV\u000e\u000b1P򸲴񊰈|򄅁񶞧D&Tr>𰏌}񁓜.ey\r7򢐘\u0008(\u000crs\u001c򪧗S񪎄z򔤘𹱓Gq\u001e\u001d򶀬+R𪣸aJg\u0013hB󇕒񞺏7(򴏜[\u00012SUM󛯤\u0012t1R򤘕7}/?r򎎴{G1𱕸?񿅼Vw𭡅mT\u0011\u001d\u0008򀴱Sj\\h\u0000\u001e\u000f򂲘\u000c򋈰M\u001ejX1*+\\\u000b񌫾K 񴋝\u0013񽜲󉴅󃫍\u000eH\u000fW򽋐 󉪝\u0001+3\\\r\u0017y&\u0000\r$󴉲Q\u0007hC󅏊OD򤠷Z󜦾\nzNS󛦘򠫥񒈙\u000f{\u001fY󭰄񶧜Z򗼐~򱹝V\u001e" - }, - "id": "pool17y0069744qa06cx03mvcd6q86fmtag35vusqlg8vx4ql7jlcjht" + "id": "pool1wmydgnrjdlng3dpejhqe7rlv03t8hkywz6jj76strjq2c6t3epv" }, { "metrics": { - "saturation": 3.4093472827931914, + "saturation": 4.822813774502142, "non_myopic_member_rewards": { - "quantity": 30885745440, + "quantity": 175175422249, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15365280, + "quantity": 1117423, "unit": "block" }, "relative_stake": { - "quantity": 89.71, + "quantity": 95.94, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1878-09-28T17:57:19.826633160012Z", - "epoch_number": 26005 + "epoch_start_time": "1879-12-06T02:36:00Z", + "epoch_number": 27346 }, "cost": { - "quantity": 186, + "quantity": 107, "unit": "lovelace" }, "margin": { - "quantity": 95.13, + "quantity": 70.54, "unit": "percent" }, "pledge": { - "quantity": 235, + "quantity": 38, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "򧚗Q'𵳝f򹐿c7)񅚉\u000e􍣌񱘬󋰹Zp\u0001Ou񗧇󱿞e􂤥4\u0018mCt\u00015񝚶󏽳񣃏vC񈳑kN󍒻󂟂񪧪\u001453\u0010󙻐h\t=󔾽)񮒨\u0016󃩭Kc5W񭴰􄏷Xr񡓿󓦦Y<\u0008V", - "name": "qklx9􎯻𚻃\u0005񽙋)󕴽u𚬟r򧃓\u0017ܵ&𚖁\u0015\u00000z󂽔\u0011qY*񈬓u 3W0\u000e񮸋", - "ticker": "Yv,w", - "description": "|I\u0002򒅄W\u0004+\u0017򑰱#N帱:\u001a󭸊'Z$\u000f宑🫠\u0012\u001ct\u0010KX_R9.,򄂅􃼰|򒥴!\u001b򈮳E\u001bL򣈦򏨃򉏨\u00173\u000c\u0013񴱥VI\u000eh$f\u0000\u000f}$\u001b񫠦𼥱W=񎦴񁘢V`&`G\u0019򡝅e񝃔\u000c\u001eT󎙵(貇򐒢q\u0016/\u0002K\u000eA_E!\u0000:tT𽻻򬢉bsW\u0010򊟑r򥓧\u0014X鼱𜻿o\u0001@tJ蓊\u0008@Q󹺂%;򄦺c##\">󷑟C$vzJ;􍑂𭬮2F񀣸e򞣟a󬨛񇓖\u000bz1𜚼7-f񊖒`򙤉􇨝cl=a򕣾󴏎򋖊󟵪z\u0003򮉝񐧳𣤪d\u001b\u000e9Fx󗲟a𾤊u􊪨t\u000be󟻶z8\u0011\u0015򾎌\u0001\u0001p+,򝽧J\t^*\u0006^&􀓙\u0005fso" - }, - "id": "pool1gkke7n76rly8s2zzfsmalvjd0qesphnsyzehcgqavyc860wg49s" + "id": "pool1n86906fc762fv4gx7m4cas4v3z45qgw82ugjrhmxp89czu6q2ht" }, { "metrics": { - "saturation": 4.982499609441208, + "saturation": 3.659933716672442, "non_myopic_member_rewards": { - "quantity": 65682847601, + "quantity": 896084098243, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3360696, + "quantity": 8677740, "unit": "block" }, "relative_stake": { - "quantity": 92.94, + "quantity": 14.33, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1874-11-25T03:00:00Z", - "epoch_number": 15160 - }, "cost": { - "quantity": 53, + "quantity": 10, "unit": "lovelace" }, "margin": { - "quantity": 37.03, + "quantity": 26.09, "unit": "percent" }, "pledge": { - "quantity": 179, + "quantity": 236, "unit": "lovelace" }, "delisted": true, - "id": "pool1v3nh3weyq8pshlq5fvs853p8flj9tj5cp27vs4yvhlhe2du8v04" - }, - { - "metrics": { - "saturation": 0.19117183083001976, - "non_myopic_member_rewards": { - "quantity": 628138185953, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 14106395, - "unit": "block" - }, - "relative_stake": { - "quantity": 69.89, - "unit": "percent" - } - }, - "cost": { - "quantity": 238, - "unit": "lovelace" - }, - "margin": { - "quantity": 26.08, - "unit": "percent" - }, - "pledge": { - "quantity": 96, - "unit": "lovelace" - }, - "delisted": false, "metadata": { - "homepage": "1<򕁟T0k(򌱴(i\u0019X.򝍍\u000b\n򚦢󤨶+3>\u0003A%󠡩0&󞽃pp\u0005\u001b򁔾3e\u0010s1s񲍫3𚃬A󸠰)ㅸ\u0019\r,򐊤UU\u0013o?_BD𷋄ﲪ>\u0013Z򦀓x}\u0005v𬅵򻫒\u000c\u0010\u001e3s􍓀\u0016wG񜂋T\n𫨑96", - "name": "𡔦𸏮&`H[󮟠0k\u000c/𐁃nl\")WG\u0015E#", - "ticker": "(!t", - "description": "\\\u000e{B􏀾(=\\\"Y\u0014!/9x󘃕@Q雲\u0001\u0011🈴6D󒚹=6<3\\\u000e\u0002\u0010A񪎥 \u0004ANqj󏿌F󳑦C񢖹M􊹺\u001e򾝞3/he𽁕J𮱕\u0012%O񖜤𢲬𥃏WeV@I𢊁\u0006𺸁\u0014񢖟𞠉?kA񉧀󣓐8<\u0006󵒪􁇸𼐓ut𚢞\u00142\u0004\"񗋸l\u0011򥢂)\u001a򖠒\u000ew𾞿[\u000f𥊴򒗻=򕱤\u0014786r\u001c\u000b/󭙽*\u000c𲨦\u0007򢓏\u001e􏙪󵔜𹸙𸁈&$r;\\.w\u001ez&}wm\u000c\u001a򡞊򃙮󩧪^󤭔󨸃\u0011q򱪊󽦝񋏺\u000c\u0003\\F$󢒅񀫢𨘛~(󮧄\u00010\u001e`=𛰼窚鼞󧐏\u001d𜻀\u0013#󇗩" + "homepage": "`t򞴔)C,O\u0004;(87<`", + "name": "񊅁񭆚􂘙d󟾆28\u0017\rX]\u001av񁌅񢰲𓜣oc񛔍&𼚒򯖇Qp\\󳯕`..\u001a*sL\u0005\"1,\u0001񏱂\u0015h;j", + "ticker": "?\u0019" }, - "id": "pool1payfmc699gvye4y0n6thlz0p6e5slr68up9ytjafhvs4uu5ff8y" + "id": "pool1t5ufrawd3pw4s6pr2rh45l63ysfsl0y2j8cng4g628x37qds5u5" } - ], - "last_gc": "1883-08-21T11:11:33Z" + ] }, { "pools": [ { "metrics": { - "saturation": 1.5640472206138618, + "saturation": 0.18951208421820576, "non_myopic_member_rewards": { - "quantity": 776345336942, + "quantity": 86060087827, "unit": "lovelace" }, "produced_blocks": { - "quantity": 901712, + "quantity": 8277704, "unit": "block" }, "relative_stake": { - "quantity": 34.5, + "quantity": 16.3, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1896-02-29T11:35:54.812421727863Z", - "epoch_number": 29968 + "epoch_start_time": "1900-07-10T14:33:14Z", + "epoch_number": 29509 }, "cost": { - "quantity": 99, + "quantity": 111, "unit": "lovelace" }, "margin": { - "quantity": 47.71, + "quantity": 35.85, "unit": "percent" }, "pledge": { - "quantity": 246, + "quantity": 62, "unit": "lovelace" }, - "delisted": false, - "metadata": { - "homepage": "\u000c\u0018\u0013񳶯wp󊠻󰉗񂜄R󅈖󌭷:􏸘P1@\u001e򋁱󲓷\u0008\u0013\u0006\u001e96Sk𼑬\u0007m㢗\t\u000ci򰁀𦖫wj\u0000R7󢬮\u001d򏐫j󽁩3齝E񻋞!Lpj\u000b\u001f򪂰󼌴~􉛻.,@V𜱔2v3\u0001񴴢*?", - "name": "k*\u0013`8𞓣󮳘񈚛", - "ticker": "+*\u00185񷝕", - "description": "䙻\u000eM𚏼𷨔\u001a񞐘%q\u001f-\u0000<\u0000+𙏏w0򰾚\u0004,񉎅`$d񜑎<󷡆񔢜/ⓢ򆆂>jf􋻃􋔨\u0014J\u00016Hj 򳹹\u000c\u0015w8򪄒e4縅z~\r[,\u0012ep|\u000c\u001dZ꺅񺝎򓳦}D\u001euf~u\u001d򁤣" - }, - "id": "pool1mp55hm5qpwtkhtxecr8n550rg8vmvg8ccz0x4qsjwquj7hx8a3n" + "delisted": true, + "id": "pool1jeq069e5nfz6ng6886v92jeakrs2tfzq2hza2kwxqxfhg8vlkhh" }, { "metrics": { - "saturation": 1.2255504663822747, + "saturation": 3.5665626329173516, "non_myopic_member_rewards": { - "quantity": 917082492212, + "quantity": 430306548784, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3179862, + "quantity": 819508, "unit": "block" }, "relative_stake": { - "quantity": 87.09, + "quantity": 25.25, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1895-11-16T01:40:57Z", - "epoch_number": 26103 + "epoch_start_time": "1885-09-08T15:58:24.082614509202Z", + "epoch_number": 153 }, "cost": { - "quantity": 149, + "quantity": 154, "unit": "lovelace" }, "margin": { - "quantity": 29.96, + "quantity": 96.53, "unit": "percent" }, "pledge": { - "quantity": 71, + "quantity": 188, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": "2\u0014s򋊝򓽈u\u0018񩬺󔤉򴣀􉙶!󇗦|񪤥0򎹡􁥀󏥟\"𹙢\u001dX/\u000b/\u0017k.>\r\r/򤉮𲃿󐭄\"닓:\u00059$|u񣡷򍎙%򯏙\u0002󂓶Pk\u0012(\\\u0017\u000cd񾫘av\u0013\u0011\u0016􎻍z]Pf,IXN񎣁", - "name": "gp6􊭴x8𑪺󸗤򕦛񑡞d{\u0007?򫶑񟂏%CD󎇸W򬉕e􌥸,/󖒗B\u0008򾏙\u0001hN5N󣄹\u0010O񚵟r", - "ticker": "8\u0018w" - }, - "id": "pool1ta4fnydmrx7uc9nsxs3parxdd0gsefql8xxm86y5zydzq0jdmpf" + "delisted": false, + "id": "pool1ffthylrhkcjw9c03pklqq4wnneqp6xsd6ne5p2mcrg2xsxp44a7" }, { "metrics": { - "saturation": 3.0759643668079257, + "saturation": 1.264213857230319, "non_myopic_member_rewards": { - "quantity": 542576176895, + "quantity": 130316610559, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4069263, + "quantity": 2341878, "unit": "block" }, "relative_stake": { - "quantity": 48.38, + "quantity": 30.6, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-11-03T17:33:55Z", - "epoch_number": 6492 + "epoch_start_time": "1902-10-12T06:24:25.106852151421Z", + "epoch_number": 5099 }, "cost": { - "quantity": 58, + "quantity": 129, "unit": "lovelace" }, "margin": { - "quantity": 58.47, + "quantity": 51.6, "unit": "percent" }, "pledge": { - "quantity": 249, + "quantity": 64, "unit": "lovelace" }, - "delisted": false, - "id": "pool1faq8vax4jpwvy28e7250fhzxwj9uzca5kwayt3jn8aw6z5krg7m" + "delisted": true, + "id": "pool16qn0es9f3ft99htw4j30cseulq0ru7zsuqc4r2e3hq6as2l4ss4" }, { "metrics": { - "saturation": 0.6601769175632055, + "saturation": 1.1927713801373936, "non_myopic_member_rewards": { - "quantity": 85670336582, + "quantity": 238200775767, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6369007, + "quantity": 22359949, "unit": "block" }, "relative_stake": { - "quantity": 65.4, + "quantity": 93.46, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-05-14T14:57:07Z", - "epoch_number": 31236 + "epoch_start_time": "1889-02-28T17:00:00Z", + "epoch_number": 5241 }, "cost": { - "quantity": 240, + "quantity": 249, "unit": "lovelace" }, "margin": { - "quantity": 95.34, + "quantity": 25.35, "unit": "percent" }, "pledge": { - "quantity": 191, + "quantity": 20, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "\u001e&C򌎥QPHMa(-\u0004", - "name": "Dl󌁥񳖉=>󗫨󪅠񩧽񝁜񺖢", - "ticker": "B:󚐇1S", - "description": "C\u0011\u0008𸆤󩆯]~\u0010D󅆣 ln󸀅\u0001'񙭢D򠊄T񸝃n5H򓝪}\u0019Y\u0008\u0004򗳜Kf􃀞\u0013|G\u001buW\u001a^#򦬿<\u0014𒂦d\u0005󚎔􉖛Je+Ajt򶎂򳍼\u0014Yz򰣕\n\u0013𽺬\u0012󚿩)3𳱓#h#󶚡hj\tGQ;\u0012}^:\\BD\u0015򛤋\u000b\\\u0000 q\u001ah\u0015s^􃗿QG^򪺼瓴M\u0011Du񿒎\u000e4-𛚃앮V9&RA\u0001i`񢟄^\r􄖳򠛄\u0016Z󱀝8\u0004~\u0007񋣞]󐤠򠂹R󞜠;񇕘񀸃򪲹󍈒+F" + "homepage": "󩉗K\u0019񈒎\u0002 򗿩J𓀟(\u0006I\u0014\u000flJM\u0019󞠡񹮈n𵇎.\u00151󌜜𛤾#m\u0007vG|5𧤗\u0003񎦪𾗇8\u001fm@&xIy`𧉯񝃻󣡅󋿤u}𑩄\u001a񲍣hep⢱|P\u000c񆀳-񏍊6R\u0001D\u0019eHXu#a;pV", + "name": "󙎆e.𹏅^1򊬠i詸 U񄥴򟯿v\u001a򇯈j?鹲Q񏹏vI@uWIh;񟮵,\u000cb񆗩𠆻\u001e='!񒺘K򥮮=󳉮iKҼ4􎆾", + "ticker": "N@@.", + "description": "\u0012 K'HVm \u0015CV񔓱;\u0006)v\u001a򪭧\\'崓HXf񳡦󡿱񪆺񌞤Hd\u001aI.\u0016n񗺹h#$\\" }, - "id": "pool1qgecrzhwhu5ydvqww8ng7exhya489lwchznyxpxuelrdsjn5x80" - } - ], - "last_gc": "1859-07-28T05:57:09Z" - }, - { - "pools": [ + "id": "pool164dpjuxwhwjjzpntz8wp3jqvfe6dur9fjqqyy9s3afy6vcggqwx" + }, { "metrics": { - "saturation": 0.8706037623709478, + "saturation": 4.7948588091499635, "non_myopic_member_rewards": { - "quantity": 756665441344, + "quantity": 382610537844, "unit": "lovelace" }, "produced_blocks": { - "quantity": 3519701, + "quantity": 6141752, "unit": "block" }, "relative_stake": { - "quantity": 91.24, + "quantity": 75.47, "unit": "percent" } }, "cost": { - "quantity": 24, + "quantity": 104, "unit": "lovelace" }, "margin": { - "quantity": 54.11, + "quantity": 21.55, "unit": "percent" }, "pledge": { - "quantity": 226, + "quantity": 5, "unit": "lovelace" }, - "delisted": true, - "id": "pool1n6kxuzey0ynnyeat0qp29ulhrtsmw87ve927q94alvshqpd8che" + "delisted": false, + "id": "pool10lwycdfkwhqpjleztqdt8e5ck5hr5r7te05c7y4zupxcjvh6uqp" }, { "metrics": { - "saturation": 1.9448174798759332, + "saturation": 2.5315014801220492, "non_myopic_member_rewards": { - "quantity": 470254565274, + "quantity": 426869920924, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6808493, + "quantity": 14088916, "unit": "block" }, "relative_stake": { - "quantity": 10.13, + "quantity": 77.17, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1859-10-12T12:04:44Z", - "epoch_number": 14667 + "epoch_start_time": "1893-10-03T13:38:35.248936188598Z", + "epoch_number": 17800 }, "cost": { - "quantity": 76, + "quantity": 157, "unit": "lovelace" }, "margin": { - "quantity": 48.25, + "quantity": 39.15, "unit": "percent" }, "pledge": { - "quantity": 49, + "quantity": 29, "unit": "lovelace" }, "delisted": true, - "id": "pool1q8zwmwe6eypzuew4xsj5camekpg80rf5grdu7z7yw6tcx3n9qkk" + "id": "pool1uefy4tw56u4lc43nn25tlwcvmygyggju4t7wk8h99vl2wpcvj53" }, { "metrics": { - "saturation": 3.874317563027569, + "saturation": 0.5532026637096904, "non_myopic_member_rewards": { - "quantity": 406560199447, + "quantity": 238197639346, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16748081, + "quantity": 7612090, "unit": "block" }, "relative_stake": { - "quantity": 4.31, + "quantity": 9.9, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1859-01-01T01:30:20Z", - "epoch_number": 2302 - }, - "cost": { - "quantity": 4, - "unit": "lovelace" - }, - "margin": { - "quantity": 62.66, - "unit": "percent" - }, - "pledge": { - "quantity": 230, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "\u001bTO𾣷'𩫏\r򧢰k񛸡(`\\󆣬񦎦\u000c\u0004^k$呴b\u0013EP=\u000eIks\u0008:\u0010\u0017\u000e\u0002񵐲b񳿭[tʧ4v\u001c56G𴫚󲣳򲒔6󴶻󊐦vH", - "name": "'󅽒򅨙4\u001d󚷧Pv'Er'\u0016&J󜧝𿶉1J", - "ticker": "~n󵐣.", - "description": "vQ\u0007𛦺oj^jLoKP񺍑A񭓥\u0012lr񤷄\"~\u001c6\u001c" - }, - "id": "pool1p9tx3gnfactvqf76f34a6ap36jcyx2dp99nzy79ywdkcq2879p9" - }, - { - "metrics": { - "saturation": 2.8940185338346893, - "non_myopic_member_rewards": { - "quantity": 678326885977, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 21183585, - "unit": "block" - }, - "relative_stake": { - "quantity": 45.49, - "unit": "percent" - } + "epoch_start_time": "1889-08-05T01:50:38Z", + "epoch_number": 18516 }, "cost": { - "quantity": 49, + "quantity": 247, "unit": "lovelace" }, "margin": { - "quantity": 76.47, + "quantity": 73.98, "unit": "percent" }, "pledge": { - "quantity": 153, + "quantity": 13, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "\u001feH\u0015򶏑򵸕BV쵀^W򞧦\u0003.,\u0019򘇫򒔪C>\u0006\u000f j򱕑\u0004-;'񫕺8_z->lnV񀦰^\u0006b䌯\u0019\\W\u001f?\u0008󐖼A\u0014򜞈~G8i\u0013<𢬑iOืu{\u001a_", - "name": "𿟬ECp$9:Tke򘟎󡔴𖘹񙽵\u0007~\u0014&!󑊀󠌊\u0019irS\"侞+M󐕚񆽠", - "ticker": "\u0003򋕋򃹔\t", - "description": ":B\u001c\u0019\u001d\u000c\u0004󿜥𽌤U@zd#l\u0002,\u000fRU򟷵x񁕠y!T(P[a𷌰\u0000􍣦c\u0006XL_u򈈚v\u0006c14oEF9A{Y≩;󮿟CC񿨃=w\u0006𵪩\u0018hqBsS󀕪iU[mj\u0005\u001e\u0017삉󬝟c񐧲P򲛣\u0010\\\u0014\u0014d󼌣\u001e񊫷W𬓯Fh\u0014\u00050&`}|󧐪\u0019p)򲰇\u0005𽎸񣙵Nx}@}\u001c!\n\u0015|o>󼠠t^򽨓C2+&2r=z𕀜\u0013#\u0005k0:" + "homepage": "\u0001t󄰲Of``+\u0007񚀏󪹺rx>V*f\u0001H>򯵿?򩢂􏩫B\u000e𡊥񿸒.q񨈠`󨙸񓜗Y\u001c\u0012􍃩񉍹S5|>򥇷Ni_-󫹊!k_򸛟6Wn^\u001c󵀚*󢡍EyT\u0013", + "name": "e`0i4@^'\"󝎙򈍬󮦓󊦚\u0008򑓳sj\u00194\u0003';H󶷕\u0006\u001a", + "ticker": "5𕘀=", + "description": "\u000e\u001b/𵿾J9b󯳥\u001dC/?y⭵C7\u0014M񃧮񉏏\u0017ggXv󤀣3󺔃򘚣RY񩕪\u00123󣥶t 󖟮a\u0012\u0018/EY=(x\t򗃹mEW\u0001)9~ 󲜶8=􎌚\u0000\u00156hJ\u00139\t򰽔򏙦\"\u000e\u0002񂮜~𲾶`'\u0014\"񈱉CP^>򁝶", - "name": "𽉃a+\u0012+\u0001\u0018\u001b", - "ticker": "Zj򧽈", - "description": "󝠩\u0018𛼀\tL0\u0012V󹋜5rxTR\"}𗐺o\u001b,\u0014𿓗V󐰑n󌁦󄆱\u0014bDyNE\u0013\u0008񾝌𻲞|􁪩4򂟷mMn񈝶?񄩡xQH򹍗\t򅘬\u001cC򡈃򹻄@}^}xo\u0015򀒎>𶮿Al^N\u0014\u0016􋣺NSI0#@A3\u0012󣝾\u0008\\-Y򓱶u\u001a;\u000c𠔯Au𶖺*\u0002\rI\u001c\u000fW񙏄\u0017\u0005񙵻\u0019LDC\u000f\u000bK\u0013\u00178\rV񵺞W\u001e󻡿rd󠈜\u0000J򑬐R􊼯󤒧\u0017󩸇󆼴3m񛰯(\u0017C2}񖇋􊍮l🵤A\u0011a鎳󡀻&𥊶\u0011󍜪K\"𷁬VY\u001bt\u001co+򩲀𹞿\\8􏍤v\u000enIGO'Ok'" + "homepage": "񷈠􎧇_󟀈\u0016򔝅\u00111񝵟p򒵺F7%'\u001c\"?𥵣\u0002򝑒FE\u000b󟪏񐇆𧼍񤊔񄬱,@󴩱2B!cAFC񿀗w򪝜;F:Z0􈠝\u0016\u0010]\t\t*H𝏕񙤃𐆦Z\u0003]e򃉀\u0004\u0006RI\t", + "name": "O", + "ticker": "\u0002󱇢*%\u001b", + "description": "=.򍪮񬫁\r\u0016P婮񎠝C녟\u001f񗓒3\u0015=Zp\u0017v\u001e$j󭕢\u0003%F T󁄕7𽍡\u0012\u00157𲺹񴹚E\u001c8.4\u0004TE\u0006󚼲񌯢|񜮉񄂹x'h\u0011\u0005򌄞򕭳&-M񛧗\u0012𗢎'e\r򅷉P󅽎N&c񫟕r󣹑G\u000fm񁧊p􋂇\u001d@\u0012%M\u0005KP\u0017򔼪\u0003E\u001cVH$򬚧IG󿾷񐲵.\u0013\"\"<&n>P𼒉Aj󁴍" }, - "id": "pool1qxh0hn5mk35543mqrg4zg50g8z2yxz07u3zf82vud3p32yh3me4" + "id": "pool1c9jqtkjplzvyyr7d3at9t4xhqalw5u49knue58qr9jswgxumjqh" }, { "metrics": { - "saturation": 3.2729297661118126, + "saturation": 2.8220190771005003, "non_myopic_member_rewards": { - "quantity": 200324491657, + "quantity": 486272784210, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21323407, + "quantity": 16610990, "unit": "block" }, "relative_stake": { - "quantity": 98.67, + "quantity": 48.81, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1885-06-23T22:08:43.602205571255Z", - "epoch_number": 30090 + "epoch_start_time": "1880-10-30T00:00:00Z", + "epoch_number": 1707 }, "cost": { - "quantity": 195, + "quantity": 231, "unit": "lovelace" }, "margin": { - "quantity": 61.28, + "quantity": 7.85, "unit": "percent" }, "pledge": { - "quantity": 134, + "quantity": 207, "unit": "lovelace" }, "delisted": true, - "id": "pool1c2gljn8yquf6kx5zhfshw8ey54uxkeepzs3xw9uhn574vv6raah" - }, - { - "metrics": { - "saturation": 4.216916233306788, - "non_myopic_member_rewards": { - "quantity": 190628761704, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 9605855, - "unit": "block" - }, - "relative_stake": { - "quantity": 85.92, - "unit": "percent" - } - }, - "cost": { - "quantity": 118, - "unit": "lovelace" - }, - "margin": { - "quantity": 13.06, - "unit": "percent" - }, - "pledge": { - "quantity": 74, - "unit": "lovelace" + "metadata": { + "homepage": "\u0006\u001f񪠿i`eMr%'򼁀R]b4\u000eA\u0013\u0010z񾪏1ᥩASxGn󕊍zX󛞽UO񃶴&\\>jq{M#C򋀠\u0017񄜶4񮽋\u000b~k", + "name": "_<-\u0010O􉛊r󹻅\u0003򘕏mm\u0001?\u0004\u0011ﭩ;,E\u0001\u000c𓉔\u001c\u0017򲡯f;\u0018&y\u0018K+n𛾞\u0019cM󴀾2񼍤", + "ticker": "F(%􀟏\u000b", + "description": "󭐿&\u000b򞊸🞥󹼕x\n󁭹p[U\u0015𩿯A\u000fo򓸉\u0012_򁤆9Jk\u0008`3E󯫍D\u00068\u0016w󸭏Aw!:􅝃񓳣p􌷭\u001c\\>򵗲)3J(;b񨪋񅡻%" }, - "delisted": true, - "id": "pool1484ent3jupc8rx8nlqktam2h2upfjzp9t687ratxvywhjqlrzc7" + "id": "pool1jxgr3vkd24wmqsp4vh9ayfmhfq52wph4pnymcpa5cvqaye3qwaq" }, { "metrics": { - "saturation": 3.204617367900715, + "saturation": 3.1071825072904122, "non_myopic_member_rewards": { - "quantity": 520748549590, + "quantity": 265870398862, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16308652, + "quantity": 19792023, "unit": "block" }, "relative_stake": { - "quantity": 2.95, + "quantity": 38.63, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1862-06-17T04:17:32Z", - "epoch_number": 27681 + "epoch_start_time": "1901-05-05T02:57:58.955473977949Z", + "epoch_number": 24201 }, "cost": { - "quantity": 2, + "quantity": 254, "unit": "lovelace" }, "margin": { - "quantity": 18.42, + "quantity": 25.55, "unit": "percent" }, "pledge": { - "quantity": 90, + "quantity": 252, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "񃒓>󔇾!2򁾑$񷠝0U'񟖟F񭒯58򃤸x\u0002ww\u0014񘜊d򲖗\u0005\u0016𼺜=𶍒m񀛴򅃹[𫇲\u0002𡀽𢓸F\u0010R\u001d]k\u0008𤈄zy\u0015 9𢎞󫐐\u0012Q򁞢t𖻽󶮦]!PXH", - "name": "^\u0000鑒񑩷r\u0010NC󈣭8𿆏M\u0007|{\u001eRc\u0007󤼜󍼥\u000bWVSV1񞥯\u0018􌑩%l򚡛\u0015𣽶\n舸S񔏓G\u001c􂺚", - "ticker": "\u000e񮟍%/", - "description": "\u0000󅴟󹚸\u00019aE5󅪯0_󧀆$򻺭Oeg c󗫷A\u0019)򁕓񌭗B\u0005񛹫\u0019\t\u0001\u0015L\u0002 ~񡹰4G6Mp!%LR\u000e\u0012\u000b3t\u001c3򬤒\u000e򘩟Q\\=迷j𸟳\u0017AK\u001f?|Z\u0012\u001c\u0001o", - "name": "DG\u0013-.NH\u0000(񒝀\u0011񫠳𜓎G\u0003c\u0010[2|\u0018}񅡜󄧵Y\u000fZa", - "ticker": "񱧫L򔈑\u0010", - "description": ">񒅥\u0012𳤁򅁳\u001fBxjvw񆷦a3􎠳d\u0016򞧏\u001e\u0010KM󰀡*񀒋\t\u001c󱠀9x󮓩񑈮𧚮rJ󄹧K;\u000c򫌔()񌁈\u0010Qrseda\\꩒𸈫񋸆\u000c<~}񇸡v_\u001e$񃱸\u001a󗮒@򕑻񡲢bFP񃗀񰥠\u0000\"󼟃󽎎[OE񫻑󂋰%Y\n\u0014|\u0017򭺶\u001e\u0007\\񅐂򃊠VVK󋣂\u0010R񨘤󾒂\u0019\u001cd\u0000C󑴀I:񆲄\u0017&y6\u0018bd7T.#d򴦩_?\u00036\u0006n-)\u0014,z\u0004GA 4/\u0010򵇉񴴨3\r2𘒗񒶩k~󧠻+/9\t?v󱕈\u0001񗎷A\u000b=\u00180Ye򌑱2rcFAa񈏍^3񤁸\u0000KGm񛍥\u0017~sR7[#>򌩂cR\u000f1" - }, - "id": "pool19r23yfpvu6ske5fu4l6d07h2qdg5tcpcaa36h4x2df97uccmu7z" + "id": "pool1qef44e8hv6kzpzqy8d72472xnmsu5g84csy26d8qw57r59pcm8j" }, { "metrics": { - "saturation": 4.497143141398755, + "saturation": 7.47359277157944e-2, "non_myopic_member_rewards": { - "quantity": 579167115432, + "quantity": 832905742979, "unit": "lovelace" }, "produced_blocks": { - "quantity": 21523774, + "quantity": 11702195, "unit": "block" }, "relative_stake": { - "quantity": 69.55, + "quantity": 52.72, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1860-04-30T18:49:48.511740950914Z", - "epoch_number": 32450 - }, "cost": { - "quantity": 68, + "quantity": 59, "unit": "lovelace" }, "margin": { - "quantity": 11.14, + "quantity": 66.69, "unit": "percent" }, "pledge": { - "quantity": 197, + "quantity": 68, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "Z\u000b#򨪸8\n򓰀\\WQ\u0019򷵶\u001db]W\n\u0016/\u001c󋌈", - "name": "?𖉲Uiw􀡞@sA𐺃鈦'05򘊂𦥗 EW觟\u0015zkf𠅃𱹤𴐏q'\u001a\u0003P򵼬)\u0001𤢂\u000choO󽂯󱩄󂭬芻񁸱󾃐󾷂𚽳􈓜1\u001bW񸑭\u001c\u0002`𿚍:O\u0013\u0004\u0017I] e/󑺕~𣔪x,\u0006\u0017c2x򧡪)H񼔰e7u%l󾿐\u0015]\u001d򶉁" + "homepage": "\u000e\u0005x𠎖񹲈o{\u000e", + "name": "(\u0001\u0016Y𳿑񛎟\u0003񡯊\u0019\u0003\u000b\n.\u00155𼞆\u0004K{񃳕e\u000fJ\u0016", + "ticker": "lp1", + "description": "􇷽-󼸱s\u0010\u001e\\쉠\u0012(-􀧸򥖚󢼩󺾓h\u0015񍭷:bLRux𹇱l\u0014񻙸򁧠.𧘍m8\u0013kFf񶞿񞚪`񫿦u򴼽=Z񨿽Y\u001a4𩐋\u0019򓁏kXk񩯒=󬋦XF[=nb\t SF\u0010𢼊F\u000eJ4$㯲𑔅g\u000b򋣪AC\u0013򎋾2u񦜅\u0011\u000be>\u001dB\u00050򳻠(\u0007S\u0017Am_PG[򡊺[tWN$󨥳J6N򾋗\u0003'B]?X@iy)6s󄼡.򎎹=󤲚񻷅~;󉭰\u0000B򰎤򑦑\u0014;8z&獝󠣩𓴡󦻵0\u0012\u0013󨊶򱋘\u001eD󔨀\u000e\u0000M4􊱆\u0000\t2aj45S%T!!\u001dnPEyw񗖈\r򞀔(LI𻱣t*m󀐵󲅄瞿<^A\neM?lV'\u001c\u0007򘪪0V񊔱񉠸f񿈼a\u001d:}9M2󞌶\u001cpDX󧶻񯃲U1N󹴷o&󱆷𔘕󟕅𴢗獐\u00010鵜c򕆒 " }, - "id": "pool1w2trr2nk8txjnkmw0nvfq6qasqvzdvzm7d5070up4uvx6rzqh5t" + "id": "pool1l8rnvtkfpy06mxn9sfya0j9t3hmm3ykhqgah84gjghpwwd3qve7" }, { "metrics": { - "saturation": 1.4644276748375513, + "saturation": 1.7526075052673034, "non_myopic_member_rewards": { - "quantity": 755852468165, + "quantity": 637982204233, "unit": "lovelace" }, "produced_blocks": { - "quantity": 17699300, + "quantity": 18340465, "unit": "block" }, "relative_stake": { - "quantity": 56.99, + "quantity": 89.8, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1894-09-12T07:43:05Z", - "epoch_number": 607 + "epoch_start_time": "1903-07-12T05:51:30Z", + "epoch_number": 10709 }, "cost": { - "quantity": 144, + "quantity": 57, "unit": "lovelace" }, "margin": { - "quantity": 56.2, + "quantity": 2.77, "unit": "percent" }, "pledge": { - "quantity": 57, + "quantity": 245, "unit": "lovelace" }, "delisted": false, - "id": "pool1c4x4y6zhevc3kpy2ffc93vp3dpzt5u25n8z2hez4z8pjcdy84qe" + "metadata": { + "homepage": "򭥦S𔲥xN\u0010FK\u001d8N'&\u0019󺒺\u000e𭕊𣜩\u0013򸞂1񑫖'&\u0006ah\u0012򗻎󈫟\u0001Q9\u0015&?`\u001d3u\n󪳲򤘌\u0019@󕋯K\u001a󳔩+e[􁟡=Q򇾍=(4\u0015XR^: 񅪶{l\u001cc[󒛶*񨡌\u0013-\u001a񕔣'<\u001aC0\u0008􈔀v_f󬺐w𹩦󰫓\u001dr\\Q", + "name": "\tDQ򺣔b\u0004jJ\u000e\u0005񃫒MdI󏗼l򺟰 u󤯔\nBR󅩼d𽠇8򭮅񒱌", + "ticker": "\u0012y\u0015Y", + "description": "h񉰳[Xu!􏀤\"!n\u0004OR򑿧\u0017z膼^񑿚7\u0003{#1ɠH", - "description": "\u0016>Ay2􃯁;#I,\u001b򴴬\u000e򴝵q\u0007򨟑1󰈝򱾺9=䞞󝼀𺉿pwi8\u0000\u0019l~\u001cj\t\u0019𩫻g𬻝\u000b\u000f􆾺V򇐓\u00008򴁔'j\u0001󖭫dz5j9K\u0010lt񡍰_\u000eg@.񰒓j\u0016򍘞\u001c+?9E􆮜lZ\u000e𬮝\u0005T𥞘x顀\u001ch񩒧J3\u001aZX:𞱃/BHp\u0016𵪙OX\u0005񱈹𫵽s3񹖠f\t\u001f\"񴇛~}\r𮜓yUB7\u0010\u0004󄶖\u0003r|+-$)=\u0002􀱻N񷪫91\u0018yl\u0015Jo趟c\u001c$]!\\xm\u0017\u0005|M󲞎(𭜎\"e@ 񪞑󕾳FV󉔀<[<􂨺9n򤷶񍸌W\u000bv𑈯O" - }, - "id": "pool1gr6fey369ffsyqrpvpqjt059tg40h3stce4qzjssfel5xnp8wxs" - }, - { - "metrics": { - "saturation": 3.3157793546835155, - "non_myopic_member_rewards": { - "quantity": 139283780016, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 10573517, - "unit": "block" - }, - "relative_stake": { - "quantity": 36.77, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1896-08-05T01:53:49.132860857725Z", - "epoch_number": 13036 - }, - "cost": { - "quantity": 222, - "unit": "lovelace" - }, - "margin": { - "quantity": 69.21, - "unit": "percent" - }, - "pledge": { - "quantity": 92, - "unit": "lovelace" - }, - "delisted": false, - "id": "pool1z3d3yvdpa7dvdkde5qth20azvy4vunfpgv25jvw00rqhzl24mxx" - }, - { - "metrics": { - "saturation": 2.6557214352448746, - "non_myopic_member_rewards": { - "quantity": 701550344156, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 1991043, - "unit": "block" - }, - "relative_stake": { - "quantity": 71.62, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1871-12-05T18:08:30.883028384581Z", - "epoch_number": 25777 - }, - "cost": { - "quantity": 251, - "unit": "lovelace" - }, - "margin": { - "quantity": 33.78, - "unit": "percent" - }, - "pledge": { - "quantity": 131, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "I̩񐰧򸿈\u0003⪯\u0004aO#i\u001c\u001f1Ja\u001c򣁉b\u0008\u0019p|󮍛\u0000\u0019>𞔬󗀔", - "name": "i\u001e>\u001c񜦐FU\\Ze񵹍h&", - "name": "$21P񚦥𜴉CSR򀀙5dH3iH򼚢񒣜r󄄑h\u0001~r#\u0006\u0013d)񞙸񈳡p\u0018U(a퉹Q\u0007\u0000򞈰^\u000e혃񝤭򀏌\u001a󮳴6G", - "ticker": "\u001bT񁿺V򇡚", - "description": "ᆀ<\u001bo_󓣌95󚃧\u0014񼦣󒞟k\u0015f򭲆\u0003j􊅊򖶳\u0007\u0018E/Z􅼜R󻠑\u001e^\u00151\u001c񍈮/}|\u000c𶝢񡔒k𖍩c󱋏\u0011𼆛񘤗/c;\u001at𿿴\u0013\u0015:,<>W5=Y󑷠1\n\u0014<>{㹦\u0004􈌯ఉ\u0004󫢂\u0018k+񹌀V\u0002甑񶀃򐐫򕨼ps\n%t\u000c{\u0002\u001b𬩜]\u0010@q#񈲄\u000f7\u0012R򳂈\u001c\u0003\u001f󾉷򷢊񝉖:\u0018y>v\n;\u0019񯯛3/Si[\u000cs" - }, - "id": "pool1ghncs389wqmggx3panjr2cx5f6yrgwqcc9y2s28azt8z6h362jx" - }, - { - "metrics": { - "saturation": 3.5358645660383567, - "non_myopic_member_rewards": { - "quantity": 244638758229, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 11777110, - "unit": "block" - }, - "relative_stake": { - "quantity": 10.56, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1861-10-08T16:15:59.671838497036Z", - "epoch_number": 1904 - }, - "cost": { - "quantity": 220, - "unit": "lovelace" - }, - "margin": { - "quantity": 36.5, - "unit": "percent" - }, - "pledge": { - "quantity": 114, - "unit": "lovelace" - }, - "delisted": false, - "id": "pool10r3750fz7we52fcl06dv82ranl6csvhgqj4qjk4u6q5lkwku7eu" - }, - { - "metrics": { - "saturation": 2.451421660277278, - "non_myopic_member_rewards": { - "quantity": 713240752002, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 3446631, - "unit": "block" - }, - "relative_stake": { - "quantity": 74.4, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1860-06-27T05:29:55Z", - "epoch_number": 6123 - }, - "cost": { - "quantity": 231, - "unit": "lovelace" - }, - "margin": { - "quantity": 76.74, - "unit": "percent" - }, - "pledge": { - "quantity": 97, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "x\u000f􎚷8:\u0001󞙷\u0001󕟈\u0019|𵑓zJAh􉰭gV_%񉏚~^\u000e$򤚯u8_\\As\u0010񋘂𖞿H\u0018TU[($󦘳7\u000b񴝧|Rkm򴠝0񍝑(,1𐉗9=@\u001a󬇾Ft4􂍱R򧨡n\u0003", - "name": "񯦺)!:wX^X󘇪X񍡛\u001fFH]X*O:&\\񙹴o\u001e𩵳4\u001a񰾶񅰯v\u000b?\u001a|*\u0006{򴸰򑌥X򣶖\u0011E\u0013NO", - "ticker": "LⰬM", - "description": "\u0016𨀟\u0013\u0012񞝸~n'$R.󔪧p\r\u001f?\u001b𱣗hi/\r󥖝𹀹\u000f`t:3⑏{&c", - "name": "j\u0002<\t`򃻠vd\"󜛉e@=𘨵􋂒A𤵈", - "ticker": "\u001b44+", - "description": "򟤴I\\m񣧶S򹶓\u0003G\u001e)󇲯򧷛qaF}󕻆f󦔘H򡶻#\u001e\u0016򪒅1X󍓱f򾕋\u000c2񥙝Wm\u000e򊏜g", - "name": "J\u000bj'p򒁷\u001a\u0001", - "ticker": "h.\u0000", - "description": "m򲂷\u0000\u0017\u001c\u0002M\u0017l\u0017Fe𻠱x`;\u001d]\u001fw𦠬򥍁\u000f񢆘򥢘_>񄆤Ez򺨧򔇩\u001akx\u00036#񈳪M\u000b𤻣\u001dm񭁞𫠰Q񿸲cF<4Pp{7+w𜠜\u0019󘂖\u0013s\n򼑚󒞚K{[fL02j󜫿z\u0015*[k?os|Mh%e\u0006\u001e\t򘧦򭑅\u0014\u0000\u0016򸞢⥈񖗎[񤗫򓢢q%9񀈈\u00172Iv𝔟BEY򤪫񂘢󸟠M 񺀺\u000e" - }, - "id": "pool1wmjyf4gfdtqcvntv57lj3spxj4ycxzxwmjz3txw4enlmysm4m8h" - }, - { - "metrics": { - "saturation": 4.8929564307315765, - "non_myopic_member_rewards": { - "quantity": 352090952974, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 4804720, - "unit": "block" - }, - "relative_stake": { - "quantity": 31.02, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1891-07-07T03:27:03.88292442862Z", - "epoch_number": 3261 - }, - "cost": { - "quantity": 51, - "unit": "lovelace" - }, - "margin": { - "quantity": 7.67, - "unit": "percent" - }, - "pledge": { - "quantity": 86, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "7𧷳7,6R὜b􇧔^񡺄", - "name": "Q𞦉;gdPﻩX|G󎤜7󤲿ɐn&j1\u001f1Z񧴙\r#򁍪򊧰\u0005@\u000c@\u0019Jqf)\rb𪖲V'\u0014󟄗򅵾%E\u0007\u0005\u0013Z􀨳", - "ticker": "f𫪀\u0015", - "description": "QyV$Dkv=aJ񁇂R5\\𬳥q^\u000fq_Q:󎅌Zb𾷦 >\u0007uB;8\u000e򡒇#񡰢x򓡬\u0013n\u0012\u0019V񡉕:񏔛a񈩔)󢉗n񊒒􇍱F\\!\u0003G򱒸q%5v񹍚\u0010\u0006B\u0017\u0019cSᢰ;򂣷󽔩.+[񒹟𨑁zB\u0014򈧔^u񉰡\u0012-(H3(񙦤UD𐊐:\u0005\u001d򭚉R򗝳򦴄vU\u0001Qu<7P>sa򱚚6\u000f/a񊸸O:`\u0000D𗛟N􀲴𺁙$!\n.\u001c򠻳!\u0006{\u0011_.M\u000f5K񙿨刻\u0013W򵍩򇕓𵼢f򹢕\u001eOV`󏈃򹝅*\u001eA>a󔁡{𫣃󸤄)򠳻\u000bFథ򈯴񘰩" - }, - "id": "pool12ghcrsy5wvqv662ajp7h7mzjk7ejpcgwqnazvcycpywz69ze003" - }, - { - "metrics": { - "saturation": 0.7304598405761187, - "non_myopic_member_rewards": { - "quantity": 373199373045, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 7973800, - "unit": "block" - }, - "relative_stake": { - "quantity": 51.32, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1885-02-12T15:00:00Z", - "epoch_number": 4869 - }, - "cost": { - "quantity": 18, - "unit": "lovelace" - }, - "margin": { - "quantity": 18.12, - "unit": "percent" - }, - "pledge": { - "quantity": 9, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "\u0004\u0011d#+񁨷(\nS񰏞n\u0005\u0018S񅺽PK*/u덇\u0019\u001fA򇡎(𙽓5(g}a񳂵.H􆏻=Zp.qk4\u0017_>񶽸\u0005x*I5e+J6A8󜿑秩񇦁j򇙙1򸲓\"Z终\u0019񇎈񈄀1񶹱dQ\r3C", - "name": "\u001fu\\MCo񓩕\u0005\\񯛬Qt/\u000bg񚫿\r\u0010", - "ticker": "i򜃺+", - "description": "񈂺ni󢫊&𐲢𓁋\u001d8g𭒽񘧸U'<29tPs*Z饡}9~Uh6\r\u0018n\"\u0007󆬃\u0017񮳔񬭶򸦏f>Y%4'KM=\u000f]\u000eU.\u0008Kx!񢿮 |\u00052\u001f񹎖\u000f󩇃A򆻥򝔣󝑧񀞇3𗠂Ln𓄗4􉟕n\u0001󯶟𽒫w\u0012K6򤠖󒑉=􁣓\u001f\u00010r\u0005~\\z򺵈P\u001b\u0000\u0013p\ro\u0001𢣮򢣿񁵪󃭝[kO\u001d𚸟^\u001e~𧽜69Qcu0&󧸍\nn\u001a𧩄S𞩈񣓣\u0012\"g\u0008󺩑𱰝񄉨🖲\u0007񭭿␲lu2\u0006󠳤\u0016\u001eXZC1,o-񠮒\u0018\u0002򱗡<񄅡WS򻺩\r1\u0000\u000f\u000cA#I1M\u0017" - }, - "id": "pool150e9mapr0ehpcfa8q9d07jdnex3va5gwkj89a5e2tlt6vn40zl0" - }, - { - "metrics": { - "saturation": 0.43904440822713164, - "non_myopic_member_rewards": { - "quantity": 724904088521, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 21762704, - "unit": "block" - }, - "relative_stake": { - "quantity": 65.02, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1874-09-25T22:35:02.768125012857Z", - "epoch_number": 17065 - }, - "cost": { - "quantity": 41, - "unit": "lovelace" - }, - "margin": { - "quantity": 33.71, - "unit": "percent" - }, - "pledge": { - "quantity": 39, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "/[\u0018𜶆񢫅Cf +\u0019󄿋󢾧}񳼩6𒎀|)U^_~]_8\u0007%񃛜\u0012,0񪽣񧦑\"-B", - "name": "𹡓󯔖DN'\u0014𻄞\nR󑖵\u0018􈱿󹆙\u0015qqs\u000ca򖀄", - "ticker": "$]2", - "description": "𕾤\u0015𫋶򊻽񲸉CYn󤦀􉖵\u0018jEL\u001eT󵛦B񥫊OOE89𐚕񅅾\u001b22𹰸q/]pYl8R/\u001eT\u0017= r;f\u0011\u0007񏰀G<񁮹򵛥󽺌v񊿰}K炁\u0005J\u0013ML[\u0012p\u001cu\u0002p𶈽\u0000bs4\u0006󦥨􊑈򲿴H񈻾o򂅨,\u0015\u0001񜢃i^𒬜R\u0003𓔍򮜖\u0014D񮡐g'󝵷\u0016!g򇂴\u0014\n\\\u001d\u00185Q\u0019񝍚,󵌉:bJ𣑔<(FU\u0018\u001f~,񹀀󧺅:\u001f𰺶}^?r\u0003󯥃l0\u001db?p1/\u0017\u0007V" - }, - "id": "pool109cu044yac86vmc0wq352m8dttph377xyxmuew2qr6ftcjuy494" - }, - { - "metrics": { - "saturation": 0.8852348450406994, - "non_myopic_member_rewards": { - "quantity": 595160213222, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 17890667, - "unit": "block" - }, - "relative_stake": { - "quantity": 78.1, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1867-01-05T02:21:54Z", - "epoch_number": 18232 - }, - "cost": { - "quantity": 173, - "unit": "lovelace" - }, - "margin": { - "quantity": 90.28, - "unit": "percent" - }, - "pledge": { - "quantity": 9, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "(򳚨sh󑃄򹬶1\u000e󁁧;V/J%򰱍񄂢\\\"_Q򇺒w8", - "name": "\nY\u0015|\u001c", - "ticker": "񬍉4*Q", - "description": "󂥰y󻐣\u001dfLg\u001c򫬟\u0001v󑔝d\\\u0008{{\u001e᠔𐢴񕭠]O󀗩P푗򵭸񜨨W-Ȱ\\3賗\u0013񚳖KZ\u001efcD񬬂\u0017cph<}󕙸*HX𛳼+\u001d\u0010-遲a(|}񒦟jD򵉇𽖤񸗯'\u000c\u0016C\u001fZ\u00156dV7O\u0007)a#<򈖪E\u000eD\u001bJ񗏵񙇧\n\u000b,&\u0018񅿢𼢎VTiw񳍹]p󩜾\u0011YO⚺^8\u0013k𐰟򗫬\u0002Jk=򽲋S2񂘷#n\u0003Z򷗄d\u0019" - }, - "id": "pool1gae2lx3zzqk73fawpz6xaqmtc4qe49c8257j3yyep56wsqw00au" - }, - { - "metrics": { - "saturation": 2.3528961733732867, - "non_myopic_member_rewards": { - "quantity": 862310125216, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 8238102, - "unit": "block" - }, - "relative_stake": { - "quantity": 11.35, - "unit": "percent" - } - }, - "cost": { - "quantity": 134, - "unit": "lovelace" - }, - "margin": { - "quantity": 71.47, - "unit": "percent" - }, - "pledge": { - "quantity": 150, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "`'񻠼<􁲶\u0000;1\u001f\u001ce~Y 񒣲\u001a񕡠$㵤A𮸴nh[iuB\u0018V\u001d󖤞7\u001a\\􌤅UqI$\t𽖋򠮣󒛶򪟋:\u000e\u0012\u00008𤾁$􃴠$+wx񲜉cc7q󎞹(]䧯:񠩙򙺵b􄉅A񴳫n_:\u0005\t&%𙞋񸙗.\u000c>򁳠\u001c", - "name": "\u0000\r$*\u0003\u0012d󠩎", - "ticker": "xWp", - "description": "\u001f\u0000􋥳M\u0000񌽙򂼓򥁇g񺅥\u000585?9\u001f󤾸+f𛸈(Z9\u001e`\r򃱰\u001dkH𜎹񫑾\u000f\u0017" - }, - "id": "pool1f3svrcuj4sxt6620ce2zv4uvhu8mztq0t60fc400yg8dy3yglpu" - } - ], - "last_gc": "1902-08-30T09:19:54Z" - }, - { - "pools": [ - { - "metrics": { - "saturation": 1.8906623903163544, - "non_myopic_member_rewards": { - "quantity": 474035360000, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 22380482, - "unit": "block" - }, - "relative_stake": { - "quantity": 15.44, - "unit": "percent" - } - }, - "cost": { - "quantity": 101, - "unit": "lovelace" - }, - "margin": { - "quantity": 39.53, - "unit": "percent" - }, - "pledge": { - "quantity": 38, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "\u0013\u0003|򽹠~L\u000f􀆈@𺝋\u001e;wR~\u001e\u000e\u001d\u0014.񞒤𯬃󇾠(>󍂥+󔙌\u000c+󠽫򐫼c\u000eli𝔚(0t󏮿S𦰑B@0򱖋\u0002\t𴔳N", - "name": "L2aHe\u001fa\u0016跧\u0003,[O璉s\u0015)@XyO#򈉗\u001c\u0014TqC\u0014\t򽹠\u0019Myc򠦾%D", - "ticker": "򫿷򩝍6\u001dT", - "description": "e򜌆󯾋!D\u0000w𚡾[\u0003G=OJ񬆬E\u001b𪴳\r>p\"󖦁E𛋍񤶒냚M\u000f5񪻉e\"K\u0008am5񚗸;?򘪆o:򀜽ZD𭀒(Lh𤙊$񝁺\u0000(󿂬򈂿Q\u0017𛍴z㓦^!p򽌧\u0001󐿒Y#C򂕃󃆉\u0010>󈖤󥓠$ZS8\u001c򞺒\u0000pZ󏫃𵎵@J󐸨A_V񔷶7,𠶍@]\u0006񜚰-/", - "name": "pf, 3\u001c\rl&q[񍡕\u0004*O", - "ticker": "h\u0012{(\u0006", - "description": "\u0019]\u0008^[򬹼\u001fH%.I\n򰥮8o?\u001ag􋵩񒲪򕣏'%󋯏DP6F\\!=}򹖒𩂈\u001fOm]򪁦]\u0013򺯫𚊿\u001c񾋈\u0017𨍘񅫷\u0019A\u0000𷖩񼹳\u000b\u0006~\u001c􉒜\ruK򄯵𰐥`3\u0017\u001e\u0002sNV\u0011D\u0007793R𔜍ba\u0005AD󒀯𪟫B\u0012𻮺V򴂁E8􆺹\u0007:n󇺷\u0018񸏊t\n񬎎𽣷<'򂽬򗝺󊔊񐏽񱝪Z!\u0015񍁘B\u0004򯷱2񌝨{;W򭞫󮇼fL9\u000e\u0018kF+#\u0017򞻠=𦩺P棄6^\u0003\u0003d򵬵l򪣛S󸄍;樼\u0014𓖐n󌆑+􊲘.𗣠򒷼6N񟭀J뉖񽦅$u\u001fPp񨢱%F 򕃙\u0019󀘭򂇔e򴫳1񼋋\n󣆕}\u001f򆹓~b*vO򰆗򆺓𨐘=󜖼\u0012\u001c{1<񇴥H􊓇\u0002Q򀭶|Y]򠇑[\r+󋥊𔑛\u0001\u0006\u0018񯸱𳑸R򧕕122\n󝄈R" - }, - "id": "pool1pftgvm2q29qq3f6k76ardqlsnm55yyjh92skva087kzzw40m5sq" - }, - { - "metrics": { - "saturation": 0.3073560738623743, - "non_myopic_member_rewards": { - "quantity": 97672657742, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 17844787, - "unit": "block" - }, - "relative_stake": { - "quantity": 23.69, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1885-03-28T13:03:01Z", - "epoch_number": 4500 - }, - "cost": { - "quantity": 207, - "unit": "lovelace" - }, - "margin": { - "quantity": 19.16, - "unit": "percent" - }, - "pledge": { - "quantity": 113, - "unit": "lovelace" - }, - "delisted": false, - "id": "pool1myejcweuuufuhw2l8patas82cfjwrrjtfv9mjk02tcn6shfm27a" - }, - { - "metrics": { - "saturation": 3.6630025396421106, - "non_myopic_member_rewards": { - "quantity": 900368083080, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 2152958, - "unit": "block" - }, - "relative_stake": { - "quantity": 83.71, - "unit": "percent" - } - }, - "cost": { - "quantity": 217, - "unit": "lovelace" - }, - "margin": { - "quantity": 77.97, - "unit": "percent" - }, - "pledge": { - "quantity": 212, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "]𰞉󈶸&x򸒬𘭝;Q󵐊\nkfqW𸻣Vu\u0013ኙL$\u0016\u000e򲈽;񜻄󀧹N\u0011N-#\u0010G\u000c𣖵񑐶𬱖\u000b=HE\u0017Gy1B\u001b\u0004񅛑", - "name": "󯺫4M𻬠񯛪o", - "ticker": "\u0008\u0006n", - "description": "$~`0(\"\u0014+\u000b\u0005g.f\u0010򑉲bO]7NMS+$#\u001c򚫕󩙐𦁔㽲򉡲B\\[쾠Sg]}&d􉤽\u0018􋡎򏃕l\u000f\u00141\u0015\u0017$-\u001a\u000b 򫁽v򅵆#DG\u0011\n\u001a򦮃0񉾗e􈲫񈀥$d􎽪t_}\u001bd𡃎_K`g򎠅򮕼p𪸐򍡂s\u0000\u0010G\t\u0006zB(vWr-򅥰񹇽h򖶓wDV\u0000G8T2󪐲-𓷿C\u000e󤳳" - }, - "id": "pool10mr33p8ytm3r2m3dh3qzl3gklcgru36m9n9ruj6r699uv8hjgfj" - }, - { - "metrics": { - "saturation": 0.7593383822403643, - "non_myopic_member_rewards": { - "quantity": 579726390253, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 11857966, - "unit": "block" - }, - "relative_stake": { - "quantity": 9.68, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1881-08-29T14:16:16.899822310814Z", - "epoch_number": 16266 - }, - "cost": { - "quantity": 206, - "unit": "lovelace" - }, - "margin": { - "quantity": 68.49, - "unit": "percent" - }, - "pledge": { - "quantity": 239, - "unit": "lovelace" - }, - "delisted": true, - "id": "pool1u04rqzrswuna8cmt6r3g3nnvzvqv0u3n2r7kjjdyqkvdsrmp7r0" - }, - { - "metrics": { - "saturation": 1.7145597968910402, - "non_myopic_member_rewards": { - "quantity": 398170761112, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 22147152, - "unit": "block" - }, - "relative_stake": { - "quantity": 94.06, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1873-07-09T09:29:21Z", - "epoch_number": 10557 - }, - "cost": { - "quantity": 92, - "unit": "lovelace" - }, - "margin": { - "quantity": 67.08, - "unit": "percent" - }, - "pledge": { - "quantity": 138, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "椵򿒞M󵢮Q\u0018/~P63 \t0򞗮򭯳M񮂯\u001esa񌾌j󖐀\u0007\u00073&0􃤊\n:񲉐c򖝀𼚰\u0007񂠒", - "name": "0<(\u0004󛌥򬗒\u0006|H[|\t󚵱p񿐕[\u000e󪟡\u001e𚥰w^#+啓𓲳򸳱􂜵={,5\u0003TH", - "ticker": "56󣷋=", - "description": " \u0003\u0004Cga>\t\u0006kgw򳥌^:񷠯\u0007a<򑍓򋘳\tf \nq" - }, - "id": "pool1gj96q9t5vjrpwfel6lzkvep970ranm9ktw8h0e3clz6hjch6dzz" - }, - { - "metrics": { - "saturation": 2.562803362649133, - "non_myopic_member_rewards": { - "quantity": 446742779964, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 19517234, - "unit": "block" - }, - "relative_stake": { - "quantity": 75.63, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1867-09-29T07:00:00Z", - "epoch_number": 5966 - }, - "cost": { - "quantity": 229, - "unit": "lovelace" - }, - "margin": { - "quantity": 60.46, - "unit": "percent" - }, - "pledge": { - "quantity": 183, - "unit": "lovelace" - }, - "delisted": false, - "id": "pool1kw6udst9xmcqk673t4r46urxuhcaxad3e8l7y25mhqfjkakqpzt" - }, - { - "metrics": { - "saturation": 3.0508064609856094, - "non_myopic_member_rewards": { - "quantity": 207171910500, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 7719465, - "unit": "block" - }, - "relative_stake": { - "quantity": 22.88, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1879-09-07T06:08:19.410837338921Z", - "epoch_number": 19747 - }, - "cost": { - "quantity": 149, - "unit": "lovelace" - }, - "margin": { - "quantity": 49.62, - "unit": "percent" - }, - "pledge": { - "quantity": 224, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "ꍧ5O#L9秶3񍁁e8Z\u0004󷆬x|󠻸~򿻩uF^7񘋌6񌹔\u0011T\u001bB󀖹\u0016?^`p􋾄?񎼨p", - "name": "_≝B1+\u001eD񭎗(=򀻄y3}$h􊟊lex\u001a[\u0006G񢈇Jo\u0014I\u0010\u000fi𩑑󦯰*", - "ticker": "%\u001b/~0", - "description": "\u001eL񮾹S%󏮒)^*\u0010Y=/󽄱q񧁞\u000e𳢅\u0010\u0004P򬊭󞁒\u000cz򓢃g\u0014񬕎QuX񞚐\u0014:󂾮P\u0012)8򑎅ARLz\u0013񖏒K󐰘_+AJ󨲴\u0001JpXQ򺟶8`8o^lnhQ>]𧷺j2", - "name": "bt򊦣VO\u0005K=Q\r򈝊𦎍𘼁\u000f\u0002(겚`n坦󉜜lj\tM򗦍|y~\t5v\\\u000f#\u0002Uq=\"?儙񽵬񥚀$󿉃", - "ticker": "?a", - "description": "KV4\u0010+;i񕪀񰮪(R;" - }, - "id": "pool1pn9wlqezpe7a874pg4lc26av406z86hjcdhxz505tdkxztmgd55" - }, - { - "metrics": { - "saturation": 3.317659414238209, - "non_myopic_member_rewards": { - "quantity": 68888782196, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 7800629, - "unit": "block" - }, - "relative_stake": { - "quantity": 47.86, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1886-08-28T11:50:13.627675255687Z", - "epoch_number": 20408 - }, - "cost": { - "quantity": 177, - "unit": "lovelace" - }, - "margin": { - "quantity": 12.35, - "unit": "percent" - }, - "pledge": { - "quantity": 46, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "@v\u0013𔨓>Di򏋛󸐷g󲵋{\"\\\u001c\u001fB󏊆𤁪\u000cPMA\u0017\u001b\u001e\u0013{\t𞔂_Nc\u001aBSW񻁒𰓻Za򘗬\u0007/𜬔򦥲q!)\u0016", - "name": "0mvLm񪅜\u0014񩶶\u0008􊹑򱷣(󎎉\u0018,1d\u00108𑉉J󉻺󩨭𵰴\u0014\u001bqh\\󼺌󏷅\u0011*\u00080񅺍Ib󋧦󣗵񵘶򭘓c@\u0004zmcE\u0004", - "ticker": "򐳿󬗟p󬦑" - }, - "id": "pool14rqe7gtx6c30rvfmxqdda70n5wcruuzrnzmm46w9slxzg50jdxd" - }, - { - "metrics": { - "saturation": 3.4107167809745906, - "non_myopic_member_rewards": { - "quantity": 564668031015, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 4439740, - "unit": "block" - }, - "relative_stake": { - "quantity": 41.55, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1871-02-21T16:26:56Z", - "epoch_number": 2814 - }, - "cost": { - "quantity": 223, - "unit": "lovelace" - }, - "margin": { - "quantity": 18.02, - "unit": "percent" - }, - "pledge": { - "quantity": 50, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "񗫍h\u0002XDV񂌇񺆷s\td;NZ`񼿱G\u0003򎃉󾛪\u0002t\u0000ga^u\u0018򶄵\u001ea:,\u001546i\r󅜅\u001d[򴁡𐏛:graF񚗖𽙪a\u0006\u0005", - "name": "vm-\u0000hT", - "ticker": "\\O񲩂", - "description": "x𠋓񩳸q󐊖񋿋|\u001fD&𐤐𖜃(򰎡򻣦\u0007g%✩E\u0003N\u001cW\u001cY|7l\u0007B^ 𽤧󣁚z\u0010󤉰>0#l\u000b󡂎\u0011Ggx8m󱟰{x]\u0002B%w)𓀗򴣋𮮗N񈳟 u\u0010,񁼄E񺶣򷖡󎲌ﮍ򗾁:\u001c󯰶w9u򅱋󢐀򃺍U𳂲\u0004\u0008Am񞺤󚺮𾸠\u0018\\.#U*U󩒐򜆰@N\u000c" - }, - "id": "pool125zhu06sph56smvdgsd40678lg57nrdjrs9u9slq62z4wzhfcnq" - }, - { - "metrics": { - "saturation": 1.3277086290109796, - "non_myopic_member_rewards": { - "quantity": 644119855620, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 2581055, - "unit": "block" - }, - "relative_stake": { - "quantity": 11.17, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1882-01-14T04:00:00Z", - "epoch_number": 13612 - }, - "cost": { - "quantity": 27, - "unit": "lovelace" - }, - "margin": { - "quantity": 0.38, - "unit": "percent" - }, - "pledge": { - "quantity": 58, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "d@\\~\u001d 򏒵\u0014vpl\u0014b!!񩒫\u0002T򯻼ZL򭈲\u001c񖄯\u00054釋񧲪3d0󗋯E퀈\u00014\\Z򧜲p\u0018󦎨}=!T.g)m򺑵dJ~򰼰#򦍃󠑖+&)𡑯$W18샣󗑋񽒗\u000bD󿌬#\u0012󍧀.{R`\u00189W%", - "name": "'핗7", - "ticker": "󚹡\u000b;", - "description": "&\u0006񂻇\u0019N[E\u0003󘣩h󡯱L\u0014\u0014LM󚅟4]j]\u0000{񤷖NQ.\u000c릐󂷠~񍱖)s𝔺\u001518o񄷛?􀫾𲵲lN)DE𯌻ty𳉼񮲲T(\u001f𽛹\u0014𨅉V@N^I1!\u0013:p|𡮅v+=fs\u000e~]H5!YHm𤳷򑅬\u001b𥰅𐧯\u000c񇗆\u00178d𘌠>\u0004񭾻𻐍Fq\u00052.󃲑󋝎}OX\\\u001ezksx񤝷W񷍚󚝶Li򙤧_5\"\u001dsMr\u0013]K8𼓲󔋫$7!+i𳞟\u0010򪊏*k5򅪠='" - }, - "id": "pool1xn79lrwh0p503jtk0qady4nak4njtzvdaqy7d7gm6nsm2jzlz9d" - }, - { - "metrics": { - "saturation": 3.162077707284099, - "non_myopic_member_rewards": { - "quantity": 905939464266, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 3154277, - "unit": "block" - }, - "relative_stake": { - "quantity": 33.87, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1859-07-26T14:58:33.440316963264Z", - "epoch_number": 30367 - }, - "cost": { - "quantity": 68, - "unit": "lovelace" - }, - "margin": { - "quantity": 0.6, - "unit": "percent" - }, - "pledge": { - "quantity": 112, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": ")=\u0019\u001a'\u001b򐉖Yx\n𢗿#@Q(𔽕񫅺쌿𕟓dX@+N4\u001a]\u0007,^2򵲚Y񞒄h𡮶򂤷", - "name": "(:񐴡FX󑖓񎋽d^/C8k.򊨅a򪭦󷂃󒗀\u001e\u001cq\u0011\u0000񓪮󸂜󤯷I󲑰B8t򕤸\u0010_t\u0016\u0016\n<\u001a\u000c\u0002\u0011%m<\u0018=", - "ticker": "j]󉲛", - "description": "8ed90M\"pDl5󛋼F򱛐򟺧\u0008^\u001c􇷨򕧔5T\u0005}k򯧍SXi{v9M\u0004u񾑯v\u000c~eg󶪐\u0005\u000b'o\u0015$򦿇`򪐲Z\u0003c8\u001b8t󌤘\u001b >\u001a\u0004 \u001e𶇂􃝻n󥦁`%H򵼉l]O񖿬!\n#Ji򁳂PxGP򎎋d𥽻WJ>LZ}dPW5j񱀓\u001e@􍇫\u001c񏏵mwl\u0018_Z<󑗭W𴱱\u001bk󃷵\u0005s1q6򤆔I|\u001e\u001dD^Y!=\rPbk񮨉󼁾s&=i򘈏𰪄򔽁\u001a󱁍g0\u001d\u0010򌵫fTly{\u000c]\u0010'u|(Q򶁿\\MGn\u0007󃌕U񯞿\u000b$*rX%𧆐\u0004A]\u0005O􈊳t$񏍞󭟀\u000f󤌲󻡅\u001ev*k#󋊏|\u0017.>󍠁v0{/dg\u0003i󣖪u)򿑬xK󙩺`Un\u00059񃅧&\u0016\u0007X\u0008#􊠥DC\\$n7𕏃𻵀\u0008𬆋󔦍\u000fMdN" - }, - "id": "pool1uqkfj563udp68yvpy7duhe3xrxdmt7d7zq32tmhp4ghuxdcw2nm" - }, - { - "metrics": { - "saturation": 3.3673759727589636, - "non_myopic_member_rewards": { - "quantity": 595925683308, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 12901328, - "unit": "block" - }, - "relative_stake": { - "quantity": 36.08, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1862-10-25T02:00:00Z", - "epoch_number": 26819 - }, - "cost": { - "quantity": 198, - "unit": "lovelace" - }, - "margin": { - "quantity": 1.84, - "unit": "percent" - }, - "pledge": { - "quantity": 169, - "unit": "lovelace" - }, - "delisted": true, - "id": "pool152nehvw57gcclyltslnd06eak98rpu02mxmuxrdtf90az0jy4we" - }, - { - "metrics": { - "saturation": 3.226448770801089, - "non_myopic_member_rewards": { - "quantity": 984224583723, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 18415321, - "unit": "block" - }, - "relative_stake": { - "quantity": 75.52, - "unit": "percent" - } - }, - "cost": { - "quantity": 236, - "unit": "lovelace" - }, - "margin": { - "quantity": 61.04, - "unit": "percent" - }, - "pledge": { - "quantity": 91, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "A)<9\u0018'5\u001avh\u000e47񉅳󫿘\t#D􂐠D􎣡򼹫􊰛[G\u001ceD\u0012곖5d:T\u001f\u0008\u0018苬\u0019򛄉\u0000\u000bM\u0013𪲜/\u0018R􋟿\u0004w*{\u0000\u000e\u0011xA2󢦉r$\u0001󈝖𝽚𬵳E|a'V񻳫]\u0011b$}𔄙򥨺󂵧񡢐", - "name": "󙧈/\u0002~;񈞆\\\u0010)1\u0014%?", - "ticker": "D_򓡘", - "description": "򅰇>Z-\u0017𙢈'<\u001b|񡅤\\ \u0017\\񬰷񌖖J񺪳𻫇=\u0010V!0K\u000ftH]l0\u0011򉃓򱋲L!򀗴7P돐򓮝(W\rL򘆉f/G\u0000:\u0003\u000b~\u001a" - }, - "id": "pool1wz5uywh43vundpglc7p33hlyue55ck92m5rgj3t5zdhay6u34d6" - } - ], - "last_gc": "1885-09-20T16:07:13.155829664812Z" - }, - { - "pools": [ - { - "metrics": { - "saturation": 2.3274168059282707, - "non_myopic_member_rewards": { - "quantity": 392094839351, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 15862285, - "unit": "block" - }, - "relative_stake": { - "quantity": 71.29, - "unit": "percent" - } - }, - "cost": { - "quantity": 9, - "unit": "lovelace" - }, - "margin": { - "quantity": 34.08, - "unit": "percent" - }, - "pledge": { - "quantity": 92, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "0\u001e|\"\u0005􆎰O< 𦃗\u0001A@\u00086𦩌=\u0007Q\u001cR\u0004󑐲/7𮷌󸜪񜠩w8𔙈\u0001 򡁧󻇢\u0012_𴈤g?\"\u0008\u0019𛇠I\u0011𮣊򔤌󳪦󒅥J󎻪\u001b񸠭𚟆'.񂯰򹒋KO>𡌣h')I\u0001dg\n;9F󽖜s\u001e􋆞#!o􊒣\u001f\u0013Y\u0007'z", - "name": "<𚘤sm1W󹍪j^7E\u001f`\u0010\u000c𳻏$\u001e𸹯\u0000񤝸󒲆\u00175񤩁Me!-P;R𐃸'򢊌򬳾7\u00182S\u00036LK񴥶Vq", - "ticker": ">񦠐󔁆r", - "description": "Z󝼊rg򼦥~i\r󉉃W_滛i󐃑􅠙񴹨9񴧌񴐡2Q\u0010\u000b񟫟𬐼T\n󚜽\u001a'\u0007G􋘹򫼪𐕵[}\r\n􃮒𶏅|򘔢󥳶񺾺;^1^)\u0014\u0012\u0010\u001e񷻛󽫹㨪2񣥟\u0003z?V>32\u00033n򇈛,so827ok_\u0001^򃊈󫾝g\u000e𻟗*󐞹K򵶝𠯳O𰳇\u001aL󏻝󴩕q󦣸n-\u0013󨔐\u000e񺉷5\u001f%k󊞛3H򢡂緛𫼋CQ񕁽=\u00155\\o!\n񏰩򵘩񻃻󭯂?P\ns\u0008>@YmvJ;D'󝏣\r୥򅆯\u0007'3󎬺G𞨐/3󱞬𨨭N񘄞\u0000" - }, - "id": "pool1s5w976ynr7tjlyrja338lnutc7ecp5d0t7gpnc6zw4jt5gc7gqj" - }, - { - "metrics": { - "saturation": 0.8220726381170929, - "non_myopic_member_rewards": { - "quantity": 694242408172, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 12312120, - "unit": "block" - }, - "relative_stake": { - "quantity": 88.13, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1900-12-19T13:25:21.025637424224Z", - "epoch_number": 23292 - }, - "cost": { - "quantity": 245, - "unit": "lovelace" - }, - "margin": { - "quantity": 13.58, - "unit": "percent" - }, - "pledge": { - "quantity": 103, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "𣄑󌮮\u0006X]%𮟝򠿙9\u0002򅶇D񊁀K0\\\u0008gh񍓵nG\u001fyf𵶽\rH \u001a}]Q𗌨Rr}S\u0007􎅣\u0017\u0013\u0004𡚟Kc\u0005*\u0006B\u000e𯪯󎌅B\"󘿟`\u001ckhx󬩰_񲢟\u001e󗹟q\u001c[ti\u001d\u0010w[\u0004󜐈󌞀\u0002xYN\u0003\u0001񛐇򟙘", - "name": "񃂿\\(dpGW񦦭5\t񬛪󵱳&s6V\u001f\u0011,M\r\u001aQ\u001f񔞈򅽠\u0015Zk\u0005񄀎𲑦\u001eB󛬧_{AF𲃗$@\u0007\u0007\u001b'񨩆6", - "ticker": "􌺔2@", - "description": "/3趃%sy(\u0015嗲2\u0019f\u000c\u0007B򁨸Wm󡟼A𻼒S2\u0005I󞷨!I{򫚏򯇛\u0001Q𠪰t󔨐>\n𞶑􊙕v񡡵\u000e#.L򦅈􋙛P;Q􀢛񸿡<\neWotM.rr񎨵󧱚\u000b󖜧󌡙󁁝\u0011򓗨/E󲾭񁔖G\u0018l\u0013\u000fur񟟀󗰇,\u001c𣙫=\u001d'~\u001a򒝸󄌇\u0003\"F\u0000\u0003p-^𯸲񹾘z0򃄚󲃇򨊝񰖅,}+𢆁󜫝2o0󙑎񈐦TL\u0017򥙻Y󋦼f#a񯳽aB>J񫎏Jt\u0002)\u001f\u0015z𢂒#aQ\\" - }, - "id": "pool1shh9self02vhzvl2v9uzvpenq6hglf58kc5xzc7t5w8asjhaxsc" - }, - { - "metrics": { - "saturation": 2.3335269256872833, - "non_myopic_member_rewards": { - "quantity": 301492879485, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 11558990, - "unit": "block" - }, - "relative_stake": { - "quantity": 19.39, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1898-07-05T09:46:28.100623926047Z", - "epoch_number": 11031 - }, - "cost": { - "quantity": 51, - "unit": "lovelace" - }, - "margin": { - "quantity": 30.07, - "unit": "percent" - }, - "pledge": { - "quantity": 206, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "\u000c󃌵%Cu6S@񠍈]\u0018򁘇n+\u0016b-\u001f{\u0011.󛃸𬻆AX", - "name": "\u0010\u0014S񚚤87x󅣷\u001e\u0007򗎿6񓽽򕢯P_\u0017", - "ticker": "\u0000?U𠈒", - "description": "Z\u0004H񰘊'[{/?󠬿򠑨24\r򛱱\u00187􉁭S\u0018vVmh񀘄e-򩬾󀌣򘄢񿅎LoT𮨘󽀋𬇄\u0018Ax)\u0003\u001e󭧼F𠒪񯷿󩿖nF𘋕F􍥅qvs񬹅S󮅌\t\u0003p\u0002.\u0003\u000fbcn\u0011\u0001\u00069𺔛_%=\u0002%H`4\u000cVK", - "name": "񃋭E", - "ticker": "𫧖{򋨪", - "description": ",dap󾅰N^𭳖[F󺌞󈒿󩟸\u0003*\u0006" - }, - "id": "pool1zpphysdnc9f85vdrxhgt4tx5zn93t6nwm2nccmgj0kpg2gnpgn7" - }, - { - "metrics": { - "saturation": 1.810187261129295, - "non_myopic_member_rewards": { - "quantity": 263845823441, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 1873500, - "unit": "block" - }, - "relative_stake": { - "quantity": 6.43, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1888-02-22T03:46:36Z", - "epoch_number": 10036 - }, - "cost": { - "quantity": 95, - "unit": "lovelace" - }, - "margin": { - "quantity": 19.59, - "unit": "percent" - }, - "pledge": { - "quantity": 226, - "unit": "lovelace" - }, - "delisted": false, - "metadata": { - "homepage": "槭􉔪𶈅󥷸v(ZFP򣀑(񳍚Mr}Y\u0003rT\u001aE=,$]'2🁤󧍪A\u0015􈲘񮮫DB0[4eAwE񿷧r񺘊򳋒V<\u0005򜔳󚆉\n:򮏐{ai=\u0013q<\u0018:\\s򓼵?򏪄󀜘\u000e򌺳f2b񞏆񹙛.\u0012d𭫇򥚊b򄋅򠔓5Q_J*`k􄍓d񯭱󗇱", - "name": "񉠊𢝳񇿧pc%y}{\\򭟁󯈻NmC󍳥\u001cOk\u0015𣽳I\u001b$I)Gu󽻧z~g", - "ticker": "a\u0011𤠀\u0015򒚬", - "description": "b񕇂🨉Q𬽬9H󟝸{\u000b\u001f𻎛𹃶򧮹򭁎򫃜򸀻򪍈tLJ-xyp@L򾵝Cx󡾗\u0014\u001ch󅎟\u0015y\u000ePtJ\t񂔰.\u001bb!\u0008uS\u001c񓡚񞂍󞎦o𾮳6\t󊺷}l񋀡CeO񓹊d\u001d\u0001!𑵦攞񼊧𷩔@\n\u0013\u0018#\u001e󒔷w`򎺿oD~\u001c8\u0012f𜛱)c>3񟻝eT4񺽕t#񸪖\u0013l5Ve)\rI􀅓𵳠\u0001\u0004gll\u000b\"v.0󺋓qO󛉅`B򩞝kd&v񉰻\u0010L" - }, - "id": "pool12etz8tdnea5v20u5uayyvewfs0sy4slzpkjen60rx4vauewwq48" - }, - { - "metrics": { - "saturation": 3.8500146057114097, - "non_myopic_member_rewards": { - "quantity": 410901195088, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 18472777, - "unit": "block" - }, - "relative_stake": { - "quantity": 45.4, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1872-06-14T22:26:45.123712063727Z", - "epoch_number": 6021 - }, - "cost": { - "quantity": 114, - "unit": "lovelace" - }, - "margin": { - "quantity": 88.69, - "unit": "percent" - }, - "pledge": { - "quantity": 243, - "unit": "lovelace" - }, - "delisted": true, - "id": "pool14u97azkf7x0eg5u27gjdrfapwdmafsfpw7aaqhskgsxqkfyek5q" - }, - { - "metrics": { - "saturation": 0.5995064520375798, - "non_myopic_member_rewards": { - "quantity": 971704870751, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 19438711, - "unit": "block" - }, - "relative_stake": { - "quantity": 68.23, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1883-12-09T21:14:13.639637081535Z", - "epoch_number": 27319 - }, - "cost": { - "quantity": 118, - "unit": "lovelace" - }, - "margin": { - "quantity": 56.71, - "unit": "percent" - }, - "pledge": { - "quantity": 106, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "_,P(\u0001񈰖\u0003󁒘\t񒁯󧇮\u000f\u0011䐁9c'uS\u0016^Q zdNTB:􅞗>CKiH|8B\u0011񘖳񡄘|g*r+,hq𝧻e\u001a􋌺Wpxo]򼢨Td{L!F񺥡\u0006𐮠", - "name": "m\u001cR񒴳\u0018$󂲡򼫑 {%󤿪򅈡􅈋", - "ticker": "򾄲,(", - "description": "RmZ񲡑򛰾|\u0016Z!\u0017򷑱򝣊򶉈\u0000򜺁K\u001a\u0002򞄁fB}\u0004DG/\u0002'󟜘/\u0010񶊡󄑗P򷝃:w:򰃪󦤿J򂍆pt\u0017񺄎U󎙽󰍂_s\u000c*\"𚋝,𤭔􈫈󷟎𒓂Y\u000f!𢄧@򔛧󢝉\u0003k\u0012I𑾹񡏹=h\u001f󎆩es;Z򵣻F󃆫\u0002󍢌LcQ\u000f\u00188/\u0018\u0016\u0014M\u0006\u0015o>񲮚\u0002󡀇\u0011)uh G)\u001e񟹧qT\u0002Y#+tnNXV򝚿5\u0018 \u0007􃨾${\u000cq\u0011P>!z\u001ee\u0015\u0001@*/P\u001d\"R󪇮;\u0013=HXv🟌󍯠2\u0006.\u000c9򇥰YH^\u000b\u0007$b񠗪V|@񊲈,\u0015U.K\u0015%ui򣢿\r\u0013t􆄤89\u001a􅭊􏀐X\u000bx\u0003\u0002Hb\u0019\u0000=\u000e`~3R`󬘶0\t\u0015v[\u0018!\u000e\u0002g\u0017J󬖸򣏰򾙺Io𵮴$D丟5J񁥜🌬[󢖨U\u0018\u001a1\u0000򮵫n\u001f~" - }, - "id": "pool1vtufalyx7yg48x83n9854k0m2gklew3sf7qz79e8j0cpw7t8t5c" - }, - { - "metrics": { - "saturation": 1.9408830333880078, - "non_myopic_member_rewards": { - "quantity": 474124250353, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 16683814, - "unit": "block" - }, - "relative_stake": { - "quantity": 92.17, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1903-02-14T03:23:54Z", - "epoch_number": 11432 - }, - "cost": { - "quantity": 61, - "unit": "lovelace" - }, - "margin": { - "quantity": 57.35, - "unit": "percent" - }, - "pledge": { - "quantity": 131, - "unit": "lovelace" - }, - "delisted": true, - "metadata": { - "homepage": "\u0018\u000f\u001dG񫚴ok\r\"T\u0007yZQ\"{\t\u001c+PLEjR/k\u000eQ󇓺EE󙕾jm!򁊔𔡹j\u00058aMNdyAL?_1󾂽&\u00043g􋍅𑁠^(󭝪񾧦\u0015jcD{2D𔘩$:󏩕Q3b쫰eq𳀑", - "name": "b\u000f񥞪\u0015R\u000f\u0002\u001c󢱴\u0002&)\u0016􅑚2\n", - "ticker": "\u000f \u0002", - "description": "\u0001\u001fPT`b𣿅U\u001e򢼸\u0014*3KN򔏙\u0000񦡺n!򷄢oR􊭓c\u000b;1\u001cNt󭧇򉻧h\n\u0014񆫘񊳡񻣍'񼮰-rRK/j'񾁓򻌃\u0014O𵻯􀒄\u0002񑸬􈩪G{ta񤗑" - }, - "id": "pool1a6k5eerwg59h76cx34w0cl784j89cxmayq294snkn9r4kyasjjt" - }, - { - "metrics": { - "saturation": 4.431370738489245, - "non_myopic_member_rewards": { - "quantity": 59278888611, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 6014083, - "unit": "block" - }, - "relative_stake": { - "quantity": 21.32, - "unit": "percent" - } - }, - "retirement": { - "epoch_start_time": "1889-03-31T22:53:35.975120635539Z", - "epoch_number": 1415 - }, - "cost": { - "quantity": 26, - "unit": "lovelace" - }, - "margin": { - "quantity": 16.83, - "unit": "percent" - }, - "pledge": { - "quantity": 48, - "unit": "lovelace" - }, - "delisted": false, - "id": "pool1s8ev7gph8a68yya7d3rsc29e59a2fvu9mpk23uwa7q4m7t3fw42" - }, - { - "metrics": { - "saturation": 2.3327554166702855, - "non_myopic_member_rewards": { - "quantity": 741101978113, - "unit": "lovelace" - }, - "produced_blocks": { - "quantity": 18134216, - "unit": "block" - }, - "relative_stake": { - "quantity": 32.45, - "unit": "percent" - } + "epoch_start_time": "1876-04-08T14:00:00Z", + "epoch_number": 1933 }, "cost": { - "quantity": 136, + "quantity": 254, "unit": "lovelace" }, "margin": { - "quantity": 88.36, + "quantity": 72.47, "unit": "percent" }, "pledge": { - "quantity": 131, + "quantity": 247, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "v󤊒+\u000cJl,\u001c񓂂\u0010􏎪o\r$R,𛈒v\u0010𞀯u58s񃣟!`\\YF񢏆\u0019,c񴊫\u0018U$e", - "name": "AM󾫸", - "ticker": "]􍀄(􅆂", - "description": "#\u0015𒿍,1񝵌[񂺡2\u0012𚁫\u0003󫼇5\u0014\u001etK;cS^\u0012\u0017󕝮󖬰fmFfN#.0󣃙0:񬅓]Q`󭨃򝲯\u001d󷐍0K7hR?\u0003򊚵x𭳦\u0002qY\r\\n5񳞤C\u0008XU3򖕦}򡄊\u001b󢊰T\u0002Ey󍧭W\u0017󅺀!{O򗳎󡚛\u000e򹳎񆆂\u000e\u0005\tG\u001b\u001b}g\"(e񯟏~`񝙏\u0012򬆸2[OP󂯕>𢇳Pr\u0000\u001b􆝢I\u0004t 􏰗\u0005X󚀗򓜊􀩜a􇧛F򦕃6,0򄱥\u001b\u0010󕙁𭤽3􆺸򉊬6K" }, - "id": "pool1kv0gxuj3gcjepj6jjsqrsr6ujngqcytuqh3mgv583kzh78nuxhs" - }, + "id": "pool1xdutwd8kay0lnxkur98jmmna28gg3m47xtjke4hmag50gxzwkkg" + } + ], + "gc_status": { + "status": "has_run", + "last_run": "1883-11-22T10:58:53Z" + } + }, + { + "pools": [ { "metrics": { - "saturation": 4.873144076707327, + "saturation": 4.084682659563115, "non_myopic_member_rewards": { - "quantity": 582919614825, + "quantity": 820659256833, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14607452, + "quantity": 5004462, "unit": "block" }, "relative_stake": { - "quantity": 42.1, + "quantity": 15.12, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1889-11-02T00:17:00.873337537978Z", + "epoch_number": 11546 + }, "cost": { - "quantity": 142, + "quantity": 178, "unit": "lovelace" }, "margin": { - "quantity": 8.2, + "quantity": 76.77, "unit": "percent" }, "pledge": { - "quantity": 116, + "quantity": 89, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "=\u000f󀐃!\"mc󱾚\u0002󁼺}󬊺󌥪\u0002\u0019\u0003\u0015V\n^F󠍠4Qs>\u0012\u001fCm󮑉'lF񠍸xO\\𐫿\u0010OcKd~\\x񀥬󀽸񥴐m,鍖cUz;N\u000fr4+\u001f", - "name": "6+16󋲿", - "ticker": "<􃄄􍾻J", - "description": "𮅯BP\u001b\u0015򛿽0\u0008|򘅼񢎞yj!􄤰B򝓽󒮋\u0016@񸥇L\u0019𮏍yS~󩀡󟓞0\"_󽐃\\D\u001d񗮳6𾙛-󯓲񊇷I􆸏{?Y/Wkd\u000fhh4\u001b𹫚`b,E&'+Q\u0006y|i󂍔/yI񐆪򖐍fp􎥼𼚦q \u001da􂗫&\u0013o\u0016+\u000f\r\u0013&:\u000b<𳋚n}5\u000fi񙜦5VT󝞰)R𕫺󏜉\u001eI,\u0010\u0015y\u0011ys􊍝[q!x󠇺\u0008&1󉔔\u0001a󉽄󘤩Vk\u0003𧡠\u0003򮏫\u0005\u000e\u0004)0$dn񠆖dn%q\u000cDC򯯀\u0005U񢙗\u0017hM\u0015𸈩-G򵺄\u0005\u001b\u0012\u0007" + "homepage": "PXw򭺛!1\u000eR2*\u0016HA", + "name": "򹤃\u000e󠦾]\u001bx\u0006\r𼐸󺀢󥊒#X\u001b`񏿳􂺼󀿗J\u0001󗄸]񨺝\u0016崋\u000f򵎧\u0003J+\u000bG񥰥6򆎾M񚷜󍶴﵂9\n$", + "ticker": "􋉾񮘃7䝻r", + "description": "󪽺2A.y\"ꩻ b\n\u0019\r􏝙4t-胯󌋧FkHU\t򨎮:񕹛oU&0\t𵔨VH\\򒌘.G\u0001C,n\u0010-\u0007.\u000fy5$[\u0007t􀩄-(BrT;UgG\u001d\u0001e;󳰎𺡃^𵁻zL:|\u001b)/(𺼰=t0Wi|C\u0004|𹩸Iz\u0012GRY񂦘𲻹񇬛󒨉%󓔵\r\u0004\"\r󸂡򂮄󬏦򻚂󝮮O\u000f\u0003C^4򨿹𔹎\u0014\u000cHj^Rrr;t\u0013佩a🏶4򀬈󺇸򙠺,𸘈󿢲" }, - "id": "pool1yqghh30k9urpws3yv0v9z340rgjew46guslxajqsrcgxgvg8mjw" + "id": "pool1hj3akz45yuh7h49thl6djsnylahjnd29ws2992qfdt7pkt0qggy" }, { "metrics": { - "saturation": 4.526102753897766, + "saturation": 0.5068060977768163, "non_myopic_member_rewards": { - "quantity": 19413222424, + "quantity": 158236061042, "unit": "lovelace" }, "produced_blocks": { - "quantity": 217159, + "quantity": 17534813, "unit": "block" }, "relative_stake": { - "quantity": 48.48, + "quantity": 8.53, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1898-01-06T19:01:07Z", + "epoch_number": 6598 + }, "cost": { - "quantity": 149, + "quantity": 183, "unit": "lovelace" }, "margin": { - "quantity": 75.81, + "quantity": 7.39, "unit": "percent" }, "pledge": { - "quantity": 13, + "quantity": 97, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "G𜅝\u000e򅦕\r|fBW񝢑򰪆a񎔨\u001a\n󜈒\u0015$z:\u001c󹍲󡙗j\u001a󚟠󦫶1󒄟\u0012C5\u0019mG\u000c񹻵/䕈+\u0015A𤊁D񕅫\u000c0w(򼖊󠜫h8񁭬kAM\u0013X[\u001eω\u0017pSM𘕴򝊞w񠔦+3\r󖌃𪣃\u001aᘁ1SF=򡣔)󆇚􅒽SM{\u00013" + "homepage": "8gU\u0018\u00144s=dTFk/\u0012x\u000f򉘮&8\u001a\u0004!.Qg*󘊶\u001a<򅈈A\u0019\u0018\u0012@\u001fv\u001a\u0018\u0014", + "name": "񏹷\u000eg񜟍j\u001e%^tx⋱", + "ticker": "I\u0010𶥒", + "description": "x0*\"󟮢3l\u0017X\u0018 \u001f򼰇//\u0015򋤔G𵆘\u0017\\򂮖\u00074yEx9X񻻬Kg\u000bW鱮C\u001a𬦦=\u0004|Q𚽞\u0004𖛴󧠁򈟻\u000f\rA񉸶𧣭w越1𷈦++𜆬\u001cj\u0016C1\u0016;񆸅\u0013fEE緔\u000eTG󿖺u>p񥰛=U~(r\u0012󜎧\u0001\u001f󠥐T#𮜊N/kkN򯄫X\u001aL\rxE񥽦J" }, - "id": "pool1u9xkml0j0muu9spncdu5vah33esxrnn4vwmde947lxz7u9a9v8d" + "id": "pool17w070w7syu7gvm7mpkypl8c87jdj68mhm52ukxmuajrgg3rc2mk" }, { "metrics": { - "saturation": 2.6194668943015302, + "saturation": 1.1425815537039425, "non_myopic_member_rewards": { - "quantity": 881809442754, + "quantity": 176308315599, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13137527, + "quantity": 6272262, "unit": "block" }, "relative_stake": { - "quantity": 96.17, + "quantity": 99.21, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-06-25T05:57:22Z", - "epoch_number": 20841 + "epoch_start_time": "1864-12-18T12:02:27Z", + "epoch_number": 23289 }, "cost": { - "quantity": 229, + "quantity": 215, "unit": "lovelace" }, "margin": { - "quantity": 49.83, + "quantity": 37.29, "unit": "percent" }, "pledge": { - "quantity": 201, + "quantity": 125, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "\n\u0017&󕝴<5\u001c窹\u0007fh#󎢑𐧤\u001f?6򊽉z`4\u0015z`", - "name": "񞤬񾫚󕠘X6\u001c\u0008dh\u001b)\"f𹰭򚦹򶬌Il\u0018z򐯮5`U򆉄1RF~|匹>⺭x", - "ticker": "󮜿y\u0000U" - }, - "id": "pool193fk0squudpxcxuw6ejjfwd3lm85w2055xhznm4wqxgccd6zwa3" + "id": "pool147g559k35uc8ewc7sql4z5f8y450w48yxrlsc0p4u9apylw9y4y" }, { "metrics": { - "saturation": 3.831144679354266, + "saturation": 1.0082952772373233, "non_myopic_member_rewards": { - "quantity": 314143121220, + "quantity": 12254426176, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15578208, + "quantity": 10080712, "unit": "block" }, "relative_stake": { - "quantity": 28.83, + "quantity": 62.82, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1882-11-04T10:00:00Z", - "epoch_number": 13102 - }, "cost": { - "quantity": 173, + "quantity": 168, "unit": "lovelace" }, "margin": { - "quantity": 63.1, + "quantity": 62.2, "unit": "percent" }, "pledge": { - "quantity": 112, + "quantity": 162, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "07\u0013fS|\u0000t󆢺o𬸕3U\u0011cM\u001c#\u0001C򇮢+󿓝gB<\u0016Z󐶈@kFSq񊯲SG󆽩4򼎴\u000e򵑱C\u0013PF9?\u0016y򘺍U򂇑@M񀿯󳔶tY*\u0013]4󌧔(=񀺨𺥣l*񌨫G򚦎𨒃􍦶n\u0012h\u001e􇺑s", - "name": "~򛜴l->S4\n7>U\u0005kA&󞎼񾚟H$nBh\\񦚛p)񊗇]\u0014\"a#\u0005Eq򁚬\\MXL񗇶SX\u001c\u0015\\켌", - "ticker": "V9]gB", - "description": "􆡳)U􅺊4O򪊘)1MX🖷񦣴򨜴[e𤫺󐺐\u0000\u0018𣿢$E𢵑a嫛tr𖚣<\u0016\u001fB@+d򲲿\u0014􃝣p\u0015\u0002𱂪3?H\u001e򷠎X\u001c󥇘;\t\u0012y\u0012U\u001b񗔚dt\u000bR𿨿^O󤸢A/D\u0016񝬅b񄜬\u0010]5󌔗󇚁\u000b𥩑cE\u001czS\u0006񫍢\t[\u0006?򦃸򳆭\u000f=AP񰟞񧦥/񁾺'񥱴G􇘙$\u0000SHB=󦲑&/O𺜉 􈘹H򦀼𑟒\u00129񌎒|𖶲\u001c>􃴭H$y2p@󓀜􏷑`𐖠񢴃w\u0018񬿟𼦛2𓥶1{}\u000398𢓼h\u0013]0^@􎉿\u001b-򷕞k r\u0002~a\u001f󪦕򅿲񣖄p+ 򪪽VM񟬞r򻑍𖌣a\u001cm\u0014)w\u001d+\u00134񜎼" + "homepage": "?]񷊲񈒐JJrK񲬙rd?e񗯆o%򉕔\n\u0000L%t{}􀧗O󌗼}🺈\u0017󦹨󝃗򡈼S98趴tn\u0006񇂟e\u0005uI𕴄j\u0015񂳇\u0018򊅅;􃥑󜠾t򻻡@𗡁𼢀xg\u0007UA񍞠B\r\u001d򣾆7UF𘼢򎯢W\u000e򠿱cm\u0008cP梒#􋺷q\u0002`XS򕒘\u0005\u001e𚒉'", + "name": "1O\u0015\u001dFL\u0002\u0007q-BO+\u001a6;򺫥[yn }Kn󨼣򯲼󿽫\u000f\r󳟣13\u0000񼆢򝘟\u001ba\u0016(\u0001E\u001a)\u0016s", + "ticker": "C𝶊\u001e򢾎", + "description": "𹳤\"\u0017\u0000\u000c\n8 Krl{\u0014b󥊑=\u000e\u000frf\u0013_9z:#\u000e򺦦\u000f񸕽BIH|\u0019 \u0016򜆏1D&w{𐀭񰵸[L2\u0001{\u001dl񪱟32\t:𽏲񗽉CBCe𲿀~e򱃛f`𥤖W篊\u0006񳳒7􀘒\t>mR\u000fZ\u0004񜗎{7OY񦚦\u001e񔒂&Zz􊛏\u0013񸨲w\u0006\u000c􃉣󿋂􊢌󆥌pn󜏤ꜙmi򜉙)EM𱹱}񖄇\nsl+Cr񛰷\u0015𨐷𖡊񥈺|B񬾝,G󡭵𡩢(\u0012x\u0013\t \t\u0005񿔪Y󓏭~Z񫵱𐙢\u000b" }, - "id": "pool1xfp6mzrpvcg0cc7j62hq3nzpdnqkadeg7hg7u3ssazlfcuaq5lq" - }, + "id": "pool10jr3gref8s0hzdzh8jvcvaykx9eyh4lgn3d424uzvk9m75arjs9" + } + ], + "gc_status": { + "status": "has_run", + "last_run": "1889-11-06T07:43:13.860207111408Z" + } + }, + { + "pools": [ { "metrics": { - "saturation": 3.2016694727708654, + "saturation": 4.172407150961861, "non_myopic_member_rewards": { - "quantity": 114718424718, + "quantity": 342437008583, "unit": "lovelace" }, "produced_blocks": { - "quantity": 18400483, + "quantity": 7391890, "unit": "block" }, "relative_stake": { - "quantity": 6.04, + "quantity": 17.8, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1902-11-20T12:00:00Z", - "epoch_number": 3318 + "epoch_start_time": "1903-09-16T00:49:23.362415198811Z", + "epoch_number": 9393 }, "cost": { - "quantity": 52, + "quantity": 254, "unit": "lovelace" }, "margin": { - "quantity": 18.4, + "quantity": 97.61, "unit": "percent" }, "pledge": { - "quantity": 148, + "quantity": 146, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": ",suD\u000c\u000f񽰃A\u0000\u000e-\u001c/><𦣛Lb#X\u001a\"\u0000;d!:=񇅝i坟\u0017\"\rM\u000ex[\"򰫺 n\u001f\u0014𦐇󡭨rU=b1\u0018噄񇯽}󐬑򷆵l򻜊\u0006", - "name": "\u0015\u0006_񚊂O7񽖳󥞙𯴽g򭃹'򩍶5dO\u0016􆺍W-򫽴󠙉J󈿗𢡧J򢺭񰪰]𿥆u&􁼜F𵋺sJI\u001e\u0004urp%", - "ticker": "􍣢r\t򚤂Q" + "homepage": "(񭱳\u0000򤧩M2򛣫8󑆟\u0018l򄯘TqI\u0018񁅏\u0017񰛽jwt0-񢰏\u001a𹊶񂕽\u0001󟵮\u0008\u0004/􇅂\u0004p#񗪡w󡜆\u0006\u00195󽲮D\u000b󣓯B\u0010\u001d,(p򢁨𘛋Q\u0008\"򮓪]Pw{L\u001cr8(T-C\u0011f񃉣𽬳O]c", + "name": "񺦁g8=𷉐e򱡕Oꄽ,=\u0008\u001c$-@06\u000b&tl\n\u0015\u0019]𯊙&4QN\u000c\u0007&k\u001e6\r2'򹈠\u001c", + "ticker": "S󰝤󥳝" }, - "id": "pool13cpgn4vw8ych5m3md5fmvnt9sp4mqf9nx9wnvt0559z3jctmjmj" + "id": "pool12030cgker8rywsrhqujan278v9refh4qsas6d5ldfv087xtplly" }, { "metrics": { - "saturation": 2.4230443610464762, + "saturation": 1.0240958168171277, "non_myopic_member_rewards": { - "quantity": 434770390464, + "quantity": 967720633630, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16828568, + "quantity": 15745213, "unit": "block" }, "relative_stake": { - "quantity": 19.64, + "quantity": 7.06, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1895-03-05T21:31:24.753913459822Z", - "epoch_number": 22064 + "epoch_start_time": "1862-04-28T15:02:53Z", + "epoch_number": 15160 }, "cost": { - "quantity": 105, + "quantity": 60, "unit": "lovelace" }, "margin": { - "quantity": 38.7, + "quantity": 69.55, "unit": "percent" }, "pledge": { - "quantity": 153, + "quantity": 85, "unit": "lovelace" }, "delisted": false, - "id": "pool1zg69ugurtghfxdgr9ch80kd70cv8f205c2qqmge4lzwzc9qgvcr" + "metadata": { + "homepage": "MC)|񁼔7\r\\ae<\u0006d|]􊨡U; `Gh\u001d\u0004W=󿱓\u000e|\u0006yJ?y_\u0016z\u0010%󸿉w#&\u0000&a\u001br'򦕪(pg\u0005KdB񾳁6M", + "name": "n", + "ticker": "􉦭F\n", + "description": "\u001c쟄7򨊝󥴟M𩨷\rx7\u001c\nY𗥞\u0006|;x\u0018p=\u0019󠰟񂰔𝂒M􁔩𖍇o]C񞗶e\u0018𙔟HV󆜂򐸙󈉋3(\u001ef9𵏵\u0014󉍇h\t\u0013_A5\u001e񵠉򜯢<񧇑\u0005󏲲\u001cd\u001ch\r0hPPJ " + }, + "id": "pool1k4es6e4tnmwjc9sdlg8zzcequj8ud7vuej2cjukklkpz75ng9x3" }, { "metrics": { - "saturation": 3.261209738324153, + "saturation": 3.6696436264555237, "non_myopic_member_rewards": { - "quantity": 861541967823, + "quantity": 420822746573, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11205056, + "quantity": 11853048, "unit": "block" }, "relative_stake": { - "quantity": 56.52, + "quantity": 35.73, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1869-01-05T15:49:57Z", - "epoch_number": 11705 - }, "cost": { - "quantity": 93, + "quantity": 103, "unit": "lovelace" }, "margin": { - "quantity": 53.53, + "quantity": 25.65, "unit": "percent" }, "pledge": { - "quantity": 164, + "quantity": 181, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "P0\u0000\u0015󃙜KD1\u001e\u0001򥁄&r\u0010I\u000fOJ\u001e\u0019 v󖸖/[󻵺nS󪠆8W)p񑑘", - "name": "Wp򤏍<򖂌,(\u000fX󡁘 %E:\u0015:;\u0000𝛒𠟵=񤣯\u000b𽩃񀒨]🨇񒞏?\u0019x񂂮Z殺%p񙃛", - "ticker": "\u001bN􊹅𔩮\u0004", - "description": "AS\n,\n4J\u001a0\u001fS\\51񙙰󆽝2@T&N+Tq 񢰅.@V_t\u000eCa\u0010\u0007贸VV!柶6򂚜kS팣\u001f񢉅\u001e򸎕\u000fUg񴐘򵄳𝗌𝅥FF#7!񯬉\u000e|p\u0017n\u0002S\u000fJ1\u001c\u0007쯡)t\u001cNW\u0013C񟃓􉛋􆩫k\u0011V踣-6񂗪_O!񔤁Y(\u0004.񘘤𸌓𿍚=󸔷/,~󉊋I?aE77񖝫rj\u0005\u0011W򠋟%c񦩁\u0015,\u0004\u0004𡩃\u0012a麼xl򔔬񗊺򍂍?9\u0005~\u001f\u000c귟𝻃?Z\u001dE򩹣2u\u0003oN[\u0014rRt0򒘄#p*:7􅋯*򬇨𬫓󟨂c#d*\u001d3p7QLZ$񇀜3I1#󋠣򄖶\u0004e񫙤󁴪s\t񍌵𢣧𝑪e[󸁥9SYl>KY+{\u001am=\u0011" + "homepage": "w񸊏𢖬im4Xl@U6M^6󓱚l1\u0011Tl񕓪/\u0017r\"PG􏃒yJ^i>s󳆲^H1i𠫜)^\u001f񂩐􋝡UM𻡝\u0017WJ\u000eC􊶫W񮀊􍑀M\u0003\u0011\u0014 \u000b󖻷_\u0010\u0016\u000eow-2୧፪", + "ticker": "_(攔", + "description": "]k)cOU N\u001e\u001eU/0򮵐񘉚򠓘5\u0012>7򛳡,T\u0016\u000fX[\u000b4󧽸𩩄\u0012񅍂U\u0011#" }, - "id": "pool1yukznaqy39vkwyq07hj9sfxs0cf7k699wksh7c494pdvz3t8lha" + "id": "pool1t4udw7q7p52050c26a0mzlcwlplc7693rvmmgvhavvwdjqsr90l" }, { "metrics": { - "saturation": 2.0165062161009373, + "saturation": 3.770269836167919, "non_myopic_member_rewards": { - "quantity": 391620560869, + "quantity": 352293096174, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11411767, + "quantity": 15555900, "unit": "block" }, "relative_stake": { - "quantity": 24.02, + "quantity": 54.54, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1901-09-04T15:13:46Z", - "epoch_number": 5007 + "epoch_start_time": "1880-09-21T10:00:00Z", + "epoch_number": 23349 }, "cost": { - "quantity": 123, + "quantity": 97, "unit": "lovelace" }, "margin": { - "quantity": 39.47, + "quantity": 77.88, "unit": "percent" }, "pledge": { - "quantity": 78, + "quantity": 150, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "𪹃]3|.lCA𐥌񖰑4o󈋀06񱟼񬍹xpBs򛄗lf򓑥\u0017\u0017􆭽𐞎𳦸\u001b?\u001bQ*죶Y\u0015<\u001d廿򷠓NG񅎞*\u000b\u000b𘪥a\rX񶇝Ma񫄆$2񉕝+񜨎L󫗱򔼾\u000b3\u000eh?\u001f󧕌\\/T*{q^Tv񾎽q&\u0003`k򃈻\u0002򍹂F{}7Q\u0003]Q", - "name": "Dqh\"a@񛒧\u0010\u0010;󀮲𶷋򇅶𩬜\u0010ョ򢁠\u0015𚧌+󸌽k'A<\"%", + "name": "V𰪿󦁸𹚘񇋴0󭰱u-󾄥l񰠤+𛆋)񥛌l𓃤tXy\u000f&\u001e8x\u0000\"𼘒7|kA\u0000[", + "ticker": "a./󈠛", + "description": "񼑚SS]Jk^𸷟u񊘌\u000c!񴔄M4󹾝#~I\u0010l\u0007#\u0015%𖁃9\u0015\u000bc\u0016􀉗󒊨\u0019{PJ\u001d!l:\n󐉄[Q𚶘󏿭!m\u001b@pF6󜇰[ꦄ񬻍󉧟A%Sa񬣕񬎂Pt#񑲥Z0󜥬bx)\u001dZ\u00008\u0017V򪹽\u0019򌨾Mb󐲇񆓤i\u0007\u0006H򦑎G8򤁫!J\u001e?󾻤\u0001󺏅=\u0015Q򺝻0򿚉nAk򼁑󚇲/0\u0004񆏕@S\n󏓷8_󀁷\u0008[+Bokn\u0017\r~3q򕣕f\u0016򖖖~󖣎;ir\u001e󂡀󡝨\u000e\u0005񙾼~\u000c񚥢-kw\u0011z{\u000c]0򀪛򕮇t8r𫖹jz(XB򆆶\u0006" }, - "id": "pool14hrgcxzdwd37f4t6lz74yuhur8ax4qpfttescyvp459lctrq8z4" + "id": "pool1yevuejpzztrpmxsm4sm99lsrukf2we2g99tvkk65kpzekmncejw" }, { "metrics": { - "saturation": 0.25389114258957457, + "saturation": 2.2123030423414742, "non_myopic_member_rewards": { - "quantity": 511802406800, + "quantity": 996985257935, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4032508, + "quantity": 13081465, "unit": "block" }, "relative_stake": { - "quantity": 98.98, + "quantity": 54.01, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1877-08-07T09:00:00Z", - "epoch_number": 834 - }, "cost": { - "quantity": 166, + "quantity": 245, "unit": "lovelace" }, "margin": { - "quantity": 78.04, + "quantity": 20.39, "unit": "percent" }, "pledge": { - "quantity": 2, + "quantity": 165, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": ">\u0019\u0012J􃖂F񻮈򂯌򝎰}BV򡱨Y8򀨛u;0C󰝞\t񢠪I𜌑󑐾w \u0017\n󺹔i", - "name": "G򐕒u\u001fy", - "ticker": "%5\u0008", - "description": "yj𯁵g\u0012󡐴uN𨙳DQ`􄀙\u0012NA\u00072󗨔XJ:\u001c\u000b񗻨K\u0017\u001eb5I\r`\u001b(O_KU\u0015\u000b򜫿򂞍S\u0018\u0019\u0014Y_񈹾Y[\u0002:򻬰]6&V񊛈6\u0019\u0001\u0015'\u001e\u001c񌱕L󴙜t\u0015cpe񵳹!a\u001be:𵣚򨮞򒠺J\u000c^&F늵򱄷񠖔𿷇󣋿𮀥 򟵋9󧁁󮅀\r\n𝔻\u000cF6򌆥w\u0007p ',P)N\u0004\u0014g]7L:Y&񞃙񈓻Q7񦊹[\u0001ae@Uwh󧭯󮁪󼴉\\Rs}\"\u0013򶇯򁻅𙘍+􈝜?~\u001au\u001fm#󿉇\u000c6fc󃏫_\u0000A󲑲3\u0017^%\u0015Yl.򌪚c\u0015]𻒣􍜁" - }, - "id": "pool1djtd83yujntw95vfy9rttzlhp2xw3x82hnpnxktqgqfdjrkvn4u" + "delisted": false, + "id": "pool1uryep3vtvfn3tgsscnwz3shguxnp98ftza2d4g07lefqx2vcyjs" }, { "metrics": { - "saturation": 1.065588856205855, + "saturation": 2.0923852535513783, "non_myopic_member_rewards": { - "quantity": 144808334257, + "quantity": 638275672841, "unit": "lovelace" }, "produced_blocks": { - "quantity": 20095353, + "quantity": 4049163, "unit": "block" }, "relative_stake": { - "quantity": 37.14, + "quantity": 19.68, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1899-11-25T10:38:26Z", - "epoch_number": 32621 + "epoch_start_time": "1886-03-12T14:00:00Z", + "epoch_number": 18839 }, "cost": { - "quantity": 73, + "quantity": 184, "unit": "lovelace" }, "margin": { - "quantity": 43.93, + "quantity": 28.07, "unit": "percent" }, "pledge": { - "quantity": 84, + "quantity": 172, "unit": "lovelace" }, - "delisted": false, - "id": "pool1sl5ky24yvxp9tsq5cjld3k4smqsw5xdtq7hv9gfkgaqkxsnv68z" + "delisted": true, + "metadata": { + "homepage": "hAAJ*\u0003򄭒\u0005vR\\>~d%mmD𧝔􁀢\u0005`៥\u000b򸊃k񧜛(\u0001{_򬻄\r\u001d|k{^\\\u000cV8𞨭\u0006򳝉)\u0016񕹵o\"+𼍣%V򋏧𫃤񦜺v񝾏\u0008\u0012Oh򕐠'9\u0011`%PG𻼁Qz\n-3rE򻃽g􈺪g𡷚𠇦ZWa񼺒_)񋗝\u000e\n\u0010K\u0013𯉗", + "name": "\"P+W\u0013򯄬Or{򂉥\u0010\u001de󨜶M\u001d𵤫)V倧v*󦤃𙛥𩙎f__󄣙񇦄s򜫋)51󠃵", + "ticker": "IOI,񔗎", + "description": "\u0000\r\u0010񫿱\u000e󯺨(\u000bi!7񇈆G4K%,b\u0010\u0006\u0003Ny4򞜻\u0018㠷\u0010NeGu\u0010\u000fUIm_\u0002bc\u000eZa񨃣^򕢩X񎉒:\u000e𵃒򇓆\u0011񳗄}1s\t/\u001f񗓫@񅃾sCuX𸝻'z𝡭𸿿\u0004🅶\u0011𲬄񍲓񮥉(o\u0018I𵒋6zfAAsx9\u0011픝\u000ey]񯶫3%󃏥^Fx\u0016\u001c\"𥜎1|6%\u0007q򏐵,򋵘𮈱J\r򃰇oX\u001f]𴫽\u001d>oP\u0014񩛂U\u000c󹕕" + }, + "id": "pool1nrpym6pd494t58f7upsdtg9eecu9n76dw38pn8cz63nwqhhvmtq" }, { "metrics": { - "saturation": 2.0174777693779817, + "saturation": 3.737659378715624, "non_myopic_member_rewards": { - "quantity": 572579658413, + "quantity": 498356412626, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13273624, + "quantity": 18083377, "unit": "block" }, "relative_stake": { - "quantity": 2.79, + "quantity": 74.89, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1874-05-31T00:00:00Z", - "epoch_number": 4023 + "epoch_start_time": "1866-05-14T07:32:48Z", + "epoch_number": 30415 }, "cost": { - "quantity": 179, + "quantity": 97, "unit": "lovelace" }, "margin": { - "quantity": 57.18, + "quantity": 64.47, "unit": "percent" }, "pledge": { - "quantity": 228, + "quantity": 112, "unit": "lovelace" }, "delisted": false, - "id": "pool13fehrxgzl70jm0hz2zpuuhpvhl38gl0dnz7uy74cqk5nynyuneq" + "metadata": { + "homepage": "b\u000e򑆐󉾩񼙺\u0006;)\u0018a\"\u0019k/|6f\\p򶡧H\u001fz򸩆\u0007򶠕", + "name": "U\u0006W", + "ticker": "F5q򯟤", + "description": "{4SPydhaH-\t񵢷\u0017\u0007\u0008_\u0007O9[e\u00060p򝖠򚠵\u0001M\u0001\u0003􁑬\u000b\u0012Z\u0018^򗉼]򪱲󓟬T=󫂖\u0014[󋱞[5T1\u0004L򯚞PBC/?d򱅇򩒇O󞯐􄙈򩫯\u001fBሚuc-\u000c􆇭󞘷򑽴󛝜3h\u001e\u001e􄨁𩦆!򛴯1~I𐊲lS [{Kf:\u0011󐞀j:\u001cL쥗B a'3V񔪀BN.n􀭡Qd񫸎\u0010}7'񟃴.񔓡𘂫\u0012\u0017m-mO󈭜􍃗G\u0017X\u0005\u0018񚺡𦒰-\u0000b/䵰]񵴂\u000f\u000e\u0003v򌆫\u0016\u0006c\u0019-Vz\u0012qh񤒺񰲡򿄜𥣢B#:~\u0002󤤝CMP󝏙c\u0002m\u000f\r\t\u0003IC\u001e6\u0004nE􆽊S󉧠(\u000b'񕯚𘝝;p" + }, + "id": "pool167p9ggdt0knuwdn97304d3xk2qmkrpt5uk5z7al72va9647gglv" }, { "metrics": { - "saturation": 0.2414973537504428, + "saturation": 1.1696632894808063, "non_myopic_member_rewards": { - "quantity": 552045225830, + "quantity": 194313410853, "unit": "lovelace" }, "produced_blocks": { - "quantity": 392212, + "quantity": 2142158, "unit": "block" }, "relative_stake": { - "quantity": 88.89, + "quantity": 98.94, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1885-09-01T17:40:04Z", + "epoch_number": 22058 + }, "cost": { - "quantity": 239, + "quantity": 60, "unit": "lovelace" }, "margin": { - "quantity": 72.74, + "quantity": 66.66, "unit": "percent" }, "pledge": { - "quantity": 180, + "quantity": 13, "unit": "lovelace" }, "delisted": false, - "metadata": { - "homepage": "2𚴊S󩅎hW񖯗𸂶3󠈫-\u001f\u0016I񦅓\u0012 \u0002\u0003R\u00071${w)9 󲉊:厪$\u0004~\u0011R󶖾h󠜏G^T⡏G򺨟NVtxc0\u0011\u000btaIk]>\u0015c񓔅񢲣;F\u0005(I\u0001j󅎣", - "name": "f􉢰@Q𹧡(P", - "ticker": "\u0014񅪬^򬌞񛵜", - "description": "\u001fJ\u000e\u00189P\\bD%$_􃥆X?1\u0011\u001f󖐼\\򎮭bA򲛛\u0016񃨌󋶮[\u0001ㅾC󥱐I񦖿u\u0016񛘢\u0014\u0002\u0005Lj󬆧J\u0010\u0005\u0008'*#󹘗)򨢚md@\u0019=󱸲8CXu!m\u000c.]\u0016Ho 򢇩\rz^󭋌)a \u0000􂼸m'\n𗴪wO\u00034󢟋\u0003🐎J\u0001.}`\u0017\u0008O\u0012h!+z\u000e\u000e򆱛򇱖?Px\u0019V򭼏}4A6P\u0010\u0004>\u001a\u0005:񬽟\u0012>1𷢕XD\u000b\u0014\\{N\u0004\u000e^,󽡾\u0013Y\u0012񢑊򼦤.+o\u0013l_\u0015\u0012x6\u0000򥑒򖭰\u00148򗷮\"\u0004$n|\u000c򲁱󛨷Z򩐀p\u0010򋘥" - }, - "id": "pool15uyuv8v7g554shsk7sl9p2fsz6ngdnufjq9lxn8c8fr3snfls9p" + "id": "pool1prctaun8vmucn3g0luc57pms5hc40avpnfkn6zedxpka2t3gvwg" }, { "metrics": { - "saturation": 4.071892955897031, + "saturation": 3.7751844934474974, "non_myopic_member_rewards": { - "quantity": 433326710365, + "quantity": 603536044423, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22248014, + "quantity": 13427707, "unit": "block" }, "relative_stake": { - "quantity": 21.37, + "quantity": 20.92, "unit": "percent" } }, "cost": { - "quantity": 38, + "quantity": 115, "unit": "lovelace" }, "margin": { - "quantity": 9.17, + "quantity": 36.21, "unit": "percent" }, "pledge": { - "quantity": 248, + "quantity": 236, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "4𱇪v㢋A", - "name": "nLnH񣎒\u0013U\u001a𬸢t񅿕))+󉷨򂾼𭗳\u000eP\u0007\u0007@J󳟕򶮘􈷌򈨭𦟵Y:Nc\u0005\u0017>\u0003R5\u001c񋦨󼑣fK\u0014T򒩕E9񍬢i\u0002\u0000+N(\u001d:𣔘qW𺶻\u0006\u001f:񘖶\tt]E\u0012𸡆\u000c\u001e\u0006j\u00194\u0010EQ򝛵{{򇦰A\u000b񾠜\u0003򖂇TT󦍙焁hU`𣛃CB󓌍\u0015\u000b\u0006𝻷etB\u0003񥱶w/𻠞w}2_[\rT\u0001𕿟Pp<򀅲\u0006ꌗ𘧃" + "homepage": "t?9?򙻢4vk-(\u0017l$^\u001b󺤻U\u0003\u0016\u0013\u0007UT򦮱𾊢\n񿹌``\u000b\u0006\u0008Yl/L𠘽񸰑^:\u0010#񝓌\u0001I", + "name": "򯾜𸺌", + "ticker": "l>yh񾔒", + "description": "#l\u0017T\u0005cz\u0014􆪊8F񿛞񋱱O=>d񬞸<򱲧\u0012\tI\u0011񶡈~e\u0008𤃛\u001b?\u0015󖈐\u0000T\neꀙ񬇯<򔰴U]󁥿蓪\u001c\u001b񎛵!񢘐\u000b23\u0008]􁻐}Ya񠶈_Xmb򄴥@P􃨛W\u0004!𵁟󃂸#Y50󭥲\u0008$񫂗\u001a|-󽄹\u0006񷰩g'\u0001cⱐ\u0004𔤰'\u000b=q\u0014񮬟\u0016𪊪L{\r%Ej\u0006N↝ꃐ򏟨" }, - "id": "pool1h39cjpnj4shgf7hc8q7h286njc4lyyqm87n766d3mfgvx2pp970" + "id": "pool1qu9awhxu0g3wssuvyanp0muckqe2zsn47pf3gslcrpx9v7pj8ch" }, { "metrics": { - "saturation": 0.5469269934670151, + "saturation": 2.508274278046802, "non_myopic_member_rewards": { - "quantity": 245966959377, + "quantity": 242572720739, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12920570, + "quantity": 9146470, "unit": "block" }, "relative_stake": { - "quantity": 78.97, + "quantity": 65.03, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1867-04-27T06:00:00Z", - "epoch_number": 15640 + "epoch_start_time": "1890-05-13T08:00:00Z", + "epoch_number": 21664 }, "cost": { - "quantity": 128, + "quantity": 8, "unit": "lovelace" }, "margin": { - "quantity": 30.91, + "quantity": 60.54, "unit": "percent" }, "pledge": { - "quantity": 165, + "quantity": 221, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": "mN򯼷/qp񮉞\u000b闀m򍄭}񽂩򛳆N!:򌃆򺾓\u001a𗝇\u0000󳯲b񧹊V\u0007C\u0017񞳪U󁝃\u0003󌊶,S\u0003\t(|{\u000fZidK@[$򘷤,i󹮍󹕝\u0000Lz?$7\u001b󗾑?󵂩Fy\u0008𞀧󛺼!\u000fj􂅖]n$󬭐\u0012|Zc9\u001bB+󢈌򰍖g", - "name": "lq\u0006P8K񕯫\u000e򟻹𽳂\u00102d\u0014\u0019*􍔍𸖨\"/H\u0019e", - "ticker": "\rs08", - "description": "a=n33$R8\u0007\u001f\u0017𞿝Cy򖆂􀍁񣕠`򒻅(B$ZuC;nT\u001fW0\u000c􆼫k񟜣񊟊}GqC% \rp󔈇򊦑\u001e2bE􄈏𮆸\u0016`򯧗#\u0012h\u0012\u0007󊬠\u0001t\u000b9,D2V\r)򭒑O?7c)x,^n\u0005\u0003.򵓆𡛯㠶\u0000,3j󷥕hZ􅵝bi򢩐1\u000c򒪸H򱑍𢁺N\"{Y󵎽`𒅱@`[.+.\u0010󕅶򢍸򲿭򴥍򈘾\u0006;󬰟󦘱q" - }, - "id": "pool1hsklx2nuv0gu5s5cwxefvjhyrwcka7shzqhn8dncylp67us39yu" + "delisted": false, + "id": "pool1nn5uj7tvy2924afemz6zlfefrqap5xrmewt9gjv5hzkuvdy2h38" }, { "metrics": { - "saturation": 3.358955465294292, + "saturation": 0.15525194872872738, "non_myopic_member_rewards": { - "quantity": 38633120855, + "quantity": 540056611675, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4349848, + "quantity": 6364470, "unit": "block" }, "relative_stake": { - "quantity": 13.77, + "quantity": 9.72, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1894-09-15T05:22:37Z", - "epoch_number": 20757 + "epoch_start_time": "1872-08-28T20:51:06Z", + "epoch_number": 13512 }, "cost": { - "quantity": 255, + "quantity": 234, "unit": "lovelace" }, "margin": { - "quantity": 67.39, + "quantity": 84.39, "unit": "percent" }, "pledge": { - "quantity": 14, + "quantity": 208, "unit": "lovelace" }, - "delisted": false, - "id": "pool1ffqhl9h0hns7l5uuzt4wxfeaqxxe4mjn4j4j5p3zvs98zpnc7je" + "delisted": true, + "metadata": { + "homepage": "=\u001c󹀱s򃋝\u001a\\p9f򂤿%(a'y򸆄LN4󛕺QP󀮨񷛿\u001bV-|9\u0017P󵑡Vv𝱪j򫼧p엖-񁲘􍂑\u0000󺗵ho\u000b9𚎌d$B򰛚bxt|7C06jc\u0014򌩩g7􁇼\u0006\u0007eF𹋟3rn󢄛*;i\u0012\u000b\u0002R򳆿\u001a,S", + "name": "p\u001f\r\u001d񳷀A'OD𥔯\u001d~~]񨉵\u0001%򷯹", + "ticker": "򿱋s񓝞", + "description": ",TFc^𹳚\u00066𚪫a&𪏽\u0002\u001dH\u0002_򱻼0Sp\u0006r<򪧫&\u0008󱦪\u0015&𩄿󓜞\"\u0016\u0007\rp9\u0001\u0015B*A\u00167񍏈\u0007񡙳򣞝<\u000cEU򂓇B\tD􆈠킙盼(󬂕#𮙆~񭚆Mi\u0006x𡢯򿞮\u0004\\\u0005򄊜򲆇񚋜/" + }, + "id": "pool1e8kk4ldsp0jdfqc0emupqa44ayc9gmpj8laks0pahn6hzh5fvw5" }, { "metrics": { - "saturation": 2.2013508093341354, + "saturation": 2.4651988691416795, "non_myopic_member_rewards": { - "quantity": 641600827329, + "quantity": 309371935744, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16217189, + "quantity": 16387507, "unit": "block" }, "relative_stake": { - "quantity": 24.68, + "quantity": 73.9, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1884-10-06T19:44:04Z", - "epoch_number": 12662 - }, "cost": { - "quantity": 161, + "quantity": 125, "unit": "lovelace" }, "margin": { - "quantity": 66.93, + "quantity": 85.66, "unit": "percent" }, "pledge": { - "quantity": 65, + "quantity": 120, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "6\u0006񭮱?4\tD,󐡪񋓿5=l𹹭Y", - "name": "l򫍼\u0002", - "ticker": "+\u0013*", - "description": "m%Y򥬭\u0019򳱷QN񪭌..4d?\u001f≑\u0002" }, - "id": "pool1smaqv6r888y5ynz5095kp77vewtcgtck99ge8xr5929d7kszv9a" + "id": "pool1u2nydg7n2dnnxus7wntluf4q8lcu8ys5ve28fpc5cc0dc623jqz" }, { "metrics": { - "saturation": 1.8863132150138606, + "saturation": 4.730682759434615, "non_myopic_member_rewards": { - "quantity": 256607456215, + "quantity": 272671478150, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6212162, + "quantity": 4603967, "unit": "block" }, "relative_stake": { - "quantity": 1.98, + "quantity": 33.81, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1906-03-22T17:40:35Z", + "epoch_number": 5721 + }, "cost": { - "quantity": 66, + "quantity": 17, "unit": "lovelace" }, "margin": { - "quantity": 12.79, + "quantity": 52.25, "unit": "percent" }, "pledge": { - "quantity": 166, + "quantity": 181, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "\u001db-\u0017򱹍򸵞\u0019򍅊Q\u001bwe\u0008l7\u0003]&C\u0004E\u001e<+/]񳩅G7\u001e峼򯊙B\u0014Q󓼡9}A\t_򒴏6񬰡\u0018񟬫匰dn󯀊󆨵j5\u001b󄞔,\u0013'f&E$8i\u0006%b\"𒷋j,\u001c.r\u0017V.򺠒\neH񱹤\u0001J", + "name": "〧\u001eNx\u0005(\u0001\u000e\u0012z𖒴\u0016\u0011􍁡򹉓l􇊝\u000c$h򭟣>ep\r|󿷌sUH\\HV{A񴲼򍢜󜱔:F𥞛\n𴧍", + "ticker": "Z\u0016MH\u0004", + "description": "U#Tu1{󴕦zy􆞥񞈮>𸏑G=(d?-D򺷞\rnoD\u001b+򳿡\n\u0008Z\u001e\u0013󓈄񆘉p񏃥򁋐񺎄򱴛ꌿay\u000cv$k\\\u000f)kxc󏵁񡉣v񷲕Mbt+𙀬Qa򹀃\u001d򟸸F\u0011\u0019\u0002&l3xW|^񙘖\\h\"\u000bZg񠇔򞸐򣆴I󇚮" }, - "id": "pool1wqph4pvrgs0cdvjzswlp4uf80ysk9z4du0eehca4l8nljw2rc78" + "id": "pool1kwnnusappafsqvl9uratzy4qugwpwcn0tjltc2mlrsaacn55ldk" }, { "metrics": { - "saturation": 1.1393278211165192, + "saturation": 1.5271092031591276, "non_myopic_member_rewards": { - "quantity": 544226523118, + "quantity": 587311714349, "unit": "lovelace" }, "produced_blocks": { - "quantity": 19708784, + "quantity": 17857179, "unit": "block" }, "relative_stake": { - "quantity": 18.29, + "quantity": 27.65, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1864-10-19T06:00:00Z", - "epoch_number": 17756 + "epoch_start_time": "1883-04-11T03:00:00Z", + "epoch_number": 18446 }, "cost": { - "quantity": 154, + "quantity": 133, "unit": "lovelace" }, "margin": { - "quantity": 26.57, + "quantity": 40.56, "unit": "percent" }, "pledge": { - "quantity": 234, + "quantity": 148, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "N<쵆񔃢;n~I\u001b_\u0015򤞣_rw򴜁𘚜I>G󨾃\n+򅈞f\t󻣡􏵮㖃\u0019񞌘6򵘋\r󬩭5\u0016\u0012%\u001eG||󶩡喜m\u0006\u0008P򙚴X\u0010\\򇮪g񫔖Yt\u0010X\u0019(t񼐆DYpyb4Mz|\u0007v/𣢽\u000c\u0001", - "name": "eC󰄏O%M,\u0010_", - "ticker": "lr厮" + "homepage": "􁀎\u0014󒴣򀼼򗋹q񧐒󠂏\u000e'󡸄B{񡃬.rk*#I𦵌f\u0005\u001dYPKel~xS)N\r\u001a)vqX}1𵗤U󥯼𙽎\u0015\u0017򫕣񖽝񃔪\u0014Z,񳨑M\u0001󹘦us\u000b𤃗=*𤥯\nF", + "name": "1\u001a򉎴T\u0005'򶽃򱖈򂜺R\"4\u001e\\\u000c\u0012\u0005󜏿󲑓P󋯩Z򇰜N\u000f𱧪𩟊󋳋񪩑):񁽵񽜫񀼉(򣗌\u0011򩗱񨒔\u0004񏨦󌛮m[OKF񓹫\u001f", + "ticker": "x􀽒\u001c\u0006Z", + "description": "󈬵󯻈(\u0001򅟘M\u001aN\u001d\u0010 u󅥐򖕿'FJ𲕉V%\u001cE񇺠^D\u0008L1󳩵E򍿏:|󑓺O󴊘!񢴹\u0016\r!'UM󹲥\u0005S\u0012)1\rT񔷿SS->!􀆜򰶑\u000c7񇛋5򂖧\u0005[b\u0008(fW񷳜_^񓖚\u0002𩹸񵧸B}\u0018\te𩾞~\rNpEe򧦢.k\u001e5㾣H\u000c$\u0010𧹏\u0008\u000enx󪝑V2\u0008!,T񈅵g򧲪y\u0014񼬌i󲧂\u001a!'񠥳wV򋬟󭇂o*\u0014򻝘'j=4􍤷񳚘7lH\u001eNp򐆊HK8S$󺻐9H󮶀f\u0000\n𹩎H:[\u001e񴭿\u000b𡪎\u000e򝢽`c+G񅖨SDe򾼾R\u001d󁱞5H\u0005䞈Z1{" + "homepage": "zO𷥏B񮝂𲥣\u0016򡺤濕򳬻\u000f\u0008", + "name": "\u001a񰋂#`\u0011\u00152񡉤\u001cj򥮧\u001fO`,򩬅&,\u001ef \u0003fZ5N", + "ticker": "-gG<\u000b", + "description": "\u0014g!B􎺀񮈜򤚗𬽿򬢠\n\u001e\u0019H:򩾔\u0005MP.\u0007􃥀7󮖇\u0006!u~\u0018m\u0005p7\nd3@򮰍su3񲱅v\u0010\u001cpes'T\u000c\r0y\u0007KfJF^s𩸞Y򖳑87TPfk5B\u001b~󍉭}󢒞񊽋{󅛨豅NC\r𰘵1Cx\u000c񑋺򽼳񒞾U󓙣\u001b#🫕ss񠛿l\u0004f\u0006Uo𳌐?\nK󈀢C}\u0019W󑳽;P𫔾#u񑂒r򦡙򉉏:𠌊8񒑮or󼡹7񾙂񪎌[𺢁B03L󴿒\u0000\n>" }, - "id": "pool1r7v8t2h56az4uggdd5ffuy4v23l85t2dl5xmqgy6vl5kkhkhwfd" + "id": "pool1ty8hcvrhrgnduyngnynq0ufxayudvsl95twk6t79mzu0yl9vgrj" }, { "metrics": { - "saturation": 2.4873174055298266, + "saturation": 2.6162039176534675, "non_myopic_member_rewards": { - "quantity": 715908491068, + "quantity": 239489474594, "unit": "lovelace" }, "produced_blocks": { - "quantity": 20666150, + "quantity": 12652208, "unit": "block" }, "relative_stake": { - "quantity": 20.96, + "quantity": 78.05, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1905-08-01T23:58:27.584842259343Z", + "epoch_number": 1172 + }, "cost": { - "quantity": 28, + "quantity": 120, "unit": "lovelace" }, "margin": { - "quantity": 9.21, + "quantity": 28.45, "unit": "percent" }, "pledge": { - "quantity": 210, + "quantity": 79, "unit": "lovelace" }, - "delisted": true, - "id": "pool14d0xjj3a0zrwwwc2907sh3u5xeareu86e5d5hdnk3amju5wr64j" + "delisted": false, + "metadata": { + "homepage": "]\u0001\u0019m?h\u0012󭍏\n*fV.=-:(\u0005R񽮸4", + "name": "ua󺆳N$񭬯(𰞄򘔹o񬲫Otᐁj\u0005𡁁\r!", + "ticker": "EdK7K", + "description": "\u0018du񵆑&Nv\u0011oIb󆿭񽼯򛙙𲧮];G@G򷒛{\t񉪯'q񆝢rX񶶢@򆮽򏹠\u0019xCH\u0006N[𒚣\u0008+s𪻈u\u0012o5B򮉘ZF𕄰󯿢'W򊻇󋐨+򛍺dpF󼃄O\u0019\td5\u0014\u0013x0T56􉄴󅍭\u000b󆚙Ca+`𠧉𮍕V\nS5^u򮔬\u0018뺮􍱀𵠌'uE\u0005𹐊󽭝\u0010񧌿N\u001b}R\u0008\u0000\u0017Q)𭚅>D󕷌[簆󝤶d󌿼d\u0010𚍍񴒇\\\u0014?9H\u0019T-3\n򪻠\"4G\\\r\n)\u0012񞷁𗱵c\\z􀡄QNd􉳵{B\u001c4),!\u001f􎃑,񻘅\u0003H+7[qQ}*򲬣\u0012n\u0016\"\u0014l𔿚|\u001awj+|!}~R\u0016yl#v𮔎\u0017󯻣n𘒩򄾐Dd\u001e\u001cRv_/{񢜹\u001c񂂿mL.\u001a򵰨𚏠tLyb@C*,BMkC(\u001a\\I\u0016􉽠\u0010@\"w[H\r2gyhB򷼿\u0003\u0002\u001f򧊫6/[H\u001eZ}gr󉻝W71XzY򃻚S" + }, + "id": "pool1f4kfc2nmmtm833mnxawuqqxk2y6vpyg5k85nn8mltxqfyfmemhm" }, { "metrics": { - "saturation": 3.4509613956740615, + "saturation": 1.5709247808311888, "non_myopic_member_rewards": { - "quantity": 991903152711, + "quantity": 260216313299, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22239562, + "quantity": 9284735, "unit": "block" }, "relative_stake": { - "quantity": 3.4, + "quantity": 95.59, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1883-07-04T20:00:00Z", - "epoch_number": 12443 + "epoch_start_time": "1900-04-09T04:04:11Z", + "epoch_number": 24518 }, "cost": { - "quantity": 36, + "quantity": 204, "unit": "lovelace" }, "margin": { - "quantity": 78.52, + "quantity": 55.09, "unit": "percent" }, "pledge": { - "quantity": 122, + "quantity": 113, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "0\u000e񵨨9Ub􎻶񑡣v!8񣷍~,󽫳$\u0003󡔴🈕o\u0018A{\u001e𾽵빴B셒^񦑸\u0004𱼻UI\u00008[𻷹\u001d[򵚻\u001d\u0012%󼏴D󰧏󻃺Fj02\u000f񇹤\r\u0012򐯰񧮡P\u001a_abXz-" - }, - "id": "pool1uhe3unqq6m854pzta5t8vj8z77czvw7dywc8et5dszluyuscprr" - }, + "id": "pool1e34vs6fe6sxusjh48cvzysg53s7e8028nrkkmaekjhnhs70rpk0" + } + ] + }, + { + "pools": [ { "metrics": { - "saturation": 4.932592801287487, + "saturation": 0.691880963554069, "non_myopic_member_rewards": { - "quantity": 817004495764, + "quantity": 588722329228, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14364283, + "quantity": 17292079, "unit": "block" }, "relative_stake": { - "quantity": 74.7, + "quantity": 44.11, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1875-11-06T23:10:30Z", + "epoch_number": 14844 + }, "cost": { - "quantity": 114, + "quantity": 235, "unit": "lovelace" }, "margin": { - "quantity": 54.59, + "quantity": 38.95, "unit": "percent" }, "pledge": { - "quantity": 148, + "quantity": 34, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "\u0000𴆡xZ{\u0012󢉈b\u001c\u0008񳾎\u0013Da󳷣(@󙷽z?🆄#󣟅n򺾟+򙲰\u0002𾽘񞈠UT%XL~\u0001񐙲󧭶\u000f6C+&\u0019񄑰S򡼦󅠀\u001c7UW򷒔\u0015󑣓\u001eh񘕕.\u0018\u0001d񰴦񌋬𞚉OB\u0012k", - "name": "򇢰Z]𾬓" + "homepage": ".󶳺񮓕X", + "name": "\u0015~*A񭄠󶉚n񎔨1}􉫒󧵿E񠌩+R򥮮\u001fy􉝨\u000c񌼵\u001c\u0005✟=8\u001f\u0018i򜙸󃚦󄪥𺠾𠩕 Oz􋂏", + "ticker": "c\\󯇜\u0005N" }, - "id": "pool1xaq8qyyctl56qn6yrzqv9afghmh7ensklyvg5af664qtwk0z5u5" + "id": "pool1vwgxj3cdzfhk5dvx4dyzqy6ez7hcgt8sd5saexjpzyjfcxfjgqz" }, { "metrics": { - "saturation": 1.6373988001692363, + "saturation": 1.1992081705754325, "non_myopic_member_rewards": { - "quantity": 650296394507, + "quantity": 602863086270, "unit": "lovelace" }, "produced_blocks": { - "quantity": 812436, + "quantity": 7847667, "unit": "block" }, "relative_stake": { - "quantity": 7.44, + "quantity": 36.26, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1879-11-03T18:39:23.159971680062Z", - "epoch_number": 1704 + "epoch_start_time": "1886-10-05T08:32:09Z", + "epoch_number": 8033 }, "cost": { - "quantity": 27, + "quantity": 193, "unit": "lovelace" }, "margin": { - "quantity": 36.04, + "quantity": 33.13, "unit": "percent" }, "pledge": { - "quantity": 16, + "quantity": 130, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "qY줏\u00027\u001aX}UN񋲮Ow򶊚񁤀x򏷰\u000f\u000e", + "name": ":h~C\u001d򙡊񞣼P\u0008", + "ticker": "+񌎲XG\u0019", + "description": "ZZ\u0017񛣂P򕁁<񡼏򸉝󃩩i\u0013,,2q𪦷~l𠾿\u0007𗦧" }, - "id": "pool1p78ukrhvhaqnn02muzznmdj8ahe2mmggudkeetj3ajlzylza565" + "id": "pool1yl99yx8zx5zzptd2pxd76fr2jjfum09sm6sw52revxs0ghfjw0u" }, { "metrics": { - "saturation": 3.4066726977107327, + "saturation": 3.875154230234256, "non_myopic_member_rewards": { - "quantity": 328899285790, + "quantity": 937957211197, "unit": "lovelace" }, "produced_blocks": { - "quantity": 13242294, + "quantity": 12058181, "unit": "block" }, "relative_stake": { - "quantity": 48.06, + "quantity": 46.82, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1869-10-27T12:00:00Z", - "epoch_number": 13098 + "epoch_start_time": "1875-12-14T19:05:22Z", + "epoch_number": 26016 }, "cost": { - "quantity": 166, + "quantity": 57, "unit": "lovelace" }, "margin": { - "quantity": 50.19, + "quantity": 14.68, "unit": "percent" }, "pledge": { - "quantity": 239, + "quantity": 60, "unit": "lovelace" }, "delisted": false, - "metadata": { - "homepage": "󫣞񾶳򸱆", - "name": "n򅌅;k\u0019BM\u001drm񢗬\u0006tB:cWa\u0017m\u000eZ򴴟58d$}S", - "ticker": "_<1", - "description": "󃢴S)򁦿\u0012򏳆0󡩷Q𦫲󤑂Q\u0006񯽟\u000c򉡢M걆[\u0004𜪉𔜽G񄠚%򸂎\tA񩋙\t󕺝򮫅wmn򫼖r5\u001c񗁄2V6KrW򣟴\"A񒭉\rb+񊮽\u0006򚵌\u0005\u0019򑎖f􏙺񍐜))r\u0008󝭝w2\u0006\u0002񖼹o8-Z򞛓!\u0017|񟮲𣳃7j㸤𨷌7f񥹗\u00182K\u0002g򹋀,󱑑𕖤򴷮l=\u000e񨉼󯁠+6X󴻠\u00000o򥖓:񙑖\\Pm0񳀰MwB_\u000e.\u0000C\u0019\"Fey@𰂮\u0001.|6{b)M'񞲡1ksxO" - }, - "id": "pool157a49wetm39qdf2vnenfu8h40q4f2ke5nrluam6aqh4vs9g82x4" - } - ], - "last_gc": "1896-11-15T13:00:00Z" - }, - { - "pools": [ + "id": "pool1vztp7etv5c683uvgqu2zqzrnvsr0yfnrmllnum0mhep85u5yw3z" + }, { "metrics": { - "saturation": 0.4936220951208409, + "saturation": 0.4255757590055803, "non_myopic_member_rewards": { - "quantity": 201008616233, + "quantity": 118045909349, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14387937, + "quantity": 10713532, "unit": "block" }, "relative_stake": { - "quantity": 46.78, + "quantity": 49.84, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-10-19T04:32:07Z", - "epoch_number": 11942 + "epoch_start_time": "1883-01-21T02:56:17.246161142213Z", + "epoch_number": 17898 }, "cost": { - "quantity": 52, + "quantity": 255, "unit": "lovelace" }, "margin": { - "quantity": 12.02, + "quantity": 89.15, "unit": "percent" }, "pledge": { - "quantity": 58, + "quantity": 16, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "*G[M'󱃨𸧹z \u0007#S\u0010^OiN]\u0016\u001fZ󼸲\u0014󡴖p|'󢰺\n񣌗Ic", - "name": "~u\u0007EJ𒨲%\u001f\u0017O󶜫򍋮B 񠄧\u0016\u001fLtyC󏍲\u0008\u001c}򗚟򌨐\u0000", - "ticker": "MHPh|i\u0019񗈋*6[򐢼󶃍:>\nw\u0010&񇂯^wG\u0003\u0001\u0004\r\u0014𼲠F󣔴𪟒򘅯K", + "name": "󚻕\u0011\u0010\u001dk5T_󈍑񉮖󩾪򻫩|𜢪V+𓿖\u001dQ\n\n󋷔=z[򵖏W_򜀏eD𡽢򣟑n", + "ticker": "t\u0010񓌰Y\"", + "description": "?c Y\tk\u0015v񸬎6\u0008񔉟Ym򹜒\u000c\u0011WFi򡸡8@󰽸I\u000e%/,\u0016]KJaP\u000b􍛄zh\u00062󥞇n+)񉰧򦑒e]󮔾\u001bD󛃗RH&򧡜,6𐷎\u0007𓕙E򴮀|MJ񫺘<.qX\u0002򽑾#󲵦]򝴼+B@~" }, - "id": "pool1qetp8wu9fsll0j96r3che3xy0hvpknwkuccrakt6elts2vqnyqx" + "id": "pool1mpzx077349ancav40gpxkv7p50jpgw9vgynslvskjduxvsq5p6p" }, { "metrics": { - "saturation": 0.36426749358913324, + "saturation": 2.6497012792291645, "non_myopic_member_rewards": { - "quantity": 50562052473, + "quantity": 213312136400, "unit": "lovelace" }, "produced_blocks": { - "quantity": 20421437, + "quantity": 4079475, "unit": "block" }, "relative_stake": { - "quantity": 52.5, + "quantity": 71.07, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1907-09-05T00:00:00Z", - "epoch_number": 16049 + "epoch_start_time": "1897-01-03T04:00:00Z", + "epoch_number": 26995 }, "cost": { - "quantity": 115, + "quantity": 223, "unit": "lovelace" }, "margin": { - "quantity": 53.09, + "quantity": 48.75, "unit": "percent" }, "pledge": { - "quantity": 222, + "quantity": 108, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "󷵩FL<\u0016d\t\u000e􆥉\u001d󅻬z!񚖦", - "name": "`\u0011𐶩lE𵉸􂴄'\u001b􊍿cr󰞓\u0014\u0000`\u000c󹢳Y[~󧞉\u0000\u0011^b\u0019G򴫀LhsD", - "ticker": "󭰺y󢢮R\u0015", - "description": "5\u001a,x@\u001b\u001c\u000c=񍂃)\u0017L\u0000򺁪\u000f\u001az򧵡0~c]\u0011\u001a\u0008k󬭪lv\u0014\u0010󐟳\u0008\u0001񨿐N<\u0000&󃄋󱈱>", + "ticker": "򵕰H󚧊󊃊", + "description": "DP󨨌𹂂\u0001w􋪤\u0010񘧆𬎼`3h^<􋚛,\u001c籪\u0001􌥺?m(\u0006\u0006𑐕NL𳕄[4񜶣𺃣򡔔j6KBQ񂍋+DE) 󪌀󢁋08x񸎎\u000b\u0005<\u00135q%&򭿰cgR\t󺊞^<4B򰿬󓕌񏄤g𫗘r*`7p)񹘽ӕ\u000b3󊏮n+B%r#񳸰󍣡o=~T>󄑅)y𹕸\rBLB{Q󙐓8]\u000bW󑛓4?o8\u0014}85n\u0015tAp7\u0000\u0008#v\u0008\u0013\u0001ouh򝒅󩤝i6ks򅛚#h\u0003򙣹 \u000bGY\u0003m𨂐N𤃤4򧍓nS򔡑񣒡;f\u000bwsNAw%\u0012YuM\u00103𣢫q񭴻y \u0017v\u0018\u000f_\u0006𵄤*;O!v\u001f\u000f_'\u0007zw񰓚;򢽪S2\u0015>񃩌( f_𽱠\u001c򉽟􊯺0" }, - "id": "pool1vyfn0egr6xxpluryw6npsrlx8c3fcv2gusj5g9rjmut4yg4mhm7" + "id": "pool1qsgy6gf24xuyy2fpvd7mr8csc7hhxh7sjnnm0n8t23q4vjj65e7" }, { "metrics": { - "saturation": 3.9777418304562335, + "saturation": 0.7374172626109726, "non_myopic_member_rewards": { - "quantity": 455951144497, + "quantity": 817199123613, "unit": "lovelace" }, "produced_blocks": { - "quantity": 4135350, + "quantity": 20546335, "unit": "block" }, "relative_stake": { - "quantity": 37.83, + "quantity": 52.9, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1897-12-28T22:07:45Z", - "epoch_number": 23058 + "epoch_start_time": "1860-01-05T14:25:13.311793425408Z", + "epoch_number": 8093 }, "cost": { - "quantity": 222, + "quantity": 110, "unit": "lovelace" }, "margin": { - "quantity": 25.11, + "quantity": 87.18, "unit": "percent" }, "pledge": { - "quantity": 252, + "quantity": 186, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "񉓵`)󲓣򷿗H񌇗\u0017?*0k0򛰋W󂇥\u001c񉁿ip\u0012\u0006M󩿳Ok\u0003(f\u0003^", - "name": "/EUry\u000be\u0003rd3", - "ticker": "!33" + "homepage": "pG3\u0016i';\\񪻩񐜫e\u0017\u0015RZ \u00069\u0006!񌲿O񠲨\u0007񊪳񩉥=\"K- r򆑦8'\u001f󞂽%񭝩#@\u0000`Q􉤕󻘙GW򗶝&\\\u000crs𚑛\u000ca@􆵢\u0003\u0003\n-d\"󙪩;?\nGVQ#+3\u0019lq򎔙1BQ򝤟\u001b\u0015򀬧\n󆕪򚋇&\u001c[a6@8", + "name": "󫒽.9m𧔜/xS񷘯3\u0007w򺄚v\u001bꡨ񔓣f;20\u0007U&;D`9*!DF", + "ticker": "w',P\u001a", + "description": "\u0006XI񻍵\u001c𥼠󊰝7A򲢨$񱃲mJ縲9n𓴧\u00079$\neH򗁩󑗬q5ze\u0014X\"$Kbp򆰘\u0014{\u000c?\u0012HON󼕷mRP\u0018p&+f4n\u001d\u001c\u0007QE򴡨kHn󎟨gu\u0018𽕶\u001b6򶨓𼛏v?J.\u001203\u0006RK\u00181G򘁑񉙁7P F'󦎓E\u0017\u0001w\u0017񅜷C\u001a\u001a0y>;\u0006s\u000e2𼝹*\u001a\u0017d񋯲q𭇨m2+l\u0003+PTa\ng󽃏\u000fB4𹗻󟡄\u0000we󅢾\u0004񺚆h񱾍e󚦶󢴟\u001e\u0008L\u0011\r1t򿴚𺄯񹤸m󃐐\u000b蜥K5򌀤\r~󦕒d󛛹k񩔣bGn\u0001y󌧰\u000cpe]󷒼W񲧗@D򜓇P\u0000'WM\u0014\u000f%u,\u001a𐾛r,o\u0003^_\u0008,\u001a\u0010\u0010\u0010E\u0000A2N񪤕[t \u0014" }, - "id": "pool1mna64rzydwudc7ch6scklgdu57aq6ncqy4mw02cy0jmhuw75cp5" + "id": "pool1juugypdg6xperwrvuexvu9v0gghhf70dg5k66pnzwzxques8krz" }, { "metrics": { - "saturation": 1.112238849198968, + "saturation": 4.039542462022454, "non_myopic_member_rewards": { - "quantity": 2644904152, + "quantity": 160541820718, "unit": "lovelace" }, "produced_blocks": { - "quantity": 14777052, + "quantity": 11086323, "unit": "block" }, "relative_stake": { - "quantity": 79.6, + "quantity": 86.32, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1877-11-05T01:00:00Z", + "epoch_number": 31663 + }, "cost": { - "quantity": 247, + "quantity": 47, "unit": "lovelace" }, "margin": { - "quantity": 9.66, + "quantity": 20.66, "unit": "percent" }, "pledge": { - "quantity": 200, + "quantity": 211, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": "\u0000yoR򢿴,󈷋z.􉚙􈝣@Uc񎋜O\u0008E𞙀T𹚢\u001ec𵂧=\u001e򁖿]*e\u0010Zᷖ+A𳼗𘺐d<𖨱G}Y\u0001f\u0008󻢾@\u0001򂆁j?\r򌺍|%K\u0014\u0007m\\W󮑋#񈈵\u0004%\u000e\u0017w\tif𹦑񻻂iED|e\rCi", - "name": "󧜖!񕫮A)򽓻\u0000\u0001񒙶򄮨\"0\r\u001d1|⫿V񥖗p;[|ap+Bm4h\u0014𻇱򑨭󘢄\u0011PK򵲋C", - "ticker": "h\u000b9\u0014", - "description": " y\u0013\u0008򱰉䭫N󼸓\u0004\u001al{W\u0007&􎆙󎊫x\u001b񀇟lV;\u0011񻖂𧵔9𲿟󭾟󀃜z~9-.z\u000e񯪃\u000cE򫚤G\u0002𲥜\u0019\u001a\u0016򨨣\u0008(񦀾쾫Vr𫔓\u0005\u0018Dty\u000fH\n5H6􄵎e\u001b\u000f󩳊TUxrH2\u001a9\r\u001dFE𳯲񚲖>U<\t#\u001dT\u0010M\u0007\\𰟣򗈧?􎦥^f\u001d𳻣񇎆#󎃻򳏟)qxV\u001d<-򘩸q󠻮U񴖥\n'M󩮏\u000bp񼉈'`\u000fg';񖌿>󔛬񥁱񧅖\u0019+𣺱\u000f㎛𯭘򬾌X\u001fE#yT#!=懄󃨤O𷕀񡽷l\\񪪢\u0012k򩺵:\u0006\\tb9B\rRaO򿞎s񢚏𕴌9󿞭(􊘢n󛖐zh\u001c2b􂳡'\u0016J򫆖]Q>𦍛F_[\u0007L\u0017\u001d񺂗Z>u\"M򫃭򘹣󤯢D𞥹󸧳3F;򔭄,\u0016>f򥴪%aꢪE𛋗􄽋񢿫􋊔U/-\u001c񚺆􄓹x|" - }, - "id": "pool1qksngt8tchl56scdf8w4yugu3q8jy8t0exdpnkyl3z78xjkcz6v" + "delisted": false, + "id": "pool104hxhk3ywv22ffjkx7t77a8zccd3dzvyrdzfkt930lueg3rhwvk" }, { "metrics": { - "saturation": 0.8178521233955544, + "saturation": 0.6933620619207898, "non_myopic_member_rewards": { - "quantity": 127880870663, + "quantity": 46482595259, "unit": "lovelace" }, "produced_blocks": { - "quantity": 9178575, + "quantity": 16804772, "unit": "block" }, "relative_stake": { - "quantity": 49.39, + "quantity": 26.55, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1886-03-05T00:42:36.100954952453Z", + "epoch_number": 19824 + }, "cost": { - "quantity": 17, + "quantity": 240, "unit": "lovelace" }, "margin": { - "quantity": 16.09, + "quantity": 33.78, "unit": "percent" }, "pledge": { - "quantity": 224, + "quantity": 157, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "򖍖\u0019񼬕dBR.E򜙞񫒹zh\u0017\u001b\u0006]z4-(𐒭Da:򭶶J񠔥\u0003RAz*\u0001\u0001\u0004Dj}=;򦭊U\u001eO\u001fmZ󢇀Q򌶽􄲍g+\u0013V\u0018:", - "name": "򓄲񵨐|78=V𻷫\u001fq\u000b%\u0011%P8򙍇(0\t\u0011s}f_𰋝\u0003\u001auLz\u0004\u0007T숿", - "ticker": "񶾤񚢝55D", - "description": "񾐗IQ󺠢b\u0015L&\u0004%8J𖄯Y\n𠕤\u0018\t2򎄄V𽸒\u0008󂿔𡺽\u001f񑱌{!C{\u001aX򫮫񘸦񙄎Y򎲴=\u0014'=X^\u000c񳊻󬭎Z7#D򳰭\u000c􏔷qs𘹅wG𪿥尢Zi񄹻\u001e#꽤u1\u001aY>xr4x#𚟰󈡊󁩑o\u00194\u0017'򯚯z\u0011񷨽\u0011R򄛉񹼱\u0003Ah\u001d񋈼v󳺚\u0004!򪏚 5;e&_s󼙞D\u0019\u0014xOyG^󝥼*󚸳:GM~D 񯞋򒛩h𠊭{\u0019\u0011k𸷕𣼹 c#M\u0000\u0007&r򙤟\u0017\u000f-򕛓!\nTEX\u0010󷨩퇱l񚰾򧖚􏤓L񆵯*򼎹\\o򎚜v[\u0001\u0000\u0000\u0008~~?翢\u0006\u000f\u001dFsW򋂟94BW\u0004\u000c𡹤qh\u001f󟖅V=L^+k񉖈N򀺎" + "homepage": "(񳛩񄴻񓣣d񼮶Z򲬸}\u0004񁵤l<\u0015HC", + "name": "QSry󇜡5u𐫨O\n}MH񪉫L򇻓9򣊪xf󃭱򠦩󆊕\u0007󊇣H񡶵a/\u0014O`򮾦IP", + "ticker": "2\re", + "description": "\t\u001f򐔉UvM-`>񔁵\trU􍅳󙿫\u001fL2\nN#󖒶A?6\u0019\u0013*\u001f=<𣂩񻇼񆐤𻢈$𕌠PK񼠴`F󊸒򓏐Mnf 󱤝\t󻄀|򍽶I\u001f]no𭑥9\u001cd+F&o2 G𐭷u2\u001a򳬍\u0007\u0013󥡷\u00151\u001fm򐙳򚒒Q\u001e#񸟄򲽮^񴼓xG񝼎\\\u0001\u001f&W񉐔\u000ewBV󫐲񑾮AG\"t$򝢏󿀿\u000f'\u0007󐵐-\\.D򼯄𾎂\u001d򉙞X𰚖󋠘N򓳏fN񑬹C\u0012y󣑂M\u0003񝱗򸜼M񻋯]zjn𲼚}y󀟡m" }, - "id": "pool1gwuzl6ss4ydphqcdj788s5z86e7n7z05w39wp2ul7nvqxd84ngw" + "id": "pool1mz367408wz5wl8hzmp3k9ykn92dqc2rtugf5v6mh0pnw2dpymeh" }, { "metrics": { - "saturation": 4.7244278549111725, + "saturation": 1.6856943013561154, "non_myopic_member_rewards": { - "quantity": 23473018926, + "quantity": 153963422774, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8742636, + "quantity": 8170632, "unit": "block" }, "relative_stake": { - "quantity": 29.4, + "quantity": 56.18, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1876-04-12T07:08:04.476536593957Z", - "epoch_number": 4387 + "epoch_start_time": "1886-11-29T16:00:23Z", + "epoch_number": 21825 }, "cost": { - "quantity": 123, + "quantity": 213, "unit": "lovelace" }, "margin": { - "quantity": 21.3, + "quantity": 64.71, "unit": "percent" }, "pledge": { - "quantity": 27, + "quantity": 216, "unit": "lovelace" }, "delisted": true, - "metadata": { - "homepage": "SFI\r񡰝0W\u0016,ﷰ]𛃠.\u0019\u000b񭜤0O\u0002\u0004񧗽NxB􃼸\u0000񃒊e)w󛱄􈬷~\u0016$\u0000#𷑀𐦲;𵑞,𙡓!\u001c􄠜𺝙𠻍tLI\u0018񛕢w򨢽6>6D3\\\u000e\u0003\n\u0012󍡹\u001d", - "name": "B򀡍ὤM𲐄_bG^|󓮊'\u0015\\ASb󊛿󫞶𳃮!򳋔", - "ticker": "󁔀j􂮍", - "description": "3N" - }, - "id": "pool1k72029fhh36rjhssq5sk9qxh30rpxhyee4zf0c5fsy0aukjsqve" + "id": "pool1zkdtu6zmntarts7dkgfkt9czjdclv8r597asghadfh0qs53dqna" }, { "metrics": { - "saturation": 3.0755637913375775, + "saturation": 4.286369284703593, "non_myopic_member_rewards": { - "quantity": 317956609245, + "quantity": 645057503258, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15752925, + "quantity": 10451778, "unit": "block" }, "relative_stake": { - "quantity": 11.8, + "quantity": 10.84, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1901-02-25T10:57:12.511683556893Z", - "epoch_number": 1681 - }, "cost": { - "quantity": 50, + "quantity": 240, "unit": "lovelace" }, "margin": { - "quantity": 20.8, + "quantity": 15.19, "unit": "percent" }, "pledge": { - "quantity": 142, + "quantity": 109, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "򾜼m򌳕\u001cOlꠂ򀤀", - "name": "z򊅰9!\r\u00185񯚒D򲔩􇌘6󍾣5򀄼񳍏`@tax\\\u00157|\u0001\u001cT𸧻q\u001fIA񈪔ca񾢽", - "ticker": "9\r󭀥\u001f򫧹", - "description": "キ\\\u0017I湥򶸳y:~8򱫌|\u0018$񋣦\"9󏿱Q\u0011񰇆\"𡒂򦅁􀎄\u0005yE)񢢕k{򣔫򨴭" + "homepage": "F", + "name": "\u0017|\u0002&y\t<󆦌\u0006,d򶋒'", + "ticker": "򶍈{nr", + "description": "򳶒􊥻XiE񛊹NO𲊲[6𵱻Bv\t𜬠J󜁈p7@󝖖@𺆊\r񁻢A􂨾=\u000c󽞘𒋉|\u0014oQ\u0013RR𥧙Kd}\u0002񉬣󞼵󺀍\\cez\u0013=v cG)󡬎\u0015g./񍐂=/R\u0003m(\u0011YS\u0013󪀗I\u0005ﶉ򖈬S\u0015j򅎜}EW񑊸𳐑\u0018󘤑󙇵\u001d\u001d\\%{XJc𚽤MQKJd*)\u0010=?𧆡{ht1J񎽑㬬/濗\u001bo\u0007J򤭷!򸴑\u000e𰣟󦰤^R5g񰅤\\񥩝򖙐𑦆?=𖫴LM񊗏򴧶j);󫡀\u000eD򌅒󅕺\u0012>h\r\u0010񄠧&UAz6h񛝫🢀'W8\u0013laW󕜵񲃨z򮌠@O򫯊\\\u000f􇽊򊢔pYx?!;\"󞙉򲌟\u001b\u001d򨛼;" }, - "id": "pool1l8xlgsyr66wzv0ntxf7m6jxl4rkrpatwl6vfs7tmrak4gduqr7h" + "id": "pool1ye7gpx9pqwp6tshrr7yrftd63qwf3pwvnsc6r3d64nc3g97f3aw" }, { "metrics": { - "saturation": 2.915926943204345, + "saturation": 4.0338193447253925, "non_myopic_member_rewards": { - "quantity": 201683622903, + "quantity": 33891646032, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22022634, + "quantity": 16265144, "unit": "block" }, "relative_stake": { - "quantity": 80.47, + "quantity": 76.4, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1885-01-08T04:50:43.43176821759Z", - "epoch_number": 6865 + "epoch_start_time": "1861-09-27T07:02:06.901318667399Z", + "epoch_number": 24607 }, "cost": { - "quantity": 161, + "quantity": 118, "unit": "lovelace" }, "margin": { - "quantity": 57.32, + "quantity": 54.92, "unit": "percent" }, "pledge": { - "quantity": 193, + "quantity": 129, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "񮹶G*u𻮏k$6f\u0007\nr.HG\u001f,񟛣󠠵R\u0011}<󝙌\u0005[-F[񁄾:򩶱󼬛F\u0010\u001ep2\u001e*򏫫.\"򩎲cz񀼓k򉝺6\u0007.񭳾=\u0019񵎮񫿤󶥄We󣖰Ww4=\u0001󓰍*f:wnm}򩉢r2񛫅3𱁙󎸪nH󸋞𛞸3𼛿S\u0016\u001f򏫫\u0011#鬊G\t", - "name": "󉪽\n\u001a15󹉺{q񕇝@󒻗󙷡1", - "ticker": "\u0000H3{", - "description": "X򝸩m\t꾟\u0007+jѠ?WR񠇻􂉺:_򓏅𤕖V\u000c񁓳DL'\u00169󒨮*f󳅋,򆃜\u0003MqC8\u0001<1O?\u0000w\u0013㏭D򈶌].𨈰򽟽\u001e򢧧k񊏠s񂻞𤮖Q􈶆&w\u0017G񦆉M.i\u0010Iw'tO>~WZ\u0018񫕲𾄷𜱒H0\nJfEO\u000c𮔡6􌠎d\u0000]d\u0008S2L\u0007R󨗆4iLke\u001fP:򬶷\u0004𖗠񐵕Y\u000e🧆{~\u0005󕗁e=\u0019\u0011B\u00163O!S D5\u0004k*v\u0016ED򨐛a\u00199_nh~JKB񾑒yIMo\u0016\u0002\u0000򉘿𚼺\u0005p" + "homepage": "u􆾸B\u0018>g򼲭 [h\u0007vN@j񐋸j򾾞򳛨\t󏨏7*^Z3=\u000cn1\u001bM󍆈#ഏ", + "name": "񤀫QZ_\n򧻶򳆝BP5w@!!Scx񿐼󱦦2󁲊6T𡖟\u0016\u0004\u0014\u0000\u0000~M\u001d\u000f\rvZ\u001a񴋟\u0006񋚜p𽅎\u00183o\u000f\u001f򽍑?N2F󵟚.ss\u0011uZ\\q4񏥲\u0015񖷫Ur\u0016\u0010#\u0016V\u001c9xvE6\"F/񌒃C򑠘U\t\u0010rtv򗆍+p42󡆡0\u0005e򦶫\u000f-񙺥\u0012e$" + }, + "id": "pool1h8t5q89l36z6hyluym0qw7vc9p7zyjkcyrdxqqcuu8dx2xfajh6" }, { "metrics": { - "saturation": 1.9328100160711492, + "saturation": 1.130831531646002, "non_myopic_member_rewards": { - "quantity": 637464254202, + "quantity": 299607698651, "unit": "lovelace" }, "produced_blocks": { - "quantity": 11845963, + "quantity": 3991299, "unit": "block" }, "relative_stake": { - "quantity": 90.04, + "quantity": 92.73, "unit": "percent" } }, + "retirement": { + "epoch_start_time": "1892-07-16T14:00:00Z", + "epoch_number": 30476 + }, "cost": { - "quantity": 119, + "quantity": 90, "unit": "lovelace" }, "margin": { - "quantity": 63.26, + "quantity": 25.2, "unit": "percent" }, "pledge": { - "quantity": 54, + "quantity": 11, "unit": "lovelace" }, "delisted": true, "metadata": { - "homepage": "\u0014񵳹\u0016", - "name": "󝳀4d/g񝱆:\u0013\u0000񽘤񧫘򏁡󦏦\u0017z𢵰,\u0007򊏼%c\"񏕛M", - "ticker": "񊃶󻌓2", - "description": "𜜯$k{򀽻$j\u0006򓦔^\u001b\u0007Jd򄤁v𱭩򠭹-\u0008񢦌%Oh\u001cC򦶏3򠘭I󵽨#Z򂠶%&C^􂸕wh񡶚𬯱󳖟DHh󉌾\u0003h(t񱛓𴍦zp򡃡\u0010\u000e\\\u0019%\u0018񠆬4m')0,Ad\"\u0015򣺾J_U\u000b񽻘C1\u0001\u0011謠1Ad\u0014\n򓓨񱧄5g'=3L򼙐B!\u0006\u001b񺼨𨮫񄵛>%L0?]\u000e" + "homepage": "򊗓[}'\u0004\n\u0008\u001a\u001c\u0015MV\u0007󓢋<-A~u󈘝񫞌-\u000b\u001bE\u0017~Z", + "name": "Q\u0008󾕉\\`l0񶇻\u000f\u0019X񨽴;\u000b6\u001c򪢶򊷈\u00007򯔽Q?p񃟐c򱷱\u00164Fn2H", + "ticker": "\u0015D&", + "description": "Y񣛎>gF򈇟C-\u00171\u0006\u001dy\t7\u0000v򾄊s􅊩\"򩅠\u001b\u0019P񅸥;񔄬\u0002򬦺v򴭔\u0007D\n\u0010Z*+\u0019񧭖񾓀/\u0016x򖬻􁬇Z୯򘢤񎖿\u0004N5򥿾'\u0019􋺏򓵹%򛫭\n{󢴷򹙋~;N󫣴q𳌪Slt]gt򿔄􏸰p_\u0002𚼍񬋥\u0002BqC(\u001bW~G+6𤼃\u0000G񒐁AV!\\?r𹭦􈙾򲞺\u0001\u0003sU򴧜\r𮜳򼟰\u001ak" }, - "id": "pool13pfz34vndhkm0a00rea3wmvfzfjp4lv8ppusr64wyn5vjnxm8p5" - }, + "id": "pool1dds68f26efjjhpzz4v4y5j055cznf2g372anu9cjl6fc676y34d" + } + ], + "gc_status": { + "status": "has_run", + "last_run": "1905-11-04T08:00:00Z" + } + }, + { + "pools": [ { "metrics": { - "saturation": 4.042553549469356, + "saturation": 0.672441549518279, "non_myopic_member_rewards": { - "quantity": 302468250092, + "quantity": 343004378127, "unit": "lovelace" }, "produced_blocks": { - "quantity": 5144767, + "quantity": 6772558, "unit": "block" }, "relative_stake": { - "quantity": 90.99, + "quantity": 21.39, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-02-11T05:44:47Z", - "epoch_number": 30483 + "epoch_start_time": "1862-09-10T20:00:00Z", + "epoch_number": 15058 }, "cost": { - "quantity": 173, + "quantity": 234, "unit": "lovelace" }, "margin": { - "quantity": 86.12, + "quantity": 94.5, "unit": "percent" }, "pledge": { - "quantity": 201, + "quantity": 143, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "􂬶\u001e=񮋎=D󦖗)\u001e𓦦񷞂\u001d񷧈\t\u0012򝽠񵻜$Fx:򞚨򾀘\u0011Jwq𹅅󤽳s􀰁􂳲}%\u0016O\u0008\u0016󱖱\u000f6󠻻F𘑫\u000c,", - "name": "K\u0007񈥡LG7򍚶Nb𽷤\u0019𓼉\u001aG)#􍿀𼌂뀽#'5$*𮃱񚱨\t󹅱mL󅐹G]$y5e𩛩K񘨦󑟣e?򃃢W", - "ticker": "\\&Z", - "description": "򯆨񷵢#𮊵z\"􇎡{\u001ey󲹓:gj8\u0011󍚤j\"\u0001=4so|\u0007v񚀣W\u000fx\u000b7򙻴f\u0001\u001f\u001d=񋃴ZU𮞨s򬇂#M\u0008񇡻󻃇,V~􍮩\u0002𬝽󖌥-p\u0006𷀑񒗥򛌪O.󑥺4񁰨^l\u000f𯋽\u0004\"Xk\u0008Mc<}󮽑󪌓񻛥󞷏9򽯵+-򄗇|\u0000T20򪥉%\\L\u000b𫛚\u001b~V(/򌔳7򭯾\u001c\u001e+\u0003\u0007w/񼳭k񞃛?𓕬%yR󓟫?h?WOoWi\u000e񜬓\u0014y󑟸>r\u001a𓰻p<󷣽\u0019􋃝\u000b\u0015e򗛒𢶈:󋫗𽡺-򸎈m\u000eM򡜜𠗥r񪭊𫂱tN\u0003jI\u0019\u0018\"%cV_\u0007#\u0011f\u001d\u0008\u0003𐘘\u00039񴋿`.ri.8𓮱\u0005\u0010 Z\u0008J􅮁+L1JT񅞽\u000b󭹁Qz񨪧)KY@ZS" + "homepage": "Y2 b\u0013\u0008<𑩣󧨿X\\N2򮳙FiCY?[[n+m!_\"1򂕗/w🜑", + "name": "𭎛\u0019򔢤A`'\u000f", + "ticker": "\u0014񜢴]", + "description": "\u0017\u0003\r򜭔Z\u0004PX\u0005򭇝;\u0001򰸮\u001fW򐢑󆭣u1󎒺\u0000G/2x񑇌k)g򬺫B򜷪\u000f񲟢N?YR\n/\n񴵲󪕫񩌯M\u000f\u0014bp_𛰠\u0004񘔿a𭢎\u000e\\𴩐u󬄢pF𙲧s\u0006\tB𫢯𭃍*6r󲑬K7\u0019񨠍VyB" }, - "id": "pool19eyy3866hdgq8262rrrpdrzlqpnmfh6au2g4vwelcldsqjhdcf6" + "id": "pool1ppdt6kucpe7f0lcwjy4ps9r4aec7mjtfam4yqnyr3y0ry798qcw" }, { "metrics": { - "saturation": 3.16992089312453, + "saturation": 1.118889508765157, "non_myopic_member_rewards": { - "quantity": 623685244280, + "quantity": 921795084094, "unit": "lovelace" }, "produced_blocks": { - "quantity": 12193727, + "quantity": 19289061, "unit": "block" }, "relative_stake": { - "quantity": 34.92, + "quantity": 22.34, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1879-09-28T18:00:00Z", - "epoch_number": 12274 + "epoch_start_time": "1893-02-08T09:00:00Z", + "epoch_number": 22338 }, "cost": { - "quantity": 72, + "quantity": 127, "unit": "lovelace" }, "margin": { - "quantity": 63.37, + "quantity": 49.52, "unit": "percent" }, "pledge": { - "quantity": 7, + "quantity": 1, "unit": "lovelace" }, "delisted": false, "metadata": { - "homepage": "\u001e;kdu\u0019n򱲒򻐟򆞦\u0002zEz󺬓Gl->𯊆v\u000fVYO:􉳼", - "name": ".,0𠉣9򴳆\u001cE4TK;Q_:g1𧰍𵘗\u0018D|\u0018󌜑X𚪋{6\n\u0012񎹌\u0010𖖋wt򁛲\t`P5\\GNO򙸭0=UFr񸷁V󰾾v𱤅\u0006#\u0019A򩽳\u001dE󒈈h\u0002\u0016񶻜\u0010\n\tz򂆛e𙯉)񣽗_𲐛@\u0006m.򙙰\u000c]\u0003\u0002𺬓&󨖍\t0L6PC\u000eYSh\u001a񿎭Rd\u0014𤪇E򐳶򃴹!}\tJ\u000e􌖮&8󃘢񑋭=񧷲o)RJ𤡺\\񑅱\u0000-X1ji)^\u0014Jj`c頯\u0002\t(N󮱜D-[񃾓򺎖y\u0010z~\u0019v􂻟򰻘󽚣񴌧y:%?\taB&\u000fI𺬝\u0012[󭹤Cb\u0019󍰝\u000e󀿐򋯽󂗸;R|ZYpX\u001c𮅻\"V򽘋e\u001d򧽷]𡟭][򧚩o|;00򲐎\u0002W&\u0014Z򃐨񬖝\u00000?\u001ca񶱍9\u0006IkV򉀀.\u001cd򾈳" }, - "id": "pool1r0yvnu7x8m935rr3mm2gtxn62m769v6t72l429y55hmkszr8tq8" + "id": "pool1rglfv2cugyz4xayvf4352s4s4glntpdrxajh0hr89szu77zk0m2" }, { "metrics": { - "saturation": 2.1650399305539327, + "saturation": 1.0048748412571578, "non_myopic_member_rewards": { - "quantity": 842861279871, + "quantity": 299965296800, "unit": "lovelace" }, "produced_blocks": { - "quantity": 22239914, + "quantity": 14676602, "unit": "block" }, "relative_stake": { - "quantity": 61.5, + "quantity": 57.25, "unit": "percent" } }, "cost": { - "quantity": 149, + "quantity": 239, "unit": "lovelace" }, "margin": { - "quantity": 55.64, + "quantity": 2.26, "unit": "percent" }, "pledge": { - "quantity": 141, + "quantity": 91, "unit": "lovelace" }, - "delisted": false, + "delisted": true, "metadata": { - "homepage": "𫍋\n٥𷲂񵨮\u0014񠖢\u001b_PkAT-\u00190\u0003򆷨\u0004JvG𜕍", - "name": "G񻧵AC𮎙\u000c$\\\u001a_\u0019_𸳷-8E@O?򕐀\u0017Y\u0005\u0004񟺣g򋳧", - "ticker": "lAx", - "description": "󜭧󧋷JL+@N򜀋$\u0010\u0005X򜝻󆧃,q\u0013򟼘񁧢K󋾺" + "homepage": "OTb𪢾򴠇Ui!򜰋G𐍈v}\u0019&._\u0014(𗋆F򙋺v{;𦼏=bz\u0011EZw󅂜N򩈫𻥿򪖞88Y 󒷬%𓽾\u00045l;v𸴨q0\u0012񂕢񌽧'9\r\nt1\u000c𨖆\u000e[񵚦񆫹\u0013󊱟AN\u001c Wr\\󓽭Fᣵ񳹧1", + "name": ",\u0001+򶷔7\u0014s򠣦g򁭗I\u0002🌌?񋋝󑿍z~\u000c\\A񀑶wM-E|g3\u000b#", + "ticker": "󌇕(\u000bv=", + "description": "\u0000)]\u000e\u0012O\u0001q+%h\u001f<Თ\u0016\"VQ󿾳򑂤f󠋙F\u001dEM񴅲񱡿𙑙e𷶙b򕻖c)c󮮙,8𘘵,򇪁e8xZut*𰈌\",󸴺-\u0007@f\u0019')%󕟇򬷭󛨔\u001e瘔\u001f񖪝񽑪r)\u0007dy:o\u0012󎲖)\u0003|k󵻝3\u001c𞤐Eo)1񔏈󣨲kC򓄟2iR$\u0016+=M񕬃mpQ\u001biZ񉹶򛂑Ib񠻲򾜫" }, - "id": "pool14x8k2n9ycl30rh6nlmgta27tcuda574dr25qd7nvn0v77rf24m7" + "id": "pool1jgcwmrtzh3elkf6rh3lkcjcawdfnavw20lw9pw7p5spfc3ce8lv" }, { "metrics": { - "saturation": 4.986941568491282, + "saturation": 1.6136279626551708, "non_myopic_member_rewards": { - "quantity": 657468701457, + "quantity": 35368562973, "unit": "lovelace" }, "produced_blocks": { - "quantity": 581955, + "quantity": 13046696, "unit": "block" }, "relative_stake": { - "quantity": 49.03, + "quantity": 25.38, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1884-10-16T13:00:00Z", - "epoch_number": 12004 - }, "cost": { - "quantity": 32, + "quantity": 244, "unit": "lovelace" }, "margin": { - "quantity": 79.05, + "quantity": 53.52, "unit": "percent" }, "pledge": { - "quantity": 89, + "quantity": 138, "unit": "lovelace" }, "delisted": false, - "id": "pool16p98ejczs8ywkr6g4dhh207p2t7qjfk3gmyjr6whrq5cc0fx9qs" + "id": "pool1eudlkka0u0vjzdaynmj2fuqzadcj7mf57m39s847v4mlq7fk4t7" }, { "metrics": { - "saturation": 2.2298193403629596, + "saturation": 2.755618733425398, "non_myopic_member_rewards": { - "quantity": 423727084500, + "quantity": 350195306150, "unit": "lovelace" }, "produced_blocks": { - "quantity": 1343434, + "quantity": 18398880, "unit": "block" }, "relative_stake": { - "quantity": 59.73, + "quantity": 16.34, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1902-11-27T10:00:00Z", - "epoch_number": 28585 + "epoch_start_time": "1883-11-11T23:15:40.649748813745Z", + "epoch_number": 13455 }, "cost": { - "quantity": 159, + "quantity": 25, "unit": "lovelace" }, "margin": { - "quantity": 87.79, + "quantity": 41.18, "unit": "percent" }, "pledge": { - "quantity": 12, + "quantity": 3, "unit": "lovelace" }, - "delisted": true, + "delisted": false, "metadata": { - "homepage": "b\u001b0􁪥9򤢸!z4󌹉w񨘙:a\u0010!j񕆫QJU\\]񔝄𘊖\u0011\"򷳁򁣵+_G\u0000\u0016o􅅪lK9I\u0019򰆩N\u0007򲡩6&N7TL8N󹜫7򌋋 o$<񇺮㝉\u000fa\t", - "name": "񈠀%\u0007\u001b𘄭!%\u0016\u0014n*~EUU𛃡\u001b\u001a-񥡹o*𮖶󖧍T\u0008/(:H\u001c1𧓄xev𤻚򱌩3񷥇\u001b񞲇c%s", - "ticker": "􇎦񰩑P", - "description": "򹪱񗀇uHg\u001a3\u0017Yg+򆹌ri\u0014ZW􍈢#|\u0010F\u0019񮣞O탚]I{\ra0%K!e񂥘;\u0012K񓲄򾞻\u00065 􁻬*<'mu􄠖\u0012񩇀`鲯󹓼򆒥\n򟐳b\n\u0003񺺆\rap򺏕8&񐮜?S[\u0005LZ򡧓󉩙]Z0\u0004%" + "homepage": "\u0008\n\u0000I7\u001d?f\u0013񁮱Z񊬿\\j0\u0016g=𕾺Cp\u00152\u001eY\u0004\u0008\"V\n󎉨J+\u0011󫩧8$ 򟻃O\nv\u0011󭶗񗡆񷛬\u001b󛐚j\u0000rpMS\u000bm eYDv𙵆^4\u0001", + "name": "\u0002񗙝\u000b2\u0013𠔋", + "ticker": "򄰞)c", + "description": "l[󕦷򳖈gl􋉖Uv\u0018񤂆\u001b5`]\u000b򜅎-𓵺󑏊oY㴟S\u000c󉈑\u0014&\u0006&{0򄆽yc񶾖t皋󱱭k򄢃r#\u0002\u0003\u0002\u001a4/򺜙񘶶(\u0008𘳕6\u001c𗹟dE\u000f󹓴 %駓{󝍞i\u0011񐭅\u000eVA\u001er󥸄\u0013C𾖏ok𞝈>f\u000f`򘜬\u001bc\u0005\u001c󬊜\u000e󛃐U\u0005\u000c\u0007,򢌢v'4񨘗\u000c/\u0001F\u0004y_e/rA򠑃7\u0001\u0000󋀓\u0013𔼡8m櫒⑓𯊯򥦁&J󔡱\u0016\u0013]qqn>𾗩7\u0016𻝟\r?a%y A\u0002XO\n?󔊰򇽅\u000f+\u0016\tDA\th񓙓NrQ󦒽󭛟\u0006\u0001󜓙󴓀D3KV\u0004/񑩉\u0018x𳡶\u0019󬽍z񂨼" }, - "id": "pool13unhug9r0gz3rgecm36dz4jq9mrmc297c3k0jvhyx307vn9tqrk" + "id": "pool1ap3d4d0zekkg927gra5mjwpw47ymg7zvvr3hx28y66ldwatahpr" } ], - "last_gc": "1887-07-24T04:10:51.900849182095Z" + "gc_status": { + "status": "not_started" + } } ] } \ No newline at end of file diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index 4e905ca4aad..b75bf23fb30 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -1451,12 +1451,12 @@ prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do prop = do defGCTime <- run $ atomically readLastMetadataGC assertWith - "Reading sync time from empty db returns start of unix epoch" - (defGCTime == fromIntegral @Int 0) + "Reading sync time from empty db returns Nothing" + (defGCTime == Nothing) run $ atomically $ putLastMetadataGC posixTime time <- run $ atomically readLastMetadataGC assertWith "Setting sync time and reading afterwards works" - (time == posixTime) + (time == Just posixTime) prop_delistPools :: DBLayer IO @@ -1553,5 +1553,5 @@ instance Arbitrary BlockHeader where instance Arbitrary POSIXTime where arbitrary = do - Positive int <- arbitrary @(Positive Int) + NonNegative int <- arbitrary @(NonNegative Int) pure (fromIntegral int) diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 10fc42c0a86..ac395bf20ea 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -40,6 +40,8 @@ import Cardano.Mnemonic , entropyToMnemonic , mkEntropy ) +import Cardano.Pool.Metadata + ( SMASHPoolId (..) ) import Cardano.Wallet.Api ( Api ) import Cardano.Wallet.Api.Types @@ -157,6 +159,7 @@ import Cardano.Wallet.Primitive.Types , EpochNo (..) , HistogramBar (..) , PoolId (..) + , PoolMetadataGCStatus (..) , PoolMetadataSource , PoolOwner (..) , Settings @@ -251,6 +254,8 @@ import Data.Text.Class ( FromText (..), TextDecodingError (..), ToText (..) ) import Data.Time.Clock ( NominalDiffTime ) +import Data.Time.Clock.POSIX + ( utcTimeToPOSIXSeconds ) import Data.Word ( Word32, Word8 ) import Data.Word.Odd @@ -392,6 +397,7 @@ spec = do jsonRoundtripAndGolden $ Proxy @SomeByronWalletPostData jsonRoundtripAndGolden $ Proxy @ByronWalletFromXPrvPostData jsonRoundtripAndGolden $ Proxy @WalletPutData + jsonRoundtripAndGolden $ Proxy @SMASHPoolId jsonRoundtripAndGolden $ Proxy @SettingsPutData jsonRoundtripAndGolden $ Proxy @WalletPutPassphraseData jsonRoundtripAndGolden $ Proxy @ByronWalletPutPassphraseData @@ -1183,9 +1189,30 @@ instance Arbitrary ApiTxId where instance Arbitrary AddressPoolGap where arbitrary = arbitraryBoundedEnum +instance Arbitrary NominalDiffTime where + arbitrary = fmap utcTimeToPOSIXSeconds genUniformTime + instance Arbitrary Iso8601Time where arbitrary = Iso8601Time <$> genUniformTime +instance Arbitrary SMASHPoolId where + arbitrary = elements $ fmap SMASHPoolId + ["eb7832cb137b6d20ee2c3f4892d4938a734326ca18122f0d21e5f587" + ,"3d9aab7ac059512c948fe8bb773aad076c5e8b3941fa4fbcdff34597" + ,"8b5060d437571746f57cbd27dab89eb8e6045a554919dc472748920c" + ,"74d3e2c4d640dd181def5a5b6b22308b5a835b98ccfb7143d52bd150" + ,"a6906f8ecfcc437375bd8763120ac5c96ae4796c8f78f549193e7b36" + ,"5ee7591bf30eaa4f5dce70b4a676eb02d5be8012d188f04fe3beffb0" + ,"961d329fba1807eef89db767ba405aec0c5426501c6b1df20f5c0995" + ,"ff5b4952dd7734f07e4905dea64fa230fb75f7b2d603d154d9ff1d43" + ,"50927e8ecd44cb2d4302af9c5ae9a77c8ad7d8be331a24c4e5406f82" + ,"81017236ed16380bb96bd02bbd452541f3e5694e14196f65e37ce502" + ] + +instance Arbitrary PoolMetadataGCStatus where + arbitrary = genericArbitrary + shrink = genericShrink + instance Arbitrary SortOrder where arbitrary = arbitraryBoundedEnum shrink = genericShrink @@ -1895,8 +1922,8 @@ instance ToSchema SettingsPutData where instance ToSchema (ApiT Settings) where declareNamedSchema _ = declareSchemaForDefinition "ApiGetSettings" -instance ToSchema (ApiT Iso8601Time) where - declareNamedSchema _ = declareSchemaForDefinition "ApiLastGC" +instance ToSchema (ApiT PoolMetadataGCStatus) where + declareNamedSchema _ = declareSchemaForDefinition "ApiGCStatus" instance ToSchema (Api.ApiListStakePools Api.ApiStakePool) where declareNamedSchema _ = declareSchemaForDefinition "ApiListStakePools" diff --git a/lib/core/test/unit/Cardano/Wallet/DB/Sqlite/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/DB/Sqlite/TypesSpec.hs index 2acf83c88c3..578e65f2e75 100644 --- a/lib/core/test/unit/Cardano/Wallet/DB/Sqlite/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/DB/Sqlite/TypesSpec.hs @@ -19,6 +19,8 @@ import Cardano.Wallet.Primitive.Types ( EpochNo (..), SlotInEpoch (..), SlotNo ) import Data.Proxy ( Proxy (..) ) +import Data.Time.Clock.POSIX + ( POSIXTime ) import Data.Typeable ( Typeable, typeRep ) import Data.Word.Odd @@ -29,6 +31,7 @@ import Test.Hspec ( Spec, describe, it ) import Test.QuickCheck ( Arbitrary (..) + , NonNegative (..) , arbitrarySizedBoundedIntegral , property , shrinkIntegral @@ -39,6 +42,7 @@ spec :: Spec spec = do describe "Values can be persisted and unpersisted successfully" $ do persistRoundtrip $ Proxy @SlotNo + persistRoundtrip $ Proxy @POSIXTime -- | Constructs a test to check that roundtrip persistence and unpersistence is -- possible for values of the given type. @@ -57,6 +61,11 @@ persistRoundtrip proxy = it Arbitrary Instances -------------------------------------------------------------------------------} +instance Arbitrary POSIXTime where + arbitrary = do + NonNegative int <- arbitrary @(NonNegative Int) + pure (fromIntegral int) + instance Arbitrary SlotNo where arbitrary = genSlotNo shrink = shrinkSlotNo diff --git a/lib/shelley/src/Cardano/Wallet/Shelley.hs b/lib/shelley/src/Cardano/Wallet/Shelley.hs index 25c6d696572..b2818a67638 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley.hs @@ -104,6 +104,7 @@ import Cardano.Wallet.Primitive.Types , Block , ChimericAccount , NetworkParameters (..) + , PoolMetadataGCStatus (..) , ProtocolParameters (..) , Settings (..) , SlottingParameters (..) @@ -151,6 +152,8 @@ import Data.Text ( Text ) import Data.Text.Class ( ToText (..) ) +import GHC.Conc + ( newTVarIO ) import GHC.Generics ( Generic ) import Network.Ntp @@ -331,10 +334,11 @@ serveWallet (timeInterpreter nl) $ \db@DBLayer{..} -> do + gcStatus <- newTVarIO NotStarted forM_ settings $ atomically . putSettings void $ forkFinally (monitorStakePools tr gp nl db) onExit - spl <- newStakePoolLayer nl db - $ forkFinally (monitorMetadata tr sp db) onExit + spl <- newStakePoolLayer gcStatus nl db + $ forkFinally (monitorMetadata gcStatus tr sp db) onExit action spl where tr = contramap (MsgFromWorker mempty) poolsEngineTracer diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 1e85db63f34..4d5663ad468 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -52,7 +52,7 @@ import Cardano.Pool.Metadata import Cardano.Wallet ( ErrListPools (..) ) import Cardano.Wallet.Api.Types - ( ApiListStakePools (..), ApiT (..), Iso8601Time (..) ) + ( ApiListStakePools (..), ApiT (..) ) import Cardano.Wallet.Byron.Compatibility ( toByronBlockHeader ) import Cardano.Wallet.Network @@ -83,6 +83,7 @@ import Cardano.Wallet.Primitive.Types , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) + , PoolMetadataGCStatus (..) , PoolMetadataSource (..) , PoolRegistrationCertificate (..) , PoolRetirementCertificate (..) @@ -157,7 +158,7 @@ import Data.Text import Data.Text.Class ( ToText (..) ) import Data.Time.Clock.POSIX - ( getPOSIXTime, posixDayLength, posixSecondsToUTCTime ) + ( getPOSIXTime, posixDayLength ) import Data.Tuple.Extra ( dupe ) import Data.Word @@ -217,11 +218,12 @@ data StakePoolLayer = StakePoolLayer newStakePoolLayer :: forall sc. () - => NetworkLayer IO (IO Shelley) (CardanoBlock sc) + => TVar PoolMetadataGCStatus + -> NetworkLayer IO (IO Shelley) (CardanoBlock sc) -> DBLayer IO -> IO ThreadId -> IO StakePoolLayer -newStakePoolLayer nl db@DBLayer {..} worker = do +newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do tid <- worker tvTid <- newTVarIO tid pure $ StakePoolLayer @@ -278,7 +280,6 @@ newStakePoolLayer nl db@DBLayer {..} worker = do let lsqData = combineLsqData rawLsqData dbData <- liftIO $ readPoolDbData db currentEpoch seed <- liftIO $ atomically readSystemSeed - lastGC <- liftIO $ atomically readLastMetadataGC r <- liftIO $ try $ sortByReward seed . map snd @@ -291,9 +292,11 @@ newStakePoolLayer nl db@DBLayer {..} worker = do case r of Left e@(PastHorizon{}) -> throwE (ErrListPoolsPastHorizonException e) - Right r' -> pure - $ ApiListStakePools r' $ Just $ ApiT - $ Iso8601Time $ posixSecondsToUTCTime lastGC + Right r' -> do + gcStatus' <- liftIO $ readTVarIO gcStatus + pure + $ ApiListStakePools r' $ Just $ ApiT + $ gcStatus' where fromErrCurrentNodeTip :: ErrCurrentNodeTip -> ErrListPools fromErrCurrentNodeTip = \case @@ -337,9 +340,12 @@ newStakePoolLayer nl db@DBLayer {..} worker = do -- We force a GC by resetting last sync time to 0 (start of POSIX -- time) and have the metadata thread restart. bracketSyncThread tvTid - $ atomically - $ putLastMetadataGC - $ fromIntegral @Int 0 + $ do + lastGC <- atomically readLastMetadataGC + case lastGC of + Nothing -> STM.atomically $ writeTVar gcStatus NotStarted + Just gc -> STM.atomically $ writeTVar gcStatus (Restarting gc) + atomically $ putLastMetadataGC $ fromIntegral @Int 0 -- Stop the sync thread, carry out an action, and restart the sync thread. bracketSyncThread :: TVar ThreadId -> IO a -> IO () @@ -719,27 +725,12 @@ monitorStakePools tr gp nl DBLayer{..} = -- | Worker thread that monitors pool metadata and syncs it to the database. monitorMetadata -<<<<<<< HEAD - :: Tracer IO (WorkerLog Text StakePoolLog) + :: TVar PoolMetadataGCStatus -> Tracer IO StakePoolLog -> SlottingParameters -||||||| parent of 5bbb4ba4a (Redo the database layer) - :: Tracer IO (WorkerLog Text StakePoolLog) - -> Tracer IO StakePoolLog - -> GenesisParameters -======= - :: Tracer IO StakePoolLog - -> GenesisParameters ->>>>>>> 5bbb4ba4a (Redo the database layer) -> DBLayer IO -> IO () -<<<<<<< HEAD -monitorMetadata tr' tr sp db@(DBLayer{..}) = do -||||||| parent of 5bbb4ba4a (Redo the database layer) -monitorMetadata tr' tr gp db@(DBLayer{..}) = do -======= -monitorMetadata tr gp db@(DBLayer{..}) = do ->>>>>>> 5bbb4ba4a (Redo the database layer) +monitorMetadata gcStatus tr sp db@(DBLayer{..}) = do settings <- atomically readSettings manager <- newManager defaultManagerSettings @@ -751,13 +742,18 @@ monitorMetadata tr gp db@(DBLayer{..}) = do threadDelay blockFrequency case poolMetadataSource settings of - FetchNone -> loop (pure ([], [])) -- TODO: exit loop? - FetchDirect -> loop (fetchThem $ fetcher [identityUrlBuilder]) + FetchNone -> do + STM.atomically $ writeTVar gcStatus NotApplicable + loop (pure ([], [])) -- TODO: exit loop? + FetchDirect -> do + STM.atomically $ writeTVar gcStatus NotApplicable + loop (fetchThem $ fetcher [identityUrlBuilder]) FetchSMASH (unSmashServer -> uri) -> do + STM.atomically $ writeTVar gcStatus NotStarted let getDelistedPools = fetchDelistedPools trFetch (toDelistedPoolsURI uri) manager tid <- forkFinally - (gcDelistedPools tr db getDelistedPools) + (gcDelistedPools gcStatus tr db getDelistedPools) onExit flip finally (killThread tid) $ loop (fetchThem $ fetcher [registryUrlBuilder uri]) @@ -805,19 +801,26 @@ monitorMetadata tr gp db@(DBLayer{..}) = do Just ThreadKilled -> MsgGCThreadKilled Just UserInterrupt -> MsgGCUserInterrupt _ -> MsgGCUnhandledException $ pretty $ show e + gcDelistedPools - :: Tracer IO StakePoolLog + :: TVar PoolMetadataGCStatus + -> Tracer IO StakePoolLog -> DBLayer IO -> IO (Maybe [PoolId]) -- ^ delisted pools fetcher -> IO () -gcDelistedPools tr DBLayer{..} fetchDelisted = forever $ do +gcDelistedPools gcStatus tr DBLayer{..} fetchDelisted = forever $ do lastGC <- atomically readLastMetadataGC currentTime <- getPOSIXTime - let timeSinceLastGC = currentTime - lastGC + case lastGC of + Nothing -> pure () + Just gc -> STM.atomically $ writeTVar gcStatus (HasRun gc) + + let timeSinceLastGC = fmap (currentTime -) lastGC sixHours = posixDayLength / 4 - when (timeSinceLastGC > sixHours) $ do + when (maybe True (> sixHours) timeSinceLastGC) $ do delistedPools <- fmap (fromMaybe []) fetchDelisted + STM.atomically $ writeTVar gcStatus (HasRun currentTime) atomically $ do putLastMetadataGC currentTime delistPools delistedPools diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 9c8c5cc63a7..c789130c9ed 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1107,6 +1107,32 @@ x-addressIndex: &addressIndex description: | An address derivation index. +x-gCStatus :: &gCStatus + description: | + Gives an indication if metadata GC checking for delisted pools + has run and if so, when. + + Possible values are: + - not_applicable -> we're currently not querying a SMASH server for metadata + - not_started -> the GC hasn't started yet, try again in a short while + - restarting -> the GC thread is currently restarting, try again in short while + - has_run -> the GC has run successfully + + When 'status' is 'restarting' or 'has_run' then the field 'last_run' + is set to the last GC time in UTC. + type: object + required: + - status + properties: + status: + type: string + enum: + - not_applicable + - not_started + - restarting + - has_run + last_run: *date + ############################################################################# # # # DEFINITIONS # @@ -1278,8 +1304,8 @@ components: type: string enum: ['gc_stake_pools'] - ApiLastGC: &ApiLastGC - <<: *date + ApiGCStatus: &ApiGCStatus + <<: *gCStatus ApiStakePool: &ApiStakePool type: object @@ -1305,9 +1331,10 @@ components: type: object required: - pools + - gc_status properties: - last_gc: - <<: *ApiLastGC + gc_status: + <<: *ApiGCStatus pools: type: array items: *ApiStakePool From 456ee2dc4874acff70149e9975d325d774dc5258 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 17:21:42 +0100 Subject: [PATCH 11/29] Add /stake-pools/metadata-gc-status endpoint --- lib/core/src/Cardano/Wallet/Api.hs | 7 +++++++ .../test/unit/Cardano/Pool/DB/Properties.hs | 2 +- .../Cardano/Wallet/Jormungandr/Api/Server.hs | 1 + .../src/Cardano/Wallet/Shelley/Api/Server.hs | 1 + lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs | 9 +++++++-- specifications/api/swagger.yaml | 17 +++++++++++++++++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index 20f074b7c8e..795337a0264 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -50,6 +50,7 @@ module Cardano.Wallet.Api , StakePools , ListStakePools + , MetadataGCStatus , JoinStakePool , QuitStakePool , DelegationFee @@ -168,6 +169,7 @@ import Cardano.Wallet.Primitive.Types , Block , Coin (..) , NetworkParameters + , PoolMetadataGCStatus (..) , SortOrder (..) , WalletId (..) ) @@ -447,12 +449,17 @@ type StakePools n apiPool = :<|> QuitStakePool n :<|> DelegationFee :<|> PoolMaintenance + :<|> MetadataGCStatus -- | https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/listStakePools type ListStakePools apiPool = "stake-pools" :> QueryParam "stake" (ApiT Coin) :> Get '[JSON] (ApiListStakePools apiPool) +type MetadataGCStatus = "stake-pools" + :> "metadata-gc-status" + :> Get '[JSON] (ApiT PoolMetadataGCStatus) + -- | https://input-output-hk.github.io/cardano-wallet/api/#operation/joinStakePool type JoinStakePool n = "stake-pools" :> Capture "stakePoolId" ApiPoolId diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index b75bf23fb30..38d16799974 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -1452,7 +1452,7 @@ prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do defGCTime <- run $ atomically readLastMetadataGC assertWith "Reading sync time from empty db returns Nothing" - (defGCTime == Nothing) + (isNothing defGCTime) run $ atomically $ putLastMetadataGC posixTime time <- run $ atomically readLastMetadataGC assertWith "Setting sync time and reading afterwards works" diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs index 3498e07b10b..e816d40a4fb 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs @@ -218,6 +218,7 @@ server byron icarus jormungandr spl ntp = :<|> quitStakePool jormungandr :<|> delegationFee jormungandr :<|> (\_ -> throwError err501) + :<|> throwError err501 byronWallets :: Server ByronWallets byronWallets = diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs index 5f4e8e6fc4d..ea862b99cfb 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs @@ -267,6 +267,7 @@ server byron icarus shelley spl ntp = :<|> quitStakePool shelley :<|> delegationFee shelley :<|> _poolMaintenance + :<|> liftIO (ApiT <$> getGCMetadataStatus spl) where _poolMaintenance = \case ApiMaintenanceAction GcStakePools -> diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 4d5663ad468..43126f87f50 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -214,6 +214,8 @@ data StakePoolLayer = StakePoolLayer , putSettings :: Settings -> IO () , getSettings :: IO Settings + + , getGCMetadataStatus :: IO PoolMetadataGCStatus } newStakePoolLayer @@ -233,6 +235,7 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do , forceMetadataGC = _forceMetadataGC tvTid , putSettings = _putSettings tvTid , getSettings = _getSettings + , getGCMetadataStatus = _getGCMetadataStatus } where _getPoolLifeCycleStatus @@ -295,8 +298,7 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do Right r' -> do gcStatus' <- liftIO $ readTVarIO gcStatus pure - $ ApiListStakePools r' $ Just $ ApiT - $ gcStatus' + $ ApiListStakePools r' $ Just $ ApiT gcStatus' where fromErrCurrentNodeTip :: ErrCurrentNodeTip -> ErrListPools fromErrCurrentNodeTip = \case @@ -347,6 +349,9 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do Just gc -> STM.atomically $ writeTVar gcStatus (Restarting gc) atomically $ putLastMetadataGC $ fromIntegral @Int 0 + _getGCMetadataStatus = + readTVarIO gcStatus + -- Stop the sync thread, carry out an action, and restart the sync thread. bracketSyncThread :: TVar ThreadId -> IO a -> IO () bracketSyncThread tvTid action = diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index c789130c9ed..4ae36265faf 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -3076,6 +3076,14 @@ x-responsesPoolMaintenance: &responsesPoolMaintenance 204: description: No Content +x-responsesMetadataGCStatus: &responsesMetadataGCStatus + 200: + description: Ok + content: + application/json: + schema: + <<: *ApiGCStatus + x-responsesJoinStakePool: &responsesJoinStakePool <<: *responsesErr400 403: @@ -3536,6 +3544,15 @@ paths: schema: *ApiMaintenanceAction responses: *responsesPoolMaintenance + /stake-pools/metadata-gc-status: + get: + operationId: getGCMetadataStatus + tags: ["Stake Pools"] + summary: Metdata GC Status + description: | + Returns the status of the pool metadata GC thread. + responses: *responsesMetadataGCStatus + /wallets/{walletId}/delegation-fees: get: operationId: getDelegationFee From 7b65f3de8d218d2d4a40b573440fdeffe9c64ed1 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 17:46:58 +0100 Subject: [PATCH 12/29] Add prop_delistPoolsPersists, which fails right now --- .../test/unit/Cardano/Pool/DB/Properties.hs | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index 38d16799974..ec49e537a0b 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -47,7 +47,7 @@ import Cardano.Wallet.Primitive.Types , PoolId , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) - , PoolRetirementCertificate (..) + , PoolRetirementCertificate , Settings , SlotNo (..) , StakePoolMetadata (..) @@ -226,6 +226,8 @@ properties = do (property . prop_putLastMetadataGCReadLastMetadataGC) it "delistPools >> readPoolRegistration shows the pool as delisted" (property . prop_delistPools) + it "delisting a pools persists even if a new certificate is registered" + (property . prop_delistPoolsPersists) {------------------------------------------------------------------------------- Properties @@ -1497,6 +1499,40 @@ prop_delistPools DBLayer {..} entries = assertWith "expected == entriesDelisted" $ expected == entriesDelisted +prop_delistPoolsPersists + :: DBLayer IO + -> (CertificatePublicationTime, PoolRegistrationCertificate) + -> Property +prop_delistPoolsPersists DBLayer {..} cert = + monadicIO (setup >> prop) + where + setup = run $ atomically cleanDB + prop = do + run $ atomically $ uncurry putPoolRegistration cert + + let poolid = view #poolId . snd $ cert + -- delist pool + run $ atomically $ delistPools [poolid] + delisted <- run . atomically . readPoolRegistration $ poolid + let expected = (\(c, p) -> + (c, p { poolFlag = Delisted })) cert + assertWith "expected == delisted" + $ Just expected == delisted + + -- insert the cert again + run $ atomically + $ uncurry putPoolRegistration cert + delistedAgain <- run . atomically . readPoolRegistration $ poolid + + monitor $ counterexample $ unlines + [ "Expected: " + , show (Just expected) + , "Read from DB: " + , show delistedAgain + ] + assertWith "expected == delisted" + $ Just expected == delistedAgain + descSlotsPerPool :: Map PoolId [BlockHeader] -> Expectation descSlotsPerPool pools = do let checkIfDesc slots = From 55ddb80430a60a71f38298d5e440a09d1bb38178 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 18:16:06 +0100 Subject: [PATCH 13/29] Fix putPoolRegisration to consider the delisted flag --- lib/core/src/Cardano/Pool/DB/Model.hs | 4 +++- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index 823ca865aeb..781bc3d3b77 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -254,10 +254,12 @@ mPutPoolRegistration -> PoolRegistrationCertificate -> ModelOp () mPutPoolRegistration cpt cert = do + old <- fmap snd <$> mReadPoolRegistration (view #poolId cert) + let flag = maybe NoPoolFlag poolFlag old modify #owners $ Map.insert poolId poolOwners modify #registrations - $ Map.insert (cpt, poolId) cert + $ Map.insert (cpt, poolId) (cert { poolFlag = flag }) where PoolRegistrationCertificate {poolId, poolOwners} = cert diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index a3609e36619..8f1c1c02d5d 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -295,6 +295,9 @@ newDBLayer trace fp timeInterpreter = do ] let poolRegistrationKey = PoolRegistrationKey poolId slotNo slotInternalIndex + prevResult <- selectFirst + [ PoolRegistrationPoolId ==. poolId ] + [ ] let poolRegistrationRow = PoolRegistration (poolId) (slotNo) @@ -307,7 +310,7 @@ newDBLayer trace fp timeInterpreter = do (getQuantity $ poolPledge cert) (fst <$> poolMetadata cert) (snd <$> poolMetadata cert) - NoPoolFlag + (maybe NoPoolFlag (poolRegistrationFlag . entityVal) prevResult) _ <- repsert poolRegistrationKey poolRegistrationRow insertMany_ $ zipWith From 173f9ed99de1d3b2c6aa58d523b39983d896e7d3 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 18:29:38 +0100 Subject: [PATCH 14/29] Add 'ApiT PoolMetadataGCStatus' to json roundtrip explicitly --- lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index ac395bf20ea..946aa0fcde4 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -357,6 +357,7 @@ spec = do jsonRoundtripAndGolden $ Proxy @ApiAddressData jsonRoundtripAndGolden $ Proxy @(ApiT DerivationIndex) jsonRoundtripAndGolden $ Proxy @(ApiListStakePools Api.ApiStakePool) + jsonRoundtripAndGolden $ Proxy @(ApiT PoolMetadataGCStatus) jsonRoundtripAndGolden $ Proxy @ApiEpochInfo jsonRoundtripAndGolden $ Proxy @(ApiSelectCoinsData ('Testnet 0)) jsonRoundtripAndGolden $ Proxy @(ApiCoinSelection ('Testnet 0)) From de490f51e8e53307bf4f83d70209c3d67522bb3d Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 20:20:59 +0100 Subject: [PATCH 15/29] Fix 'Arbitrary (ApiListStakePools ApiStakePool)' --- lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 946aa0fcde4..57730e31a96 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -1342,7 +1342,8 @@ instance Arbitrary PoolId where return $ PoolId $ BS.pack $ take 28 bytes instance Arbitrary (ApiListStakePools ApiStakePool) where - arbitrary = applyArbitrary2 ApiListStakePools + arbitrary = ApiListStakePools <$> arbitrary + <*> (Just <$> arbitrary) -- only for Jormungandr this can be Nothing instance Arbitrary ApiStakePool where arbitrary = ApiStakePool From 7f17cb5504f8f48a5a759eaf181f75c7aa46085b Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 27 Oct 2020 21:04:41 +0100 Subject: [PATCH 16/29] Add missing golden files --- .../Wallet/Api/ApiTPoolMetadataGCStatus.json | 39 +++++++++++++++++++ .../data/Cardano/Wallet/Api/SMASHPoolId.json | 35 +++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 lib/core/test/data/Cardano/Wallet/Api/ApiTPoolMetadataGCStatus.json create mode 100644 lib/core/test/data/Cardano/Wallet/Api/SMASHPoolId.json diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiTPoolMetadataGCStatus.json b/lib/core/test/data/Cardano/Wallet/Api/ApiTPoolMetadataGCStatus.json new file mode 100644 index 00000000000..18df57a14c8 --- /dev/null +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiTPoolMetadataGCStatus.json @@ -0,0 +1,39 @@ +{ + "seed": 1418264416350966807, + "samples": [ + { + "status": "not_started" + }, + { + "status": "not_started" + }, + { + "status": "has_run", + "last_run": "1866-08-30T12:00:00Z" + }, + { + "status": "has_run", + "last_run": "1859-12-29T07:42:46Z" + }, + { + "status": "not_started" + }, + { + "status": "not_applicable" + }, + { + "status": "not_applicable" + }, + { + "status": "not_applicable" + }, + { + "status": "has_run", + "last_run": "1885-09-08T15:11:50Z" + }, + { + "status": "restarting", + "last_run": "1875-12-06T21:00:00Z" + } + ] +} \ No newline at end of file diff --git a/lib/core/test/data/Cardano/Wallet/Api/SMASHPoolId.json b/lib/core/test/data/Cardano/Wallet/Api/SMASHPoolId.json new file mode 100644 index 00000000000..ec0bd9b35b7 --- /dev/null +++ b/lib/core/test/data/Cardano/Wallet/Api/SMASHPoolId.json @@ -0,0 +1,35 @@ +{ + "seed": 1693755052676937632, + "samples": [ + { + "pool_id": "961d329fba1807eef89db767ba405aec0c5426501c6b1df20f5c0995" + }, + { + "pool_id": "3d9aab7ac059512c948fe8bb773aad076c5e8b3941fa4fbcdff34597" + }, + { + "pool_id": "ff5b4952dd7734f07e4905dea64fa230fb75f7b2d603d154d9ff1d43" + }, + { + "pool_id": "a6906f8ecfcc437375bd8763120ac5c96ae4796c8f78f549193e7b36" + }, + { + "pool_id": "74d3e2c4d640dd181def5a5b6b22308b5a835b98ccfb7143d52bd150" + }, + { + "pool_id": "81017236ed16380bb96bd02bbd452541f3e5694e14196f65e37ce502" + }, + { + "pool_id": "a6906f8ecfcc437375bd8763120ac5c96ae4796c8f78f549193e7b36" + }, + { + "pool_id": "3d9aab7ac059512c948fe8bb773aad076c5e8b3941fa4fbcdff34597" + }, + { + "pool_id": "5ee7591bf30eaa4f5dce70b4a676eb02d5be8012d188f04fe3beffb0" + }, + { + "pool_id": "eb7832cb137b6d20ee2c3f4892d4938a734326ca18122f0d21e5f587" + } + ] +} \ No newline at end of file From abf915e18e0ad893a8cdbe2d9980773119d98d5d Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Wed, 28 Oct 2020 09:07:51 +0100 Subject: [PATCH 17/29] Update lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs Co-authored-by: Jonathan Knowles --- lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 43126f87f50..b6775771d20 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -341,13 +341,12 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do _forceMetadataGC tvTid = -- We force a GC by resetting last sync time to 0 (start of POSIX -- time) and have the metadata thread restart. - bracketSyncThread tvTid - $ do - lastGC <- atomically readLastMetadataGC - case lastGC of - Nothing -> STM.atomically $ writeTVar gcStatus NotStarted - Just gc -> STM.atomically $ writeTVar gcStatus (Restarting gc) - atomically $ putLastMetadataGC $ fromIntegral @Int 0 + bracketSyncThread tvTid $ do + lastGC <- atomically readLastMetadataGC + case lastGC of + Nothing -> STM.atomically $ writeTVar gcStatus NotStarted + Just gc -> STM.atomically $ writeTVar gcStatus (Restarting gc) + atomically $ putLastMetadataGC $ fromIntegral @Int 0 _getGCMetadataStatus = readTVarIO gcStatus From 71b0d6b25f2de8558f2fd17a364ce35bb2ec59fa Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Wed, 28 Oct 2020 09:08:06 +0100 Subject: [PATCH 18/29] Update lib/core/src/Cardano/Wallet/Api/Types.hs Co-authored-by: Jonathan Knowles --- lib/core/src/Cardano/Wallet/Api/Types.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index d34fa5299a2..99705cd4973 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -417,7 +417,8 @@ newtype ApiMaintenanceAction = ApiMaintenanceAction data ApiListStakePools apiPool = ApiListStakePools { pools :: [apiPool] - , gc_status :: !(Maybe (ApiT PoolMetadataGCStatus)) -- Nothing, bc of Jormungandr + , gcStatus :: !(Maybe (ApiT PoolMetadataGCStatus)) + -- 'Nothing' in the case of Jormungandr. } deriving (Eq, Generic, Show) data ApiAddress (n :: NetworkDiscriminant) = ApiAddress From 204e685d057e36cd741db538d87054d50d56c81d Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 04:43:25 +0000 Subject: [PATCH 19/29] Record delisted pools in a dedicated table. Record delisted pools in a dedicated table instead of using a field in the `pool_registrations` table. In the updated schema, a pool is delisted if (and only if) there is a single row containing that pool's id in the `delisted_pools` table. This solution has several advantages: 1. We only need a single database row to record that a pool is delisted. 2. We no longer need to carefully to ensure that all registration records for a particular pool have the same delisted status. A pool is either delisted or not delisted: the schema rules out all intermediate states. 3. Pools automatically remain delisted when rollbacks occur or when new certificates are published, with no extra effort. 4. The `putPoolRegistration` function no longer needs to read the most-recently-written registration entry before adding a new entry. 5. Each row in the `pool_registrations` table is now just an immutable record of a registration certificate. 6. The `PoolFlag` type is no longer necessary. --- lib/core/src/Cardano/Pool/DB.hs | 3 ++ lib/core/src/Cardano/Pool/DB/MVar.hs | 4 +++ lib/core/src/Cardano/Pool/DB/Model.hs | 32 +++++++++--------- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 33 ++++++------------- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 6 +++- .../src/Cardano/Wallet/DB/Sqlite/Types.hs | 8 ----- .../src/Cardano/Wallet/Primitive/Types.hs | 14 -------- .../test/unit/Cardano/Pool/DB/Arbitrary.hs | 6 ---- .../test/unit/Cardano/Pool/DB/Properties.hs | 33 +++++++++---------- .../src/Cardano/Wallet/Jormungandr/Binary.hs | 3 +- .../Cardano/Pool/Jormungandr/MetricsSpec.hs | 6 ++-- .../Cardano/Wallet/Shelley/Compatibility.hs | 1 - .../src/Cardano/Wallet/Shelley/Pools.hs | 11 ++++--- 13 files changed, 62 insertions(+), 98 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index bf26890c292..89d636cbbae 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -219,6 +219,9 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer -- ^ Mark pools as delisted, e.g. due to non-compliance. -- This is stored as an attribute in the pool_registration table. + , readDelistedPools + :: stm [PoolId] + , removePools :: [PoolId] -> stm () diff --git a/lib/core/src/Cardano/Pool/DB/MVar.hs b/lib/core/src/Cardano/Pool/DB/MVar.hs index 82772560fb8..b8461f3c09e 100644 --- a/lib/core/src/Cardano/Pool/DB/MVar.hs +++ b/lib/core/src/Cardano/Pool/DB/MVar.hs @@ -41,6 +41,7 @@ import Cardano.Pool.DB.Model , mPutSettings , mPutStakeDistribution , mReadCursor + , mReadDelistedPools , mReadLastMetadataGC , mReadPoolLifeCycleStatus , mReadPoolMetadata @@ -152,6 +153,9 @@ newDBLayer timeInterpreter = do delistPools = void . alterPoolDB (const Nothing) db . mDelistPools + readDelistedPools = + readPoolDB db mReadDelistedPools + removePools = void . alterPoolDB (const Nothing) db . mRemovePools diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index 781bc3d3b77..3c08e8e091e 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -62,6 +62,7 @@ module Cardano.Pool.DB.Model , mReadCursor , mRemovePools , mDelistPools + , mReadDelistedPools , mRemoveRetiredPools , mReadSettings , mPutSettings @@ -80,7 +81,6 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime , EpochNo (..) , InternalState (..) - , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolOwner (..) @@ -116,6 +116,8 @@ import Data.Ord ( Down (..) ) import Data.Quantity ( Quantity (..) ) +import Data.Set + ( Set ) import Data.Time.Clock.POSIX ( POSIXTime ) import Data.Word @@ -152,6 +154,8 @@ data PoolDatabase = PoolDatabase !(Map (CertificatePublicationTime, PoolId) PoolRetirementCertificate) -- ^ On-chain retirements associated with pools + , delisted :: !(Set PoolId) + , metadata :: !(Map StakePoolMetadataHash StakePoolMetadata) -- ^ Off-chain metadata cached in database @@ -184,9 +188,9 @@ instance Eq SystemSeed where -- | Produces an empty model pool production database. emptyPoolDatabase :: PoolDatabase -emptyPoolDatabase = - PoolDatabase mempty mempty mempty mempty mempty mempty mempty NotSeededYet - mempty defaultSettings defaultInternalState +emptyPoolDatabase = PoolDatabase + mempty mempty mempty mempty mempty mempty mempty mempty NotSeededYet + mempty defaultSettings defaultInternalState {------------------------------------------------------------------------------- Model Operation Types @@ -254,12 +258,10 @@ mPutPoolRegistration -> PoolRegistrationCertificate -> ModelOp () mPutPoolRegistration cpt cert = do - old <- fmap snd <$> mReadPoolRegistration (view #poolId cert) - let flag = maybe NoPoolFlag poolFlag old modify #owners $ Map.insert poolId poolOwners modify #registrations - $ Map.insert (cpt, poolId) (cert { poolFlag = flag }) + $ Map.insert (cpt, poolId) cert where PoolRegistrationCertificate {poolId, poolOwners} = cert @@ -430,16 +432,10 @@ mRollbackTo ti point = do | otherwise = Nothing mDelistPools :: [PoolId] -> ModelOp () -mDelistPools poolsToDelist = - modify #registrations - $ Map.mapWithKey - $ \(_, pid) a -> - if updateThis pid - then a {poolFlag = Delisted} - else a - where - updateThis p = p `Set.member` poolsToDelistSet - poolsToDelistSet = Set.fromList poolsToDelist +mDelistPools = modify #delisted . Set.union . Set.fromList + +mReadDelistedPools :: ModelOp [PoolId] +mReadDelistedPools = Set.toList <$> get #delisted mRemovePools :: [PoolId] -> ModelOp () mRemovePools poolsToRemove = do @@ -453,6 +449,8 @@ mRemovePools poolsToRemove = do $ Map.filterWithKey $ \(_, p) _ -> retain p modify #retirements $ Map.filterWithKey $ \(_, p) _ -> retain p + modify #delisted + $ Set.filter retain where retain p = p `Set.notMember` poolsToRemoveSet poolsToRemoveSet = Set.fromList poolsToRemove diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 8f1c1c02d5d..26b5c01bfd8 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -62,7 +62,6 @@ import Cardano.Wallet.Primitive.Types ( BlockHeader (..) , CertificatePublicationTime (..) , EpochNo (..) - , PoolFlag (..) , PoolId (..) , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) @@ -120,12 +119,10 @@ import Database.Persist.Sql , insert_ , rawSql , repsert - , repsertMany , selectFirst , selectList , toPersistValue , update - , (<-.) , (<.) , (=.) , (==.) @@ -295,9 +292,6 @@ newDBLayer trace fp timeInterpreter = do ] let poolRegistrationKey = PoolRegistrationKey poolId slotNo slotInternalIndex - prevResult <- selectFirst - [ PoolRegistrationPoolId ==. poolId ] - [ ] let poolRegistrationRow = PoolRegistration (poolId) (slotNo) @@ -310,7 +304,6 @@ newDBLayer trace fp timeInterpreter = do (getQuantity $ poolPledge cert) (fst <$> poolMetadata cert) (snd <$> poolMetadata cert) - (maybe NoPoolFlag (poolRegistrationFlag . entityVal) prevResult) _ <- repsert poolRegistrationKey poolRegistrationRow insertMany_ $ zipWith @@ -455,7 +448,6 @@ newDBLayer trace fp timeInterpreter = do , Single fieldMarginDenominator , Single fieldMetadataHash , Single fieldMetadataUrl - , Single fieldFlag ) = do regCert <- parseRegistrationCertificate parseRetirementCertificate <&> maybe @@ -469,7 +461,6 @@ newDBLayer trace fp timeInterpreter = do <*> (Quantity <$> fromPersistValue fieldCost) <*> (Quantity <$> fromPersistValue fieldPledge) <*> parseMetadata - <*> fromPersistValue fieldFlag parseRetirementCertificate = do poolId <- fromPersistValue fieldPoolId @@ -500,13 +491,11 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool - delistPools pools = do - px <- selectList - [ PoolRegistrationPoolId <-. pools ] - [ ] - repsertMany $ fmap - (\(Entity k val) -> (k, val {poolRegistrationFlag = Delisted})) - px + delistPools = + insertMany_ . fmap DelistedPool + + readDelistedPools = + fmap (delistedPoolPoolId . entityVal) <$> selectList [] [] removePools = mapM_ $ \pool -> do liftIO $ traceWith trace $ MsgRemovingPool pool @@ -515,6 +504,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ PoolRegistrationPoolId ==. pool ] deleteWhere [ PoolRetirementPoolId ==. pool ] deleteWhere [ StakeDistributionPoolId ==. pool ] + deleteWhere [ DelistedPoolPoolId ==. pool ] removeRetiredPools epoch = bracketTracer traceOuter action @@ -580,6 +570,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere ([] :: [Filter PoolOwner]) deleteWhere ([] :: [Filter PoolRegistration]) deleteWhere ([] :: [Filter PoolRetirement]) + deleteWhere ([] :: [Filter DelistedPool]) deleteWhere ([] :: [Filter StakeDistribution]) deleteWhere ([] :: [Filter PoolMetadata]) deleteWhere ([] :: [Filter PoolMetadataFetchAttempts]) @@ -606,8 +597,7 @@ newDBLayer trace fp timeInterpreter = do poolCost_ poolPledge_ poolMetadataUrl - poolMetadataHash - poolFlag = entityVal meta + poolMetadataHash = entityVal meta let poolMargin = unsafeMkPercentage $ toRational $ marginNum % marginDen let poolCost = Quantity poolCost_ @@ -630,7 +620,6 @@ newDBLayer trace fp timeInterpreter = do , poolCost , poolPledge , poolMetadata - , poolFlag } let cpt = CertificatePublicationTime {slotNo, slotInternalIndex} pure (cpt, cert) @@ -753,8 +742,7 @@ activePoolLifeCycleData = DatabaseView "active_pool_lifecycle_data" [i| margin_numerator, margin_denominator, metadata_hash, - metadata_url, - active_pool_registrations.flag as flag + metadata_url FROM active_pool_registrations LEFT JOIN @@ -809,8 +797,7 @@ activePoolRegistrations = DatabaseView "active_pool_registrations" [i| margin_numerator, margin_denominator, metadata_hash, - metadata_url, - flag + metadata_url FROM ( SELECT row_number() OVER w AS r, * FROM pool_registration diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index 761e99f251c..4d52d0fd3d2 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -120,11 +120,15 @@ PoolRegistration sql=pool_registration poolRegistrationPledge Word64 sql=pledge poolRegistrationMetadataUrl W.StakePoolMetadataUrl Maybe sql=metadata_url poolRegistrationMetadataHash W.StakePoolMetadataHash Maybe sql=metadata_hash - poolRegistrationFlag W.PoolFlag sql=flag Primary poolRegistrationPoolId poolRegistrationSlot poolRegistrationSlotInternalIndex deriving Show Generic +DelistedPool sql=delisted_pool + delistedPoolPoolId W.PoolId sql=pool_id + Primary delistedPoolPoolId + deriving Show Generic + -- Mapping of retirement certificates to pools PoolRetirement sql=pool_retirement poolRetirementPoolId W.PoolId sql=pool_id diff --git a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs index a03c4711d18..922f5119edb 100644 --- a/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs +++ b/lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs @@ -43,7 +43,6 @@ import Cardano.Wallet.Primitive.Types , Direction (..) , EpochNo (..) , FeePolicy - , PoolFlag (..) , PoolId , PoolMetadataSource (..) , PoolOwner (..) @@ -693,10 +692,3 @@ instance PersistField POSIXTime where instance PersistFieldSql POSIXTime where sqlType _ = sqlType (Proxy @Text) - -instance PersistField PoolFlag where - toPersistValue = toPersistValue . toText - fromPersistValue = fromPersistValueFromText - -instance PersistFieldSql PoolFlag where - sqlType _ = sqlType (Proxy @Text) diff --git a/lib/core/src/Cardano/Wallet/Primitive/Types.hs b/lib/core/src/Cardano/Wallet/Primitive/Types.hs index dd12cc39c04..f665a2ec2e2 100644 --- a/lib/core/src/Cardano/Wallet/Primitive/Types.hs +++ b/lib/core/src/Cardano/Wallet/Primitive/Types.hs @@ -191,8 +191,6 @@ module Cardano.Wallet.Primitive.Types , InternalState (..) , defaultInternalState - -- * other - , PoolFlag (..) ) where import Prelude @@ -1822,7 +1820,6 @@ data PoolRegistrationCertificate = PoolRegistrationCertificate , poolCost :: Quantity "lovelace" Word64 , poolPledge :: Quantity "lovelace" Word64 , poolMetadata :: Maybe (StakePoolMetadataUrl, StakePoolMetadataHash) - , poolFlag :: PoolFlag } deriving (Generic, Show, Eq, Ord) instance NFData PoolRegistrationCertificate @@ -2034,14 +2031,3 @@ instance FromJSON PoolMetadataSource where instance ToJSON PoolMetadataSource where toJSON = toJSON . toText - -data PoolFlag = NoPoolFlag | Delisted - deriving (Generic, Bounded, Enum, Show, Eq, Ord) - -instance NFData PoolFlag - -instance ToText PoolFlag where - toText = toTextFromBoundedEnum KebabLowerCase - -instance FromText PoolFlag where - fromText = fromTextToBoundedEnum KebabLowerCase diff --git a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs index 0e2712c3c7f..bcf86450472 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Arbitrary.hs @@ -27,7 +27,6 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime (..) , EpochNo (..) , PoolCertificate (..) - , PoolFlag (..) , PoolId (..) , PoolMetadataSource (..) , PoolMetadataSource (..) @@ -166,10 +165,6 @@ instance Arbitrary PoolOwner where byte <- elements ['0'..'8'] return $ PoolOwner $ B8.pack (replicate 32 byte) -instance Arbitrary PoolFlag where - arbitrary = arbitraryBoundedEnum - shrink = const [] - instance Arbitrary PoolRegistrationCertificate where shrink regCert = do shrunkPoolId <- shrink $ view #poolId regCert @@ -189,7 +184,6 @@ instance Arbitrary PoolRegistrationCertificate where <*> fmap Quantity arbitrary <*> fmap Quantity arbitrary <*> oneof [pure Nothing, Just <$> genMetadata] - <*> pure NoPoolFlag where genMetadata = (,) <$> fmap StakePoolMetadataUrl genURL diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index ec49e537a0b..46fe693e440 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -43,7 +43,6 @@ import Cardano.Wallet.Primitive.Types , CertificatePublicationTime (..) , EpochNo (..) , PoolCertificate (..) - , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolRegistrationCertificate (..) @@ -224,7 +223,7 @@ properties = do (property . prop_modSettingsReadSettings) it "putLastMetadataGC . readLastMetadataGC == id" (property . prop_putLastMetadataGCReadLastMetadataGC) - it "delistPools >> readPoolRegistration shows the pool as delisted" + it "delistPools >> readDelistedPools shows the pool as delisted" (property . prop_delistPools) it "delisting a pools persists even if a new certificate is registered" (property . prop_delistPoolsPersists) @@ -1486,18 +1485,17 @@ prop_delistPools DBLayer {..} entries = $ entriesIn == entriesOut -- delist pools - run $ atomically $ delistPools (fmap (view #poolId . snd) entries) - entriesDelisted <- run . atomically $ L.sort . catMaybes - <$> mapM (readPoolRegistration . view #poolId . snd) entries - let expected = fmap (\(c, p) -> (c, p { poolFlag = Delisted })) entriesIn + let poolsToDelist = L.sort $ fmap (view #poolId . snd) entriesIn + run $ atomically $ delistPools poolsToDelist + poolsDelisted <- L.sort <$> run (atomically readDelistedPools) monitor $ counterexample $ unlines - [ "Expected: " - , show expected - , "Read from DB: " - , show entriesDelisted + [ "Pools to delist: " + , pretty poolsToDelist + , "Pools actually delisted: " + , pretty poolsDelisted ] - assertWith "expected == entriesDelisted" - $ expected == entriesDelisted + assertWith "poolsToDelist == poolsDelisted" + $ poolsToDelist == poolsDelisted prop_delistPoolsPersists :: DBLayer IO @@ -1513,16 +1511,15 @@ prop_delistPoolsPersists DBLayer {..} cert = let poolid = view #poolId . snd $ cert -- delist pool run $ atomically $ delistPools [poolid] - delisted <- run . atomically . readPoolRegistration $ poolid - let expected = (\(c, p) -> - (c, p { poolFlag = Delisted })) cert + delisted <- run $ atomically readDelistedPools + let expected = [poolid] assertWith "expected == delisted" - $ Just expected == delisted + $ expected == delisted -- insert the cert again run $ atomically $ uncurry putPoolRegistration cert - delistedAgain <- run . atomically . readPoolRegistration $ poolid + delistedAgain <- run $ atomically readDelistedPools monitor $ counterexample $ unlines [ "Expected: " @@ -1531,7 +1528,7 @@ prop_delistPoolsPersists DBLayer {..} cert = , show delistedAgain ] assertWith "expected == delisted" - $ Just expected == delistedAgain + $ expected == delistedAgain descSlotsPerPool :: Map PoolId [BlockHeader] -> Expectation descSlotsPerPool pools = do diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs index 8b124142f30..bb1ae74ad8b 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Binary.hs @@ -103,7 +103,6 @@ import Cardano.Wallet.Primitive.Types , Coin (..) , EpochLength (..) , EpochNo (..) - , PoolFlag (..) , PoolId (PoolId) , PoolOwner (..) , SealedTx (..) @@ -1093,7 +1092,7 @@ poolRegistrationsFromBlock (Block _hdr fragments) = do let dummyPledge = Quantity 0 let metadata = Nothing pure $ W.PoolRegistrationCertificate - poolId owners margin cost dummyPledge metadata NoPoolFlag + poolId owners margin cost dummyPledge metadata -- | If all incentives parameters are present in the blocks, returns a function -- that computes reward based on a given epoch. diff --git a/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs b/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs index 1b97eb4367c..f7afa4dcc9f 100644 --- a/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs +++ b/lib/jormungandr/test/unit/Cardano/Pool/Jormungandr/MetricsSpec.hs @@ -54,7 +54,6 @@ import Cardano.Wallet.Primitive.Types , EpochLength (..) , EpochNo , FeePolicy (..) - , PoolFlag (..) , PoolId (..) , PoolOwner (..) , PoolRegistrationCertificate (..) @@ -429,8 +428,8 @@ instance Arbitrary PoolOwner where arbitrary = PoolOwner . B8.singleton <$> elements ['a'..'e'] instance Arbitrary PoolRegistrationCertificate where - shrink (PoolRegistrationCertificate p o m c pl md fl) = - (\(p', NonEmpty o') -> PoolRegistrationCertificate p' o' m c pl md fl) + shrink (PoolRegistrationCertificate p o m c pl md) = + (\(p', NonEmpty o') -> PoolRegistrationCertificate p' o' m c pl md) <$> shrink (p, NonEmpty o) arbitrary = PoolRegistrationCertificate <$> arbitrary @@ -439,7 +438,6 @@ instance Arbitrary PoolRegistrationCertificate where <*> fmap Quantity arbitrary <*> pure (Quantity 0) <*> pure Nothing - <*> pure NoPoolFlag instance Arbitrary RegistrationsTest where shrink (RegistrationsTest xs) = RegistrationsTest <$> shrink xs diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs index acb7a5a56b2..e46ababb2ad 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs @@ -772,7 +772,6 @@ fromShelleyRegistrationCert = \case , W.poolCost = lovelaceFromCoin (SL._poolCost pp) , W.poolPledge = lovelaceFromCoin (SL._poolPledge pp) , W.poolMetadata = fromPoolMetaData <$> strictMaybeToMaybe (SL._poolMD pp) - , W.poolFlag = W.NoPoolFlag } ) diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index b6775771d20..b4a34e79a6f 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -80,7 +80,6 @@ import Cardano.Wallet.Primitive.Types , EpochNo (..) , GenesisParameters (..) , PoolCertificate (..) - , PoolFlag (..) , PoolId , PoolLifeCycleStatus (..) , PoolMetadataGCStatus (..) @@ -385,6 +384,7 @@ data PoolDbData = PoolDbData , retirementCert :: Maybe PoolRetirementCertificate , nProducedBlocks :: Quantity "block" Word64 , metadata :: Maybe StakePoolMetadata + , delisted :: Bool } -- | Top level combine-function that merges DB and LSQ data. @@ -460,7 +460,7 @@ combineDbAndLsqData ti nOpt lsqData = , Api.margin = Quantity $ poolMargin $ registrationCert dbData , Api.retirement = retirementEpochInfo - , Api.delisted = poolFlag (registrationCert dbData) == Delisted + , Api.delisted = delisted dbData } toApiEpochInfo ep = do @@ -512,8 +512,9 @@ combineChainData -> Map PoolId PoolRetirementCertificate -> Map PoolId (Quantity "block" Word64) -> Map StakePoolMetadataHash StakePoolMetadata + -> Set PoolId -> Map PoolId PoolDbData -combineChainData registrationMap retirementMap prodMap metaMap = +combineChainData registrationMap retirementMap prodMap metaMap delistedSet = Map.map mkPoolDbData $ Map.merge registeredNoProductions @@ -534,12 +535,13 @@ combineChainData registrationMap retirementMap prodMap metaMap = :: (PoolRegistrationCertificate, Quantity "block" Word64) -> PoolDbData mkPoolDbData (registrationCert, n) = - PoolDbData registrationCert mRetirementCert n meta + PoolDbData registrationCert mRetirementCert n meta delisted where metaHash = snd <$> poolMetadata registrationCert meta = flip Map.lookup metaMap =<< metaHash mRetirementCert = Map.lookup (view #poolId registrationCert) retirementMap + delisted = view #poolId registrationCert `Set.member` delistedSet readPoolDbData :: DBLayer IO -> EpochNo -> IO (Map PoolId PoolDbData) readPoolDbData DBLayer {..} currentEpoch = atomically $ do @@ -559,6 +561,7 @@ readPoolDbData DBLayer {..} currentEpoch = atomically $ do retirementCertificates <$> readTotalProduction <*> readPoolMetadata + <*> (Set.fromList <$> readDelistedPools) -- -- Monitoring stake pool From cf7a5ad5c2c78d067c3210c91612a027626699fc Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 12:29:57 +0000 Subject: [PATCH 20/29] Rename `delisted_pools` table to `pool_delistment`. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513385694 --- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 8 ++++---- lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 26b5c01bfd8..894c21717c2 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -492,10 +492,10 @@ newDBLayer trace fp timeInterpreter = do -- TODO: remove dangling metadata no longer attached to a pool delistPools = - insertMany_ . fmap DelistedPool + insertMany_ . fmap PoolDelistment readDelistedPools = - fmap (delistedPoolPoolId . entityVal) <$> selectList [] [] + fmap (delistedPoolId . entityVal) <$> selectList [] [] removePools = mapM_ $ \pool -> do liftIO $ traceWith trace $ MsgRemovingPool pool @@ -504,7 +504,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ PoolRegistrationPoolId ==. pool ] deleteWhere [ PoolRetirementPoolId ==. pool ] deleteWhere [ StakeDistributionPoolId ==. pool ] - deleteWhere [ DelistedPoolPoolId ==. pool ] + deleteWhere [ DelistedPoolId ==. pool ] removeRetiredPools epoch = bracketTracer traceOuter action @@ -570,7 +570,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere ([] :: [Filter PoolOwner]) deleteWhere ([] :: [Filter PoolRegistration]) deleteWhere ([] :: [Filter PoolRetirement]) - deleteWhere ([] :: [Filter DelistedPool]) + deleteWhere ([] :: [Filter PoolDelistment]) deleteWhere ([] :: [Filter StakeDistribution]) deleteWhere ([] :: [Filter PoolMetadata]) deleteWhere ([] :: [Filter PoolMetadataFetchAttempts]) diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs index 4d52d0fd3d2..c4b5d2443c3 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite/TH.hs @@ -124,9 +124,9 @@ PoolRegistration sql=pool_registration Primary poolRegistrationPoolId poolRegistrationSlot poolRegistrationSlotInternalIndex deriving Show Generic -DelistedPool sql=delisted_pool - delistedPoolPoolId W.PoolId sql=pool_id - Primary delistedPoolPoolId +PoolDelistment sql=pool_delistment + delistedPoolId W.PoolId sql=pool_id + Primary delistedPoolId deriving Show Generic -- Mapping of retirement certificates to pools From 4b3c36b73c2688aae56bee04704a76be1e3bd78a Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 12:35:56 +0000 Subject: [PATCH 21/29] Make `delistPools` replace the set of delisted pools. We must replace the set of delisted pools, rather than augmenting it. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513384085 --- lib/core/src/Cardano/Pool/DB/Model.hs | 2 +- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index 3c08e8e091e..cc0bc0d8e83 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -432,7 +432,7 @@ mRollbackTo ti point = do | otherwise = Nothing mDelistPools :: [PoolId] -> ModelOp () -mDelistPools = modify #delisted . Set.union . Set.fromList +mDelistPools = modify #delisted . const . Set.fromList mReadDelistedPools :: ModelOp [PoolId] mReadDelistedPools = Set.toList <$> get #delisted diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index 894c21717c2..c5b7d85ad8f 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -491,8 +491,9 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool - delistPools = - insertMany_ . fmap PoolDelistment + delistPools pools = do + deleteWhere ([] :: [Filter PoolDelistment]) + insertMany_ $ fmap PoolDelistment pools readDelistedPools = fmap (delistedPoolId . entityVal) <$> selectList [] [] From 90873a8f64863bf6ba1bc391171eb5782ea1c8a1 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 12:45:54 +0000 Subject: [PATCH 22/29] Rename `delistPools` to `putDelistedPools`. This operation completely replaces the set of delisted pools, rather than augmenting it. Therefore, the name `delistPools` is slightly misleading, as it gives the impression that the existing set will be augmented, which is no longer true. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513384085 --- lib/core/src/Cardano/Pool/DB.hs | 7 ++++--- lib/core/src/Cardano/Pool/DB/MVar.hs | 6 +++--- lib/core/src/Cardano/Pool/DB/Model.hs | 6 +++--- lib/core/src/Cardano/Pool/DB/Sqlite.hs | 2 +- .../test/unit/Cardano/Pool/DB/Properties.hs | 18 +++++++++--------- .../src/Cardano/Wallet/Shelley/Pools.hs | 2 +- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/core/src/Cardano/Pool/DB.hs b/lib/core/src/Cardano/Pool/DB.hs index 89d636cbbae..e3a50f2a48a 100644 --- a/lib/core/src/Cardano/Pool/DB.hs +++ b/lib/core/src/Cardano/Pool/DB.hs @@ -213,14 +213,15 @@ data DBLayer m = forall stm. (MonadFail stm, MonadIO stm) => DBLayer -> stm () -- ^ Remove all entries of slot ids newer than the argument - , delistPools + , putDelistedPools :: [PoolId] -> stm () - -- ^ Mark pools as delisted, e.g. due to non-compliance. - -- This is stored as an attribute in the pool_registration table. + -- ^ Overwrite the set of delisted pools with a completely new set. + -- Pools may be delisted for reasons such as non-compliance. , readDelistedPools :: stm [PoolId] + -- ^ Fetch the set of delisted pools. , removePools :: [PoolId] diff --git a/lib/core/src/Cardano/Pool/DB/MVar.hs b/lib/core/src/Cardano/Pool/DB/MVar.hs index b8461f3c09e..44d9ac4a07f 100644 --- a/lib/core/src/Cardano/Pool/DB/MVar.hs +++ b/lib/core/src/Cardano/Pool/DB/MVar.hs @@ -26,11 +26,11 @@ import Cardano.Pool.DB.Model , emptyPoolDatabase , mCleanDatabase , mCleanPoolMetadata - , mDelistPools , mListHeaders , mListPoolLifeCycleData , mListRegisteredPools , mListRetiredPools + , mPutDelistedPools , mPutFetchAttempt , mPutHeader , mPutLastMetadataGC @@ -150,8 +150,8 @@ newDBLayer timeInterpreter = do rollbackTo = void . alterPoolDB (const Nothing) db . mRollbackTo timeInterpreter - delistPools = - void . alterPoolDB (const Nothing) db . mDelistPools + putDelistedPools = + void . alterPoolDB (const Nothing) db . mPutDelistedPools readDelistedPools = readPoolDB db mReadDelistedPools diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index cc0bc0d8e83..5275a1b0e6d 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -51,6 +51,7 @@ module Cardano.Pool.DB.Model , mPutPoolRetirement , mReadPoolRetirement , mUnfetchedPoolMetadataRefs + , mPutDelistedPools , mPutFetchAttempt , mPutPoolMetadata , mListPoolLifeCycleData @@ -61,7 +62,6 @@ module Cardano.Pool.DB.Model , mRollbackTo , mReadCursor , mRemovePools - , mDelistPools , mReadDelistedPools , mRemoveRetiredPools , mReadSettings @@ -431,8 +431,8 @@ mRollbackTo ti point = do | point' <= getPoint point = Just v | otherwise = Nothing -mDelistPools :: [PoolId] -> ModelOp () -mDelistPools = modify #delisted . const . Set.fromList +mPutDelistedPools :: [PoolId] -> ModelOp () +mPutDelistedPools = modify #delisted . const . Set.fromList mReadDelistedPools :: ModelOp [PoolId] mReadDelistedPools = Set.toList <$> get #delisted diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index c5b7d85ad8f..dd9b292d7d7 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -491,7 +491,7 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ BlockSlot >. point ] -- TODO: remove dangling metadata no longer attached to a pool - delistPools pools = do + putDelistedPools pools = do deleteWhere ([] :: [Filter PoolDelistment]) insertMany_ $ fmap PoolDelistment pools diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index 46fe693e440..adb427ffed9 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -223,10 +223,10 @@ properties = do (property . prop_modSettingsReadSettings) it "putLastMetadataGC . readLastMetadataGC == id" (property . prop_putLastMetadataGCReadLastMetadataGC) - it "delistPools >> readDelistedPools shows the pool as delisted" - (property . prop_delistPools) + it "putDelistedPools >> readDelistedPools shows the pool as delisted" + (property . prop_putDelistedPools) it "delisting a pools persists even if a new certificate is registered" - (property . prop_delistPoolsPersists) + (property . prop_putDelistedPoolsPersists) {------------------------------------------------------------------------------- Properties @@ -1459,11 +1459,11 @@ prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do assertWith "Setting sync time and reading afterwards works" (time == Just posixTime) -prop_delistPools +prop_putDelistedPools :: DBLayer IO -> [(CertificatePublicationTime, PoolRegistrationCertificate)] -> Property -prop_delistPools DBLayer {..} entries = +prop_putDelistedPools DBLayer {..} entries = monadicIO (setup >> prop) where setup = run $ atomically cleanDB @@ -1486,7 +1486,7 @@ prop_delistPools DBLayer {..} entries = -- delist pools let poolsToDelist = L.sort $ fmap (view #poolId . snd) entriesIn - run $ atomically $ delistPools poolsToDelist + run $ atomically $ putDelistedPools poolsToDelist poolsDelisted <- L.sort <$> run (atomically readDelistedPools) monitor $ counterexample $ unlines [ "Pools to delist: " @@ -1497,11 +1497,11 @@ prop_delistPools DBLayer {..} entries = assertWith "poolsToDelist == poolsDelisted" $ poolsToDelist == poolsDelisted -prop_delistPoolsPersists +prop_putDelistedPoolsPersists :: DBLayer IO -> (CertificatePublicationTime, PoolRegistrationCertificate) -> Property -prop_delistPoolsPersists DBLayer {..} cert = +prop_putDelistedPoolsPersists DBLayer {..} cert = monadicIO (setup >> prop) where setup = run $ atomically cleanDB @@ -1510,7 +1510,7 @@ prop_delistPoolsPersists DBLayer {..} cert = let poolid = view #poolId . snd $ cert -- delist pool - run $ atomically $ delistPools [poolid] + run $ atomically $ putDelistedPools [poolid] delisted <- run $ atomically readDelistedPools let expected = [poolid] assertWith "expected == delisted" diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index b4a34e79a6f..09a4c8b4968 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -830,7 +830,7 @@ gcDelistedPools gcStatus tr DBLayer{..} fetchDelisted = forever $ do STM.atomically $ writeTVar gcStatus (HasRun currentTime) atomically $ do putLastMetadataGC currentTime - delistPools delistedPools + putDelistedPools delistedPools -- Sleep for 60 seconds. This is useful in case -- something else is modifying the last sync time From 08df4e12aab60360e523c41f72ecb980e79ac52c Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 13:04:18 +0000 Subject: [PATCH 23/29] Update `prop_putDelistedPools` to check for overwriting. In particular, we check that 'putDelistedPools' completely overwrites the existing set every time. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513390601 --- .../test/unit/Cardano/Pool/DB/Properties.hs | 61 ++++++++++--------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index adb427ffed9..3153a4448c7 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -1459,43 +1459,48 @@ prop_putLastMetadataGCReadLastMetadataGC DBLayer{..} posixTime = do assertWith "Setting sync time and reading afterwards works" (time == Just posixTime) +-- Check that 'putDelistedPools' completely overwrites the existing set +-- of delisted pools every time: +-- prop_putDelistedPools :: DBLayer IO - -> [(CertificatePublicationTime, PoolRegistrationCertificate)] + -> [PoolId] + -> [PoolId] -> Property -prop_putDelistedPools DBLayer {..} entries = - monadicIO (setup >> prop) +prop_putDelistedPools DBLayer {..} pools1 pools2 = + checkCoverage + $ cover 2 (Set.size poolSet1 == 0) + "number of pools in set #1 = 0" + $ cover 2 (Set.size poolSet1 == 1) + "number of pools in set #1 = 1" + $ cover 2 (Set.size poolSet1 > 1) + "number of pools in set #1 > 1" + $ cover 2 (Set.size poolSet2 == 0) + "number of pools in set #2 = 0" + $ cover 2 (Set.size poolSet2 == 1) + "number of pools in set #2 = 1" + $ cover 2 (Set.size poolSet2 > 1) + "number of pools in set #2 > 1" + $ monadicIO (setup >> prop) where - setup = run $ atomically cleanDB - entriesIn = L.sort entries - prop = do - run $ atomically $ - mapM_ (uncurry putPoolRegistration) entriesIn - entriesOut <- run . atomically $ L.sort . catMaybes - <$> mapM (readPoolRegistration . view #poolId . snd) entries + poolSet1 = Set.fromList pools1 `Set.difference` Set.fromList pools2 + poolSet2 = Set.fromList pools2 `Set.difference` Set.fromList pools1 - monitor $ counterexample $ unlines - [ "Written into DB: " - , show entriesIn - , "Read from DB: " - , show entriesOut - ] - - assertWith "entriesIn == entriesOut" - $ entriesIn == entriesOut + setup = run $ atomically cleanDB - -- delist pools - let poolsToDelist = L.sort $ fmap (view #poolId . snd) entriesIn - run $ atomically $ putDelistedPools poolsToDelist - poolsDelisted <- L.sort <$> run (atomically readDelistedPools) + prop = forM_ [poolSet1, poolSet2] $ \poolsToMarkAsDelisted -> do + run $ atomically $ putDelistedPools $ + Set.toList poolsToMarkAsDelisted + poolsActuallyDelisted <- Set.fromList . L.sort <$> + run (atomically readDelistedPools) monitor $ counterexample $ unlines - [ "Pools to delist: " - , pretty poolsToDelist + [ "Pools to mark as delisted: " + , pretty $ Set.toList poolsToMarkAsDelisted , "Pools actually delisted: " - , pretty poolsDelisted + , pretty $ Set.toList poolsActuallyDelisted ] - assertWith "poolsToDelist == poolsDelisted" - $ poolsToDelist == poolsDelisted + assertWith "poolsToMarkAsDelisted == poolsActuallyDelisted" + $ poolsToMarkAsDelisted == poolsActuallyDelisted prop_putDelistedPoolsPersists :: DBLayer IO From 299545060d115b263c6793090c07ae54a7ddcd3a Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 13:11:48 +0000 Subject: [PATCH 24/29] Remove `prop_putDelistedPoolsPersists`. This test no longer makes sense, as delisted pools are no longer stored in the `pool_registration` table. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513387397 --- .../test/unit/Cardano/Pool/DB/Properties.hs | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs index 3153a4448c7..185f60bbd76 100644 --- a/lib/core/test/unit/Cardano/Pool/DB/Properties.hs +++ b/lib/core/test/unit/Cardano/Pool/DB/Properties.hs @@ -225,8 +225,6 @@ properties = do (property . prop_putLastMetadataGCReadLastMetadataGC) it "putDelistedPools >> readDelistedPools shows the pool as delisted" (property . prop_putDelistedPools) - it "delisting a pools persists even if a new certificate is registered" - (property . prop_putDelistedPoolsPersists) {------------------------------------------------------------------------------- Properties @@ -1502,39 +1500,6 @@ prop_putDelistedPools DBLayer {..} pools1 pools2 = assertWith "poolsToMarkAsDelisted == poolsActuallyDelisted" $ poolsToMarkAsDelisted == poolsActuallyDelisted -prop_putDelistedPoolsPersists - :: DBLayer IO - -> (CertificatePublicationTime, PoolRegistrationCertificate) - -> Property -prop_putDelistedPoolsPersists DBLayer {..} cert = - monadicIO (setup >> prop) - where - setup = run $ atomically cleanDB - prop = do - run $ atomically $ uncurry putPoolRegistration cert - - let poolid = view #poolId . snd $ cert - -- delist pool - run $ atomically $ putDelistedPools [poolid] - delisted <- run $ atomically readDelistedPools - let expected = [poolid] - assertWith "expected == delisted" - $ expected == delisted - - -- insert the cert again - run $ atomically - $ uncurry putPoolRegistration cert - delistedAgain <- run $ atomically readDelistedPools - - monitor $ counterexample $ unlines - [ "Expected: " - , show (Just expected) - , "Read from DB: " - , show delistedAgain - ] - assertWith "expected == delisted" - $ expected == delistedAgain - descSlotsPerPool :: Map PoolId [BlockHeader] -> Expectation descSlotsPerPool pools = do let checkIfDesc slots = From b564500b3ff4c5fa0b02fde2af602e07d8670e34 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Wed, 28 Oct 2020 13:35:11 +0000 Subject: [PATCH 25/29] Adjust `removePools` to not remove pools from the delisted set. In response to review feedback: https://github.com/input-output-hk/cardano-wallet/pull/2277#discussion_r513436734 --- .../Scenario/API/Shelley/StakePools.hs | 60 +++++++++---------- lib/core/src/Cardano/Pool/DB/Model.hs | 2 - lib/core/src/Cardano/Pool/DB/Sqlite.hs | 1 - lib/core/src/Cardano/Wallet/Api.hs | 3 +- lib/core/src/Cardano/Wallet/Api/Client.hs | 3 +- lib/core/src/Cardano/Wallet/Api/Types.hs | 12 ---- .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 26 -------- .../Cardano/Wallet/Jormungandr/Api/Server.hs | 8 +-- .../Cardano/Wallet/Jormungandr/ApiSpec.hs | 6 -- .../Cardano/Wallet/Shelley/Compatibility.hs | 5 +- .../src/Cardano/Wallet/Shelley/Pools.hs | 13 ++-- specifications/api/swagger.yaml | 29 ++------- 12 files changed, 46 insertions(+), 122 deletions(-) diff --git a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs index b5f80c41a01..14df6e8aa60 100644 --- a/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs +++ b/lib/core-integration/src/Test/Integration/Scenario/API/Shelley/StakePools.hs @@ -17,7 +17,6 @@ import Prelude import Cardano.Wallet.Api.Types ( ApiCertificate (JoinPool, QuitPool, RegisterRewardAccount) - , ApiListStakePools (..) , ApiStakePool , ApiT (..) , ApiTransaction @@ -51,8 +50,6 @@ import Control.Monad.IO.Class ( liftIO ) import Control.Monad.Trans.Resource ( runResourceT ) -import Data.Bifunctor - ( second ) import Data.Function ( (&) ) import Data.Generics.Internal.VL.Lens @@ -144,8 +141,7 @@ spec :: forall n t. , PaymentAddress n ShelleyKey ) => SpecWith (Context t) spec = describe "SHELLEY_STAKE_POOLS" $ do - let listPools ctx stake = (second . second) (view #pools) - <$> request @(ApiListStakePools ApiStakePool) ctx + let listPools ctx stake = request @[ApiStakePool] ctx (Link.listStakePools stake) Default Empty it "STAKE_POOLS_JOIN_01 - Cannot join non-existent wallet" $ \ctx -> runResourceT $ do @@ -168,8 +164,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01 - \ \Cannot join existent stakepool with wrong password" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . view #pools . snd <$> unsafeRequest - @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd <$> unsafeRequest + @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, "Wrong Passphrase") >>= flip verify [ expectResponseCode HTTP.status403 @@ -183,8 +179,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do dest <- emptyWallet ctx -- Join Pool - pool:_ <- map (view #id) . view #pools . snd <$> - unsafeRequest @(ApiListStakePools ApiStakePool) ctx + pool:_ <- map (view #id) . snd <$> + unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (src, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -361,8 +357,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_02 - \ \Cannot join already joined stake pool" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -411,8 +407,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_QUIT_02 - Passphrase must be correct to quit" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status202 @@ -451,8 +447,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do (currentEpoch, _) <- getSlotParams ctx waitForNextEpoch ctx - pool1:pool2:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool1:pool2:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool1 (w, fixturePassphrase) >>= flip verify @@ -517,8 +513,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_04 - Rewards accumulate" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty -- Join a pool joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify @@ -566,8 +562,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do } |] w <- unsafeResponse <$> postWallet ctx payload - pool:_ <- map (view #id) . view #pools . snd <$> - unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd <$> + unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty eventually "wallet join a pool" $ do @@ -695,8 +691,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do $ it "Join/quit when already joined a pool" $ \ctx -> runResourceT $ do w <- fixtureWallet ctx - pool1:pool2:_ <- map (view #id) . view #pools . snd <$> - unsafeRequest @(ApiListStakePools ApiStakePool) + pool1:pool2:_ <- map (view #id) . snd <$> + unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty liftIO $ joinStakePool @n ctx pool1 (w, fixturePassphrase) >>= flip verify @@ -765,8 +761,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I can join if I have just the right amount" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx] - pool:_ <- map (view #id) . view #pools . snd <$> - unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd <$> + unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase)>>= flip verify [ expectResponseCode HTTP.status202 @@ -777,8 +773,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do it "STAKE_POOLS_JOIN_01x - \ \I cannot join if I have not enough fee to cover" $ \ctx -> runResourceT $ do w <- fixtureWalletWith @n ctx [costOfJoining ctx + depositAmt ctx - 1] - pool:_ <- map (view #id) . view #pools . snd <$> - unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd <$> + unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify [ expectResponseCode HTTP.status403 @@ -800,8 +796,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do ] w <- fixtureWalletWith @n ctx initBalance - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify @@ -837,8 +833,8 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do let initBalance = [ costOfJoining ctx + depositAmt ctx ] w <- fixtureWalletWith @n ctx initBalance - pool:_ <- map (view #id) . view #pools . snd - <$> unsafeRequest @(ApiListStakePools ApiStakePool) + pool:_ <- map (view #id) . snd + <$> unsafeRequest @[ApiStakePool] ctx (Link.listStakePools arbitraryStake) Empty joinStakePool @n ctx pool (w, fixturePassphrase) >>= flip verify @@ -1008,7 +1004,7 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do rewardsStakeBig .> rewardsStakeSmall it "STAKE_POOLS_LIST_05 - Fails without query parameter" $ \ctx -> runResourceT $ do - r <- request @(ApiListStakePools ApiStakePool) ctx + r <- request @[ApiStakePool] ctx (Link.listStakePools Nothing) Default Empty expectResponseCode HTTP.status400 r @@ -1016,11 +1012,11 @@ spec = describe "SHELLEY_STAKE_POOLS" $ do \NonMyopicMemberRewards are 0 when stake is 0" $ \ctx -> runResourceT $ do liftIO $ pendingWith "This assumption seems false, for some reasons..." let stake = Just $ Coin 0 - r <- request @(ApiListStakePools ApiStakePool) + r <- request @[ApiStakePool] ctx (Link.listStakePools stake) Default Empty expectResponseCode HTTP.status200 r - verify ((second . second) (view #pools) r) + verify r [ expectListSize 3 , expectListField 0 (#metrics . #nonMyopicMemberRewards) (`shouldBe` Quantity 0) diff --git a/lib/core/src/Cardano/Pool/DB/Model.hs b/lib/core/src/Cardano/Pool/DB/Model.hs index 5275a1b0e6d..658ea3f5449 100644 --- a/lib/core/src/Cardano/Pool/DB/Model.hs +++ b/lib/core/src/Cardano/Pool/DB/Model.hs @@ -449,8 +449,6 @@ mRemovePools poolsToRemove = do $ Map.filterWithKey $ \(_, p) _ -> retain p modify #retirements $ Map.filterWithKey $ \(_, p) _ -> retain p - modify #delisted - $ Set.filter retain where retain p = p `Set.notMember` poolsToRemoveSet poolsToRemoveSet = Set.fromList poolsToRemove diff --git a/lib/core/src/Cardano/Pool/DB/Sqlite.hs b/lib/core/src/Cardano/Pool/DB/Sqlite.hs index dd9b292d7d7..17d778d5ca9 100644 --- a/lib/core/src/Cardano/Pool/DB/Sqlite.hs +++ b/lib/core/src/Cardano/Pool/DB/Sqlite.hs @@ -505,7 +505,6 @@ newDBLayer trace fp timeInterpreter = do deleteWhere [ PoolRegistrationPoolId ==. pool ] deleteWhere [ PoolRetirementPoolId ==. pool ] deleteWhere [ StakeDistributionPoolId ==. pool ] - deleteWhere [ DelistedPoolId ==. pool ] removeRetiredPools epoch = bracketTracer traceOuter action diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index 795337a0264..4c1022319cd 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -125,7 +125,6 @@ import Cardano.Wallet.Api.Types , ApiByronWallet , ApiCoinSelectionT , ApiFee - , ApiListStakePools , ApiMaintenanceAction , ApiNetworkClock , ApiNetworkInformation @@ -454,7 +453,7 @@ type StakePools n apiPool = -- | https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/listStakePools type ListStakePools apiPool = "stake-pools" :> QueryParam "stake" (ApiT Coin) - :> Get '[JSON] (ApiListStakePools apiPool) + :> Get '[JSON] [apiPool] type MetadataGCStatus = "stake-pools" :> "metadata-gc-status" diff --git a/lib/core/src/Cardano/Wallet/Api/Client.hs b/lib/core/src/Cardano/Wallet/Api/Client.hs index 0eebaed6833..ec87a0dad31 100644 --- a/lib/core/src/Cardano/Wallet/Api/Client.hs +++ b/lib/core/src/Cardano/Wallet/Api/Client.hs @@ -64,7 +64,6 @@ import Cardano.Wallet.Api.Types , ApiByronWallet , ApiCoinSelectionT , ApiFee - , ApiListStakePools , ApiNetworkClock , ApiNetworkInformation (..) , ApiNetworkParameters @@ -190,7 +189,7 @@ data AddressClient = AddressClient data StakePoolClient apiPool = StakePoolClient { listPools - :: Maybe (ApiT Coin) -> ClientM (ApiListStakePools apiPool) + :: Maybe (ApiT Coin) -> ClientM [apiPool] , joinStakePool :: ApiPoolId -> ApiT WalletId diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index 99705cd4973..78f619291ad 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -50,7 +50,6 @@ module Cardano.Wallet.Api.Types , ApiAddressData (..) , AnyAddress (..) , AnyAddressType (..) - , ApiListStakePools (..) , ApiCertificate (..) , ApiEpochInfo (..) , ApiSelectCoinsData (..) @@ -415,12 +414,6 @@ newtype ApiMaintenanceAction = ApiMaintenanceAction { maintenanceAction :: MaintenanceAction } deriving (Eq, Generic, Show) -data ApiListStakePools apiPool = ApiListStakePools - { pools :: [apiPool] - , gcStatus :: !(Maybe (ApiT PoolMetadataGCStatus)) - -- 'Nothing' in the case of Jormungandr. - } deriving (Eq, Generic, Show) - data ApiAddress (n :: NetworkDiscriminant) = ApiAddress { id :: !(ApiT Address, Proxy n) , state :: !(ApiT AddressState) @@ -1432,11 +1425,6 @@ instance ToJSON (ApiT PoolMetadataGCStatus) where object [ "status" .= String "has_run" , "last_run" .= ApiT (Iso8601Time (posixSecondsToUTCTime gctime)) ] -instance FromJSON a => FromJSON (ApiListStakePools a) where - parseJSON = genericParseJSON defaultRecordTypeOptions -instance ToJSON a => ToJSON (ApiListStakePools a) where - toJSON = genericToJSON defaultRecordTypeOptions - instance FromJSON ByronWalletPutPassphraseData where parseJSON = genericParseJSON defaultRecordTypeOptions instance ToJSON ByronWalletPutPassphraseData where diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 57730e31a96..508d8689ef9 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -40,8 +40,6 @@ import Cardano.Mnemonic , entropyToMnemonic , mkEntropy ) -import Cardano.Pool.Metadata - ( SMASHPoolId (..) ) import Cardano.Wallet.Api ( Api ) import Cardano.Wallet.Api.Types @@ -65,7 +63,6 @@ import Cardano.Wallet.Api.Types , ApiEpochInfo (..) , ApiErrorCode (..) , ApiFee (..) - , ApiListStakePools (..) , ApiMaintenanceAction (..) , ApiMnemonicT (..) , ApiNetworkClock (..) @@ -356,7 +353,6 @@ spec = do jsonRoundtripAndGolden $ Proxy @ApiCredential jsonRoundtripAndGolden $ Proxy @ApiAddressData jsonRoundtripAndGolden $ Proxy @(ApiT DerivationIndex) - jsonRoundtripAndGolden $ Proxy @(ApiListStakePools Api.ApiStakePool) jsonRoundtripAndGolden $ Proxy @(ApiT PoolMetadataGCStatus) jsonRoundtripAndGolden $ Proxy @ApiEpochInfo jsonRoundtripAndGolden $ Proxy @(ApiSelectCoinsData ('Testnet 0)) @@ -398,7 +394,6 @@ spec = do jsonRoundtripAndGolden $ Proxy @SomeByronWalletPostData jsonRoundtripAndGolden $ Proxy @ByronWalletFromXPrvPostData jsonRoundtripAndGolden $ Proxy @WalletPutData - jsonRoundtripAndGolden $ Proxy @SMASHPoolId jsonRoundtripAndGolden $ Proxy @SettingsPutData jsonRoundtripAndGolden $ Proxy @WalletPutPassphraseData jsonRoundtripAndGolden $ Proxy @ByronWalletPutPassphraseData @@ -1196,20 +1191,6 @@ instance Arbitrary NominalDiffTime where instance Arbitrary Iso8601Time where arbitrary = Iso8601Time <$> genUniformTime -instance Arbitrary SMASHPoolId where - arbitrary = elements $ fmap SMASHPoolId - ["eb7832cb137b6d20ee2c3f4892d4938a734326ca18122f0d21e5f587" - ,"3d9aab7ac059512c948fe8bb773aad076c5e8b3941fa4fbcdff34597" - ,"8b5060d437571746f57cbd27dab89eb8e6045a554919dc472748920c" - ,"74d3e2c4d640dd181def5a5b6b22308b5a835b98ccfb7143d52bd150" - ,"a6906f8ecfcc437375bd8763120ac5c96ae4796c8f78f549193e7b36" - ,"5ee7591bf30eaa4f5dce70b4a676eb02d5be8012d188f04fe3beffb0" - ,"961d329fba1807eef89db767ba405aec0c5426501c6b1df20f5c0995" - ,"ff5b4952dd7734f07e4905dea64fa230fb75f7b2d603d154d9ff1d43" - ,"50927e8ecd44cb2d4302af9c5ae9a77c8ad7d8be331a24c4e5406f82" - ,"81017236ed16380bb96bd02bbd452541f3e5694e14196f65e37ce502" - ] - instance Arbitrary PoolMetadataGCStatus where arbitrary = genericArbitrary shrink = genericShrink @@ -1341,10 +1322,6 @@ instance Arbitrary PoolId where InfiniteList bytes _ <- arbitrary return $ PoolId $ BS.pack $ take 28 bytes -instance Arbitrary (ApiListStakePools ApiStakePool) where - arbitrary = ApiListStakePools <$> arbitrary - <*> (Just <$> arbitrary) -- only for Jormungandr this can be Nothing - instance Arbitrary ApiStakePool where arbitrary = ApiStakePool <$> arbitrary @@ -1927,9 +1904,6 @@ instance ToSchema (ApiT Settings) where instance ToSchema (ApiT PoolMetadataGCStatus) where declareNamedSchema _ = declareSchemaForDefinition "ApiGCStatus" -instance ToSchema (Api.ApiListStakePools Api.ApiStakePool) where - declareNamedSchema _ = declareSchemaForDefinition "ApiListStakePools" - instance ToSchema WalletPutPassphraseData where declareNamedSchema _ = declareSchemaForDefinition "ApiWalletPutPassphraseData" diff --git a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs index e816d40a4fb..65ce9ab8b3b 100644 --- a/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs +++ b/lib/jormungandr/src/Cardano/Wallet/Jormungandr/Api/Server.hs @@ -95,7 +95,6 @@ import Cardano.Wallet.Api.Server ) import Cardano.Wallet.Api.Types ( ApiErrorCode (..) - , ApiListStakePools (..) , ApiSelectCoinsData (..) , ApiT (..) , SomeByronWalletPostData (..) @@ -326,10 +325,9 @@ listPools => StakePoolLayer e IO -> Maybe (ApiT Coin) -- ^ Not needed, but there for consistency with haskell node. - -> Handler (ApiListStakePools ApiStakePool) -listPools spl _walletId = do - ps <- liftHandler $ map (uncurry mkApiStakePool) <$> listStakePools spl - pure (ApiListStakePools ps Nothing) + -> Handler [ApiStakePool] +listPools spl _walletId = + liftHandler $ map (uncurry mkApiStakePool) <$> listStakePools spl where mkApiStakePool :: StakePool diff --git a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs index 3233125e7b0..435c9649b71 100644 --- a/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs +++ b/lib/jormungandr/test/unit/Cardano/Wallet/Jormungandr/ApiSpec.hs @@ -282,9 +282,6 @@ instance Arbitrary ApiStakePoolMetrics where blocks <- Quantity . fromIntegral <$> choose (1::Integer, 22_600_000) pure $ ApiStakePoolMetrics stakes blocks -instance Arbitrary (W.ApiListStakePools ApiStakePool) where - arbitrary = W.ApiListStakePools <$> arbitrary <*> pure Nothing - instance Arbitrary ApiStakePool where arbitrary = ApiStakePool <$> arbitrary @@ -343,9 +340,6 @@ instance ToSchema ApiStakePool where instance ToSchema ApiStakePoolMetrics where declareNamedSchema _ = declareSchemaForDefinition "ApiJormungandrStakePoolMetrics" -instance ToSchema (W.ApiListStakePools ApiStakePool) where - declareNamedSchema _ = declareSchemaForDefinition "ApiJormungandrListStakePools" - {------------------------------------------------------------------------------- Test data -------------------------------------------------------------------------------} diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs index e46ababb2ad..02d50b1aa11 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs @@ -1088,8 +1088,11 @@ inspectAddress = where inspect :: ByteString -> Either TextDecodingError Aeson.Value inspect = maybe (Left errMalformedAddress) Right - . inspectShelleyAddress Nothing + . inspectShelleyAddress mRootPub . unsafeMkAddress + -- TODO: It's possible to inspect a byron address, given a root XPub. + -- However, this is not yet exposed by the API. + mRootPub = Nothing toHDPayloadAddress :: W.Address -> Maybe Byron.HDAddressPayload toHDPayloadAddress (W.Address addr) = do diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 09a4c8b4968..93471c4adc3 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -52,7 +52,7 @@ import Cardano.Pool.Metadata import Cardano.Wallet ( ErrListPools (..) ) import Cardano.Wallet.Api.Types - ( ApiListStakePools (..), ApiT (..) ) + ( ApiT (..) ) import Cardano.Wallet.Byron.Compatibility ( toByronBlockHeader ) import Cardano.Wallet.Network @@ -206,7 +206,7 @@ data StakePoolLayer = StakePoolLayer :: EpochNo -- Exclude all pools that retired in or before this epoch. -> Coin - -> ExceptT ErrListPools IO (ApiListStakePools Api.ApiStakePool) + -> ExceptT ErrListPools IO [Api.ApiStakePool] , forceMetadataGC :: IO () @@ -274,7 +274,7 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do :: EpochNo -- Exclude all pools that retired in or before this epoch. -> Coin - -> ExceptT ErrListPools IO (ApiListStakePools Api.ApiStakePool) + -> ExceptT ErrListPools IO [Api.ApiStakePool] _listPools currentEpoch userStake = do tip <- withExceptT fromErrCurrentNodeTip $ currentNodeTip nl rawLsqData <- mapExceptT (fmap (first ErrListPoolsNetworkError)) @@ -294,10 +294,7 @@ newStakePoolLayer gcStatus nl db@DBLayer {..} worker = do case r of Left e@(PastHorizon{}) -> throwE (ErrListPoolsPastHorizonException e) - Right r' -> do - gcStatus' <- liftIO $ readTVarIO gcStatus - pure - $ ApiListStakePools r' $ Just $ ApiT gcStatus' + Right r' -> pure r' where fromErrCurrentNodeTip :: ErrCurrentNodeTip -> ErrListPools fromErrCurrentNodeTip = \case @@ -796,7 +793,7 @@ monitorMetadata gcStatus tr sp db@(DBLayer{..}) = do blockFrequency = ceiling (1/f) * toMicroSecond slotLength where toMicroSecond = (`div` 1000000) . fromEnum - slotLength = unSlotLength $ getSlotLength gp + slotLength = unSlotLength $ getSlotLength sp f = unActiveSlotCoefficient (getActiveSlotCoefficient sp) onExit diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 4ae36265faf..23693c0cf4b 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1327,18 +1327,6 @@ components: delisted: type: boolean - ApiListStakePools: &ApiListStakePools - type: object - required: - - pools - - gc_status - properties: - gc_status: - <<: *ApiGCStatus - pools: - type: array - items: *ApiStakePool - ApiJormungandrStakePool: &ApiJormungandrStakePool type: object required: @@ -1359,15 +1347,6 @@ components: saturation: *jormungandrStakePoolSaturation desirability: *stakePoolDesirability - ApiJormungandrListStakePools: &ApiJormungandrListStakePools - type: object - required: - - pools - properties: - pools: - type: array - items: *ApiJormungandrStakePool - ApiFee: &ApiFee type: object required: @@ -3065,10 +3044,10 @@ x-responsesListStakePools: &responsesListStakePools application/json: schema: oneOf: - - <<: *ApiListStakePools - title: "cardano-node stake pools" - - <<: *ApiJormungandrListStakePools - title: "jormungandr stake pools" + - type: array + items: *ApiStakePool + - type: array + items: *ApiJormungandrStakePool x-responsesPoolMaintenance: &responsesPoolMaintenance <<: *responsesErr405 From 0b8df37af277ea74db7626f79856c74d159ac7f5 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 9 Nov 2020 14:24:02 +0100 Subject: [PATCH 26/29] Move maintenance-actions to its own endpoint --- lib/core/src/Cardano/Wallet/Api.hs | 1 + specifications/api/swagger.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index 4c1022319cd..7e07a793094 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -482,6 +482,7 @@ type DelegationFee = "wallets" :> Get '[JSON] ApiFee type PoolMaintenance = "stake-pools" + :> "maintenance-actions" :> ReqBody '[JSON] ApiMaintenanceAction :> PostNoContent diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 23693c0cf4b..732755f2593 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -3507,6 +3507,7 @@ paths: - *parametersIntendedStakeAmount responses: *responsesListStakePools + /stake-pools/maintenance-actions: post: operationId: poolMaintenance tags: ["Stake Pools"] From 4a703625d8aeb93257c971f0e882f48173cdec73 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 9 Nov 2020 14:24:43 +0100 Subject: [PATCH 27/29] Fix swagger definition --- specifications/api/swagger.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 732755f2593..206ca0f2522 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -878,8 +878,6 @@ x-stakePoolMetadata: &stakePoolMetadata type: string format: uri example: https://iohk.io - delisted: - type: boolean x-stakePoolRetirement: &stakePoolRetirement <<: *epochInfo @@ -3050,7 +3048,6 @@ x-responsesListStakePools: &responsesListStakePools items: *ApiJormungandrStakePool x-responsesPoolMaintenance: &responsesPoolMaintenance - <<: *responsesErr405 <<: *responsesErr404 204: description: No Content From 105ec6a870e1934da929d02b5b248924fd0fa0c0 Mon Sep 17 00:00:00 2001 From: IOHK Date: Fri, 6 Nov 2020 17:10:42 +0000 Subject: [PATCH 28/29] Regenerate nix --- nix/.stack.nix/cardano-wallet-core.nix | 2 +- nix/.stack.nix/cardano-wallet.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nix/.stack.nix/cardano-wallet-core.nix b/nix/.stack.nix/cardano-wallet-core.nix index ed9cf203cac..b8d3aac8ee7 100644 --- a/nix/.stack.nix/cardano-wallet-core.nix +++ b/nix/.stack.nix/cardano-wallet-core.nix @@ -90,7 +90,7 @@ (hsPkgs."statistics" or (errorHandler.buildDepError "statistics")) (hsPkgs."stm" or (errorHandler.buildDepError "stm")) (hsPkgs."streaming-commons" or (errorHandler.buildDepError "streaming-commons")) - (hsPkgs."string-qq" or (errorHandler.buildDepError "string-qq")) + (hsPkgs."string-interpolate" or (errorHandler.buildDepError "string-interpolate")) (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) (hsPkgs."text" or (errorHandler.buildDepError "text")) (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) diff --git a/nix/.stack.nix/cardano-wallet.nix b/nix/.stack.nix/cardano-wallet.nix index 03a3b8cbf7e..fc987f4e09e 100644 --- a/nix/.stack.nix/cardano-wallet.nix +++ b/nix/.stack.nix/cardano-wallet.nix @@ -60,6 +60,7 @@ (hsPkgs."memory" or (errorHandler.buildDepError "memory")) (hsPkgs."network" or (errorHandler.buildDepError "network")) (hsPkgs."network-mux" or (errorHandler.buildDepError "network-mux")) + (hsPkgs."network-uri" or (errorHandler.buildDepError "network-uri")) (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) (hsPkgs."ouroboros-consensus" or (errorHandler.buildDepError "ouroboros-consensus")) (hsPkgs."ouroboros-consensus-byron" or (errorHandler.buildDepError "ouroboros-consensus-byron")) From 64898078cb2054196692a5ba4d42e1638078178e Mon Sep 17 00:00:00 2001 From: KtorZ Date: Tue, 10 Nov 2020 10:54:26 +0100 Subject: [PATCH 29/29] unify gcPoolStatus and maintenance action for a cleaner API It was a bit awkward to have two completely distinct endpoints for this with different paths, whereas they related to exactly the same thing. This commit makes the API a bit more consistent by wrapping the `gcPoolStatus` inside a `maintenance action` object. So that, the API now offers two dual endpoints: - post maintenance action - get maintenance action There's only one maintenance action available at this stage. --- lib/core/src/Cardano/Wallet/Api.hs | 30 +- lib/core/src/Cardano/Wallet/Api/Client.hs | 2 + lib/core/src/Cardano/Wallet/Api/Types.hs | 25 +- .../Wallet/Api/ApiMaintenanceAction.json | 61 +++ .../Api/ApiMaintenanceActionPostData.json | 35 ++ .../data/Cardano/Wallet/Api/ApiStakePool.json | 485 ++++++++++++------ .../test/unit/Cardano/Wallet/Api/Malformed.hs | 4 +- .../test/unit/Cardano/Wallet/Api/TypesSpec.hs | 19 +- .../src/Cardano/Wallet/Shelley/Api/Server.hs | 17 +- .../src/Cardano/Wallet/Shelley/Pools.hs | 6 +- specifications/api/swagger.yaml | 111 ++-- 11 files changed, 574 insertions(+), 221 deletions(-) create mode 100644 lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceAction.json create mode 100644 lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceActionPostData.json diff --git a/lib/core/src/Cardano/Wallet/Api.hs b/lib/core/src/Cardano/Wallet/Api.hs index 7e07a793094..369b398a53f 100644 --- a/lib/core/src/Cardano/Wallet/Api.hs +++ b/lib/core/src/Cardano/Wallet/Api.hs @@ -50,10 +50,11 @@ module Cardano.Wallet.Api , StakePools , ListStakePools - , MetadataGCStatus , JoinStakePool , QuitStakePool , DelegationFee + , PostPoolMaintenance + , GetPoolMaintenance , ShelleyMigrations , MigrateShelleyWallet @@ -61,8 +62,8 @@ module Cardano.Wallet.Api -- * Settings , Settings - , PutSettings - , GetSettings + , PutSettings + , GetSettings -- * Byron , ByronWallets @@ -126,6 +127,7 @@ import Cardano.Wallet.Api.Types , ApiCoinSelectionT , ApiFee , ApiMaintenanceAction + , ApiMaintenanceActionPostData , ApiNetworkClock , ApiNetworkInformation , ApiNetworkParameters @@ -168,7 +170,6 @@ import Cardano.Wallet.Primitive.Types , Block , Coin (..) , NetworkParameters - , PoolMetadataGCStatus (..) , SortOrder (..) , WalletId (..) ) @@ -205,7 +206,6 @@ import Servant.API.Verbs , Post , PostAccepted , PostCreated - , PostNoContent , Put , PutAccepted , PutNoContent @@ -447,18 +447,14 @@ type StakePools n apiPool = :<|> JoinStakePool n :<|> QuitStakePool n :<|> DelegationFee - :<|> PoolMaintenance - :<|> MetadataGCStatus + :<|> PostPoolMaintenance + :<|> GetPoolMaintenance -- | https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/listStakePools type ListStakePools apiPool = "stake-pools" :> QueryParam "stake" (ApiT Coin) :> Get '[JSON] [apiPool] -type MetadataGCStatus = "stake-pools" - :> "metadata-gc-status" - :> Get '[JSON] (ApiT PoolMetadataGCStatus) - -- | https://input-output-hk.github.io/cardano-wallet/api/#operation/joinStakePool type JoinStakePool n = "stake-pools" :> Capture "stakePoolId" ApiPoolId @@ -481,10 +477,16 @@ type DelegationFee = "wallets" :> "delegation-fees" :> Get '[JSON] ApiFee -type PoolMaintenance = "stake-pools" +-- | https://input-output-hk.github.io/cardano-wallet/api/#operation/postPoolMaintenance +type PostPoolMaintenance = "stake-pools" + :> "maintenance-actions" + :> ReqBody '[JSON] ApiMaintenanceActionPostData + :> Post '[JSON] ApiMaintenanceAction + +-- | https://input-output-hk.github.io/cardano-wallet/api/#operation/getPoolMaintenance +type GetPoolMaintenance = "stake-pools" :> "maintenance-actions" - :> ReqBody '[JSON] ApiMaintenanceAction - :> PostNoContent + :> Get '[JSON] ApiMaintenanceAction {------------------------------------------------------------------------------- Settings diff --git a/lib/core/src/Cardano/Wallet/Api/Client.hs b/lib/core/src/Cardano/Wallet/Api/Client.hs index ec87a0dad31..c750d678a38 100644 --- a/lib/core/src/Cardano/Wallet/Api/Client.hs +++ b/lib/core/src/Cardano/Wallet/Api/Client.hs @@ -366,6 +366,8 @@ stakePoolClient = :<|> _joinStakePool :<|> _quitStakePool :<|> _delegationFee + :<|> _postPoolMaintenance + :<|> _getPoolMaintenance = client (Proxy @("v2" :> StakePools Aeson.Value apiPool)) in StakePoolClient diff --git a/lib/core/src/Cardano/Wallet/Api/Types.hs b/lib/core/src/Cardano/Wallet/Api/Types.hs index 78f619291ad..2f028d48870 100644 --- a/lib/core/src/Cardano/Wallet/Api/Types.hs +++ b/lib/core/src/Cardano/Wallet/Api/Types.hs @@ -61,6 +61,7 @@ module Cardano.Wallet.Api.Types , ApiCoinSelectionOutput (..) , ApiStakePool (..) , ApiStakePoolMetrics (..) + , ApiStakePoolFlag (..) , ApiWallet (..) , ApiWalletPassphrase (..) , ApiWalletPassphraseInfo (..) @@ -77,6 +78,7 @@ module Cardano.Wallet.Api.Types , ApiTransaction (..) , ApiWithdrawalPostData (..) , ApiMaintenanceAction (..) + , ApiMaintenanceActionPostData (..) , MaintenanceAction (..) , ApiFee (..) , ApiTxId (..) @@ -410,10 +412,14 @@ fmtAllowedWords = data MaintenanceAction = GcStakePools deriving (Eq, Generic, Show) -newtype ApiMaintenanceAction = ApiMaintenanceAction +newtype ApiMaintenanceActionPostData = ApiMaintenanceActionPostData { maintenanceAction :: MaintenanceAction } deriving (Eq, Generic, Show) +newtype ApiMaintenanceAction = ApiMaintenanceAction + { gcStakePools :: ApiT PoolMetadataGCStatus + } deriving (Eq, Generic, Show) + data ApiAddress (n :: NetworkDiscriminant) = ApiAddress { id :: !(ApiT Address, Proxy n) , state :: !(ApiT AddressState) @@ -555,9 +561,14 @@ data ApiStakePool = ApiStakePool , margin :: !(Quantity "percent" Percentage) , pledge :: !(Quantity "lovelace" Natural) , retirement :: !(Maybe ApiEpochInfo) - , delisted :: !Bool + , flags :: ![ApiStakePoolFlag] } deriving (Eq, Generic, Show) +data ApiStakePoolFlag + = Delisted + deriving stock (Eq, Generic, Show) + deriving anyclass NFData + data ApiStakePoolMetrics = ApiStakePoolMetrics { nonMyopicMemberRewards :: !(Quantity "lovelace" Natural) , relativeStake :: !(Quantity "percent" Percentage) @@ -1430,6 +1441,11 @@ instance FromJSON ByronWalletPutPassphraseData where instance ToJSON ByronWalletPutPassphraseData where toJSON = genericToJSON defaultRecordTypeOptions +instance FromJSON ApiMaintenanceActionPostData where + parseJSON = genericParseJSON defaultRecordTypeOptions +instance ToJSON ApiMaintenanceActionPostData where + toJSON = genericToJSON defaultRecordTypeOptions + instance FromJSON ApiMaintenanceAction where parseJSON = genericParseJSON defaultRecordTypeOptions instance ToJSON ApiMaintenanceAction where @@ -1600,6 +1616,11 @@ instance FromJSON ApiStakePoolMetrics where instance ToJSON ApiStakePoolMetrics where toJSON = genericToJSON defaultRecordTypeOptions +instance FromJSON ApiStakePoolFlag where + parseJSON = genericParseJSON defaultSumTypeOptions +instance ToJSON ApiStakePoolFlag where + toJSON = genericToJSON defaultSumTypeOptions + instance FromJSON (ApiT WalletName) where parseJSON = parseJSON >=> eitherToParser . bimap ShowFmt ApiT . fromText instance ToJSON (ApiT WalletName) where diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceAction.json b/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceAction.json new file mode 100644 index 00000000000..9e1357fd7b9 --- /dev/null +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceAction.json @@ -0,0 +1,61 @@ +{ + "seed": -9096659285789418454, + "samples": [ + { + "gc_stake_pools": { + "status": "has_run", + "last_run": "1887-02-07T15:59:58Z" + } + }, + { + "gc_stake_pools": { + "status": "restarting", + "last_run": "1895-01-25T13:15:15Z" + } + }, + { + "gc_stake_pools": { + "status": "restarting", + "last_run": "1873-08-31T03:33:04Z" + } + }, + { + "gc_stake_pools": { + "status": "not_started" + } + }, + { + "gc_stake_pools": { + "status": "not_started" + } + }, + { + "gc_stake_pools": { + "status": "restarting", + "last_run": "1864-06-09T06:48:03.138827934098Z" + } + }, + { + "gc_stake_pools": { + "status": "not_started" + } + }, + { + "gc_stake_pools": { + "status": "has_run", + "last_run": "1901-11-24T13:54:25Z" + } + }, + { + "gc_stake_pools": { + "status": "has_run", + "last_run": "1896-02-25T15:16:00Z" + } + }, + { + "gc_stake_pools": { + "status": "not_applicable" + } + } + ] +} \ No newline at end of file diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceActionPostData.json b/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceActionPostData.json new file mode 100644 index 00000000000..219b6ade5e1 --- /dev/null +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiMaintenanceActionPostData.json @@ -0,0 +1,35 @@ +{ + "seed": -940073206050741807, + "samples": [ + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + }, + { + "maintenance_action": "gc_stake_pools" + } + ] +} \ No newline at end of file diff --git a/lib/core/test/data/Cardano/Wallet/Api/ApiStakePool.json b/lib/core/test/data/Cardano/Wallet/Api/ApiStakePool.json index b3e94a31c8c..e222cd73d83 100644 --- a/lib/core/test/data/Cardano/Wallet/Api/ApiStakePool.json +++ b/lib/core/test/data/Cardano/Wallet/Api/ApiStakePool.json @@ -1,398 +1,591 @@ { - "seed": 8667568736628734356, + "seed": -4132539117587378523, "samples": [ { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 4.1071403845648105, + "saturation": 1.347474258087622e-2, "non_myopic_member_rewards": { - "quantity": 971736278287, + "quantity": 389762930128, "unit": "lovelace" }, "produced_blocks": { - "quantity": 861441, + "quantity": 8342542, "unit": "block" }, "relative_stake": { - "quantity": 52.99, + "quantity": 73.62, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1905-05-05T20:00:00Z", - "epoch_number": 28310 - }, "cost": { - "quantity": 234, + "quantity": 143, "unit": "lovelace" }, "margin": { - "quantity": 45.08, + "quantity": 74.1, "unit": "percent" }, "pledge": { - "quantity": 127, + "quantity": 123, "unit": "lovelace" }, - "delisted": false, "metadata": { - "homepage": "}[Phq򨖾𧱜6-l#wy\u0003꣔򒀨\u001e`񇏹o\u0019c񠚍>M\u0016\u001d\u000b󅹓\u0014򴉬onO", - "name": "\ndx𰲗񿅢m󉈩,T荣F)$O󻼼I:6P33m//EO\u0017A򗛤\u001aT", - "ticker": "lDG\u0011r" + "homepage": "򪏔fi@9Jq72􉿏y\u001a\u0007F", + "name": "Y𶸻p\n󑪊$󎙷\u001e2\u0019򼤺\u0000R>JF\u00024򣾜U7k=Vt7S𩬻𞼟򗀆!=3GjQpN\u0004", + "ticker": "z񜊑$z򫔄", + "description": "iF@,\u0000!񖅬󞉳\u0001󚩾IeT`򲌉M񟴙񘜮􈇒󫁮xK󁄢\u0017z8_?𰮧_l \u000e\u001e\t-*^'0u\r򱱺^k񢓱3\t\u000fAcD8uZ@\u0007I𯊓-򼫌񤮸&\u0003oC󠉄`𤬱OG(񿠝\r󇿣󲡳𐕕\u0007}毲񔪓k\u000e{KT\u0013\u0001\u000e\u001e\u0003c_󞒉񎖾`\u00001Xd~SH\u00199𱘎\u000b;w\u0003Vv񐉑𮇪bW!񟯆03𿰄\u0018nU𯝅\u0007t򫖺\u0008󊞛넇󨲹󵪌󿯵^" }, - "id": "pool15pvw2h7q43fkjt66nf5ezwn57ksxk3nqyds3yzk5a6jxss7t0d6" + "id": "pool16rqaujxmx4j0quwyzct9rdauvhm30ttrhncpcj4c9hzqxndf3ac" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 1.9695964314075094, + "saturation": 3.8837672493828688, "non_myopic_member_rewards": { - "quantity": 849281553646, + "quantity": 801057920191, "unit": "lovelace" }, "produced_blocks": { - "quantity": 15626410, + "quantity": 21889826, "unit": "block" }, "relative_stake": { - "quantity": 66.09, + "quantity": 22.66, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1899-12-14T22:50:04Z", - "epoch_number": 14402 + "epoch_start_time": "1881-07-25T04:00:00Z", + "epoch_number": 2951 }, "cost": { - "quantity": 126, + "quantity": 67, "unit": "lovelace" }, "margin": { - "quantity": 13.5, + "quantity": 9.67, "unit": "percent" }, "pledge": { - "quantity": 40, + "quantity": 203, "unit": "lovelace" }, - "delisted": true, "metadata": { - "homepage": "\u0002񎋫\u0007\u0019^\u0002_f]2.񥈒U\u001a`?沔(󌭳hH\u000fU={Gvz\r񓾽񿹅𖳖󷔩ᕷ7>򶠽C𾐎\u0003\u0016\u001c\u000e=\u000c\u0008\u0005G@-u^t+􄬤T\u0015\u0000`", - "name": "?y-\u0008p򜜅,\u000c[௹\u000c񢝵T񢀕񀄎sᛩ)Qj0/񸤥G/M\u001a", - "ticker": ">𯞔󣼗\"󂗆", - "description": "G󼤏+񩪣\u001f:D\u0010*_3p󖍓y􈧭񵞊\u0011𥎔𯒜򷌡\u001eI5\u0000?\u000b8򆓒" + "homepage": "K\u0004R9𡨭z<7Wu\u000b\\\"𴵻4񹭽󐴫l󿛛f`\u0018񉌹(\u0006\u0002/?a􆄓\tU\u0016G\u0005'?g넎kK\u000cM򃡆v񨛪󑌺EB򍔦򏊁S􀠪T\u000bl}s`񖈾\u0010\u0015j󁉿M񙅇,񙎌󚕆7Ikh󫹠\u0014O\u001f򳤥", + "name": "C\u0000򋛐v𲓻򓧨#2Q𝄺\u000bY𹼶m𲗡񳥥󉮳}Su򮐵{񂆢L\u0007", + "ticker": "9򗛽^􆋶򄈩" }, - "id": "pool1vg0uj4wswn6jztrxr83fleggxs8qn73zh637qplqdqfyuzj7m6m" + "id": "pool19vd9w4kgkzrpaxvykv2x5wa7pd6e07c64qrvkckk9fj5c7zzmuz" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 2.654499194014374, + "saturation": 2.2678498772463547, "non_myopic_member_rewards": { - "quantity": 679234505893, + "quantity": 916311513140, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6339247, + "quantity": 20949158, "unit": "block" }, "relative_stake": { - "quantity": 29.98, + "quantity": 47.99, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1879-06-30T04:24:38Z", - "epoch_number": 5230 + "epoch_start_time": "1894-11-16T03:37:27.329210709372Z", + "epoch_number": 26550 }, "cost": { - "quantity": 112, + "quantity": 20, "unit": "lovelace" }, "margin": { - "quantity": 92.9, + "quantity": 34.53, "unit": "percent" }, "pledge": { - "quantity": 6, + "quantity": 156, "unit": "lovelace" }, - "delisted": true, "metadata": { - "homepage": "\u0004tc\u0001\u0003󠇶𜂽OI\u000b7jA\r\u001f(x.\u0018\u000bw򜯟\tiIG󩱅򶡡𯒇G)𷃂򇲇󲷬R3\u0015Dm󃦉$\"S𦆅D𰗧񟁧󐱐\u0018\u001d\u0004Ev3", - "name": "\u000b/-8\u001fni\u0016Y򩽇\u0018\u000b𞪎\u0019.\u000el𻊵󳦍􂦨aM" + "homepage": "򫇂򨐵s'XH\nX\u0004G\t񨵄S\u0019I㝒BNL%򇮂U0󅐦9\u0007\u0011~So+\u0004", - "description": "񑣥Zh)\u0008󪡊\u0013\u0003U󑔞*qw\u0015󸁇v\u0017wBꁉ(q7󗢣$S=]𝀖󼓂󓍙B+8\u0005up0%C89󡚔󃂾\u0005oF)F\u0017򭛋LT`򑳍\u0000𑹙\r𵌨 󠼦Rw\u0006򭹺p񳎦q\"𭗎e8\u000bLX𙮴s|z&\u001dz=\"-\r\u001fx\"𰩵d<^%m󀏒!a\u0018\u0000:]𠊮\u0007G\u0010\u0018/\u001f񅩼𦡡\tF,\u001c񙠻\u001fM)G\u0007NKAR.Fp𽹃L󁷤.M\u0011 𲭳񌩼\u001f\u0005]񳘥N\u0019\u0012\u000c;􂣟\u0003\u0006\u000b%," }, - "id": "pool1an26acf94hyfkx5n2xset0jxdn56pdcc86e82cv476m3zam2v6q" + "id": "pool198e0usn343jw6xza34hcg5qd9m6ah7kn79pyhe5wdz6m536h6lc" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 4.497478417049241, + "saturation": 4.9370305129779055, "non_myopic_member_rewards": { - "quantity": 885638369003, + "quantity": 982002410599, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8721735, + "quantity": 182860, "unit": "block" }, "relative_stake": { - "quantity": 62.75, + "quantity": 46.11, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1860-01-07T12:53:29Z", - "epoch_number": 319 + "epoch_start_time": "1867-06-14T08:14:50Z", + "epoch_number": 27512 }, "cost": { - "quantity": 145, + "quantity": 213, "unit": "lovelace" }, "margin": { - "quantity": 20, + "quantity": 49.06, "unit": "percent" }, "pledge": { - "quantity": 174, + "quantity": 154, "unit": "lovelace" }, - "delisted": false, - "id": "pool1hwdmw9v8mn9s78rl84m6s8dzfaq7wtyqcc8k9uz7yd06u54q947" + "metadata": { + "homepage": "u񯫽U\u0008\u0006a񆧦\u0006\u0015>3󬌥^𓃷򽽈𖮩mh+U\u000e\u0018NJB\u000c{/\u0005\n򯡕U𻂆{򝨓\u0002躳6\u000e'񤄂\u0013-:eE򑍌򁫢񅞿򍞪n򮨏*􆳭_oSDK\u001f񫴒", + "name": "!򣫨񲡷wn񆣮\u001a򾇢x)]+G<󜇻4(ZK]񋢕_Lssw򜢲aUtq", + "ticker": "~񪗜\u0004񘨎", + "description": "\u000f𐗷􋒍e𑺡bT𵲷c󀣷󌫄`$\u000b%&x򸩡&窝\u0007bq}󇇕𡛚񪵈,Y@R{sBV\u0010O𖳡6\u0001:xjApL󓡠ru򱙾!#񈾆򕠨*񇟳2\u0017\u001f񺿨G%󃦧$򮷧@𼾛򘮪\u000b\u0019'󈯙\u00059^A}񩒩𮚭[KR)\u001a񮃅\u000409\\-8𜀶\u0000+\t^򇕰񡜁\r𖦒i\u0016C1\t򣓥\riq𯋾1A\u0001񜾋\"󼭳\u001a񶪄ZxNA\u000f𖓡" + }, + "id": "pool16t92v0svq0f4anmf0y9yn4s0262fcut9cyydzrw3wl8awqac9er" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 3.383340477178831, + "saturation": 1.138016094198579, "non_myopic_member_rewards": { - "quantity": 549236892900, + "quantity": 404203198635, "unit": "lovelace" }, "produced_blocks": { - "quantity": 8624182, + "quantity": 15534840, "unit": "block" }, "relative_stake": { - "quantity": 44.33, + "quantity": 42.13, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1904-07-10T02:32:59Z", - "epoch_number": 14297 + "epoch_start_time": "1903-02-27T02:29:54.859997028566Z", + "epoch_number": 18574 }, "cost": { - "quantity": 201, + "quantity": 135, "unit": "lovelace" }, "margin": { - "quantity": 51.49, + "quantity": 35.18, "unit": "percent" }, "pledge": { - "quantity": 21, + "quantity": 173, "unit": "lovelace" }, - "delisted": false, "metadata": { - "homepage": "\u001d񽲔N>񻖮/|XC)r&𩐑\u001e󣏓", - "name": "fg3j1zP", - "ticker": "0龘򖣉\"5", - "description": "󗯟򹗬_K'\u000cF\"\u0001L\u0002죠\u0002\n$xf\u000b#=L񸤪mbZ񭳂0\u0010X󎄭-7Bk\u000f\u0008\u001b>Z\u0007\u00120WW𾯡\u0010B񋁘\u0010oⳘ򩔐򍾐\u001c\u0000򑐏󧀑󋇛!t\u0017\u0008&K\u0006\u0004w~\u0018dM\u000b\u0003BQE󎨾^C|#DhU\u0019R\u001a󇲣$\u000f󯂯𣭱􊦥d𸦊򠐣P<򰥸\u000eT:󙄽񿪜6O\u001bn񏋘k)J򔥑U򲠏𧔢V\u0014񔶧&#>H\u0012\u0003\u001f8n\u0012\u0005򱦯D7a-򞎕8\u001dtG8\"\u001b󪁕9G64L%y\u001b𧫁\u0003P\t󠾃aRqQ[\u000b󂟰H\u000e##-}񎈼񉉖O+􃰗~[\u0000f\u00036񌓕\u0001\u0015c1\u0010񆼻V󦁙񲘭񐀀L\u000b\u000f񤢎]򰇁\u0003W\n9\u0008𦣝P򾐉b􅆦\u0008𲖬񐪜𘉽>}Wv=\u0002w𺊦򄥃^sP\u0010\u0001~\u0015", - "ticker": "!b_\"󪹙", - "description": "m_d\u001fY񨜪+C𓄿oO" + "homepage": "8𷗴'lP<{Q椪}:\u000c@򗸆񨯟e񢼮At󨁱l7\n򙎸򠥀o\u000f8(\u0013!a\u0014􄯜󯿨󃗭]\u001f򾹙s-򩶄󍍙󖦨󢹢5򭏀Id񱞊󴓅/\u0000񌚪?񒋼w\u000c@" }, - "id": "pool1msxwr6yfy48369eqmyvyptvy6ecx2x4cz3grw0p3vckzjwucqvq" + "id": "pool1mjpjwlpz6nh05s6036c9us877r75t6uf0wupx8j2rcyvqkd25c3" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 2.5286176040540203, + "saturation": 0.17884223298848034, "non_myopic_member_rewards": { - "quantity": 182230157555, + "quantity": 946806669499, "unit": "lovelace" }, "produced_blocks": { - "quantity": 6494646, + "quantity": 11703246, "unit": "block" }, "relative_stake": { - "quantity": 73.5, + "quantity": 5.93, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1878-03-06T08:00:00Z", - "epoch_number": 16318 + "epoch_start_time": "1860-03-24T16:53:01.445638759844Z", + "epoch_number": 9997 }, "cost": { - "quantity": 73, + "quantity": 116, "unit": "lovelace" }, "margin": { - "quantity": 89.21, + "quantity": 82.73, "unit": "percent" }, "pledge": { - "quantity": 233, + "quantity": 100, "unit": "lovelace" }, - "delisted": false, - "id": "pool1h5ts9q43yyj38t60xaqjld7g9fsld07y7dlcgq7mf9p4j2j6ke2" + "id": "pool1e09np6w4qrg09ru2v7l5zlkef4e49uwsu7ud8zs64mu8zy2gu2w" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 0.669270261550966, + "saturation": 1.908211384172374, "non_myopic_member_rewards": { - "quantity": 245471190452, + "quantity": 808230372438, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16221082, + "quantity": 1967385, "unit": "block" }, "relative_stake": { - "quantity": 51.96, + "quantity": 9.24, "unit": "percent" } }, - "retirement": { - "epoch_start_time": "1905-03-11T22:11:38Z", - "epoch_number": 25515 - }, "cost": { - "quantity": 40, + "quantity": 217, "unit": "lovelace" }, "margin": { - "quantity": 14.85, + "quantity": 25.41, "unit": "percent" }, "pledge": { - "quantity": 52, + "quantity": 248, "unit": "lovelace" }, - "delisted": true, "metadata": { - "homepage": "Zl󳫽st𢽣>b米󕱌\u0001󒪻\u000e9򱗧\u001bYhe\u0015z\u0013f\u001b<񆼊􁄡𹸏M\u0006zx7񩴡", - "name": "P󎅖󂻢lG.9[I%H𣃰&\u001e\u0015", - "ticker": "D>I]\"", - "description": "\u0004]i\n𭚍󶕉0\"F\u0003񦒼\u0010>UmF\u0001?C9W)/󾣔\u0002as𨝰򣇜\u0019򫐠f𶐒\u0004_\u0013CP+\u0007򓲦\u0012MK?𥲓h\u0016\u0014h\u0004𭵁𰰝񥎔x𻧽|񀺝%𹼠񭂢Y㤁\u0016\u000e'o\u0004+<2P񸬑\u001au󅱦󲗍V", + "name": "k{]\"i", + "ticker": "򙭾󽸴k", + "description": "?pO%\u000e7Q0L5񅡳D\u001cT'񬟜J\u001cg󍯤j𞩎uBnp\u0005\u0008v4Aᘨ[=񜈏8񓩁\u0018A컆a'\n3fk_b\u0010RXH񵖫򔐭󈨤;XD:Qd9m𒋞󜇇𨣹>\u0011B򏤈\u0018ASWSv\u0005H󾉾Zf򬚑%*\\K󤎈񂿽\u00134`[%\u0017򧆇\u001f:{5 ^x5\u0008$\\󠒫񪳀l庰󓬛򼉀򕣙\u0001t𸳾mfo=񫛖򓘭񑙤t򋮰󡫛\u0018G񏞚}\u000fA\u0011t󊧀&󿿕U󩩰T`|G8z)@*(}[\u0008𷬟@\u000fT\u0004򩲃R]i񸛱s%ht\u0018I_M񃥺/f񪒫~u\u0013򣰝\u000f4Oa#D񉇜M\u0019\u001cCx+\u0003|g򼥺𫉣+^z𭂿;_JA(\u0005򆒛-\rs!wNfծ\u001bsn\t񉼫P6v\u0005\n񂀧󙢃񓃻򅨣𳋜?\u0000ਵlr󘅃#\u0002BR񛯛񬗛QTz" }, - "id": "pool1c3hks0j2ahq2uhfknph9fskg92q454w5n4uzs5qjlxeuzafafy5" + "id": "pool1nclnu8l5qnsgrdc9full4kta4pckzwkh600dducxyrm35q22dwu" }, { + "flags": [ + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted", + "delisted" + ], "metrics": { - "saturation": 4.786759609791348, + "saturation": 1.0444737007095983, "non_myopic_member_rewards": { - "quantity": 340999995010, + "quantity": 958698119066, "unit": "lovelace" }, "produced_blocks": { - "quantity": 16245381, + "quantity": 3442578, "unit": "block" }, "relative_stake": { - "quantity": 61.29, + "quantity": 21.12, "unit": "percent" } }, "retirement": { - "epoch_start_time": "1861-05-27T09:22:45.306910631593Z", - "epoch_number": 6051 + "epoch_start_time": "1872-07-25T22:00:00Z", + "epoch_number": 23284 }, "cost": { - "quantity": 124, + "quantity": 69, "unit": "lovelace" }, "margin": { - "quantity": 78.37, + "quantity": 31.27, "unit": "percent" }, "pledge": { - "quantity": 97, + "quantity": 192, "unit": "lovelace" }, - "delisted": true, - "metadata": { - "homepage": "=󜵪򨬝򘰤򁄥IcL򞢭\u001c@>񿹕tt?z\\tGN򺺒L@I􄺌.m𜈎yh𑻕\t󔹷\u001dE񞿎\u0003 :Y,/q𢾠\u0015m= 렗OyOQ='1O򞙧O}x򶸓\u000e\u0006\u000e8c\u0011򬌱\u0014򕑲񃔝󯋷\u00111\u0018𲹑~", - "name": "󀹩6D\u0000]\u0015\n񓸄񗥾X_bpv\u001e!O\u000e~󛗿1OPn", - "ticker": "7􍠭h", - "description": "󮢿OK\u0013𱆩[\t}󴋣򣳣Y3񲰡U󃍛\u0015$M\u0008ᚧ\u0015\u001f*\t\u001f𕢿\u001c_;~񤏉<'􏷋񮣮󆓸=^V\u0006񺐑31\u000ev\u0014Pe\"`\u001bn񄑌\u0013)39zM)=\u001f'udl򷍼񐮢V󌞛񠢂𺩁:𱪨\u000bh5L\u001b꜃\u0018\u0019<4\u001d\u001e\u0014X\u0005)V5򖈀9P|\\XfS4򄝿i\u001eV1O\u001bp\u0017𒮑\u000e'i]{VJU7i:8\u0003\"񙇖{\"r-\u0011򴆦>󈣊󯂈,𭒙8\u0013U!Qx+\u001d\u00061)𓖎h`楝𚿻\u0011\u001c\u0018\u001f\u0011\u0003\rs\r񶇰0񻬭7\u0015N" - }, - "id": "pool1jrssl7cpdrcgp8adf4t8qzm7y6gyq4e0wranfzaad3zhqme2dgk" + "id": "pool1mnx8q7lhtep4h0k3dpzg9npl2kcgjxatpckc2kc7mghqxudeqv6" } ] } \ No newline at end of file diff --git a/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs b/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs index 32c98d810bf..d0e2e02fbfa 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/Malformed.hs @@ -52,7 +52,7 @@ import Prelude import Cardano.Wallet.Api.Types ( ApiAddressData , ApiAddressInspectData - , ApiMaintenanceAction + , ApiMaintenanceActionPostData , ApiPoolId , ApiPostRandomAddressData , ApiPutAddressesData @@ -1140,7 +1140,7 @@ instance Malformed (BodyParam SettingsPutData) where ) ] -instance Malformed (BodyParam ApiMaintenanceAction) where +instance Malformed (BodyParam ApiMaintenanceActionPostData) where malformed = first (BodyParam . Aeson.encode) <$> [ ( [aesonQQ| { "maintenance_action": "unknown_action" diff --git a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs index 508d8689ef9..27687630a75 100644 --- a/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs +++ b/lib/core/test/unit/Cardano/Wallet/Api/TypesSpec.hs @@ -64,6 +64,7 @@ import Cardano.Wallet.Api.Types , ApiErrorCode (..) , ApiFee (..) , ApiMaintenanceAction (..) + , ApiMaintenanceActionPostData (..) , ApiMnemonicT (..) , ApiNetworkClock (..) , ApiNetworkInformation (..) @@ -77,6 +78,7 @@ import Cardano.Wallet.Api.Types , ApiSlotId (..) , ApiSlotReference (..) , ApiStakePool (..) + , ApiStakePoolFlag (..) , ApiStakePoolMetrics (..) , ApiT (..) , ApiTransaction (..) @@ -353,7 +355,6 @@ spec = do jsonRoundtripAndGolden $ Proxy @ApiCredential jsonRoundtripAndGolden $ Proxy @ApiAddressData jsonRoundtripAndGolden $ Proxy @(ApiT DerivationIndex) - jsonRoundtripAndGolden $ Proxy @(ApiT PoolMetadataGCStatus) jsonRoundtripAndGolden $ Proxy @ApiEpochInfo jsonRoundtripAndGolden $ Proxy @(ApiSelectCoinsData ('Testnet 0)) jsonRoundtripAndGolden $ Proxy @(ApiCoinSelection ('Testnet 0)) @@ -413,6 +414,8 @@ spec = do jsonRoundtripAndGolden $ Proxy @(ApiT StakePoolMetadata) jsonRoundtripAndGolden $ Proxy @ApiPostRandomAddressData jsonRoundtripAndGolden $ Proxy @ApiTxMetadata + jsonRoundtripAndGolden $ Proxy @ApiMaintenanceAction + jsonRoundtripAndGolden $ Proxy @ApiMaintenanceActionPostData describe "Textual encoding" $ do describe "Can perform roundtrip textual encoding & decoding" $ do @@ -1340,6 +1343,10 @@ instance Arbitrary ApiStakePoolMetrics where <*> (choose (0.0, 5.0)) <*> (Quantity . fromIntegral <$> choose (1::Integer, 22_600_000)) +instance Arbitrary ApiStakePoolFlag where + shrink = genericShrink + arbitrary = genericArbitrary + instance Arbitrary StakePoolMetadata where arbitrary = StakePoolMetadata <$> arbitrary @@ -1386,6 +1393,10 @@ instance Arbitrary ApiMaintenanceAction where arbitrary = genericArbitrary shrink = genericShrink +instance Arbitrary ApiMaintenanceActionPostData where + arbitrary = genericArbitrary + shrink = genericShrink + instance Arbitrary SyncProgress where arbitrary = genericArbitrary shrink = genericShrink @@ -1536,6 +1547,9 @@ instance Arbitrary Api.MaintenanceAction where instance ToSchema Api.ApiMaintenanceAction where declareNamedSchema _ = declareSchemaForDefinition "ApiMaintenanceAction" +instance ToSchema Api.ApiMaintenanceActionPostData where + declareNamedSchema _ = declareSchemaForDefinition "ApiMaintenanceActionPostData" + instance Arbitrary ApiNetworkParameters where arbitrary = genericArbitrary shrink = genericShrink @@ -1901,9 +1915,6 @@ instance ToSchema SettingsPutData where instance ToSchema (ApiT Settings) where declareNamedSchema _ = declareSchemaForDefinition "ApiGetSettings" -instance ToSchema (ApiT PoolMetadataGCStatus) where - declareNamedSchema _ = declareSchemaForDefinition "ApiGCStatus" - instance ToSchema WalletPutPassphraseData where declareNamedSchema _ = declareSchemaForDefinition "ApiWalletPutPassphraseData" diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs index ea862b99cfb..4dd63997d52 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Api/Server.hs @@ -107,6 +107,7 @@ import Cardano.Wallet.Api.Types , ApiCredential (..) , ApiErrorCode (..) , ApiMaintenanceAction (..) + , ApiMaintenanceActionPostData (..) , ApiSelectCoinsAction (..) , ApiSelectCoinsData (..) , ApiStakePool @@ -266,12 +267,9 @@ server byron icarus shelley spl ntp = :<|> joinStakePool shelley (knownPools spl) (getPoolLifeCycleStatus spl) :<|> quitStakePool shelley :<|> delegationFee shelley - :<|> _poolMaintenance - :<|> liftIO (ApiT <$> getGCMetadataStatus spl) + :<|> postPoolMaintenance + :<|> getPoolMaintenance where - _poolMaintenance = \case - ApiMaintenanceAction GcStakePools -> - liftIO $ forceMetadataGC spl >> pure NoContent listStakePools_ = \case Just (ApiT stake) -> do currentEpoch <- getCurrentEpoch shelley @@ -282,6 +280,15 @@ server byron icarus shelley spl ntp = , "parameter as it affects the rewards and ranking." ] + postPoolMaintenance action = do + case action of + ApiMaintenanceActionPostData GcStakePools -> + liftIO $ forceMetadataGC spl + getPoolMaintenance + + getPoolMaintenance = + liftIO (ApiMaintenanceAction . ApiT <$> getGCMetadataStatus spl) + byronWallets :: Server ByronWallets byronWallets = (\case diff --git a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs index 93471c4adc3..7e97d5ac2d4 100644 --- a/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs +++ b/lib/shelley/src/Cardano/Wallet/Shelley/Pools.hs @@ -456,8 +456,10 @@ combineDbAndLsqData ti nOpt lsqData = fmap fromIntegral $ poolPledge $ registrationCert dbData , Api.margin = Quantity $ poolMargin $ registrationCert dbData - , Api.retirement = retirementEpochInfo - , Api.delisted = delisted dbData + , Api.retirement = + retirementEpochInfo + , Api.flags = + [ Api.Delisted | delisted dbData ] } toApiEpochInfo ep = do diff --git a/specifications/api/swagger.yaml b/specifications/api/swagger.yaml index 206ca0f2522..953c099bea2 100644 --- a/specifications/api/swagger.yaml +++ b/specifications/api/swagger.yaml @@ -1018,6 +1018,21 @@ x-stakePoolMetrics: &stakePoolMetrics <<: *numberOfBlocks description: Number of blocks produced by a given stake pool in its lifetime. +x-stakePoolFlag: &stakePoolFlag + type: string + enum: + - delisted + +x-stakePoolFlags: &stakePoolFlags + type: array + description: | + Various flags applicable to stake pools. Possible flags: + + | flag | description | + | --- | --- | + | delisted | The pool is marked as delisted on a configured SMASH server; metadata for this pool have therefore been dropped. | + items: *stakePoolFlag + x-jormungandrStakePoolMetrics: &jormungandrStakePoolMetrics type: object required: @@ -1106,30 +1121,6 @@ x-addressIndex: &addressIndex An address derivation index. x-gCStatus :: &gCStatus - description: | - Gives an indication if metadata GC checking for delisted pools - has run and if so, when. - - Possible values are: - - not_applicable -> we're currently not querying a SMASH server for metadata - - not_started -> the GC hasn't started yet, try again in a short while - - restarting -> the GC thread is currently restarting, try again in short while - - has_run -> the GC has run successfully - - When 'status' is 'restarting' or 'has_run' then the field 'last_run' - is set to the last GC time in UTC. - type: object - required: - - status - properties: - status: - type: string - enum: - - not_applicable - - not_started - - restarting - - has_run - last_run: *date ############################################################################# # # @@ -1290,7 +1281,33 @@ components: type: array items: *certificate - ApiMaintenanceAction: &ApiMaintenanceAction + ApiGCStatus: &ApiGCStatus + type: object + description: | + Gives an indication if metadata GC checking for delisted pools + has run and if so, when. + + Possible values are: + - not_applicable -> we're currently not querying a SMASH server for metadata + - not_started -> the GC hasn't started yet, try again in a short while + - restarting -> the GC thread is currently restarting, try again in short while + - has_run -> the GC has run successfully + + When 'status' is 'restarting' or 'has_run' then the field 'last_run' + is set to the last GC time in UTC. + required: + - status + properties: + status: + type: string + enum: + - not_applicable + - not_started + - restarting + - has_run + last_run: *date + + ApiMaintenanceActionPostData: &ApiMaintenanceActionPostData type: object required: - maintenance_action @@ -1302,8 +1319,12 @@ components: type: string enum: ['gc_stake_pools'] - ApiGCStatus: &ApiGCStatus - <<: *gCStatus + ApiMaintenanceAction: &ApiMaintenanceAction + type: object + required: + - gc_stake_pools + properties: + gc_stake_pools: *ApiGCStatus ApiStakePool: &ApiStakePool type: object @@ -1313,7 +1334,7 @@ components: - cost - margin - pledge - - delisted + - flags properties: id: *stakePoolId metrics: *stakePoolMetrics @@ -1322,8 +1343,7 @@ components: pledge: *stakePoolPledge metadata: *stakePoolMetadata retirement: *stakePoolRetirement - delisted: - type: boolean + flags: *stakePoolFlags ApiJormungandrStakePool: &ApiJormungandrStakePool type: object @@ -3047,18 +3067,18 @@ x-responsesListStakePools: &responsesListStakePools - type: array items: *ApiJormungandrStakePool -x-responsesPoolMaintenance: &responsesPoolMaintenance +x-responsesPostMaintenanceAction: &responsesPostMaintenanceAction <<: *responsesErr404 204: description: No Content -x-responsesMetadataGCStatus: &responsesMetadataGCStatus +x-responsesGetMaintenanceAction: &responsesGetMaintenanceAction 200: description: Ok content: application/json: schema: - <<: *ApiGCStatus + <<: *ApiMaintenanceAction x-responsesJoinStakePool: &responsesJoinStakePool <<: *responsesErr400 @@ -3505,10 +3525,18 @@ paths: responses: *responsesListStakePools /stake-pools/maintenance-actions: + get: + operationId: getMaintenanceActions + tags: ["Stake Pools"] + summary: View maintenance actions + description: | + Returns the current status of the stake pools maintenance actions. + responses: *responsesGetMaintenanceAction + post: - operationId: poolMaintenance + operationId: postMaintenanceAction tags: ["Stake Pools"] - summary: Maintenance actions + summary: Trigger Maintenance actions description: | Performs maintenance actions on stake pools, such as triggering metadata garbage collection. @@ -3518,17 +3546,8 @@ paths: required: true content: application/json: - schema: *ApiMaintenanceAction - responses: *responsesPoolMaintenance - - /stake-pools/metadata-gc-status: - get: - operationId: getGCMetadataStatus - tags: ["Stake Pools"] - summary: Metdata GC Status - description: | - Returns the status of the pool metadata GC thread. - responses: *responsesMetadataGCStatus + schema: *ApiMaintenanceActionPostData + responses: *responsesPostMaintenanceAction /wallets/{walletId}/delegation-fees: get: