Skip to content

Commit ddf375c

Browse files
committed
tx-generator: Use distinct keys for benchmarking phases
1 parent 99d2eaf commit ddf375c

File tree

1 file changed

+67
-15
lines changed

1 file changed

+67
-15
lines changed

bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs

+67-15
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@ import Control.Applicative (liftA2)
99
import Control.Monad
1010
import Control.Monad.Trans.Except
1111
import Control.Monad.Trans.RWS.CPS
12-
12+
import Data.Aeson
13+
import Data.ByteString.Lazy as BSL (ByteString)
1314
import Data.Dependent.Sum ( (==>) )
1415
import Data.DList (DList)
1516
import qualified Data.DList as DL
1617
import Data.Text (Text)
1718
import qualified Data.Text as Text
1819

1920
import Cardano.Api
21+
2022
import Cardano.Benchmarking.NixOptions
2123
import Cardano.Benchmarking.Script.Setters
22-
import Cardano.Benchmarking.Script.Store (Name(..), WalletName)
24+
import Cardano.Benchmarking.Script.Store (KeyName, Name(..), WalletName)
2325
import Cardano.Benchmarking.Script.Types
2426

2527
data CompileError where
@@ -53,12 +55,17 @@ compileToScript = do
5355
genesisWallet <- importGenesisFunds
5456
collateralWallet <- addCollaterals genesisWallet
5557
splitWallet <- splittingPhase genesisWallet
56-
benchmarkingPhase splitWallet collateralWallet
58+
void $ benchmarkingPhase splitWallet collateralWallet
5759

5860
initConstants :: Compiler ()
5961
initConstants = do
6062
setN TLocalSocket _nix_localNodeSocketPath
6163
setConst TTTL 1000000
64+
emit $ DefineSigningKey keyNameTxGenFunds keyTxGenFunds
65+
emit $ DefineSigningKey keyNameCollaterals keyCollaterals
66+
emit $ DefineSigningKey keyNameSplitPhase keySplitPhase
67+
emit $ DefineSigningKey keyNameBenchmarkInputs keyBenchmarkInputs
68+
emit $ DefineSigningKey keyNameBenchmarkDone keyBenchmarkDone
6269
where
6370
setConst :: Tag v -> v -> Compiler ()
6471
setConst key val = emit $ Set $ key ==> val
@@ -72,8 +79,8 @@ importGenesisFunds = do
7279
wallet <- newWallet "genesis_wallet"
7380
era <- askNixOption _nix_era
7481
fee <- askNixOption _nix_tx_fee
75-
cmd1 (ReadSigningKey $ KeyName "pass-partout") _nix_sigKey
76-
emit $ Submit era LocalSocket $ SecureGenesis fee wallet (KeyName "pass-partout") (KeyName "pass-partout")
82+
cmd1 (ReadSigningKey keyNameGenesisInputFund) _nix_sigKey
83+
emit $ Submit era LocalSocket $ SecureGenesis fee wallet keyNameGenesisInputFund keyNameTxGenFunds
7784
delay
7885
logMsg "Importing Genesis Fund. Done."
7986
return wallet
@@ -89,8 +96,8 @@ addCollaterals src = do
8996
collateralWallet <- newWallet "collateral_wallet"
9097
fee <- askNixOption _nix_tx_fee
9198
let generator = Split fee src
92-
(PayToAddr (KeyName "pass-partout") collateralWallet)
93-
(PayToAddr (KeyName "pass-partout") src)
99+
(PayToAddr keyNameCollaterals collateralWallet)
100+
(PayToAddr keyNameTxGenFunds src)
94101
[ safeCollateral ]
95102
emit $ Submit era LocalSocket generator
96103
logMsg "Create collaterals. Done."
@@ -106,17 +113,18 @@ splittingPhase srcWallet = do
106113
finalDest <- newWallet "final_split_wallet"
107114
splitSteps <- splitSequenceWalletNames srcWallet finalDest $ unfoldSplitSequence tx_fee minValuePerInput (tx_count * inputs_per_tx)
108115
isPlutus <- isAnyPlutusMode
109-
forM_ (init splitSteps) $ createChange False era
110-
createChange isPlutus era $ last splitSteps
116+
forM_ (init splitSteps) $ createChange False False era
117+
createChange True isPlutus era $ last splitSteps
111118
return finalDest
112119
where
113-
createChange :: Bool -> AnyCardanoEra -> (SrcWallet, DstWallet, Split) -> Compiler ()
114-
createChange isPlutus era (src, dst, split) = do
120+
createChange :: Bool -> Bool -> AnyCardanoEra -> (SrcWallet, DstWallet, Split) -> Compiler ()
121+
createChange isLastStep isPlutus era (src, dst, split) = do
115122
logMsg $ Text.pack $ "Splitting step: " ++ show split
116123
tx_fee <- askNixOption _nix_tx_fee
117-
payMode <- if isPlutus then plutusPayMode dst else return $ PayToAddr (KeyName "pass-partout") dst
124+
let valuePayMode = PayToAddr (if isLastStep then keyNameSplitPhase else keyNameBenchmarkInputs) dst
125+
payMode <- if isPlutus then plutusPayMode dst else return valuePayMode
118126
let generator = case split of
119-
SplitWithChange lovelace count -> Split tx_fee src payMode (PayToAddr (KeyName "pass-partout") src) $ replicate count lovelace
127+
SplitWithChange lovelace count -> Split tx_fee src payMode (PayToAddr keyNameTxGenFunds src) $ replicate count lovelace
120128
FullSplits txCount -> Take txCount $ Cycle $ SplitN tx_fee src payMode maxOutputsPerTx
121129
emit $ Submit era LocalSocket generator
122130
delay
@@ -167,7 +175,7 @@ unfoldSplitSequence fee value outputs
167175
(x, 0) -> x
168176
(x, _rest) -> x+1
169177

