Skip to content

Commit 72d5ba3

Browse files
Merge #4486
4486: tx-generator: Use distinct keys/addresses for benchmarking phases r=MarcFontaine a=MarcFontaine This is useful for debugging the tx-generator. Hard coded addresses: `addr_test1vzj7zv9msmdasvy5nc9jhnn2gqvrvu33v5rlg332zdfrkugklxkau` : outputs of the splitting phase (value not Plutus). `addr_test1vz4qz2ayucp7xvnthrx93uhha7e04gvxttpnuq4e6mx2n5gzfw23z` : final outputs of the benchmarking phase. Co-authored-by: MarcFontaine <[email protected]>
2 parents dbca757 + 491c096 commit 72d5ba3

File tree

2 files changed

+95
-15
lines changed

2 files changed

+95
-15
lines changed

Diff for: bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs

+94-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.ByteString.Base16 as Base16
13+
import Data.ByteString as BS (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,72 @@ newWallet n = do
250260
name <- WalletName <$> newIdentifier n
251261
emit $ InitWallet name
252262
return name
263+
264+
parseKey :: BS.ByteString -> TextEnvelope
265+
parseKey x = case Base16.decode x of
266+
Left err -> error $ "parsing of key failed : " ++ show err
267+
Right addr -> TextEnvelope
268+
{ teType = TextEnvelopeType "PaymentSigningKeyShelley_ed25519"
269+
, teDescription = "Payment Signing Key"
270+
, teRawCBOR = addr
271+
}
272+
273+
274+
keyNameGenesisInputFund :: KeyName
275+
keyNameGenesisInputFund = KeyName "GenesisInputFund"
276+
277+
keyNameTxGenFunds :: KeyName
278+
keyNameTxGenFunds = KeyName "TxGenFunds"
279+
280+
{-|
281+
The key that is used for the very first transaction, i.e. the secure Genesis transaction.
282+
addr_test1vzd3muund27y5nw83vymqj3a83pcuzkkejej6s75e5lfjcc85nc3p is the actual address (in Testnet 42).
283+
It is also used as change addresse in the first splitting-step.
284+
-}
285+
keyTxGenFunds :: TextEnvelope
286+
keyTxGenFunds = parseKey "5820617f846fc8b0e753bd51790de5f5a916de500175c6f5a0e27dde9da7879e1d35"
287+
288+
keyNameSplitPhase :: KeyName
289+
keyNameSplitPhase = KeyName "SplitPhase"
290+
291+
{-|
292+
UTxOs that are generated in intermediate splitting steps use:
293+
addr_test1vz45dtkyzk6s3245qw8hmaddaatcx8td3pvmntl8ty7q99c22eahm
294+
-}
295+
296+
keySplitPhase :: TextEnvelope
297+
keySplitPhase = parseKey "5820cf0083c2a5d4c90ab255bc8e68f407d52eebd9408de60a0b9e4c468f9714f076"
298+
299+
{-|
300+
UTxOs of the final splitting steps, i.e. the inputs of the benchmarking phase, use:
301+
addr_test1vzj7zv9msmdasvy5nc9jhnn2gqvrvu33v5rlg332zdfrkugklxkau
302+
(Plutus script addresses are ofc different.)
303+
-}
304+
keyNameBenchmarkInputs :: KeyName
305+
keyNameBenchmarkInputs = KeyName "BenchmarkInputs"
306+
307+
keyBenchmarkInputs :: TextEnvelope
308+
keyBenchmarkInputs = parseKey "58205b7f272602661d4ad3d9a4081f25fdcdcdf64fdc4892107de50e50937b77ea42"
309+
310+
keyNameBenchmarkDone :: KeyName
311+
keyNameBenchmarkDone = KeyName "BenchmarkingDone"
312+
313+
{-|
314+
The output of the actual benchmarking transactions use:
315+
addr_test1vz4qz2ayucp7xvnthrx93uhha7e04gvxttpnuq4e6mx2n5gzfw23z
316+
Query the progress of the benchmarking phase:
317+
`cardano-node query utxo --testnet-magic 42 --address addr_test1vz4qz2ayucp7xvnthrx93uhha7e04gvxttpnuq4e6mx2n5gzfw23z`
318+
-}
319+
320+
keyBenchmarkDone :: TextEnvelope
321+
keyBenchmarkDone = parseKey "582016ca4f13fa17557e56a7d0dd3397d747db8e1e22fdb5b9df638abdb680650d50"
322+
323+
keyNameCollaterals :: KeyName
324+
keyNameCollaterals = KeyName "Collaterals"
325+
326+
{-|
327+
Collateral inputs for Plutus transactions:
328+
addr_test1vpckd9muw3l4f8ne4uzumy28p0k84rvx48q46kssjkta5ng4v6sfs
329+
-}
330+
keyCollaterals :: TextEnvelope
331+
keyCollaterals = parseKey "58204babdb63537ccdac393ea23d042af3b7c3587d7dc88ed3b66c959f198ad358fa"

Diff for: bench/tx-generator/tx-generator.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ library
7171
, async
7272
, attoparsec
7373
, base >=4.12 && <5
74+
, base16-bytestring
7475
, bytestring
7576
, cardano-api
7677
, cardano-binary

0 commit comments

Comments
 (0)