Skip to content

Commit 92ab49f

Browse files
committed
add minting policies check to isMAPoliciesInWhitelist
1 parent 26622eb commit 92ab49f

File tree

3 files changed

+43
-23
lines changed

3 files changed

+43
-23
lines changed

cardano-db-sync/src/Cardano/DbSync/Era/Universal/Insert/Tx.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
module Cardano.DbSync.Era.Universal.Insert.Tx (
1212
insertTx,
1313
insertTxOut,
14-
) where
14+
)
15+
where
1516

1617
import Cardano.BM.Trace (Trace)
1718
import Cardano.Db (DbLovelace (..), DbWord64 (..))
1819
import qualified Cardano.Db as DB
1920
import Cardano.DbSync.Api
2021
import Cardano.DbSync.Api.Types (InsertOptions (..), SyncEnv (..))
2122
import Cardano.DbSync.Cache.Types (CacheStatus (..))
22-
2323
import Cardano.DbSync.Config.Types (MetadataConfig (..), MultiAssetConfig (..), PlutusConfig (..), isPlutusModeActive, isShelleyModeActive)
2424
import qualified Cardano.DbSync.Era.Shelley.Generic as Generic
2525
import Cardano.DbSync.Era.Shelley.Generic.Metadata (TxMetadataValue (..), metadataValueToJsonNoSchema)
@@ -124,8 +124,7 @@ insertTx syncEnv isMember blkId epochNo slotNo applyResult blockIndex tx grouped
124124
if not (Generic.txValidContract tx)
125125
then do
126126
!txOutsGrouped <- do
127-
let txOuts = Generic.txOutputs tx
128-
if plutusMultiAssetWhitelistCheck syncEnv txOuts
127+
if plutusMultiAssetWhitelistCheck syncEnv txMints txOuts
129128
then mapMaybeM (insertTxOut syncEnv cache iopts (txId, txHash)) txOuts
130129
else pure mempty
131130

@@ -137,8 +136,7 @@ insertTx syncEnv isMember blkId epochNo slotNo applyResult blockIndex tx grouped
137136
-- The following operations only happen if the script passes stage 2 validation (or the tx has
138137
-- no script).
139138
!txOutsGrouped <- do
140-
let txOuts = Generic.txOutputs tx
141-
if plutusMultiAssetWhitelistCheck syncEnv txOuts
139+
if plutusMultiAssetWhitelistCheck syncEnv txMints txOuts
142140
then mapMaybeM (insertTxOut syncEnv cache iopts (txId, txHash)) txOuts
143141
else pure mempty
144142

@@ -183,6 +181,8 @@ insertTx syncEnv isMember blkId epochNo slotNo applyResult blockIndex tx grouped
183181
let !txIns = map (prepareTxIn txId redeemers) resolvedInputs
184182
pure (grouped <> BlockGroupedData txIns txOutsGrouped txMetadata maTxMint resolvedFees outSum)
185183
where
184+
txOuts = Generic.txOutputs tx
185+
txMints = Generic.txMint tx
186186
tracer = getTrace syncEnv
187187
cache = envCache syncEnv
188188
iopts = getInsertOptions syncEnv

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

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,22 @@ import Cardano.DbSync.Error (shortBsBase16Encode)
99
import qualified Cardano.Ledger.Address as Ledger
1010
import qualified Cardano.Ledger.Credential as Ledger
1111
import Cardano.Ledger.Crypto (StandardCrypto)
12-
import Cardano.Ledger.Mary.Value (PolicyID (..))
12+
import Cardano.Ledger.Mary.Value (MultiAsset (..), PolicyID (..))
1313
import Cardano.Prelude (NonEmpty)
1414
import Data.ByteString (ByteString)
1515
import Data.ByteString.Short (ShortByteString, toShort)
1616
import Data.Map (keys)
1717