170-
benchmarkingPhase :: WalletName -> Maybe WalletName -> Compiler ()
178+
benchmarkingPhase :: WalletName -> Maybe WalletName -> Compiler WalletName
171179
benchmarkingPhase wallet collateralWallet = do
172180
debugMode <- askNixOption _nix_debugMode
173181
targetNodes <- askNixOption _nix_targetNodes
@@ -178,15 +186,17 @@ benchmarkingPhase wallet collateralWallet = do
178186
inputs <- askNixOption _nix_inputs_per_tx
179187
outputs <- askNixOption _nix_outputs_per_tx
180188
metadataSize <- askNixOption _nix_add_tx_size
189+
doneWallet <- newWallet "done_wallet"
181190
let
182-
payMode = PayToAddr (KeyName "pass-partout") wallet --todo: used different wallet here !
191+
payMode = PayToAddr keyNameBenchmarkDone doneWallet
183192
submitMode = if debugMode
184193
then LocalSocket
185194
else Benchmark targetNodes (ThreadName "tx-submit-benchmark") tps txCount
186195
generator = Take txCount $ Cycle $ NtoM fee wallet payMode inputs outputs (Just metadataSize) collateralWallet
187196
emit $ Submit era submitMode generator
188197
unless debugMode $ do
189198
emit $ WaitBenchmark $ ThreadName "tx-submit-benchmark"
199+
return doneWallet
190200

191201
data Fees = Fees {
192202
_safeCollateral :: Lovelace
@@ -250,3 +260,45 @@ newWallet n = do
250260
name <- WalletName <$> newIdentifier n
251261
emit $ InitWallet name
252262
return name
263+
264+
parseKey :: BSL.ByteString -> TextEnvelope
265+
parseKey x = case decode x of
266+
Nothing -> error $ "parsing of key failed : " ++ show x
267+
Just k -> k
268+
269+
keyNameGenesisInputFund :: KeyName
270+
keyNameGenesisInputFund = KeyName "GenesisInputFund"
271+
272+
keyNameTxGenFunds :: KeyName
273+
keyNameTxGenFunds = KeyName "TxGenFunds"
274+
275+
-- addr_test1vzd3muund27y5nw83vymqj3a83pcuzkkejej6s75e5lfjcc85nc3p
276+
keyTxGenFunds :: TextEnvelope
277+
keyTxGenFunds = parseKey "{\n \"type\": \"PaymentSigningKeyShelley_ed25519\",\n \"description\": \"Payment Signing Key\",\n \"cborHex\": \"5820617f846fc8b0e753bd51790de5f5a916de500175c6f5a0e27dde9da7879e1d35\"\n}\n"
278+
279+
keyNameSplitPhase :: KeyName
280+
keyNameSplitPhase = KeyName "SplitPhase"
281+
282+
-- addr_test1vz45dtkyzk6s3245qw8hmaddaatcx8td3pvmntl8ty7q99c22eahm
283+
keySplitPhase :: TextEnvelope
284+
keySplitPhase = parseKey "{\n \"type\": \"PaymentSigningKeyShelley_ed25519\",\n \"description\": \"Payment Signing Key\",\n \"cborHex\": \"5820cf0083c2a5d4c90ab255bc8e68f407d52eebd9408de60a0b9e4c468f9714f076\"\n}\n"
285+
286+
-- addr_test1vzj7zv9msmdasvy5nc9jhnn2gqvrvu33v5rlg332zdfrkugklxkau
287+
keyNameBenchmarkInputs :: KeyName
288+
keyNameBenchmarkInputs = KeyName "BenchmarkInputs"
289+
290+
keyBenchmarkInputs :: TextEnvelope
291+
keyBenchmarkInputs = parseKey "{\n \"type\": \"PaymentSigningKeyShelley_ed25519\",\n \"description\": \"Payment Signing Key\",\n \"cborHex\": \"58205b7f272602661d4ad3d9a4081f25fdcdcdf64fdc4892107de50e50937b77ea42\"\n}\n"
292+
293+
keyNameBenchmarkDone :: KeyName
294+
keyNameBenchmarkDone = KeyName "BenchmarkingDone"
295+
296+
-- addr_test1vz4qz2ayucp7xvnthrx93uhha7e04gvxttpnuq4e6mx2n5gzfw23z
297+
keyBenchmarkDone :: TextEnvelope
298+
keyBenchmarkDone = parseKey "{\n \"type\": \"PaymentSigningKeyShelley_ed25519\",\n \"description\": \"Payment Signing Key\",\n \"cborHex\": \"582016ca4f13fa17557e56a7d0dd3397d747db8e1e22fdb5b9df638abdb680650d50\"\n}\n"
299+
300+
keyNameCollaterals :: KeyName
301+
keyNameCollaterals = KeyName "Collaterals"
302+
303+
keyCollaterals :: TextEnvelope
304+
keyCollaterals = parseKey "{\n \"type\": \"PaymentSigningKeyShelley_ed25519\",\n \"description\": \"Payment Signing Key\",\n \"cborHex\": \"58204babdb63537ccdac393ea23d042af3b7c3587d7dc88ed3b66c959f198ad358fa\"\n}\n"

0 commit comments

Comments
 (0)