diff --git a/.vitepress/config.mts b/.vitepress/config.mts index c2fee0e6..3aa45736 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -18,7 +18,6 @@ export default defineConfig({ 'Build decentralized applications that combine ownership, privacy, and monetization.', cleanUrls: true, lastUpdated: true, - ignoreDeadLinks: true, vite: { plugins: [tailwindcss(), groupIconVitePlugin()], resolve: { @@ -99,11 +98,9 @@ export default defineConfig({ themeConfig: { // https://vitepress.dev/reference/default-theme-config nav: [ - { text: 'Get Started', link: '/overview/welcome' }, - { text: 'Protect Data', link: '/manage-data/what-is-protected-data' }, - { text: 'Build iApp', link: '/build-iapp/what-is-iapp' }, - { text: 'Use iApp', link: '/use-iapp/introduction' }, - { text: 'Protocol', link: '/protocol/sdk' }, + { text: 'Get Started', link: '/get-started/welcome' }, + { text: 'Guides', link: '/guides/build-iapp/' }, + { text: 'References', link: '/references/dataProtector' }, { component: 'ChainSelector', props: { diff --git a/.vitepress/sidebar.ts b/.vitepress/sidebar.ts index 88f4601c..e27784e4 100644 --- a/.vitepress/sidebar.ts +++ b/.vitepress/sidebar.ts @@ -2,49 +2,78 @@ import type { DefaultTheme } from 'vitepress'; export function getSidebar() { return { - '/overview/': [ + '/get-started/': [ { text: 'GET STARTED', items: [ - { text: '💡 Welcome', link: '/overview/welcome' }, + { text: '💡 Welcome', link: '/get-started/welcome' }, + { + text: '🛠️ Toolkit', + link: '/get-started/toolkit', + }, { text: '👋 Hello World', - link: '/overview/helloWorld', + link: '/get-started/helloWorld', + collapsed: true, items: [ { text: 'iExec Overview', - link: '/overview/helloWorld/1-overview', + link: '/get-started/helloWorld/1-overview', }, { text: 'Protect Data', - link: '/overview/helloWorld/2-protectData', + link: '/get-started/helloWorld/2-protectData', + }, + { + text: 'Build iApp', + link: '/get-started/helloWorld/3-buildIApp', }, - { text: 'Build iApp', link: '/overview/helloWorld/3-buildIApp' }, { text: 'Manage Data Access', - link: '/overview/helloWorld/4-manageDataAccess', + link: '/get-started/helloWorld/4-manageDataAccess', }, { text: 'Bonus Chapter !', - link: '/overview/helloWorld/5-bonusChapter', + link: '/get-started/helloWorld/5-bonusChapter', }, ], }, { text: '🚀 Quick Start', - link: '/overview/quick-start', + link: '/get-started/quick-start', }, { text: '📋 Use Cases', - link: '/overview/use-cases', + link: '/get-started/use-cases', }, { - text: '🪙 RLC Token', - link: '/overview/rlc', + text: '🤖 Develop with AI', + link: '/get-started/develop-with-ai', + }, + ], + }, + { + text: 'iExec OVERVIEW', + items: [ + { + text: '❓ What is iExec ?', + link: '/get-started/overview/what-is-iexec', }, { - text: '🤖 Develop with AI', - link: '/overview/develop-with-ai', + text: '❓  What is Protected Data ?', + link: '/get-started/overview/what-is-protected-data', + }, + { + text: '❓ What is an iApp ?', + link: '/get-started/overview/what-is-iapp', + }, + { + text: '❓ What is a Workerpool ?', + link: '/get-started/overview/what-is-workerpool', + }, + { + text: '🪙 RLC Token', + link: '/get-started/rlc', }, ], }, @@ -53,489 +82,489 @@ export function getSidebar() { items: [ { text: 'iExec Explorer', - link: '/overview/tooling-and-explorers/iexec-explorer', + link: '/get-started/tooling-and-explorers/iexec-explorer', }, { text: 'Builder Dashboard', - link: '/overview/tooling-and-explorers/builder-dashboard', + link: '/get-started/tooling-and-explorers/builder-dashboard', }, { text: 'RLC Bridge', - link: '/overview/tooling-and-explorers/bridge', + link: '/get-started/tooling-and-explorers/bridge', }, { text: 'Subgraph Explorer', - link: '/overview/tooling-and-explorers/subgraph-explorer', + link: '/get-started/tooling-and-explorers/subgraph-explorer', }, { text: 'Blockchain Explorer', - link: '/overview/tooling-and-explorers/blockchain-explorer', + link: '/get-started/tooling-and-explorers/blockchain-explorer', + }, + ], + }, + { + text: 'PROTOCOL', + items: [ + { + text: '🛡️ Proof of Contribution', + link: '/get-started/protocol/proof-of-contribution', + }, + { + text: '💸 Pay Per Task Model', + link: '/get-started/protocol/pay-per-task', + }, + { + text: '⚙️ Workers & Workerpools', + collapsed: true, + items: [ + { + text: '🚀 Worker Quick Start', + link: '/get-started/protocol/worker/quick-start', + }, + { + text: '🔒 Manage Workerpool Access', + link: '/get-started/protocol/worker/manage-access', + }, + ], }, ], }, ], - '/manage-data/': [ + '/guides/': [ { text: 'PROTECT AND MANAGE DATA', items: [ { - text: '❓  What is Protected Data?', - link: '/manage-data/what-is-protected-data', + text: 'Manage Access', + link: '/guides/manage-data/manage-access', + }, + { + text: 'Handle Schemas and Dataset Types', + link: '/guides/manage-data/handle-schemas-dataset-types', + }, + { + text: 'Monetize Protected Data', + link: '/guides/manage-data/monetize-protected-data', + }, + ], + }, + { + text: 'BUILD YOUR iAPP', + items: [ + { + text: 'Build and Deploy', + link: '/guides/build-iapp/build-&-deploy', + }, + { + text: 'Manage Access', + link: '/guides/build-iapp/manage-access', + }, + { + text: 'Inputs and Outputs', + link: '/guides/build-iapp/inputs-and-outputs', + }, + { + 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', + }, + ], + }, + { + text: 'USE AN iAPP', + items: [ + { + text: '📝 Introduction', + link: '/guides/use-iapp/introduction', + }, + { + text: '🚀 Getting Started', + link: '/guides/use-iapp/getting-started', + }, + { + text: 'Different Ways to Execute an iApp', + link: '/guides/use-iapp/different-ways-to-execute', + }, + { + text: 'Add Inputs to the Execution', + link: '/guides/use-iapp/add-inputs-to-execution', + }, + { + text: 'Use iApp with Protected Data', + link: '/guides/use-iapp/use-iapp-with-protected-data', + }, + { + text: 'Find iApps to Use', + link: '/guides/use-iapp/find-iapps', }, { - text: '📖 Guides', + text: 'How to Pay the Executions', + link: '/guides/use-iapp/how-to-pay-executions', + }, + { + text: '💰 How to Pay', + collapsed: true, items: [ { - text: 'Manage Access', - link: '/manage-data/guides/manage-access', + text: 'How to Pay for Web3Mail', + link: '/guides/use-iapp/how-to-pay/how-to-pay-for-web3mail', }, { - text: 'Handle Schemas and Dataset Types', - link: '/manage-data/guides/handle-schemas-dataset-types', + text: 'How to Pay for Web3Telegram', + link: '/guides/use-iapp/how-to-pay/how-to-pay-for-web3telegram', }, { - text: 'Monetize Protected Data', - link: '/manage-data/guides/monetize-protected-data', + text: 'Pricing Considerations', + link: '/guides/use-iapp/how-to-pay/pricing-considerations', + }, + { + text: 'Voucher', + link: '/guides/use-iapp/how-to-pay/voucher', }, ], }, + ], + }, + ], + '/references/': [ + { + text: '🔐 DataProtector', + link: '/references/dataProtector', + collapsed: true, + items: [ + { + text: 'Getting Started', + link: '/references/dataProtector/getting-started', + }, { - text: '🔐 DataProtector', - link: '/manage-data/dataProtector', + text: 'DataProtector Core', + link: '/references/dataProtector/dataProtectorCore', + collapsed: true, items: [ { - text: 'Getting Started', - link: '/manage-data/dataProtector/getting-started', + text: 'protectData', + link: '/references/dataProtector/dataProtectorCore/protectData', + }, + { + text: 'getProtectedData', + link: '/references/dataProtector/dataProtectorCore/getProtectedData', + }, + { + text: 'transferOwnership', + link: '/references/dataProtector/dataProtectorCore/transferOwnership', + }, + { + text: 'grantAccess', + link: '/references/dataProtector/dataProtectorCore/grantAccess', + }, + { + text: 'getGrantedAccess', + link: '/references/dataProtector/dataProtectorCore/getGrantedAccess', + }, + { + text: 'revokeOneAccess', + link: '/references/dataProtector/dataProtectorCore/revokeOneAccess', + }, + { + text: 'revokeAllAccess', + link: '/references/dataProtector/dataProtectorCore/revokeAllAccess', + }, + { + text: 'processProtectedData', + link: '/references/dataProtector/dataProtectorCore/processProtectedData', }, { - text: 'DataProtector Core', - link: '/manage-data/dataProtector/dataProtectorCore', + text: 'getResultFromCompletedTask', + link: '/references/dataProtector/dataProtectorCore/getResultFromCompletedTask', + }, + ], + }, + { + text: 'DataProtector Sharing', + link: '/references/dataProtector/dataProtectorSharing', + collapsed: true, + items: [ + { + text: 'Collection', + link: '/references/dataProtector/dataProtectorSharing/collection', collapsed: true, items: [ { - text: 'protectData', - link: '/manage-data/dataProtector/dataProtectorCore/protectData', + text: 'createCollection', + link: '/references/dataProtector/dataProtectorSharing/collection/createCollection', }, { - text: 'getProtectedData', - link: '/manage-data/dataProtector/dataProtectorCore/getProtectedData', + text: 'removeCollection', + link: '/references/dataProtector/dataProtectorSharing/collection/removeCollection', }, { - text: 'transferOwnership', - link: '/manage-data/dataProtector/dataProtectorCore/transferOwnership', + text: 'addToCollection', + link: '/references/dataProtector/dataProtectorSharing/collection/addToCollection', }, { - text: 'grantAccess', - link: '/manage-data/dataProtector/dataProtectorCore/grantAccess', - }, - { - text: 'getGrantedAccess', - link: '/manage-data/dataProtector/dataProtectorCore/getGrantedAccess', + text: 'removeProtectedDataFromCollection', + link: '/references/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection', }, + ], + }, + { + text: 'Renting', + link: '/references/dataProtector/dataProtectorSharing/renting', + collapsed: true, + items: [ { - text: 'revokeOneAccess', - link: '/manage-data/dataProtector/dataProtectorCore/revokeOneAccess', + text: 'setProtectedDataToRenting', + link: '/references/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting', }, { - text: 'revokeAllAccess', - link: '/manage-data/dataProtector/dataProtectorCore/revokeAllAccess', + text: 'setProtectedDataRentingParams', + link: '/references/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams', }, { - text: 'processProtectedData', - link: '/manage-data/dataProtector/dataProtectorCore/processProtectedData', + text: 'rentProtectedData', + link: '/references/dataProtector/dataProtectorSharing/renting/rentProtectedData', }, { - text: 'getResultFromCompletedTask', - link: '/manage-data/dataProtector/dataProtectorCore/getResultFromCompletedTask', + text: 'removeProtectedDataFromRenting', + link: '/references/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting', }, ], }, { - text: 'DataProtector Sharing', - link: '/manage-data/dataProtector/dataProtectorSharing', + text: 'Selling', + link: '/references/dataProtector/dataProtectorSharing/selling', collapsed: true, items: [ { - text: 'Collection', - link: '/manage-data/dataProtector/dataProtectorSharing/collection', - collapsed: true, - items: [ - { - text: 'createCollection', - link: '/manage-data/dataProtector/dataProtectorSharing/collection/createCollection', - }, - { - text: 'removeCollection', - link: '/manage-data/dataProtector/dataProtectorSharing/collection/removeCollection', - }, - { - text: 'addToCollection', - link: '/manage-data/dataProtector/dataProtectorSharing/collection/addToCollection', - }, - { - text: 'removeProtectedDataFromCollection', - link: '/manage-data/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection', - }, - ], + text: 'setProtectedDataForSale', + link: '/references/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale', }, { - text: 'Renting', - link: '/manage-data/dataProtector/dataProtectorSharing/renting', - collapsed: true, - items: [ - { - text: 'setProtectedDataToRenting', - link: '/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting', - }, - { - text: 'setProtectedDataRentingParams', - link: '/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams', - }, - { - text: 'rentProtectedData', - link: '/manage-data/dataProtector/dataProtectorSharing/renting/rentProtectedData', - }, - { - text: 'removeProtectedDataFromRenting', - link: '/manage-data/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting', - }, - ], + text: 'buyProtectedData', + link: '/references/dataProtector/dataProtectorSharing/selling/buyProtectedData', }, { - text: 'Selling', - link: '/manage-data/dataProtector/dataProtectorSharing/selling', - collapsed: true, - items: [ - { - text: 'setProtectedDataForSale', - link: '/manage-data/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale', - }, - { - text: 'buyProtectedData', - link: '/manage-data/dataProtector/dataProtectorSharing/selling/buyProtectedData', - }, - { - text: 'removeProtectedDataForSale', - link: '/manage-data/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale', - }, - ], + text: 'removeProtectedDataForSale', + link: '/references/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale', }, + ], + }, + { + text: 'Subscription', + link: '/references/dataProtector/dataProtectorSharing/subscription', + collapsed: true, + items: [ { - text: 'Subscription', - link: '/manage-data/dataProtector/dataProtectorSharing/subscription', - collapsed: true, - items: [ - { - text: 'setProtectedDataToSubscription', - link: '/manage-data/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription', - }, - { - text: 'setSubscriptionParams', - link: '/manage-data/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams', - }, - { - text: 'subscribeToCollection', - link: '/manage-data/dataProtector/dataProtectorSharing/subscription/subscribeToCollection', - }, - { - text: 'removeProtectedDataFromSubscription', - link: '/manage-data/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription', - }, - ], + text: 'setProtectedDataToSubscription', + link: '/references/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription', }, { - text: 'Consume', - collapsed: true, - items: [ - { - text: 'consumeProtectedData', - link: '/manage-data/dataProtector/dataProtectorSharing/consume/consumeProtectedData', - }, - ], + text: 'setSubscriptionParams', + link: '/references/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams', }, { - text: 'Read Data', - collapsed: true, - items: [ - { - text: 'getProtectedDataInCollections', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections', - }, - { - text: 'getProtectedDataPricingParams', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams', - }, - { - text: 'getCollectionOwners', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getCollectionOwners', - }, - { - text: 'getCollectionsByOwner', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getCollectionsByOwner', - }, - { - text: 'getCollectionSubscriptions', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions', - }, - { - text: 'getRentals', - link: '/manage-data/dataProtector/dataProtectorSharing/read/getRentals', - }, - ], + text: 'subscribeToCollection', + link: '/references/dataProtector/dataProtectorSharing/subscription/subscribeToCollection', + }, + { + text: 'removeProtectedDataFromSubscription', + link: '/references/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription', }, ], }, { - text: 'Types', - link: '/manage-data/dataProtector/types', + text: 'Consume', + collapsed: true, + items: [ + { + text: 'consumeProtectedData', + link: '/references/dataProtector/dataProtectorSharing/consume/consumeProtectedData', + }, + ], }, { - text: 'Advanced', + text: 'Read Data', collapsed: true, items: [ { - text: 'Advanced Configuration', - link: '/manage-data/dataProtector/advanced/advanced-configuration', + text: 'getProtectedDataInCollections', + link: '/references/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections', + }, + { + text: 'getProtectedDataPricingParams', + link: '/references/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams', + }, + { + text: 'getCollectionOwners', + link: '/references/dataProtector/dataProtectorSharing/read/getCollectionOwners', }, { - text: 'Sharing smart contract', - link: '/manage-data/dataProtector/advanced/dps-smart-contract', + text: 'getCollectionsByOwner', + link: '/references/dataProtector/dataProtectorSharing/read/getCollectionsByOwner', }, { - text: 'Apps whitelist', - link: '/manage-data/dataProtector/advanced/apps-whitelist', - collapsed: true, - items: [ - { - text: 'createAddOnlyAppWhitelist', - link: '/manage-data/dataProtector/advanced/apps-whitelist/createAddOnlyAppWhitelist', - }, - { - text: 'addAppToAddOnlyAppWhitelist', - link: '/manage-data/dataProtector/advanced/apps-whitelist/addAppToAddOnlyAppWhitelist', - }, - { - text: 'getUserAddOnlyAppWhitelist', - link: '/manage-data/dataProtector/advanced/apps-whitelist/getUserAddOnlyAppWhitelist', - }, - ], + text: 'getCollectionSubscriptions', + link: '/references/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions', + }, + { + text: 'getRentals', + link: '/references/dataProtector/dataProtectorSharing/read/getRentals', }, ], }, - { - text: 'Migrate from v1 to v2', - link: '/manage-data/dataProtector/migrate-from-v1', - }, ], }, - ], - }, - ], - '/build-iapp/': [ - { - text: 'BUILD YOUR iAPP', - items: [ - { text: '❓ What is an iApp?', link: '/build-iapp/what-is-iapp' }, { - text: '📖 Guides', - items: [ - { - text: 'Build and Deploy', - link: '/build-iapp/guides/build-&-deploy', - }, - { - text: 'Manage Access', - link: '/build-iapp/guides/manage-access', - }, - { - text: 'Inputs and Outputs', - link: '/build-iapp/guides/inputs-and-outputs', - }, - { - text: 'Using TDX', - link: '/build-iapp/guides/using-tdx', - }, - { - text: 'How to Get and Decrypt Results', - link: '/build-iapp/guides/how-to-get-and-decrypt-results', - }, - { - text: 'Debugging', - link: '/build-iapp/guides/debugging', - }, - ], + text: 'Types', + link: '/references/dataProtector/types', }, { - text: '🤖 iApp Generator', - link: '/build-iapp/iapp-generator', + text: 'Advanced', + collapsed: true, items: [ { - text: 'Getting Started', - link: '/build-iapp/iapp-generator/getting-started', + text: 'Advanced Configuration', + link: '/references/dataProtector/advanced/advanced-configuration', }, { - text: 'Building your iApp', - link: '/build-iapp/iapp-generator/building-your-iexec-app', + text: 'Sharing smart contract', + link: '/references/dataProtector/advanced/dps-smart-contract', }, { - text: 'Deserialize ProtectedData', - link: '/build-iapp/iapp-generator/deserializer', + text: 'Apps whitelist', + link: '/references/dataProtector/advanced/apps-whitelist', collapsed: true, items: [ { - text: 'getValue', - link: '/build-iapp/iapp-generator/deserializer/getValue', + text: 'createAddOnlyAppWhitelist', + link: '/references/dataProtector/advanced/apps-whitelist/createAddOnlyAppWhitelist', + }, + { + text: 'addAppToAddOnlyAppWhitelist', + link: '/references/dataProtector/advanced/apps-whitelist/addAppToAddOnlyAppWhitelist', + }, + { + text: 'getUserAddOnlyAppWhitelist', + link: '/references/dataProtector/advanced/apps-whitelist/getUserAddOnlyAppWhitelist', }, ], }, ], }, + { + text: 'Migrate from v1 to v2', + link: '/references/dataProtector/migrate-from-v1', + }, ], }, - ], - '/use-iapp/': [ { - text: 'USE AN iAPP', + text: '🤖 iApp Generator', + link: '/references/iapp-generator', items: [ - { text: '📝 Introduction', link: '/use-iapp/introduction' }, - { text: '🚀 Getting Started', link: '/use-iapp/getting-started' }, { - text: '📖 Guides', - items: [ - { - text: 'Different Ways to Execute an iApp', - link: '/use-iapp/guides/different-ways-to-execute', - }, - { - text: 'Add Inputs to the Execution', - link: '/use-iapp/guides/add-inputs-to-execution', - }, - { - text: 'Use iApp with Protected Data', - link: '/use-iapp/guides/use-iapp-with-protected-data', - }, - { - text: 'Find iApps to Use', - link: '/use-iapp/guides/find-iapps', - }, - { - text: 'How to Pay the Executions', - link: '/use-iapp/guides/how-to-pay-executions', - }, - ], + text: 'Getting Started', + link: '/references/iapp-generator/getting-started', }, { - text: '💰 How to Pay', + text: 'Building your iApp', + link: '/references/iapp-generator/building-your-iexec-app', + }, + { + text: 'Deserialize ProtectedData', + link: '/references/iapp-generator/deserializer', + collapsed: true, items: [ { - text: 'How to Pay for Web3Mail', - link: '/use-iapp/how-to-pay/how-to-pay-for-web3mail', - }, - { - text: 'How to Pay for Web3Telegram', - link: '/use-iapp/how-to-pay/how-to-pay-for-web3telegram', - }, - { - text: 'Pricing Considerations', - link: '/use-iapp/how-to-pay/pricing-considerations', - }, - { - text: 'Voucher', - link: '/use-iapp/how-to-pay/voucher', + text: 'getValue', + link: '/references/iapp-generator/deserializer/getValue', }, ], }, + ], + }, + { + text: '✉ Web3Mail', + link: '/references/web3mail', + items: [ + { + text: 'Getting Started', + link: '/references/web3mail/getting-started', + }, { - text: '✉ Web3Mail', - link: '/use-iapp/web3mail', + text: 'Methods', collapsed: true, items: [ { - text: 'Getting Started', - link: '/use-iapp/web3mail/getting-started', + text: 'fetchMyContacts', + link: '/references/web3mail/methods/fetchMyContacts', }, { - text: 'Methods', - collapsed: true, - items: [ - { - text: 'fetchMyContacts', - link: '/use-iapp/web3mail/methods/fetchMyContacts', - }, - { - text: 'fetchUserContacts', - link: '/use-iapp/web3mail/methods/fetchUserContacts', - }, - { - text: 'sendEmail', - link: '/use-iapp/web3mail/methods/sendEmail', - }, - ], + text: 'fetchUserContacts', + link: '/references/web3mail/methods/fetchUserContacts', }, { - text: 'Advanced Configuration', - link: '/use-iapp/web3mail/advanced-configuration', + text: 'sendEmail', + link: '/references/web3mail/methods/sendEmail', }, ], }, { - text: '💬 Web3Telegram', - link: '/use-iapp/web3telegram', + text: 'Advanced Configuration', + link: '/references/web3mail/advanced-configuration', + }, + ], + }, + { + text: '💬 Web3Telegram', + link: '/references/web3telegram', + items: [ + { + text: 'Getting Started', + link: '/references/web3telegram/getting-started', + }, + { + text: 'Methods', collapsed: true, items: [ { - text: 'Getting Started', - link: '/use-iapp/web3telegram/getting-started', - }, - { - text: 'Methods', - collapsed: true, - items: [ - { - text: 'fetchMyContacts', - link: '/use-iapp/web3telegram/methods/fetchMyContacts', - }, - { - text: 'fetchUserContacts', - link: '/use-iapp/web3telegram/methods/fetchUserContacts', - }, - { - text: 'sendTelegram', - link: '/use-iapp/web3telegram/methods/sendTelegram', - }, - ], + text: 'fetchMyContacts', + link: '/references/web3telegram/methods/fetchMyContacts', }, { - text: 'Integration Guide', - link: '/use-iapp/web3telegram/integration-guide', + text: 'fetchUserContacts', + link: '/references/web3telegram/methods/fetchUserContacts', }, { - text: 'Advanced Configuration', - link: '/use-iapp/web3telegram/advanced-configuration', + text: 'sendTelegram', + link: '/references/web3telegram/methods/sendTelegram', }, ], }, - ], - }, - ], - '/protocol/': [ - { - text: 'PROTOCOL', - items: [ - { - text: '🔧  iExec SDK', - link: '/protocol/sdk', - }, { - text: '⚙️  Workers & Workerpools', - link: '/protocol/workers', + text: 'Integration Guide', + link: '/references/web3telegram/integration-guide', }, { - text: '📖  Glossary', - link: '/protocol/glossary', + text: 'Advanced Configuration', + link: '/references/web3telegram/advanced-configuration', }, ], }, + { + text: '🔧 iExec SDK', + link: '/references/sdk', + }, + { + text: '�📖 Glossary', + link: '/references/glossary', + }, ], } satisfies DefaultTheme.Sidebar; } diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue index a1a43b4c..37d777a9 100644 --- a/.vitepress/theme/Layout.vue +++ b/.vitepress/theme/Layout.vue @@ -1,6 +1,6 @@ diff --git a/README.md b/README.md index ea55c9b0..96b44dc9 100644 --- a/README.md +++ b/README.md @@ -168,3 +168,8 @@ Fork this repository and ensure you're working on the `main` branch: the UI + SRLC/RLC on account section feature of the protocol - Update or add design illustrations based on the new design system - Check how to pay guide to update with the launch on Arbitrum (RLC vs xRLC) +- framework AI supporté TDX vs SGX +- check glossary +- migrate github SDK doc here +- migrate pay-per-task page into a guide +- check pages (introduction & getting-started) for use-iapp guide diff --git a/package-lock.json b/package-lock.json index fabb7040..e84543e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,10 @@ "name": "iexec-documentation", "version": "0.0.0", "dependencies": { - "@iexec/dataprotector": "^2.0.0-beta.17", + "@iexec/dataprotector": "^2.0.0-beta.19", "@iexec/dataprotector-deserializer": "^0.1.1", - "@iexec/web3mail": "^1.2.2", - "@iexec/web3telegram": "^0.1.0-alpha.1", + "@iexec/web3mail": "^1.5.0", + "@iexec/web3telegram": "^0.1.0-alpha.4", "@reown/appkit": "^1.7.17", "@reown/appkit-adapter-wagmi": "^1.7.17", "@tailwindcss/vite": "^4.1.11", @@ -761,7 +761,9 @@ } }, "node_modules/@iexec/dataprotector": { - "version": "2.0.0-beta.17", + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@iexec/dataprotector/-/dataprotector-2.0.0-beta.19.tgz", + "integrity": "sha512-nKfM8H2AGFPmSHt96FhNSOIctqRWyQt34zh9chVeI7PSy6TVFQMnEV4rj1ce+O8yFO9TM/8YXxu+V2izBO00WQ==", "license": "Apache-2.0", "dependencies": { "@ethersproject/bytes": "^5.7.0", @@ -773,7 +775,7 @@ "debug": "^4.3.4", "ethers": "^6.13.2", "graphql-request": "^6.0.0", - "iexec": "^8.16.0", + "iexec": "^8.18.0", "jszip": "^3.7.1", "kubo-rpc-client": "^4.1.1", "magic-bytes.js": "^1.0.15", @@ -783,6 +785,8 @@ }, "node_modules/@iexec/dataprotector-deserializer": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@iexec/dataprotector-deserializer/-/dataprotector-deserializer-0.1.1.tgz", + "integrity": "sha512-CSz1JWnslm2X3gjL1cx/qqovnmvJSFWDyJMw0ZGvqnYnNatgIqHn+Aky2iO4K0HsArfqmgV3ySIpdPfu/N2M0w==", "license": "Apache-2.0", "dependencies": { "borsh": "^2.0.0", @@ -846,7 +850,9 @@ } }, "node_modules/@iexec/web3mail": { - "version": "1.2.2", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@iexec/web3mail/-/web3mail-1.5.0.tgz", + "integrity": "sha512-ohgPocAidWreTOchamwMiuwIt0Nns290vS/KbcLbhOB4ZUDtQGS8V5lES3s9WUZjMvf+bWByN4RQdoaNhgIPAw==", "license": "Apache-2.0", "dependencies": { "@ethersproject/bytes": "^5.7.0", @@ -854,13 +860,15 @@ "buffer": "^6.0.3", "ethers": "^6.13.2", "graphql-request": "^6.1.0", - "iexec": "^8.13.1", + "iexec": "^8.18.0", "kubo-rpc-client": "^4.1.1", "yup": "^1.1.1" } }, "node_modules/@iexec/web3telegram": { - "version": "0.1.0-alpha.1", + "version": "0.1.0-alpha.4", + "resolved": "https://registry.npmjs.org/@iexec/web3telegram/-/web3telegram-0.1.0-alpha.4.tgz", + "integrity": "sha512-JYWjLpV7Ufi8wjlHlwCOYnjHf1oRGh9GycfKuhIq2TZDK4JrEG/tUytMagakn3C9T0UOByrM9DM/hMMoxVcG6A==", "license": "Apache-2.0", "dependencies": { "@ethersproject/bytes": "^5.7.0", @@ -868,7 +876,7 @@ "buffer": "^6.0.3", "ethers": "^6.8.1", "graphql-request": "^6.1.0", - "iexec": "^8.13.1", + "iexec": "^8.18.0", "kubo-rpc-client": "^4.1.3", "yup": "^1.1.1" } @@ -7962,7 +7970,9 @@ "license": "BSD-3-Clause" }, "node_modules/iexec": { - "version": "8.17.0", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/iexec/-/iexec-8.18.0.tgz", + "integrity": "sha512-lj2La67p0IKyCHhpV4F2SZD7kmE1AFhGmD26jf8si7/sTelrXun3wNTun6WAOEO9uMi49J0AlA6MxUNBxuCflg==", "license": "Apache-2.0", "dependencies": { "@ensdomains/ens-contracts": "^1.2.5", diff --git a/package.json b/package.json index e805e9b9..10d5c266 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,10 @@ "format": "prettier --ignore-path .gitignore --write ." }, "dependencies": { - "@iexec/dataprotector": "^2.0.0-beta.17", + "@iexec/dataprotector": "^2.0.0-beta.19", "@iexec/dataprotector-deserializer": "^0.1.1", - "@iexec/web3mail": "^1.2.2", - "@iexec/web3telegram": "^0.1.0-alpha.1", + "@iexec/web3mail": "^1.5.0", + "@iexec/web3telegram": "^0.1.0-alpha.4", "@reown/appkit": "^1.7.17", "@reown/appkit-adapter-wagmi": "^1.7.17", "@tailwindcss/vite": "^4.1.11", diff --git a/src/build-iapp/guides/build-&-deploy.md b/src/build-iapp/guides/build-&-deploy.md index b5106cba..e69de29b 100644 --- a/src/build-iapp/guides/build-&-deploy.md +++ b/src/build-iapp/guides/build-&-deploy.md @@ -1,362 +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 - -iApps (iExec Applications) are decentralized applications that run on the iExec -network. They leverage 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 iApps that connect to TEEs in minutes. -- **Check and deploy iApps 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 iApps 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/components/ChainSelector.vue b/src/components/ChainSelector.vue index fde4a4ea..1a903718 100644 --- a/src/components/ChainSelector.vue +++ b/src/components/ChainSelector.vue @@ -68,8 +68,26 @@ const userStore = useUserStore(); // Data const supportedChains = getSupportedChains(); +// Default initialization: check first if wallet is connected +if (!userStore.chainId) { + if (chainId.value) { + // If wallet is connected, use its chain + const walletChain = getChainById(chainId.value); + if (walletChain) { + userStore.setSelectedChain(walletChain); + } + } else { + // Otherwise, use Bellecour as default + const defaultChain = getChainById(0x86); // Bellecour + if (defaultChain) { + userStore.setSelectedChain(defaultChain); + } + } +} + // Computed const selectedChain = computed(() => { + // Priority: 1. Connected wallet chain, 2. Selected chain in store const currentChainId = chainId.value || userStore.chainId; return currentChainId ? getChainById(currentChainId) : undefined; }); @@ -91,6 +109,7 @@ const selectedChainId = computed({ }, }); +// Watch to synchronize store with wallet chain watch(chainId, (newChainId) => { if (newChainId) { const chain = getChainById(newChainId); diff --git a/src/overview/develop-with-ai.md b/src/get-started/develop-with-ai.md similarity index 100% rename from src/overview/develop-with-ai.md rename to src/get-started/develop-with-ai.md diff --git a/src/overview/helloWorld.md b/src/get-started/helloWorld.md similarity index 94% rename from src/overview/helloWorld.md rename to src/get-started/helloWorld.md index 24fe8e42..4b06eb3b 100644 --- a/src/overview/helloWorld.md +++ b/src/get-started/helloWorld.md @@ -6,13 +6,25 @@ description: --- # 👋 Welcome to iExec > Reading time 🕒 2 mins +
+
+ 🌐 +

Select Your Network

+
+
+ Network: + +
+
+

Start Your Web3 Privacy Journey

And learn how to build Privacy-preserving decentralized applications (dApps) with iExec in this interactive guide.

diff --git a/src/overview/helloWorld/1-overview.md b/src/get-started/helloWorld/1-overview.md similarity index 98% rename from src/overview/helloWorld/1-overview.md rename to src/get-started/helloWorld/1-overview.md index 73eaaddc..d416ccc7 100644 --- a/src/overview/helloWorld/1-overview.md +++ b/src/get-started/helloWorld/1-overview.md @@ -85,7 +85,7 @@ Computing technologies. iExec combines three fundamental elements that work together seamlessly: -#### 1. Protect Data with our Devtool [DataProtector](../../manage-data/dataProtector/getting-started) +#### 1. Protect Data with our Devtool [DataProtector](/references/dataProtector/getting-started) - Encrypt your sensitive data and store it securely on Arweave or IPFS - Only you control who can access it and when diff --git a/src/overview/helloWorld/2-protectData.md b/src/get-started/helloWorld/2-protectData.md similarity index 94% rename from src/overview/helloWorld/2-protectData.md rename to src/get-started/helloWorld/2-protectData.md index af4b0ae8..b7e7903d 100644 --- a/src/overview/helloWorld/2-protectData.md +++ b/src/get-started/helloWorld/2-protectData.md @@ -45,10 +45,6 @@ their dApps with these key features: Features an SDK for easy integration into your DApp, enhancing functionality and user experience. -
-

DataProtector interacts with iExec's Bellecour sidechain, which is gasless, meaning you can use it completely free without needing any tokens!

-
- ## 🧩 Let's Create Protected Data diff --git a/src/overview/helloWorld/3-buildIApp.md b/src/get-started/helloWorld/3-buildIApp.md similarity index 53% rename from src/overview/helloWorld/3-buildIApp.md rename to src/get-started/helloWorld/3-buildIApp.md index d64bb485..849e9c17 100644 --- a/src/overview/helloWorld/3-buildIApp.md +++ b/src/get-started/helloWorld/3-buildIApp.md @@ -9,13 +9,9 @@ description: > Reading time 🕒 10 mins - -

Time to build!

-

Let's build an iApp that can process protected data in a secure environment using the iExec iApp generator tool. This tool helps you create, test and deploy iApps with just a few commands.

+

Let's build an iApp that can process protected data in a secure environment using the iExec iApp generator tool. This tool helps you create, test and deploy iApps with just a few commands.

If you wanna explore and deep dive in the CLI. You can check the @@ -63,23 +59,23 @@ Here are some popular use cases: Send privacy-preserving emails to registered Ethereum account holders without knowing or storing their email addresses. [Github](https://github.com/iExecBlockchainComputing/web3mail-sdk/tree/main/dapp) -| [Documentation](../../use-iapp/web3mail) +| [Documentation](/references/web3mail) ### 💬 Web3 Telegram Send privacy-preserving Telegram messages without knowing or storing their Telegram handles. [Github](https://github.com/iExecBlockchainComputing/web3telegram-sdk/tree/main/dapp) -| [Documentation](../../use-iapp/web3telegram) +| [Documentation](/references/web3telegram) ### 🌐 Content Delivery Transfer, sell or rent protected content to authorized users. [Github](https://github.com/iExecBlockchainComputing/dataprotector-sdk/tree/main/packages/protected-data-delivery-dapp) -| [Documentation](../../manage-data/dataProtector/dataProtectorSharing) +| [Documentation](/references/dataProtector/dataProtectorSharing)
-

These are just a few examples, the possibilities are endless. Want to explore iApp Generator? Check out our documentation and see what you can build!

+

These are just a few examples, the possibilities are endless. Want to explore iApp Generator? Check out our documentation and see what you can build!

## 💾 Installation (Win / Mac / Linux) @@ -130,19 +126,53 @@ iapp init You will be prompted with the following message: -```txt - ___ _ ____ ____ - |_ _| / \ | _ \| _ \ - | | / _ \ | |_) | |_) | - | | / ___ \| __/| __/ - |___/_/ \_\_| |_| - -✔ What's your project name? (A folder with this name will be created) … hello-world -✔ Which language do you want to use? › JavaScript -? What kind of project do you want to init? › - Use arrow-keys. Return to submit. -❯ Hello World - iapp quick start - advanced -``` +
@@ -151,10 +181,6 @@ You will be prompted with the following message:
-```txt -? What's your project name? (A folder with this name will be created) ... -``` -
2 @@ -162,12 +188,6 @@ You will be prompted with the following message:
-```txt -? Which language do you want to use? › - Use arrow-keys. Return to submit. -❯ JavaScript - Python -``` -
3 @@ -175,22 +195,10 @@ You will be prompted with the following message:
-```txt -? What kind of project do you want to init? › - Use arrow-keys. Return to submit. -❯ Hello World - iapp quick start - advanced -``` -

We recommend selecting "Hello World" to quickly discover how iApp works! use advanced only if you are familiar with iExec.

-```txt -✔ [Chosen language] app setup complete. -✔ Generated ethereum wallet (0xD4A28d.........................) - -``` - - An iApp project is setup with the selected language - An ethereum wallet has been created (we use it to sign the iApp creation onchain) @@ -199,26 +207,87 @@ You will be prompted with the following message: ## 🧪 Test your iApp -To test your iApp, run `iapp test` command - -```sh -iapp test -``` - -It uses your local docker to build and execute the app. +To test your iApp, run the `iapp test` command. This will build a Docker image +and run your application locally to simulate the TEE environment. You'll see the +following steps: + + + +The `iapp test` command uses your local Docker to build and execute the app, +simulating how it will run in the iExec network's TEE environment.
-

- If you have Error: Docker daemon is not accessible Make sure Docker is installed and running.

-
-

- If you have Error: Failed to locate iApp project root error: Ensure you are in your project folder before proceeding.

+

Common Issues:

+

- If you get Error: Docker daemon is not accessible: Make sure Docker is installed and running.

+

- If you get Error: Failed to locate iApp project root: Ensure you are in your project folder before proceeding.

-You can see the output of the computation by saying yes to the question: - -```txt -? Would you like to see the result? (View ./output/) (Y/n) -``` - ### 🧩 Using Arguments You can pass arguments to your iApp using the `--args` option. This allows you @@ -272,12 +341,33 @@ Deploy your iApp on the iExec protocol.
-Once you have your token, you can deploy your iApp using the following command: - -```sh -# You need your username and the access token (it can take a few minutes to deploy) -iapp deploy -``` +Once you have your token, you can deploy your iApp. + + + +

📝 Make sure to save your iApp address after deployment - you'll need it later!

@@ -322,3 +412,173 @@ protocol documentation [here](https://protocol.docs.iex.ec/).

Next up: Alice will learn how to authorize the iApp and Bob to access and use her protected data! 🚀

+ + diff --git a/src/overview/helloWorld/4-manageDataAccess.md b/src/get-started/helloWorld/4-manageDataAccess.md similarity index 98% rename from src/overview/helloWorld/4-manageDataAccess.md rename to src/get-started/helloWorld/4-manageDataAccess.md index 19e87dc8..7addca54 100644 --- a/src/overview/helloWorld/4-manageDataAccess.md +++ b/src/get-started/helloWorld/4-manageDataAccess.md @@ -115,7 +115,7 @@ Want to see it in action? Check out our - Track your earnings For more technical details, see the -[DataProtector Sharing](../../manage-data/dataProtector/dataProtectorSharing) +[DataProtector Sharing](/references/dataProtector/dataProtectorSharing) documentation.
diff --git a/src/overview/helloWorld/5-bonusChapter.md b/src/get-started/helloWorld/5-bonusChapter.md similarity index 89% rename from src/overview/helloWorld/5-bonusChapter.md rename to src/get-started/helloWorld/5-bonusChapter.md index 1a7d4929..1c04bd22 100644 --- a/src/overview/helloWorld/5-bonusChapter.md +++ b/src/get-started/helloWorld/5-bonusChapter.md @@ -5,11 +5,6 @@ description: Hello World tutorial series. --- - - # 🎉 Bonus Chapter > Reading time 🕒 4 mins @@ -37,7 +32,8 @@ import Button from '../../components/ui/Button.vue';

Need help setting up or got some questions? Join our Discord Community for support!

-## 🎁 Claim your Voucher + + + diff --git a/src/build-iapp/what-is-iapp.md b/src/get-started/overview/what-is-iapp.md similarity index 58% rename from src/build-iapp/what-is-iapp.md rename to src/get-started/overview/what-is-iapp.md index fc1f23f9..06f051fe 100644 --- a/src/build-iapp/what-is-iapp.md +++ b/src/get-started/overview/what-is-iapp.md @@ -7,7 +7,7 @@ description: Privacy-first applications that run on decentralized infrastructure An iExec Application (iApp) is your regular application code (Python script, AI model, data processor, ...) that can securely process protected data (created by -[DataProtector](/manage-data/dataProtector)) inside a confidential computing +[DataProtector](/references/dataProtector)) inside a confidential computing environment called TEE (a Trusted Execution Environment). ## Why iApps Matter ? @@ -99,104 +99,63 @@ guarantees** that privacy is preserved within the TEE execution environment. ## Use Cases -
-
-
- 📧 -

Private Communication

-
-

Users send emails, notifications, or messages using their protected contact lists without exposing recipient information.

+
+
+

🏥 Healthcare

+

Process medical data for AI diagnosis without exposing patient information

- -
-
- 🔮 -

Trustworthy Oracles

-
-

Users contribute real data to oracles while keeping their private information confidential.

+
+

💰 Finance

+

Analyze financial data for credit scoring while maintaining privacy

- -
-
- 🤖 -

Personal AI Assistants

-
-

Users let AI models perform actions based on their private data - trading, scheduling, recommendations...

+
+

🎬 Media

+

Content recommendation engines that don't track user behavior

- -
-
- -

Automated Actions

-
-

Users let AI models perform actions based on their private data - trading, scheduling, recommendations...

+
+

🔬 Research

+

Collaborative research on sensitive datasets across institutions

-## ❓ Frequently Asked Questions - -::: details 📦 What can I build with iApps? - -Anything that runs in Docker! AI models, data processing scripts, web scrapers, -image processing, financial calculations, etc. If it runs in a container, it can -be an iApp. - -::: - -::: details ⚡How fast are iApps? - -Initial task scheduling takes a few seconds (depending on the resources the -worker download, congestion etc), then your code runs at normal speed depending -on complexity. - -::: +## Getting Started -::: details 🛡️ Are iApps really secure? - -Yes! Code runs in Intel SGX or TDX secure enclaves. Even the worker running your -iApp can't see what's happening inside the enclave. +
+

Time to build!

+

Let's build an iApp that can process protected data in a secure environment using the iExec iApp generator tool. This tool helps you create, test and deploy iApps with just a few commands.

+
-::: +### Quick Start Path -::: details 🚀 How do I deploy my first iApp? +1. **Protect your data** with [DataProtector](/references/dataProtector) +2. **Build your iApp** using the [iApp Generator](/references/iapp-generator) +3. **Deploy and test** your application +4. **Process protected data** securely -Try our [Hello World](/overview/helloWorld) for a quick start, or check the -[iApp Generator](/build-iapp/iapp-generator) section for detailed instructions. +### What You'll Learn -::: +- How to create a Docker container for your application +- How to handle inputs and outputs securely +- How to deploy to the iExec network +- How to process protected data in TEE environments -::: details 🔧 What programming languages are supported? +
+

These are just a few examples, the possibilities are endless. Want to explore iApp Generator? Check out our documentation and see what you can build!

+
-iApps can be built in any language that runs in Docker (Python, JavaScript, R, -Java, Go, etc.). However, **iApp Generator** currently supports only Python and -Node.js for simplified development. +## Technical Requirements -::: +- **Docker**: Your application must be containerized +- **Input/Output**: Define clear input and output schemas +- **TEE Compatibility**: Ensure your code runs in secure enclaves +- **Network Access**: Configure any external API calls or dependencies ## Next Steps -
- -
-
-
📚
-
- Learn More - iApp Generator: - Complete DataProtector Documentation -
-
-
-
🚀
-
- Getting Started - deploy your first iApp: - DataProtector Quick Start Guide -
-
-
- -
- ---- +Ready to build your first privacy-preserving application? Start with our +[Hello World tutorial](/get-started/helloWorld) or dive into the +[iApp Generator documentation](/references/iapp-generator). -**TL;DR**: iApps = Your code + Secure execution + User privacy + Verifiable -results. Cloud computing, but nobody can spy on your stuff. 🔒 +For more technical details, see the +[DataProtector Sharing](/references/dataProtector/dataProtectorSharing) +documentation. diff --git a/src/get-started/overview/what-is-iexec.md b/src/get-started/overview/what-is-iexec.md new file mode 100644 index 00000000..11f43eb5 --- /dev/null +++ b/src/get-started/overview/what-is-iexec.md @@ -0,0 +1,57 @@ +--- +title: What is iExec? +description: + Learn about iExec, the decentralized computing platform that enables + privacy-preserving applications +--- + +# What is iExec? + +iExec is a **decentralized computing platform** that enables developers to build +and deploy privacy-preserving applications using confidential computing +technology. + +## 🎯 **Mission** + +iExec's mission is to democratize access to **confidential computing** by +providing a decentralized infrastructure that combines: + +- **🔐 Privacy Protection** - Data remains encrypted during computation +- **⚡ Scalable Computing** - Access to distributed computing resources +- **💰 Monetization** - Fair compensation for computing providers +- **🌐 Decentralization** - No single point of failure or control + +## 🏗️ **Core Architecture** + +### **Three Main Components:** + +1. **🤖 iApps (iExec Applications)** + - Confidential computing applications + - Run in secure enclaves (TEEs) + - Process encrypted data without exposing it + +2. **🔐 DataProtector** + - End-to-end encryption solution + - Manage data access and sharing + - Monetize protected datasets + +3. **⚙️ Worker Network** + - Distributed computing providers + - Execute iApps securely + - Earn RLC tokens for contributions + +## 🚀 **Key Features** + +- **TEE (Trusted Execution Environment)** support +- **Zero-knowledge computation** +- **Decentralized marketplace** for computing resources +- **RLC token** for payments and governance +- **Cross-chain compatibility** + +## 🔗 **Get Started** + +Ready to explore iExec? Check out: + +- [What is Protected Data?](/get-started/overview/what-is-protected-data) +- [What is an iApp?](/get-started/overview/what-is-iapp) +- [Hello World Tutorial](/get-started/helloWorld) diff --git a/src/manage-data/what-is-protected-data.md b/src/get-started/overview/what-is-protected-data.md similarity index 94% rename from src/manage-data/what-is-protected-data.md rename to src/get-started/overview/what-is-protected-data.md index ea69bb91..b77571da 100644 --- a/src/manage-data/what-is-protected-data.md +++ b/src/get-started/overview/what-is-protected-data.md @@ -196,13 +196,13 @@ monetize their data within the Web3 ecosystem.
🚀
diff --git a/src/get-started/overview/what-is-workerpool.md b/src/get-started/overview/what-is-workerpool.md new file mode 100644 index 00000000..3ef69aa9 --- /dev/null +++ b/src/get-started/overview/what-is-workerpool.md @@ -0,0 +1,11 @@ +--- +title: What is a Workerpool? +description: + Learn about workerpools in iExec - the computing resources that execute iApps +--- + +# What is a Workerpool? + +This page is under development. + + diff --git a/src/get-started/protocol/pay-per-task.md b/src/get-started/protocol/pay-per-task.md new file mode 100644 index 00000000..1834fa34 --- /dev/null +++ b/src/get-started/protocol/pay-per-task.md @@ -0,0 +1,34 @@ +--- +title: Pay Per Task Model +description: + Pricing model and task categories for iExec protocol, including computing and + deal time limits. +--- + +# Pay per task model + +We are introducing a new method for pricing and we have defined several task +categories that describe the execution boundaries. We'll setup a test +infrastructure so that application developers can evaluate the category of their +submissions. Conversely, worker pools will be able to benchmark their +infrastructures against the reference machine. + +In the future, we'll redefine the categories, and provide more advanced tools +for helping developers to maximize the usage of the infrastructure + +**Categories Description:** + +| **Category** | **Maximum Computing Time (C)** | **Maximum Deal Time (D)** | +| ------------ | ------------------------------ | ------------------------- | +| 0 – XS | 5 min | 50 min | +| 1 – S | 20 min | 200 min (3h20m) | +| 2 – M | 1 hour | 10h | +| 3 – L | 3 hour | 30h (1d6h) | +| 4 – XL | 10 hour | 100h (4d4h) | + +- Each worker will allocate **C** minutes to compute the application. If the + computation is not completed within this **Maximum Computing Time**, the + running application will be stopped. +- From a buyer perspective, a requester will be able to claim a task of a deal + after **D** minutes if the task is not completed within the **Maximum Deal + Time**. diff --git a/src/get-started/protocol/proof-of-contribution.md b/src/get-started/protocol/proof-of-contribution.md new file mode 100644 index 00000000..f8a9ca83 --- /dev/null +++ b/src/get-started/protocol/proof-of-contribution.md @@ -0,0 +1,896 @@ +--- +title: Proof of Contribution +description: + PoCo protocol for trust, consensus, and secure payment in decentralized iExec + computing. +--- + +# Proof of Contribution + +> PoCo is a protocol designed to provide trust in an open and decentralized +> environment of untrusted machines. + +The iExec platform provides a network where application providers, workers, and +users can gather and work together. The fully decentralized nature of iExec +implies that no single agent is trusted by default, and that those agents +require incentives to contribute correctly. + +In this context, Proof-of-Contribution (PoCo) is the protocol used by iExec for +consensus over off-chain computing. + +## Protocol + +### Objectives + +PoCo is a protocol designed to provide trust in an open and decentralized +environment of untrusted machines. + +In addition to providing trust, PoCo also orchestrates the different +contributions to the iExec network, ensuring payments are always fair and +timely. + +A major quality of PoCo lies in the fact that it is a modular protocol. It comes +with features that are context-specific. + +### Result consolidation + +PoCo relies on replication to achieve result consolidation. This is purely a +software solution that enforces a confidence level on the result. +[This confidence level can be customized by the requester.](proof-of-contribution.md#replication-and-trust) + +This layer also supports the onchain consolidation of execution results carried +out in Trusted Execution Environments (TEE) such as Intel SGX. + +### Secure payment + +Once a deal is sealed on the iExec Marketplace, requester funds are locked to +ensure all resource providers are paid for their contributions. Resources can +take the form of data, applications or computing power. + +Workers must achieve consensus on the execution result to get the requester’s +funds. If consensus is not achieved, the requester is reimbursed. + +Worker and scheduler must stake RLC to participate as a computing providers. Bad +behaviour from an actor results in a loss of stake. + +This is essential on the public blockchain, but all values can be set to 0 for +private blockchain solutions. + +### Permissioning + +For an execution to happen, a deal must be signed between the different parties +involved. A permission mechanism can be used to control access to applications, +datasets and worker pools. + +The secure payment layer can be disabled for a private blockchain, or it can +also be used in the context of the public blockchain to increase security. An +example of permissioning is dataset restriction for a specific application. + +### Overview + +PoCo describes the succession of contributions that are required to achieve +consensus on a given result. Its logic is detailed in two blog articles: + +- [PoCo series #1: Initial PoCo description](https://medium.com/iex-ec/about-trust-and-agents-incentives-4651c138974c) +- [PoCo series #3: Updated PoCo description](https://medium.com/iex-ec/poco-series-3-poco-protocole-update-a2c8f8f30126) + +The +[nominal workflow](https://github.com/iExecBlockchainComputing/iexec-doc/raw/master/techreport/nominalworkflow-ODB.png) +is also available in the [technical report section](/references/glossary) + +Below are the details of the implementations: + +**1. Deal:** + +[A deal is sealed by the Clerk.](proof-of-contribution.md#brokering) This marks +the beginning of the execution. An event is created to notify the worker pool’s +scheduler. + +The consensus timer starts when the deal is signed. The corresponding task must +be completed before the end of this countdown. Otherwise, the scheduler gets +punished by a loss of stake and reputation, and the user reimbursed. + +**2. Initialization:** + +The scheduler calls the `initialize` method. Given a deal id and a position in +the request order (within the deal window), this function initializes the +corresponding task and returns the +_taskid_.`bytes32 taskid = keccak256(abi.encodePacked(_dealid, idx));` + +**3. Authorization signature:** + +The scheduler designates workers that participate in this task. The scheduler’s +Ethereum wallet signs a message containing the worker’s Ethereum address, the +taskid, and (optionally) the Ethereum address of the worker's enclave. If the +worker doesn't use an enclave, this field must be filled with `address(0)`. + +This Ethereum signature (authorization) is sent to the worker through an +off-chain channel implemented by the middleware. + +**4. Task computation:** + +Once the authorization is received and verified, the worker computes the +requested tasks. Results from this execution are placed in the `/iexec_out` +folder. The following values are then computed: + +- _bytes32 digest_: a digest (sha256) of the result folder. +- _bytes32 hash_: the hash of the _digest_, used to produce a consensus +- _bytes32 seal_: the salted hash of the _digest_, used to prove a worker’s knew + the _digest_ value before it is published. + `resultHash == keccak256(abi.encodePacked( taskid, resultDigest))` + `resultSeal == keccak256(abi.encodePacked(worker, taskid, resultDigest))` + +In computer science, a deterministic algorithm is an algorithm which, given a +particular input, will always produce the same output. + +Both the `digest`, the `hash` and the `seal` are automatically computed based on +the output of the application. If the output is not entirely deterministic, then +the application can specify a deterministic file that should be used for +building consensus. In order to do so, the application just has to provide the +path to the deterministic file using a specific entry +`deterministic-output-path` in `${IEXEC_OUT}/computed.json`. + +Alternatively, if the application is used in a doracle context (the results are +designed to be processed on-chain by receiver smart-contracts), then the value +of this callback must be specified in `${IEXEC_OUT}/computed.json` under the +entry `callback-data`. + +If a TEE was used to produce the result, the post-processing enclave will +automatically produce an `enclave-signature` entry that contains the enclave +signature (of the resultHash and resultSeal). TEE certification of results is +transparent to the application developer. + +**5. Contribution:** + +Once the execution has been performed, the worker pushes its contribution using +the `contribute` method. The contribution contains: + +- _bytes32 taskid_ +- _bytes32 resultHash_ +- _bytes32 resultSeal_ +- _address enclaveChallenge_ + +The address of the enclave (specified in the scheduler’s authorization). If no +enclave is specified, this parameter should be set to `address(0)`. + +- _bytes enclaveSign_ + +The enclave signature. This is required if the `enclaveChallenge` is not +`address(0)`. Otherwise, it should be set to the empty byte string `0x`. + +- _bytes workerpoolSign_ + +The signature computed by the scheduler at step 2. + +**6. Consensus:** + +During the contribution, the consensus is updated and verified. Contributions +are possible until the consensus is reached, at which point the contributions +are closed. We then enter a 2h reveal phase. + +**7. Reveal:** + +During the reveal phase, workers that have contributed to the consensus must +call the `reveal` method with the `resultDigest`. This verifies that the +`resultHash` and `resultSeal` they provided are valid. Failure to reveal is +equivalent to a bad contribution, and results in a loss of stake and reputation. + +**8. Finalize:** + +Once all contributions have been revealed, or at the end of the reveal period if +some (but not all) reveals are missing, the scheduler must call the `finalize` +method. This finalizes the task, rewards good contribution and punishes bad +ones. This must be called before the end of the consensus timer. + +### Staking and Payment + +Among the objectives of PoCo, we want to ensure a worker that contributes +correctly is rewarded and, at the same time, that a requester won’t be charged +unless a consensus is achieved. This is achieved by locking the requester’s +funds for the duration of the consensus, and unlocking them depending on the +outcome. + +Staking is used to prevent bad behavior and encourage good contributions. + +Your account, managed by the `Escrow` part of the `IexecClerk`, separates +between `balance.stake` (available, can be withdrawn) and `balanced.locked` +(unavailable, frozen by a running task). The `Escrow` exposes the following +mechanism: + +`lock`: Moves value from the `balance.stake` to `balance.lock` + +- Locks the requester stake for payment +- Locks the scheduler stake to protect against failed consensus +- Locks the worker stake when making a contribution + +`unlock`: Moves value from the `balance.lock` back to the `balance.stake` + +- Unlock the requester stake when consensus fails +- Unlock the scheduler stake when consensus is achieved +- Unlock the worker stake when they contributed to a successful consensus + +`seize`: Confiscate value from `balance.lock` + +- Seize the requester stake when the consensus is achieved (payment) +- Seize the scheduler stake when consensus fails (send to the reward kitty) +- Seize the worker stake when a contribution fails (redistributed to the other + workers in the task) + +`reward`: Award value to the `balance.stake` + +- Reward the scheduler when consensus is achieved +- Reward the worker when they contributed to a successful consensus +- Reward the app and dataset owner + +The requester payment is composed of 3 parts, one for the worker pool, one for +the application and one for the dataset. When a consensus is finalized, the +payment is seized from the requester and the application and dataset owners are +rewarded accordingly. The worker pool part is put inside the `totalReward`. +Stake from the losing workers is also added to the `totalReward`. The scheduler +takes a fixed portion of the `totalReward` as defined in the worker pool smart +contract (`schedulerRewardRatioPolicy`). + +The remaining reward is then divided between the successful workers +proportionally to the impact their contribution made on the consensus. If there +is anything left (division rounding, a few nRLC at most) the scheduler gets it. +The scheduler also gets part of the reward kitty. + +#### Parameters + +`FINAL_DEADLINE_RATIO = 10`, `CONTRIBUTION_DEADLINE_RATIO = 7`, +`REVEAL_DEADLINE_RATIO = 2` + +Parameters of the consensus timer. They express the number of reference timers +(category duration) that are dedicated to each phase. These settings correspond +to a 70%-20%-10% distribution between the contribution phase, the reveal phase +and the finalize phase. + +- `FINAL_DEADLINE_RATIO` This describes the total duration of the consensus. At + the end of this timer the consensus must be finalized. If it is not, the user + can make a claim to get a refund. +- `CONTRIBUTION_DEADLINE_RATIO` This describes the duration of the contribution + period. The consensus can finalize before that, but no contribution will be + allowed after the timer to ensure enough time is left for the reveal and + finalize steps. +- `REVEAL_DEADLINE_RATIO` This describes the duration of the reveal period. + Whenever a contribution triggers a consensus, a reveal period of this duration + is reserved for the workers to reveal their contribution. Note that this + period will necessarily start before the end of the contribution phase. + +Let's consider a task of category GigaPlus, which reference duration is 1 hour. +If the task was submitted at 9:27AM, the contributions must be sent before +4:27PM (16:27). Whenever a contribution triggers a consensus, a 2 hours long +reveal period will start. Whatever happens, the consensus has to be achieved by +7:27PM (19:27). + +`WORKERPOOL_STAKE_RATIO = 30` + +Percentage of the worker pool price that has to be staked by the scheduler. For +example, for a `20 RLC` task, with an additional `1 RLC` for the application and +`5 RLC` for the dataset, the worker will have to lock `26 RLC` in total and the +scheduler will have to lock (stake) `30% * 20 = 6 RLC`. + +This stake is lost and transferred to the reward kitty if the consensus is not +finalized by the end of the consensus timer. + +`KITTY_RATIO = 10` + +Percentage of the reward kitty for the scheduler per successful execution. If +the reward kitty contains 42 RLC when a finalize is called, then the scheduler +will get 4.2 extra RLC and the reward kitty will be left with 37.8 RLC. + +`KITTY_MIN = 1 RLC` + +Minimum reward on successful execution (up to the reward kitty value). + +- If the reward kitty contains 42.0 RLC, the reward is 4.2 +- If the reward kitty contains 5.0 RLC, the reward should be 0.5 but gets raised + to 1.0 +- If the reward kitty contains 0.7 RLC, the reward should be 0.07 but gets + raised to 0.7 (the whole kitty) + +`reward = kitty.percentage(KITTY_RATIO).max(KITTY_MIN).min(kitty)` + +#### Example + +Let's consider a worker pool with the policies `workerStakeRatioPolicy = 35%` +and `workerStakeRatioPolicy = 5%`. + +- A requester offers `20 RLC` to run a task. The task is free, but it uses a + dataset that costs `1 RLC`. The requester locks `21 RLC` and the scheduler + `30% * 20 = 6 RLC`. The trust objective is `99%` (`trust = 100`) +- 3 workers contribute: + - The first one (`score = 12 → power = 3`) contributes `17`. It has to lock + `7 RLC` (35% of the `20 RLC` awarded to the worker pool). + - The second worker (`score = 100 → power = 32`) contributes `42`. It also + locks `7 RLC`. + - The third worker (`score = 300 → power = 99`) contributes `42`. It also + locks `7 RLC`. +- After the third contribution, the value `42` has reached a `99.87%` + likelihood. Consensus is achieved and the two workers who contributed toward + `42` have to reveal. +- After both workers reveal, the scheduler finalizes the task: + - The requester locked value of `21 RLC` is seized. + - The dataset owner gets `1 RLC` for the use of its dataset. + - Stake from the scheduler is unlocked. + - Stakes from workers 2 and 3 are also unlocked. + - The first worker stake is seized, and it loses a third of its score. The + corresponding `7 RLC` are added to the `totalReward`. + - We now have `totalReward = 27 RLC`: + - We save 5% for the scheduler, `workersReward = 95% * 27 = 25.65 RLC` + - Worker 2 has weight `log2(32) = 5` and worker 3 has a weight + `log2(99) = 6`. Total weight is `5+6=11` + - Worker 2 takes `25.65 * 5/11 = 11.659090909 RLC` + - Worker 3 takes `25.65 * 6/11 = 13.990909090 RLC` + - Scheduler takes the remaining `1.350000001 RLC` + - If the reward kitty is not empty, the scheduler also takes a part of it. + +## Replication & Trust + +### How to achieve trust ? + +The PoCo offers a consensus mechanism that can certify the likelihood of a +result to be valid. This consensus relies on the scoring of workers and the +replication of a task’s execution to combine the score of the workers that come +up with the same result. This consensus is largely based on Sarmenta’s work +[[Sarmenta2002]](proof-of-contribution.md#references) with specific tuning of +the scoring function [[Trust2018]](proof-of-contribution.md#references). + +### Contribution credibility + +Each worker’s contribution has an associated credibility. This credibility +derives from the worker’s history score. As described in +[[Trust2018]](proof-of-contribution.md#references), a worker score is a positive +integer that is incremented for each valid and verified contribution. In case of +bad contribution, a worker loses one third of it’s score. This credibility can +be expressed as a likelihood percentage but also as a weight value that can be +used to detect consensus without resorting to floating point arithmetics, more +details in [[Trust2018]](proof-of-contribution.md#references). + +### Requiring a trust level + +Based on [[Sarmenta2002]](proof-of-contribution.md#references) describing the +way to combine worker’s contribution and to evaluate a result’s likelihood, a +requester can ask for the level of trust as an input for the PoCo processing, to +impose a certain quality of service. The trust level corresponds to a minimum +correctness likelihood that a result must achieve to be valid. For example, a +trust level of 0 means any contribution would be accepted, regardless of the +score of the worker proposing it. On the other hand a trust level of 99.99% +means a result will only be accepted if the contribution towards it result shows +a correctness probability higher than 99.99%. + +The trust level is expressed, on-chain, by an integer `trust` such that +`threshold = 1 - 1 / trust`. + +| **Trust** | **PoCo enforced confidence threshold** | +| --------- | -------------------------------------- | +| 0 | 0% | +| 1 | 0% | +| 2 | 50% | +| 100 | 99% | +| 10000 | 99.99% | +| 1000000 | 99.9999% | + +### Limitation + +This consensus mechanism requires replicable applications. Non-deterministic +applications, long-running jobs such as webservers, do not meet this requirement +out of the box. When it is possible, the application developer must provide a +deterministic result using the `deterministic-output-path` entry of the +`${IEXEC_OUT}/computed.json` file. Otherwise, the user can still run its +application on the iExec platform but would have to disable the PoCo’s consensus +layer. Hardware security as TEE is an option to overpass this limitation. + +#### References + +| | | +| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Sarmenta2002] | (1, 2) Luis F.G.Sarmenta. Sabotage-tolerance mechanisms for volunteer computing systems. 2002. Future Generation Computer Systems, 18(4), 561–572 [Sarmenta2002 PDF](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.67.2962&rep=rep1&type=pdf) | +| [Trust2018] | (1, 2, 3) Trust management in the Proof of Contribution protocol. 2018. Technical report. [Trust2018 PDF](https://github.com/iExecBlockchainComputing/iexec-doc/raw/master/techreport/iExec_PoCo_and_trustmanagement_v1.pdf) | + +## Brokering + +### Overview + +We studied many possible evolutions of the brokering process. The first +requirement is to include bid orders to complete the already available ask +orders. It soon became clear that the evolution had to go beyond a simple +interaction. We considered on-chain and off-chain approach and finally went for +a solution where both the pairing and the order book are off-chain. It might +sound counterintuitive, but it has many advantages. + +If the orders and the pairing are handled off-chain, how can we build an +on-chain agreement knowing that all parties have agreed? Is there a threat to +the platform security? + +This option relies on the use of cryptographic signatures for order +authentication. We represent orders using structures containing all the required +details. The hash of this structure uniquely identifies the order. The structure +by itself is worthless as anyone could write and publish it. However, if we add +a valid cryptographic signature (of the identifying hash), then the origin of +the order can be certified with the same level of security as if it was +published on-chain. This role is fulfilled by a smart-contract called the +iExecClerk. + +An overview of the iExecODB (Open Decentralized Brokering) is available in this +blog article: + +- [PoCo series #5: Open decentralized brokering on the iExec platform](https://medium.com/iex-ec/poco-series-5-open-decentralized-brokering-on-the-iexec-platform-67b266e330d8) + +### Orders structure + +As discussed earlier, iExec introduces the offchain signature of orders as a new +core element of the iExec Open Decentralized Brokering, the iExec Clerk should +match these orders. There are 4 types of orders corresponding to the 4 actors +involved: the worker pool, the application, the dataset and the requester. Each +order types has to follow a specific structure and is signed using +[EIP-712](https://eips.ethereum.org/EIPS/eip-712) structure signature mechanism. + +### Orders description + +#### **AppOrder** + +```text +struct AppOrder +{ + address app; + uint256 appprice; + uint256 volume; + uint256 tag; + address datasetrestrict; + address workerpoolrestrict; + address requesterrestrict; + bytes32 salt; + bytes sign; +} +``` + +- `app` Address of the smartcontract describing the application. Must be + registered in the AppRegistry. +- `appprice` Price of a run of the application. +- `volume` Number of run authorized (by this order). +- `tag` Special requirements for the application (see + [tag](proof-of-contribution.md#tag)). +- `datasetrestrict` Matching restrictions. Dataset or group of datasets that can + be matched. Let null value to disable. +- `workerpoolrestrict` Matching restrictions. Workerpool or group of worker + pools that can be matched. Let null value to disable. +- `requesterrestrict` Matching restrictions. Requester or group of requesters + that can be matched. Let null value to disable. +- `salt` A random value to ensure order uniqueness. +- `sign` cryptographic signature of the order, the smart contract is securely + linked to application owner. + +### **DatasetOrder** + +```text +struct DatasetOrder +{ + address dataset; + uint256 datasetprice; + uint256 volume; + uint256 tag; + address apprestrict; + address workerpoolrestrict; + address requesterrestrict; + bytes32 salt; + bytes sign; +} +``` + +- `dataset` Address of the smartcontract describing the dataset. Must be + registered in the DatasetRegistry. +- `datasetprice` Price of a use of the dataset. +- `volume` Number of authorized uses (by this order). +- `tag` Special requirements of the dataset (see + [tag](proof-of-contribution.md#tag)). +- `apprestrict` Matching restrictions. App or group of apps that can be matched. + Let null value to disable. +- `workerpoolrestrict` Matching restrictions. Workerpool or group of workerpools + that can be matched. Let null value to disable. +- `requesterrestrict` Matching restrictions. Requester or group of requesters + that can be matched. Let null value to disable. +- `salt` A random value to ensure order uniqueness. +- `sign` cryptographic signature of the order, the smart contract is securely + linked to dataset owner. + +### **WorkerpoolOrder** + +```text +struct WorkerpoolOrder +{ + address workerpool; + uint256 workerpoolprice; + uint256 volume; + uint256 tag; + uint256 category; + uint256 trust; + address apprestrict; + address datasetrestrict; + address requesterrestrict; + bytes32 salt; + bytes sign; +} +``` + +- `workerpool` Address of the smartcontract describing the worker pool. Must be + registered in the WorkerpoolRegistry. +- `workerpoolprice` Price of an execution on the worker pool. +- `volume` Number of executions proposed (by this order). +- `tag` Special features proposed by the workerpool (see + [tag](proof-of-contribution.md#tag)). +- `category` Order category. +- `trust` Trust level used to consolidated results. +- `apprestrict` Matching restrictions. App or group of apps that can be matched. + Let null value to disable. +- `datasetrestrict` Matching restrictions. Dataset or group of datasets that can + be matched. Let null value to disable. +- `requesterrestrict` Matching restrictions. Requester or group of requesters + that can be matched. Let null value to disable. +- `salt` A random value to ensure order uniqueness. +- `sign` cryptographic signature of the order, the smart contract is securely + linked to worker pool manager. + +### **RequesterOrder** + +```text +struct RequestOrder +{ + address app; + uint256 appmaxprice; + address dataset; + uint256 datasetmaxprice; + address workerpool; + uint256 workerpoolmaxprice; + address requester; + uint256 volume; + uint256 tag; + uint256 category; + uint256 trust; + address beneficiary; + address callback; + string params; + bytes32 salt; + bytes sign; +} +``` + +- `app` Address of the smartcontract describing the application. Must be + registered in the AppRegistry. +- `appmaxprice` Maximum price allowed by the requester for the payment of the + application. +- `dataset` Address of the smartcontract describing the dataset. Must be + registered in the DatasetRegistry. Null if no dataset is required. +- `datasetmaxprice` Maximum price allowed by the requester for the payment of + the dataset (if any). +- `workerpool` Matching restrictions. Worker pool or group of worker pools that + are allowed to run tasks from this order. Leave null value to disable check. +- `workerpoolmaxprice` Maximum price allowed by the requester for the payment of + the execution (scheduler + workers). +- `requester` Address of the requester (paying for the executions). +- `volume` Number of tasks that are part of this order (size of the Bag Of + Task). +- `tag` Special features required by the requester (see + [tag](proof-of-contribution.md#tag)). +- `category` tasks category required. +- `trust` Minimum trust level required by the requester. +- `beneficiary` Address of the beneficiary of the computation. Used to require + output data encryption. +- `callback` Address to callback with the results (following EIP1154 interface). + Let empty (null) if no callback is required. Learn more about the callback + mechanism. +- `params` Parameters of the application (application specific). +- `salt` A random value to ensure order uniqueness. +- `sign` Cryptographic signature of the order, the smart contract is securely + linked to requester. + +## Tag + +The tag specifies the need or the availability of features that go beyond the +specifications of the category. The tag is a requirement when it is part of an +app order, a dataset order or a requester order. On the other hand, the tag in +the workerpool order expresses the availability of the corresponding features. + +In V3, tags are 32 bytes (256 bits) long array where each bit corresponds to a +feature. + +| **Value** | **Description** | +| -------------------------------------------------------------------- | ---------------------- | +| `0x0000000000000000000000000000000000000000000000000000000000000001` | TEE (physical enclave) | +| `0x0000000000000000000000000000000000000000000000000000000000000002` | — | +| `0x0000000000000000000000000000000000000000000000000000000000000004` | — | +| `0x0000000000000000000000000000000000000000000000000000000000000008` | — | +| `0x0000000000000000000000000000000000000000000000000000000000000010` | — | +| … | … | +| `0x8000000000000000000000000000000000000000000000000000000000000000` | — | + +For orders matching, the worker pool order must enable all bits that are enabled +in any of the app order, dataset order and requester order. Meaning that if the +app order tag is `0x12 = 0x10 | 0x02`, the dataset order is `0x81 = 0x80 | 0x01` +and the requester order is `0x03 = 0x02 | 0x01`, then the worker pool order +must, at least, have a tag `0x93 = 0x80 | 0x10 | 0x02 | 0x01`. + +### Matching Conditions + +In order to trigger an execution, a deal must be registered by the iExec Clerk. +Deals are produced when orders are successfully matched by the clerk. A match +requires 3 or 4 orders depending on the requester requirements, the dataset +order is optional. + +Orders compatibility required: + +**1. The worker pool’s category and the requester’s category must be equal.** + +```text +require(_requestorder.category == _workerpoolorder.category); +``` + +**2. The worker pool’s trust must be greater or equal to the requester’s +trust.** + +```text +require(_requestorder.trust == _workerpoolorder.trust); +``` + +**3. The app’s, dataset’s and worker pool’s prices must be less or equal to the +requester’s appmaxprice, datasetmaxprice and workerpoolmaxprice.** + +```text +require(_requestorder.appmaxprice >= _apporder.appprice); +require(_requestorder.datasetmaxprice >= _datasetorder.datasetprice); +require(_requestorder.workerpoolmaxprice >= _workerpoolorder.workerpoolprice); +``` + +**4. The worker pool’s tag must enable all the features required by the app’s +tag, the dataset’s tag and the worker pool’s tag.** + +```text +require(tag & ~_workerpoolorder.tag == 0x0); +require(tag & ~_workerpoolorder.tag == 0x0); +``` + +**5. If TEE tag is required, then application must be TEE compatible.** + +```text +require((tag ^ _apporder.tag)[31] & 0x01 == 0x0); +``` + +**6. The app provided by the apporder must match the one required by the +requester.** + +```text +require(_requestorder.app == _apporder.app); +``` + +**7. The dataset provided by the datasetorder must match the one required by the +requester.** + +```text +require(_requestorder.dataset == _datasetorder.dataset); +``` + +**8. If the requester specified a worker pool restriction, the worker pool must +match this value or be part of the corresponding group.** + +```text +require(_checkIdentity(_requestorder.workerpool, _workerpoolorder.workerpool, GROUPMEMBER_PURPOSE)); +``` + +**9. The application must fit the dataset’s and the worker pool’s application +restrictions (if any).** + +```text +require(_checkIdentity(_datasetorder.apprestrict, _apporder.app, GROUPMEMBER_PURPOSE)); +require(_checkIdentity(_workerpoolorder.apprestrict, _apporder.app, GROUPMEMBER_PURPOSE)); +``` + +**10. The dataset must fit the application’s and the worker pool’s restrictions +(if any).** + +```text +require(_checkIdentity(_apporder.datasetrestrict, _datasetorder.dataset, GROUPMEMBER_PURPOSE)); +require(_checkIdentity(_workerpoolorder.datasetrestrict, _datasetorder.dataset, GROUPMEMBER_PURPOSE)); +``` + +**11. The worker pool must fit the application’s and the dataset’s restrictions +(if any).** + +```text +require(_checkIdentity(_apporder.workerpoolrestrict, _workerpoolorder.workerpool, GROUPMEMBER_PURPOSE)); +require(_checkIdentity(_datasetorder.workerpoolrestrict, _workerpoolorder.workerpool, GROUPMEMBER_PURPOSE)); +``` + +**12. The requester must fit the application’s, the dataset’s and the worker +pool’s restrictions (if any).** + +```text +require(_checkIdentity(_apporder.requesterrestrict, _requestorder.requester, GROUPMEMBER_PURPOSE)); +require(_checkIdentity(_datasetorder.requesterrestrict, _requestorder.requester, GROUPMEMBER_PURPOSE)); +require(_checkIdentity(_workerpoolorder.requesterrestrict, _requestorder.requester, GROUPMEMBER_PURPOSE)); +``` + +**13. All resources must be registered in the corresponding registries.** + +```text +require(m_appregistry.isRegistered(_apporder.app)); +require(m_datasetregistry.isRegistered(_datasetorder.dataset)); +require(m_workerpoolregistry.isRegistered(_workerpoolorder.workerpool)); +``` + +**14. All orders must be signed or presigned.** + +```text +require(_checkPresignatureOrSignature(App(_apporder.app).m_owner(), _apporder.hash(), _apporder.sign)); +require(_checkPresignatureOrSignature(Dataset(_datasetorder.dataset).m_owner(), _datasetorder.hash(), _datasetorder.sign)); +require(_checkPresignatureOrSignature(Workerpool(_workerpoolorder.workerpool).m_owner(), _workerpoolorder.hash(), _workerpoolorder.sign)); +require(_checkPresignatureOrSignature(_requestorder.requester, _requestorder.hash(), _requestorder.sign)); +``` + +**15. The deal produced must contain at least one task.** + +**16. Requester and worker pool must be able to stake.** + +### FAQ : How to write an order ? + +**[Requester] How do I enable PoCo’s consolidation of results?** + +A requester can enable the trust layer of the PoCo by setting the trust value in +the requestorder. As described here, the trust is defined with the required +confidence level. If the requester wants à 99.99% confidence level on the +results, it must set the `trust` field to `10000`. + +**[Requester] How do I run a non deterministic application despite requiring +determinism?** + +The PoCo requires an application to be deterministic for the replication layer +to provide trust in the result. If an application is not deterministic, +consensus cannot be achieved and replication is not necessary. + +In order to obtain a result, the requester must prevent replication by asking a +`trust` value of `0`. To protect your result, the requester can ask to run in an +enclave by setting the `tag` to `0x1`. + +**[Requester] How do I protect my result using encryption?** + +The result of an execution can be valuable to the end user, and the requester +might want to protect this result from leaking with encryption. + +Anyone can set up an encryption key in an SMS (Secret Management Service) of its +choice and set up the SMS address in the directory. + +Once a user set an encryption key (see TODO), any computation result can be +encrypted with, you have to set up the beneficiary address in the +RequesterOrder. + +An application can only perform result encryption inside an enclave. No +encryption key will be provided by the SMS to an application that doesn't run +outside an enclave. + +(TODO: potential issue, key leaking to malicious application with the requester +attacking a beneficiary) + +**[Dataset owner] How do I limit the usage of my dataset to a specific +application?** + +iExec’s Data wallet and Data store is a complete solution to monetize valuable +datasets preserving privacy. Before uploading a dataset you should encrypt it +using the iExec SDK. Through this process, the encryption key becomes the +valuable data that has to be protected. + +The encryption key must be stored in an SMS and the address of the corresponding +SMS recorded in the directory. The SMS stores this encryption key and will only +communicate it to an application running in an enclave. + +Before a worker runs this application, the worker must first prove that its +access is legitimate by providing the scheduler authorization. The SMS will +verify that this authorization’s signature is valid and that the corresponding +task is registered onchain. This means that any deal signed in the iExec Clerk +will grant access to the dataset’s encryption key. + +Therefore, in order to restrict the dataset’s usage, the dataset owner should +set up restriction before signing a brokering order. This is done through the +`apprestrict` field of the datasetorder. The dataset owner can deploy a +`SimpleGroup` smart contract, have the `apprestrict` field point to it, and then +whitelisting the applications that will have access to the dataset’s encryption +key. + +**[Scheduler] How do I protect myself from non-deterministic applications?** + +When a scheduler publishes an order, it makes a commitment to achieve consensus +on any task that is part of a deal made. While everything is done to ensure an +application cannot hurt a worker pool’s machines, not reaching the consensus +would cause a loss of stake for the scheduler. The scheduler must therefore take +action to prevent this. + +Whenever the scheduler proposes to certify a result using the PoCo’s trust +layer, it should make sure the application’s developer took the actions required +to make it compatible with the PoCo. On the other hand, any application could be +executed with the PoCo’s trust layer disabled. + +A scheduler could therefore emit two kinds of workerpoolorder: + +- A workerpoolorder offering execution with the PoCo’s trust layer disabled + (`trust = 0`) and accepting all applications (`apprestrict = 0`) +- A workerpoolorder offering secure execution of whitelisted tasks. The + application whitelist would use the `GroupInterface` to be verified by the + iExec Clerk. This group could either be managed by the scheduler or by a + certification authority that would check application's determinism. + +## Other technical choices + +### Callback + +Some requester might want an onchain callback with the result of the execution. +The callback mechanism is based on +[[EIP-1154]](proof-of-contribution.md#references-1). The result is a `bytes` +value that is set during the `finalize`. The `IexecProxy` implements both side +of the [[EIP-1154]](proof-of-contribution.md#references-1). + +**Pull:** + +Results are identified by their `taskid` and can be pulled through the +`resultFor` method. + +**Push:** + +In order to use the push approach, the requester can use the `callback` field to +specify the address of a smart contract that implements the `receiveResult` +method specified in [[EIP-1154]](proof-of-contribution.md#references-1). This +method will be called during the finalization with a minimum of 200000 nanoRLC +gas to proceed [[*]](proof-of-contribution.md#references-1). + +In order to protect the scheduler and the workers, any error raised during this +callback will be disregarded and will not prevent the finalization from +happening. The same mechanism goes for the callback running out of gas. + +### Consensus & Reveal duration + +When orders match, IexecClerk records the deal which details the parameters of +the task. If a consensus on a result is achieved before the countdown, the task +is successful. After the countdown, as no consensus is reached, the execution is +failed. The duration of the consensus timer is a balance between the quality of +service offered to the requester (short timer) and the margin available for the +scheduler and the worker to achieve consensus (and go through the reveal +process). + +The maximum duration of a task is governed by the category the task fits in. +While the consensus duration can obviously not be shorter than the task runtime, +a significant margin is required for the scheduler to do its job correctly. +Multiple workers are likely to contribute and extra time must be planed for the +revealing and finalization steps. + +The consensus timer starts when the deal is recorded by the IexecClerk. + +In case of failure, the requester can claim the refund. + +In the v3-alpha version, this timer lasts for 10 category runtime, for all +category. The reveal timer starts whenever a consensus is reached and determines +the time frame the workers have to reveal their contributions. This should be +long enough for worker to have time to reveal while not being too long so that +the requester waits too long for its result or the consensus fails because the +scheduler cannot finalize in time. In the v3-alpha version, this timer lasts for +2 runtime whatever the category runtime. This leaves a gap of at least 1 time +the category runtime for the scheduler to finalize the task. + +### Reward kitty + +When a consensus fails, the requester gets a refund and the scheduler loses its +stake. In order to remove an attack vector, the requester does not get any of +the seized stake. If this was a feature, anyone could build a flawed application +that would not reach consensus to drain money from the scheduler. This would +force the scheduler to whitelist all applications thus reducing the usability of +the platform. Seized stake from the scheduler goes into a specific account +called the _reward kitty_. No one controls this account, nor can withdraw from +it. However, the tokens are not burned. Whenever a task is finalized, the +scheduler that organized the execution of this task is rewarded by the requester +and also gets a small part of the reward kitty. + +As described in the protocol parameters section, this reward is +`reward = kitty.percentage(KITTY_RATIO).max(KITTY_MIN).min(kitty)`. + +### References + +| | | +| -------------------------------------------------------------- | --------------------------------------------------------------------- | +| [[EIP-1154]](proof-of-contribution.md#other-technical-choices) | [EIP-1154: Oracle Interface](https://eips.ethereum.org/EIPS/eip-1154) | +| [[*]](proof-of-contribution.md#other-technical-choices) | value susceptible to change. | diff --git a/src/get-started/protocol/worker/manage-access.md b/src/get-started/protocol/worker/manage-access.md new file mode 100644 index 00000000..b3631024 --- /dev/null +++ b/src/get-started/protocol/worker/manage-access.md @@ -0,0 +1,108 @@ +--- +title: Manage Workerpool Access +description: + A workerpool manager is an essential actor in the iExec network. It will be in + charge of proposing available computing resources (workers) to task + requesters. +--- + +# Manage a workerpool + +> A workerpool manager is an essential actor in the iExec network. It will be in +> charge of proposing available computing resources (workers) to task +> requesters. + +An iExec workerpool is orchestrated by an _iExec Core Scheduler_. The _iExec +Core Scheduler_ watches on-chain deals and schedules off-chain computation among +available workers. + +## Deploy a workerpool + +You can deploy your own workerpool on iExec with +[this repository](https://github.com/iExecBlockchainComputing/deploy-workerpool). +Be sure to check a particular +[release](https://github.com/iExecBlockchainComputing/deploy-workerpool/releases) +before starting your deployment. + +## Manage your workerpoolorders + +Orders enable setting custom governance for resources. + +Here you will learn how to manage your workerpool's monetization rules. + +### Publish a workerpool order + +Initialize a `workerpoolorder`: + +```bash +iexec order init --workerpool +``` + +Edit the `workerpoolorder` part in `iexec.json` to set the conditions to use +your workerpool: + +| key | description | +| ------------------- | ------------------------------------------------------------------------------------ | +| `workerpool` | workerpool address | +| `workerpoolprice` | price to charge the requester for each execution of the app (in nRLC) | +| `volume` | number of authorized uses, each use decreases this number | +| `tag` | restrict usage to a specific runtime such as **Scone** or **Gramine** TEE frameworks | +| `category` | Order category, will define the deal `workClockTimeRef` and its deadlines | +| `trust` | Trust level of the execution, impacts the number of replicates | +| `apprestrict` | restrict the workerpool usage to a specifig app (1) | +| `datasetrestrict` | restrict the workerpool usage to a specific dataset (1) | +| `requesterrestrict` | restrict the workerpool usage to a specific requester (1) | + +1. the restriction is disabled by default with + 0x0000000000000000000000000000000000000000. + +The supported tags for workerpool orders are: + +| Tag value | Description | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `0x0000000000000000000000000000000000000000000000000000000000000000` | Order for the execution of a standard task | +| `0x0000000000000000000000000000000000000000000000000000000000000003` | Order for the execution of a TEE task with Scone framework | +| `0x0000000000000000000000000000000000000000000000000000000000000005` | Order for the execution of a TEE task with Gramine framework (reserved value, do not use) | + +::: warning + +1. Do not publish workerpool orders with a tag value out of the specified list. + Such an order could produce undesirable and unpredictable behaviors. The + [iExec SDK](/references/sdk) implements all required preflight checks to + avoid erroneous orders publishing. +2. Currently, TEE workflow do not support tasks replication on several workers. + TEE workerpool orders must be published with `trust` value equal to `1`. +3. TEE tasks with Gramine TEE framework are not supported yet. Do not publish + orders with both `tee` and `gramine` tag bits enabled. + +::: + +As soon as your `ẁorkerpoolorder` complies to your requirements, you must sign +it and you may publish it. + +```bash +iexec order sign --workerpool && iexec order publish --workerpool +``` + +## Remove an order from iExec Marketplace + +List the published orders for your workerpool. + +```bash +iexec orderbook workerpool +``` + +Copy the `orderHash` of the order you want to remove + +Unpublish the `workerpoolorder` from the iExec Marketplace + +```bash +iexec order unpublish --workerpool +``` + +An unpublished order is still valid on the blockchain, to invalidate it use the +cancel command. + +```bash +iexec order cancel --workerpool +``` diff --git a/src/get-started/protocol/worker/quick-start.md b/src/get-started/protocol/worker/quick-start.md new file mode 100644 index 00000000..47f10e4e --- /dev/null +++ b/src/get-started/protocol/worker/quick-start.md @@ -0,0 +1,46 @@ +--- +title: Worker Quick Start +description: + A worker is an essential actor of the iExec Network. It will be in charge of + computing tasks sent by requesters on the iExec Marketplace +--- + +# Quick start + +> A worker is an essential actor of the iExec Network. It will be in charge of +> computing tasks sent by requesters on the iExec Marketplace. + +The iExec Worker participates in a workerpool by computing tasks purchased by +requesters on the iExec marketplace. The iExec Worker must connect to the iExec +Core Scheduler of the workerpool to actively participate in the computation. + +A worker will be rewarded with RLC for every properly computed tasks. + +Please note that: + +- your wallet must be loaded with RLC. Some RLC must be deposited to your iExec + account in order to stake for incoming tasks. +- your computer needs at least 2 CPUs. + +## Start a worker + +Find a workerpool which allows your worker to connect. + +As an example of how you could deploy you own worker, you can check the +configuration documentation of the +[Worker Pass](https://github.com/iExecBlockchainComputing/wpwp-worker-setup). + +For security reason, it is **highly recommended** to launch your worker in a +virtual machine. + +After having loaded some RLC and deposited them to your iExec account, you can +start your worker. + +When the worker initialization process is complete, the worker will be started +and you will get something like: **You worker is all set**. Your worker will now +be able to compute some tasks coming from the iExec network to earn some RLCs. + +## Wallet restriction + +An exclusive wallet must be associated to your worker. You need N wallets if you +want N workers. diff --git a/src/overview/quick-start.md b/src/get-started/quick-start.md similarity index 97% rename from src/overview/quick-start.md rename to src/get-started/quick-start.md index fa2199bd..afad97a4 100644 --- a/src/overview/quick-start.md +++ b/src/get-started/quick-start.md @@ -111,6 +111,6 @@ learning and prototyping. 4. **Deploy**: Use our deployment guides for production-ready applications diff --git a/src/overview/rlc.md b/src/get-started/rlc.md similarity index 92% rename from src/overview/rlc.md rename to src/get-started/rlc.md index 978a34ac..166063ec 100644 --- a/src/overview/rlc.md +++ b/src/get-started/rlc.md @@ -121,14 +121,14 @@ Ready to dive into the iExec ecosystem? Here are the next steps: networks - **[Start Using iExec](./quick-start.md)** - Begin your confidential computing journey -- **[Earn RLC](../manage-data/guides/create-and-share-access.md)** - Become a - provider and monetize your resources +- **[Earn RLC](/guides/manage-data/manage-access)** - Become a provider and + monetize your resources diff --git a/src/overview/tooling-and-explorers/blockchain-explorer.md b/src/get-started/tooling-and-explorers/blockchain-explorer.md similarity index 84% rename from src/overview/tooling-and-explorers/blockchain-explorer.md rename to src/get-started/tooling-and-explorers/blockchain-explorer.md index 47310226..51acadb7 100644 --- a/src/overview/tooling-and-explorers/blockchain-explorer.md +++ b/src/get-started/tooling-and-explorers/blockchain-explorer.md @@ -45,9 +45,9 @@ deploy to **Arbitrum** for production workloads. ::: diff --git a/src/overview/tooling-and-explorers/bridge.md b/src/get-started/tooling-and-explorers/bridge.md similarity index 89% rename from src/overview/tooling-and-explorers/bridge.md rename to src/get-started/tooling-and-explorers/bridge.md index 669f3256..f79c07d8 100644 --- a/src/overview/tooling-and-explorers/bridge.md +++ b/src/get-started/tooling-and-explorers/bridge.md @@ -107,13 +107,13 @@ RLC tokens between Ethereum and Arbitrum mainnet in both directions.
diff --git a/src/overview/tooling-and-explorers/builder-dashboard.md b/src/get-started/tooling-and-explorers/builder-dashboard.md similarity index 91% rename from src/overview/tooling-and-explorers/builder-dashboard.md rename to src/get-started/tooling-and-explorers/builder-dashboard.md index 993df2db..e5f4687e 100644 --- a/src/overview/tooling-and-explorers/builder-dashboard.md +++ b/src/get-started/tooling-and-explorers/builder-dashboard.md @@ -159,12 +159,12 @@ decisions for better application performance. diff --git a/src/overview/tooling-and-explorers/iexec-explorer.md b/src/get-started/tooling-and-explorers/iexec-explorer.md similarity index 87% rename from src/overview/tooling-and-explorers/iexec-explorer.md rename to src/get-started/tooling-and-explorers/iexec-explorer.md index 19b6f38a..93b981b7 100644 --- a/src/overview/tooling-and-explorers/iexec-explorer.md +++ b/src/get-started/tooling-and-explorers/iexec-explorer.md @@ -195,17 +195,17 @@ Explore the decentralized computing infrastructure: - **Usage Statistics**: Analyze workerpool utilization diff --git a/src/overview/tooling-and-explorers/subgraph-explorer.md b/src/get-started/tooling-and-explorers/subgraph-explorer.md similarity index 91% rename from src/overview/tooling-and-explorers/subgraph-explorer.md rename to src/get-started/tooling-and-explorers/subgraph-explorer.md index 344300f1..7b3768b8 100644 --- a/src/overview/tooling-and-explorers/subgraph-explorer.md +++ b/src/get-started/tooling-and-explorers/subgraph-explorer.md @@ -191,14 +191,14 @@ query {
diff --git a/src/get-started/toolkit.md b/src/get-started/toolkit.md new file mode 100644 index 00000000..f802948b --- /dev/null +++ b/src/get-started/toolkit.md @@ -0,0 +1,10 @@ +--- +title: iExec Toolkit +description: Essential tools and resources for building on iExec +--- + +# 🛠️ iExec Toolkit + +This page is under development. + + diff --git a/src/overview/use-cases.md b/src/get-started/use-cases.md similarity index 89% rename from src/overview/use-cases.md rename to src/get-started/use-cases.md index 31197eae..b370ac5f 100644 --- a/src/overview/use-cases.md +++ b/src/get-started/use-cases.md @@ -47,10 +47,10 @@ computing and decentralized data protection.
diff --git a/src/overview/welcome.md b/src/get-started/welcome.md similarity index 94% rename from src/overview/welcome.md rename to src/get-started/welcome.md index 351f64ed..3011f4cc 100644 --- a/src/overview/welcome.md +++ b/src/get-started/welcome.md @@ -164,13 +164,13 @@ Ready to build privacy-first applications? Choose your path:
- Quick Start: Follow our Hello World guide to build your first confidential app in minutes + Quick Start: Follow our Hello World guide to build your first confidential app in minutes
🔍
- Explore Use Cases: Browse real-world examples to see what you can build with iExec + Explore Use Cases: Browse real-world examples to see what you can build with iExec
diff --git a/src/guides/build-iapp/build-&-deploy.md b/src/guides/build-iapp/build-&-deploy.md new file mode 100644 index 00000000..a655b1ad --- /dev/null +++ b/src/guides/build-iapp/build-&-deploy.md @@ -0,0 +1,362 @@ +--- +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 + +iApps (iExec Applications) are decentralized applications that run on the iExec +network. They leverage 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 iApps that connect to TEEs in minutes. +- **Check and deploy iApps 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 iApps 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/build-iapp/guides/debugging.md b/src/guides/build-iapp/debugging.md similarity index 96% rename from src/build-iapp/guides/debugging.md rename to src/guides/build-iapp/debugging.md index 221fa3d4..80172c4a 100644 --- a/src/build-iapp/guides/debugging.md +++ b/src/guides/build-iapp/debugging.md @@ -169,7 +169,7 @@ except Exception as e: Continue improving your iApps: -- **[Inputs and Outputs](/build_iapp/guides/inputs-and-outputs)** - Handle data +- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data in TEE -- **[How to Get and Decrypt Results](/build_iapp/guides/how-to-get-and-decrypt-results)** - +- **[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)** - Retrieve results diff --git a/src/build-iapp/guides/how-to-get-and-decrypt-results.md b/src/guides/build-iapp/how-to-get-and-decrypt-results.md similarity index 94% rename from src/build-iapp/guides/how-to-get-and-decrypt-results.md rename to src/guides/build-iapp/how-to-get-and-decrypt-results.md index 33ea7021..cca00b1e 100644 --- a/src/build-iapp/guides/how-to-get-and-decrypt-results.md +++ b/src/guides/build-iapp/how-to-get-and-decrypt-results.md @@ -300,15 +300,15 @@ iexec task show Integrate result handling into your applications: -- **[Inputs and Outputs](/build_iapp/guides/inputs-and-outputs)** - Understand +- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Understand what your iApp can output -- **[Debugging Your iApp](/build_iapp/guides/debugging-your-iapp)** - - Troubleshoot execution issues -- **[App Access Control and Pricing](/build_iapp/guides/orders)** - Control who - can run your iApp +- **[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](/manage_data/dataProtector)** - Complete SDK +- **[DataProtector SDK](/references/dataProtector)** - Complete SDK documentation -- **[SDK Deep Dive](/deep_dive/sdk)** - Advanced result handling techniques +- **[SDK Deep Dive](/references/sdk)** - Advanced result handling techniques diff --git a/src/guides/build-iapp/index.md b/src/guides/build-iapp/index.md new file mode 100644 index 00000000..b9fc823a --- /dev/null +++ b/src/guides/build-iapp/index.md @@ -0,0 +1,42 @@ +--- +title: Build iApp Guides +description: Complete guide collection for building privacy-first iApps on iExec +--- + +# 🛠️ Build iApp Guides + +Welcome to the complete collection of guides for building privacy-first +applications on iExec. These guides will walk you through every aspect of +creating, testing, and deploying confidential iApps. + +## 🚀 Getting Started + +- **[Build & Deploy](/guides/build-iapp/build-&-deploy)** - Your first iApp in + 15 minutes +- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data + flow in TEE environment +- **[Debugging](/guides/build-iapp/debugging)** - Troubleshoot execution issues + +## 🔐 Access Control & Management + +- **[Manage Access](/guides/build-iapp/manage-access)** - Control who can use + your iApp +- **[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)** - + Retrieve and use outputs + +## 🧪 Advanced Features + +- **[Using TDX (Experimental)](/guides/build-iapp/using-tdx)** - Next-gen TEE + technology + +## 📚 What's Next? + +After mastering these guides, explore: + +- **[iApp Generator](/references/iapp-generator)** - Complete development + toolkit +- **[What is an iApp?](/get-started/overview/what-is-iapp)** - Core concepts and + TEE overview + +Ready to build your first privacy-preserving application? Start with the +[Build & Deploy](/guides/build-iapp/build-&-deploy) guide! diff --git a/src/build-iapp/guides/inputs-and-outputs.md b/src/guides/build-iapp/inputs-and-outputs.md similarity index 97% rename from src/build-iapp/guides/inputs-and-outputs.md rename to src/guides/build-iapp/inputs-and-outputs.md index 794e6e84..f2775e46 100644 --- a/src/build-iapp/guides/inputs-and-outputs.md +++ b/src/guides/build-iapp/inputs-and-outputs.md @@ -618,7 +618,7 @@ save_report(report) 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](/build_iapp/guides/how-to-get-and-decrypt-results) +[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results) guide for the complete user workflow. ## What's Next? @@ -627,15 +627,15 @@ guide for the complete user workflow. Continue building with these guides: -- **[App Access Control and Pricing](/build_iapp/guides/orders)** - Control who - can use your iApp -- **[Debugging Your iApp](/build_iapp/guides/debugging-your-iapp)** - - Troubleshoot execution issues -- **[How to Get and Decrypt Results](/build_iapp/guides/how-to-get-and-decrypt-results)** - +- **[App Access Control and Pricing](/guides/build-iapp/manage-access)** - + 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)** - User-side result handling ### Technical Deep Dive -- **[SDK Deep Dive](/deep_dive/sdk)** - Advanced SDK concepts +- **[SDK Deep Dive](/references/sdk)** - Advanced SDK concepts - **[Application I/O Protocol Docs](https://protocol.docs.iex.ec/for-developers/application-io)** - Low-level protocol details diff --git a/src/build-iapp/guides/manage-access.md b/src/guides/build-iapp/manage-access.md similarity index 100% rename from src/build-iapp/guides/manage-access.md rename to src/guides/build-iapp/manage-access.md diff --git a/src/build-iapp/guides/using-tdx.md b/src/guides/build-iapp/using-tdx.md similarity index 95% rename from src/build-iapp/guides/using-tdx.md rename to src/guides/build-iapp/using-tdx.md index 64774d37..642e93c9 100644 --- a/src/build-iapp/guides/using-tdx.md +++ b/src/guides/build-iapp/using-tdx.md @@ -184,9 +184,9 @@ EXPERIMENTAL_TDX_APP=true iapp run **For production applications, use the standard SGX guides**: -- **[Debugging Your iApp](/build_iapp/guides/debugging-your-iapp)** - - Troubleshoot execution issues -- **[Inputs and Outputs](/build_iapp/guides/inputs-and-outputs)** - Handle data +- **[Debugging Your iApp](/guides/build-iapp/debugging)** - Troubleshoot + execution issues +- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data in TEE environment -- **[App Access Control and Pricing](/build_iapp/guides/orders)** - Deploy - production-ready iApps +- **[App Access Control and Pricing](/guides/build-iapp/manage-access)** - + Deploy production-ready iApps diff --git a/src/manage-data/guides/handle-schemas-dataset-types.md b/src/guides/manage-data/handle-schemas-dataset-types.md similarity index 95% rename from src/manage-data/guides/handle-schemas-dataset-types.md rename to src/guides/manage-data/handle-schemas-dataset-types.md index 17d865cb..fce355ce 100644 --- a/src/manage-data/guides/handle-schemas-dataset-types.md +++ b/src/guides/manage-data/handle-schemas-dataset-types.md @@ -253,7 +253,7 @@ don't match, you'll get runtime errors when processing the data. ::: → **Ready to build an iApp?** Check out our detailed -[Inputs and Outputs guide](/build-iapp/guides/inputs-and-outputs) to learn how +[Inputs and Outputs guide](/guides/build-iapp/inputs-and-outputs) to learn how to access schema fields inside your iApp using the deserializer. ## Next Steps @@ -262,10 +262,10 @@ to access schema fields inside your iApp using the deserializer. explore next: - **Build an iApp**: Check out the - [iApp Generator guide](/build-iapp/iapp-generator) to create your first data + [iApp Generator guide](/references/iapp-generator) to create your first data processor - **Process data**: Learn about - [processProtectedData](/manage-data/dataProtector/dataProtectorCore/processProtectedData) + [processProtectedData](/references/dataProtector/dataProtectorCore/processProtectedData) for running computations -- **See it in action**: Try our [Hello World tutorial](/overview/helloWorld) for - a complete example +- **See it in action**: Try our [Hello World tutorial](/get-started/helloWorld) + for a complete example diff --git a/src/manage-data/guides/manage-access.md b/src/guides/manage-data/manage-access.md similarity index 91% rename from src/manage-data/guides/manage-access.md rename to src/guides/manage-data/manage-access.md index 14d2d223..7486e25e 100644 --- a/src/manage-data/guides/manage-access.md +++ b/src/guides/manage-data/manage-access.md @@ -66,7 +66,7 @@ console.log('Protected data address:', protectedData.address); computations by authorized users and iApps. **Supported types**: Common data types like text, numbers, true/false values, -and files. See the [full list here](/manage-data/dataProtector/types). +and files. See the [full list here](/references/dataProtector/types). **Storage**: Store your data on IPFS or Arweave. For larger files, you can use your own IPFS node. @@ -74,7 +74,7 @@ your own IPFS node. ::: tip Need Help ? Check our -[Schema and Dataset Types guide](/manage-data/guides/handle-schemas-dataset-types) +[Schema and Dataset Types guide](/guides/manage-data/handle-schemas-dataset-types) for detailed formatting instructions. ::: @@ -193,7 +193,7 @@ automatically. **Example**: `pricePerAccess: 1_000_000_000` = 1 RLC per access → **Want to learn more monetization capabilities?** See our detailed -[Monetize Protected Data guide](/manage-data/guides/monetize-protected-data) +[Monetize Protected Data guide](/guides/manage-data/monetize-protected-data) #### numberOfAccess @@ -218,13 +218,13 @@ get a "no dataset orders" error. Set this high enough for your use case. steps: - **Process the data**: Use - [processProtectedData](/manage-data/dataProtector/dataProtectorCore/processProtectedData) + [processProtectedData](/references/dataProtector/dataProtectorCore/processProtectedData) to run computations - **Manage access**: - [Revoke](/manage-data/dataProtector/dataProtectorCore/revokeOneAccess) or - [modify permissions](/manage-data/dataProtector/dataProtectorCore/grantAccess) + [Revoke](/references/dataProtector/dataProtectorCore/revokeOneAccess) or + [modify permissions](/references/dataProtector/dataProtectorCore/grantAccess) anytime - **Learn data types**: Deep dive into - [schemas and dataset types](/manage-data/guides/handle-schemas-dataset-types) + [schemas and dataset types](/guides/manage-data/handle-schemas-dataset-types) - **Monetize data**: Explore - [data monetization strategies](/manage-data/guides/monetize-protected-data) + [data monetization strategies](/guides/manage-data/monetize-protected-data) diff --git a/src/manage-data/guides/monetize-protected-data.md b/src/guides/manage-data/monetize-protected-data.md similarity index 91% rename from src/manage-data/guides/monetize-protected-data.md rename to src/guides/manage-data/monetize-protected-data.md index df89ed41..a544fb0e 100644 --- a/src/manage-data/guides/monetize-protected-data.md +++ b/src/guides/manage-data/monetize-protected-data.md @@ -71,10 +71,10 @@ access time, not individual transactions. ::: tip See It Live -The [Content Creator demo](/overview/use-case-demo/content-creator) shows -DataProtector Sharing in action with file monetization. While it uses the -content-delivery iApp for file streaming, the same patterns work for any iApp - -AI models, data processing, oracles, etc. +The [Content Creator demo](/get-started/use-cases) shows DataProtector Sharing +in action with file monetization. While it uses the content-delivery iApp for +file streaming, the same patterns work for any iApp - AI models, data +processing, oracles, etc. ::: @@ -242,15 +242,14 @@ usage periods, and flexible pricing models. **Ready to start monetizing your data?** Here are your next steps: -- **See it in action**: Try the - [Content Creator demo](/overview/use-case-demo/content-creator) to understand - the full flow +- **See it in action**: Try the [Content Creator demo](/get-started/use-cases) + to understand the full flow - **Start simple**: Begin with - [pay-per-use via grantAccess](/manage-data/guides/create-and-share-access) + [pay-per-use via grantAccess](/guides/manage-data/manage-access) - **Explore sharing**: Try - [DataProtector Sharing](/manage-data/dataProtector/dataProtectorSharing) for + [DataProtector Sharing](/references/dataProtector/dataProtectorSharing) for automated distribution - **Build collections**: Learn about - [collection management](/manage-data/dataProtector/dataProtectorSharing/collection) + [collection management](/references/dataProtector/dataProtectorSharing/collection) - **Set up subscriptions**: Implement - [recurring revenue models](/manage-data/dataProtector/dataProtectorSharing/subscription) + [recurring revenue models](/references/dataProtector/dataProtectorSharing/subscription) diff --git a/src/use-iapp/guides/add-inputs-to-execution.md b/src/guides/use-iapp/add-inputs-to-execution.md similarity index 100% rename from src/use-iapp/guides/add-inputs-to-execution.md rename to src/guides/use-iapp/add-inputs-to-execution.md diff --git a/src/use-iapp/guides/different-ways-to-execute.md b/src/guides/use-iapp/different-ways-to-execute.md similarity index 100% rename from src/use-iapp/guides/different-ways-to-execute.md rename to src/guides/use-iapp/different-ways-to-execute.md diff --git a/src/use-iapp/guides/find-iapps.md b/src/guides/use-iapp/find-iapps.md similarity index 100% rename from src/use-iapp/guides/find-iapps.md rename to src/guides/use-iapp/find-iapps.md diff --git a/src/use-iapp/getting-started.md b/src/guides/use-iapp/getting-started.md similarity index 100% rename from src/use-iapp/getting-started.md rename to src/guides/use-iapp/getting-started.md diff --git a/src/use-iapp/guides/how-to-pay-executions.md b/src/guides/use-iapp/how-to-pay-executions.md similarity index 100% rename from src/use-iapp/guides/how-to-pay-executions.md rename to src/guides/use-iapp/how-to-pay-executions.md diff --git a/src/use-iapp/how-to-pay/how-to-pay-for-web3mail.md b/src/guides/use-iapp/how-to-pay/how-to-pay-for-web3mail.md similarity index 95% rename from src/use-iapp/how-to-pay/how-to-pay-for-web3mail.md rename to src/guides/use-iapp/how-to-pay/how-to-pay-for-web3mail.md index 8eec8cdc..f74b1ee4 100644 --- a/src/use-iapp/how-to-pay/how-to-pay-for-web3mail.md +++ b/src/guides/use-iapp/how-to-pay/how-to-pay-for-web3mail.md @@ -7,8 +7,8 @@ description: # How to Pay for Web3Mail -[Web3Mail](../web3mail) dev tool offers secure, blockchain-based communication -by encrypting emails and protecting user privacy. +[Web3Mail](/references/web3mail) dev tool offers secure, blockchain-based +communication by encrypting emails and protecting user privacy. The `sendEmail` function uses confidential computing power to encrypt and send messages, ensuring secure and decentralized email exchanges. @@ -161,5 +161,5 @@ iexec.account.withdraw(RLC_amount); diff --git a/src/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md b/src/guides/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md similarity index 95% rename from src/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md rename to src/guides/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md index ea3a5b43..a22702db 100644 --- a/src/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md +++ b/src/guides/use-iapp/how-to-pay/how-to-pay-for-web3telegram.md @@ -8,8 +8,8 @@ description: # How to Pay for Web3Telegram -[Web3Telegram](../web3telegram) dev tool offers secure, blockchain-based -communication by encrypting emails and protecting user privacy. +[Web3Telegram](/references/web3telegram) dev tool offers secure, +blockchain-based communication by encrypting emails and protecting user privacy. The `sendTelegram` function uses confidential computing power to encrypt and send messages, ensuring secure and decentralized email exchanges. @@ -174,5 +174,5 @@ iexec.account.withdraw(RLC_amount); diff --git a/src/use-iapp/how-to-pay/pricing-considerations.md b/src/guides/use-iapp/how-to-pay/pricing-considerations.md similarity index 100% rename from src/use-iapp/how-to-pay/pricing-considerations.md rename to src/guides/use-iapp/how-to-pay/pricing-considerations.md diff --git a/src/use-iapp/how-to-pay/voucher.md b/src/guides/use-iapp/how-to-pay/voucher.md similarity index 100% rename from src/use-iapp/how-to-pay/voucher.md rename to src/guides/use-iapp/how-to-pay/voucher.md diff --git a/src/use-iapp/introduction.md b/src/guides/use-iapp/introduction.md similarity index 100% rename from src/use-iapp/introduction.md rename to src/guides/use-iapp/introduction.md diff --git a/src/use-iapp/guides/use-iapp-with-protected-data.md b/src/guides/use-iapp/use-iapp-with-protected-data.md similarity index 100% rename from src/use-iapp/guides/use-iapp-with-protected-data.md rename to src/guides/use-iapp/use-iapp-with-protected-data.md diff --git a/src/index.md b/src/index.md index 5c728c45..8d7bf0ac 100644 --- a/src/index.md +++ b/src/index.md @@ -10,44 +10,44 @@ hero: actions: - theme: brand text: Get Started - link: /overview/welcome + link: /get-started/welcome - theme: alt text: Hello World Tutorial - link: /overview/helloWorld + link: /get-started/helloWorld features: - icon: 🚀 title: Quick Start details: Jump in and start building on iExec in minutes. - link: /overview/helloWorld + link: /get-started/helloWorld - icon: 🔐 title: Protect & Manage Data details: Secure your data with advanced encryption and control access while maintaining privacy using DataProtector - link: /manage-data/what-is-protected-data + link: /get-started/overview/what-is-protected-data - icon: 🤖 title: Build iApps details: Create decentralized applications that run on confidential computing infrastructure with our iApp Generator - link: /build-iapp/what-is-iapp + link: /get-started/overview/what-is-iapp - icon: ⚡ title: Use iApps details: Execute existing iApps including Web3Mail, Web3Telegram for your applications - link: /use-iapp/introduction + link: /guides/use-iapp/introduction - icon: 💰 title: Monetize Data details: Create revenue streams from your data while maintaining full control and privacy - link: /use-iapp/how-to-pay/how-to-pay-for-web3mail + link: /guides/use-iapp/how-to-pay/how-to-pay-for-web3mail - icon: 🧠 title: Protocols details: Deep dive into the core concepts of the protocol and understand how iExec enables privacy, governance, and monetization - link: /protocol/sdk + link: /get-started/protocol/proof-of-contribution --- diff --git a/src/modules/helloWorld/GrantAccess.vue b/src/modules/helloWorld/GrantAccess.vue index 0a765dfa..5b7fae16 100644 --- a/src/modules/helloWorld/GrantAccess.vue +++ b/src/modules/helloWorld/GrantAccess.vue @@ -104,13 +104,14 @@ diff --git a/src/manage-data/dataProtector/dataProtectorCore/revokeAllAccess.md b/src/references/dataProtector/dataProtectorCore/revokeAllAccess.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorCore/revokeAllAccess.md rename to src/references/dataProtector/dataProtectorCore/revokeAllAccess.md diff --git a/src/manage-data/dataProtector/dataProtectorCore/revokeOneAccess.md b/src/references/dataProtector/dataProtectorCore/revokeOneAccess.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorCore/revokeOneAccess.md rename to src/references/dataProtector/dataProtectorCore/revokeOneAccess.md diff --git a/src/manage-data/dataProtector/dataProtectorCore/transferOwnership.md b/src/references/dataProtector/dataProtectorCore/transferOwnership.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorCore/transferOwnership.md rename to src/references/dataProtector/dataProtectorCore/transferOwnership.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing.md b/src/references/dataProtector/dataProtectorSharing.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing.md rename to src/references/dataProtector/dataProtectorSharing.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/collection.md b/src/references/dataProtector/dataProtectorSharing/collection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/collection.md rename to src/references/dataProtector/dataProtectorSharing/collection.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/collection/addToCollection.md b/src/references/dataProtector/dataProtectorSharing/collection/addToCollection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/collection/addToCollection.md rename to src/references/dataProtector/dataProtectorSharing/collection/addToCollection.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/collection/createCollection.md b/src/references/dataProtector/dataProtectorSharing/collection/createCollection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/collection/createCollection.md rename to src/references/dataProtector/dataProtectorSharing/collection/createCollection.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/collection/removeCollection.md b/src/references/dataProtector/dataProtectorSharing/collection/removeCollection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/collection/removeCollection.md rename to src/references/dataProtector/dataProtectorSharing/collection/removeCollection.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection.md b/src/references/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection.md rename to src/references/dataProtector/dataProtectorSharing/collection/removeProtectedDataFromCollection.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/consume/consumeProtectedData.md b/src/references/dataProtector/dataProtectorSharing/consume/consumeProtectedData.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/consume/consumeProtectedData.md rename to src/references/dataProtector/dataProtectorSharing/consume/consumeProtectedData.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/data-sharing-sc.png b/src/references/dataProtector/dataProtectorSharing/data-sharing-sc.png similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/data-sharing-sc.png rename to src/references/dataProtector/dataProtectorSharing/data-sharing-sc.png diff --git a/src/manage-data/dataProtector/dataProtectorSharing/inside-a-collection.png b/src/references/dataProtector/dataProtectorSharing/inside-a-collection.png similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/inside-a-collection.png rename to src/references/dataProtector/dataProtectorSharing/inside-a-collection.png diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionOwners.md b/src/references/dataProtector/dataProtectorSharing/read/getCollectionOwners.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionOwners.md rename to src/references/dataProtector/dataProtectorSharing/read/getCollectionOwners.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions.md b/src/references/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions.md rename to src/references/dataProtector/dataProtectorSharing/read/getCollectionSubscriptions.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionsByOwner.md b/src/references/dataProtector/dataProtectorSharing/read/getCollectionsByOwner.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getCollectionsByOwner.md rename to src/references/dataProtector/dataProtectorSharing/read/getCollectionsByOwner.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections.md b/src/references/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections.md rename to src/references/dataProtector/dataProtectorSharing/read/getProtectedDataInCollections.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams.md b/src/references/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams.md rename to src/references/dataProtector/dataProtectorSharing/read/getProtectedDataPricingParams.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/read/getRentals.md b/src/references/dataProtector/dataProtectorSharing/read/getRentals.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/read/getRentals.md rename to src/references/dataProtector/dataProtectorSharing/read/getRentals.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/renting.md b/src/references/dataProtector/dataProtectorSharing/renting.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/renting.md rename to src/references/dataProtector/dataProtectorSharing/renting.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting.md b/src/references/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting.md rename to src/references/dataProtector/dataProtectorSharing/renting/removeProtectedDataFromRenting.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/renting/rentProtectedData.md b/src/references/dataProtector/dataProtectorSharing/renting/rentProtectedData.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/renting/rentProtectedData.md rename to src/references/dataProtector/dataProtectorSharing/renting/rentProtectedData.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams.md b/src/references/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams.md rename to src/references/dataProtector/dataProtectorSharing/renting/setProtectedDataRentingParams.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting.md b/src/references/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting.md rename to src/references/dataProtector/dataProtectorSharing/renting/setProtectedDataToRenting.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/selling.md b/src/references/dataProtector/dataProtectorSharing/selling.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/selling.md rename to src/references/dataProtector/dataProtectorSharing/selling.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/selling/buyProtectedData.md b/src/references/dataProtector/dataProtectorSharing/selling/buyProtectedData.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/selling/buyProtectedData.md rename to src/references/dataProtector/dataProtectorSharing/selling/buyProtectedData.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale.md b/src/references/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale.md rename to src/references/dataProtector/dataProtectorSharing/selling/removeProtectedDataForSale.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale.md b/src/references/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale.md rename to src/references/dataProtector/dataProtectorSharing/selling/setProtectedDataForSale.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/subscription.md b/src/references/dataProtector/dataProtectorSharing/subscription.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/subscription.md rename to src/references/dataProtector/dataProtectorSharing/subscription.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription.md b/src/references/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription.md rename to src/references/dataProtector/dataProtectorSharing/subscription/removeProtectedDataFromSubscription.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription.md b/src/references/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription.md rename to src/references/dataProtector/dataProtectorSharing/subscription/setProtectedDataToSubscription.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams.md b/src/references/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams.md rename to src/references/dataProtector/dataProtectorSharing/subscription/setSubscriptionParams.md diff --git a/src/manage-data/dataProtector/dataProtectorSharing/subscription/subscribeToCollection.md b/src/references/dataProtector/dataProtectorSharing/subscription/subscribeToCollection.md similarity index 100% rename from src/manage-data/dataProtector/dataProtectorSharing/subscription/subscribeToCollection.md rename to src/references/dataProtector/dataProtectorSharing/subscription/subscribeToCollection.md diff --git a/src/manage-data/dataProtector/getting-started.md b/src/references/dataProtector/getting-started.md similarity index 98% rename from src/manage-data/dataProtector/getting-started.md rename to src/references/dataProtector/getting-started.md index d4f77409..68e07cb2 100644 --- a/src/manage-data/dataProtector/getting-started.md +++ b/src/references/dataProtector/getting-started.md @@ -244,6 +244,6 @@ discontinuity. /> diff --git a/src/manage-data/dataProtector/migrate-from-v1.md b/src/references/dataProtector/migrate-from-v1.md similarity index 98% rename from src/manage-data/dataProtector/migrate-from-v1.md rename to src/references/dataProtector/migrate-from-v1.md index 721fc966..a202d3f1 100644 --- a/src/manage-data/dataProtector/migrate-from-v1.md +++ b/src/references/dataProtector/migrate-from-v1.md @@ -5,7 +5,7 @@ description: the latest npm package --- -# Migrate from V1 to V2 +# Migrate from V1 to V2 ::: tip diff --git a/src/manage-data/dataProtector/types.md b/src/references/dataProtector/types.md similarity index 100% rename from src/manage-data/dataProtector/types.md rename to src/references/dataProtector/types.md diff --git a/src/references/glossary.md b/src/references/glossary.md new file mode 100644 index 00000000..55f92760 --- /dev/null +++ b/src/references/glossary.md @@ -0,0 +1,372 @@ +--- +title: Glossary +description: iExec terms glossary +--- + +# Glossary + +## A + +### Application + +A computer program designed to automate processes. An application is generally +under the control of different communities such as product managers, project +owners, or data center administrators. An application can also be decentralized +thanks to the blockchain: see “DApp”. + +## B + +### Bellecour Sidechain + +iExec’s product sidechain. It is linked to Ethereum Mainnet with a bridge +allowing for the transfer of assets between networks. It allows iExec to be used +without paying Ethereum gas fees. + +See “Sidechain and xRLC” for more information. + +### Beneficiary + +An entity indicated by the requester that benefits from the result of a +computational execution. It can be the requester, a third party, a smart +contract etc. + +## C + +### Confidential Computing / Trusted Computing + +Ensures computation confidentiality through mechanisms of memory encryption at +the hardware level (in a Trusted Execution Environment or TEE). It can be used +so that only authorized code can run inside a protected area and manipulate its +data. In some cases, ensuring that code runs correctly without any third party +altering the execution, is even more important than hiding the computation's +data. + +This concept is called Trusted Computing. These guarantees are critical for a +decentralized cloud where code is being executed on a remote machine, that is +not controlled by the requester. They are also required to prevent leakage while +monetizing data sets. + +See ”Trusted Execution Environments ('TEE')” for more information + +## D + +### Decentralized Application (DApp) + +An application built on a decentralized network that combines a smart contract +and a frontend user interface. A DApp has its backend code running on a +decentralized peer-to-peer network. Contrast this with a traditional application +where the backend code is running in fully controlled environments. + +See “Application” for more information. + +### DApp Provider + +Writes, configures, and deploys applications on the iExec platform. Those +applications can be DApps or legacy (traditional) applications. Providers can +make their applications available for free or ask for a fixed fee for each use +of their application. + +### Dataset + +A dataset is a collection of related sets of information that is composed of +separate elements, such as numbers, semantic-data or variables, that can be +manipulated by a computer for practical application. For example, data within +the medical industry can be use by healthcare professionals, care providers, +insurers, and government agencies. + +### Dataset Provider + +Owns datasets that can be monetized in the iExec marketplace. + +### Deal + +An agreement between all parties (requester and providers) in the iExec network. +A deal is created when requester and providers’ orders are matched in the +marketplace and recorded in the PoCo smart contract. + +## E + +### Ethereum + +A decentralized, open-source blockchain with smart contract functionality. +Ethereum proposes using blockchain technology to maintain a decentralized +payment network and to store computer code that can be used to power +decentralized applications. + +### Enclave + +In confidential computing jargon, an "enclave" is the special memory zone +protected by the CPU. For simplicity's sake, we can refer to private regions of +memory defined by Intel® SGX application as "enclaves". + +### EVM (Ethereum Virtual Machine) + +The Ethereum's execution environment. This is the virtual machine which executes +the smart contracts on the blockchain. + +### Explorer (iExec Explorer) + +Tracks and displays all transactions occuring on iExec’s platform. It provides +detailed information on the latest deals, tasks, apps, and datasets deployed. + +### ERC-20 + +A standard for fungible tokens. This property makes each token exactly the same +in type and value as another token. + +### ERC-721 + +A standard for non-fungible tokens. This property makes each token unique and +capable of having a different value from another token from the same Smart +Contract. This uniqueness may come from a variety of sources, including age, +rarity, or appearance. + +### iExec Academy + +iExec’s content aggregator where people can find content related to the project, +including articles, demos, documentation, and tutorials. + +## I + +### ICO (Initial Coin Offering) + +A fundraising mechanism where a blockchain-based startup mints its own native +crypto asset in exchange for other cryptocurrencies. The goal is to raise funds +and, in turn, create a community of incentivized users who want the project to +succeed so that the presale tokens gain in value. + +## M + +### Mainnet + +An independent blockchain running its own peer-to-peer network with its own +technology and protocol (e.g. Bitcoin and Ethereum). It is a live blockchain +where its own cryptocurrencies or tokens have value (when compared against a +testnet network). + +### Marketplace (iExec) + +The iExec Marketplace connects resource providers with resource users, allowing +anyone to monetize or rent computing power, datasets, and applications. The +marketplace is a smart contract that acts as escrow anytime you need the network +to exchange computing assets. + +### Minting + +A decentralized method that enables to generate a new token without the +involvement of a central authority. It can either be a non-fungible token or a +crypto coin. + +Please note that minting an NFT (non-fungible token) is a different procedure. +To mint an NFT, users usually sign up with a cryptocurrecny wallet on an NFT +marketplace (or other platform). Then that create an NFT by uploading a file and +paying for the creation. Once the transaction is verified, a new NFT is minted. +This process to add NFTs to a blockchain allows creators to sell their photos, +videos, and digital 3D objects. + +See “ERC-721” for more information. + +### MREnclave + +The MREnclave is a hash value that identifies every enclave. It is obtained from +the content of memory pages and access rights. The MREnclave is available after +the TEE application is built. + +## N + +### nRLC + +N in nRLC stands for nano RLC. + +nRLC is the smallest subdivision of the RLC token, 1 RLC equals to 10^9 nRLC. + +nRLC is the base unit for the PoCo, orders prices in a deal are calculated in +nRLC. + +See “Deal and PoCo” for more information. + +## O + +### Oilers + +A term of affection used to designate the iExec community. Oilers are said to be +holding “digital oil”. This term could also be in reference to the iExec +whitepaper that states: “ iExec introduces a new paradigm in cloud computing: it +will allow the trading of computing resources as commodities; in the same way we +may observe with resources such as oil, gold or rice.” + +### Oracle + +Data feeds that connect the off-chain world to blockchain products. Oracles act +as a link between data that exists in traditional web2 and blockchain smart +contracts, and are used to query data in smart contracts. + +### Oracle Factory + +The iExec developer interface which allows users to create custom oracles. This +interface permits users to create oracles for any type of data, without +requiring coding experience, in a few minutes directly from their browser. + +## P + +### PoCo (Proof of Contribution) + +The protocol used by iExec for consensus over off-chain computing. + +The iExec platform provides a network where application providers, workers, and +users can gather and work together. The fully decentralized nature of iExec +implies that no single agent is trusted by default, and that those agents +require incentives to contribute correctly. PoCo is a protocol designed to +provides trust in an open and decentralized environment of untrusted machines. +It also orchestrates the different contributions to the iExec network, ensuring +payments are always fair and timely. + +## R + +### Requester + +A person who buys the execution of a task in the iExec marketplace. + +### RLC (Run on lots of computers) + +An Ethereum (ERC20) token launched during the iExec ICO in 2017. This utility +token is used on the iExec marketplace to buy and sell computing assets. + +### Remote attestation + +As explained by +[Intel](https://software.intel.com/en-us/sgx/attestation-services), the remote +attestation is the process that happens before any exchange between a remote +provider and an enclave. It allows the provider to verify that the expected +software is running in an Intel® SGX-protected way, as well as getting other +details about the application being attested. If the attestation is successful, +a secure communication channel is established between the provider and the +enclave, and secrets can safely land in the latter. + +### Roadmap + +Describes business and technical developments towards the adoption of the iExec +protocol. The timeline for this roadmap is organized by quarter for an overview +on ongoing projects and the future work. It is available here + + +## S + +### Scheduler + +Organizes the work distribution for workers in a worker pool. + +### SDK (Software Development Kit) + +A set of tools for interaction with smart contracts and the iExec’s marketplace. +It is available as a CLI and JS library. Access SDK here: + + +### SGX (Secure Guard Extension by Intel) + +Is a confidential computing technology developed by Intel. + +See “Confidential Computing” for more information. + +### Sidechain + +A controlled blockchain deployed over a data center and linked to Ethereum +Mainnet with a bridge permitting to transfer assets between the two. iExec’s +sidechain “Bellecour” is iExec’s mainnet bridged to ethereum mainnet. + +### Smart Contracts + +The fundamental building blocks of Ethereum applications. They are computer +programs stored on the blockchain that allows us to convert traditional +contracts into digital parallels. Smart contracts are very logical - following +an if this then that structure. This means they behave exactly as programmed and +cannot be changed. + +Nick Szabo used the term "smart contract" in 1994, when he wrote “an +introduction to the concept” and, in 1996, “an exploration of what smart +contracts could do”. + +### SMS (Secret Management Service) + +An encrypted database where users' secrets are stored. + +### sRLC + +S in sRLC stands for Staked RLC. + +The sRLC balance of an account reflects the amount of RLC deposited by the +account on the iExec PoCo smart contract. The sRLC balance of an account is +managed by the PoCo smart contracts to ensure payments across the platform +users. At any time, sRLC can be converted to RLC in the wallet by a withdrawal +operation. + +### Staking (of RLC) + +A mechanism in PoCo that involves a certain amount of Workers’ RLC being +‘locked-up’ during the execution of a task. To prevent malicious workers, the +locked RLC is staked as a security deposit. Workers who computed a false result +will lose their stake. + +See “PoCo” for more information. + +## T + +### Task + +A task within iExec is an instance where computing power is required. + +### Testnet + +Used by programmers and developers to test and troubleshoot the aspects and +features of a blockchain network to ensure it is ready for mainnet launch. + +### Trusted Execution Environment (TEE) + +A hardware secure area used to guarantee the confidentiality, integrity, and +ownership of code and data. + +See” Confidential Computing ” for more information + +## W + +### Whitepaper + +Explain the purpose and technology behind a project. Producing a whitepaper is a +key step for a crypto startup to help investors understand technical information +about its concept; whitepapers usually include a roadmap for how the project +plans to grow and succeed. iExec’s whitepaper is available +[here](https://www.iex.ec/whitepaper) + +### Workers + +Individuals or companies who own computing resources and are willing to make +them available for the computation of tasks against payments in RLC. Similarly +to blockchain miners, workers want a simple solution that will make their +computer part of a large infrastructure that will take care of the details for +them. + +### Worker Pools + +Organize the contributions of Workers. A worker pool is a group of machines, +often with similar characteristics, that is led by a Pool Manager. + +### Worker Pool Manager + +In charge of proposing available computing resources (workers) to task +requesters. + +## X + +### xRLC + +X in xRLC stands for eXternal. + +A xRLC is the native token of iExec sidechains (it means it is used as ETH on +ethereum mainnet). A xRLC is a RLC bridged on an external sidechain and only the +bridge can mint\* xRLC. + +The bridge helps maintain the parity between the main chain and the external +chain. For example, one xRLC on the sidechain has the same value as 1 RLC on the +mainchain. + +See “Sidechain, Bellecour Sidechain or Minting” for more information. diff --git a/src/build-iapp/iapp-generator.md b/src/references/iapp-generator.md similarity index 72% rename from src/build-iapp/iapp-generator.md rename to src/references/iapp-generator.md index b6a1d879..25990a96 100644 --- a/src/build-iapp/iapp-generator.md +++ b/src/references/iapp-generator.md @@ -41,34 +41,34 @@ minutes, not months. Start here to understand what iApps are and how they work: -- **[What Is an iApp?](/build_iapp/iapp-generator/what-is-iapp)** - Core - concepts and TEE overview -- **[Getting Started](/build_iapp/iapp-generator/getting-started)** - Your first +- **[What Is an iApp?](/get-started/overview/what-is-iapp)** - Core concepts and + TEE overview +- **[Getting Started](/references/iapp-generator/getting-started)** - Your first iApp in 15 minutes -- **[Building Your iApp](/build_iapp/iapp-generator/building-your-iexec-app)** - +- **[Building Your iApp](/references/iapp-generator/building-your-iexec-app)** - Complete development guide ### 2. **Master the Development Workflow** Once you've built your first iApp, level up with these practical guides: -- **[Inputs and Outputs](/build_iapp/guides/inputs-and-outputs)** - Handle data +- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data flow in TEE environment -- **[Debugging Your iApp](/build_iapp/guides/debugging-your-iapp)** - - Troubleshoot execution issues -- **[App Access Control and Pricing](/build_iapp/guides/orders)** - Control who - can use your iApp -- **[How to Get and Decrypt Results](/build_iapp/guides/how-to-get-and-decrypt-results)** - +- **[Debugging Your iApp](/guides/build-iapp/debugging)** - Troubleshoot + execution issues +- **[App Access Control and Pricing](/guides/build-iapp/manage-access)** - + Control who can use your iApp +- **[How to Get and Decrypt Results](/guides/build-iapp/how-to-get-and-decrypt-results)** - Retrieve and use outputs ### 3. **Explore Advanced Features** Ready for production? Dive into specialized topics: -- **[Using TDX (Experimental)](/build_iapp/guides/using-tdx-experimental)** - - Next-gen TEE technology -- **[Complete Guides Overview](/build_iapp/guides)** - All development guides in - one place +- **[Using TDX (Experimental)](/guides/build-iapp/using-tdx)** - Next-gen TEE + technology +- **[Complete Guides Overview](/guides/build-iapp/)** - All development guides + in one place ## Why Choose iApp Generator? @@ -99,16 +99,17 @@ applications: ::: tip Quick Path -1. **[Getting Started](/build_iapp/iapp-generator/getting-started)** - Build +1. **[Getting Started](/references/iapp-generator/getting-started)** - Build your first iApp (15 minutes) -2. **[Inputs and Outputs](/build_iapp/guides/inputs-and-outputs)** - Handle data +2. **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data properly -3. **[Debugging](/build_iapp/guides/debugging-your-iapp)** - Fix issues quickly -4. **[App Access Control](/build_iapp/guides/orders)** - Go to production ::: +3. **[Debugging](/guides/build-iapp/debugging)** - Fix issues quickly +4. **[App Access Control](/guides/build-iapp/manage-access)** - Go to production + ::: ### Need Help? -- **[Complete Guides](/build_iapp/guides)** - All development guides +- **[Complete Guides](/guides/build-iapp/)** - All development guides - **[iExec Discord](https://discord.com/invite/pbt9m98wnU)** - Community support - **[Protocol Documentation](https://protocol.docs.iex.ec)** - Technical deep dive diff --git a/src/build-iapp/iapp-generator/building-your-iexec-app.md b/src/references/iapp-generator/building-your-iexec-app.md similarity index 99% rename from src/build-iapp/iapp-generator/building-your-iexec-app.md rename to src/references/iapp-generator/building-your-iexec-app.md index d59293d8..41994eb6 100644 --- a/src/build-iapp/iapp-generator/building-your-iexec-app.md +++ b/src/references/iapp-generator/building-your-iexec-app.md @@ -200,5 +200,5 @@ Once your application is **stable** and **functional**, you can: - 🔗 [iExec Protocol Documentation](https://protocol.docs.iex.ec/) diff --git a/src/build-iapp/iapp-generator/deserializer.md b/src/references/iapp-generator/deserializer.md similarity index 100% rename from src/build-iapp/iapp-generator/deserializer.md rename to src/references/iapp-generator/deserializer.md diff --git a/src/build-iapp/iapp-generator/deserializer/getValue.md b/src/references/iapp-generator/deserializer/getValue.md similarity index 100% rename from src/build-iapp/iapp-generator/deserializer/getValue.md rename to src/references/iapp-generator/deserializer/getValue.md diff --git a/src/build-iapp/iapp-generator/getting-started.md b/src/references/iapp-generator/getting-started.md similarity index 100% rename from src/build-iapp/iapp-generator/getting-started.md rename to src/references/iapp-generator/getting-started.md diff --git a/src/references/sdk.md b/src/references/sdk.md new file mode 100644 index 00000000..54ee6c83 --- /dev/null +++ b/src/references/sdk.md @@ -0,0 +1,35 @@ +--- +title: iExec SDK +description: iExec SDK +--- + +# iExec SDK + +The iExec SDK is a [CLI](#command-line-interface) and a +[JS library](#javascripttypescript-library) that allows easy interactions with +iExec decentralized marketplace in order to run off-chain computations. + +iExec SDK is available on [npm](https://www.npmjs.com/package/iexec) and +[GitHub](https://github.com/iExecBlockchainComputing/iexec-sdk) + +## Command Line Interface + +The CLI documentation is available +[here](https://github.com/iExecBlockchainComputing/iexec-sdk/blob/master/docs/README.md) + +## JavaScript/TypeScript Library + +The library documentation is available +[here](https://github.com/iExecBlockchainComputing/iexec-sdk/blob/master/docs/README.md) + +### Browser integration + + + ⚡  Code Sandbox + + +### NodeJS integration + + + ⚡  Code Sandbox + diff --git a/src/use-iapp/web3mail.md b/src/references/web3mail.md similarity index 72% rename from src/use-iapp/web3mail.md rename to src/references/web3mail.md index 769bb9af..cfff7c07 100644 --- a/src/use-iapp/web3mail.md +++ b/src/references/web3mail.md @@ -17,14 +17,14 @@ via the blockchain. This mechanism helps protect the personal information of the email recipients through use of Ethereum addresses. The email address is stored as a `protectedData` entity using the -[iExec Data Protector tool](./dataProtector.md). Through this mechanism, users -have complete control over which applications may use their email address for -sending communications. Sending a user a message, therefore, requires knowledge -of the Ethereum address of their `protectedData` as well positive authorization -for your account to contact them. Your account may be bound to either an -application or an individual. At any time a user may revoke permissions and this -revocation is immediate, giving users complete control over the privacy and -security of their information. +[iExec Data Protector tool](/references/dataProtector). Through this mechanism, +users have complete control over which applications may use their email address +for sending communications. Sending a user a message, therefore, requires +knowledge of the Ethereum address of their `protectedData` as well positive +authorization for your account to contact them. Your account may be bound to +either an application or an individual. At any time a user may revoke +permissions and this revocation is immediate, giving users complete control over +the privacy and security of their information. Apps using the Web3Mail tool can: diff --git a/src/use-iapp/web3mail/advanced-configuration.md b/src/references/web3mail/advanced-configuration.md similarity index 100% rename from src/use-iapp/web3mail/advanced-configuration.md rename to src/references/web3mail/advanced-configuration.md diff --git a/src/use-iapp/web3mail/getting-started.md b/src/references/web3mail/getting-started.md similarity index 100% rename from src/use-iapp/web3mail/getting-started.md rename to src/references/web3mail/getting-started.md diff --git a/src/use-iapp/web3mail/methods/fetchMyContacts.md b/src/references/web3mail/methods/fetchMyContacts.md similarity index 96% rename from src/use-iapp/web3mail/methods/fetchMyContacts.md rename to src/references/web3mail/methods/fetchMyContacts.md index b7e6952a..5b90ff02 100644 --- a/src/use-iapp/web3mail/methods/fetchMyContacts.md +++ b/src/references/web3mail/methods/fetchMyContacts.md @@ -64,4 +64,4 @@ messages. import { type Contact } from '@iexec/web3mail'; ``` -[`Contact[]`](../../types.md#contact) +[`Contact[]`](/references/dataProtector/types#contact) diff --git a/src/use-iapp/web3mail/methods/fetchUserContacts.md b/src/references/web3mail/methods/fetchUserContacts.md similarity index 97% rename from src/use-iapp/web3mail/methods/fetchUserContacts.md rename to src/references/web3mail/methods/fetchUserContacts.md index 42bad9d3..f030a46f 100644 --- a/src/use-iapp/web3mail/methods/fetchUserContacts.md +++ b/src/references/web3mail/methods/fetchUserContacts.md @@ -84,4 +84,4 @@ with `userAddress` to send them messages. import { type Contact } from '@iexec/web3mail'; ``` -[`Contract[]`](../../types.md#contact) +[`Contract[]`](/references/dataProtector/types#contact) diff --git a/src/use-iapp/web3mail/methods/sendEmail.md b/src/references/web3mail/methods/sendEmail.md similarity index 98% rename from src/use-iapp/web3mail/methods/sendEmail.md rename to src/references/web3mail/methods/sendEmail.md index a5f74ffd..02cce046 100644 --- a/src/use-iapp/web3mail/methods/sendEmail.md +++ b/src/references/web3mail/methods/sendEmail.md @@ -16,14 +16,14 @@ communications and permission must be granted for the `Web3Mail` tool to use the `protectedData` entity containing their email address. This is best done by granting authorization to the Web3Mail app whitelist `0x781482C39CcE25546583EaC4957Fb7Bf04C277D2` as `authorizedApp`. Refer to the -[Data Protector `grantAccess`](../../dataProtector/dataProtectorCore/grantAccess.md) +[Data Protector `grantAccess`](/references/dataProtector/dataProtectorCore/grantAccess) documentation for more details. ::: tip For executing the `sendEmail` method with a voucher or xRLC, refer to the dedicated section in the documentation under -"[How to Pay for web3mail](../../../overview/how-to-pay-for-web3mail)". +"[How to Pay for web3mail](/guides/use-iapp/how-to-pay/how-to-pay-for-web3mail)". ::: diff --git a/src/use-iapp/web3telegram.md b/src/references/web3telegram.md similarity index 92% rename from src/use-iapp/web3telegram.md rename to src/references/web3telegram.md index 95d5e3d9..10094200 100644 --- a/src/use-iapp/web3telegram.md +++ b/src/references/web3telegram.md @@ -17,8 +17,8 @@ blockchain. This mechanism helps protect the personal information of the telegram chat ID recipients through use of Ethereum addresses. The telegram chat ID address is stored as a `protectedData` entity using -[iExec Data Protector](./dataProtector.md). Through this mechanism, users have -complete control over which applications may use their +[iExec Data Protector](/references/dataProtector). Through this mechanism, users +have complete control over which applications may use their [chat ID](./web3telegram/integration-guide.md#_1-get-your-users-to-retrieve-their-chat-id) for sending communications. diff --git a/src/use-iapp/web3telegram/advanced-configuration.md b/src/references/web3telegram/advanced-configuration.md similarity index 100% rename from src/use-iapp/web3telegram/advanced-configuration.md rename to src/references/web3telegram/advanced-configuration.md diff --git a/src/use-iapp/web3telegram/getting-started.md b/src/references/web3telegram/getting-started.md similarity index 100% rename from src/use-iapp/web3telegram/getting-started.md rename to src/references/web3telegram/getting-started.md diff --git a/src/use-iapp/web3telegram/integration-guide.md b/src/references/web3telegram/integration-guide.md similarity index 100% rename from src/use-iapp/web3telegram/integration-guide.md rename to src/references/web3telegram/integration-guide.md diff --git a/src/use-iapp/web3telegram/methods/fetchMyContacts.md b/src/references/web3telegram/methods/fetchMyContacts.md similarity index 96% rename from src/use-iapp/web3telegram/methods/fetchMyContacts.md rename to src/references/web3telegram/methods/fetchMyContacts.md index 26cf1aba..9cfaec5f 100644 --- a/src/use-iapp/web3telegram/methods/fetchMyContacts.md +++ b/src/references/web3telegram/methods/fetchMyContacts.md @@ -64,4 +64,4 @@ messages. import { type Contact } from '@iexec/web3telegram'; ``` -[`Contact[]`](../../types.md#contact) +[`Contact[]`](/references/dataProtector/types#contact) diff --git a/src/use-iapp/web3telegram/methods/fetchUserContacts.md b/src/references/web3telegram/methods/fetchUserContacts.md similarity index 97% rename from src/use-iapp/web3telegram/methods/fetchUserContacts.md rename to src/references/web3telegram/methods/fetchUserContacts.md index 2eeb855b..8cf0011d 100644 --- a/src/use-iapp/web3telegram/methods/fetchUserContacts.md +++ b/src/references/web3telegram/methods/fetchUserContacts.md @@ -84,4 +84,4 @@ with `userAddress` to send them messages. import { type Contact } from '@iexec/web3telegram'; ``` -[`Contract[]`](../../types.md#contact) +[`Contract[]`](/references/dataProtector/types#contact) diff --git a/src/use-iapp/web3telegram/methods/sendTelegram.md b/src/references/web3telegram/methods/sendTelegram.md similarity index 97% rename from src/use-iapp/web3telegram/methods/sendTelegram.md rename to src/references/web3telegram/methods/sendTelegram.md index bf63172b..88f43340 100644 --- a/src/use-iapp/web3telegram/methods/sendTelegram.md +++ b/src/references/web3telegram/methods/sendTelegram.md @@ -16,14 +16,14 @@ permission must be granted for the `Web3Telegram` tool to use the `protectedData` entity containing their chat ID. This is best done by granting authorization to the Web3Telegram app whitelist `0x192C6f5AccE52c81Fcc2670f10611a3665AAA98F` as `authorizedApp`. Refer to the -[Data Protector `grantAccess`](../../dataProtector/dataProtectorCore/grantAccess.md) +[Data Protector `grantAccess`](/references/dataProtector/dataProtectorCore/grantAccess) documentation for more details. ::: tip For executing the `sendTelegram` method with a voucher or xRLC, refer to the dedicated section in the documentation under -"[How to Pay for web3telegram](/tools/web3telegram/how-to-pay-for-web3telegram)". +"[How to Pay for web3telegram](/guides/use-iapp/how-to-pay/how-to-pay-for-web3telegram)". :::