Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use submitAndAwait graphql endpoint #1615

Merged
merged 35 commits into from
Jan 18, 2024

Conversation

nedsalk
Copy link
Contributor

@nedsalk nedsalk commented Jan 5, 2024

This PR introduces the submitAndAwait graphql endpoint. A user can now send a transaction and wait for its execution in one go before receiving a TransactionResponse back.

closes #1563

@nedsalk nedsalk added the feat Issue is a feature label Jan 5, 2024
@nedsalk nedsalk added this to the 1 - Salamander milestone Jan 5, 2024
@nedsalk nedsalk self-assigned this Jan 5, 2024
@nedsalk nedsalk linked an issue Jan 5, 2024 that may be closed by this pull request
@nedsalk nedsalk changed the base branch from master to rc/salamander January 5, 2024 15:20
@nedsalk nedsalk marked this pull request as ready for review January 5, 2024 16:26
@nedsalk nedsalk mentioned this pull request Jan 9, 2024
44 tasks
@nedsalk nedsalk marked this pull request as draft January 9, 2024 13:01
Copy link
Contributor

@danielbate danielbate left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. Just wondering if something like subscribeToResult is more correct given the current behaviour is to await anyway, however the underlying implementation just retries.

apps/docs-snippets/src/utils.ts Show resolved Hide resolved
packages/providers/src/provider.ts Show resolved Hide resolved
@nedsalk
Copy link
Contributor Author

nedsalk commented Jan 11, 2024

@danielbate

Should we be adding some documentation for this?

I added typedoc (see here) and IMO that's enough for now.

This PR is also missing a changeset.

I added it now.

Copy link
Contributor

RC published under the **rc-salamander** tag.

Install it:

pnpm add fuels@rc-salamander
pnpm add fuels@0.0.0-rc-salamander-20240112095655

Check it out:

Copy link
Contributor

Coverage Report:

