From e6969b8529e9e696e54918cc294483a263b2bba9 Mon Sep 17 00:00:00 2001 From: k3dz0r Date: Thu, 26 Dec 2024 15:48:30 -0300 Subject: [PATCH 1/4] Marketplace, CLI Marketplace: fixed small issues, updated the Upload guide, updates screenshots CLI: cli_commands renamed to commands; fixed links --- docs/cli/cli_commands/offers/index.md | 38 ------- docs/cli/cli_commands/orders/index.md | 19 ---- docs/cli/cli_commands/providers/index.md | 17 --- .../files/delete.md | 6 +- .../files/download.md | 6 +- .../{cli_commands => commands}/files/index.md | 8 +- .../files/upload.md | 12 +-- docs/cli/{cli_commands => commands}/index.md | 32 +++--- .../offers/add-slot.md | 8 +- .../offers/delete-slot.md | 10 +- .../offers/disable.md | 8 +- .../offers/download-content.md | 6 +- .../offers/enable.md | 8 +- .../offers/get-info.md | 6 +- .../offers/get-option.md | 8 +- .../offers/get-slot.md | 10 +- .../{cli_commands => commands}/offers/get.md | 6 +- docs/cli/commands/offers/index.md | 38 +++++++ .../{cli_commands => commands}/offers/list.md | 6 +- .../offers/update-slot.md | 12 +-- .../offers/update.md | 8 +- .../orders/cancel.md | 6 +- .../orders/download-result.md | 4 +- .../{cli_commands => commands}/orders/get.md | 6 +- docs/cli/commands/orders/index.md | 19 ++++ .../{cli_commands => commands}/orders/list.md | 4 +- .../orders/replenish-deposit.md | 4 +- .../providers/get.md | 4 +- docs/cli/commands/providers/index.md | 17 +++ .../providers/list.md | 4 +- .../providers/update.md | 4 +- .../quotes/index.md | 6 +- .../quotes/validate.md | 4 +- .../solutions/generate-key.md | 8 +- .../solutions/index.md | 8 +- .../solutions/prepare.md | 12 +-- .../tokens/balance.md | 6 +- .../tokens/index.md | 8 +- .../tokens/request.md | 6 +- .../workflows/create.md | 16 +-- .../workflows/generate-key.md | 6 +- .../workflows/index.md | 6 +- docs/cli/index.md | 14 +-- .../developers/cli_guides/providers_offers.md | 48 ++++----- docs/developers/cli_guides/quick_guide.md | 10 +- .../deployment_guides/blockchain/oracles.md | 8 +- .../deployment_guides/python/data.md | 2 +- .../deployment_guides/python/exec_result.md | 6 +- .../deployment_guides/python/solution.md | 4 +- .../deployment_guides/tunnels/develop.md | 2 +- .../deployment_guides/tunnels/manual_run.md | 8 +- .../tunnels/static_content.md | 2 +- docs/developers/index.md | 2 +- .../marketplace_gui/confidentiality.md | 2 +- docs/developers/marketplace_gui/index.md | 36 +++---- docs/developers/marketplace_gui/moderation.md | 2 +- docs/marketplace/guides/place-order.md | 4 +- docs/marketplace/guides/troubleshooting.md | 2 +- docs/marketplace/guides/upload.md | 100 +++++++++++------- docs/marketplace/images/hf-gguf.png | Bin 15827 -> 12411 bytes .../images/hf-safetensors-consolidated.png | Bin 18555 -> 16464 bytes .../images/hf-safetensors-duplicates.png | Bin 14090 -> 8383 bytes .../marketplace/orders/order-builder/index.md | 2 +- docs/marketplace/release-history/index.md | 29 +++++ 64 files changed, 381 insertions(+), 332 deletions(-) delete mode 100644 docs/cli/cli_commands/offers/index.md delete mode 100644 docs/cli/cli_commands/orders/index.md delete mode 100644 docs/cli/cli_commands/providers/index.md rename docs/cli/{cli_commands => commands}/files/delete.md (83%) rename docs/cli/{cli_commands => commands}/files/download.md (86%) rename docs/cli/{cli_commands => commands}/files/index.md (54%) rename docs/cli/{cli_commands => commands}/files/upload.md (88%) rename docs/cli/{cli_commands => commands}/index.md (74%) rename docs/cli/{cli_commands => commands}/offers/add-slot.md (94%) rename docs/cli/{cli_commands => commands}/offers/delete-slot.md (72%) rename docs/cli/{cli_commands => commands}/offers/disable.md (80%) rename docs/cli/{cli_commands => commands}/offers/download-content.md (84%) rename docs/cli/{cli_commands => commands}/offers/enable.md (80%) rename docs/cli/{cli_commands => commands}/offers/get-info.md (88%) rename docs/cli/{cli_commands => commands}/offers/get-option.md (83%) rename docs/cli/{cli_commands => commands}/offers/get-slot.md (79%) rename docs/cli/{cli_commands => commands}/offers/get.md (88%) create mode 100644 docs/cli/commands/offers/index.md rename docs/cli/{cli_commands => commands}/offers/list.md (93%) rename docs/cli/{cli_commands => commands}/offers/update-slot.md (71%) rename docs/cli/{cli_commands => commands}/offers/update.md (96%) rename docs/cli/{cli_commands => commands}/orders/cancel.md (80%) rename docs/cli/{cli_commands => commands}/orders/download-result.md (89%) rename docs/cli/{cli_commands => commands}/orders/get.md (92%) create mode 100644 docs/cli/commands/orders/index.md rename docs/cli/{cli_commands => commands}/orders/list.md (93%) rename docs/cli/{cli_commands => commands}/orders/replenish-deposit.md (87%) rename docs/cli/{cli_commands => commands}/providers/get.md (90%) create mode 100644 docs/cli/commands/providers/index.md rename docs/cli/{cli_commands => commands}/providers/list.md (90%) rename docs/cli/{cli_commands => commands}/providers/update.md (93%) rename docs/cli/{cli_commands => commands}/quotes/index.md (64%) rename docs/cli/{cli_commands => commands}/quotes/validate.md (87%) rename docs/cli/{cli_commands => commands}/solutions/generate-key.md (73%) rename docs/cli/{cli_commands => commands}/solutions/index.md (51%) rename docs/cli/{cli_commands => commands}/solutions/prepare.md (88%) rename docs/cli/{cli_commands => commands}/tokens/balance.md (80%) rename docs/cli/{cli_commands => commands}/tokens/index.md (58%) rename docs/cli/{cli_commands => commands}/tokens/request.md (83%) rename docs/cli/{cli_commands => commands}/workflows/create.md (87%) rename docs/cli/{cli_commands => commands}/workflows/generate-key.md (80%) rename docs/cli/{cli_commands => commands}/workflows/index.md (53%) create mode 100644 docs/marketplace/release-history/index.md diff --git a/docs/cli/cli_commands/offers/index.md b/docs/cli/cli_commands/offers/index.md deleted file mode 100644 index fad2da67..00000000 --- a/docs/cli/cli_commands/offers/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: "cli-commands-offers" -title: "offers" -slug: "/cli_commands/offers" -sidebar_position: 6 - ---- - -This command group contains commands to view and manage [offers](/fundamentals/offers). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of these commands. - -## Commands - -| **Command** | **Description** | -| :- | :- | -| [offers list](/cli/cli_commands/offers/offers/list) | Lists available offers. | -| [offers get](/cli/cli_commands/offers/offers/get) | Displays information on an offer. | -| [offers get-info](/cli/cli_commands/offers/offers/get-info) | Displays information on an offer as stored on the blockchain. | -| [offers download-content](/cli/cli_commands/offers/offers/download-content) | Downloads the content of an offer. | -| [offers update](/cli/cli_commands/offers/offers/update) | Updates an offer. | -| [offers disable](/cli/cli_commands/offers/offers/disable) | Disables an enabled offer. | -| [offers enable](/cli/cli_commands/offers/offers/enable) | Enables a disabled offer. | - -### Slot-related commands - -| **Command** | **Description** | -| :- | :- | -| [offers add-slot](/cli/cli_commands/offers/slots/add-slot) | Adds a new slot to an existing offer. | -| [offers update-slot](/cli/cli_commands/offers/slots/update-slot) | Updates a slot. | -| [offers delete-slot](/cli/cli_commands/offers/slots/delete-slot) | Deletes a slot. | -| [offers get-slot](/cli/cli_commands/offers/slots/get-slot) | Displays information on a slot. | - -### Option-related command - -This command only works with compute offers. - -| **Command** | **Description** | -| :- | :- | -| [offers get-option](/cli/cli_commands/offers/options/get-option) | Displays information for an option. | diff --git a/docs/cli/cli_commands/orders/index.md b/docs/cli/cli_commands/orders/index.md deleted file mode 100644 index 0637c7fe..00000000 --- a/docs/cli/cli_commands/orders/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: "cli-orders" -title: "orders" -slug: "/cli_commands/orders" -sidebar_position: 5 - ---- - -This command group contains commands to track and manage [orders](/fundamentals/orders). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of the commands in this group. - -## Commands - -| **Command** | **Description** | -| :- | :- | -| [orders cancel](/cli/cli_commands/orders/cancel) | Cancels an order. | -| [orders download-result](/cli/cli_commands/orders/download-result) | Downloads the order result. | -| [orders get](/cli/cli_commands/orders/get) | Displays information on an order. | -| [orders list](/cli/cli_commands/orders/list) | Lists orders. | -| [orders replenish-deposit](/cli/cli_commands/orders/replenish-deposit) | Replenishes the order deposit. | \ No newline at end of file diff --git a/docs/cli/cli_commands/providers/index.md b/docs/cli/cli_commands/providers/index.md deleted file mode 100644 index 9a99bf59..00000000 --- a/docs/cli/cli_commands/providers/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: "providers" -title: "providers" -slug: "/cli_commands/providers" -sidebar_position: 7 - ---- - -This command group contains commands to view and update [providers](/fundamentals/offers). - -## Commands - -| **Command** | **Description** | -| :- | :- | -| [providers get](/cli/cli_commands/providers/get) | Displays information on a provider using its authority account address. | -| [providers update](/cli/cli_commands/providers/update) | Updates the current provider information. | -| [providers list](/cli/cli_commands/providers/list) | Lists all providers. | \ No newline at end of file diff --git a/docs/cli/cli_commands/files/delete.md b/docs/cli/commands/files/delete.md similarity index 83% rename from docs/cli/cli_commands/files/delete.md rename to docs/cli/commands/files/delete.md index 62f640a8..c8f679dd 100644 --- a/docs/cli/cli_commands/files/delete.md +++ b/docs/cli/commands/files/delete.md @@ -1,13 +1,13 @@ --- id: "cli-files-delete" title: "files delete" -slug: "/cli_commands/files/delete" +slug: "/commands/files/delete" sidebar_label: "delete" --- Deletes a file in remote storage using the information in a resource JSON file. -The resource JSON file is created as a result of the [`files upload`](/cli/cli_commands/files/upload) command. +The resource JSON file is created as a result of the [`files upload`](/cli/commands/files/upload) command. ## Syntax @@ -17,7 +17,7 @@ The resource JSON file is created as a result of the [`files upload`](/cli/cli_c [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/files/download.md b/docs/cli/commands/files/download.md similarity index 86% rename from docs/cli/cli_commands/files/download.md rename to docs/cli/commands/files/download.md index 9753dfe4..45bec22b 100644 --- a/docs/cli/cli_commands/files/download.md +++ b/docs/cli/commands/files/download.md @@ -1,13 +1,13 @@ --- id: "cli-files-download" title: "files download" -slug: "/cli_commands/files/download" +slug: "/commands/files/download" sidebar_label: "download" --- Downloads a file from remote storage and decrypts it using the information in a resource JSON file. -The resource JSON file is created as a result of the [`files upload`](/cli/cli_commands/files/upload) command. +The resource JSON file is created as a result of the [`files upload`](/cli/commands/files/upload) command. ## Syntax @@ -17,7 +17,7 @@ The resource JSON file is created as a result of the [`files upload`](/cli/cli_c [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/files/index.md b/docs/cli/commands/files/index.md similarity index 54% rename from docs/cli/cli_commands/files/index.md rename to docs/cli/commands/files/index.md index c7a31d81..f6c5b853 100644 --- a/docs/cli/cli_commands/files/index.md +++ b/docs/cli/commands/files/index.md @@ -1,7 +1,7 @@ --- id: "cli-files" title: "files" -slug: "/cli_commands/files" +slug: "/commands/files" sidebar_position: 3 --- @@ -14,6 +14,6 @@ Most of these commands require a Storj account and SPCTL configured to use it. R | **Command** | **Description** | | :- | :- | -| [files delete](/cli/cli_commands/files/delete) | Deletes a file in remote storage. | -| [files download](/cli/cli_commands/files/download) | Downloads and decrypt a file from remote storage. | -| [files upload](/cli/cli_commands/files/upload) | Uploads a file to remote storage or creates a storage order. | \ No newline at end of file +| [files delete](/cli/commands/files/delete) | Deletes a file in remote storage. | +| [files download](/cli/commands/files/download) | Downloads and decrypt a file from remote storage. | +| [files upload](/cli/commands/files/upload) | Uploads a file to remote storage or creates a storage order. | \ No newline at end of file diff --git a/docs/cli/cli_commands/files/upload.md b/docs/cli/commands/files/upload.md similarity index 88% rename from docs/cli/cli_commands/files/upload.md rename to docs/cli/commands/files/upload.md index 9c743f3b..ba4fdc6c 100644 --- a/docs/cli/cli_commands/files/upload.md +++ b/docs/cli/commands/files/upload.md @@ -1,7 +1,7 @@ --- id: "cli-files-upload" title: "files upload" -slug: "/cli_commands/files/upload" +slug: "/commands/files/upload" sidebar_label: "upload" --- @@ -9,7 +9,7 @@ Uploads a file to remote storage such as Storj. The primary purpose of this command is to make the uploading files available for download and execution. This is necessary in two cases: -- With the [`workflows create`](/cli/cli_commands/workflows/create) command, **users** can add the uploaded solution or data to an order instead of a Marketplace offer. In this case, a short-term storage period is enough. +- With the [`workflows create`](/cli/commands/workflows/create) command, **users** can add the uploaded solution or data to an order instead of a Marketplace offer. In this case, a short-term storage period is enough. - Solution and data **providers** can store the contents of their offers to make them available for customers' orders. This requires a long-term storage period. Depending on the options, the command provides two ways to upload and store the files. Choose one that suits you better: @@ -17,7 +17,7 @@ Depending on the options, the command provides two ways to upload and store the - **Uploads to storage directly.** This requires a Storj account and SPCTL [configured](/cli#set-up-storj) to use it. The command will upload the file to the root directory of the bucket specified in the SPCTL configuration file. - **Creates a storage order using a Marketplace storage offer.** This does not require a Storj account but requires paying TEE tokens for the order according to the offer pricing and selected lease duration. -The input of the command is a TAR.GZ archive file. For solutions, this file is created by the [`solutions prepare`](/cli/cli_commands/solutions/prepare) command. For data, it is an archive containing the dataset files. +The input of the command is a TAR.GZ archive file. For solutions, this file is created by the [`solutions prepare`](/cli/commands/solutions/prepare) command. For data, it is an archive containing the dataset files. The output of the command is a resource JSON file with the information for a compute provider on how to access the uploaded file. @@ -36,7 +36,7 @@ The output of the command is a resource JSON file with the information for a com [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments @@ -51,7 +51,7 @@ Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax) | `--filename ` | Desired name of the resulting file in storage. The default is a random string. | | `--output ` | Path to save the output resource JSON file. The default is `./resource.json`. | | `--skip-encryption` | Flag to skip file encryption before uploading. The default is `false`. | -| `--metadata ` | Path to a metadata file for adding fields to the resource JSON file. This file is generated by the [solutions prepare](/cli/cli_commands/solutions/prepare) command. | +| `--metadata ` | Path to a metadata file for adding fields to the resource JSON file. This file is generated by the [solutions prepare](/cli/commands/solutions/prepare) command. | | `--max-concurrent ` | Maximum concurrent pieces to upload at once per transfer to limit the number of threads. Use only when dealing with a memory-constrained environment. | | `--storage ` | Option to use a storage offer. State the storage offer ID and the requirement slot ID, separated by a comma. | | `--min-rent-minutes ` | Storage lease period in minutes. Use this option together with `--storage`. The default is `60`. | @@ -89,7 +89,7 @@ Where: - `--storage 25,33`: create a storage order using the [Storj DCS Offer](https://marketplace.superprotocol.com/storage?offer=offerId%3D25&tab=pricing) (offer ID: 25) and the requirement slot with ID 33. - `--min-rent-minutes 120`: set the lease period for 120 minutes. -Since the `--storage` option is set, the command does not require a Storj account. However, when the lease period is over, the content will become unavailable unless you [replenish the order deposit](/cli/cli_commands/orders/replenish-deposit). +Since the `--storage` option is set, the command does not require a Storj account. However, when the lease period is over, the content will become unavailable unless you [replenish the order deposit](/cli/commands/orders/replenish-deposit). ### Example 3. Use additional options diff --git a/docs/cli/cli_commands/index.md b/docs/cli/commands/index.md similarity index 74% rename from docs/cli/cli_commands/index.md rename to docs/cli/commands/index.md index 6aa08e12..4af1326b 100644 --- a/docs/cli/cli_commands/index.md +++ b/docs/cli/commands/index.md @@ -1,7 +1,7 @@ --- -id: "cli_commands" +id: "cli-commands" title: "CLI Commands" -slug: "/cli_commands" +slug: "/commands" sidebar_position: 2 --- @@ -13,14 +13,14 @@ This section contains the list of commands for the Super Protocol CLI tool SPCTL | **Group** | **Description** | | :- | :- | -| [tokens](/cli/cli_commands/tokens) | Receive test TEE and POL test tokens; **testnet only**. | -| [solutions](/cli/cli_commands/solutions) | Prepare a solution for deployment. | -| [files](/cli/cli_commands/files) | Manage files in decentralized storage. | -| [workflows](/cli/cli_commands/workflows) | Create a new order. | -| [orders](/cli/cli_commands/orders) | Manage your orders. | -| [offers](/cli/cli_commands/offers) | View and manage Marketplace offers. | -| [providers](/cli/cli_commands/providers) | View and manage offer providers. | -| [quotes](/cli/cli_commands/quotes) | Verify the authenticity and integrity of a Trusted Execution Environment. | +| [tokens](/cli/commands/tokens) | Receive test TEE and POL test tokens; **testnet only**. | +| [solutions](/cli/commands/solutions) | Prepare a solution for deployment. | +| [files](/cli/commands/files) | Manage files in decentralized storage. | +| [workflows](/cli/commands/workflows) | Create a new order. | +| [orders](/cli/commands/orders) | Manage your orders. | +| [offers](/cli/commands/offers) | View and manage Marketplace offers. | +| [providers](/cli/commands/providers) | View and manage offer providers. | +| [quotes](/cli/commands/quotes) | Verify the authenticity and integrity of a Trusted Execution Environment. | ## Command syntax @@ -30,13 +30,13 @@ SPCTL uses the following syntax format for commands: ./spctl ``` -_Command groups_ contain functionally related commands. Check the complete list of command groups in the [previous section](/cli/cli_commands#command-groups). +_Command groups_ contain functionally related commands. Check the complete list of command groups in the [previous section](/cli/commands#command-groups). _Commands_ perform a specific function, like placing an order or showing the list of providers. -For example, the [`tokens`](/cli/cli_commands/tokens) command group includes the following commands: -- [`balance`](/cli/cli_commands/tokens/balance): checks the balance -- [`request`](/cli/cli_commands/tokens/request): requests testnet tokens. +For example, the [`tokens`](/cli/commands/tokens) command group includes the following commands: +- [`balance`](/cli/commands/tokens/balance): checks the balance +- [`request`](/cli/commands/tokens/request): requests testnet tokens. _Options_ modify the command behavior and are prefixed by double hyphen `--`. For example, `--help` is an option that displays help information for a command. @@ -56,7 +56,7 @@ Never include these special characters, except backslash `\`, in the final comma ### Example -The following is a mandatory option `--solution` of the [`workflows create`](/cli/cli_commands/workflows/create) command: +The following is a mandatory option `--solution` of the [`workflows create`](/cli/commands/workflows/create) command: ``` --solution {,[] | } @@ -71,4 +71,4 @@ So, the final format of this option must be one of the following: - `--solution ,`. For example, `--solution 13,15`. - `--solution `. For example, `--solution ./python-solution.json`. -Read the descriptions of arguments and options and refer to the examples for more information. If you have any issues or questions, contact Super Protocol on [Discord](https://discord.gg/superprotocol). Community Managers will be happy to help. \ No newline at end of file +Read the descriptions of arguments and options and refer to the examples for more information. If you have any issues or questions, contact Super Protocol on [Discord](https://discord.gg/superprotocol). \ No newline at end of file diff --git a/docs/cli/cli_commands/offers/add-slot.md b/docs/cli/commands/offers/add-slot.md similarity index 94% rename from docs/cli/cli_commands/offers/add-slot.md rename to docs/cli/commands/offers/add-slot.md index 6a130b21..a8bc5d3b 100644 --- a/docs/cli/cli_commands/offers/add-slot.md +++ b/docs/cli/commands/offers/add-slot.md @@ -1,9 +1,9 @@ --- -id: "add-slot" +id: "cli-offers-add-slot" title: "offers add-slot" -slug: "/cli_commands/offers/slots/add-slot" +slug: "/commands/offers/add-slot" sidebar_label: "add-slot" -sidebar_position: 10 +sidebar_position: 8 --- Creates an additional [requirement slot](/fundamentals/slots#requirements) in an offer using the information in an offer slot JSON file. @@ -22,7 +22,7 @@ Refer to the [Providers and Offers](/developers/cli_guides/providers_offers#offe [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/delete-slot.md b/docs/cli/commands/offers/delete-slot.md similarity index 72% rename from docs/cli/cli_commands/offers/delete-slot.md rename to docs/cli/commands/offers/delete-slot.md index a8a56e94..3d053d95 100644 --- a/docs/cli/cli_commands/offers/delete-slot.md +++ b/docs/cli/commands/offers/delete-slot.md @@ -1,16 +1,16 @@ --- -id: "delete-slot" +id: "cli-offers-delete-slot" title: "offers delete-slot" -slug: "/cli_commands/offers/slots/delete-slot" +slug: "/commands/offers/delete-slot" sidebar_label: "delete-slot" -sidebar_position: 12 +sidebar_position: 10 --- Deletes a [requirement slot](/fundamentals/slots#requirements) in an [offer](/fundamentals/offers). **Important:** This command requires SPCTL with the [provider configuration file](/cli#for-offer-providers). -Use the [`offers get`](/cli/cli_commands/offers/offers/get) command to get the IDs of all slots in an offer. Use the [`offers get-slot`](/cli/cli_commands/offers/slots/get-slot) command to get additional information on a slot. +Use the [`offers get`](/cli/commands/offers/get) command to get the IDs of all slots in an offer. Use the [`offers get-slot`](/cli/commands/offers/get-slot) command to get additional information on a slot. ## Syntax @@ -22,7 +22,7 @@ Use the [`offers get`](/cli/cli_commands/offers/offers/get) command to get the I [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/disable.md b/docs/cli/commands/offers/disable.md similarity index 80% rename from docs/cli/cli_commands/offers/disable.md rename to docs/cli/commands/offers/disable.md index 565b47a1..760f8586 100644 --- a/docs/cli/cli_commands/offers/disable.md +++ b/docs/cli/commands/offers/disable.md @@ -1,9 +1,9 @@ --- -id: "offers-disable" +id: "cli-offers-disable" title: "offers disable" -slug: "/cli_commands/offers/offers/disable" +slug: "/commands/offers/disable" sidebar_label: "disable" -sidebar_position: 7 +sidebar_position: 6 --- Disables an existing enabled offer. @@ -18,7 +18,7 @@ Disables an existing enabled offer. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/download-content.md b/docs/cli/commands/offers/download-content.md similarity index 84% rename from docs/cli/cli_commands/offers/download-content.md rename to docs/cli/commands/offers/download-content.md index 18675600..4c797560 100644 --- a/docs/cli/cli_commands/offers/download-content.md +++ b/docs/cli/commands/offers/download-content.md @@ -1,7 +1,7 @@ --- -id: "offers-download-content" +id: "cli-offers-download-content" title: "offers download-content" -slug: "/cli_commands/offers/offers/download-content" +slug: "/commands/offers/download-content" sidebar_label: "download-content" sidebar_position: 4 --- @@ -19,7 +19,7 @@ The command only works with offers that allow this operation. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/enable.md b/docs/cli/commands/offers/enable.md similarity index 80% rename from docs/cli/cli_commands/offers/enable.md rename to docs/cli/commands/offers/enable.md index 1a5ebcfc..a2c963d8 100644 --- a/docs/cli/cli_commands/offers/enable.md +++ b/docs/cli/commands/offers/enable.md @@ -1,9 +1,9 @@ --- -id: "offers-enable" +id: "cli-offers-enable" title: "offers enable" -slug: "/cli_commands/offers/offers/enable" +slug: "/commands/offers/enable" sidebar_label: "enable" -sidebar_position: 8 +sidebar_position: 7 --- Enables an existing disabled offer. @@ -18,7 +18,7 @@ Enables an existing disabled offer. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/get-info.md b/docs/cli/commands/offers/get-info.md similarity index 88% rename from docs/cli/cli_commands/offers/get-info.md rename to docs/cli/commands/offers/get-info.md index 9b64586c..fc4a5643 100644 --- a/docs/cli/cli_commands/offers/get-info.md +++ b/docs/cli/commands/offers/get-info.md @@ -1,7 +1,7 @@ --- -id: "offers-get-info" +id: "cli-offers-get-info" title: "offers get-info" -slug: "/cli_commands/offers/offers/get-info" +slug: "/commands/offers/get-info" sidebar_label: "get-info" sidebar_position: 3 --- @@ -17,7 +17,7 @@ Displays the information on an offer as stored on the blockchain. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/get-option.md b/docs/cli/commands/offers/get-option.md similarity index 83% rename from docs/cli/cli_commands/offers/get-option.md rename to docs/cli/commands/offers/get-option.md index ea089bcd..f354c8fd 100644 --- a/docs/cli/cli_commands/offers/get-option.md +++ b/docs/cli/commands/offers/get-option.md @@ -1,9 +1,9 @@ --- -id: "get-option" +id: "cli-offers-get-option" title: "offers get-option" -slug: "/cli_commands/offers/options/get-option" +slug: "/commands/offers/get-option" sidebar_label: "get-option" -sidebar_position: 9 +sidebar_position: 12 --- Displays the information on a [configuration option](/fundamentals/slots) of a compute offer. @@ -18,7 +18,7 @@ Displays the information on a [configuration option](/fundamentals/slots) of a c [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options diff --git a/docs/cli/cli_commands/offers/get-slot.md b/docs/cli/commands/offers/get-slot.md similarity index 79% rename from docs/cli/cli_commands/offers/get-slot.md rename to docs/cli/commands/offers/get-slot.md index c00605f7..5f927d50 100644 --- a/docs/cli/cli_commands/offers/get-slot.md +++ b/docs/cli/commands/offers/get-slot.md @@ -1,14 +1,14 @@ --- -id: "offers-get-slot" +id: "cli-offers-get-slot" title: "offers get-slot" -slug: "/cli_commands/offers/slots/get-slot" +slug: "/commands/offers/get-slot" sidebar_label: "get-slot" -sidebar_position: 13 +sidebar_position: 11 --- Displays the information for a [requirement slot](/fundamentals/slots#requirements) in an offer. -Use the [`offers get`](/cli/cli_commands/offers/offers/get) command to get the IDs of all slots in an offer. +Use the [`offers get`](/cli/commands/offers/get) command to get the IDs of all slots in an offer. ## Syntax @@ -21,7 +21,7 @@ Use the [`offers get`](/cli/cli_commands/offers/offers/get) command to get the I [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/get.md b/docs/cli/commands/offers/get.md similarity index 88% rename from docs/cli/cli_commands/offers/get.md rename to docs/cli/commands/offers/get.md index 6cf5991a..0be6bb41 100644 --- a/docs/cli/cli_commands/offers/get.md +++ b/docs/cli/commands/offers/get.md @@ -1,7 +1,7 @@ --- -id: "offers-get" +id: "cli-offers-get" title: "offers get" -slug: "/cli_commands/offers/offers/get" +slug: "/commands/offers/get" sidebar_label: "get" sidebar_position: 2 --- @@ -17,7 +17,7 @@ Displays information on an offer. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/commands/offers/index.md b/docs/cli/commands/offers/index.md new file mode 100644 index 00000000..50fa6d7d --- /dev/null +++ b/docs/cli/commands/offers/index.md @@ -0,0 +1,38 @@ +--- +id: "cli-offers" +title: "offers" +slug: "/commands/offers" +sidebar_position: 6 + +--- + +This command group contains commands to view and manage [offers](/fundamentals/offers). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of these commands. + +## Commands + +| **Command** | **Description** | +| :- | :- | +| [offers list](/cli/commands/offers/list) | Lists available offers. | +| [offers get](/cli/commands/offers/get) | Displays information on an offer. | +| [offers get-info](/cli/commands/offers/get-info) | Displays information on an offer as stored on the blockchain. | +| [offers download-content](/cli/commands/offers/download-content) | Downloads the content of an offer. | +| [offers update](/cli/commands/offers/update) | Updates an offer. | +| [offers disable](/cli/commands/offers/disable) | Disables an enabled offer. | +| [offers enable](/cli/commands/offers/enable) | Enables a disabled offer. | + +### Slot-related commands + +| **Command** | **Description** | +| :- | :- | +| [offers add-slot](/cli/commands/offers/add-slot) | Adds a new slot to an existing offer. | +| [offers update-slot](/cli/commands/offers/update-slot) | Updates a slot. | +| [offers delete-slot](/cli/commands/offers/delete-slot) | Deletes a slot. | +| [offers get-slot](/cli/commands/offers/get-slot) | Displays information on a slot. | + +### Option-related command + +This command only works with compute offers. + +| **Command** | **Description** | +| :- | :- | +| [offers get-option](/cli/commands/offers/get-option) | Displays information for an option. | diff --git a/docs/cli/cli_commands/offers/list.md b/docs/cli/commands/offers/list.md similarity index 93% rename from docs/cli/cli_commands/offers/list.md rename to docs/cli/commands/offers/list.md index cf54ceae..253d1ac6 100644 --- a/docs/cli/cli_commands/offers/list.md +++ b/docs/cli/commands/offers/list.md @@ -1,7 +1,7 @@ --- -id: "offers-list" +id: "cli-offers-list" title: "offers list" -slug: "/cli_commands/offers/offers/list" +slug: "/commands/offers/list" sidebar_label: "list" sidebar_position: 1 --- @@ -20,7 +20,7 @@ Displays a list of available offers. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/update-slot.md b/docs/cli/commands/offers/update-slot.md similarity index 71% rename from docs/cli/cli_commands/offers/update-slot.md rename to docs/cli/commands/offers/update-slot.md index c70bb92d..a7898237 100644 --- a/docs/cli/cli_commands/offers/update-slot.md +++ b/docs/cli/commands/offers/update-slot.md @@ -1,18 +1,18 @@ --- -id: "update-slot" +id: "cli-offers-update-slot" title: "offers update-slot" -slug: "/cli_commands/offers/slots/update-slot" +slug: "/commands/offers/update-slot" sidebar_label: "update-slot" -sidebar_position: 11 +sidebar_position: 9 --- Updates a [requirement slot](/fundamentals/slots#requirements) in an existing offer using the information in a JSON file. **Important:** This command requires SPCTL with the [provider configuration file](/cli#for-offer-providers). -Use the [`offers get`](/cli/cli_commands/offers/offers/get) command to get the IDs of all slots in an offer. Use the [`offers get-slot`](/cli/cli_commands/offers/slots/get-slot) command to get additional information on a slot. +Use the [`offers get`](/cli/commands/offers/get) command to get the IDs of all slots in an offer. Use the [`offers get-slot`](/cli/commands/offers/get-slot) command to get additional information on a slot. -Refer to [Offer requirements](/developers/cli_guides/providers_offers#offer-requirements) to create the initial offer requirements. Refer to the description of the [`offers add-slot`](/cli/cli_commands/offers/slots/add-slot) command for the JSON file format and object descriptions. +Refer to [Offer requirements](/developers/cli_guides/providers_offers#offer-requirements) to create the initial offer requirements. Refer to the description of the [`offers add-slot`](/cli/commands/offers/add-slot) command for the JSON file format and object descriptions. ## Syntax @@ -25,7 +25,7 @@ Refer to [Offer requirements](/developers/cli_guides/providers_offers#offer-requ [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/offers/update.md b/docs/cli/commands/offers/update.md similarity index 96% rename from docs/cli/cli_commands/offers/update.md rename to docs/cli/commands/offers/update.md index 606345a3..fe51fd0c 100644 --- a/docs/cli/cli_commands/offers/update.md +++ b/docs/cli/commands/offers/update.md @@ -1,9 +1,9 @@ --- -id: "offers-update" +id: "cli-offers-update" title: "offers update" -slug: "/cli_commands/offers/offers/update" +slug: "/commands/offers/update" sidebar_label: "update" -sidebar_position: 6 +sidebar_position: 5 --- Updates information of an existing offer using an offer description JSON file. @@ -21,7 +21,7 @@ Refer to the [Providers and Offers](/developers/cli_guides/providers_offers#offe [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/orders/cancel.md b/docs/cli/commands/orders/cancel.md similarity index 80% rename from docs/cli/cli_commands/orders/cancel.md rename to docs/cli/commands/orders/cancel.md index 33c5dbff..ad835ddf 100644 --- a/docs/cli/cli_commands/orders/cancel.md +++ b/docs/cli/commands/orders/cancel.md @@ -1,7 +1,7 @@ --- -id: "orders-cancel" +id: "cli-orders-cancel" title: "orders cancel" -slug: "/cli_commands/orders/cancel" +slug: "/commands/orders/cancel" sidebar_label: "cancel" --- @@ -15,7 +15,7 @@ Cancels an order. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/orders/download-result.md b/docs/cli/commands/orders/download-result.md similarity index 89% rename from docs/cli/cli_commands/orders/download-result.md rename to docs/cli/commands/orders/download-result.md index 191e81c6..920f7c49 100644 --- a/docs/cli/cli_commands/orders/download-result.md +++ b/docs/cli/commands/orders/download-result.md @@ -1,7 +1,7 @@ --- id: "cli-orders-download-result" title: "orders download-result" -slug: "/cli_commands/orders/download-result" +slug: "/commands/orders/download-result" sidebar_label: "download-result" --- @@ -23,7 +23,7 @@ If the order status is `Error`, the result archive will contain a text file with [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/orders/get.md b/docs/cli/commands/orders/get.md similarity index 92% rename from docs/cli/cli_commands/orders/get.md rename to docs/cli/commands/orders/get.md index efd336e4..6ac0953c 100644 --- a/docs/cli/cli_commands/orders/get.md +++ b/docs/cli/commands/orders/get.md @@ -1,7 +1,7 @@ --- -id: "orders-get" +id: "cli-orders-get" title: "orders get" -slug: "/cli_commands/orders/get" +slug: "/commands/orders/get" sidebar_label: "get" --- @@ -20,7 +20,7 @@ This command allows you to check any order, not only yours. The information on a [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/commands/orders/index.md b/docs/cli/commands/orders/index.md new file mode 100644 index 00000000..9cb0e050 --- /dev/null +++ b/docs/cli/commands/orders/index.md @@ -0,0 +1,19 @@ +--- +id: "cli-orders" +title: "orders" +slug: "/commands/orders" +sidebar_position: 5 + +--- + +This command group contains commands to track and manage [orders](/fundamentals/orders). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of the commands in this group. + +## Commands + +| **Command** | **Description** | +| :- | :- | +| [orders cancel](/cli/commands/orders/cancel) | Cancels an order. | +| [orders download-result](/cli/commands/orders/download-result) | Downloads the order result. | +| [orders get](/cli/commands/orders/get) | Displays information on an order. | +| [orders list](/cli/commands/orders/list) | Lists orders. | +| [orders replenish-deposit](/cli/commands/orders/replenish-deposit) | Replenishes the order deposit. | \ No newline at end of file diff --git a/docs/cli/cli_commands/orders/list.md b/docs/cli/commands/orders/list.md similarity index 93% rename from docs/cli/cli_commands/orders/list.md rename to docs/cli/commands/orders/list.md index a9ea65ea..3f9081ac 100644 --- a/docs/cli/cli_commands/orders/list.md +++ b/docs/cli/commands/orders/list.md @@ -1,7 +1,7 @@ --- id: "cli-orders-list" title: "orders list" -slug: "/cli_commands/orders/list" +slug: "/commands/orders/list" sidebar_label: "list" --- @@ -23,7 +23,7 @@ This command displays a list of all orders and suborders, unless the `--my-accou [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options diff --git a/docs/cli/cli_commands/orders/replenish-deposit.md b/docs/cli/commands/orders/replenish-deposit.md similarity index 87% rename from docs/cli/cli_commands/orders/replenish-deposit.md rename to docs/cli/commands/orders/replenish-deposit.md index 0f85b23d..58d5775e 100644 --- a/docs/cli/cli_commands/orders/replenish-deposit.md +++ b/docs/cli/commands/orders/replenish-deposit.md @@ -1,7 +1,7 @@ --- id: "cli-orders-replenish-deposit" title: "orders replenish-deposit" -slug: "/cli_commands/orders/replenish-deposit" +slug: "/commands/orders/replenish-deposit" sidebar_label: "replenish-deposit" --- @@ -17,7 +17,7 @@ Certain orders require a positive deposit balance to keep running. For example, [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/providers/get.md b/docs/cli/commands/providers/get.md similarity index 90% rename from docs/cli/cli_commands/providers/get.md rename to docs/cli/commands/providers/get.md index 064ca3c1..36f16a6d 100644 --- a/docs/cli/cli_commands/providers/get.md +++ b/docs/cli/commands/providers/get.md @@ -1,7 +1,7 @@ --- id: "cli-providers-get" title: "providers get" -slug: "/cli_commands/providers/get" +slug: "/commands/providers/get" sidebar_label: "get" --- @@ -16,7 +16,7 @@ Displays the information on a provider using its authority account address. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/commands/providers/index.md b/docs/cli/commands/providers/index.md new file mode 100644 index 00000000..b3c7e5d1 --- /dev/null +++ b/docs/cli/commands/providers/index.md @@ -0,0 +1,17 @@ +--- +id: "cli-providers" +title: "providers" +slug: "/commands/providers" +sidebar_position: 7 + +--- + +This command group contains commands to view and update [providers](/fundamentals/offers). + +## Commands + +| **Command** | **Description** | +| :- | :- | +| [providers get](/cli/commands/providers/get) | Displays information on a provider using its authority account address. | +| [providers update](/cli/commands/providers/update) | Updates the current provider information. | +| [providers list](/cli/commands/providers/list) | Lists all providers. | \ No newline at end of file diff --git a/docs/cli/cli_commands/providers/list.md b/docs/cli/commands/providers/list.md similarity index 90% rename from docs/cli/cli_commands/providers/list.md rename to docs/cli/commands/providers/list.md index 36c82130..746e9da6 100644 --- a/docs/cli/cli_commands/providers/list.md +++ b/docs/cli/commands/providers/list.md @@ -1,7 +1,7 @@ --- id: "cli-providers-list" title: "providers list" -slug: "/cli_commands/providers/list" +slug: "/commands/providers/list" sidebar_label: "list" --- @@ -16,7 +16,7 @@ Lists all registered providers. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options diff --git a/docs/cli/cli_commands/providers/update.md b/docs/cli/commands/providers/update.md similarity index 93% rename from docs/cli/cli_commands/providers/update.md rename to docs/cli/commands/providers/update.md index a8c44f0e..111d9fd8 100644 --- a/docs/cli/cli_commands/providers/update.md +++ b/docs/cli/commands/providers/update.md @@ -1,7 +1,7 @@ --- id: "cli-providers-update" title: "providers update" -slug: "/cli_commands/providers/update" +slug: "/commands/providers/update" sidebar_label: "update" --- @@ -20,7 +20,7 @@ Provider Tools creates a provider info JSON file in [Step 4 of the Providers and [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options diff --git a/docs/cli/cli_commands/quotes/index.md b/docs/cli/commands/quotes/index.md similarity index 64% rename from docs/cli/cli_commands/quotes/index.md rename to docs/cli/commands/quotes/index.md index 30db8c6d..633c72ba 100644 --- a/docs/cli/cli_commands/quotes/index.md +++ b/docs/cli/commands/quotes/index.md @@ -1,7 +1,7 @@ --- -id: "cli-files" +id: "cli-quotes" title: "quotes" -slug: "/cli_commands/quotes" +slug: "/commands/quotes" sidebar_position: 9 --- @@ -12,4 +12,4 @@ This command group contains a single command to verify the authenticity and inte | **Command** | **Description** | | :- | :- | -| [quotes validate](/cli/cli_commands/quotes/validate) | Checks the confidentiality of a domain. | \ No newline at end of file +| [quotes validate](/cli/commands/quotes/validate) | Checks the confidentiality of a domain. | \ No newline at end of file diff --git a/docs/cli/cli_commands/quotes/validate.md b/docs/cli/commands/quotes/validate.md similarity index 87% rename from docs/cli/cli_commands/quotes/validate.md rename to docs/cli/commands/quotes/validate.md index beb2e408..ce30c6a7 100644 --- a/docs/cli/cli_commands/quotes/validate.md +++ b/docs/cli/commands/quotes/validate.md @@ -1,7 +1,7 @@ --- id: "cli-quotes-validate" title: "quotes validate" -slug: "/cli_commands/quotes/validate" +slug: "/commands/quotes/validate" sidebar_label: "validate" --- @@ -17,7 +17,7 @@ In the Marketplace GUI, use the [**Check Confidentiality**](/developers/marketpl [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/solutions/generate-key.md b/docs/cli/commands/solutions/generate-key.md similarity index 73% rename from docs/cli/cli_commands/solutions/generate-key.md rename to docs/cli/commands/solutions/generate-key.md index d0a79c73..627dceb8 100644 --- a/docs/cli/cli_commands/solutions/generate-key.md +++ b/docs/cli/commands/solutions/generate-key.md @@ -1,13 +1,13 @@ --- -id: "solutions-generate-key" +id: "cli-solutions-generate-key" title: "solutions generate-key" -slug: "/cli_commands/solutions/generate-key" +slug: "/commands/solutions/generate-key" sidebar_label: "generate-key" --- Generates a signing key necessary to prepare a solution. -Docker needs this key to [pack a solution](/cli/cli_commands/solutions/prepare) into a container. +Docker needs this key to [pack a solution](/cli/commands/solutions/prepare) into a container. ## Syntax @@ -17,7 +17,7 @@ Docker needs this key to [pack a solution](/cli/cli_commands/solutions/prepare) [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/solutions/index.md b/docs/cli/commands/solutions/index.md similarity index 51% rename from docs/cli/cli_commands/solutions/index.md rename to docs/cli/commands/solutions/index.md index 621966b1..726c250c 100644 --- a/docs/cli/cli_commands/solutions/index.md +++ b/docs/cli/commands/solutions/index.md @@ -1,7 +1,7 @@ --- -id: "solutions" +id: "cli-solutions" title: "solutions" -slug: "/cli_commands/solutions" +slug: "/commands/solutions" sidebar_position: 2 --- @@ -12,5 +12,5 @@ This command group contains commands to prepare a solution for deployment on Sup | **Command** | **Description** | | :- | :- | -| [solutions generate-key](/cli/cli_commands/solutions/generate-key) | Generates a solution signing key. | -| [solutions prepare](/cli/cli_commands/solutions/prepare) | Prepares a solution for deployment. | \ No newline at end of file +| [solutions generate-key](/cli/commands/solutions/generate-key) | Generates a solution signing key. | +| [solutions prepare](/cli/commands/solutions/prepare) | Prepares a solution for deployment. | \ No newline at end of file diff --git a/docs/cli/cli_commands/solutions/prepare.md b/docs/cli/commands/solutions/prepare.md similarity index 88% rename from docs/cli/cli_commands/solutions/prepare.md rename to docs/cli/commands/solutions/prepare.md index bcb696e8..914c1865 100644 --- a/docs/cli/cli_commands/solutions/prepare.md +++ b/docs/cli/commands/solutions/prepare.md @@ -1,19 +1,19 @@ --- -id: "solutions-prepare" +id: "cli-solutions-prepare" title: "solutions prepare" -slug: "/cli_commands/solutions/prepare" +slug: "/commands/solutions/prepare" sidebar_label: "prepare" --- Packs and signs a solution with [Gramine](https://gramineproject.io/) and writes a [manifest](https://gramine.readthedocs.io/en/stable/manifest-syntax.html). -This allows the execution of the "graminized" solution code inside a Trusted Execution Environment. When the solution is prepared and packed, you can [upload](/cli/cli_commands/files/upload) the resulting archive to a distributed storage to use the solution in orders. +This allows the execution of the "graminized" solution code inside a Trusted Execution Environment. When the solution is prepared and packed, you can [upload](/cli/commands/files/upload) the resulting archive to a distributed storage to use the solution in orders. The input of the command is the following: - Directory with the solution and all its dependencies -- Signing key file generated by the [solutions generate-key](/cli/cli_commands/solutions/generate-key) command -- Node.js or Python base image downloaded from their respective offers using the [offers download-content](/cli/cli_commands/offers/offers/download-content) command: +- Signing key file generated by the [solutions generate-key](/cli/commands/solutions/generate-key) command +- Node.js or Python base image downloaded from their respective offers using the [offers download-content](/cli/commands/offers/download-content) command: + Python Base Image: `./spctl offers download-content 5` + Node.js Base Image: `./spctl offers download-content 6`. @@ -42,7 +42,7 @@ Note that the base image is graminized but not included in the output archive fi [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Arguments diff --git a/docs/cli/cli_commands/tokens/balance.md b/docs/cli/commands/tokens/balance.md similarity index 80% rename from docs/cli/cli_commands/tokens/balance.md rename to docs/cli/commands/tokens/balance.md index e6d84369..71d39e91 100644 --- a/docs/cli/cli_commands/tokens/balance.md +++ b/docs/cli/commands/tokens/balance.md @@ -1,7 +1,7 @@ --- -id: "tokens-balance" +id: "cli-tokens-balance" title: "tokens balance" -slug: "/cli_commands/tokens/balance" +slug: "/commands/tokens/balance" sidebar_label: "balance" --- @@ -15,7 +15,7 @@ Displays the balance of TEE and POL tokens in your wallet. [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Option diff --git a/docs/cli/cli_commands/tokens/index.md b/docs/cli/commands/tokens/index.md similarity index 58% rename from docs/cli/cli_commands/tokens/index.md rename to docs/cli/commands/tokens/index.md index e534e884..23c41cd8 100644 --- a/docs/cli/cli_commands/tokens/index.md +++ b/docs/cli/commands/tokens/index.md @@ -1,7 +1,7 @@ --- -id: "tokens" +id: "cli-tokens" title: "tokens" -slug: "/cli_commands/tokens" +slug: "/commands/tokens" sidebar_position: 1 --- @@ -14,5 +14,5 @@ TEE tokens are necessary to pay for orders in Super Protocol. POL tokens are for | **Command** | **Description** | | :- | :- | -| [tokens balance](/cli/cli_commands/tokens/balance) | Gets the wallet balance. | -| [tokens request](/cli/cli_commands/tokens/request) | Requests test tokens; **testnet only**. | +| [tokens balance](/cli/commands/tokens/balance) | Gets the wallet balance. | +| [tokens request](/cli/commands/tokens/request) | Requests test tokens; **testnet only**. | diff --git a/docs/cli/cli_commands/tokens/request.md b/docs/cli/commands/tokens/request.md similarity index 83% rename from docs/cli/cli_commands/tokens/request.md rename to docs/cli/commands/tokens/request.md index e919ccbf..205eb807 100644 --- a/docs/cli/cli_commands/tokens/request.md +++ b/docs/cli/commands/tokens/request.md @@ -1,7 +1,7 @@ --- -id: "tokens-request" +id: "cli-tokens-request" title: "tokens request" -slug: "/cli_commands/tokens/request" +slug: "/commands/tokens/request" sidebar_label: "request" --- @@ -19,7 +19,7 @@ This command is only available during the Testnet. Be mindful of [Testnet limita [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options diff --git a/docs/cli/cli_commands/workflows/create.md b/docs/cli/commands/workflows/create.md similarity index 87% rename from docs/cli/cli_commands/workflows/create.md rename to docs/cli/commands/workflows/create.md index 8f3910fb..23f4458e 100644 --- a/docs/cli/cli_commands/workflows/create.md +++ b/docs/cli/commands/workflows/create.md @@ -1,15 +1,15 @@ --- -id: "create" +id: "cli-workflows-create" title: "workflows create" -slug: "/cli_commands/workflows/create" +slug: "/commands/workflows/create" sidebar_label: "create" --- Creates a main compute order and necessary suborders: solution, data, and storage. -The output of the command contains the order ID necessary to track and manage the order with the [`orders`](/cli/cli_commands/orders) commands or via the [Marketplace GUI](/developers/marketplace/). +The output of the command contains the order ID necessary to track and manage the order with the [`orders`](/cli/commands/orders) commands or via the [Marketplace GUI](/developers/marketplace/). -For solutions and data, you can add to an order either Marketplace [offers](/fundamentals/offers) or [uploaded files](/cli/cli_commands/files/upload). Refer to the [fundamentals](/fundamentals) and the [Marketplace Walkthrough](/developers/marketplace/walkthrough/) to understand the logic of the Super Protocol order creation process. +For solutions and data, you can add to an order either Marketplace [offers](/fundamentals/offers) or [uploaded files](/cli/commands/files/upload). Refer to the [fundamentals](/fundamentals) and the [Marketplace Walkthrough](/developers/marketplace/walkthrough/) to understand the logic of the Super Protocol order creation process. ## Syntax @@ -28,15 +28,15 @@ For solutions and data, you can add to an order either Marketplace [offers](/fun [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Options |
**Name**
| **Description** | | :- | :- | -| `--solution {,[] │ }` | Solution you are adding to the order:

