Skip to content

Commit e285b01

Browse files
committed
Extendend whitelist options
1 parent dc8b8cc commit e285b01

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1819
-1273
lines changed

cardano-chain-gen/cardano-chain-gen.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ library
6161
build-depends: base >= 4.14 && < 5
6262
, async
6363
, aeson
64+
, base16-bytestring
6465
, bytestring
6566
, cardano-binary
6667
, cardano-crypto-class
@@ -167,6 +168,7 @@ test-suite cardano-chain-gen
167168
Test.Cardano.Db.Mock.Unit.Conway.Simple
168169
Test.Cardano.Db.Mock.Unit.Conway.Stake
169170
Test.Cardano.Db.Mock.Unit.Conway.Tx
171+
Test.Cardano.Db.Mock.Unit.Conway.Whitelist
170172
Test.Cardano.Db.Mock.UnifiedApi
171173
Test.Cardano.Db.Mock.Validate
172174

@@ -200,7 +202,6 @@ test-suite cardano-chain-gen
200202
, stm
201203
, strict-stm
202204
, tasty
203-
, tasty-expected-failure
204205
, tasty-quickcheck
205206
, text
206207
, transformers

cardano-chain-gen/src/Cardano/Mock/Forging/Tx/Alonzo/ScriptsExamples.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module Cardano.Mock.Forging.Tx.Alonzo.ScriptsExamples (
2323
alwaysMintScriptHash,
2424
alwaysMintScriptAddr,
2525
alwaysMintScriptStake,
26+
alwaysMintScriptHashRandomPolicyVal,
2627
scriptHash,
2728
assetNames,
2829
plutusData2,
@@ -47,6 +48,7 @@ import Codec.Serialise
4748
import Codec.Serialise.Encoding
4849
import Data.ByteString.Short
4950
import Data.Maybe
51+
import Numeric.Natural (Natural)
5052
import Ouroboros.Consensus.Cardano.Block (StandardAlonzo)
5153
import qualified PlutusCore.Data as Plutus
5254
import qualified PlutusLedgerApi.Test.Examples as Plutus
@@ -103,6 +105,15 @@ alwaysMintScriptStake = ScriptHashObj alwaysMintScriptHash
103105
mkPlutusScriptEra :: AlonzoEraScript era => PlutusBinary -> AlonzoScript era
104106
mkPlutusScriptEra sh = PlutusScript $ fromJust $ mkBinaryPlutusScript PlutusV1 sh
105107

108+
alwaysMintScriptHashRandomPolicyVal :: Natural -> ScriptHash StandardCrypto
109+
alwaysMintScriptHashRandomPolicyVal n = scriptHash @StandardAlonzo $ alwaysMintRandomScript n
110+
111+
alwaysMintRandomScript :: AlonzoEraScript era => Natural -> AlonzoScript era
112+
alwaysMintRandomScript n = mkPlutusScriptEra $ alwaysMintRandomPlutusBinary n
113+
114+
alwaysMintRandomPlutusBinary :: Natural -> PlutusBinary
115+
alwaysMintRandomPlutusBinary n = PlutusBinary $ Plutus.alwaysFailingNAryFunction n
116+
106117
scriptHash ::
107118
forall era.
108119
( EraCrypto era ~ StandardCrypto

cardano-chain-gen/src/Cardano/Mock/Forging/Tx/Conway.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ module Cardano.Mock.Forging.Tx.Conway (
3838
mkNewConstitutionTx,
3939
mkDummyRegisterTx,
4040
mkDummyTxBody,
41+
mkDummyTxBodyWithFee,
4142
mkTxDelegCert,
4243
mkRegTxCert,
4344
mkUnRegTxCert,
@@ -589,6 +590,21 @@ mkDummyTxBody =
589590
mempty
590591
(Withdrawals mempty)
591592

593+
mkDummyTxBodyWithFee ::
594+
Coin ->
595+
ConwayTxBody StandardConway
596+
mkDummyTxBodyWithFee coin' =
597+
consTxBody
598+
mempty
599+
mempty
600+
mempty
601+
mempty
602+
SNothing
603+
coin'
604+
mempty
605+
mempty
606+
(Withdrawals mempty)
607+
592608
mkFullTx ::
593609
Int ->
594610
Integer ->

cardano-chain-gen/src/Cardano/Mock/Query.hs

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,20 @@ module Cardano.Mock.Query (
1111
queryGovActionCounts,
1212
queryConstitutionAnchor,
1313
queryRewardRests,
14+
queryMultiAssetMetadataPolicy,
15+
queryStakeAddressHashRaw,
16+
queryStakeAddressCount,
17+
queryCollateralTxOutCount,
18+
queryPoolUpdateCount,
19+
queryStakeDeRegCount,
20+
queryStakeRegCount,
21+
countTxOutNonNullStakeAddrIds,
1422
) where
1523

1624
import qualified Cardano.Db as Db
17-
import Cardano.Prelude hiding (from, on)
25+
import Cardano.Prelude hiding (from, isNothing, on)
26+
import qualified Data.ByteString.Base16 as Base16
27+
import Data.ByteString.Short (ShortByteString, toShort)
1828
import Database.Esqueleto.Experimental
1929
import Prelude ()
2030

@@ -150,3 +160,60 @@ queryRewardRests = do
150160
pure (reward ^. Db.RewardRestType, reward ^. Db.RewardRestAmount)
151161

152162
pure $ map (bimap unValue (Db.unDbLovelace . unValue)) res
163+
164+
queryMultiAssetMetadataPolicy :: MonadIO io => ReaderT SqlBackend io (Maybe ShortByteString)
165+
queryMultiAssetMetadataPolicy = do
166+
res <- selectOne $ do
167+
metadataPolicy <- from $ table @Db.MultiAsset
168+
pure $ metadataPolicy ^. Db.MultiAssetPolicy
169+
pure $ toShort . Base16.encode . unValue <$> res
170+
171+
queryStakeAddressHashRaw :: MonadIO io => ReaderT SqlBackend io (Maybe ShortByteString)
172+
queryStakeAddressHashRaw = do
173+
res <- selectOne $ do
174+
stakeAddress <- from $ table @Db.StakeAddress
175+
pure $ stakeAddress ^. Db.StakeAddressHashRaw
176+
pure $ toShort . Base16.encode . unValue <$> res
177+
178+
queryStakeAddressCount :: MonadIO io => ReaderT SqlBackend io Word
179+
queryStakeAddressCount = do
180+
res <- selectOne $ do
181+
_ <- from (table @Db.StakeAddress)
182+
pure countRows
183+
pure $ maybe 0 unValue res
184+
185+
queryCollateralTxOutCount :: MonadIO io => ReaderT SqlBackend io Word
186+
queryCollateralTxOutCount = do
187+
res <- selectOne $ do
188+
_ <- from (table @Db.CollateralTxOut)
189+
pure countRows
190+
pure $ maybe 0 unValue res
191+
192+
queryPoolUpdateCount :: MonadIO io => ReaderT SqlBackend io Word
193+
queryPoolUpdateCount = do
194+
res <- selectOne $ do
195+
_ <- from (table @Db.PoolUpdate)
196+
pure countRows
197+
pure $ maybe 0 unValue res
198+
199+
queryStakeDeRegCount :: MonadIO io => ReaderT SqlBackend io Word
200+
queryStakeDeRegCount = do
201+
res <- selectOne $ do
202+
_ <- from (table @Db.StakeDeregistration)
203+
pure countRows
204+
pure $ maybe 0 unValue res
205+
206+
queryStakeRegCount :: MonadIO io => ReaderT SqlBackend io Word
207+
queryStakeRegCount = do
208+
res <- selectOne $ do
209+
_ <- from (table @Db.StakeRegistration)
210+
pure countRows
211+
pure $ maybe 0 unValue res
212+
213+
countTxOutNonNullStakeAddrIds :: (MonadIO m) => SqlPersistT m Word
214+
countTxOutNonNullStakeAddrIds = do
215+
result <- selectOne $ do
216+
txOut <- from $ table @Db.TxOut
217+
where_ $ not_ (isNothing $ txOut ^. Db.TxOutStakeAddressId)
218+
pure countRows
219+
pure $ maybe 0 unValue result

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ module Test.Cardano.Db.Mock.Unit.Babbage (
99
import Cardano.Mock.ChainSync.Server (IOManager)
1010
import Data.Text (Text)
1111
import Test.Tasty (TestTree, testGroup)
12-
import Test.Tasty.ExpectedFailure (expectFail)
1312
import Test.Tasty.HUnit (Assertion, testCase)
1413

1514
import qualified Test.Cardano.Db.Mock.Unit.Babbage.CommandLineArg.ConfigFile as ConfigFile
@@ -25,6 +24,7 @@ import qualified Test.Cardano.Db.Mock.Unit.Babbage.Rollback as BabRollback
2524
import qualified Test.Cardano.Db.Mock.Unit.Babbage.Simple as BabSimple
2625
import qualified Test.Cardano.Db.Mock.Unit.Babbage.Stake as BabStake
2726
import qualified Test.Cardano.Db.Mock.Unit.Babbage.Tx as BabTx
27+
import Test.Cardano.Db.Mock.Validate (expectFailSilent)
2828

2929
unitTests :: IOManager -> [(Text, Text)] -> TestTree
3030
unitTests iom knownMigrations =
@@ -45,9 +45,9 @@ unitTests iom knownMigrations =
4545
, test "no pruning and rollback" MigrateConsumedPruneTxOut.noPruneAndRollBack
4646
, test "prune same block" MigrateConsumedPruneTxOut.pruneSameBlock
4747
, test "no pruning same block" MigrateConsumedPruneTxOut.noPruneSameBlock
48-
, expectFail $ test "restart with new consumed set to false" MigrateConsumedPruneTxOut.migrateAndPruneRestart
49-
, expectFail $ test "set prune flag, restart missing prune flag" MigrateConsumedPruneTxOut.pruneRestartMissingFlag
50-
, expectFail $ test "set bootstrap flag, restart missing bootstrap flag" MigrateConsumedPruneTxOut.bootstrapRestartMissingFlag
48+
, expectFailSilent "restart with new consumed set to false" $ MigrateConsumedPruneTxOut.migrateAndPruneRestart iom knownMigrations
49+
, expectFailSilent "set prune flag, restart missing prune flag" $ MigrateConsumedPruneTxOut.pruneRestartMissingFlag iom knownMigrations
50+
, expectFailSilent "set bootstrap flag, restart missing bootstrap flag" $ MigrateConsumedPruneTxOut.bootstrapRestartMissingFlag iom knownMigrations
5151
]
5252
]
5353
, testGroup
@@ -63,7 +63,7 @@ unitTests iom knownMigrations =
6363
"Command Line Arguments"
6464
[ testGroup
6565
"config"
66-
[ expectFail $ test "fails if incorrect config file given" ConfigFile.checkConfigFileArg
66+
[ expectFailSilent "fails if incorrect config file given" $ ConfigFile.checkConfigFileArg iom knownMigrations
6767
]
6868
, testGroup
6969
"disable-epoch"

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

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import qualified Test.Cardano.Db.Mock.Unit.Conway.Rollback as Rollback
1616
import qualified Test.Cardano.Db.Mock.Unit.Conway.Simple as Simple
1717
import qualified Test.Cardano.Db.Mock.Unit.Conway.Stake as Stake
1818
import qualified Test.Cardano.Db.Mock.Unit.Conway.Tx as Tx
19+
import qualified Test.Cardano.Db.Mock.Unit.Conway.Whitelist as Whitelist
20+
import Test.Cardano.Db.Mock.Validate (expectFailSilent)
1921
import Test.Tasty (TestTree (), testGroup)
20-
import Test.Tasty.ExpectedFailure (expectFail)
2122
import Test.Tasty.HUnit (Assertion (), testCase)
2223
import Prelude (String ())
2324

@@ -34,6 +35,12 @@ unitTests iom knownMigrations =
3435
, testCase "mismatched conway genesis hash" Config.wrongConwayGenesisHash
3536
, testCase "default insert config" Config.defaultInsertConfig
3637
, testCase "insert config" Config.insertConfig
38+
, testGroup
39+
"invalid whitelist hashes"
40+
[ testCase "Fail if Shelley stake address hash is invalid" Config.invalidShelleyStkAddrHash
41+
, testCase "Fail if multi-asset policies hash is invalid" Config.invalidMultiAssetPoliciesHash
42+
, testCase "Fail if Plutus script hash invalid" Config.invalidPlutusScriptHash
43+
]
3744
, testGroup
3845
"tx-out"
3946
[ test "consumed_by_tx_id column check" MigrateConsumedPruneTxOut.txConsumedColumnCheck
@@ -45,18 +52,9 @@ unitTests iom knownMigrations =
4552
, test "no pruning and rollback" MigrateConsumedPruneTxOut.noPruneAndRollBack
4653
, test "prune same block" MigrateConsumedPruneTxOut.pruneSameBlock
4754
, test "no pruning same block" MigrateConsumedPruneTxOut.noPruneSameBlock
48-
, expectFail $
49-
test
50-
"restart with new consumed set to false"
51-
MigrateConsumedPruneTxOut.migrateAndPruneRestart
52-
, expectFail $
53-
test
54-
"set prune flag, restart missing prune flag"
55-
MigrateConsumedPruneTxOut.pruneRestartMissingFlag
56-
, expectFail $
57-
test
58-
"set bootstrap flag, restart missing bootstrap flag"
59-
MigrateConsumedPruneTxOut.bootstrapRestartMissingFlag
55+
, expectFailSilent "restart with new consumed set to false" $ MigrateConsumedPruneTxOut.migrateAndPruneRestart iom knownMigrations
56+
, expectFailSilent "set prune flag, restart missing prune flag" $ MigrateConsumedPruneTxOut.pruneRestartMissingFlag iom knownMigrations
57+
, expectFailSilent "set bootstrap flag, restart missing bootstrap flag" $ MigrateConsumedPruneTxOut.bootstrapRestartMissingFlag iom knownMigrations
6058
]
6159
]
6260
, testGroup
@@ -72,10 +70,7 @@ unitTests iom knownMigrations =
7270
"Command Line Arguments"
7371
[ testGroup
7472
"config"
75-
[ expectFail $
76-
test
77-
"fails if incorrect config file given"
78-
ConfigFile.checkConfigFileArg
73+
[ expectFailSilent "fails if incorrect config file given" $ ConfigFile.checkConfigFileArg iom knownMigrations
7974
]
8075
, testGroup
8176
"disable-epoch"
@@ -113,7 +108,6 @@ unitTests iom knownMigrations =
113108
, test "consume utxo same block" Tx.consumeSameBlock
114109
, test "tx with metadata" Tx.addTxMetadata
115110
, test "tx with metadata disabled" Tx.addTxMetadataDisabled
116-
, test "tx with metadata whitelist" Tx.addTxMetadataWhitelist
117111
]
118112
, testGroup
119113
"stake addresses"
@@ -175,6 +169,14 @@ unitTests iom knownMigrations =
175169
, test "swap many multi assets" Plutus.swapMultiAssets
176170
, test "swap with multi assets disabled" Plutus.swapMultiAssetsDisabled
177171
]
172+
, testGroup
173+
"Whitelist"
174+
[ test "add tx with whitelist" Whitelist.addTxMultiAssetsWhitelist
175+
, test "tx with metadata whitelist" Whitelist.addTxMetadataWhitelist
176+
, test "tx with metadata whitelist multiple" Whitelist.addTxMetadataWhitelistMultiple
177+
, test "add simple tx, whitelist tx address" Whitelist.addSimpleTxStakeAddrsWhitelist
178+
, test "add full tx, with stake address whitelist" Whitelist.fullTxStakeAddressWhitelist
179+
]
178180
, testGroup
179181
"Pools and smash"
180182
[ test "pool registration" Other.poolReg

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

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,29 @@ module Test.Cardano.Db.Mock.Unit.Conway.Config.Parse (
88
wrongConwayGenesisHash,
99
insertConfig,
1010
defaultInsertConfig,
11-
) where
11+
invalidShelleyStkAddrHash,
12+
invalidMultiAssetPoliciesHash,
13+
invalidPlutusScriptHash,
14+
)
15+
where
1216

1317
import Cardano.DbSync.Config
1418
import Cardano.DbSync.Config.Types
1519
import Cardano.DbSync.Error
1620
import Cardano.Prelude hiding (from, isNothing)
1721
import qualified Data.Aeson as Aeson
1822
import Data.Default.Class (Default (..))
23+
import Data.String (String)
24+
import Data.Text (pack)
1925
import Test.Cardano.Db.Mock.Config
2026
import Test.Tasty.HUnit (Assertion (), assertBool, (@?=))
2127
import Prelude ()
2228

2329
conwayGenesis :: Assertion
2430
conwayGenesis =
2531
mkSyncNodeConfig configDir initCommandLineArgs
26-
>>= void . mkConfig configDir mutableDir cmdLineArgs
32+
>>= void
33+
. mkConfig configDir mutableDir cmdLineArgs
2734
where
2835
configDir = "config-conway"
2936
mutableDir = mkMutableDir "conwayConfigSimple"
@@ -106,3 +113,27 @@ insertConfig = do
106113
dncInsertOptions cfg @?= expected
107114
where
108115
configDir = "config-conway-insert-options"
116+
117+
invalidShelleyStkAddrHash :: Assertion
118+
invalidShelleyStkAddrHash =
119+
let invalidJson = "{ \"enable\": true, \"stake_addresses\": " <> invalidHash <> " }"
120+
decodedResult :: Either String ShelleyInsertConfig
121+
decodedResult = Aeson.eitherDecodeStrict $ encodeUtf8 $ pack invalidJson
122+
in assertBool "Decoding should fail for invalid Shelley stake address hash" (isLeft decodedResult)
123+
124+
invalidMultiAssetPoliciesHash :: Assertion
125+
invalidMultiAssetPoliciesHash =
126+
let invalidJson = "{ \"enable\": true, \"policies\": " <> invalidHash <> " }"
127+
decodedResult :: Either String MultiAssetConfig
128+
decodedResult = Aeson.eitherDecodeStrict $ encodeUtf8 $ pack invalidJson
129+
in assertBool "Decoding should fail for invalid MultiAsset policies hash" (isLeft decodedResult)
130+
131+
invalidPlutusScriptHash :: Assertion
132+
invalidPlutusScriptHash =
133+
let invalidJson = "{ \"enable\": true, \"script_hashes\": " <> invalidHash <> " }"
134+
decodedResult :: Either String PlutusConfig
135+
decodedResult = Aeson.eitherDecodeStrict $ encodeUtf8 $ pack invalidJson
136+
in assertBool "Decoding should fail for invalid Plutus script hash" (isLeft decodedResult)
137+
138+
invalidHash :: String
139+
invalidHash = "[\"\\xe0758b08dea05dabd1cd3510689ebd9efb6a49316acb30eead750e2e9e\"]"

0 commit comments

Comments
 (0)