@@ -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.Aeson
13
+ import Data.ByteString.Lazy as BSL (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,45 @@ newWallet n = do
250
260
name <- WalletName <$> newIdentifier n
251
261
emit $ InitWallet name
252
262
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