Skip to content

Commit f5c2028

Browse files
committed
adding more whitelists
1 parent bd8ee7f commit f5c2028

File tree

13 files changed

+271
-186
lines changed

13 files changed

+271
-186
lines changed

cardano-chain-gen/test/Test/Cardano/Db/Mock/Config.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,6 @@ mkSyncNodeParams staticDir mutableDir CommandLineArgs {..} = do
269269
, enpHasMultiAssets = claHasMultiAssets
270270
, enpHasMetadata = claHasMetadata
271271
, enpWhitelistMetadataNames = []
272-
, enpWhitelistMAPolicies = []
273272
, enpHasPlutusExtra = True
274273
, enpHasGov = True
275274
, enpHasOffChainPoolData = True

cardano-db-sync/app/cardano-db-sync.hs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ pRunDbSyncNode =
8989
<*> pHasMultiAssets
9090
<*> pHasMetadata
9191
<*> pWhiteListTxMetadata
92-
<*> pWhiteListMAPolicies
9392
<*> pHasPlutusExtra
9493
<*> pHasGov
9594
<*> pHasOffChainPoolData
@@ -240,14 +239,6 @@ pWhiteListTxMetadata =
240239
<> Opt.help "Insert a specific set of tx metadata, based on the tx metadata key names"
241240
)
242241

243-
pWhiteListMAPolicies :: Parser [Word64]
244-
pWhiteListMAPolicies =
245-
Opt.option
246-
(parseCommaSeparated <$> Opt.str)
247-
( Opt.long "whitelist-multi-asset-policy"
248-
<> Opt.help "Only insert a specific sellected list of multi-assets, based on the multi-asset's policy name"
249-
)
250-
251242
parseCommaSeparated :: String -> [Word64]
252243
parseCommaSeparated str =
253244
case traverse readMaybe (splitOn "," str) of

cardano-db-sync/src/Cardano/DbSync.hs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ import Cardano.DbSync.Config.Types (
3535
ConfigFile (..),
3636
GenesisFile (..),
3737
LedgerStateDir (..),
38+
MetadataConfig (..),
39+
MultiAssetConfig (..),
3840
NetworkName (..),
41+
PlutusConfig (..),
3942
SocketPath (..),
4043
SyncCommand (..),
4144
SyncNodeConfig (..),
@@ -56,7 +59,6 @@ import Cardano.Prelude hiding (Nat, (%))
5659
import Cardano.Slotting.Slot (EpochNo (..))
5760
import Control.Concurrent.Async
5861
import Control.Monad.Extra (whenJust)
59-
import qualified Data.Strict.Maybe as Strict
6062
import qualified Data.Text as Text
6163
import Data.Version (showVersion)
6264
import Database.Persist.Postgresql (ConnectionString, withPostgresqlConn)
@@ -233,14 +235,6 @@ extractSyncOptions snp aop =
233235
, snapshotEveryLagging = enpSnEveryLagging snp
234236
}
235237
where
236-
maybeWhitelistMDNames = whitelistToMaybe (enpWhitelistMetadataNames snp)
237-
maybeWhitelistMAPolicies = whitelistToMaybe (enpWhitelistMAPolicies snp)
238-
239-
whitelistToMaybe wList =
240-
if null wList
241-
then Strict.Nothing
242-
else Strict.Just wList
243-
244238
iopts
245239
| enpOnlyGov snp = onlyGovInsertOptions useLedger
246240
| enpOnlyUTxO snp = onlyUTxOInsertOptions
@@ -252,11 +246,10 @@ extractSyncOptions snp aop =
252246
, ioUseLedger = useLedger
253247
, ioShelley = enpHasShelley snp
254248
, ioRewards = True
255-
, ioMultiAssets = enpHasMultiAssets snp
256-
, ioMetadata = enpHasMetadata snp
257-
, ioWhitelistMetadataNames = maybeWhitelistMDNames
258-
, ioWhitelistMAPolicies = maybeWhitelistMAPolicies
259-
, ioPlutusExtra = enpHasPlutusExtra snp
249+
, -- TODO: cmdv: this is where we plug configs
250+
ioMultiAssets = MultiAssetDisable
251+
, ioMetadata = MetadataDisable
252+
, ioPlutusExtra = PlutusDisable
260253
, ioOffChainPoolData = enpHasOffChainPoolData snp
261254
, ioGov = enpHasGov snp
262255
}

