diff --git a/.vitepress/config.ts b/.vitepress/config.ts
index 8714f543..b893e811 100644
--- a/.vitepress/config.ts
+++ b/.vitepress/config.ts
@@ -101,7 +101,7 @@ export default withMermaid(
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Get Started', link: '/get-started/welcome' },
- { text: 'Guides', link: '/guides/build-iapp/build-&-deploy' },
+ { text: 'Guides', link: '/guides/build-iapp/build-&-test' },
{ text: 'References', link: '/references/dataProtector' },
{
component: 'ChainSelector',
diff --git a/.vitepress/sidebar.ts b/.vitepress/sidebar.ts
index af4a6d47..f0786033 100644
--- a/.vitepress/sidebar.ts
+++ b/.vitepress/sidebar.ts
@@ -166,8 +166,12 @@ export function getSidebar() {
text: 'BUILD YOUR iAPP',
items: [
{
- text: 'Build and Deploy',
- link: '/guides/build-iapp/build-&-deploy',
+ text: 'Build and Test',
+ link: '/guides/build-iapp/build-&-test',
+ },
+ {
+ text: 'Deploy and Run',
+ link: '/guides/build-iapp/deploy-&-run',
},
{
text: 'Manage Access',
@@ -181,10 +185,6 @@ export function getSidebar() {
text: 'Using TDX',
link: '/guides/build-iapp/using-tdx',
},
- {
- text: 'How to Get and Decrypt Results',
- link: '/guides/build-iapp/how-to-get-and-decrypt-results',
- },
{
text: 'Debugging',
link: '/guides/build-iapp/debugging',
@@ -241,16 +241,12 @@ export function getSidebar() {
link: '/guides/use-iapp/getting-started',
},
{
- text: 'Different Ways to Execute an iApp',
- link: '/guides/use-iapp/different-ways-to-execute',
- },
- {
- text: 'Use iApp with Protected Data',
- link: '/guides/use-iapp/use-iapp-with-protected-data',
+ text: 'Run iApp with ProtectedData',
+ link: '/guides/use-iapp/run-iapp-with-ProtectedData',
},
{
- text: 'Add Inputs to the Execution',
- link: '/guides/use-iapp/add-inputs-to-execution',
+ text: 'Run iApp without ProtectedData',
+ link: '/guides/use-iapp/run-iapp-without-ProtectedData',
},
{
text: 'How to Pay the Executions',
@@ -606,7 +602,7 @@ export function getSidebar() {
link: '/references/sdk',
},
{
- text: 'οΏ½π Glossary',
+ text: 'π Glossary',
link: '/references/glossary',
},
],
diff --git a/README.md b/README.md
index 7fd53bf4..126bb899 100644
--- a/README.md
+++ b/README.md
@@ -252,3 +252,7 @@ for input parameters:
- Talk about ENS on Bellecour(it's not supported on arbitrum)
- Rework Advanced iApp building guides. (from "old" protocol doc)
- Rework src\get-started\protocol\oracle.md (transfer to guide or rewrite)
+- Talk about iApp secret
+- Improve Guide in build-iapp section - be more clear for builder ( how to
+ process process protectedData, clarify input-output guide)
+- refactor iapp generator cli reference
diff --git a/src/get-started/helloWorld/3-buildIApp.md b/src/get-started/helloWorld/3-buildIApp.md
index 554dd493..6ab83a99 100644
--- a/src/get-started/helloWorld/3-buildIApp.md
+++ b/src/get-started/helloWorld/3-buildIApp.md
@@ -489,7 +489,7 @@ const arbitrumSteps = [
},
{
showAt: 13,
- question: 'Pushed TEE image bob/hello-world:0.0.1-tee-scone-5.9.1-v16-debug-ce3a01d9c5d7 on dockerhub',
+ question: 'Pushed TEE image bob/hello-world:0.0.1-tee-scone-5.9.1-v16-ce3a01d9c5d7 on dockerhub',
answer: '',
showTyping: false,
isComplete: true
@@ -558,7 +558,7 @@ const bellecourSteps = [
},
{
showAt: 12,
- question: 'Pushed TEE image bob/hello-world:0.0.1-tee-scone-5.9.1-v16-debug-ce3a01d9c5d7 on dockerhub',
+ question: 'Pushed TEE image bob/hello-world:0.0.1-tee-scone-5.9.1-v16-ce3a01d9c5d7 on dockerhub',
answer: '',
showTyping: false,
isComplete: true
@@ -573,12 +573,12 @@ const bellecourSteps = [
];
const arbitrumCompletionItems = [
- 'β Docker image: bob/hello-world:0.0.1-tee-scone-5.9.1-v16-debug-ce3a01d9c5d7',
+ 'β Docker image: bob/hello-world:0.0.1-tee-scone-5.9.1-v16-ce3a01d9c5d7',
'β iApp address: 0x1f80DCebc2EAAff0Db7156413C43B7e88D189923'
];
const bellecourCompletionItems = [
- 'β Docker image: bob/hello-world:0.0.1-tee-scone-5.9.1-v16-debug-ce3a01d9c5d7',
+ 'β Docker image: bob/hello-world:0.0.1-tee-scone-5.9.1-v16-ce3a01d9c5d7',
'β iApp address: 0x1f80DCebc2EAAff0Db7156413C43B7e88D189923'
];
diff --git a/src/get-started/overview/what-is-iexec.md b/src/get-started/overview/what-is-iexec.md
index bd416f56..a88710ee 100644
--- a/src/get-started/overview/what-is-iexec.md
+++ b/src/get-started/overview/what-is-iexec.md
@@ -10,7 +10,7 @@ description:
iExec is a **decentralized confidential computing toolkit** that helps
developers build privacy-preserving applications.
-## The Protocol (Simple Version)
+## SpeedRun The Protocol
### Step 1: Protect Data
diff --git a/src/get-started/protocol/tee/intel-sgx-technology.md b/src/get-started/protocol/tee/intel-sgx-technology.md
index 62ab37ff..bd508f78 100644
--- a/src/get-started/protocol/tee/intel-sgx-technology.md
+++ b/src/get-started/protocol/tee/intel-sgx-technology.md
@@ -79,6 +79,6 @@ The environment you are about to use is a "develop" environment:
- where configurations and secrets might be inspected (debug enclaves)
When your developer discovery journey is complete, please reach the
-[production section](/guides/build-iapp/build-&-deploy#go-to-production).
+[production section](/guides/build-iapp/build-&-test#go-to-production).
:::
diff --git a/src/guides/build-iapp/advanced/access-confidential-assets.md b/src/guides/build-iapp/advanced/access-confidential-assets.md
index 7d705204..4a245b95 100644
--- a/src/guides/build-iapp/advanced/access-confidential-assets.md
+++ b/src/guides/build-iapp/advanced/access-confidential-assets.md
@@ -18,7 +18,7 @@ indeed whitelisted for it.
The SMS currently supports 3 types of secrets:
-1. [Application developer secret](/guides/build-iapp/build-&-deploy#application-developer-secret):
+1. [Application developer secret](/guides/build-iapp/build-&-test#application-developer-secret):
This secret is directly accessible from the application as an environment
variable. It is owned by the developer of the application. It can be any kind
of data (API key, private key, token, ..) as long as it respects the size
@@ -58,6 +58,4 @@ graph TD
You now understand how these three kinds of confidential assets work on iExec,
you can go one step further by learning how to manipulate them:
-- [Attach a secret to your app](/guides/build-iapp/build-&-deploy#application-developer-secret)
-- [Access requester secrets](/guides/build-iapp/inputs-and-outputs#access-requester-secrets)
- [Access a confidential dataset](sgx-encrypted-dataset.md)
diff --git a/src/guides/build-iapp/advanced/quick-start-for-developers.md b/src/guides/build-iapp/advanced/quick-start-for-developers.md
index 08a45b38..2c3564bf 100644
--- a/src/guides/build-iapp/advanced/quick-start-for-developers.md
+++ b/src/guides/build-iapp/advanced/quick-start-for-developers.md
@@ -344,4 +344,3 @@ You are now familiar with the following key iExec concepts for developers:
Continue with these guides:
- [Learn how to build your first application running on iExec](your-first-app.md)
-- [Learn how to manage your apporders](/guides/build-iapp/build-&-deploy#manage-your-apporders)
diff --git a/src/guides/build-iapp/advanced/sgx-encrypted-dataset.md b/src/guides/build-iapp/advanced/sgx-encrypted-dataset.md
index eee484e9..c4e84288 100644
--- a/src/guides/build-iapp/advanced/sgx-encrypted-dataset.md
+++ b/src/guides/build-iapp/advanced/sgx-encrypted-dataset.md
@@ -363,6 +363,4 @@ an encrypted dataset in a Confidential Computing application.
To go further, check out how to:
-- [Attach a secret to your app](/guides/build-iapp/build-&-deploy#application-developer-secret)
-- [Access requester secrets](/guides/build-iapp/inputs-and-outputs#access-requester-secrets)
- [Protect the result](end-to-end-encryption.md)
diff --git a/src/guides/build-iapp/advanced/your-first-app.md b/src/guides/build-iapp/advanced/your-first-app.md
index 824b15bf..e3dd5a8e 100644
--- a/src/guides/build-iapp/advanced/your-first-app.md
+++ b/src/guides/build-iapp/advanced/your-first-app.md
@@ -413,13 +413,3 @@ iExec:
- using docker to package your app with all its dependencies
- testing an iExec app locally
- publishing on dockerhub
-
-Resources:
-
-- A list of iExec applications with their Docker images can be found at
- [https://github.com/iExecBlockchainComputing/iexec-apps](https://github.com/iExecBlockchainComputing/iexec-apps)
-
-Continue with these articles:
-
-- [Confidential app](/guides/build-iapp/build-&-deploy#confidential-app)
-- [Learn how to manage your apporders](/guides/build-iapp/build-&-deploy#manage-your-apporders)
diff --git a/src/guides/build-iapp/build-&-deploy.md b/src/guides/build-iapp/build-&-deploy.md
deleted file mode 100644
index ac6a28dc..00000000
--- a/src/guides/build-iapp/build-&-deploy.md
+++ /dev/null
@@ -1,472 +0,0 @@
----
-title: Create and Deploy an iApp
-description:
- How to create a confidential iExec application and deploy it on iExec protocol
----
-
-# Create and Deploy an iApp
-
-iApp (iExec Applications) are decentralized applications that run on the iExec
-network. They use confidential computing to ensure data privacy and security
-while providing scalable off-chain computation.
-
-## About iApp Generator
-
-Bootstrap TEE-compatible applications in minutes without any hardcoding skills,
-iApp Generator handles all the low-level complexity for you.
-
-- **Select your project mode & language** - Get started with either a basic or
- advanced setup, depending on your experience with the iExec framework. You can
- use Python or JavaScriptβwhichever you prefer!
-- **Develop your iApp effortlessly** - Write your application logic using
- familiar programming languages while the generator handles all TEE-specific
- configurations.
-- **Access to TEEs easily** - No need to dive into low-level requirements,
- create iApp that connect to TEEs in minutes.
-- **Check and deploy iApp quickly** - iApp Generator checks that your iApp
- complies with the iExec Framework and streamlines its deployment.
-
-## Prerequisites
-
-Before getting started, make sure you have the following installed:
-
-- **Node.js** (version 18 or higher) - [Download here](https://nodejs.org/)
-- **Docker** - [Download here](https://www.docker.com/get-started)
-- **Docker Hub account** - [Sign up here](https://hub.docker.com/) (required for
- deployment)
-
-## Installation
-
-First, install the iApp Generator CLI tool using your preferred package manager:
-
-::: code-group
-
-```sh [npm]
-npm install -g @iexec/iapp
-```
-
-```sh [yarn]
-yarn global add @iexec/iapp
-```
-
-```sh [pnpm]
-pnpm add -g @iexec/iapp
-```
-
-```sh [bun]
-bun add -g @iexec/iapp
-```
-
-:::
-
-## Quick Start
-
-Once installed, you can create and deploy your first iApp. The CLI will guide
-you through an interactive setup process to configure your project name,
-programming language, and template:
-
-
-
-After the interactive setup, continue with development and deployment:
-
-## Development and Testing
-
-Navigate to your project and run tests locally to simulate the TEE environment.
-The CLI will build a Docker image, run your app, and show you the results:
-
-
-
-## Deployment
-
-After your tests pass and the package is built, you can deploy your iApp to a
-supported network. During deployment, you'll enter your DockerHub credentials,
-specify your app version, and push both standard and TEE-compatible images:
-
-
-
-
-
-
-
-
-
-## Real Examples
-
-Here are some real-world examples of iApp to help you understand how they work
-in practice.
-
-### Email Notification iApp
-
-This iApp lets you send updates to your contacts without ever seeing their email
-addresses, privacy is preserved by design.
-
-::: code-group
-
-```js [Node.js]
-/* User runs: "Send updates to my contacts about my project" */
-const contacts = loadProtectedData(); // User's protected contact list
-contacts.forEach((contact) => {
- sendEmail(contact, projectUpdateMessage);
-});
-// β Emails sent directly, you never see the addresses
-```
-
-```python [Python]
-# User runs: "Send updates to my contacts about my project"
-contacts = load_protecteddata() # User's protected contact list
-for contact in contacts:
- send_email(contact, project_update_message)
-# β Emails sent directly, you never see the addresses
-```
-
-:::
-
-### Oracle Update iApp
-
-This iApp securely updates a price oracle using private trading data, ensuring
-sensitive information stays confidential.
-
-::: code-group
-
-```js [Node.js]
-// User runs: "Update price oracle with my private trading data"
-const tradingData = loadProtectedData(); // User's protected trading history
-const averagePrice = calculateWeightedAverage(tradingData);
-updateOracleContract(averagePrice);
-// β Oracle updated with real data, trading history stays private
-```
-
-```python [Python]
-# User runs: "Update price oracle with my private trading data"
-trading_data = load_protecteddata() # User's protected trading history
-average_price = calculate_weighted_average(trading_data)
-update_oracle_contract(average_price)
-# β Oracle updated with real data, trading history stays private
-```
-
-:::
-
-### Automated Transactions iApp
-
-This iApp automates monthly payments using protected payment details, so
-financial information remains private.
-
-::: code-group
-
-```js [Node.js]
-// User runs: "Automate payments every month"
-const paymentInfo = loadProtectedData(); // User's payment details
-for (let month = 0; month < 12; month++) {
- processPayment(paymentInfo);
-}
-// β Payments processed, payment details stay private
-```
-
-```python [Python]
-# User runs: "Automate payments every month"
-payment_info = load_protecteddata() # User's payment details
-for month in range(12):
- process_payment(payment_info)
-# β Payments processed, payment details stay private
-```
-
-:::
-
-
diff --git a/src/guides/build-iapp/build-&-test.md b/src/guides/build-iapp/build-&-test.md
new file mode 100644
index 00000000..cec884c1
--- /dev/null
+++ b/src/guides/build-iapp/build-&-test.md
@@ -0,0 +1,216 @@
+---
+title: Build and Test an iApp
+description:
+ Learn how to build, test, and package your iExec application using the iApp
+ Generator CLI tool
+---
+
+# Build and Test an iApp
+
+iApp (iExec Applications) are decentralized applications that run on the iExec
+network. They use confidential computing to ensure data privacy and security
+while providing scalable off-chain computation.
+
+## About iApp Generator
+
+Bootstrap TEE-compatible applications in minutes without any hardcoding skills,
+iApp Generator handles all the low-level complexity for you.
+
+- **Select your project mode & language** - Get started with either a basic or
+ advanced setup, depending on your experience with the iExec framework. You can
+ use Python or JavaScriptβwhichever you prefer!
+- **Develop your iApp effortlessly** - Write your application logic using
+ familiar programming languages while the generator handles all TEE-specific
+ configurations.
+- **Access to TEEs easily** - No need to dive into low-level requirements,
+ create iApp that connect to TEEs in minutes.
+- **Check and deploy iApp quickly** - iApp Generator checks that your iApp
+ complies with the iExec Framework and streamlines its deployment.
+
+## Prerequisites
+
+Before getting started, make sure you have the following installed:
+
+
+
+## Installation
+
+First, install the iApp Generator CLI tool using your preferred package manager:
+
+::: code-group
+
+```sh [npm]
+npm install -g @iexec/iapp
+```
+
+```sh [yarn]
+yarn global add @iexec/iapp
+```
+
+```sh [pnpm]
+pnpm add -g @iexec/iapp
+```
+
+```sh [bun]
+bun add -g @iexec/iapp
+```
+
+:::
+
+## Quick Start
+
+Once installed, you can create and deploy your first iApp. The CLI will guide
+you through an interactive setup process to configure your project name,
+programming language, and template:
+
+
+
+After the interactive setup, continue with development and deployment:
+
+## Development and Testing
+
+Navigate to your project and run tests locally to simulate the TEE environment.
+The CLI will build a Docker image, run your app, and show you the results:
+
+
+
+## Next Steps
+
+- When everything is ready
+ [deploy and run your iApp](../use-iapp/run-iapp-with-ProtectedData)
+
+
diff --git a/src/guides/build-iapp/debugging.md b/src/guides/build-iapp/debugging.md
index 17e9c5a2..c587be7d 100644
--- a/src/guides/build-iapp/debugging.md
+++ b/src/guides/build-iapp/debugging.md
@@ -171,5 +171,5 @@ Continue improving your iApp:
- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data
in TEE
-- **[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)** -
+- **[How to Get and Decrypt Results](/guides/build-iapp/inputs-and-outputs)** -
Retrieve results
diff --git a/src/guides/build-iapp/deploy-&-run.md b/src/guides/build-iapp/deploy-&-run.md
new file mode 100644
index 00000000..f1c1b008
--- /dev/null
+++ b/src/guides/build-iapp/deploy-&-run.md
@@ -0,0 +1,496 @@
+---
+title: Deploy and Run an iApp
+description:
+ Deploy your iApp to supported networks and learn how to execute it using the
+ iApp Generator CLI
+---
+
+# Deploy and Run an iApp
+
+It's time to run your iApp! After building and testing, you'll need to deploy it
+to a supported network and then execute it.
+
+## Deploy your iApp
+
+After your tests pass and the package is built, you can deploy your iApp to a
+supported network. During deployment, you'll enter your DockerHub credentials,
+specify your app version, and push both standard and TEE-compatible images:
+
+
+
+
+
+
+
+
+
+Now that your iApp has been deployed on the iExec protocol, you can navigate to
+the `cache` folder to see your deployments saved. A file named
+`deployments.json` in the folder corresponding to your target network will be
+created containing each deployment made on this network. These files will help
+you easily track each deployment per network.
+
+Here is an example:
+
+```json
+[
+ {
+ "sconifiedImage": "robiniexec/iapp:0.0.1-tee-scone-5.9.1-v16-debug-5aea8b4aa71d",
+ "appContractAddress": "0x9665136c599ec361C8eE627eC4F35A23fBa94897",
+ "owner": "0xbabE8270aC9857Af3aaC06877888F1939FbeC578",
+ "date": "2025-08-12T13:16:18.252Z"
+ },
+ ...
+]
+```
+
+## Run your iApp
+
+There are multiple ways to execute an iApp on the iExec network. An iApp can be:
+
+- **Self-sufficient** - Basic execution without additional inputs
+- **Data-dependent** - Requires protected data, secrets, input files, or
+ command-line arguments
+
+The iApp Generator CLI provides a streamlined way to execute iApp, especially
+for developers who have built their own iApp.
+
+> **Note**: For installation instructions, see the
+> [iApp Generator Getting Started guide](/references/iapp-generator/getting-started).
+
+
+
+
+
+
+
+
+
+Now that you have run your iApp on the iExec protocol, you can navigate to the
+`cache` folder to see your runs saved. A file named `runs.json` in the folder
+corresponding to your target network will be created containing each run made on
+this network. These files will help you easily track each run per network. Use
+the [iExec Explorer](/get-started/tooling-and-explorers/iexec-explorer) to
+retrieve more data about your tasks.
+
+Here is an example:
+
+```json
+[
+ {
+ "iAppAddress": "0x9665136c599ec361C8eE627eC4F35A23fBa94897",
+ "dealid": "0x26d758de1be51697c33fa606cd0c5243082a6e675a4463b106d71fde2893280f",
+ "taskid": "0x1a58dd6018b30b022eb35be53ad9374eb630925458d14643a1dfd9c686b964d8",
+ "txHash": "0x6f14eac6933c609fb6d3e6b2bbd18c373c6dc99c7d7fd22036d5a20f847c5e42",
+ "date": "2025-08-18T18:30:03.711Z"
+ },
+ ...
+]
+```
+
+## Next Steps
+
+- Learn how to [manage access to your iApp](/guides/build-iapp/manage-access)
+- Discover [debugging techniques](/guides/build-iapp/debugging) for
+ troubleshooting
+
+
diff --git a/src/guides/build-iapp/how-to-get-and-decrypt-results.md b/src/guides/build-iapp/how-to-get-and-decrypt-results.md
deleted file mode 100644
index f56bef05..00000000
--- a/src/guides/build-iapp/how-to-get-and-decrypt-results.md
+++ /dev/null
@@ -1,314 +0,0 @@
----
-title: How to Get and Decrypt Results
-description: Download and decrypt iApp execution results from completed tasks
----
-
-# π¦ How to Get and Decrypt Results
-
-**When an iApp execution completes, you need to retrieve and decrypt the
-results.** This guide shows you how to download task results and decrypt them to
-access the actual output files.
-
-Understanding the result retrieval process is essential for building
-user-friendly applications with iExec.
-
-## Understanding Results Structure
-
-### Deal β Task β Result Flow
-
-**Every execution follows this hierarchy**:
-
-```
-Deal (agreement between parties)
-βββ Task 1 (individual execution instance)
-β βββ Result (encrypted output files)
-βββ Task 2
-β βββ Result
-βββ ...
-```
-
-- **Deal**: Contains one or more tasks from your execution request
-- **Task**: Individual computation instance with unique `taskId`
-- **Result**: Encrypted ZIP file containing your iApp's output files
-
-### Result Accessibility
-
-**Results are publicly downloadable** but may be encrypted:
-
-- β
**Anyone can download** the result file from IPFS
-- π **Only authorized parties can decrypt** the contents
-- π **Results contain** all files from `IEXEC_OUT` directory
-- β‘ **Available immediately** after task completion
-
-## Downloading Results
-
-### Using iExec SDK CLI
-
-**Get task information and download**:
-
-```bash
-# Check task status and get result info
-iexec task show
-
-# Download encrypted result
-iexec task show --download my-result
-
-# Extract downloaded files
-unzip my-result.zip -d my-result/
-ls my-result/
-```
-
-**Get task ID from deal**:
-
-```bash
-# If you only have the deal ID
-iexec deal show
-
-# Lists all tasks in the deal with their IDs
-```
-
-### Using DataProtector SDK
-
-**Integrated download and decryption**:
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Get result from completed task
-const result = await dataProtectorCore.getResultFromCompletedTask({
- taskId: '0x123abc...', // Your task ID
-});
-
-console.log('Result downloaded and decrypted:', result);
-```
-
-## Decrypting Results
-
-### Automatic Decryption with DataProtector
-
-**The easiest way** - decryption happens automatically:
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Execute and get results in one flow
-const processResponse = await dataProtectorCore.processProtectedData({
- protectedData: '0x123abc...',
- app: '0x456def...',
-});
-
-console.log('Task ID:', processResponse.taskId);
-
-// Get decrypted result
-const result = await dataProtectorCore.getResultFromCompletedTask({
- taskId: processResponse.taskId,
-});
-
-// Result is automatically decrypted ArrayBuffer
-const resultText = new TextDecoder().decode(result.result);
-console.log('Decrypted result:', resultText);
-```
-
-### Manual Decryption with CLI
-
-**If you downloaded manually**:
-
-```bash
-# Download the encrypted result
-iexec task show --download my-result
-
-# Decrypt using your wallet (must be the beneficiary)
-iexec result decrypt my-result.zip --force
-
-# Extract decrypted files
-unzip decrypted-result.zip -d final-result/
-cat final-result/result.txt
-```
-
-## Result File Structure
-
-### What's Inside a Result
-
-**Typical result contents**:
-
-```
-result.zip
-βββ computed.json # Mandatory metadata file
-βββ result.txt # Your main output
-βββ analysis.json # Additional outputs
-βββ logs.txt # Optional logs
-βββ metadata.json # Optional metadata
-```
-
-### `computed.json` Structure
-
-**Always present in every result**:
-
-```json
-{
- "deterministic-output-path": "/iexec_out/result.txt",
- "execution-timestamp": "2024-01-15T10:30:00Z",
- "app-version": "1.0.0"
-}
-```
-
-**Key fields**:
-
-- `deterministic-output-path`: Main result file path
-- `execution-timestamp`: When the computation completed
-- Custom fields added by your iApp
-
-## Common Patterns
-
-### React Application Example
-
-**Integrate result retrieval in your frontend**:
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-async function downloadResult(taskId: string) {
- try {
- const resultResponse = await dataProtectorCore.getResultFromCompletedTask({
- taskId,
- });
-
- // Convert to text or JSON based on your result format
- const resultText = new TextDecoder().decode(resultResponse.result);
- const resultJson = JSON.parse(resultText);
-
- return resultJson;
- } catch (error) {
- console.error('Failed to download result:', error);
- throw error;
- }
-}
-
-// Usage example
-const taskId = '0x123abc...';
-const result = await downloadResult(taskId);
-console.log('Analysis Result:', result);
-```
-
-### Node.js Backend Example
-
-**Server-side result processing**:
-
-```javascript
-const {
- IExecDataProtectorCore,
- getWeb3Provider,
-} = require('@iexec/dataprotector');
-
-async function processTaskResult(taskId) {
- const web3Provider = getWeb3Provider(process.env.PRIVATE_KEY);
- const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-
- try {
- // Get the result
- const resultBuffer = await dataProtectorCore.getResultFromCompletedTask({
- taskId,
- });
-
- // Parse the result based on your format
- const resultText = new TextDecoder().decode(resultBuffer);
-
- // If your result is JSON
- const analysisResult = JSON.parse(resultText);
-
- // Store in database, send notifications, etc.
- await saveToDatabase(taskId, analysisResult);
- await notifyUser(analysisResult);
-
- return analysisResult;
- } catch (error) {
- console.error('Result processing failed:', error);
- throw error;
- }
-}
-```
-
-## Troubleshooting
-
-### Common Issues
-
-**β "Task not completed"**
-
-```
-Error: Task is still running
-```
-
-**Solution**: Wait for task completion or check status with
-`iexec task show `
-
-**β "Decryption failed"**
-
-```
-Error: Failed to decrypt result
-```
-
-**Solutions**:
-
-- Use the correct wallet (beneficiary)
-- Check if result was actually encrypted
-- Verify task completed successfully
-
-**β "Result not found"**
-
-```
-Error: Result not available
-```
-
-**Solutions**:
-
-- Check task status - it might have failed
-- Verify the task ID is correct
-- Wait for result upload to complete
-
-### Checking Task Status
-
-**Before downloading, verify completion**:
-
-```bash
-# Check if task is completed
-iexec task show
-
-# Look for status: "COMPLETED"
-# And result information in the output
-```
-
-### Result Encryption Status
-
-**Not all results are encrypted**:
-
-- π **Encrypted**: When `beneficiary` is set in the request
-- π **Plain**: When no beneficiary specified (public results)
-- β
**DataProtector handles both** automatically
-
-## What's Next?
-
-**You can now retrieve and decrypt iApp results!**
-
-Integrate result handling into your applications:
-
-- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Understand
- what your iApp can output
-- **[Debugging Your iApp](/guides/build-iapp/debugging)** - Troubleshoot
- execution issues
-- **[App Access Control and Pricing](/guides/build-iapp/manage-access)** -
- Control who can run your iApp
-
-### Advanced Topics
-
-- **[DataProtector SDK](/references/dataProtector)** - Complete SDK
- documentation
-- **[SDK Deep Dive](/references/sdk)** - Advanced result handling techniques
diff --git a/src/guides/build-iapp/inputs-and-outputs.md b/src/guides/build-iapp/inputs-and-outputs.md
index 1012a2e6..00c9a56c 100644
--- a/src/guides/build-iapp/inputs-and-outputs.md
+++ b/src/guides/build-iapp/inputs-and-outputs.md
@@ -613,14 +613,6 @@ report = generate_report(business_data, report_type)
save_report(report)
```
-## Output Retrieval
-
-Once your iApp completes execution, users can retrieve and decrypt the results:
-
-β **Learn how users get results**: Check our
-[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)
-guide for the complete user workflow.
-
## What's Next?
**You now understand all input types and output requirements!**
@@ -631,7 +623,7 @@ Continue building with these guides:
Control who can use your iApp
- **[Debugging Your iApp](/guides/build-iapp/debugging)** - Troubleshoot
execution issues
-- **[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)** -
+- **[How to Get and Decrypt Results](/guides/build-iapp/inputs-and-outputs)** -
User-side result handling
### Technical Deep Dive
diff --git a/src/guides/build-iapp/manage-access.md b/src/guides/build-iapp/manage-access.md
index a325c2a5..9d18e8c1 100644
--- a/src/guides/build-iapp/manage-access.md
+++ b/src/guides/build-iapp/manage-access.md
@@ -118,13 +118,13 @@ iexec wallet import
::: tip iApp Generator Users
-If you used iApp Generator, you already have an `iexecconfig.json` file with a
+If you used iApp Generator, you already have an `iapp.config.json` file with a
generated private key. You can use this existing private key to initialize your
wallet:
```bash
-# Extract the private key from your `iexecconfig.json`
-iexec wallet import
+# Extract the private key from your `iapp.config.json`
+iexec wallet import
```
:::
diff --git a/src/guides/manage-data/manage-access.md b/src/guides/manage-data/manage-access.md
index 7b37b486..8f2ecde1 100644
--- a/src/guides/manage-data/manage-access.md
+++ b/src/guides/manage-data/manage-access.md
@@ -79,27 +79,6 @@ for detailed formatting instructions.
:::
-### Debug Mode Option
-
-Debug mode lets you test with debug iApp during development. As "debug" iApp
-don't have the same security standards, we recommend using this mode only during
-iApp development.
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-
-const protectedData = await dataProtectorCore.protectData({
- data: {
- email: 'test@example.com',
- },
- allowDebug: true, // [!code focus]
-});
-```
-
## Grant Access
By default, your protected data is private. To let others use it, you need to
diff --git a/src/guides/use-iapp/add-inputs-to-execution.md b/src/guides/use-iapp/add-inputs-to-execution.md
deleted file mode 100644
index eb6d321e..00000000
--- a/src/guides/use-iapp/add-inputs-to-execution.md
+++ /dev/null
@@ -1,340 +0,0 @@
----
-title: Add Inputs to iApp Execution
-description:
- Learn how to provide arguments, files, secrets, and other inputs to iApp
- executions
----
-
-# π₯ Add Inputs to iApp Execution
-
-iApp can accept various types of inputs to customize their behavior and provide
-necessary data for processing. This guide covers all the different ways to add
-inputs to your iApp executions using various iExec tools and SDK.
-
-## Types of Inputs
-
-iExec supports several types of inputs for iApp executions:
-
-1. **Arguments**: Command-line arguments passed to the application
-2. **Input Files**: URLs to public files that the app can download
-3. **Secrets**: Sensitive data like API keys stored securely
-4. **Protected Data**: Encrypted data processed within the TEE
-
-## Method 1: Adding Command-Line Arguments
-
-Command-line arguments are passed as a string to the iApp and are visible on the
-blockchain.
-
-### Using SDK Library
-
-```ts twoslash
-import { IExec, utils } from 'iexec';
-
-const ethProvider = utils.getSignerFromPrivateKey(
- 'bellecour', // blockchain node URL
- 'PRIVATE_KEY'
-);
-const iexec = new IExec({
- ethProvider,
-});
-// ---cut---
-// Basic arguments
-const requestorderToSign = await iexec.order.createRequestorder({
- app: '0x456def...',
- category: 0,
- appmaxprice: 10,
- workerpool: '0xa5de76...', // ENS address for iExec's debug workerpool
- params: 'arg1 arg2 arg3', // Command-line arguments
- // Other parameters have default values
-});
-const requestOrder = await iexec.order.signRequestorder(requestorderToSign);
-
-// Fetch app orders
-const appOrders = await iexec.orderbook.fetchAppOrderbook(
- '0x456def...' // Filter by specific app
-);
-if (appOrders.orders.length === 0) {
- throw new Error('No app orders found for the specified app');
-}
-
-// Fetch workerpool orders
-const workerpoolOrders = await iexec.orderbook.fetchWorkerpoolOrderbook({
- workerpool: '0xa5de76...', // Filter by specific workerpool
-});
-if (workerpoolOrders.orders.length === 0) {
- throw new Error('No workerpool orders found for the specified workerpool');
-}
-
-// Execute the task
-const taskId = await iexec.order.matchOrders({
- requestorder: requestOrder,
- apporder: appOrders.orders[0].order,
- workerpoolorder: workerpoolOrders.orders[0].order,
-});
-```
-
-### Using SDK CLI
-
-```bash
-# Basic arguments
-iexec app run 0x456def... --protectedData 0x123abc... --args "arg1 arg2"
-
-# Complex arguments with spaces
-iexec app run 0x456def... --protectedData 0x123abc... --args "--input-file data.csv --output-format json"
-
-# Arguments with quotes (escape properly)
-iexec app run 0x456def... --protectedData 0x123abc... --args "--message \"Hello World\" --config '{\"key\": \"value\"}'"
-```
-
-### Using DataProtector
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Process protected data with arguments
-const result = await dataProtectorCore.processProtectedData({
- protectedData: '0x123abc...',
- app: '0x456def...',
- args: '--input-path data/input.csv --output-format json --verbose',
-});
-```
-
-## Method 2: Adding Input Files
-
-Input files are URLs to public files that the iApp can download during
-execution.
-
-### Using SDK Library
-
-```ts twoslash
-import { IExec, utils } from 'iexec';
-
-const ethProvider = utils.getSignerFromPrivateKey(
- 'bellecour', // blockchain node URL
- 'PRIVATE_KEY'
-);
-const iexec = new IExec({
- ethProvider,
-});
-// ---cut---
-// Single input file
-const requestorderToSign = await iexec.order.createRequestorder({
- app: '0x456def...',
- category: 0, // Required: category for the request
- appmaxprice: 10,
- workerpool: '0xa5de76...', // ENS address for iExec's debug workerpool
- params: {
- iexec_input_files: [
- 'https://example.com/config.json',
- 'https://example.com/template.html',
- 'https://example.com/data.csv',
- ],
- },
-});
-const requestOrder = await iexec.order.signRequestorder(requestorderToSign);
-
-// Fetch app orders
-const appOrders = await iexec.orderbook.fetchAppOrderbook(
- '0x456def...' // Filter by specific app
-);
-if (appOrders.orders.length === 0) {
- throw new Error('No app orders found for the specified app');
-}
-
-// Fetch workerpool orders
-const workerpoolOrders = await iexec.orderbook.fetchWorkerpoolOrderbook({
- workerpool: '0xa5de76...', // Filter by specific workerpool
-});
-if (workerpoolOrders.orders.length === 0) {
- throw new Error('No workerpool orders found for the specified workerpool');
-}
-
-// Execute the task
-const taskId = await iexec.order.matchOrders({
- requestorder: requestOrder,
- apporder: appOrders.orders[0].order,
- workerpoolorder: workerpoolOrders.orders[0].order,
-});
-```
-
-### Using SDK CLI
-
-```bash
-# Single input file
-iexec app run 0x456def... --protectedData 0x123abc... --inputFiles "https://example.com/config.json"
-
-# Multiple input files (comma-separated)
-iexec app run 0x456def... --protectedData 0x123abc... --inputFiles "https://example.com/config.json,https://example.com/template.html"
-
-# Multiple input files (space-separated)
-iexec app run 0x456def... --protectedData 0x123abc... --inputFiles "https://example.com/config.json" --inputFiles "https://example.com/template.html"
-```
-
-### Using DataProtector
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Process protected data with input files
-const result = await dataProtectorCore.processProtectedData({
- protectedData: '0x123abc...',
- app: '0x456def...',
- inputFiles: [
- 'https://raw.githubusercontent.com/user/repo/main/config.json',
- 'https://example.com/public-data.csv',
- ],
-});
-```
-
-## Method 3: Adding Secrets
-
-Secrets are sensitive data like API keys, passwords, or tokens that are stored
-securely and made available to the iApp as environment variables.
-
-### Using SDK Library
-
-```ts twoslash [Browser]
-// @errors: 2345 2739 7053 2339
-import { IExec, utils } from 'iexec';
-
-const ethProvider = utils.getSignerFromPrivateKey(
- 'bellecour', // blockchain node URL
- 'PRIVATE_KEY'
-);
-const iexec = new IExec({
- ethProvider,
-});
-// ---cut---
-// Basic secrets
-const requestorderToSign = await iexec.order.createRequestorder({
- app: '0x456def...',
- category: 0, // Required: category for the request
- appmaxprice: 10,
- workerpool: '0xa5de76...', // ENS address for iExec's debug workerpool
- params: {
- iexec_secrets: {
- 1: 'api-key-12345',
- 2: 'database-password',
- },
- },
-});
-const requestOrder = await iexec.order.signRequestorder(requestorderToSign);
-
-// Fetch app orders
-const appOrders = await iexec.orderbook.fetchAppOrderbook(
- '0x456def...' // Filter by specific app
-);
-if (appOrders.orders.length === 0) {
- throw new Error('No app orders found for the specified app');
-}
-
-// Fetch workerpool orders
-const workerpoolOrders = await iexec.orderbook.fetchWorkerpoolOrderbook({
- workerpool: '0xa5de76...', // Filter by specific workerpool
-});
-if (workerpoolOrders.orders.length === 0) {
- throw new Error('No workerpool orders found for the specified workerpool');
-}
-
-// Execute the task
-const taskId = await iexec.order.matchOrders({
- requestorder: requestOrder,
- apporder: appOrders.orders[0].order,
- workerpoolorder: workerpoolOrders.orders[0].order,
-});
-```
-
-### Using SDK CLI
-
-```bash
-# Note: CLI doesn't support secrets directly for security reasons
-# Use the SDK for secret management
-
-# Alternative: Use environment variables (less secure)
-export IEXEC_SECRET_1="api-key-12345"
-export IEXEC_SECRET_2="database-password"
-iexec app run 0x456def... --protectedData 0x123abc...
-```
-
-### Using DataProtector
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Process protected data with secrets
-const result = await dataProtectorCore.processProtectedData({
- protectedData: '0x123abc...',
- app: '0x456def...',
- secrets: {
- 1: 'openai-api-key',
- 2: 'database-password',
- },
-});
-```
-
-## Method 4: Specifying File Paths in Protected Data
-
-When working with protected data that contains multiple files, you can specify
-which file to process.
-
-### Using DataProtector
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Process protected data with specific path
-const result = await dataProtectorCore.processProtectedData({
- protectedData: '0x123abc...',
- app: '0x456def...',
- path: 'data/input.csv',
-});
-
-// Get result with specific path
-const taskResult = await dataProtectorCore.getResultFromCompletedTask({
- taskId: '0x7ac398...',
- path: 'output/analysis.json',
-});
-```
-
-You can combine different types of inputs for complex executions.
-
-## How Secrets Work in iApp
-
-Inside the iApp, secrets are available as environment variables:
-
-```python
-# Python iApp example
-import os
-
-api_key = os.environ.get('IEXEC_SECRET_1') # 'api-key-12345'
-db_password = os.environ.get('IEXEC_SECRET_2') # 'database-password'
-```
-
-```javascript
-// JavaScript iApp example
-const apiKey = process.env.IEXEC_SECRET_1; // 'api-key-12345'
-const dbPassword = process.env.IEXEC_SECRET_2; // 'database-password'
-```
-
-## Next Steps
-
-Now that you understand how to add inputs to iApp executions:
-
-- Learn about
- [Using iApp with Protected Data](/guides/use-iapp/use-iapp-with-protected-data)
-- Explore
- [Different Ways to Execute](/guides/use-iapp/different-ways-to-execute) iApp
-- Check out our
- [How to Pay for Executions](/guides/use-iapp/how-to-pay-executions) guide
diff --git a/src/guides/use-iapp/different-ways-to-execute.md b/src/guides/use-iapp/different-ways-to-execute.md
deleted file mode 100644
index bd9f25dc..00000000
--- a/src/guides/use-iapp/different-ways-to-execute.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: Different Ways to Execute iApp
-description: Learn about various methods for executing iApp on the iExec network
----
-
-# β‘ Different Ways to Execute iApp
-
-There are multiple ways to execute iApp on the iExec network. This guide covers
-the basic execution methods. For advanced features like protected data,
-arguments, and input files, see the dedicated guides.
-
-::: tip ENS Addresses
-
-**ENS (Ethereum Name Service)** is a naming system for Ethereum addresses that
-allows you to use human-readable names instead of long hexadecimal addresses.
-For example, instead of using `0x1234567890abcdef...`, you can use
-`debug-v8-learn.main.pools.iexec.eth`.
-
-In the examples below, we use `debug-v8-learn.main.pools.iexec.eth` which is
-iExec's official debug workerpool ENS address. This workerpool is specifically
-designed for testing and development purposes on the Bellecour testnet.
-
-:::
-
-## Method 1: Using the iExec SDK Library
-
-The iExec SDK provides a modular JavaScript interface for executing iApp.
-
-```ts twoslash
-import { IExec, utils } from 'iexec';
-
-const ethProvider = utils.getSignerFromPrivateKey(
- 'bellecour', // blockchain node URL
- 'PRIVATE_KEY'
-);
-const iexec = new IExec({
- ethProvider,
-});
-// ---cut---
-// Create & Sign a request order
-const requestorderToSign = await iexec.order.createRequestorder({
- app: '0x456def...', // The iApp address
- category: 0,
-});
-const requestOrder = await iexec.order.signRequestorder(requestorderToSign);
-
-// Fetch app orders
-const appOrders = await iexec.orderbook.fetchAppOrderbook(
- '0x456def...' // Filter by specific app
-);
-if (appOrders.orders.length === 0) {
- throw new Error('No app orders found for the specified app');
-}
-
-// Fetch workerpool orders
-const workerpoolOrders = await iexec.orderbook.fetchWorkerpoolOrderbook({
- workerpool: '0xa5de76...', // Filter by specific workerpool
-});
-if (workerpoolOrders.orders.length === 0) {
- throw new Error('No workerpool orders found for the specified workerpool');
-}
-
-// Execute the task
-const taskId = await iexec.order.matchOrders({
- requestorder: requestOrder,
- apporder: appOrders.orders[0].order,
- workerpoolorder: workerpoolOrders.orders[0].order,
-});
-```
-
-## Method 2: Using the iExec CLI
-
-The iExec CLI is perfect for quick executions and automation scripts.
-
-```bash
-# Execute an iApp
-iexec app run 0x456def...
-```
-
-## Method 3: Using the iApp Generator CLI
-
-The iApp Generator CLI provides a streamlined way to execute iApp, especially
-for developers who have built their own iApp.
-
-> **Note**: For installation instructions, see the
-> [iApp Generator Getting Started guide](/references/iapp-generator/getting-started).
-
-### Basic Execution
-
-```bash
-# Execute a deployed iApp
-iapp run 0x456def...
-```
-
-### Testing Before Execution
-
-```bash
-# Test the iApp locally first
-iapp test
-```
-
-## When to Use Each Method
-
-- **iExec Library**: For JavaScript applications and web3 integration
-- **iExec CLI**: For quick testing and automation scripts
-- **iApp Generator CLI**: For developers who have built their own iApp
-
-## Next Steps
-
-- Learn how to
- [use iApp with protected data](/guides/use-iapp/use-iapp-with-protected-data)
-- Discover how to
- [add inputs to execution](/guides/use-iapp/add-inputs-to-execution)
-- Understand [how to pay for executions](/guides/use-iapp/how-to-pay-executions)
diff --git a/src/guides/use-iapp/getting-started.md b/src/guides/use-iapp/getting-started.md
index c6be7e09..f15444ec 100644
--- a/src/guides/use-iapp/getting-started.md
+++ b/src/guides/use-iapp/getting-started.md
@@ -8,34 +8,33 @@ description: Learn the basics of finding and executing iApp on the iExec network
Welcome to secure, privacy-preserving computation! This guide shows you how to
use iApp on the iExec confidential computing network.
-## Prerequisites
+### Prerequisites
-Before you begin, make sure you have:
+Before getting started, ensure that you have the following installed on your
+system:
-- A Web3 wallet (MetaMask, WalletConnect, etc.)
-- Some RLC tokens for paying computation fees (or access to free vouchers
- through learning programs) -
- [Learn about RLC tokens](/get-started/overview/rlc) and
- [how to bridge them](/get-started/tooling-and-explorers/bridge)
-- Basic understanding of blockchain transactions
-- iExec SDK installed
+\- [**Node.js**](https://nodejs.org/en/) version 18 or higher
+
+\- [**NPM**](https://docs.npmjs.com/) (Node.js package manager)
+
+### Installation
::: code-group
```sh [npm]
-npm install -g iexec
+npm install @iexec/dataprotector
```
```sh [yarn]
-yarn global add iexec
+yarn add @iexec/dataprotector
```
```sh [pnpm]
-pnpm add -g iexec
+pnpm add @iexec/dataprotector
```
```sh [bun]
-bun add -g iexec
+bun add @iexec/dataprotector
```
:::
@@ -65,31 +64,16 @@ orders:
When you execute an iApp, the system matches your request with available orders
from all three categories. For a deeper understanding of how orders work and how
-to manage them, see the
-[Build & Deploy guide](/guides/build-iapp/build-&-deploy) in the Build iApp
-section.
+to manage them, see the [Build & Test guide](/guides/build-iapp/build-&-test) in
+the Build iApp section.
## Detailed Guides
For step-by-step instructions, check out these guides:
-- **[Different Ways to Execute](/guides/use-iapp/different-ways-to-execute)** -
+- **[Run iApp without ProtectedData](/guides/use-iapp/run-iapp-without-ProtectedData)** -
iExec CLI, lib, and other execution methods
-- **[Use iApp with Protected Data](/guides/use-iapp/use-iapp-with-protected-data)** -
- Working with sensitive data securely
-- **[Add Inputs to Execution](/guides/use-iapp/add-inputs-to-execution)** - How
- to provide data and parameters to iApp
+- **[Run iApp with ProtectedData](/guides/use-iapp/run-iapp-with-ProtectedData)** -
+ How to provide data and parameters to iApp
- **[How to Pay for Executions](/guides/use-iapp/how-to-pay-executions)** -
Understanding costs and payment options
-
-## Quick Start
-
-Ready to jump in? Follow the execution guides for detailed instructions on how
-to use iApp.
-
-
diff --git a/src/guides/use-iapp/how-to-pay-executions.md b/src/guides/use-iapp/how-to-pay-executions.md
index e3d0fcbe..da98c5fa 100644
--- a/src/guides/use-iapp/how-to-pay-executions.md
+++ b/src/guides/use-iapp/how-to-pay-executions.md
@@ -73,19 +73,6 @@ const result = await dataProtectorCore.processProtectedData({
});
```
-### Using CLI with RLC
-
-```bash
-# Execute with RLC payment
-iexec app run 0x456def... --protectedData 0xa0c15e...
-
-# Check your balance
-iexec account show
-
-# Deposit RLC
-iexec account deposit 100
-```
-
## Method 2: Paying with Vouchers
Vouchers are pre-funded payment instruments that simplify the payment process
@@ -150,16 +137,6 @@ be used in combination with `useVoucher: true`.
:::
-#### CLI with Vouchers
-
-```bash
-# Use your own voucher
-iexec app run 0x456def... --protectedData 0xa0c15e... --useVoucher
-
-# Use someone else's voucher
-iexec app run 0x456def... --protectedData 0xa0c15e... --useVoucher --voucherOwner 0x5714eB...
-```
-
## Understanding Pricing
### Cost Components
@@ -263,35 +240,6 @@ const result = await dataProtectorCore.processProtectedData({
});
```
-### 4. Batch Operations
-
-Group multiple executions to optimize costs:
-
-```ts twoslash
-import { IExecDataProtectorCore, getWeb3Provider } from '@iexec/dataprotector';
-
-const web3Provider = getWeb3Provider('PRIVATE_KEY');
-const dataProtectorCore = new IExecDataProtectorCore(web3Provider);
-// ---cut---
-// Execute multiple tasks efficiently
-const tasks = [
- { protectedData: '0x123abc...', app: '0x456def...' },
- { protectedData: '0x124abc...', app: '0x456def...' },
-];
-
-const results = await Promise.all(
- tasks.map((task) =>
- dataProtectorCore.processProtectedData({
- ...task,
- dataMaxPrice: 5,
- appMaxPrice: 3,
- workerpoolMaxPrice: 2,
- useVoucher: true,
- })
- )
-);
-```
-
## Payment Troubleshooting
### Insufficient Balance
@@ -491,9 +439,8 @@ const executeWithPaymentRetry = async (params: any, maxRetries = 3) => {
Now that you understand payment methods:
- Learn about
- [Adding Inputs to Execution](/guides/use-iapp/add-inputs-to-execution)
-- Explore
- [Using iApp with Protected Data](/guides/use-iapp/use-iapp-with-protected-data)
+ [Run iApp with ProtectedData](/guides/use-iapp/run-iapp-with-ProtectedData)
+- Explore [Getting Started with iApp](/guides/use-iapp/getting-started)
- Review the pricing information above for detailed cost analysis