Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit 35fd1b8

Browse files
authored
Merge pull request #3505 from input-output-hk/ruhatch/CDEC-509
[CDEC-509] Remove HasGenesisData in favour of explicit parameters
2 parents e06f308 + 256a8d1 commit 35fd1b8

File tree

94 files changed

+920
-789
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+920
-789
lines changed

auxx/Main.hs

+9-3
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ action opts@AuxxOptions {..} command = do
103103
runWithConfig :: HasConfigurations => PrintAction IO -> Core.Config -> TxpConfiguration -> NtpConfiguration -> IO ()
104104
runWithConfig printAction coreConfig txpConfig ntpConfig = do
105105
printAction "Mode: with-config"
106-
CLI.printInfoOnStart aoCommonNodeArgs ntpConfig txpConfig
106+
CLI.printInfoOnStart aoCommonNodeArgs
107+
(configGenesisData coreConfig)
108+
ntpConfig
109+
txpConfig
107110
(nodeParams, tempDbUsed) <- correctNodeParams opts =<< CLI.getNodeParams
108111
loggerName
109112
cArgs
@@ -122,8 +125,11 @@ action opts@AuxxOptions {..} command = do
122125
(npUserSecret nodeParams ^. usVss)
123126
sscParams = CLI.gtSscParams cArgs vssSK (npBehaviorConfig nodeParams)
124127

125-
let pm = configProtocolMagic coreConfig
126-
bracketNodeResources coreConfig nodeParams sscParams (txpGlobalSettings pm txpConfig) (initNodeDBs coreConfig) $ \nr ->
128+
bracketNodeResources coreConfig
129+
nodeParams
130+
sscParams
131+
(txpGlobalSettings coreConfig txpConfig)
132+
(initNodeDBs coreConfig) $ \nr ->
127133
let NodeContext {..} = nrContext nr
128134
modifier = if aoStartMode == WithNode
129135
then runNodeWithSinglePlugin coreConfig txpConfig nr

auxx/src/Command/BlockGen.hs

+3-6
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ import System.Random (mkStdGen, randomIO)
1515
import Pos.AllSecrets (mkAllSecretsSimple)
1616
import Pos.Chain.Txp (TxpConfiguration)
1717
import Pos.Client.KeyStorage (getSecretKeysPlain)
18-
import Pos.Core as Core (Config (..), genesisData)
19-
import Pos.Core.Genesis (gdBootStakeholders)
18+
import Pos.Core as Core (Config (..), configBootStakeholders)
2019
import Pos.Crypto (encToSecret)
2120
import Pos.DB.Txp (txpGlobalSettings)
2221
import Pos.Generator.Block (BlockGenParams (..), genBlocks,
@@ -43,15 +42,13 @@ generateBlocks coreConfig txpConfig GenBlocksParams{..} = withStateLock HighPrio
4342
let bgenParams =
4443
BlockGenParams
4544
{ _bgpSecrets = allSecrets
46-
, _bgpGenStakeholders = gdBootStakeholders genesisData
45+
, _bgpGenStakeholders = configBootStakeholders coreConfig
4746
, _bgpBlockCount = fromIntegral bgoBlockN
4847
-- tx generation is disabled for now
4948
, _bgpTxGenParams = def & tgpTxCountRange .~ (0,0)
5049
, _bgpInplaceDB = True
5150
, _bgpSkipNoKey = True
52-
, _bgpTxpGlobalSettings = txpGlobalSettings
53-
(configProtocolMagic coreConfig)
54-
txpConfig
51+
, _bgpTxpGlobalSettings = txpGlobalSettings coreConfig txpConfig
5552
}
5653
withCompileInfo $ evalRandT
5754
(genBlocks coreConfig txpConfig bgenParams (const ()))

auxx/src/Command/Proc.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ createCommandProcs mCoreConfig mTxpConfig hasAuxxMode printAction mDiffusion = r
203203
addr <-
204204
either return (makePubKeyAddressAuxx $ configEpochSlots coreConfig) <=<
205205
traverse (either return getPublicKeyFromIndex) $ addr'
206-
balance <- getBalance addr
206+
balance <- getBalance (configGenesisData coreConfig) addr
207207
return $ ValueNumber (fromIntegral . unsafeGetCoin $ balance)
208208
, cpHelp = "check the amount of coins on the specified address"
209209
},

