@cardano-sdk/e2e 0.16.6-patch.3 → 0.16.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.env.example +4 -6
  2. package/CHANGELOG.md +9 -15
  3. package/README.md +2 -18
  4. package/dist/cjs/environment.d.ts +1 -1
  5. package/dist/cjs/environment.d.ts.map +1 -1
  6. package/dist/cjs/environment.js +1 -15
  7. package/dist/cjs/environment.js.map +1 -1
  8. package/dist/cjs/factories.d.ts +0 -2
  9. package/dist/cjs/factories.d.ts.map +1 -1
  10. package/dist/cjs/factories.js +6 -12
  11. package/dist/cjs/factories.js.map +1 -1
  12. package/dist/cjs/index.d.ts +0 -1
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +0 -1
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/scripts/is-local-network-ready.js +5 -28
  17. package/dist/cjs/scripts/is-local-network-ready.js.map +1 -1
  18. package/dist/cjs/tools/multi-delegation-data-gen/index.js +13 -3
  19. package/dist/cjs/tools/multi-delegation-data-gen/index.js.map +1 -1
  20. package/dist/cjs/tools/multi-delegation-data-gen/utils/config.d.ts +1 -0
  21. package/dist/cjs/tools/multi-delegation-data-gen/utils/config.d.ts.map +1 -1
  22. package/dist/cjs/tools/multi-delegation-data-gen/utils/config.js +12 -0
  23. package/dist/cjs/tools/multi-delegation-data-gen/utils/config.js.map +1 -1
  24. package/dist/cjs/tools/multi-delegation-data-gen/utils/utils.d.ts +2 -5
  25. package/dist/cjs/tools/multi-delegation-data-gen/utils/utils.d.ts.map +1 -1
  26. package/dist/cjs/tools/multi-delegation-data-gen/utils/utils.js +12 -49
  27. package/dist/cjs/tools/multi-delegation-data-gen/utils/utils.js.map +1 -1
  28. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  29. package/dist/cjs/util/util.d.ts +0 -1
  30. package/dist/cjs/util/util.d.ts.map +1 -1
  31. package/dist/cjs/util/util.js +2 -43
  32. package/dist/cjs/util/util.js.map +1 -1
  33. package/dist/esm/environment.d.ts +1 -1
  34. package/dist/esm/environment.d.ts.map +1 -1
  35. package/dist/esm/environment.js +1 -15
  36. package/dist/esm/environment.js.map +1 -1
  37. package/dist/esm/factories.d.ts +0 -2
  38. package/dist/esm/factories.d.ts.map +1 -1
  39. package/dist/esm/factories.js +6 -12
  40. package/dist/esm/factories.js.map +1 -1
  41. package/dist/esm/index.d.ts +0 -1
  42. package/dist/esm/index.d.ts.map +1 -1
  43. package/dist/esm/index.js +0 -1
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/scripts/is-local-network-ready.js +5 -5
  46. package/dist/esm/scripts/is-local-network-ready.js.map +1 -1
  47. package/dist/esm/tools/multi-delegation-data-gen/index.js +14 -4
  48. package/dist/esm/tools/multi-delegation-data-gen/index.js.map +1 -1
  49. package/dist/esm/tools/multi-delegation-data-gen/utils/config.d.ts +1 -0
  50. package/dist/esm/tools/multi-delegation-data-gen/utils/config.d.ts.map +1 -1
  51. package/dist/esm/tools/multi-delegation-data-gen/utils/config.js +12 -0
  52. package/dist/esm/tools/multi-delegation-data-gen/utils/config.js.map +1 -1
  53. package/dist/esm/tools/multi-delegation-data-gen/utils/utils.d.ts +2 -5
  54. package/dist/esm/tools/multi-delegation-data-gen/utils/utils.d.ts.map +1 -1
  55. package/dist/esm/tools/multi-delegation-data-gen/utils/utils.js +11 -45
  56. package/dist/esm/tools/multi-delegation-data-gen/utils/utils.js.map +1 -1
  57. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  58. package/dist/esm/util/util.d.ts +0 -1
  59. package/dist/esm/util/util.d.ts.map +1 -1
  60. package/dist/esm/util/util.js +3 -20
  61. package/dist/esm/util/util.js.map +1 -1
  62. package/docker-compose.yml +3 -21
  63. package/local-network/scripts/mint-handles.sh +108 -6
  64. package/local-network/scripts/mint-tokens.sh +21 -2
  65. package/local-network/scripts/mnemonic_keys.sh +14 -0
  66. package/local-network/scripts/setup-wallets.sh +18 -0
  67. package/local-network/scripts/start.sh +1 -2
  68. package/package.json +22 -20
  69. package/src/environment.ts +1 -19
  70. package/src/factories.ts +5 -13
  71. package/src/index.ts +0 -1
  72. package/src/scripts/is-local-network-ready.ts +6 -8
  73. package/src/tools/multi-delegation-data-gen/example.json +1 -0
  74. package/src/tools/multi-delegation-data-gen/index.ts +18 -8
  75. package/src/tools/multi-delegation-data-gen/utils/config.ts +13 -0
  76. package/src/tools/multi-delegation-data-gen/utils/utils.ts +13 -110
  77. package/src/util/util.ts +2 -29
  78. package/test/k6/endpoints/asset/get-asset.test.js +15 -14
  79. package/test/k6/endpoints/asset/get-assets.test.js +269 -269
  80. package/test/k6/endpoints/chain-history/blocks/by-hashes.test.js +12 -11
  81. package/test/k6/endpoints/chain-history/txs/by-addresses.test.js +18 -15
  82. package/test/k6/endpoints/chain-history/txs/by-hashes.test.js +12 -11
  83. package/test/k6/endpoints/network-info/era-summaries.test.js +11 -10
  84. package/test/k6/endpoints/network-info/genesis-parameters.test.js +11 -10
  85. package/test/k6/endpoints/network-info/ledger-tip.test.js +11 -10
  86. package/test/k6/endpoints/network-info/lovelace-supply.test.js +11 -10
  87. package/test/k6/endpoints/network-info/protocol-parameters.test.js +11 -10
  88. package/test/k6/endpoints/network-info/stake.test.js +11 -10
  89. package/test/k6/endpoints/rewards/account-balance.test.js +12 -11
  90. package/test/k6/endpoints/stake-pool/stats.test.js +11 -10
  91. package/test/k6/endpoints/utxo/utxo-by-addresses.test.js +16 -11
  92. package/test/k6/scenarios/tx-submission.test.js +47 -46
  93. package/test/k6/scenarios/wallet-creation.test.js +127 -120
  94. package/test/k6/scenarios/wallet-restoration.test.js +264 -126
  95. package/test/long-running/cache-invalidation.test.ts +64 -13
  96. package/test/providers/HandleProvider.test.ts +39 -0
  97. package/test/wallet/PersonalWallet/handle.test.ts +38 -16
  98. package/test/web-extension/webpack.config.base.js +0 -4
  99. package/dist/cjs/FaucetProvider/index.d.ts +0 -3
  100. package/dist/cjs/FaucetProvider/index.d.ts.map +0 -1
  101. package/dist/cjs/FaucetProvider/index.js +0 -19
  102. package/dist/cjs/FaucetProvider/index.js.map +0 -1
  103. package/dist/cjs/FaucetProvider/providers/cardanoWalletFaucetProvider.d.ts +0 -15
  104. package/dist/cjs/FaucetProvider/providers/cardanoWalletFaucetProvider.d.ts.map +0 -1
  105. package/dist/cjs/FaucetProvider/providers/cardanoWalletFaucetProvider.js +0 -148
  106. package/dist/cjs/FaucetProvider/providers/cardanoWalletFaucetProvider.js.map +0 -1
  107. package/dist/cjs/FaucetProvider/types.d.ts +0 -22
  108. package/dist/cjs/FaucetProvider/types.d.ts.map +0 -1
  109. package/dist/cjs/FaucetProvider/types.js +0 -14
  110. package/dist/cjs/FaucetProvider/types.js.map +0 -1
  111. package/dist/esm/FaucetProvider/index.d.ts +0 -3
  112. package/dist/esm/FaucetProvider/index.d.ts.map +0 -1
  113. package/dist/esm/FaucetProvider/index.js +0 -3
  114. package/dist/esm/FaucetProvider/index.js.map +0 -1
  115. package/dist/esm/FaucetProvider/providers/cardanoWalletFaucetProvider.d.ts +0 -15
  116. package/dist/esm/FaucetProvider/providers/cardanoWalletFaucetProvider.d.ts.map +0 -1
  117. package/dist/esm/FaucetProvider/providers/cardanoWalletFaucetProvider.js +0 -141
  118. package/dist/esm/FaucetProvider/providers/cardanoWalletFaucetProvider.js.map +0 -1
  119. package/dist/esm/FaucetProvider/types.d.ts +0 -22
  120. package/dist/esm/FaucetProvider/types.d.ts.map +0 -1
  121. package/dist/esm/FaucetProvider/types.js +0 -10
  122. package/dist/esm/FaucetProvider/types.js.map +0 -1
  123. package/local-network/faucet/README.md +0 -12
  124. package/local-network/faucet/faucet-addresses.json +0 -45
  125. package/local-network/faucet/faucet-mnemonic.json +0 -6
  126. package/local-network/faucet/faucet-send-funds.json +0 -23
  127. package/local-network/scripts/is-faucet-ready.sh +0 -29
  128. package/src/FaucetProvider/index.ts +0 -2
  129. package/src/FaucetProvider/providers/cardanoWalletFaucetProvider.ts +0 -233
  130. package/src/FaucetProvider/types.ts +0 -94
