@@ -9,16 +9,22 @@ import Cardano.DbSync.Error (shortBsBase16Encode)
99import qualified Cardano.Ledger.Address as Ledger
1010import qualified Cardano.Ledger.Credential as Ledger
1111import Cardano.Ledger.Crypto (StandardCrypto )
12- import Cardano.Ledger.Mary.Value (PolicyID (.. ))
12+ import Cardano.Ledger.Mary.Value (MultiAsset ( .. ), PolicyID (.. ))
1313import Cardano.Prelude (NonEmpty )
1414import Data.ByteString (ByteString )
1515import Data.ByteString.Short (ShortByteString , toShort )
1616import 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
2329isPlutusScriptHashesInWhitelist :: SyncEnv -> [Generic. TxOut ] -> Bool
2430isPlutusScriptHashesInWhitelist syncEnv txOuts = do
@@ -45,32 +51,44 @@ isSimplePlutusScriptHashInWhitelist :: SyncEnv -> ByteString -> Bool
4551isSimplePlutusScriptHashInWhitelist 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+
7492shelleyStkAddrWhitelistCheckWithAddr ::
7593 SyncEnv ->
7694 Ledger. Addr StandardCrypto ->
0 commit comments