• For a Marketplace offer, state the solution offer ID and the solution [requirement slot](/fundamentals/slots#requirements) ID (optional), separated by a comma. If the requirement slot is not specified, it will be selected automatically.
• For an [uploaded](/cli/cli_commands/files/upload) solution, state the path to the solution resource JSON file.

You can use this option multiple times. | +| `--solution {,[] │ }` | Solution you are adding to the order:

• For a Marketplace offer, state the solution offer ID and the solution [requirement slot](/fundamentals/slots#requirements) ID (optional), separated by a comma. If the requirement slot is not specified, it will be selected automatically.
• For an [uploaded](/cli/commands/files/upload) solution, state the path to the solution resource JSON file.

You can use this option multiple times. | | `--storage ,[]` | Storage offer you are adding to the order. State the storage offer ID and the storage requirement slot ID (optional), separated by a comma. If the requirement slot is not specified, it will be selected automatically. | -| `--data {,[] │ }` | Data you are adding to the order:

• For a Marketplace offer, state the data offer ID and the data requirement slot ID (optional), separated by a comma. If the requirement slot is not specified, it will be selected automatically.
• For [uploaded](/cli/cli_commands/files/upload) data, state the path to the data resource JSON file.

You can use this option multiple times.

Although this option is technically not mandatory, most solutions require data. | +| `--data {,[] │ }` | Data you are adding to the order:

• For a Marketplace offer, state the data offer ID and the data requirement slot ID (optional), separated by a comma. If the requirement slot is not specified, it will be selected automatically.
• For [uploaded](/cli/commands/files/upload) data, state the path to the data resource JSON file.

You can use this option multiple times.

Although this option is technically not mandatory, most solutions require data. | | `--tee ,[]` | Compute offer you are adding to the order. State the compute offer ID and, optionally, the [configuration slot](/fundamentals/slots#configuration) ID, separated by a comma. If the configuration slot is not specified, it will be selected automatically.

If you do not use this option, the compute offer and its configuration will be selected automatically. | | `--tee-slot-count ` | Configuration slot increments—how many times the selected slot is applied. Use this option together with `--tee`.

If you do not use this option, the increments will be calculated automatically. | | `--tee-options [ ...]` | IDs of [configuration options](/fundamentals/slots#configuration) separated by spaces. Use `--tee-options` together with `--tee`.

If you do not use `--tee-options`, configuration options will be selected automatically. | @@ -124,7 +124,7 @@ For the offers in this example, the minimum deposit is 1.120 TEE tokens and the ### Example 3. Uploaded solution and data -The following command creates an order using an [uploaded](/cli/cli_commands/files/upload) solution and data instead of adding Marketplace offers: +The following command creates an order using an [uploaded](/cli/commands/files/upload) solution and data instead of adding Marketplace offers: ``` ./spctl workflows create \ diff --git a/docs/cli/cli_commands/workflows/generate-key.md b/docs/cli/commands/workflows/generate-key.md similarity index 80% rename from docs/cli/cli_commands/workflows/generate-key.md rename to docs/cli/commands/workflows/generate-key.md index 12c1ceef..7c112ed4 100644 --- a/docs/cli/cli_commands/workflows/generate-key.md +++ b/docs/cli/commands/workflows/generate-key.md @@ -1,7 +1,7 @@ --- -id: "generate-key" +id: "cli-workflows-generate-key" title: "workflows generate-key" -slug: "/cli_commands/workflows/generate-key" +slug: "/commands/workflows/generate-key" sidebar_label: "generate-key" --- @@ -17,7 +17,7 @@ SPCTL generates this key automatically during the [configuration](/cli). Use thi [--help | -h] ``` -Read about the Super Protocol [command syntax](/cli/cli_commands#command-syntax). +Read about the Super Protocol [command syntax](/cli/commands#command-syntax). ## Option diff --git a/docs/cli/cli_commands/workflows/index.md b/docs/cli/commands/workflows/index.md similarity index 53% rename from docs/cli/cli_commands/workflows/index.md rename to docs/cli/commands/workflows/index.md index 2541e694..94d26806 100644 --- a/docs/cli/cli_commands/workflows/index.md +++ b/docs/cli/commands/workflows/index.md @@ -1,7 +1,7 @@ --- id: "cli-workflows" title: "workflows" -slug: "/cli_commands/workflows" +slug: "/commands/workflows" sidebar_position: 4 --- @@ -12,5 +12,5 @@ This command group contains commands to create an [order](/fundamentals/orders) | **Command** | **Description** | | :- | :- | -| [workflows generate-key](/cli/cli_commands/workflows/generate-key) |Generates a private key to decrypt order results. | -| [workflows create](/cli/cli_commands/workflows/create) | Creates an order. | \ No newline at end of file +| [workflows generate-key](/cli/commands/workflows/generate-key) |Generates a private key to decrypt order results. | +| [workflows create](/cli/commands/workflows/create) | Creates an order. | \ No newline at end of file diff --git a/docs/cli/index.md b/docs/cli/index.md index 5c9aa619..3ff06f54 100644 --- a/docs/cli/index.md +++ b/docs/cli/index.md @@ -89,7 +89,7 @@ Do not change the preconfigured parameters and fill in the following ones: |:-|:-| |accessToken| Your Testnet Access Token from the Testnet invitation email|| |accountPrivateKey| Your Testnet Private Key from the Testnet invitation email| -|key| Private key for order result encryption. Use the [workflows generate-key](/cli/cli_commands/workflows/generate-key) command to create this key| +|key| Private key for order result encryption. Use the [workflows generate-key](/cli/commands/workflows/generate-key) command to create this key| |bucket| Name of your Storj bucket (optional)| |writeAccessToken| Storj access grant with **write** and **delete** permissions for this bucket (optional)| |readAccessToken| Storj access grant with **read** permission for this bucket (optional)| @@ -106,7 +106,7 @@ Where `0xB9f0b77BDbAe9fBe3E60BdC567E453f503605BAa` is your Authority Account wal Rename this file to `config.json` so SPCTL can recognize it as its configuration file. Copy or download the SPCTL executable to the Provider Tools root directory. -Alternatively, copy this provider's SPCTL config to your User Account's SPCTL directory. Use the `--config` option with [SPCTL commands](/cli/cli_commands) to manage your provider and orders. For example: +Alternatively, copy this provider's SPCTL config to your User Account's SPCTL directory. Use the `--config` option with [SPCTL commands](/cli/commands) to manage your provider and orders. For example: ``` ./spctl orders list --my-account --type tee --config spctl-config-0xB9f0b77BDbAe9fBe3E60BdC567E453f503605BAa.json @@ -153,7 +153,7 @@ Do not change the preconfigured parameters and fill in the following ones: |accessToken| Your regular Testnet Access Token from the Testnet invitation email| |accountPrivateKey| Private Key of your provider's Action Account| |authorityAccountPrivateKey| Private Key of your provider's Authority Account| -|key| Private key for order result encryption. Use the key from your User Account or generate a new one with the [workflows generate-key](/cli/cli_commands/workflows/generate-key) command| +|key| Private key for order result encryption. Use the key from your User Account or generate a new one with the [workflows generate-key](/cli/commands/workflows/generate-key) command| |bucket| Name of your Storj bucket (optional)| |writeAccessToken| Storj access grant with **write** and **delete** permissions for this bucket (optional)| |readAccessToken| Storj access grant with **read** permission for this bucket (optional)| @@ -178,14 +178,14 @@ Before you create an order, ensure you have the latest version of SPCTL. Execute Go to the SPCTL's [GitHub page](https://github.com/Super-Protocol/ctl/releases) to see the latest version. -Use the [`tokens request`](https://docs.dev.superprotocol.com/developers/cli_commands/tokens/request) command to get free test TEE and POL tokens: +Use the [`tokens request`](https://docs.dev.superprotocol.com/developers/commands/tokens/request) command to get free test TEE and POL tokens: ``` ./spctl tokens request --tee ./spctl tokens request --matic ``` -It may take a couple of minutes for the tokens to appear on your account. When you have them, execute the [`workflows create`](/cli/cli_commands/workflows/create) command to create a [Super Chat](/developers/offers/superchat) order: +It may take a couple of minutes for the tokens to appear on your account. When you have them, execute the [`workflows create`](/cli/commands/workflows/create) command to create a [Super Chat](/developers/offers/superchat) order: ``` ./spctl workflows create --solution 12,12 --solution 6,2 --data 17,22 --storage 25,30 @@ -199,11 +199,11 @@ Workflow was created, TEE order id: [""] Where `` is the ID of your order. -It usually takes 20-25 minutes for this order to be done. You can then check the order status using the [`orders`](/cli/cli_commands/orders) command or in [Marketplace GUI](/developers/marketplace). +It usually takes 20-25 minutes for this order to be done. You can then check the order status using the [`orders`](/cli/commands/orders) command or in [Marketplace GUI](/developers/marketplace). ## Set up Storj -This step is optional. You can add a Marketplace storage offer to the [`files upload`](/cli/cli_commands/files/upload) command instead of configuring Storj. However, for additional control, you can set up and use your storage. +This step is optional. You can add a Marketplace storage offer to the [`files upload`](/cli/commands/files/upload) command instead of configuring Storj. However, for additional control, you can set up and use your storage. Register a [Storj](https://www.storj.io/) account if you do not have one yet. diff --git a/docs/developers/cli_guides/providers_offers.md b/docs/developers/cli_guides/providers_offers.md index c728c0d8..aff3c772 100644 --- a/docs/developers/cli_guides/providers_offers.md +++ b/docs/developers/cli_guides/providers_offers.md @@ -87,7 +87,7 @@ Go to your SPCTL directory and create the offer content using your Testnet user **For solution offers** -Use the [`solutions prepare`](/cli/cli_commands/solutions/prepare) command. It will pack and sign the solution with [Gramine](https://gramineproject.io/) to prepare it for execution inside a Trusted Execution Environment. The command will create a TAR.GZ archive with the solution and a metadata JSON file. +Use the [`solutions prepare`](/cli/commands/solutions/prepare) command. It will pack and sign the solution with [Gramine](https://gramineproject.io/) to prepare it for execution inside a Trusted Execution Environment. The command will create a TAR.GZ archive with the solution and a metadata JSON file. You can find a detailed example of preparing a Python solution in the [Python deployment guide](/developers/deployment_guides/python/solution_prep). @@ -120,7 +120,7 @@ Both ways have pros and cons. Pick the one that suits you better. It is a simpler and quicker way to upload offer content if you do not have a Storj account and have not configured SPCTL to use it. However, you must regularly check the storage order and [keep it alive](/developers/cli_guides/providers_offers#lease-on-uploaded-offer-content). Otherwise, your offer content will eventually become unavailable. -Execute the following [`files upload`](/cli/cli_commands/files/upload) command to create a storage order on Super Protocol with your offer content: +Execute the following [`files upload`](/cli/commands/files/upload) command to create a storage order on Super Protocol with your offer content: ``` ./spctl files upload --storage 25,33 --min-rent-minutes 43200 @@ -129,11 +129,11 @@ Execute the following [`files upload`](/cli/cli_commands/files/upload) command t Where - `` is the name of the archive file with your prepared solution or data. - `--storage 25,33` is the slot ID 33 of the storage offer ID 25. The maximum disk capacity for this slot is 0.977 GB; you may choose [another slot](https://marketplace.superprotocol.com/storage?offer=offerId%3D25&tab=pricing) that suits your offer content better. -- `--min-rent-minutes 43200` is the lease time set to 30 days. The offer content will be available for that period. You can make the lease time shorter or longer. You can also [replenish the balance](/cli/cli_commands/orders/replenish-deposit) later to prolong the storage order. +- `--min-rent-minutes 43200` is the lease time set to 30 days. The offer content will be available for that period. You can make the lease time shorter or longer. You can also [replenish the balance](/cli/commands/orders/replenish-deposit) later to prolong the storage order. As a result, SPCTL generates the `resource.json` file with information for a compute provider to access your uploaded offer content. Copy this file to the Provider Tools directory. This file also contains the storage order ID. Use it to check the storage order and replenish the deposit if necessary. -You can check all your orders, including storage orders, by using the [`orders list`](/cli/cli_commands/orders/list) command. Note that you cannot see your storage orders in the Marketplace GUI. +You can check all your orders, including storage orders, by using the [`orders list`](/cli/commands/orders/list) command. Note that you cannot see your storage orders in the Marketplace GUI. **Upload to a Storj account** @@ -145,7 +145,7 @@ Both Free Trial and Pro Storj accounts are suitable. However, if you have a free ::: -Execute the following [`files upload`](/cli/cli_commands/files/upload) command to upload your offer content to Storj using SPCTL: +Execute the following [`files upload`](/cli/commands/files/upload) command to upload your offer content to Storj using SPCTL: ``` ./spctl files upload @@ -254,7 +254,7 @@ Fill in the following values: + `offers`: state the IDs of such required offers, including the IDs of their dependencies. Put each ID in quotation marks and separate with a comma. See the examples below. + `types`: state the types of the required offers. The type must be either `2` for a solution offer in `"offers"` or `3` for a data offer in `"offers"`. If there are several IDs in `"offers"`, state the type for each of them. Put each number in quotation marks and separate with a comma. See the examples below. -Refer to the documentation of the [`offers update`](/cli/cli_commands/offers/offers/update) command to learn more. +Refer to the documentation of the [`offers update`](/cli/commands/offers/update) command to learn more. **Example 1** @@ -316,7 +316,7 @@ To get more examples, check existing offers via the Marketplace GUI:
-Or via CLI using the SPCTL [`offers get`](/cli/cli_commands/offers/offers/get) command: +Or via CLI using the SPCTL [`offers get`](/cli/commands/offers/get) command: ``` ./spctl offers get value 8 @@ -358,7 +358,7 @@ The following is an `offer-slot.json` template file with example values: Copy it to your `offer-slot.json` file and modify all the values as necessary. Since this is your offer, only you know the [price](/fundamentals/orders#cost-and-pricing) and compute configuration your solution or data needs to run. Every offer can have multiple requirements slots. You must create a separate JSON file for each slot. -Refer to the [`offers add-slot`](/cli/cli_commands/offers/slots/add-slot) command's documentation to learn more about the objects and strings in this file. +Refer to the [`offers add-slot`](/cli/commands/offers/add-slot) command's documentation to learn more about the objects and strings in this file. To get more examples, check existing offers via the Marketplace GUI: @@ -366,7 +366,7 @@ To get more examples, check existing offers via the Marketplace GUI:
-Or via CLI using the [offers get-slot](/cli/cli_commands/offers/slots/get-slot) command: +Or via CLI using the [offers get-slot](/cli/commands/offers/get-slot) command: ``` ./spctl offers get-slot value --offer 8 --slot 4 @@ -426,7 +426,7 @@ Provider Tools also creates a provider SPCTL configuration file in its root dire Rename this file to `config.json` so SPCTL can recognize it as its configuration file. Copy or [download](/cli) SPCTL to the Provider Tools directory. It is your provider SPCTL. -Alternatively, copy this provider's SPCTL config to your SPCTL directory. Use the `--config` option with [SPCTL commands](/cli/cli_commands) to manage your provider and orders. For example: +Alternatively, copy this provider's SPCTL config to your SPCTL directory. Use the `--config` option with [SPCTL commands](/cli/commands) to manage your provider and orders. For example: ``` ./spctl orders list --my-account --type tee --config spctl-config-0xB9f0b77BDbAe9fBe3E60BdC567E453f503605BAa.json @@ -479,9 +479,9 @@ When the order is created, you will see the ID of the Offer Provisioner order in {"Successfully created workflow with id: 3394. You can go to https://marketplace.superprotocol.com/order/3394 to track order status."} ``` -Alternatively, you can create an Offer Provisioner order manually. Pack the content of the `execution-controller` directory (`config.json` and `.env`) into a TAR.GZ archive and upload it using the [`files upload`](/cli/cli_commands/files/upload) command. Add the resulting `resource.json` to the order as data and the Offer Provisioner solution offer (ID 26) as a solution using either Marketplace GUI or the `workflows create` SPCTL command. +Alternatively, you can create an Offer Provisioner order manually. Pack the content of the `execution-controller` directory (`config.json` and `.env`) into a TAR.GZ archive and upload it using the [`files upload`](/cli/commands/files/upload) command. Add the resulting `resource.json` to the order as data and the Offer Provisioner solution offer (ID 26) as a solution using either Marketplace GUI or the `workflows create` SPCTL command. -Check that your offer is on the blockchain using the [offers get](/cli/cli_commands/offers/offers/get) command: +Check that your offer is on the blockchain using the [offers get](/cli/commands/offers/get) command: ``` ./spctl offers get value @@ -515,17 +515,17 @@ As a provider, you must ensure your offer stays active. Keep track of the storag Ensure your storage order does not end. -If you created a [storage order](/cli/cli_commands/files/upload) for your offer content in [Step 1](/developers/cli_guides/providers_offers#upload-offer-content), keep track of the balance and replenish it in time. +If you created a [storage order](/cli/commands/files/upload) for your offer content in [Step 1](/developers/cli_guides/providers_offers#upload-offer-content), keep track of the balance and replenish it in time. ::: -If the storage order expires, the TEE can no longer access your uploaded offer content, and the customer order will fail. Execute the [`orders list`](/cli/cli_commands/orders/list) SPCTL command from your user account to get the list of your storage orders: +If the storage order expires, the TEE can no longer access your uploaded offer content, and the customer order will fail. Execute the [`orders list`](/cli/commands/orders/list) SPCTL command from your user account to get the list of your storage orders: ``` ./spctl orders list --my-account --type storage ``` -Use the [`orders get`](/cli/cli_commands/orders/get) command to check the total and unspent deposits. Use the [`orders replenish-deposit`](/cli/cli_commands/orders/replenish-deposit) command to add tokens to the balance of the storage order. +Use the [`orders get`](/cli/commands/orders/get) command to check the total and unspent deposits. Use the [`orders replenish-deposit`](/cli/commands/orders/replenish-deposit) command to add tokens to the balance of the storage order. ### Lease on Offer Provisioner @@ -537,7 +537,7 @@ Keep track of the balance and replenish it in time. Without a response from Offe ::: -Execute the [`orders list`](/cli/cli_commands/orders/list) command using the provider SPCTL to get the list of your Offer Provisioner orders: +Execute the [`orders list`](/cli/commands/orders/list) command using the provider SPCTL to get the list of your Offer Provisioner orders: ``` ./spctl orders list --my-account --type tee @@ -545,14 +545,14 @@ Execute the [`orders list`](/cli/cli_commands/orders/list) command using the pro An [Offer Provisioner order](/developers/cli_guides/providers_offers#create-an-offer-provisioner-order) must always be active and ready to authorize its offer. -Use the [`orders get`](/cli/cli_commands/orders/get) command to check the total and unspent deposits. Use the [`orders replenish-deposit`](/cli/cli_commands/orders/replenish-deposit) command to add tokens to the Offer Provisioner order. +Use the [`orders get`](/cli/commands/orders/get) command to check the total and unspent deposits. Use the [`orders replenish-deposit`](/cli/commands/orders/replenish-deposit) command to add tokens to the Offer Provisioner order. ## FAQ ### Update provider info -It is possible to update provider information such as name, description, action account, and token receiver account. Make changes to `provider.json` you saved in [Step 4](/developers/cli_guides/providers_offers#step-4-register-the-provider-and-offer) and use the [`providers update`](/cli/cli_commands/providers/update) SPCTL command from your current action account. -It is possible to update provider information such as name, description, action account, and token receiver account. Make changes to `provider.json` you saved in [Step 4](/developers/cli_guides/providers_offers#step-4-register-the-provider-and-offer) and use the [`providers update`](/cli/cli_commands/providers/update) SPCTL command from your current action account. +It is possible to update provider information such as name, description, action account, and token receiver account. Make changes to `provider.json` you saved in [Step 4](/developers/cli_guides/providers_offers#step-4-register-the-provider-and-offer) and use the [`providers update`](/cli/commands/providers/update) SPCTL command from your current action account. +It is possible to update provider information such as name, description, action account, and token receiver account. Make changes to `provider.json` you saved in [Step 4](/developers/cli_guides/providers_offers#step-4-register-the-provider-and-offer) and use the [`providers update`](/cli/commands/providers/update) SPCTL command from your current action account. If you changed your action account address, update the Provider SPCTL's `config.json` with the new action account private key. @@ -560,13 +560,13 @@ If you changed your action account address, update the Provider SPCTL's `config. **Offer description:** -Modify `offer-info.json` you have prepared in [Step 3](/developers/cli_guides/providers_offers#offer-description) and then run the [`offers update`](/cli/cli_commands/offers/offers/update) command using the Provider SPCTL. +Modify `offer-info.json` you have prepared in [Step 3](/developers/cli_guides/providers_offers#offer-description) and then run the [`offers update`](/cli/commands/offers/update) command using the Provider SPCTL. **Offer requirements (slots):** -Modify `offer-slot.json` you have prepared in [Step 3](/developers/cli_guides/providers_offers#offer-requirements) and then run the [`offers update-slot`](/cli/cli_commands/offers/slots/update-slot) command using the Provider SPCTL. +Modify `offer-slot.json` you have prepared in [Step 3](/developers/cli_guides/providers_offers#offer-requirements) and then run the [`offers update-slot`](/cli/commands/offers/update-slot) command using the Provider SPCTL. -Similarly, you can use the [`offers add-slot`](/cli/cli_commands/offers/slots/add-slot) command to add another slot and the [`offers delete-slot`](/cli/cli_commands/offers/slots/delete-slot) command to remove a slot. +Similarly, you can use the [`offers add-slot`](/cli/commands/offers/add-slot) command to add another slot and the [`offers delete-slot`](/cli/commands/offers/delete-slot) command to remove a slot. ### Create additional offers @@ -578,7 +578,7 @@ You can also manually edit the `PROVIDER_OFFERS_JSON` array in the `.env` file t ### Enable/disable offers -Disable your offer if you no longer want to provide your application or data on Super Protocol. Execute the [`offers disable`](/cli/cli_commands/offers/offers/disable) command from your Provider SPCTL: +Disable your offer if you no longer want to provide your application or data on Super Protocol. Execute the [`offers disable`](/cli/commands/offers/disable) command from your Provider SPCTL: ``` ./spctl offers disable @@ -586,7 +586,7 @@ Disable your offer if you no longer want to provide your application or data on Replace `` with the ID of the offer you want to disable. -It will make the offer unavailable to use but will not delete it. Later, if you want to reinstate it back to active status, use the [`offers enable`](/cli/cli_commands/offers/offers/enable) command. +It will make the offer unavailable to use but will not delete it. Later, if you want to reinstate it back to active status, use the [`offers enable`](/cli/commands/offers/enable) command. ### Inactive offers diff --git a/docs/developers/cli_guides/quick_guide.md b/docs/developers/cli_guides/quick_guide.md index ecb8e046..d9a80c40 100644 --- a/docs/developers/cli_guides/quick_guide.md +++ b/docs/developers/cli_guides/quick_guide.md @@ -11,13 +11,13 @@ This quick guide will take you step by step through deploying a solution and dat ### Step 1. Pack a solution -To prepare a solution for execution inside a Trusted Execution Environment, pack and sign it with [Gramine](https://gramineproject.io/). To do this, run the [`solutions prepare`](/cli/cli_commands/solutions/prepare) command. +To prepare a solution for execution inside a Trusted Execution Environment, pack and sign it with [Gramine](https://gramineproject.io/). To do this, run the [`solutions prepare`](/cli/commands/solutions/prepare) command. It will create a TAR.GZ archive with the solution and a JSON file with essential metadata. ### Step 2. Upload the solution to the storage -Run the [`files upload`](/cli/cli_commands/files/upload) command using the TAR.GZ archive from the previous step. +Run the [`files upload`](/cli/commands/files/upload) command using the TAR.GZ archive from the previous step. The command will create a resource JSON file with the information for the compute resource on how to access and download the solution. @@ -45,7 +45,7 @@ tar -czvf archived_data.tar.gz -C ./data . ### Step 2. Upload the data to the storage -Run the [`files upload`](/cli/cli_commands/files/upload) command using the TAR.GZ archive from the previous step. +Run the [`files upload`](/cli/commands/files/upload) command using the TAR.GZ archive from the previous step. The command will create a resource JSON file with the information for the compute resource on how to access and download the data. @@ -53,12 +53,12 @@ The command will create a resource JSON file with the information for the comput ### Step 3. Create an order -Run the [`workflows create`](/cli/cli_commands/workflows/create) using the resource JSON file created in Step 2. When the order is created, you will see the order ID in the terminal output. +Run the [`workflows create`](/cli/commands/workflows/create) using the resource JSON file created in Step 2. When the order is created, you will see the order ID in the terminal output. It may be more convenient to use the [**Marketplace GUI**](/developers/marketplace/) for this and the following step. ### Step 4. Receive the result -Orders take a few minutes to process. Use the [`orders get`](/cli/cli_commands/orders/get) command to track the progress. When the order status is `Done`, retrieve the result using the [`orders download-result`](/cli/cli_commands/orders/download-result) command. +Orders take a few minutes to process. Use the [`orders get`](/cli/commands/orders/get) command to track the progress. When the order status is `Done`, retrieve the result using the [`orders download-result`](/cli/commands/orders/download-result) command. Certain solutions, such as Tunnel Server, may have the result available earlier. For them, the status `Processing` means they are live and operational. Read more in the [Usage scenarios](Usage scenarios) section. \ No newline at end of file diff --git a/docs/developers/deployment_guides/blockchain/oracles.md b/docs/developers/deployment_guides/blockchain/oracles.md index 6d9b06e9..8baa7144 100644 --- a/docs/developers/deployment_guides/blockchain/oracles.md +++ b/docs/developers/deployment_guides/blockchain/oracles.md @@ -174,7 +174,7 @@ In this step we will cover the first component. All the solutions deployed on Super Protocol have to use a base image solution offer. In this case it will be a Node.js base image. -Go to your project root directory and execute this [command](/cli/cli_commands/offers/offers/download-content): +Go to your project root directory and execute this [command](/cli/commands/offers/download-content): ```shell ./spctl offers download-content 6 @@ -190,7 +190,7 @@ Next, we will build a Docker image of the service. For the Docker image to run i ./spctl solutions generate-key signing-key ``` -Execute the following [command](/cli/cli_commands/solutions/prepare) in the root of your project to prepare and pack the solution: +Execute the following [command](/cli/commands/solutions/prepare) in the root of your project to prepare and pack the solution: ```shell ./spctl solutions prepare --pack-solution oracle-solution.tar.gz --write-default-manifest --base-image-path ./solutions/Blockchain/sp-oracle/script/run/ signing-key @@ -207,7 +207,7 @@ MRSIGNER: 36f3bb39d10617852d1eef2f5066d8f9add2c65fb1a026d86398fec405fe725c **Save these values!** Important: different MRENCLAVE and MRSIGNER values are generated for each run of the `prepare` command. -Finally, we will [encrypt and upload](/cli/cli_commands/files/upload) the prepared solution to decentralized storage (Storj): +Finally, we will [encrypt and upload](/cli/commands/files/upload) the prepared solution to decentralized storage (Storj): ```shell ./spctl files upload oracle-solution.tar.gz --output oracle-solution.json --filename oracle-solution.tar.gz --metadata ./metadata.json @@ -344,7 +344,7 @@ An `oracle-input.json` will be created. We will use this file and `oracle-soluti The result will be an order ID. -You can check the status of the order using [Marketplace GUI](/developers/marketplace) or this [command](/cli/cli_commands/orders/get): +You can check the status of the order using [Marketplace GUI](/developers/marketplace) or this [command](/cli/commands/orders/get): ```shell ./spctl orders get diff --git a/docs/developers/deployment_guides/python/data.md b/docs/developers/deployment_guides/python/data.md index f2c28016..61fef429 100644 --- a/docs/developers/deployment_guides/python/data.md +++ b/docs/developers/deployment_guides/python/data.md @@ -24,7 +24,7 @@ Please make sure that system or hidden files are not included into the archive. ::: ## Upload data archives -And [upload](/cli/cli_commands/files/upload) archives to storage: +And [upload](/cli/commands/files/upload) archives to storage: ``` ./spctl files upload input-1.tar.gz --output input-1.json --filename input-1.tar.gz diff --git a/docs/developers/deployment_guides/python/exec_result.md b/docs/developers/deployment_guides/python/exec_result.md index 6e2838f2..c7700ac2 100644 --- a/docs/developers/deployment_guides/python/exec_result.md +++ b/docs/developers/deployment_guides/python/exec_result.md @@ -15,7 +15,7 @@ Now you will need to execute together: * Python base image solution offer from the [Marketplace](https://marketplace.superprotocol.com/solutions?offerId=5&offer=offerId%3D5); * Your two datasets represented by `input-1.json` and `input-2.json` (which will direct TEE to download the archives from storage). -Use the following [command](/cli/cli_commands/workflows/create): +Use the following [command](/cli/commands/workflows/create): ``` ./spctl workflows create --tee 1,1 --tee-slot-count 1 --storage 25,30 --solution 5,1 --solution solution.json --data input-1.json --data input-2.json @@ -25,7 +25,7 @@ An order ID is generated upon execution. ## Check Order Status -You can check the order status using the [Marketplace GUI](/developers/marketplace) or the SPCTL [command](/cli/cli_commands/orders/get): +You can check the order status using the [Marketplace GUI](/developers/marketplace) or the SPCTL [command](/cli/commands/orders/get): ``` ./spctl orders get @@ -35,7 +35,7 @@ When the status turns to `Done`, proceed to the next step. ## Receive Result -Retrieve the result using the [Marketplace GUI](/developers/marketplace) or the following [command](/cli/cli_commands/orders/download-result): +Retrieve the result using the [Marketplace GUI](/developers/marketplace) or the following [command](/cli/commands/orders/download-result): ``` ./spctl orders download-result diff --git a/docs/developers/deployment_guides/python/solution.md b/docs/developers/deployment_guides/python/solution.md index f2685aa2..512251e9 100644 --- a/docs/developers/deployment_guides/python/solution.md +++ b/docs/developers/deployment_guides/python/solution.md @@ -114,7 +114,7 @@ If done correctly, the `output` directory should contain `.csv` file with result Now that we are happy with the way solution runs locally, the next steps are related to preparation for deployment to Super Protocol. -Run the following [command](/cli/cli_commands/solutions/generate-key) in the directory where you placed the SPCTL executable to generate the signing key for the solution: +Run the following [command](/cli/commands/solutions/generate-key) in the directory where you placed the SPCTL executable to generate the signing key for the solution: ``` ./spctl solutions generate-key signing-key @@ -122,7 +122,7 @@ Run the following [command](/cli/cli_commands/solutions/generate-key) in the dir ## Pack the solution -When the Docker image should run inside an Intel SGX enclave, the image has to be built and signed with [Gramine](https://gramine.readthedocs.io/en/latest/gsc-installation.html) (a.k.a graminized). Execute the following [command](/cli/cli_commands/solutions/prepare) to prepare and pack the solution: +When the Docker image should run inside an Intel SGX enclave, the image has to be built and signed with [Gramine](https://gramine.readthedocs.io/en/latest/gsc-installation.html) (a.k.a graminized). Execute the following [command](/cli/commands/solutions/prepare) to prepare and pack the solution: ``` ./spctl solutions prepare --pack-solution solution.tar.gz --write-default-manifest \ diff --git a/docs/developers/deployment_guides/tunnels/develop.md b/docs/developers/deployment_guides/tunnels/develop.md index 90044810..ca508602 100644 --- a/docs/developers/deployment_guides/tunnels/develop.md +++ b/docs/developers/deployment_guides/tunnels/develop.md @@ -87,7 +87,7 @@ server.listen(port, () => { ## Testing -Test your solution using our Node.js base image. You need to test specifically with the same base image that is contained in the Node.js base image offer. You can download it using this [command](/cli/cli_commands/offers/offers/download-content): +Test your solution using our Node.js base image. You need to test specifically with the same base image that is contained in the Node.js base image offer. You can download it using this [command](/cli/commands/offers/download-content): ```bash ./spctl offers download-content 6 diff --git a/docs/developers/deployment_guides/tunnels/manual_run.md b/docs/developers/deployment_guides/tunnels/manual_run.md index 615df8f3..fb7293c5 100644 --- a/docs/developers/deployment_guides/tunnels/manual_run.md +++ b/docs/developers/deployment_guides/tunnels/manual_run.md @@ -26,7 +26,7 @@ Create an archive of the token: tar -czf tunnel-server-data.tar.gz -C ./tunnel-server-data . ``` -Encrypt and upload the archive to storage using the [`files upload`](/cli/cli_commands/files/upload) command: +Encrypt and upload the archive to storage using the [`files upload`](/cli/commands/files/upload) command: ```bash ./spctl files upload tunnel-server-data.tar.gz --output tunnel-server-data.json --filename tunnel-server-data.tar.gz @@ -40,7 +40,7 @@ Create an order for Tunnel Server using the `tunnel-server-data.json` file conta ./spctl workflows create --tee 1 --solution 6,2 --solution 11,10 --data tunnel-server-data.json --storage 25,30 --orders-limit 10 --min-rent-minutes 60 ``` -**Tip:** to create order make sure that you have sufficient amount of TEE and POL tokens in your testnet wallet. You can get more tokens using the [tokens request](/cli/cli_commands/tokens/request) command. Be mindful of testnet [limitations](/marketplace/limitations). +**Tip:** to create order make sure that you have sufficient amount of TEE and POL tokens in your testnet wallet. You can get more tokens using the [tokens request](/cli/commands/tokens/request) command. Be mindful of testnet [limitations](/marketplace/limitations). The last line of the output will look like this: @@ -50,7 +50,7 @@ Workflow was created, TEE order id: ["XXXX"] Where XXXX is the order ID. -You can check the status of the order using [Marketplace GUI](/developers/marketplace) or this [command](/cli/cli_commands/orders/get): +You can check the status of the order using [Marketplace GUI](/developers/marketplace) or this [command](/cli/commands/orders/get): ```shell ./spctl orders get @@ -123,7 +123,7 @@ Add the folder to archive: tar -czf tunnel-client-data.tar.gz -C ./tunnel-client-data . ``` -Encrypt and upload the archive to storage using the [files upload](/cli/cli_commands/files/upload) command: +Encrypt and upload the archive to storage using the [files upload](/cli/commands/files/upload) command: ```bash ./spctl files upload tunnel-client-data.tar.gz --output tunnel-client-data.json --filename tunnel-client-data.tar.gz diff --git a/docs/developers/deployment_guides/tunnels/static_content.md b/docs/developers/deployment_guides/tunnels/static_content.md index d59edc7d..0249cadf 100644 --- a/docs/developers/deployment_guides/tunnels/static_content.md +++ b/docs/developers/deployment_guides/tunnels/static_content.md @@ -134,7 +134,7 @@ Remember the resulting order ID. ### Check Order Status -You can check the status of the server and client tunnels using the order ID's using this [command](/cli/cli_commands/orders/get): +You can check the status of the server and client tunnels using the order ID's using this [command](/cli/commands/orders/get): ``` ./spctl orders get diff --git a/docs/developers/index.md b/docs/developers/index.md index 7b45ff7d..d9794822 100644 --- a/docs/developers/index.md +++ b/docs/developers/index.md @@ -23,7 +23,7 @@ If you are just starting out, feel your way around Super Protocol using the Mark When you know the basics, try SPCTL—the Super Protocol CLI tool: 1. [Configure SPCTL](/cli) as a user. -2. Read about the [fundamentals](/fundamentals), [Testnet limitations](/marketplace/limitations), and key [CLI commands](/cli/cli_commands). +2. Read about the [fundamentals](/fundamentals), [Testnet limitations](/marketplace/limitations), and key [CLI commands](/cli/commands). 3. Read the [Quick Deployment Guide](/developers/cli_guides/quick_guide) to learn about deploying your solutions. 4. Choose a [deployment guide](/developers/deployment_guides/) to get an example for additional deployment scenarios. diff --git a/docs/developers/marketplace_gui/confidentiality.md b/docs/developers/marketplace_gui/confidentiality.md index 638345cc..d0fd5721 100644 --- a/docs/developers/marketplace_gui/confidentiality.md +++ b/docs/developers/marketplace_gui/confidentiality.md @@ -9,7 +9,7 @@ _Quote verification_ checks the authenticity and integrity of a Trusted Executio In simple terms, quote verification ensures that the content of a domain is running in a TEE. Additionally, if the content is Super Protocol solution offers, the quote verification links the content to the offers. -For quote verification, use the [`quotes validate`](/cli/cli_commands/quotes/validate) CLI command or the **Check confidentiality** function in the Marketplace GUI. +For quote verification, use the [`quotes validate`](/cli/commands/quotes/validate) CLI command or the **Check confidentiality** function in the Marketplace GUI. ## Check how it works diff --git a/docs/developers/marketplace_gui/index.md b/docs/developers/marketplace_gui/index.md index b46c40ae..92251460 100644 --- a/docs/developers/marketplace_gui/index.md +++ b/docs/developers/marketplace_gui/index.md @@ -5,7 +5,7 @@ slug: "/marketplace/" sidebar_position: 3 --- -Marketplace graphical interface (GUI) is a user-friendly web interface to [Marketplace](/fundamentals). It also provides an interactive learning experience for new users. GUI serves as a companion tool to the Super Protocol command-line interface (CLI) tool [SPCTL](/cli/cli_commands). However, GUI capabilities are currently limited so it is not a full alternative to CLI. +Marketplace graphical interface (GUI) is a user-friendly web interface to [Marketplace](/fundamentals). It also provides an interactive learning experience for new users. GUI serves as a companion tool to the Super Protocol command-line interface (CLI) tool [SPCTL](/cli/commands). However, GUI capabilities are currently limited so it is not a full alternative to CLI. Go to Marketplace GUI: [**marketplace.superprotocol.com**](https://marketplace.superprotocol.com/) @@ -26,29 +26,29 @@ The things you can do in the Marketplace GUI and the their respective CLI comman | **Function** | **SPCTL Command** | |:-----------------------------------------------|:------------------------------------------------------------------------------| -| View details of offers available on blockchain | [`offers`](/cli/cli_commands/offers) | -| Receive test TEE and POL tokens | [`tokens request`](/cli/cli_commands/tokens/request) | -| Create orders using offers | [`workflows create`](/cli/cli_commands/workflows/create) | -| Use your own data for the solution offers | [`workflows create`](/cli/cli_commands/workflows/create) | -| Generate encryption keys for orders | [`workflows generate-key`](/cli/cli_commands/workflows/generate-key) | -| See list of all your orders | [`orders list`](/cli/cli_commands/orders/list) | -| See details and statuses of specific orders | [`orders get`](/cli/cli_commands/orders/get) | -| Replenish order deposits | [`orders replenish-deposit`](/cli/cli_commands/orders/replenish-deposit) | -| Cancel orders | [`orders cancel`](/cli/cli_commands/orders/cancel) | -| Receive order results | [`orders download-result`](/cli/cli_commands/orders/download-result) | -| Check confidentiality | [`quotes validate`](/cli/cli_commands/quotes/validate) | +| View details of offers available on blockchain | [`offers`](/cli/commands/offers) | +| Receive test TEE and POL tokens | [`tokens request`](/cli/commands/tokens/request) | +| Create orders using offers | [`workflows create`](/cli/commands/workflows/create) | +| Use your own data for the solution offers | [`workflows create`](/cli/commands/workflows/create) | +| Generate encryption keys for orders | [`workflows generate-key`](/cli/commands/workflows/generate-key) | +| See list of all your orders | [`orders list`](/cli/commands/orders/list) | +| See details and statuses of specific orders | [`orders get`](/cli/commands/orders/get) | +| Replenish order deposits | [`orders replenish-deposit`](/cli/commands/orders/replenish-deposit) | +| Cancel orders | [`orders cancel`](/cli/commands/orders/cancel) | +| Receive order results | [`orders download-result`](/cli/commands/orders/download-result) | +| Check confidentiality | [`quotes validate`](/cli/commands/quotes/validate) | ## Available in the Marketplace CLI only -The most important functions available only in [SPCTL](/cli/cli_commands): +The most important functions available only in [SPCTL](/cli/commands): | **Function** | **SPCTL Command** | |:-----------------------------------------------|:------------------------------------------------------------------------------| -| Prepare a solution for execution | [`solutions prepare`](/cli/cli_commands/solutions/prepare) | -| Upload files to storage | [`files upload`](/cli/cli_commands/files/upload) | -| Create orders using your solutions | [`workflows create`](/cli/cli_commands/workflows/create) | -| Update an offer | [`offers update`](/cli/cli_commands/offers/offers/update) and [`offers update-slot`](/cli/cli_commands/offers/slots/update-slot)| -| Update a provider | [`providers update`](/cli/cli_commands/providers/update) | +| Prepare a solution for execution | [`solutions prepare`](/cli/commands/solutions/prepare) | +| Upload files to storage | [`files upload`](/cli/commands/files/upload) | +| Create orders using your solutions | [`workflows create`](/cli/commands/workflows/create) | +| Update an offer | [`offers update`](/cli/commands/offers/update) and [`offers update-slot`](/cli/commands/offers/update-slot)| +| Update a provider | [`providers update`](/cli/commands/providers/update) | Refer to the [Providers and offers](/developers/cli_guides/providers_offers) guide to register a provider and create a solution or data offer. diff --git a/docs/developers/marketplace_gui/moderation.md b/docs/developers/marketplace_gui/moderation.md index fd2c9d6f..d0691812 100644 --- a/docs/developers/marketplace_gui/moderation.md +++ b/docs/developers/marketplace_gui/moderation.md @@ -20,7 +20,7 @@ Marketplace GUI has a special filter that divides the offers into four categorie -These categories are exclusive meaning an offer can belong only to one category. Offers with the **Disabled** status do not appear in the Marketplace GUI. Providers can use [`offers disable`](/cli/cli_commands/offers/offers/disable) and [`offers enable`](/cli/cli_commands/offers/offers/enable) commands to manage this. +These categories are exclusive meaning an offer can belong only to one category. Offers with the **Disabled** status do not appear in the Marketplace GUI. Providers can use [`offers disable`](/cli/commands/offers/disable) and [`offers enable`](/cli/commands/offers/enable) commands to manage this. ## Requirements diff --git a/docs/marketplace/guides/place-order.md b/docs/marketplace/guides/place-order.md index b7984bbc..1e8ed82a 100644 --- a/docs/marketplace/guides/place-order.md +++ b/docs/marketplace/guides/place-order.md @@ -78,7 +78,7 @@ Click the blue **[+]** button to add a machine to the order. **In Queue** shows the number of orders waiting for an empty slot on this machine. If it is not zero, your order may take longer to process. Consider choosing another compute offer. - +Screenshot showing the queue status indicator for compute offers
## Step 4. Set lease time @@ -128,7 +128,7 @@ Once the Deploy order is placed successfully, you will be redirected to its [**O ## Step 6. Manage the order -Your order may take about 30 minutes to process if you used a model from Marketplace and up to one hour for uploaded models. You can check the order status in the **Order** screen. When the model is deployed and available, you will see **Deployed** in the order status and **Online** in the tunnel's status. +Your order may take about 30 minutes to process if you used a model from Marketplace and up to one hour for uploaded models. You can check the order status on the **Order** screen. When the model is deployed and available, you will see **Deployed** in the order status and **Online** in the tunnel's status.
diff --git a/docs/marketplace/guides/troubleshooting.md b/docs/marketplace/guides/troubleshooting.md index 28adddc3..4c2bacd2 100644 --- a/docs/marketplace/guides/troubleshooting.md +++ b/docs/marketplace/guides/troubleshooting.md @@ -19,7 +19,7 @@ If MetaMask shows no requests, refresh the page and press the **Enter Marketplac If the problem persists, restart your browser and unlock MetaMask before trying to enter the Marketplace. -This issue may also occur due to Marketplace maintenance. Wait a few minutes and try again, or contact Super Protocol on Discord for a quick update. +This issue may also occur due to Marketplace maintenance. Wait a few minutes and try again, or contact Super Protocol on [Discord](https://discord.gg/superprotocol) for a quick update. ## Order status: Error diff --git a/docs/marketplace/guides/upload.md b/docs/marketplace/guides/upload.md index e47e9f42..7c24bf41 100644 --- a/docs/marketplace/guides/upload.md +++ b/docs/marketplace/guides/upload.md @@ -12,7 +12,7 @@ This guide provides step-by-step instructions for uploading a model to Super Pro ## Step 1. Check requirements -Ensure your model meets the Super Protocol requirements. Otherwise, the order may fail. +Ensure your model meets the following Super Protocol requirements. ### Model category @@ -44,30 +44,38 @@ If your model is from Hugging Face, ensure its _task_ matches one of the support The size of your model should not exceed 10 GB; otherwise, deployment may fail. More machines with larger slots to support bigger models will be available in the future. -Note that large models may perform poorly on TDX machines without GPU support. If you plan on deploying on CPU, choose a smaller model. +Note that large models may perform poorly on CPU-only machines without GPU support. If you plan on deploying on CPU, choose a smaller model. ## Step 2. Select files -Model repositories contain multiple files. Often, not all of them are required. Select files following the instructions for your model's format. +Model repositories contain multiple files. Often, not all of them are required. -### GGUF and GGML formats +Create a directory for the model files—the model directory. Select files following the instructions for your model format. -For models in thes formats, the files in the repository usually contain variants of the same model with different quantization. Note that higher-bit quantization means a larger file. +If multiple formats are available, choose one of them and remove the others. For example, one of the highlighted sets of files on the following screenshot should be removed: + + +
+ +### GGUF and GGML -Choose one file and place it in a separate directory. For example: +For models in these formats, the files in the repository usually contain variants of the same model with different quantization. Note that higher-bit quantization means a larger file. + +Choose one file and place it in the model directory. For example:
-### Safetensors formats +### Safetensors -Place all files from the repository in a separate directory. For example: +Place all model files from the repository in the model directory. For example:
-
-Avoid duplications to reduce uploading time. Some repositories contain several variants of the same model. For example, one of the the highlighted files on the following screenshot can be removed: +## Step 3. Remove duplications + +Some repositories contain several variants of the same model. Avoid duplications to reduce upload time. For example, one of the the highlighted files on the following screenshot can be removed:
@@ -78,87 +86,99 @@ If a single consolidated `model.safetensors` file and multiple `model-xxxxx-of-y
-### Multiple formats +## Step 4. Create a TAR.GZ archive -If multiple formats are available, choose one of them and remove the others. For example, one of the highlighted sets of files on the following screenshot should be removed: - - -
-
- -:::note - -For some models, you should remove additional formats in the model's root directory and subdirectories. - -::: - -## Step 3. Create a TAR.GZ archive - -Ensure your model's directory contains no hidden files and subdirectories. Archive the directory with the selected model files into a TAR.GZ file using the following instructions: +Ensure the model directory contains no hidden files and directories. Archive the model directory into a TAR.GZ file using the following instructions: - On Windows, open PowerShell or Windows Command Prompt and run the following command: + On Windows, open PowerShell, navigate to the directory that contains the model directory, and run the following command: ``` - tar.exe -czvf + tar.exe -czvf ``` - Replace `` with the path and desired name of the output archive. Replace `` with the path to the folder with the model files. + - Replace `` with the desired name of the output archive. + - Replace `` with the name of the model directory. For example: ``` - tar.exe -czvf C:\SPData\mymodel.tar.gz C:\SPData\my-model + tar.exe -czvf my-model.tar.gz my-model ``` Wait for the process to complete; it may take a few minutes. + Ensure the model directory is at the root of the archive; otherwise, deployment may fail. Run the following command to view the contents of the archive: + + ``` + tar.exe -tzvf + ``` + + - Replace `` with the name of the archive. + Alternatively, install a file archiver like [7-Zip](https://www.7-zip.org/) or similar to create a TAR.GZ archive using a graphical user interface instead of a command line. - On Linux, open a terminal and run the following command: + On Linux, open a terminal, navigate to the directory that contains the model directory, and run the following command: ``` - tar -czvf + tar -czvf ``` - Replace `` with the path and desired name of the output archive. Replace `` with the path to the directory with the model files. + - Replace `` with the path and desired name of the output archive. + - Replace `` with the name of the model directory. For example: ``` - tar -czvf mymodel.tar.gz ./my-model + tar -czvf mymodel.tar.gz my-model ``` Wait for the process to complete; it may take a few minutes. + + Ensure the model directory is at the root of the archive; otherwise, deployment may fail. Run the following command to view the contents of the archive: + + ``` + tar -tzvf + ``` + + - Replace `` with the name of the archive. - On macOS, open the Terminal and run the following command: + On macOS, open the Terminal, navigate to the directory that contains the model directory, and run the following command: ``` - tar --no-mac-metadata --no-xattrs -czvf + tar --no-mac-metadata --no-xattrs -czvf ``` - Replace `` with the path and desired name of the output archive. Replace `` with the path to the directory with the model files. + Replace `` with the path and desired name of the output archive. Replace `` with the name of the model directory. For example: ``` - tar --no-mac-metadata --no-xattrs -czvf mymodel.tar.gz ./my-model + tar --no-mac-metadata --no-xattrs -czvf mymodel.tar.gz my-model ``` Wait for the process to complete; it may take a few minutes. + + Ensure the model directory is at the root of the archive; otherwise, deployment may fail. Run the following command to view the contents of the archive: + + ``` + tar -tzvf + ``` + + - Replace `` with the name of the archive. -## Step 4. Upload the archive +## Step 5. Upload the archive In the [Marketplace web app](https://marketplace.superprotocol.com/), go to the **My Files** screen and press the **Upload File** button. @@ -168,7 +188,7 @@ In the [Marketplace web app](https://marketplace.superprotocol.com/), go to the Fill out the form: -- **Content Name**: type the desired model name. It may be different from the file name. Providing a meaningful name makes it easier to find the model later. +- **Content Name**: type the desired model name. It may be different from the archive name. Providing a meaningful name makes it easier to find the model later. - **Category**: choose the model category from the drop-down menu. You can only choose one. - **Engine**: choose compatible engines from the drop-down menu. Select both available options. diff --git a/docs/marketplace/images/hf-gguf.png b/docs/marketplace/images/hf-gguf.png index cb1aa4312e0a1e0bed29f48ac90eb63c723c891d..da45590c64f5a94c140f4f6d083daf1f73bdde77 100644 GIT binary patch literal 12411 zcma*OcRbba|37|2i$r7|`xqh0$jQn`$C17F$aXkK8OO>-KxUKJR~iZa3@lysqap9^-z$KQ0MI2HK4D-1Hz2h*1ZwWdZ^n zn+AbsW>3)qE!J$Qmw;~!0XM7y{9XLq+)yAbBPkiyi?ljG^O>V&A72kIms>v8Ala+( zfo4Kt|EJvwBzsxbD@C{pXg_@$ZtV{Ooqc`uN%KhZEEoi$1sUm?-8jc7#=>>sl7iOc z^ehvb(BhYs4`U>Lap<8rh=GZdlV6%gRGyVv{5+2&SXdUOXSJ@Uz$tKvLqM8OSPmkg z$i^!_qJh~h9wC{c(yG^Q22wKeIQXQp3agbhjqW{2iHyx?!naS8Ki_h{ z^QQN`yt0nHGcqJ9S;x?pTj26Vc}>}?u=cJuP*q)bZ}jLmNmNStK|*?RTDB(KJTT<` zO(O?p4pEis#@B9`C}|joNh`-EXPR2OewtfSRMV4F)baf*-u>>Ejl< z?B)~NKQ!)%49?6gNzZv25uNPj6T-?V!Y3l1lu?xXxW>TL;iiBH+|cg2u2obF2H_jZ z#107vi_b5vsBLW3*0*_>S5aMyL)?zIB_Wwx@FXj*%*@W~QBJX^?_Iy3do6^QZ{H10 zOwE*)*X5Vib-W^GTolbLsPsaG@NtVhfAPvkO6sGwJnovzqx_27fsxh@2uJsTyrS|1 zOlD9-5(lqT&)b3Udr1y%ezBNbbl8J?aSz)&dlJ&}MZltkQX&;KI7z+>CZdw>H08cq zUEjRzaJaW?>wFs>8pF*gs>Ca5C@2~&E>bQn(x)zCB`vc#JXm{GY5^|y`)$`&7~=59 z_I6C*kB4#VMoJs5#yj{LYGKB~_SW9ViC@iCry1E9S$K)sr&uM&=s=*0(>hujX2H{x zf-rT{py>6^F21L%8n3J3jcB#B)aB#PX{ig>xG_sgoS>(&4kHreTp2}zSFuq&#> z6I%0f9?(?vYdIpxTOlqM_~47Q>Bo}>>;-4{ce6vj zuo|eyg_X6fU;^^L-NGx&S-zN$tvu{`3}XJBWN-LZzG}7-IT0YY1zE=X3X?>?|Lk1f z&1HQ>Y1w;CHIJPaeT0a+WdAu;ZGOLhaℜW9eFQc#vRJT0^6^R)>l! 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 literal 15827 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 literal 18555 zcmb@ubyQp3+Am5=jRK`WvEuGfC{oefD?GckUQ>jQdBjl1bKF)7G<|pG=~(HI?umKYxscg@v!8EU$}&br*$s z89&0tlsGGY9>*MTJr#^SJ#5_V>_AxZ+T47^T-Yj@V!S`aF0KwvHdZbsSOPDEjGn+g z|8M2SSo|;een)ye#gyZ?DVum;VLkc&=XEEA^9dyu7B-f)y1oJ-IV-P_JP`#O@pE

VC)OZABNvXLANEvBZ1$~2Kk&|=pBjTS? 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 bgaORIYPPq(bEEz%4N#VUE>|sU@%sM&VRP^Q diff --git a/docs/marketplace/orders/order-builder/index.md b/docs/marketplace/orders/order-builder/index.md index a2bad0d7..dfb70361 100644 --- a/docs/marketplace/orders/order-builder/index.md +++ b/docs/marketplace/orders/order-builder/index.md @@ -96,7 +96,7 @@ The system automatically calculates a compute configuration that meets or exceed Clicking the machine's name opens its [**Offer**](/marketplace/marketplace/offer) window. - +Screenshot showing the queue status indicator for compute offers
Learn more about [requirements and configurations](/fundamentals/slots). diff --git a/docs/marketplace/release-history/index.md b/docs/marketplace/release-history/index.md new file mode 100644 index 00000000..732c353f --- /dev/null +++ b/docs/marketplace/release-history/index.md @@ -0,0 +1,29 @@ +--- +id: "release-history" +title: "Release History" +slug: "/release-history" +sidebar_position: 7 +--- + + + +**AI Marketplace Phase 2 is live!** + +_November 21, 2024_ + +We have deployed the new Marketplace for AI to testnet. It includes new features and capabilities: + +- A demo account with AOuth2 login for a quick start. +- Support for Intel TDX and NVIDIA GPU confidential computing. +- Uploading your model files to the Super Cloud or personal Storj accounts. +- Deploying AI models in confidential tunnels using a variety of AI engines and settings. +- UI/UX redesign. + +Features coming up in the next phase: + +- Publishing offers in the Marketplace from the uploaded files. +- Fine-tuning mode (train new layers of the original models). +- Support for datasets. +- More models and datasets available in the Marketplace. +- More AI engines available (and more model categories). +- A daytime UI theme. \ No newline at end of file From c7dacdb09c006f2026ac0170cffa1021dd68a2de Mon Sep 17 00:00:00 2001 From: k3dz0r Date: Mon, 30 Dec 2024 16:07:58 -0300 Subject: [PATCH 2/4] CLI Removed links to Developers --- docs/cli/commands/offers/add-slot.md | 2 +- docs/cli/commands/offers/index.md | 2 +- docs/cli/commands/offers/update-slot.md | 2 +- docs/cli/commands/offers/update.md | 2 +- docs/cli/commands/orders/index.md | 2 +- docs/cli/commands/orders/replenish-deposit.md | 2 +- docs/cli/commands/providers/update.md | 2 +- docs/cli/commands/quotes/validate.md | 2 - docs/cli/commands/workflows/create.md | 101 +----------------- docs/cli/index.md | 37 +------ 10 files changed, 11 insertions(+), 143 deletions(-) diff --git a/docs/cli/commands/offers/add-slot.md b/docs/cli/commands/offers/add-slot.md index a8bc5d3b..08c8d4b6 100644 --- a/docs/cli/commands/offers/add-slot.md +++ b/docs/cli/commands/offers/add-slot.md @@ -8,7 +8,7 @@ sidebar_position: 8 Creates an additional [requirement slot](/fundamentals/slots#requirements) in an offer using the information in an offer slot JSON file. -Refer to the [Providers and Offers](/developers/cli_guides/providers_offers#offer-requirements) guide to create the initial offer requirements. +Refer to the [Providers and Offers] guide to create the initial offer requirements. **Important:** This command requires SPCTL with the [provider configuration file](/cli#for-offer-providers). diff --git a/docs/cli/commands/offers/index.md b/docs/cli/commands/offers/index.md index 50fa6d7d..56280c70 100644 --- a/docs/cli/commands/offers/index.md +++ b/docs/cli/commands/offers/index.md @@ -6,7 +6,7 @@ sidebar_position: 6 --- -This command group contains commands to view and manage [offers](/fundamentals/offers). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of these commands. +This command group contains commands to view and manage [offers](/fundamentals/offers). Note that [Marketplace web app](https://marketplace.superprotocol.com/marketplace) can be more convenient to use than most of these commands. ## Commands diff --git a/docs/cli/commands/offers/update-slot.md b/docs/cli/commands/offers/update-slot.md index a7898237..75dcfae5 100644 --- a/docs/cli/commands/offers/update-slot.md +++ b/docs/cli/commands/offers/update-slot.md @@ -12,7 +12,7 @@ Updates a [requirement slot](/fundamentals/slots#requirements) in an existing of Use the [`offers get`](/cli/commands/offers/get) command to get the IDs of all slots in an offer. Use the [`offers get-slot`](/cli/commands/offers/get-slot) command to get additional information on a slot. -Refer to [Offer requirements](/developers/cli_guides/providers_offers#offer-requirements) to create the initial offer requirements. Refer to the description of the [`offers add-slot`](/cli/commands/offers/add-slot) command for the JSON file format and object descriptions. +Refer to [Offer requirements] to create the initial offer requirements. Refer to the description of the [`offers add-slot`](/cli/commands/offers/add-slot) command for the JSON file format and object descriptions. ## Syntax diff --git a/docs/cli/commands/offers/update.md b/docs/cli/commands/offers/update.md index fe51fd0c..0a9f2094 100644 --- a/docs/cli/commands/offers/update.md +++ b/docs/cli/commands/offers/update.md @@ -8,7 +8,7 @@ sidebar_position: 5 Updates information of an existing offer using an offer description JSON file. -Refer to the [Providers and Offers](/developers/cli_guides/providers_offers#offer-description) guide to create the initial offer description. +Refer to the [Providers and Offers] guide to create the initial offer description. **Important:** This command requires SPCTL with the [provider configuration file](/cli#for-offer-providers). diff --git a/docs/cli/commands/orders/index.md b/docs/cli/commands/orders/index.md index 9cb0e050..8e44c71b 100644 --- a/docs/cli/commands/orders/index.md +++ b/docs/cli/commands/orders/index.md @@ -6,7 +6,7 @@ sidebar_position: 5 --- -This command group contains commands to track and manage [orders](/fundamentals/orders). Note that [Marketplace GUI](/developers/marketplace) can be more convenient to use than most of the commands in this group. +This command group contains commands to track and manage [orders](/fundamentals/orders). Note that [Marketplace web app](https://marketplace.superprotocol.com/marketplace) can be more convenient to use than most of the commands in this group. ## Commands diff --git a/docs/cli/commands/orders/replenish-deposit.md b/docs/cli/commands/orders/replenish-deposit.md index 58d5775e..28325e16 100644 --- a/docs/cli/commands/orders/replenish-deposit.md +++ b/docs/cli/commands/orders/replenish-deposit.md @@ -7,7 +7,7 @@ sidebar_label: "replenish-deposit" Replenishes the order deposit. -Certain orders require a positive deposit balance to keep running. For example, [Offer Provisioner](/developers/cli_guides/providers_offers#step-5-run-offer-provisioner) and storage orders. +Certain orders require a positive deposit balance to keep running. ## Syntax diff --git a/docs/cli/commands/providers/update.md b/docs/cli/commands/providers/update.md index 111d9fd8..3fdb11ac 100644 --- a/docs/cli/commands/providers/update.md +++ b/docs/cli/commands/providers/update.md @@ -7,7 +7,7 @@ sidebar_label: "update" Updates the current provider using a provider info JSON file. -Provider Tools creates a provider info JSON file in [Step 4 of the Providers and Offers](/developers/cli_guides/providers_offers#step-4-register-the-provider-and-offer) guide. +Provider Tools creates a provider info JSON file in [Step 4 of the Providers and Offers] guide. **Important:** This command requires SPCTL with the [provider configuration file](/cli#for-offer-providers). diff --git a/docs/cli/commands/quotes/validate.md b/docs/cli/commands/quotes/validate.md index ce30c6a7..11a2bc62 100644 --- a/docs/cli/commands/quotes/validate.md +++ b/docs/cli/commands/quotes/validate.md @@ -7,8 +7,6 @@ sidebar_label: "validate" Checks if the domain content runs in a confidential environment. The command also displays if the domain content is a Super Protocol offer. -In the Marketplace GUI, use the [**Check Confidentiality**](/developers/marketplace/confidentiality) feature. - ## Syntax ``` diff --git a/docs/cli/commands/workflows/create.md b/docs/cli/commands/workflows/create.md index 23f4458e..5410f65f 100644 --- a/docs/cli/commands/workflows/create.md +++ b/docs/cli/commands/workflows/create.md @@ -7,9 +7,9 @@ sidebar_label: "create" Creates a main compute order and necessary suborders: solution, data, and storage. -The output of the command contains the order ID necessary to track and manage the order with the [`orders`](/cli/commands/orders) commands or via the [Marketplace GUI](/developers/marketplace/). +The output of the command contains the order ID necessary to track and manage the order with the [`orders`](/cli/commands/orders) commands or in the [Marketplace web app](https://marketplace.superprotocol.com/marketplace). -For solutions and data, you can add to an order either Marketplace [offers](/fundamentals/offers) or [uploaded files](/cli/commands/files/upload). Refer to the [fundamentals](/fundamentals) and the [Marketplace Walkthrough](/developers/marketplace/walkthrough/) to understand the logic of the Super Protocol order creation process. +For solutions and data, you can add to an order either Marketplace [offers](/fundamentals/offers) or [uploaded files](/cli/commands/files/upload). Refer to the [fundamentals](/fundamentals) to understand the logic of the Super Protocol order creation process. ## Syntax @@ -45,100 +45,3 @@ Read about the Super Protocol [command syntax](/cli/commands#command-syntax). | `--min-rent-minutes ` | Compute [lease time](/fundamentals/orders#lease-deposit-and-balance) in minutes. Using this option will increase the required deposit. The default is the minimum required time. | | `--config ` | Path to the SPCTL configuration file. The default is `./config.json`. | | `--help`, `-h` | Help for the command. | - -## Examples - -The following are three examples of using the `workflows create` command: - -- With automatic selection of a compute offer -- With manual selection of a compute offer -- With uploaded solution and data. - -### Example 1. Super Chat with automatic compute selection - -The following command deploys [Super Chat](/developers/offers/superchat): - -``` -./spctl workflows create \ - --solution 12,12 \ - --solution 6,2 \ - --data 17,22 \ - --storage 25,30 -``` - -Where: - -- `--solution 12,12`: [Tunnels Launcher](https://marketplace.superprotocol.com/solutions?offer=offerId%3D12) solution (offer ID 12, requirement slot ID 12) -- `--solution 6,2`: [Node.js Base Image](https://marketplace.superprotocol.com/?offer=offerId%3D6) solution (offer ID 6, requirement slot ID 2). Tunnels Launcher requires this solution to work -- `--data 17,22`: [Super Chat Config](https://marketplace.superprotocol.com/data?offer=offerId%3D17) dataset (offer ID 17, requirement slot ID 22) -- `--storage 25,30`: [Storj DCS Offer](https://marketplace.superprotocol.com/storage?offer=offerId%3D25) (offer ID 25, requirement slot ID 30) - -The absence of the `--tee` option means that the system will automatically select the most suitable compute offer and its configuration for your workload. However, in certain scenarios, you might want to specify the exact compute offer: - -``` -./spctl workflows create \ - --tee 4 \ - --solution 12,12 \ - --solution 6,2 \ - --data 17,22 \ - --storage 25,30 -``` - -The `--tee 4` option adds [TEE Offer #4](https://marketplace.superprotocol.com/compute?offer=offerId%3D4) (offer ID: 4) to the order. The lack of other `--tee`-related options and arguments lets the system determine the configuration slot and options automatically. - -### Example 2. Super Chat with manual compute selection - -The following command deploys [Super Chat](/developers/offers/superchat) without automatic selection: - -``` -./spctl workflows create \ - --tee 4,7 \ - --tee-slot-count 4 \ - --tee-options 10 \ - --tee-options-count 7 \ - --solution 12,12 \ - --solution 6,2 \ - --data 17,22 \ - --storage 25,30 \ - --deposit 2 \ - --min-rent-minutes 120 -``` - -Where: - -- `--tee 4,7`: [TEE Offer #4](https://marketplace.superprotocol.com/compute?offer=offerId%3D4) (offer ID: 4, configuration slot ID: 7) -- `--tee-slot-count 4`: four increments—apply the selected configuration slot four times -- `--tee-options 10`: configuration option with ID 10 -- `--tee-options-count 7`: seven increments—apply the selected configuration option seven times -- `--deposit 2`: deposit is 2 TEE tokens -- `--min-rent-minutes 120`: a minimum lease time is 120 minutes -- Other options are explained in the previous example. - -If the `--deposit` and `--min-rent-minutes` options are not specified, SPCTL uses the default minimums. The minimum lease time is the biggest of the minimum time values of all the offers in the order. - -For the offers in this example, the minimum deposit is 1.120 TEE tokens and the minimum lease time is 60 minutes: - -- The requirement slot with ID 7 of [TEE Offer #4](https://marketplace.superprotocol.com/compute?offer=offerId%3D4) has the minimum lease time of 10 minutes; four increments result in 40 minutes. -- The requirement slot with ID 12 of [Tunnels Launcher](https://marketplace.superprotocol.com/solutions?offer=offerId%3D12) (offer ID: 12) has the minimum lease time of 60 minutes. -- Other offers in the order do not restrict the minimum lease time. - -### Example 3. Uploaded solution and data - -The following command creates an order using an [uploaded](/cli/commands/files/upload) solution and data instead of adding Marketplace offers: - -``` -./spctl workflows create \ - --solution ./python-solution.json \ - --solution 5,1 \ - --data ./data-input-1.json \ - --data ./data-input-2.json \ - --storage 25,30 -``` - -Where: - -- `--solution ./python-solution.json`: uploaded solution specified in the `python-solution.json` resource file in the SPCTL root directory -- `--solution 5,1`: [Python Base Image](https://marketplace.superprotocol.com/solutions?offer=offerId%3D5) (offer ID: 5, requirement slot: ID 1) -- `--data ./data-input-1.json` and `--data ./data-input-2.json`: uploaded datasets specified in the `data-input-1.json` and `data-input-2.json` resource files in the SPCTL root directory. - -Learn more about deploying custom solutions in the [Deployment guides](/developers/deployment_guides). diff --git a/docs/cli/index.md b/docs/cli/index.md index 3ff06f54..bce3d476 100644 --- a/docs/cli/index.md +++ b/docs/cli/index.md @@ -96,9 +96,9 @@ Do not change the preconfigured parameters and fill in the following ones: ## For offer providers -This section is for offer providers only. If you are a regular user, skip it and go to the next section to [create a test order](/cli#create-a-test-order). +This section is for offer providers only. Skip it if you are a regular user. -Offer providers need another copy of SPCTL configured for their provider accounts. If you completed all the necessary steps in the [Providers and Offers](/developers/cli_guides/providers_offers) guide, you should have the configuration file created automatically in your Provider Tools directory. Its name looks like this: +Offer providers need another copy of SPCTL configured for their provider accounts. If you completed all the necessary steps in the [Providers and Offers] guide, you should have the configuration file created automatically in your Provider Tools directory. Its name looks like this: ```spctl-config-0xB9f0b77BDbAe9fBe3E60BdC567E453f503605BAa.json``` @@ -168,39 +168,6 @@ You can find the section with your Authority and Action Accounts Private Keys in }, ``` -## Create a test order - -Before you create an order, ensure you have the latest version of SPCTL. Execute the following command to see the version you are currently using: - -``` -./spctl --version -``` - -Go to the SPCTL's [GitHub page](https://github.com/Super-Protocol/ctl/releases) to see the latest version. - -Use the [`tokens request`](https://docs.dev.superprotocol.com/developers/commands/tokens/request) command to get free test TEE and POL tokens: - -``` -./spctl tokens request --tee -./spctl tokens request --matic -``` - -It may take a couple of minutes for the tokens to appear on your account. When you have them, execute the [`workflows create`](/cli/commands/workflows/create) command to create a [Super Chat](/developers/offers/superchat) order: - -``` -./spctl workflows create --solution 12,12 --solution 6,2 --data 17,22 --storage 25,30 -``` - -When your order is created, you will see the following in the last line of the CLI output: - -``` -Workflow was created, TEE order id: [""] -``` - -Where `` is the ID of your order. - -It usually takes 20-25 minutes for this order to be done. You can then check the order status using the [`orders`](/cli/commands/orders) command or in [Marketplace GUI](/developers/marketplace). - ## Set up Storj This step is optional. You can add a Marketplace storage offer to the [`files upload`](/cli/commands/files/upload) command instead of configuring Storj. However, for additional control, you can set up and use your storage. From 20634d89c2621e74b1c7b9d707d62d6c3dc08b1e Mon Sep 17 00:00:00 2001 From: k3dz0r Date: Mon, 30 Dec 2024 16:48:38 -0300 Subject: [PATCH 3/4] Marketplace Updated Release History --- docs/marketplace/release-history/index.md | 28 ++++++++++------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/docs/marketplace/release-history/index.md b/docs/marketplace/release-history/index.md index 732c353f..9552459b 100644 --- a/docs/marketplace/release-history/index.md +++ b/docs/marketplace/release-history/index.md @@ -5,25 +5,21 @@ slug: "/release-history" sidebar_position: 7 --- +Features coming up in the next phases: +- Publishing offers on the Marketplace from the uploaded files. +- Fine-tuning—train new layers of the original models. +- Support for datasets. +- More models available on the Marketplace. +- More AI engines and model categories. +- A light UI theme. -**AI Marketplace Phase 2 is live!** - -_November 21, 2024_ +_November 21, 2024:_ -We have deployed the new Marketplace for AI to testnet. It includes new features and capabilities: +**AI Marketplace Phase 2** - A demo account with AOuth2 login for a quick start. - Support for Intel TDX and NVIDIA GPU confidential computing. -- Uploading your model files to the Super Cloud or personal Storj accounts. -- Deploying AI models in confidential tunnels using a variety of AI engines and settings. -- UI/UX redesign. - -Features coming up in the next phase: - -- Publishing offers in the Marketplace from the uploaded files. -- Fine-tuning mode (train new layers of the original models). -- Support for datasets. -- More models and datasets available in the Marketplace. -- More AI engines available (and more model categories). -- A daytime UI theme. \ No newline at end of file +- Deploying AI models with confidential tunnels using a variety of AI engines and settings. +- Uploading your models to the Super Protocol cloud or personal Storj accounts. +- UI/UX redesign. \ No newline at end of file From 8547483f2b70c066631698222508a5d8c02ce700 Mon Sep 17 00:00:00 2001 From: k3dz0r Date: Mon, 6 Jan 2025 15:13:51 -0300 Subject: [PATCH 4/4] Marketplace Updated the Upload guide --- docs/marketplace/guides/upload.md | 8 +++----- docs/marketplace/orders/order/index.md | 28 ++++++++++++++++---------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/docs/marketplace/guides/upload.md b/docs/marketplace/guides/upload.md index 7c24bf41..ebfa6a75 100644 --- a/docs/marketplace/guides/upload.md +++ b/docs/marketplace/guides/upload.md @@ -50,7 +50,7 @@ Note that large models may perform poorly on CPU-only machines without GPU suppo Model repositories contain multiple files. Often, not all of them are required. -Create a directory for the model files—the model directory. Select files following the instructions for your model format. +Create a directory for the model files—the model directory. Select files following the instructions for your model format and place them to the model directory. If multiple formats are available, choose one of them and remove the others. For example, one of the highlighted sets of files on the following screenshot should be removed: @@ -73,8 +73,6 @@ Place all model files from the repository in the model directory. For example:
-## Step 3. Remove duplications - Some repositories contain several variants of the same model. Avoid duplications to reduce upload time. For example, one of the the highlighted files on the following screenshot can be removed: @@ -86,7 +84,7 @@ If a single consolidated `model.safetensors` file and multiple `model-xxxxx-of-y
-## Step 4. Create a TAR.GZ archive +## Step 3. Create a TAR.GZ archive Ensure the model directory contains no hidden files and directories. Archive the model directory into a TAR.GZ file using the following instructions: @@ -178,7 +176,7 @@ Ensure the model directory contains no hidden files and directories. Archive the -## Step 5. Upload the archive +## Step 4. Upload the archive In the [Marketplace web app](https://marketplace.superprotocol.com/), go to the **My Files** screen and press the **Upload File** button. diff --git a/docs/marketplace/orders/order/index.md b/docs/marketplace/orders/order/index.md index c64df64e..5d91db65 100644 --- a/docs/marketplace/orders/order/index.md +++ b/docs/marketplace/orders/order/index.md @@ -19,22 +19,28 @@ The contents of an order are encrypted and accessible only to the user who place - **Suspended**. The order is awaiting the creation of suborders. - **Blocked**. A suborder temporarily blocks the order to generate access keys and authorize the confidential computing device to access the suborder's content. -- **New**. The order is awaiting in the queue for the computing device to become available. -- **Processing**. The machine is executing the order inside a Trusted Execution Environment. -- **Deployed**. The model is deployed and running. -- **Done**. The computation is done, and the order result is available for download. For Deploy orders, it also means the model is no longer running. +- **In Queue**. The order is awaiting in the queue for the computing device to become available. +- **Processing**. The machine is executing the order inside a Trusted Execution Environment. + +Statuses specific for Deploy orders: + +- **Deployed**. The model is running and available via the **Access Link**. +- **Done**. The model is no longer running. + +Statuses specific for Fine-tune orders: + +- **Ready**. The new layer is available for download using the **Get Result** button. +- **Done**. The order result is no longer available for download. Additional possible statuses: -- **Cancelling**: the order is being canceled by the customer's request. +- **Canceling**: the order is being canceled by the customer's request. - **Canceled**: the order has been canceled successfully, and the remaining order deposit was transferred back to the customer's wallet. -- **Error**: the order was not completed successfully due to an error. To check the error message, download the order result by clicking the **Get Result** button. Read about the [most common errors and how to fix them](/marketplace/guides/troubleshooting). +- **Error**: the order was not completed successfully due to an error. To check the error message, download the order result by clicking the **Get Result** button. Read about the [most common errors and how to fix them](/marketplace/guides/troubleshooting#order-status-error). Learn more about [statuses](/fundamentals/orders#order-status). -**Lease Remaining** indicates the remaining time until the order is completed and gets the Done status. It is calculated by dividing the remaining order balance by the total cost of all the offers priced per hour. - -For Deploy orders, it is the duration the model will remain operational. For storage suborders, it is the duration the order result will remain available for download. +**Lease Remaining** indicates the remaining time until the order is completed and gets the Done status. It is calculated by dividing the remaining order balance by the total cost of all the offers priced per hour. For Deploy orders with the Deployed status, it is the duration the model will remain operational. ## Financials @@ -52,7 +58,7 @@ The **Deployment** section informs about the launched tunnel. Tunnels enable end - **Creating**: the tunnel order has been placed, but the tunnel or the model is not ready yet. The AI engine's web UI is not accessible. - **Online**: the tunnel is operational, and the model is running. End users may access the AI engine's web UI via the **Access Link**. -- **Offline**: the tunnel order is done, and the tunnel is no longer available. The AI engine's web UI is inaccessible, but the expired **Access Link** remains visible. +- **Offline**: the tunnel order is done, and the tunnel is no longer available. The model is inaccessible, but the expired **Access Link** remains visible. To get detailed information about the tunnel orders related to the main order, open the **Tunnels Orders** tab at the bottom of the screen. The **Tunnels** section and the **Tunnels Orders** tab only exist for orders that utilize tunnels and are only visible to the user who placed the order. @@ -62,7 +68,7 @@ Depending on the order status, different buttons are visible: - **Cancel Order** and **Extend Lease** for orders with the Suspended, Blocked, New, or Processing statuses. - **Get Result** for orders with the Done, Error, and Canceled statuses. -- No buttons for orders with the Cancelling status. +- No buttons for orders with the Canceling status. These buttons are only visible to the user who placed the order.