@@ -5,9 +5,7 @@ import {
5
5
  TaskResult,
6
6
  TerminalProgressMonitor,
7
7
  createDelegationWallet,
8
- delegateToMultiplePools,
9
8
  distributeStake,
10
- generateStakeAddresses,
11
9
  getOutputPathName,
12
10
  loadConfiguration,
13
11
  logState,
@@ -18,7 +16,8 @@ import {
18
16
  } from './utils';
19
17
 
20
18
  import { Cardano } from '@cardano-sdk/core';
21
- import { PersonalWallet } from '@cardano-sdk/wallet';
19
+ import { DynamicChangeAddressResolver, PersonalWallet } from '@cardano-sdk/wallet';
20
+ import { roundRobinRandomImprove } from '@cardano-sdk/input-selection';
22
21
  import { walletReady } from '../../';
23
22
  import chalk from 'chalk';
24
23
 
@@ -69,11 +68,7 @@ const monitor = new TerminalProgressMonitor();
69
68
 
70
69
  monitor.endTask('Delegation wallet ready.', TaskResult.Success);
71
70
 
72
- const stakeAddresses = await generateStakeAddresses(delegationWallet, config.stakeDistribution.length, monitor);
73
-
74
- await delegateToMultiplePools(delegationWallet, stakeAddresses, monitor);
75
-
76
- await distributeStake(delegationWallet, config.startingFunds, config.stakeDistribution, stakeAddresses, monitor);
71
+ const portfolio = await distributeStake(delegationWallet, config.stakeDistribution, monitor);
77
72
 
78
73
  monitor.startTask('Waiting for delegation to be updated on the wallet.');
79
74
  await rewardAccountStatuses(delegationWallet.delegation.rewardAccounts$, [
@@ -82,6 +77,21 @@ const monitor = new TerminalProgressMonitor();
82
77
  ]);
83
78
  monitor.endTask('Delegation updated.', TaskResult.Success);
84
79
 
80
+ if (config.changeAddressResolver === 'dynamic') {
81
+ monitor.logInfo(`Using dynamic change address resolution: Portfolio: ${JSON.stringify(portfolio)}`);
82
+ const selector = roundRobinRandomImprove({
83
+ changeAddressResolver: new DynamicChangeAddressResolver(
84
+ delegationWallet.addresses$,
85
+ delegationWallet.delegation.distribution$,
86
+ async () => portfolio,
87
+ console
88
+ )
89
+ });
90
+ delegationWallet.setInputSelector(selector);
91
+ } else {
92
+ monitor.logInfo('Using static change address resolution');
93
+ }
94
+
85
95
  monitor.logInfo('Setup phase ended. Starting interactions...');
86
96
 
87
97
  // Initial setup done, log starting state.
@@ -23,6 +23,14 @@ convict.addFormat({
23
23
  }
24
24
  });