Lines Branches Functions Statements
78.57%(-3.43%) 68.36%(+0.59%) 77.01%(+1.45%) 78.61%(-3.17%)
Changed Files:
Ok File (✨=New File) Lines Branches Functions Statements
🔴 ✨ internal/check-imports/src/imports.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ internal/check-imports/src/references.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ internal/tsup/src/index.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 packages/abi-coder/src/abi-coder.ts 89.47%
(+0%)
82.35%
(-2.49%)
87.5%
(+0%)
89.65%
(-0.18%)
🔴 packages/abi-coder/src/constants.ts 96%
(+0.17%)
100%
(+0%)
0%
(+0%)
96%
(+0.17%)
🔴 packages/abi-coder/src/function-fragment.ts 74.28%
(-3.84%)
72.72%
(+0%)
81.81%
(+0%)
75.32%
(+0%)
🔴 packages/abi-coder/src/interface.ts 61.76%
(+1.16%)
50%
(+0%)
76.47%
(+0%)
61.11%
(+0%)
🔴 packages/abi-coder/src/resolved-abi-type.ts 98.57%
(+0.16%)
100%
(+0%)
94.73%
(+0%)
98.66%
(+0%)
🔴 packages/abi-coder/src/utilities.ts 96.72%
(-1.39%)
91.3%
(-3.93%)
93.33%
(+1.67%)
96.87%
(-1.31%)
🔴 ✨ packages/abi-typegen/typegen.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/abi-typegen/src/bin.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
✨ packages/abi-typegen/src/abi/types/StrSliceType.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
🔴 packages/address/src/address.ts 90%
(+2.13%)
79.16%
(+6.94%)
83.33%
(+0.98%)
90%
(+2.13%)
🔴 ✨ packages/address/src/configs.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 packages/address/src/utils.ts 84.37%
(-0.47%)
78.94%
(-0.22%)
92.3%
(+0%)
84.84%
(-0.45%)
🔴 ✨ packages/contract/src/contract-factory.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/contract/src/util.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/create-fuels/create-fuels.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/create-fuels/scripts/rewriteTemplatePackageJson.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/create-fuels/src/bin.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/create-fuels/src/cli.ts 75.6%
(+75.6%)
47.36%
(+47.36%)
100%
(+100%)
75.6%
(+75.6%)
🔴 ✨ packages/crypto/src/index.browser.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/aes-ctr.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/bufferFromString.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/crypto.ts 0%
(+0%)
0%
(+0%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/encryptJsonWalletData.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/index.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/randomBytes.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/crypto/src/browser/stringFromBuffer.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 packages/crypto/src/node/aes-ctr.ts 15.38%
(-84.62%)
100%
(+0%)
0%
(-100%)
15.38%
(-84.62%)
🔴 packages/crypto/src/node/encryptJsonWalletData.ts 0%
(-100%)
100%
(+0%)
0%
(-100%)
0%
(-100%)
🔴 packages/crypto/src/node/randomBytes.ts 33.33%
(-66.67%)
100%
(+0%)
0%
(-100%)
33.33%
(-66.67%)
🔴 packages/crypto/src/node/stringFromBuffer.ts 50%
(-50%)
0%
(-100%)
0%
(-100%)
50%
(-50%)
🔴 ✨ packages/forc/lib/bin.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/forc/lib/index.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/forc/lib/install.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/forc/lib/shared.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/forc/lib/update.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/fuel-core/lib/bin.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/fuel-core/lib/index.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/fuel-core/lib/install.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/fuel-core/lib/shared.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/fuel-core/lib/update.js 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/fuels/fuels.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/fuels/src/bin.ts 0%
(+0%)
0%
(+0%)
100%
(+100%)
0%
(+0%)
✨ packages/fuels/src/run.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/types.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/withConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/withProgram.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/build/buildSwayProgram.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/build/buildSwayPrograms.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/build/forcHandlers.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/build/generateTypes.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/build/index.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/deploy/createWallet.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
🔴 ✨ packages/fuels/src/cli/commands/deploy/deployContract.ts 100%
(+100%)
75%
(+75%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/deploy/getDeployConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/deploy/index.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/deploy/saveContractIds.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/dev/autoStartFuelCore.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/dev/defaultChainConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/dev/index.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/dev/startFuelCore.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/init/index.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/init/shouldUseBuiltinForc.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/commands/init/shouldUseBuiltinFuelCore.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/config/forcUtils.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/config/loadConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/config/validateConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/templates/fuels.config.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/templates/index.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/utils/createConfig.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
🔴 ✨ packages/fuels/src/cli/utils/findBinPath.ts 80%
(+80%)
50%
(+50%)
100%
(+100%)
80%
(+80%)
✨ packages/fuels/src/cli/utils/getBinarySource.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/fuels/src/cli/utils/logger.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
packages/hasher/src/hasher.ts 100%
(+34.89%)
100%
(+60%)
100%
(+0%)
100%
(+34.89%)
🔴 packages/math/src/bn.ts 88.37%
(+1.79%)
85.71%
(-0.82%)
80%
(+1.22%)
88.37%
(+1.63%)
🔴 ✨ packages/math/src/math.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/merkle/src/binary/types/branch.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/merkle/src/sparse/types/sparseCompactMerkleBranch.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/merkle/src/sparse/types/sparseCompactMerkleSolidityProof.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 ✨ packages/merkle/src/sparse/types/sparseMerkleSolidityNode.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 packages/mnemonic/src/mnemonic.ts 98.48%
(+0.07%)
90.32%
(+0%)
100%
(+0%)
98.48%
(+0%)
🔴 packages/predicate/src/predicate.ts 64.7%
(-1.96%)
45.83%
(-4.17%)
72.72%
(-5.05%)
64.7%
(-1.96%)
🔴 ✨ packages/providers/src/call-retrier.ts 90%
(+90%)
86.66%
(+86.66%)
100%
(+100%)
90%
(+90%)
🔴 packages/providers/src/coin-quantity.ts 44.44%
(+33.33%)
50%
(+50%)
33.33%
(+33.33%)
42.1%
(+30.99%)
🔴 ✨ packages/providers/src/fuel-graphql-subscriber.ts 80%
(+80%)
37.5%
(+37.5%)
100%
(+100%)
80%
(+80%)
🔴 packages/providers/src/provider.ts 70.94%
(+13.46%)
56.19%
(+4.43%)
67.69%
(+14.25%)
69.59%
(+13.52%)
🔴 packages/providers/src/resource.ts 80%
(+0%)
100%
(+0%)
25%
(+25%)
62.5%
(+12.5%)
🔴 packages/providers/src/generated/operations.ts 89.89%
(+7.54%)
100%
(+0%)
67.74%
(+24.35%)
90.29%
(+16.84%)
🔴 packages/providers/src/transaction-request/create-transaction-request.ts 58.82%
(+58.82%)
53.33%
(+53.33%)
37.5%
(+37.5%)
58.82%
(+58.82%)
🔴 ✨ packages/providers/src/transaction-request/hash-transaction.ts 55.55%
(+55.55%)
40%
(+40%)
100%
(+100%)
55.55%
(+55.55%)
🔴 packages/providers/src/transaction-request/output.ts 66.66%
(+55.55%)
50%
(+50%)
100%
(+100%)
66.66%
(+55.55%)
🔴 packages/providers/src/transaction-request/script-transaction-request.ts 37.5%
(+9.38%)
57.14%
(+7.14%)
27.77%
(+6.35%)
36.58%
(+9.31%)
🔴 packages/providers/src/transaction-request/transaction-request.ts 71.53%
(+53.14%)
55.93%
(+30.4%)
73.91%
(+59.21%)
71.64%
(+53.67%)
🔴 packages/providers/src/transaction-response/transaction-response.ts 19.51%
(+14.25%)
12.5%
(+12.5%)
37.5%
(+37.5%)
19.51%
(+14.25%)
🔴 packages/providers/src/transaction-summary/assemble-transaction-summary.ts 100%
(+0%)
57.14%
(-5.36%)
100%
(+0%)
100%
(+0%)
🔴 ✨ packages/providers/src/transaction-summary/calculate-transaction-fee.ts 100%
(+100%)
87.5%
(+87.5%)
100%
(+100%)
100%
(+100%)
🔴 ✨ packages/providers/src/transaction-summary/get-transaction-summary.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)
🔴 packages/providers/src/transaction-summary/operations.ts 98.18%
(-0.74%)
81.13%
(+4.66%)
94.28%
(-5.72%)
97.39%
(-0.56%)
✨ packages/providers/src/utils/gas.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/providers/src/utils/merge-quantities.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
packages/providers/src/utils/sleep.ts 100%
(+100%)
100%
(+0%)
100%
(+100%)
100%
(+100%)
🔴 packages/signer/src/signer.ts 79.31%
(-1.94%)
60%
(+0%)
71.42%
(-3.58%)
79.31%
(-1.94%)
🔴 ✨ packages/transactions/src/configs.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 packages/transactions/src/coders/input.ts 77.48%
(+0.93%)
78.57%
(+0%)
87.5%
(+0%)
77.63%
(+0.92%)
🔴 ✨ packages/transactions/src/coders/policy.ts 97.67%
(+97.67%)
94.11%
(+94.11%)
100%
(+100%)
97.77%
(+97.77%)
🔴 packages/transactions/src/coders/transaction.ts 98.56%
(+0.04%)
80%
(+0%)
100%
(+0%)
98.57%
(+0.03%)
packages/utils/src/test-utils/getForcProject.ts 100%
(+2.71%)
100%
(+50%)
100%
(+0%)
100%
(+2.64%)
✨ packages/utils/src/utils/arrayify.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/utils/src/utils/capitalizeString.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/utils/src/utils/hexlify.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
🔴 ✨ packages/versions/versions.js 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
🔴 ✨ packages/versions/src/bin.ts 0%
(+0%)
100%
(+100%)
100%
(+100%)
0%
(+0%)
✨ packages/versions/src/lib/compareSystemVersions.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/versions/src/lib/fuelUpLink.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/versions/src/lib/getBuiltinVersions.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/versions/src/lib/getSystemVersions.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
✨ packages/versions/src/lib/semver.ts 100%
(+100%)
100%
(+100%)
100%
(+100%)
100%
(+100%)
🔴 ✨ packages/wallet-manager/src/types.ts 0%
(+0%)
100%
(+100%)
0%
(+0%)
0%
(+0%)
🔴 packages/wallet-manager/src/vaults/mnemonic-vault.ts 93.75%
(+0.21%)
80%
(+0%)
100%
(+0%)
93.75%
(+0.21%)
🔴 packages/wallet/src/account.ts 78.21%
(-5.3%)
32.25%
(-30.25%)
88.23%
(-4.07%)
78.21%
(-5.3%)
🔴 packages/wallet/src/test-utils/launchNode.ts 98.33%
(-1.67%)
81.48%
(+3.22%)
100%
(+0%)
98.36%
(-1.64%)
🔴 ✨ packages/wordlists/src/index.ts 0%
(+0%)
0%
(+0%)
0%
(+0%)
0%
(+0%)

@nedsalk nedsalk enabled auto-merge (squash) January 17, 2024 19:43
@nedsalk nedsalk merged commit 1284d07 into rc/salamander Jan 18, 2024
12 checks passed
@nedsalk nedsalk deleted the ns/feat/submit-and-await branch January 18, 2024 12:36
arboleya added a commit that referenced this pull request Jan 26, 2024
* chore: updating code owners (#1496)
* docs: purge hardcoded snippets on 'using typegen' page (#1403)
* chore: remove method that's same as base method (#1445)
* chore: implement RC workflow (#1497)
* Revert "feat: add `Predicate.getTransferTxId` helper (#1467)"
* chore: fix rc release string replace (#1529)
* docs: Update some hyperlinks to reference the new documentation hub (#1520)
* chore: improve rc release message (#1559)
* feat: GraphQL subscriptions (#1374)
* chore: pin `graphql-request` to `v5` (#1567)
* chore: upgrade `tsx` (#1574)
* feat: migrate from Jest to Vitest (#1310)
* chore: fix temp test workflow (#1579)
* chore: update required node engine in `create-fuels` (#1582)
* chore: add node version test matrix (#1575)
* chore: fix broken rc message (#1580)
* chore: update nodejs to v20 (#1544)
* feat: accepting addresses as `string` (#1583)
* chore: properly format the PR coverage report comment (#1586)
* fix: flaky test (#1590)
* docs: update `deposit-and-withdraw` page (#1591)
* feat: retry mechanism (#1474)
* feat: replaced `semver` dependency with custom implementation (#1594)
* feat: replace `elliptic` with `@noble/curves` (#1601)
* chore: fix CI failing due to missing tag in test (#1614)
* feat: improve ABI Coders `decode` validation (#1426)
* fix: do not generate a coverage diff without coverage artifact (#1629)
* chore: pinpoint vitest to 1.0.4 (#1637)
* chore: remove `ethers` dependency from `utils` (#1640)
* fix: `getOperation` for `Transfer Asset` (#1619)
* fix: remove external font dependencies (#1642)
* fix: generate RC PR comment on `pull_request` event only (#1648)
* fix: fix failing `rc` comment (#1657)
* chore: add missing test group (#1658)
* feat: implement browser compatibility testing (#1630)
* chore: fix string replace in `rc` ci (#1659)
* chore: adding extra reporters (#1661)
* chore: manually trigger `rc` CI (#1660)
* feat: use `submitAndAwait` graphql endpoint (#1615)
* fix: flaky retry test (#1654)
* feat: create a wallet without a provider (#1566)
* chore!: Share single chainConfig and review node-related utilities (#1602)
* chore: use new temporary coverage artifact (#1676)
* fix: internalizing `findBinPath` utility (#1679)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat Issue is a feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Introduce submitAndAwait graphql endpoint support
3 participants