auxx/src/Command/Tx.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import Pos.Client.KeyStorage (getSecretKeysPlain)
3838
import Pos.Client.Txp.Balances (getOwnUtxoForPk)
3939
import Pos.Client.Txp.Network (prepareMTx, submitTxRaw)
4040
import Pos.Client.Txp.Util (createTx)
41-
import Pos.Core as Core (Config, IsBootstrapEraAddr (..),
41+
import Pos.Core as Core (Config (..), IsBootstrapEraAddr (..),
4242
Timestamp (..), configEpochSlots, deriveFirstHDAddress,
4343
makePubKeyAddress, mkCoin)
4444
import Pos.Core.Conc (concurrently, currentTime, delay,
@@ -124,7 +124,8 @@ sendToAllGenesis coreConfig keysToSend diffusion (SendToAllGenesisParams genesis
124124
txOutValue = mkCoin 1
125125
}
126126
txOuts = TxOutAux txOut1 :| []
127-
utxo <- getOwnUtxoForPk $ safeToPublic signer
127+
utxo <- getOwnUtxoForPk (configGenesisData coreConfig)
128+
$ safeToPublic signer
128129
etx <- createTx coreConfig mempty utxo signer txOuts publicKey
129130
case etx of
130131
Left err -> logError (sformat ("Error: "%build%" while trying to contruct tx") err)

auxx/src/Mode.hs

+3-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,9 @@ instance MonadBListener AuxxMode where
202202
onRollbackBlocks = realModeToAuxx ... onRollbackBlocks
203203

204204
instance HasConfiguration => MonadBalances AuxxMode where
205-
getOwnUtxos addrs = ifM isTempDbUsed (getOwnUtxosGenesis addrs) (getFilteredUtxo addrs)
205+
getOwnUtxos genesisData addrs = ifM isTempDbUsed
206+
(getOwnUtxosGenesis genesisData addrs)
207+
(getFilteredUtxo addrs)
206208
getBalance = getBalanceFromUtxo
207209

208210
instance HasConfiguration =>

auxx/src/Plugin.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import Data.Time.Units (Second)
2121
import Formatting (float, int, sformat, (%))
2222
import System.IO (hFlush, stdout)
2323

24-
import Pos.Chain.Txp (TxpConfiguration, genesisUtxo, unGenesisUtxo)
25-
import Pos.Core as Core (Config)
24+
import Pos.Chain.Txp (TxpConfiguration, genesisUtxo)
25+
import Pos.Core as Core (Config (..))
2626
import Pos.Core.Conc (delay)
2727
import Pos.Crypto (AHash (..), fullPublicKeyF, hashHexF)
2828
import Pos.Infra.Diffusion.Types (Diffusion)
@@ -50,7 +50,7 @@ auxxPlugin ::
5050
-> m ()
5151
auxxPlugin coreConfig txpConfig auxxOptions repl = \diffusion -> do
5252
logInfo $ sformat ("Length of genesis utxo: " %int)
53-
(length $ unGenesisUtxo genesisUtxo)
53+
(length $ genesisUtxo $ configGenesisData coreConfig)
5454
rawExec (Just coreConfig) (Just txpConfig) (Just Dict) auxxOptions (Just diffusion) repl
5555

5656
rawExec ::

chain/src/Pos/Chain/Lrc/Genesis.hs

+11-14
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,24 @@ import Universum
99
import qualified Data.HashMap.Strict as HM
1010

1111
import Pos.Chain.Lrc.Fts (followTheSatoshi)
12-
import Pos.Chain.Txp (GenesisUtxo (..), Utxo, genesisUtxo,
13-
utxoToStakes)
14-
import Pos.Core (HasGenesisData, SharedSeed (..), SlotCount,
15-
SlotLeaders, genesisData)
16-
import Pos.Core.Genesis (GenesisData (..))
12+
import Pos.Chain.Txp (Utxo, genesisUtxo, utxoToStakes)
13+
import Pos.Core as Core (Config (..), SlotLeaders,
14+
configBootStakeholders, configEpochSlots, configFtsSeed)
1715

1816

1917
-- | Compute leaders of the 0-th epoch from initial shared seed and stake distribution.
20-
genesisLeaders :: HasGenesisData => SlotCount -> SlotLeaders
21-
genesisLeaders epochSlots =
22-
followTheSatoshiUtxo epochSlots (gdFtsSeed genesisData) utxo
23-
where
24-
GenesisUtxo utxo = genesisUtxo
18+
genesisLeaders :: Core.Config -> SlotLeaders
19+
genesisLeaders coreConfig =
20+
followTheSatoshiUtxo coreConfig (genesisUtxo $ configGenesisData coreConfig)
2521

2622
-- This should not be exported unless it is *needed* elsewhere
27-
followTheSatoshiUtxo
28-
:: HasGenesisData => SlotCount -> SharedSeed -> Utxo -> SlotLeaders
29-
followTheSatoshiUtxo epochSlots seed utxo =
23+
followTheSatoshiUtxo :: Core.Config -> Utxo -> SlotLeaders
24+
followTheSatoshiUtxo coreConfig utxo =
3025
-- NB: here we rely on the ordering produced by HM.toList; if it changes,
3126
-- `genesisLeaders` might start producing different results. Be careful with
3227
-- this code!
3328
--
3429
-- See https://github.com/input-output-hk/cardano-sl/issues/3425
35-
followTheSatoshi epochSlots seed $ HM.toList $ utxoToStakes utxo
30+
followTheSatoshi (configEpochSlots coreConfig) (configFtsSeed coreConfig)
31+
$ HM.toList
32+
$ utxoToStakes (configBootStakeholders coreConfig) utxo

chain/src/Pos/Chain/Ssc/Functions.hs

+9-9
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import Pos.Chain.Ssc.Error (SscVerifyError (..))
2828
import Pos.Chain.Ssc.Toss.Base (verifyEntriesGuardM)
2929
import Pos.Chain.Ssc.Types (SscGlobalState (..))
3030
import qualified Pos.Chain.Ssc.VssCertData as VCD
31-
import Pos.Core as Core (BlockCount, Config (..), EpochIndex (..),
32-
HasGenesisData, SlotId (..), StakeholderId,
33-
genesisVssCerts, pcBlkSecurityParam)
31+
import Pos.Core as Core (Config (..), EpochIndex (..), SlotId (..),
32+
StakeholderId, configBlkSecurityParam, configVssCerts,
33+
pcBlkSecurityParam)
3434
import Pos.Core.Slotting (crucialSlot)
3535
import Pos.Core.Ssc (CommitmentsMap (..), SscPayload (..),
3636
VssCertificatesMap)
@@ -136,12 +136,12 @@ verifySscPayload coreConfig eoh payload = case payload of
136136
----------------------------------------------------------------------------
137137

138138
getStableCertsPure
139-
:: HasGenesisData
140-
=> BlockCount
139+
:: Core.Config
141140
-> EpochIndex
142141
-> VCD.VssCertData
143142
-> VssCertificatesMap
144-
getStableCertsPure k epoch certs
145-
| epoch == 0 = genesisVssCerts
146-
| otherwise =
147-
VCD.certs $ VCD.setLastKnownSlot (crucialSlot k epoch) certs
143+
getStableCertsPure coreConfig epoch certs
144+
| epoch == 0 = configVssCerts coreConfig
145+
| otherwise = VCD.certs $ VCD.setLastKnownSlot
146+
(crucialSlot (configBlkSecurityParam coreConfig) epoch)
147+
certs

chain/src/Pos/Chain/Ssc/Toss/Base.hs

+22-20
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ import Pos.Chain.Ssc.Base (verifyOpening, vssThreshold)
5252
import Pos.Chain.Ssc.Error (SscVerifyError (..))
5353
import Pos.Chain.Ssc.Toss.Class (MonadToss (..), MonadTossEnv (..),
5454
MonadTossRead (..))
55-
import Pos.Core (BlockCount, CoinPortion, EpochIndex, StakeholderId,
56-
addressHash, coinPortionDenominator, getCoinPortion,
57-
unsafeGetCoin)
55+
import Pos.Core as Core (CoinPortion, Config, EpochIndex,
56+
StakeholderId, addressHash, coinPortionDenominator,
57+
getCoinPortion, unsafeGetCoin)
5858
import Pos.Core.Ssc (Commitment (..),
5959
CommitmentsMap (getCommitmentsMap), InnerSharesMap,
6060
Opening (..), OpeningsMap, SharesDistribution, SharesMap,
@@ -98,11 +98,11 @@ hasCertificateToss id = memberVss id <$> getVssCertificates
9898
-- 'VssPublicKey's of participating nodes for given epoch.
9999
getParticipants
100100
:: (MonadError SscVerifyError m, MonadToss m, MonadTossEnv m)
101-
=> BlockCount
101+
=> Core.Config
102102
-> EpochIndex
103103
-> m VssCertificatesMap
104-
getParticipants k epoch = do
105-
stableCerts <- getStableCertificates k epoch
104+
getParticipants coreConfig epoch = do
105+
stableCerts <- getStableCertificates coreConfig epoch
106106
richmen <- note (NoRichmen epoch) =<< getRichmen epoch
107107
pure $ computeParticipants (getKeys richmen) stableCerts
108108

@@ -119,12 +119,12 @@ matchCommitment op = flip matchCommitmentPure op <$> getCommitments
119119

120120
checkShares
121121
:: (MonadTossRead m, MonadTossEnv m)
122-
=> BlockCount
122+
=> Core.Config
123123
-> EpochIndex
124124
-> (StakeholderId, InnerSharesMap)
125125
-> m Bool
126-
checkShares k epoch (id, sh) = do
127-
certs <- getStableCertificates k epoch
126+
checkShares coreConfig epoch (id, sh) = do
127+
certs <- getStableCertificates coreConfig epoch
128128
let warnFmt = ("checkShares: no richmen for "%ords%" epoch")
129129
getRichmen epoch >>= \case
130130
Nothing -> False <$ logWarning (sformat warnFmt epoch)
@@ -404,17 +404,17 @@ computeSharesDistr richmen =
404404
-- * shares in the commitment are valid
405405
checkCommitmentsPayload
406406
:: (MonadToss m, MonadTossEnv m, MonadError SscVerifyError m, MonadRandom m)
407-
=> BlockCount
407+
=> Core.Config
408408
-> EpochIndex
409409
-> CommitmentsMap
410410
-> m ()
411-
checkCommitmentsPayload k epoch (getCommitmentsMap -> comms) =
411+
checkCommitmentsPayload coreConfig epoch (getCommitmentsMap -> comms) =
412412
-- We don't verify an empty commitments map, because an empty commitments
413413
-- map is always valid. Moreover, the commitments check requires us to
414414
-- compute 'SharesDistribution', which might be expensive.
415415
unless (null comms) $ do
416416
richmen <- note (NoRichmen epoch) =<< getRichmen epoch
417-
participants <- getParticipants k epoch
417+
participants <- getParticipants coreConfig epoch
418418
distr <- computeSharesDistr richmen
419419
exceptGuard CommittingNoParticipants
420420
(`memberVss` participants) (HM.keys comms)
@@ -450,23 +450,23 @@ checkOpeningsPayload opens = do
450450
-- decrypted shares
451451
checkSharesPayload
452452
:: (MonadToss m, MonadTossEnv m, MonadError SscVerifyError m)
453-
=> BlockCount
453+
=> Core.Config
454454
-> EpochIndex
455455
-> SharesMap
456456
-> m ()
457-
checkSharesPayload k epoch shares = do
457+
checkSharesPayload coreConfig epoch shares = do
458458
-- We intentionally don't check that nodes which decrypted shares sent
459459
-- its commitments. If a node decrypted shares correctly, such node is
460460
-- useful for us, despite that it didn't send its commitment.
461-
part <- getParticipants k epoch
461+
part <- getParticipants coreConfig epoch
462462
exceptGuard SharesNotRichmen
463463
(`memberVss` part) (HM.keys shares)
464464
exceptGuardM InternalShareWithoutCommitment
465465
hasCommitmentToss (concatMap HM.keys $ toList shares)
466466
exceptGuardM SharesAlreadySent
467467
(notM hasSharesToss) (HM.keys shares)
468468
exceptGuardEntryM DecrSharesNotMatchCommitment
469-
(checkShares k epoch) (HM.toList shares)
469+
(checkShares coreConfig epoch) (HM.toList shares)
470470

471471
-- For certificates we check that
472472
-- * certificate hasn't been sent already
@@ -496,16 +496,18 @@ checkCertificatesPayload epoch certs = do
496496

497497
checkPayload
498498
:: (MonadToss m, MonadTossEnv m, MonadError SscVerifyError m, MonadRandom m)
499-
=> BlockCount
499+
=> Core.Config
500500
-> EpochIndex
501501
-> SscPayload
502502
-> m ()
503-
checkPayload k epoch payload = do
503+
checkPayload coreConfig epoch payload = do
504504
let payloadCerts = spVss payload
505505
case payload of
506-
CommitmentsPayload comms _ -> checkCommitmentsPayload k epoch comms
506+
CommitmentsPayload comms _ -> checkCommitmentsPayload coreConfig
507+
epoch
508+
comms
507509
OpeningsPayload opens _ -> checkOpeningsPayload opens
508-
SharesPayload shares _ -> checkSharesPayload k epoch shares
510+
SharesPayload shares _ -> checkSharesPayload coreConfig epoch shares
509511
CertificatesPayload _ -> pass
510512
checkCertificatesPayload epoch payloadCerts
511513

chain/src/Pos/Chain/Ssc/Toss/Class.hs

+5-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import Control.Monad.Except (ExceptT)
1414
import Control.Monad.Trans (MonadTrans)
1515

1616
import Pos.Chain.Lrc (RichmenStakes)
17-
import Pos.Core (BlockCount, EpochIndex, EpochOrSlot, StakeholderId)
17+
import Pos.Core as Core (Config, EpochIndex, EpochOrSlot,
18+
StakeholderId)
1819
import Pos.Core.Ssc (CommitmentsMap, InnerSharesMap, Opening,
1920
OpeningsMap, SharesMap, SignedCommitment, VssCertificate,
2021
VssCertificatesMap)
@@ -42,7 +43,7 @@ class (Monad m, WithLogger m) =>
4243
getVssCertificates :: m VssCertificatesMap
4344

4445
-- | Retrieve all stable 'VssCertificate's for given epoch.
45-
getStableCertificates :: BlockCount -> EpochIndex -> m VssCertificatesMap
46+
getStableCertificates :: Core.Config -> EpochIndex -> m VssCertificatesMap
4647

4748
-- | Default implementations for 'MonadTrans'.
4849
default getCommitments :: (MonadTrans t, MonadTossRead m', t m' ~ m) =>
@@ -62,8 +63,8 @@ class (Monad m, WithLogger m) =>
6263
getVssCertificates = lift getVssCertificates
6364

6465
default getStableCertificates :: (MonadTrans t, MonadTossRead m', t m' ~ m) =>
65-
BlockCount -> EpochIndex -> m VssCertificatesMap
66-
getStableCertificates k = lift . getStableCertificates k
66+
Core.Config -> EpochIndex -> m VssCertificatesMap
67+
getStableCertificates coreConfig = lift . getStableCertificates coreConfig
6768

6869
instance MonadTossRead m => MonadTossRead (ReaderT s m)
6970
instance MonadTossRead m => MonadTossRead (StateT s m)

chain/src/Pos/Chain/Ssc/Toss/Logic.hs

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ import Pos.Chain.Ssc.Toss.Class (MonadToss (..), MonadTossEnv (..))
2525
import Pos.Chain.Ssc.Toss.Types (TossModifier (..))
2626
import Pos.Core as Core (Config (..), EpochIndex, EpochOrSlot (..),
2727
LocalSlotIndex, SlotCount, SlotId (siSlot), StakeholderId,
28-
configBlkSecurityParam, configSlotSecurityParam,
29-
epochIndexL, epochOrSlot, epochOrSlotPred,
30-
epochOrSlotToEnum, getEpochOrSlot, getSlotIndex, mkCoin)
28+
configSlotSecurityParam, epochIndexL, epochOrSlot,
29+
epochOrSlotPred, epochOrSlotToEnum, getEpochOrSlot,
30+
getSlotIndex, mkCoin)
3131
import Pos.Core.Chrono (NewestFirst (..))
3232
import Pos.Core.Ssc (CommitmentsMap (..), InnerSharesMap, Opening,
3333
SignedCommitment, SscPayload (..), VssCertificate,
@@ -68,7 +68,7 @@ verifyAndApplySscPayload coreConfig eoh payload = do
6868
whenRight eoh $ const $ verifySscPayload coreConfig eoh payload
6969
let blockCerts = spVss payload
7070
let curEpoch = either identity (^. epochIndexL) eoh
71-
checkPayload (configBlkSecurityParam coreConfig) curEpoch payload
71+
checkPayload coreConfig curEpoch payload
7272

7373
-- Apply
7474
case eoh of

chain/src/Pos/Chain/Ssc/Toss/Pure.hs

+8-11
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ import qualified Crypto.Random as Rand
2020
import Pos.Chain.Lrc (RichmenSet, RichmenStakes)
2121
import Pos.Chain.Ssc.Base (deleteSignedCommitment,
2222
insertSignedCommitment)
23+
import Pos.Chain.Ssc.Functions (getStableCertsPure)
2324
import Pos.Chain.Ssc.Toss.Class (MonadToss (..), MonadTossEnv (..),
2425
MonadTossRead (..))
2526
import Pos.Chain.Ssc.Types (SscGlobalState, sgsCommitments,
2627
sgsOpenings, sgsShares, sgsVssCertificates)
2728
import qualified Pos.Chain.Ssc.VssCertData as VCD
28-
import Pos.Core (EpochIndex, HasGenesisData, crucialSlot,
29-
genesisVssCerts)
29+
import Pos.Core (EpochIndex)
3030
import Pos.Core.Update (BlockVersionData)
3131
import Pos.Util.Wlog (CanLog, HasLoggerName (..), LogEvent,
3232
NamedPureLogger (..), WithLogger, dispatchEvents,
@@ -51,25 +51,22 @@ newtype PureTossWithEnv a = PureTossWithEnv
5151
} deriving (Functor, Applicative, Monad, Rand.MonadRandom,
5252
CanLog, HasLoggerName)
5353

54-
deriving instance HasGenesisData => MonadTossRead PureTossWithEnv
55-
deriving instance HasGenesisData => MonadToss PureTossWithEnv
54+
deriving instance MonadTossRead PureTossWithEnv
55+
deriving instance MonadToss PureTossWithEnv
5656

57-
instance HasGenesisData => MonadTossRead PureToss where
57+
instance MonadTossRead PureToss where
5858
getCommitments = PureToss $ use sgsCommitments
5959
getOpenings = PureToss $ use sgsOpenings
6060
getShares = PureToss $ use sgsShares
6161
getVssCertificates = PureToss $ uses sgsVssCertificates VCD.certs
62-
getStableCertificates k epoch
63-
| epoch == 0 = pure $ genesisVssCerts
64-
| otherwise = PureToss $
65-
uses sgsVssCertificates $
66-
VCD.certs . VCD.setLastKnownSlot (crucialSlot k epoch)
62+
getStableCertificates coreConfig epoch =
63+
PureToss $ uses sgsVssCertificates $ getStableCertsPure coreConfig epoch
6764

6865
instance MonadTossEnv PureTossWithEnv where
6966
getRichmen epoch = PureTossWithEnv $ view (_1 . at epoch)
7067
getAdoptedBVData = PureTossWithEnv $ view _2
7168

72-
instance HasGenesisData => MonadToss PureToss where
69+
instance MonadToss PureToss where
7370
putCommitment signedComm =
7471
PureToss $ sgsCommitments %= insertSignedCommitment signedComm
7572
putOpening id op = PureToss $ sgsOpenings . at id .= Just op

0 commit comments

Comments
 (0)