cardano-db-sync/src/Cardano/DbSync/Api.hs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,9 @@ fullInsertOptions useLedger =
206206
, ioUseLedger = useLedger
207207
, ioShelley = True
208208
, ioRewards = True
209-
, ioMultiAssets = True
210-
, ioMetadata = True
211-
, ioWhitelistMetadataNames = Strict.Nothing
212-
, ioWhitelistMAPolicies = Strict.Nothing
213-
, ioPlutusExtra = True
209+
, ioMultiAssets = MultiAssetEnable
210+
, ioMetadata = MetadataEnable
211+
, ioPlutusExtra = PlutusEnable
214212
, ioOffChainPoolData = True
215213
, ioGov = True
216214
}
@@ -222,11 +220,9 @@ onlyUTxOInsertOptions =
222220
, ioUseLedger = False
223221
, ioShelley = False
224222
, ioRewards = False
225-
, ioMultiAssets = True
226-
, ioMetadata = False
227-
, ioWhitelistMetadataNames = Strict.Nothing
228-
, ioWhitelistMAPolicies = Strict.Nothing
229-
, ioPlutusExtra = False
223+
, ioMultiAssets = MultiAssetEnable
224+
, ioMetadata = MetadataDisable
225+
, ioPlutusExtra = PlutusDisable
230226
, ioOffChainPoolData = False
231227
, ioGov = False
232228
}
@@ -241,11 +237,9 @@ disableAllInsertOptions useLedger =
241237
, ioUseLedger = useLedger
242238
, ioShelley = False
243239
, ioRewards = False
244-
, ioMultiAssets = False
245-
, ioMetadata = False
246-
, ioWhitelistMetadataNames = Strict.Nothing
247-
, ioWhitelistMAPolicies = Strict.Nothing
248-
, ioPlutusExtra = False
240+
, ioMultiAssets = MultiAssetEnable
241+
, ioMetadata = MetadataDisable
242+
, ioPlutusExtra = PlutusDisable
249243
, ioOffChainPoolData = False
250244
, ioGov = False
251245
}

cardano-db-sync/src/Cardano/DbSync/Api/Ledger.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ storePage ::
142142
ExceptT SyncNodeError (ReaderT SqlBackend m) ()
143143
storePage syncEnv cache percQuantum (n, ls) = do
144144
when (n `mod` 10 == 0) $ liftIO $ logInfo trce $ "Bootstrap in progress " <> prc <> "%"
145-
txOuts <- mapM (prepareTxOut syncEnv cache) ls
145+
txOuts <- do
146+
mapM (prepareTxOut syncEnv cache) ls
146147
txOutIds <- lift . DB.insertManyTxOutPlex True False $ etoTxOut . fst <$> txOuts
147148
let maTxOuts = concatMap mkmaTxOuts $ zip txOutIds (snd <$> txOuts)
148149
void . lift $ DB.insertManyMaTxOut maTxOuts
@@ -167,7 +168,7 @@ prepareTxOut syncEnv txCache (TxIn txHash (TxIx index), txOut) = do
167168
let txHashByteString = Generic.safeHashToByteString $ unTxId txHash
168169
let genTxOut = fromTxOut index txOut
169170
txId <- queryTxIdWithCache txCache txHashByteString
170-
Insert.prepareTxOut syncEnv trce cache iopts (txId, txHashByteString) genTxOut
171+
Insert.prepareTxOut trce iopts cache (txId, txHashByteString) genTxOut
171172
where
172173
trce = getTrace syncEnv
173174
cache = envCache syncEnv