25
25
 
26
+ convict.addFormat({
27
+ name: 'changeAddressResolver',
28
+ validate(val) {
29
+ if (val !== 'static' && val !== 'dynamic')
30
+ throw new TypeError('changeAddressResolver must be set to either static or dynamic');
31
+ }
32
+ });
33
+
26
34
  export type ValueTransferConfig = {
27
35
  amount: { max: number; min: number };
28
36
  count: { max: number; min: number };
@@ -30,6 +38,11 @@ export type ValueTransferConfig = {
30
38
  };
31
39
 
32
40
  export const configLoader = convict({
41
+ changeAddressResolver: {
42
+ default: 'static',
43
+ doc: 'Whether to use the static or dynamic strategy to resolve change addresses.',
44
+ format: 'changeAddressResolver'
45
+ },
33
46
  iterations: {
34
47
  default: 10,
35
48
  doc: 'How many iterations will be executed before stopping the test.',
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable no-console, max-statements, max-params, @typescript-eslint/no-floating-promises */
2
2
  import { ValueTransferConfig, configLoader } from './config';
3
3
 
4
- import { AddressType, AsyncKeyAgent, GroupedAddress, util } from '@cardano-sdk/key-management';
5
4
  import { Cardano } from '@cardano-sdk/core';
6
5
  import { Files, Paths } from './files';
7
6
  import {
@@ -18,35 +17,9 @@ import { Observable, filter, firstValueFrom, map } from 'rxjs';
18
17
  import { PersonalWallet } from '@cardano-sdk/wallet';
19
18
  import { TaskResult, TerminalProgressMonitor } from './terminal-progress-monitor';
20
19
  import { logger } from '@cardano-sdk/util-dev';
20
+ import { util } from '@cardano-sdk/key-management';
21
21
  import chalk from 'chalk';
22
22
 
23
- /**
24
- * Gets grouped addresses with increasing stake key index.
25
- *
26
- * @param keyAgent The key agent to be used to generate the addresses.
27
- * @param addressCount Number of addresses to be generated.
28
- */
29
- export const getStakeAddresses = async (
30
- keyAgent: AsyncKeyAgent,
31
- addressCount: number
32
- ): Promise<Array<GroupedAddress>> => {
33
- const addresses = new Array<GroupedAddress>();
34
-
35
- for (let i = 0; i < addressCount; ++i) {
36
- const address = await keyAgent.deriveAddress(
37
- {
38
- index: 0,
39
- type: AddressType.External
40
- },
41
- i
42
- );
43
-
44
- addresses.push(address);
45
- }
46
-
47
- return addresses;
48
- };
49
-
50
23
  /**
51
24
  * Gets a list of the available pool.
52
25
  *
@@ -83,43 +56,6 @@ export const rewardAccountStatuses = async (
83
56
  timeout
84
57
  );
85
58
 
86
- /**
87
- * Registers and delegates reward accounts to different pools.
88
- */
89
- export const delegateToMultiplePools = async (
90
- fundingWallet: PersonalWallet,
91
- rewardAccounts: GroupedAddress[],
92
- monitor: TerminalProgressMonitor
93
- ) => {
94
- const stakeKeyRegCertificates = rewardAccounts.map(({ rewardAccount }) =>
95
- Cardano.createStakeKeyRegistrationCert(rewardAccount)
96
- );
97
- const poolIds = await getPoolIds(fundingWallet, rewardAccounts.length);
98
- const delegationCertificates = rewardAccounts.map((account) =>
99
- Cardano.createDelegationCert(account.rewardAccount, poolIds[account.stakeKeyDerivationPath!.index].id)
100
- );
101
-
102
- monitor.logInfo(
103
- `Registering accounts: [${chalk.green(rewardAccounts.map(({ rewardAccount }) => rewardAccount).join(', '))}]`
104
- );
105
-
106
- monitor.startTask(
107
- `Delegating to pools [${chalk.green(poolIds.map(({ id }) => id).join(', '))}] and registering ${chalk.green(
108
- stakeKeyRegCertificates.length
109
- )} stake keys`
110
- );
111
-
112
- const txBuilder = fundingWallet.createTxBuilder();
113
-
114
- txBuilder.partialTxBody.certificates = [...stakeKeyRegCertificates, ...delegationCertificates];
115
- const { tx } = await txBuilder.build().sign();
116
- await submitAndConfirm(fundingWallet, tx);
117
-
118
- monitor.endTask('Stake keys delegated', TaskResult.Success);
119
-
120
- return poolIds;
121
- };
122
-
123
59
  const env = getEnv(walletVariables);
124
60
 
125
61
  /**
@@ -231,66 +167,33 @@ export const transferStartingFunds = async (
231
167
  monitor.endTask('Funds transferred', TaskResult.Success);
232
168
  };
233
169
 
234
- /**
235
- * Generates a list of stake addresses.
236
- *
237
- * @param delegationWallet The delegation wallets.
238
- * @param stakeKeyCount The number of stake keys to use in the generation of the addresses.
239
- * @param monitor The progress monitor.
240
- */
241
- export const generateStakeAddresses = async (
242
- delegationWallet: PersonalWallet,
243
- stakeKeyCount: number,
244
- monitor: TerminalProgressMonitor
245
- ) => {
246
- monitor.startTask('Generating stake addresses.');
247
-
248
- const stakeAddresses = await getStakeAddresses(delegationWallet.keyAgent, stakeKeyCount);
249
-
250
- monitor.endTask(
251
- `Stake addresses generated: [${chalk.green!(stakeAddresses.map(({ rewardAccount }) => rewardAccount).join(', '))}]`,
252
- TaskResult.Success
253
- );
254
-
255
- return stakeAddresses;
256
- };
257
-
258
170
  /**
259
171
  * Distribute the stake among different addresses.
260
172
  *
261
173
  * @param delegationWallet The delegation wallets.
262
- * @param startingFunds The total starting funds.
263
174
  * @param stakeDistribution The stake distribution to be followed.
264
- * @param stakeAddresses The list of stake addresses.
265
175
  * @param monitor The progress monitor.
266
176
  */
267
177
  export const distributeStake = async (
268
178
  delegationWallet: PersonalWallet,
269
- startingFunds: number,
270
179
  stakeDistribution: Array<number>,
271
- stakeAddresses: Array<GroupedAddress>,
272
180
  monitor: TerminalProgressMonitor
273
- ) => {
274
- // TODO: Replace with delegatePortfolio once LW-6702 is merged.
275
- const totalWeight = stakeDistribution.reduce((sum, current) => sum + current, 0);
276
- const stakeDistributionSsPercent = stakeDistribution.map((value) => value / totalWeight);
277
- monitor.startTask(`Distribute ${startingFunds} among stake addresses [${stakeDistribution.join(', ')}].`);
278
-
279
- const txBuilder = delegationWallet.createTxBuilder();
280
-
281
- let i = 0;
282
- const startingFundsMinusFee = startingFunds - 5_000_000;
283
- for (const { address } of stakeAddresses) {
284
- const coinsToBeDeposited = stakeDistributionSsPercent[i] * startingFundsMinusFee;
285
- txBuilder.addOutput(txBuilder.buildOutput().address(address).coin(BigInt(coinsToBeDeposited)).toTxOut());
286
- ++i;
287
- }
181
+ ): Promise<Cardano.Cip17DelegationPortfolio> => {
182
+ const pools = await getPoolIds(delegationWallet, stakeDistribution.length);
288
183
 
289
- const { tx: signedTx } = await txBuilder.build().sign();
184
+ const portfolio: Cardano.Cip17DelegationPortfolio = {
185
+ name: 'Portfolio',
186
+ pools: pools.map((pool, index) => ({ id: pool.hexId, weight: stakeDistribution[index] }))
187
+ };
290
188
 
291
- await submitAndConfirm(delegationWallet, signedTx);
189
+ logger.debug('Delegating portfolio', portfolio);
190
+
191
+ const { tx } = await delegationWallet.createTxBuilder().delegatePortfolio(portfolio).build().sign();
192
+ await submitAndConfirm(delegationWallet, tx);
292
193
 
293
194
  monitor.endTask('Funds distributed', TaskResult.Success);
195
+
196
+ return portfolio;
294
197
  };
295
198
 
296
199
  /**
package/src/util/util.ts CHANGED
@@ -1,11 +1,9 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import * as Crypto from '@cardano-sdk/crypto';
3
- import * as envalid from 'envalid';
4
3
  import { Cardano, createSlotEpochCalc } from '@cardano-sdk/core';
5
4
  import {
6
5
  EMPTY,
7
6
  Observable,
8
- catchError,
9
7
  combineLatest,
10
8
  distinctUntilChanged,
11
9
  filter,
@@ -22,7 +20,7 @@ import { FAST_OPERATION_TIMEOUT_DEFAULT, SYNC_TIMEOUT_DEFAULT } from '../default
22
20
  import { FinalizeTxProps, ObservableWallet, PersonalWallet } from '@cardano-sdk/wallet';
23
21
  import { InMemoryKeyAgent, TransactionSigner } from '@cardano-sdk/key-management';
24
22
  import { InitializeTxProps } from '@cardano-sdk/tx-construction';
25
- import { TestWallet, faucetProviderFactory, networkInfoProviderFactory } from '../factories';
23
+ import { TestWallet, networkInfoProviderFactory } from '../factories';
26
24
  import { getEnv, walletVariables } from '../environment';
27
25
  import { logger } from '@cardano-sdk/util-dev';
28
26
  import sortBy from 'lodash/sortBy';
@@ -35,10 +33,7 @@ export const firstValueFromTimed = <T>(
35
33
  timeoutAfter = FAST_OPERATION_TIMEOUT_DEFAULT
36
34
  ) =>
37
35
  firstValueFrom(
38
- observable$.pipe(
39
- timeout(timeoutAfter),
40
- catchError(() => throwError(() => new Error(timeoutMessage)))
41
- )
36
+ observable$.pipe(timeout({ each: timeoutAfter, with: () => throwError(() => new Error(timeoutMessage)) }))
42
37
  );
43
38
 
44
39
  export const waitForWalletStateSettle = (wallet: ObservableWallet, syncTimeout: number = SYNC_TIMEOUT_DEFAULT) =>
@@ -136,28 +131,6 @@ export type RequestCoinsProps = {
136
131
  coins: Cardano.Lovelace;
137
132
  };
138
133
 
139
- export const requestCoins = async ({ coins, wallet }: RequestCoinsProps) => {
140
- const [{ address }] = await firstValueFrom(wallet.addresses$);
141
- logger.info(`Address ${address} will be funded with ${coins} tLovelace.`);
142
-
143
- const { FAUCET_PROVIDER, FAUCET_PROVIDER_PARAMS } = envalid.cleanEnv(process.env, {
144
- FAUCET_PROVIDER: envalid.str(),
145
- FAUCET_PROVIDER_PARAMS: envalid.json({ default: {} })
146
- });
147
-
148
- const faucetProvider = await faucetProviderFactory.create(FAUCET_PROVIDER, FAUCET_PROVIDER_PARAMS, logger);
149
- await faucetProvider.start();
150
- const healthCheck = await faucetProvider.healthCheck();
151
- if (!healthCheck.ok) throw new Error('Faucet provider could not be started.');
152
- // Request coins from faucet. This will block until the transaction is in the ledger,
153
- // and has the given amount of confirmation, which means the funds can be used immediately after
154
- // this call.
155
- // TODO: change FaucetProvider signature to accept Cardano.Lovelace
156
- const requestResult = await faucetProvider.request(address, Number.parseInt(coins.toString()), 3, 30_000);
157
- await txConfirmed(wallet, requestResult);
158
- await faucetProvider.close();
159
- };
160
-
161
134
  export type TransferCoinsProps = {
162
135
  fromWallet: ObservableWallet;
163
136
  toWallet: ObservableWallet;
@@ -1,22 +1,23 @@
1
1
  import http from 'k6/http';
2
2
 
3
+ // eslint-disable-next-line no-undef
3
4
  const PROVIDER_SERVER_URL = __ENV.PROVIDER_SERVER_URL;
4
5
 
5
6
  export const options = {
6
- thresholds: {
7
- http_req_failed: ['rate<0.01'],
8
- http_req_duration: ['p(95)<500'],
9
- },
7
+ thresholds: {
8
+ http_req_duration: ['p(95)<500'],
9
+ http_req_failed: ['rate<0.01']
10
+ }
10
11
  };
11
12
 
12
13
  export default function () {
13
- const body = JSON.stringify({
14
- assetId: "0645beb92789851be85bfad30a6a9d9a0a98e0e8d41cff86727efb9f317374326c616365",
15
- extraData: {nftMetadata: true, tokenMetadata: true}
16
- })
17
- http.post(`${PROVIDER_SERVER_URL}/asset/get-asset`, body, {
18
- headers: {
19
- 'content-type': 'application/json',
20
- },
21
- });
22
- }
14
+ const body = JSON.stringify({
15
+ assetId: '0645beb92789851be85bfad30a6a9d9a0a98e0e8d41cff86727efb9f317374326c616365',
16
+ extraData: { nftMetadata: true, tokenMetadata: true }
17
+ });
18
+ http.post(`${PROVIDER_SERVER_URL}/asset/get-asset`, body, {
19
+ headers: {
20
+ 'content-type': 'application/json'
21
+ }
22
+ });
23
+ }