1818
-- check both whitelist but also checking plutus Maybes first
19-
plutusMultiAssetWhitelistCheck :: SyncEnv -> [Generic.TxOut] -> Bool
20-
plutusMultiAssetWhitelistCheck syncEnv txOuts =
21-
isPlutusScriptHashesInWhitelist syncEnv txOuts || isMAPoliciesInWhitelist syncEnv txOuts
19+
plutusMultiAssetWhitelistCheck ::
20+
SyncEnv ->
21+
-- | TxMint
22+
MultiAsset StandardCrypto ->
23+
-- | TxOuts
24+
[Generic.TxOut] ->
25+
Bool
26+
plutusMultiAssetWhitelistCheck syncEnv txMints txOuts =
27+
isPlutusScriptHashesInWhitelist syncEnv txOuts || isMAPoliciesInWhitelist syncEnv txMints txOuts
2228

2329
isPlutusScriptHashesInWhitelist :: SyncEnv -> [Generic.TxOut] -> Bool
2430
isPlutusScriptHashesInWhitelist syncEnv txOuts = do
@@ -45,32 +51,44 @@ isSimplePlutusScriptHashInWhitelist :: SyncEnv -> ByteString -> Bool
4551
isSimplePlutusScriptHashInWhitelist syncEnv scriptHash = do
4652
case ioPlutus iopts of
4753
PlutusEnable -> True
48-
PlutusDisable -> False
54+
PlutusDisable -> True
4955
PlutusScripts plutusWhitelist -> toShort scriptHash `elem` plutusWhitelist
5056
where
5157
iopts = soptInsertOptions $ envOptions syncEnv
5258

53-
isMAPoliciesInWhitelist :: SyncEnv -> [Generic.TxOut] -> Bool
54-
isMAPoliciesInWhitelist syncEnv txOuts = do
59+
isMAPoliciesInWhitelist ::
60+
SyncEnv ->
61+
-- | TxMint
62+
MultiAsset StandardCrypto ->
63+
-- | TxOuts
64+
[Generic.TxOut] ->
65+
Bool
66+
isMAPoliciesInWhitelist syncEnv (MultiAsset mintMap) txOuts = do
5567
let iopts = soptInsertOptions $ envOptions syncEnv
5668
case ioMultiAssets iopts of
5769
MultiAssetEnable -> True
58-
MultiAssetDisable -> False
70+
MultiAssetDisable -> True
5971
MultiAssetPolicies multiAssetWhitelist ->
60-
or multiAssetwhitelistCheck
72+
mintPoliciesCheck || txOutPoliciesCheck
6173
where
62-
-- txOutMaValue is a Map and we want to check if any of the keys match our whitelist
63-
multiAssetwhitelistCheck :: [Bool]
64-
multiAssetwhitelistCheck =
65-
( \txout ->
66-
any (checkMAValueMap multiAssetWhitelist) (keys $ Generic.txOutMaValue txout)
67-
)
68-
<$> txOuts
74+
mintPoliciesCheck :: Bool
75+
mintPoliciesCheck = any (checkMAValueMap multiAssetWhitelist) mintPolicies
76+
77+
txOutPoliciesCheck :: Bool
78+
txOutPoliciesCheck =
79+
any
80+
( \txout ->
81+
any (checkMAValueMap multiAssetWhitelist) (keys $ Generic.txOutMaValue txout)
82+
)
83+
txOuts
6984

7085
checkMAValueMap :: NonEmpty ShortByteString -> PolicyID StandardCrypto -> Bool
7186
checkMAValueMap maWhitelist policyId =
7287
toShort (Generic.unScriptHash (policyID policyId)) `elem` maWhitelist
7388

89+
mintPolicies :: [PolicyID StandardCrypto]
90+
mintPolicies = keys mintMap
91+
7492
shelleyStkAddrWhitelistCheckWithAddr ::
7593
SyncEnv ->
7694
Ledger.Addr StandardCrypto ->

doc/configuration.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,11 @@ Be mindfull that whitelisting policies will omit data that does not match whitel
427427
| table name |
428428
| :-------------------- |
429429
| datum |
430+
| ma_tx_mint |
431+
| ma_tx_out |
432+
| multi_assets |
430433
| script |
431434
| tx_out |
432-
| multi_assets |
433435

434436
#### Example
435437

0 commit comments

Comments
 (0)