Skip to content

Commit f74ad71

Browse files
committed
adjust the whitelist checking
1 parent 47e8328 commit f74ad71

File tree

5 files changed

+159
-141
lines changed

5 files changed

+159
-141
lines changed

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

Lines changed: 4 additions & 3 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 <- mapMaybeM (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
@@ -162,12 +163,12 @@ prepareTxOut ::
162163
SyncEnv ->
163164
TxCache ->
164165
(TxIn StandardCrypto, BabbageTxOut era) ->
165-
ExceptT SyncNodeError (ReaderT SqlBackend m) (Maybe (ExtendedTxOut, [MissingMaTxOut]))
166+
ExceptT SyncNodeError (ReaderT SqlBackend m) (ExtendedTxOut, [MissingMaTxOut])
166167
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/Config.hs

Lines changed: 27 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,27 @@ 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+
PlutusWhitelistScripts whitelist -> do
104+
-- we map over our txOuts and check if txOutAddress OR txOutScript are in the whitelist
105+
let whitelistCheck =
106+
( \txOut ->
107+
case (Generic.txOutScript txOut, Generic.maybePaymentCred $ Generic.txOutAddress txOut) of
108+
(Just script, _) ->
109+
if Generic.txScriptHash script `elem` whitelist
110+
then Just txOut
111+
else Nothing
112+
(_, Just address) ->
113+
if address `elem` whitelist
114+
then Just txOut
115+
else Nothing
116+
(Nothing, Nothing) -> Nothing
117+
)
118+
<$> txOuts
119+
any isJust whitelistCheck
120+
_ -> False

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ module Cardano.DbSync.Config.Types (
2727
NetworkName (..),
2828
NodeConfigFile (..),
2929
SocketPath (..),
30-
isMetaDataConfigEnabled,
31-
isMultiAssetConfigEnabled,
32-
isPlutusConfigEnabled,
30+
isDisableOrWhiteListMetaData,
31+
isDissableOrWhitelistMultiAsset,
32+
isPlutusDisableOrWhitelist,
3333
adjustGenesisFilePath,
3434
adjustNodeConfigFilePath,
3535
pcNodeConfigFilePath,
@@ -144,10 +144,10 @@ data MetadataConfig
144144
| MetadataWhitelistKeys (NonEmpty ByteString)
145145
deriving (Eq, Show)
146146

147-
isMetaDataConfigEnabled :: MetadataConfig -> Bool
148-
isMetaDataConfigEnabled = \case
149-
MetadataEnable -> True
150-
MetadataDisable -> False
147+
isDisableOrWhiteListMetaData :: MetadataConfig -> Bool
148+
isDisableOrWhiteListMetaData = \case
149+
MetadataEnable -> False
150+
MetadataDisable -> True
151151
MetadataWhitelistKeys _ -> True
152152

153153
data MultiAssetConfig
@@ -156,10 +156,10 @@ data MultiAssetConfig
156156
| MultiAssetWhitelistPolicies (NonEmpty ByteString)
157157
deriving (Eq, Show)
158158

159-
isMultiAssetConfigEnabled :: MultiAssetConfig -> Bool
160-
isMultiAssetConfigEnabled = \case
161-
MultiAssetEnable -> True
162-
MultiAssetDisable -> False
159+
isDissableOrWhitelistMultiAsset :: MultiAssetConfig -> Bool
160+
isDissableOrWhitelistMultiAsset = \case
161+
MultiAssetEnable -> False
162+
MultiAssetDisable -> True
163163
MultiAssetWhitelistPolicies _ -> True
164164

165165
data PlutusConfig
@@ -168,11 +168,11 @@ data PlutusConfig
168168
| PlutusWhitelistScripts (NonEmpty ByteString)
169169
deriving (Eq, Show)
170170

171-
isPlutusConfigEnabled :: PlutusConfig -> Bool
172-
isPlutusConfigEnabled = \case
173-
PlutusEnable -> True
174-
PlutusDisable -> False
171+
isPlutusDisableOrWhitelist :: PlutusConfig -> Bool
172+
isPlutusDisableOrWhitelist = \case
173+
PlutusEnable -> False
175174
PlutusWhitelistScripts _ -> True
175+
PlutusDisable -> True
176176

177177
newtype GenesisFile = GenesisFile
178178
{ unGenesisFile :: FilePath

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +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, isPlutusConfigEnabled)
29+
import Cardano.DbSync.Config.Types (PlutusConfig, isPlutusDisableOrWhitelist)
3030
import Cardano.DbSync.Era.Shelley.Generic.Metadata
3131
import Cardano.DbSync.Era.Shelley.Generic.Script (fromTimelock)
3232
import Cardano.DbSync.Era.Shelley.Generic.ScriptData (ScriptData (..))
@@ -185,7 +185,7 @@ resolveRedeemers ::
185185
(TxCert era -> Cert) ->
186186
(RedeemerMaps, [(Word64, TxRedeemer)])
187187
resolveRedeemers ioExtraPlutus mprices tx toCert =
188-
if not $ isPlutusConfigEnabled ioExtraPlutus
188+
if not $ isPlutusDisableOrWhitelist ioExtraPlutus
189189
then (initRedeemersMaps, [])
190190
else
191191
mkRdmrAndUpdateRec (initRedeemersMaps, []) $

0 commit comments

Comments
 (0)