Skip to content

Commit 602414f

Browse files
committed
allow whitelist for insertMultiAsset
1 parent fea1938 commit 602414f

File tree

13 files changed

+274
-160
lines changed

13 files changed

+274
-160
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
@@ -91,7 +91,6 @@ pRunDbSyncNode = do
9191
<*> pHasMultiAssets
9292
<*> pHasMetadata
9393
<*> pWhiteListTxMetadata
94-
<*> pWhiteListMAPolicies
9594
<*> pHasPlutusExtra
9695
<*> pHasGov
9796
<*> pHasOffChainPoolData
@@ -242,14 +241,6 @@ pWhiteListTxMetadata =
242241
<> Opt.help "Insert a specific set of tx metadata, based on the tx metadata key names"
243242
)
244243

245-
pWhiteListMAPolicies :: Parser [Word64]
246-
pWhiteListMAPolicies =
247-
Opt.option
248-
(parseCommaSeparated <$> Opt.str)
249-
( Opt.long "whitelist-multi-asset-policy"
250-
<> Opt.help "Only insert a specific sellected list of multi-assets, based on the multi-asset's policy name"
251-
)
252-
253244
parseCommaSeparated :: String -> [Word64]
254245
parseCommaSeparated str =
255246
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 (..),
@@ -55,7 +58,6 @@ import Cardano.Prelude hiding (Nat, (%))
5558
import Cardano.Slotting.Slot (EpochNo (..))
5659
import Control.Concurrent.Async
5760
import Control.Monad.Extra (whenJust)
58-
import qualified Data.Strict.Maybe as Strict
5961
import qualified Data.Text as Text
6062
import Data.Version (showVersion)
6163
import Database.Persist.Postgresql (ConnectionString, withPostgresqlConn)
@@ -232,14 +234,6 @@ extractSyncOptions snp aop =
232234
, snapshotEveryLagging = enpSnEveryLagging snp
233235
}
234236
where
235-
maybeWhitelistMDNames = whitelistToMaybe (enpWhitelistMetadataNames snp)
236-
maybeWhitelistMAPolicies = whitelistToMaybe (enpWhitelistMAPolicies snp)
237-
238-
whitelistToMaybe wList =
239-
if null wList
240-
then Strict.Nothing
241-
else Strict.Just wList
242-
243237
iopts
244238
| enpOnlyGov snp = onlyGovInsertOptions useLedger
245239
| enpOnlyUTxO snp = onlyUTxOInsertOptions
@@ -251,11 +245,10 @@ extractSyncOptions snp aop =
251245
, ioUseLedger = useLedger
252246
, ioShelley = enpHasShelley snp
253247
, ioRewards = True
254-
, ioMultiAssets = enpHasMultiAssets snp
255-
, ioMetadata = enpHasMetadata snp
256-
, ioWhitelistMetadataNames = maybeWhitelistMDNames
257-
, ioWhitelistMAPolicies = maybeWhitelistMAPolicies
258-
, ioPlutusExtra = enpHasPlutusExtra snp
248+
, -- TODO: cmdv: this is where we plug configs
249+
ioMultiAssets = MultiAssetDisable
250+
, ioMetadata = MetadataDisable
251+
, ioPlutusExtra = PlutusDisable
259252
, ioOffChainPoolData = enpHasOffChainPoolData snp
260253
, ioGov = enpHasGov snp
261254
}

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 & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +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 (SyncNodeConfig)
18+
import Cardano.DbSync.Config.Types (SyncNodeConfig, MetadataConfig, MultiAssetConfig, PlutusConfig)
1919
import Cardano.DbSync.Ledger.Types (HasLedgerEnv)
2020
import Cardano.DbSync.LocalStateQuery (NoLedgerEnv)
2121
import Cardano.DbSync.Types (
@@ -24,7 +24,7 @@ import Cardano.DbSync.Types (
2424
OffChainVoteResult,
2525
OffChainVoteWorkQueue,
2626
)
27-
import Cardano.Prelude (Bool, Eq, IO, Show, Word64)
27+
import Cardano.Prelude (Bool (..), Eq, IO, Show, Word64)
2828
import Cardano.Slotting.Slot (EpochNo (..))
2929
import Control.Concurrent.Class.MonadSTM.Strict (
3030
StrictTVar,
@@ -78,11 +78,9 @@ data InsertOptions = InsertOptions
7878
, ioUseLedger :: !Bool
7979
, ioShelley :: !Bool
8080
, ioRewards :: !Bool
81-
, ioMultiAssets :: !Bool
82-
, ioMetadata :: !Bool
83-
, ioWhitelistMetadataNames :: Strict.Maybe [Word64]
84-
, ioWhitelistMAPolicies :: Strict.Maybe [Word64]
85-
, ioPlutusExtra :: !Bool
81+
, ioMultiAssets :: !MultiAssetConfig
82+
, ioMetadata :: !MetadataConfig
83+
, ioPlutusExtra :: !PlutusConfig
8684
, ioOffChainPoolData :: !Bool
8785
, ioGov :: !Bool
8886
}

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

@@ -88,3 +91,28 @@ coalesceConfig pcfg ncfg adjustGenesisPath = do
8891

8992
mkAdjustPath :: SyncPreConfig -> (FilePath -> FilePath)
9093
mkAdjustPath cfg fp = takeDirectory (pcNodeConfigFilePath cfg) </> fp
94+
95+
-- do a whitelist check against a list of TxOut and if one matches we keep them all
96+
plutusWhitelistCheckTxOut :: SyncEnv -> [Generic.TxOut] -> Bool
97+
plutusWhitelistCheckTxOut syncEnv txOuts = do
98+
let iopts = soptInsertOptions $ envOptions syncEnv
99+
case ioPlutusExtra iopts of
100+
PlutusEnable -> True
101+
PlutusDisable -> False
102+
PlutusWhitelistScripts whitelist -> do
103+
-- we map over our txOuts and check if txOutAddress OR txOutScript are in the whitelist
104+
let whitelistCheck =
105+
( \txOut ->
106+
case (Generic.txOutScript txOut, Generic.maybePaymentCred $ Generic.txOutAddress txOut) of
107+
(Just script, _) ->
108+
if Generic.txScriptHash script `elem` whitelist
109+
then Just txOut
110+
else Nothing
111+
(_, Just address) ->
112+
if address `elem` whitelist
113+
then Just txOut
114+
else Nothing
115+
(Nothing, Nothing) -> Nothing
116+
)
117+
<$> txOuts
118+
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
@@ -176,13 +177,13 @@ resolveRedeemers ::
176177
, Core.EraTx era
177178
, Alonzo.MaryEraTxBody era
178179
) =>
179-
Bool ->
180+
PlutusConfig ->
180181
Maybe Alonzo.Prices ->
181182
Core.Tx era ->
182183
(TxCert era -> Cert) ->
183184
(RedeemerMaps, [(Word64, TxRedeemer)])
184185
resolveRedeemers ioExtraPlutus mprices tx toCert =
185-
if not ioExtraPlutus
186+
if not $ isPlutusEnableOrWhitelist ioExtraPlutus
186187
then (initRedeemersMaps, [])
187188
else
188189
mkRdmrAndUpdateRec (initRedeemersMaps, []) $

0 commit comments

Comments
 (0)