cardano-db-sync/src/Cardano/DbSync/Api/Types.hs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Cardano.DbSync.Api.Types (
1515

1616
import qualified Cardano.Db as DB
1717
import Cardano.DbSync.Cache.Types (Cache)
18+
import Cardano.DbSync.Config.Types (MetadataConfig, MultiAssetConfig, PlutusConfig)
1819
import Cardano.DbSync.Ledger.Types (HasLedgerEnv)
1920
import Cardano.DbSync.LocalStateQuery (NoLedgerEnv)
2021
import Cardano.DbSync.Types (
@@ -23,7 +24,7 @@ import Cardano.DbSync.Types (
2324
OffChainVoteResult,
2425
OffChainVoteWorkQueue,
2526
)
26-
import Cardano.Prelude (Bool, Eq, IO, Show, Word64)
27+
import Cardano.Prelude (Bool (..), Eq, IO, Show, Word64)
2728
import Cardano.Slotting.Slot (EpochNo (..))
2829
import Control.Concurrent.Class.MonadSTM.Strict (
2930
StrictTVar,
@@ -76,11 +77,9 @@ data InsertOptions = InsertOptions
7677
, ioUseLedger :: !Bool
7778
, ioShelley :: !Bool
7879
, ioRewards :: !Bool
79-
, ioMultiAssets :: !Bool
80-
, ioMetadata :: !Bool
81-
, ioWhitelistMetadataNames :: Strict.Maybe [Word64]
82-
, ioWhitelistMAPolicies :: Strict.Maybe [Word64]
83-
, ioPlutusExtra :: !Bool
80+
, ioMultiAssets :: !MultiAssetConfig
81+
, ioMetadata :: !MetadataConfig
82+
, ioPlutusExtra :: !PlutusConfig
8483
, ioOffChainPoolData :: !Bool
8584
, ioGov :: !Bool
8685
}

cardano-db-sync/src/Cardano/DbSync/Config.hs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,19 @@ module Cardano.DbSync.Config (
2020
readCardanoGenesisConfig,
2121
readSyncNodeConfig,
2222
configureLogging,
23+
plutusWhitelistCheckTxOut,
2324
) where
2425

2526
import qualified Cardano.BM.Configuration.Model as Logging
2627
import qualified Cardano.BM.Setup as Logging
2728
import Cardano.BM.Trace (Trace)
2829
import qualified Cardano.BM.Trace as Logging
30+
import Cardano.DbSync.Api.Types (InsertOptions (..), SyncEnv, SyncOptions (..), envOptions)
2931
import Cardano.DbSync.Config.Cardano
3032
import Cardano.DbSync.Config.Node (NodeConfig (..), parseNodeConfig, parseSyncPreConfig, readByteStringFromFile)
3133
import Cardano.DbSync.Config.Shelley
3234
import Cardano.DbSync.Config.Types
35+
import qualified Cardano.DbSync.Era.Shelley.Generic as Generic
3336
import Cardano.Prelude
3437
import System.FilePath (takeDirectory, (</>))
3538

@@ -91,3 +94,28 @@ coalesceConfig pcfg ncfg adjustGenesisPath = do
9194

9295
mkAdjustPath :: SyncPreConfig -> (FilePath -> FilePath)
9396
mkAdjustPath cfg fp = takeDirectory (pcNodeConfigFilePath cfg) </> fp
97+
98+
-- do a whitelist check against a list of TxOut and if one matches we keep them all
99+
plutusWhitelistCheckTxOut :: SyncEnv -> [Generic.TxOut] -> Bool
100+
plutusWhitelistCheckTxOut syncEnv txOuts = do
101+
let iopts = soptInsertOptions $ envOptions syncEnv
102+
case ioPlutusExtra iopts of
103+
PlutusEnable -> True
104+
PlutusDisable -> False
105+
PlutusWhitelistScripts whitelist -> do
106+
-- we map over our txOuts and check if txOutAddress OR txOutScript are in the whitelist
107+
let whitelistCheck =
108+
( \txOut ->
109+
case (Generic.txOutScript txOut, Generic.maybePaymentCred $ Generic.txOutAddress txOut) of
110+
(Just script, _) ->
111+
if Generic.txScriptHash script `elem` whitelist
112+
then Just txOut
113+
else Nothing
114+
(_, Just address) ->
115+
if address `elem` whitelist
116+
then Just txOut
117+
else Nothing
118+
(Nothing, Nothing) -> Nothing
119+
)
120+
<$> txOuts
121+
any isJust whitelistCheck

cardano-db-sync/src/Cardano/DbSync/Config/Types.hs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{-# LANGUAGE DerivingStrategies #-}
33
{-# LANGUAGE FlexibleInstances #-}
44
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
5+
{-# LANGUAGE LambdaCase #-}
56
{-# LANGUAGE OverloadedStrings #-}
67
{-# LANGUAGE ScopedTypeVariables #-}
78
{-# LANGUAGE NoImplicitPrelude #-}
@@ -18,11 +19,17 @@ module Cardano.DbSync.Config.Types (
1819
GenesisHashConway (..),
1920
SyncNodeConfig (..),
2021
SyncPreConfig (..),
22+
MetadataConfig (..),
23+
MultiAssetConfig (..),
24+
PlutusConfig (..),
2125
LedgerStateDir (..),
2226
LogFileDir (..),
2327
NetworkName (..),
2428
NodeConfigFile (..),
2529
SocketPath (..),
30+
isMetadataEnableOrWhiteList,
31+
isMultiAssetEnableOrWhitelist,
32+
isPlutusEnableOrWhitelist,
2633
adjustGenesisFilePath,
2734
adjustNodeConfigFilePath,
2835
pcNodeConfigFilePath,
@@ -73,7 +80,6 @@ data SyncNodeParams = SyncNodeParams
7380
, enpHasMultiAssets :: !Bool
7481
, enpHasMetadata :: !Bool
7582
, enpWhitelistMetadataNames :: ![Word64]
76-
, enpWhitelistMAPolicies :: ![Word64]
7783
, enpHasPlutusExtra :: !Bool
7884
, enpHasGov :: !Bool
7985
, enpHasOffChainPoolData :: !Bool
@@ -132,6 +138,42 @@ data SyncPreConfig = SyncPreConfig
132138
, pcPrometheusPort :: !Int
133139
}
134140

141+
data MetadataConfig
142+
= MetadataEnable
143+
| MetadataDisable
144+
| MetadataWhitelistKeys (NonEmpty ByteString)
145+
deriving (Eq, Show)
146+
147+
isMetadataEnableOrWhiteList :: MetadataConfig -> Bool
148+
isMetadataEnableOrWhiteList = \case
149+
MetadataEnable -> True
150+
MetadataDisable -> False
151+
MetadataWhitelistKeys _ -> True
152+
153+
data MultiAssetConfig
154+
= MultiAssetEnable
155+
| MultiAssetDisable
156+
| MultiAssetWhitelistPolicies (NonEmpty ByteString)
157+
deriving (Eq, Show)
158+
159+
isMultiAssetEnableOrWhitelist :: MultiAssetConfig -> Bool
160+
isMultiAssetEnableOrWhitelist = \case
161+
MultiAssetEnable -> True
162+
MultiAssetDisable -> False
163+
MultiAssetWhitelistPolicies _ -> True
164+
165+
data PlutusConfig
166+
= PlutusEnable
167+
| PlutusDisable
168+
| PlutusWhitelistScripts (NonEmpty ByteString)
169+
deriving (Eq, Show)
170+
171+
isPlutusEnableOrWhitelist :: PlutusConfig -> Bool
172+
isPlutusEnableOrWhitelist = \case
173+
PlutusEnable -> True
174+
PlutusDisable -> False
175+
PlutusWhitelistScripts _ -> True
176+
135177
newtype GenesisFile = GenesisFile
136178
{ unGenesisFile :: FilePath
137179
}

cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Generic/Block.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ module Cardano.DbSync.Era.Shelley.Generic.Block (
2525

2626
import qualified Cardano.Crypto.Hash as Crypto
2727
import qualified Cardano.Crypto.KES.Class as KES
28+
import Cardano.DbSync.Config.Types (PlutusConfig)
2829
import Cardano.DbSync.Era.Shelley.Generic.Tx
2930
import Cardano.DbSync.Types
3031
import Cardano.DbSync.Util.Bech32 (serialiseVerKeyVrfToBech32)
@@ -120,7 +121,7 @@ fromMaryBlock blk =
120121
, blkTxs = map fromMaryTx (getTxs blk)
121122
}
122123

123-
fromAlonzoBlock :: Bool -> Maybe Prices -> ShelleyBlock TPraosStandard StandardAlonzo -> Block
124+
fromAlonzoBlock :: PlutusConfig -> Maybe Prices -> ShelleyBlock TPraosStandard StandardAlonzo -> Block
124125
fromAlonzoBlock iope mprices blk =
125126
Block
126127
{ blkEra = Alonzo
@@ -137,7 +138,7 @@ fromAlonzoBlock iope mprices blk =
137138
, blkTxs = map (fromAlonzoTx iope mprices) (getTxs blk)
138139
}
139140

140-
fromBabbageBlock :: Bool -> Maybe Prices -> ShelleyBlock PraosStandard StandardBabbage -> Block
141+
fromBabbageBlock :: PlutusConfig -> Maybe Prices -> ShelleyBlock PraosStandard StandardBabbage -> Block
141142
fromBabbageBlock iope mprices blk =
142143
Block
143144
{ blkEra = Babbage
@@ -154,7 +155,7 @@ fromBabbageBlock iope mprices blk =
154155
, blkTxs = map (fromBabbageTx iope mprices) (getTxs blk)
155156
}
156157

157-
fromConwayBlock :: Bool -> Maybe Prices -> ShelleyBlock PraosStandard StandardConway -> Block
158+
fromConwayBlock :: PlutusConfig -> Maybe Prices -> ShelleyBlock PraosStandard StandardConway -> Block
158159
fromConwayBlock iope mprices blk =
159160
Block
160161
{ blkEra = Conway

cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Generic/Tx/Alonzo.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ module Cardano.DbSync.Era.Shelley.Generic.Tx.Alonzo (
2626

2727
import qualified Cardano.Crypto.Hash as Crypto
2828
import Cardano.Db (ScriptType (..))
29+
import Cardano.DbSync.Config.Types (PlutusConfig, isPlutusEnableOrWhitelist)
2930
import Cardano.DbSync.Era.Shelley.Generic.Metadata
3031
import Cardano.DbSync.Era.Shelley.Generic.Script (fromTimelock)
3132
import Cardano.DbSync.Era.Shelley.Generic.ScriptData (ScriptData (..))
@@ -65,7 +66,7 @@ import qualified Data.Set as Set
6566
import Lens.Micro
6667
import Ouroboros.Consensus.Cardano.Block (EraCrypto, StandardAlonzo, StandardCrypto)
6768

68-
fromAlonzoTx :: Bool -> Maybe Alonzo.Prices -> (Word64, Core.Tx StandardAlonzo) -> Tx
69+
fromAlonzoTx :: PlutusConfig -> Maybe Alonzo.Prices -> (Word64, Core.Tx StandardAlonzo) -> Tx
6970
fromAlonzoTx ioExtraPlutus mprices (blkIndex, tx) =
7071
Tx
7172
{ txHash = txHashId tx
@@ -178,13 +179,13 @@ resolveRedeemers ::
178179
, Core.EraTx era
179180
, Alonzo.MaryEraTxBody era
180181
) =>
181-
Bool ->
182+
PlutusConfig ->
182183
Maybe Alonzo.Prices ->
183184
Core.Tx era ->
184185
(TxCert era -> Cert) ->
185186
(RedeemerMaps, [(Word64, TxRedeemer)])
186187
resolveRedeemers ioExtraPlutus mprices tx toCert =
187-
if not ioExtraPlutus
188+
if not $ isPlutusEnableOrWhitelist ioExtraPlutus
188189
then (initRedeemersMaps, [])
189190
else
190191
mkRdmrAndUpdateRec (initRedeemersMaps, []) $

0 commit comments

Comments
 (0)