@@ -9,17 +9,19 @@ import Control.Applicative (liftA2)
9
9
import Control.Monad
10
10
import Control.Monad.Trans.Except
11
11
import Control.Monad.Trans.RWS.CPS
12
-
12
+ import Data.ByteString.Base16 as Base16
13
+ import Data.ByteString as BS (ByteString )
13
14
import Data.Dependent.Sum ( (==>) )
14
15
import Data.DList (DList )
15
16
import qualified Data.DList as DL
16
17
import Data.Text (Text )
17
18
import qualified Data.Text as Text
18
19
19
20
import Cardano.Api
21
+
20
22
import Cardano.Benchmarking.NixOptions
21
23
import Cardano.Benchmarking.Script.Setters
22
- import Cardano.Benchmarking.Script.Store (Name (.. ), WalletName )
24
+ import Cardano.Benchmarking.Script.Store (KeyName , Name (.. ), WalletName )
23
25
import Cardano.Benchmarking.Script.Types
24
26
25
27
data CompileError where
@@ -53,12 +55,17 @@ compileToScript = do
53
55
genesisWallet <- importGenesisFunds
54
56
collateralWallet <- addCollaterals genesisWallet
55
57
splitWallet <- splittingPhase genesisWallet
56
- benchmarkingPhase splitWallet collateralWallet
58
+ void $ benchmarkingPhase splitWallet collateralWallet
57
59
58
60
initConstants :: Compiler ()
59
61
initConstants = do
60
62
setN TLocalSocket _nix_localNodeSocketPath
61
63
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
62
69
where
63
70
setConst :: Tag v -> v -> Compiler ()
64
71
setConst key val = emit $ Set $ key ==> val
@@ -72,8 +79,8 @@ importGenesisFunds = do
72
79
wallet <- newWallet " genesis_wallet"
73
80
era <- askNixOption _nix_era
74
81
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
77
84
delay
78
85
logMsg " Importing Genesis Fund. Done."
79
86
return wallet
@@ -89,8 +96,8 @@ addCollaterals src = do
89
96
collateralWallet <- newWallet " collateral_wallet"
90
97
fee <- askNixOption _nix_tx_fee
91
98
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)
94
101
[ safeCollateral ]
95
102
emit $ Submit era LocalSocket generator
96
103
logMsg " Create collaterals. Done."
@@ -106,17 +113,18 @@ splittingPhase srcWallet = do
106
113
finalDest <- newWallet " final_split_wallet"
107
114
splitSteps <- splitSequenceWalletNames srcWallet finalDest $ unfoldSplitSequence tx_fee minValuePerInput (tx_count * inputs_per_tx)
108
115
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
111
118
return finalDest
112
119
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
115
122
logMsg $ Text. pack $ " Splitting step: " ++ show split
116
123
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
118
126
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
120
128
FullSplits txCount -> Take txCount $ Cycle $ SplitN tx_fee src payMode maxOutputsPerTx
121
129
emit $ Submit era LocalSocket generator
122
130
delay
@@ -167,7 +175,7 @@ unfoldSplitSequence fee value outputs
167
175
(x, 0 ) -> x
168
176
(x, _rest) -> x+ 1
169
177
170
- benchmarkingPhase :: WalletName -> Maybe WalletName -> Compiler ()
178
+ benchmarkingPhase :: WalletName -> Maybe WalletName -> Compiler WalletName
171
179
benchmarkingPhase wallet collateralWallet = do
172
180
debugMode <- askNixOption _nix_debugMode
173
181
targetNodes <- askNixOption _nix_targetNodes
@@ -178,15 +186,17 @@ benchmarkingPhase wallet collateralWallet = do
178
186
inputs <- askNixOption _nix_inputs_per_tx
179
187
outputs <- askNixOption _nix_outputs_per_tx
180
188
metadataSize <- askNixOption _nix_add_tx_size
189
+ doneWallet <- newWallet " done_wallet"
181
190
let
182
- payMode = PayToAddr ( KeyName " pass-partout " ) wallet -- todo: used different wallet here !
191
+ payMode = PayToAddr keyNameBenchmarkDone doneWallet
183
192
submitMode = if debugMode
184
193
then LocalSocket
185
194
else Benchmark targetNodes (ThreadName " tx-submit-benchmark" ) tps txCount
186
195
generator = Take txCount $ Cycle $ NtoM fee wallet payMode inputs outputs (Just metadataSize) collateralWallet
187
196
emit $ Submit era submitMode generator
188
197
unless debugMode $ do
189
198
emit $ WaitBenchmark $ ThreadName " tx-submit-benchmark"
199
+ return doneWallet
190
200
191
201
data Fees = Fees {
192
202
_safeCollateral :: Lovelace
@@ -250,3 +260,72 @@ newWallet n = do
250
260
name <- WalletName <$> newIdentifier n
251
261
emit $ InitWallet name
252
262
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"
0 commit comments