# Super Protocol CLI . Гайд для разработчиков.

By [icofomo](https://paragraph.com/@icofomo) · 2023-04-20

---

[Super Protocol](https://superprotocol.com/) CLI — мощный инструмент для разработчиков. Он поддерживает все функции, доступные в настоящее время в протоколе.

1.  **Установка**
    

*   Linux:
    
*   curl -L [https://github.com/Super-Protocol/ctl/releases/latest/download/spctl-linux-x64](https://github.com/Super-Protocol/ctl/releases/latest/download/spctl-linux-x64) -o spctl sudo install spctl /usr/local/bin/spctl
    
*   macOS:
    
*   curl -L [https://github.com/Super-Protocol/ctl/releases/latest/download/spctl-macos-x64](https://github.com/Super-Protocol/ctl/releases/latest/download/spctl-macos-x64) -o spctl sudo install spctl /usr/local/bin/spctl
    

_ПРИМЕЧАНИЕ Windows не поддерживается, используйте WSL_

**2\. Начало работы**

Прежде чем вы сможете использовать CLI, вам необходимо создать файл конфигурации (раздел Гайд в конце текста) .

**3\. CLI-команды**

**Описание команд**

*   [files](https://docs.superprotocol.com/testnet/cli/commands/files) Manage files in third-party storages (Управление файлами в сторонних хранилищах)
    
*   [offers](https://docs.superprotocol.com/testnet/cli/commands/offers) Manage Super Protocol offers (Управление предложениями Super Protocol)
    
*   [orders](https://docs.superprotocol.com/testnet/cli/commands/orders) Manage Super Protocol orders (Управление заказами Super Protocol)
    
*   [providers](https://docs.superprotocol.com/testnet/cli/commands/providers) Manage Super Protocol providers (Управление поставщиками Super Protocol)
    
*   [solutions](https://docs.superprotocol.com/testnet/cli/commands/solutions) Prepare solutions to be deployed on Super Protocol (Подготовьте решения для развертывания на Super Protocol)
    
*   [tii](https://docs.superprotocol.com/testnet/cli/commands/tii) Prepare custom resource to be processed without sharing the source (Подготовьте пользовательский ресурс для обработки без совместного использования источника)
    
*   [workflows](https://docs.superprotocol.com/testnet/cli/commands/workflows) Create new orders (Создавайте новые заказы)
    

**3.1. Файлы. (Управление файлами в сторонних хранилищах)**

Usage spctl files

Описание команд

*   [delete](https://docs.superprotocol.com/testnet/cli/commands/files/delete) Delete a file in the remote storage using resource file (Удалить файл в удаленном хранилище с помощью файла ресурсов) `<resourcePath>`
    
*   [download](https://docs.superprotocol.com/testnet/cli/commands/files/download) Download and decrypt a file from the remote storage to `<localPath>` using resource file (Загрузите и расшифруйте файл из удаленного хранилища в с помощью файла ресурсов.) `<resourcePath>`
    
    *   [upload](https://docs.superprotocol.com/testnet/cli/commands/files/upload) Upload a file specified by the `<localPath>` argument to the remote storage (Загрузить файл, указанный аргументом , в удаленное хранилище)
        
*   **3.2. Удаление файлов**
    
    spctl files delete \[OPTIONS\] Удалить файл в удаленном хранилище, используя файл ресурсов <resourcePath> **3.3. Скачивание Файлов** spctl files download \[OPTIONS\] Загрузите и расшифруйте файл из удаленного хранилища в <localPath>, используя файл ресурсов <resourcePath> **3.4. Загрузка файла** spctl files upload \[OPTIONS\] Загрузить файл, указанный аргументом <localPath>, в удаленное хранилище **4\. Предложения (Offers)** spctl offers Управление предложениями Super Protocol **4.1. Создать предложение** spctl offers create Создать новое предложение **4.2. Отключить предложение** spctl offers disable Отключить предложение **4.3. Скачать контент из предложения** spctl offers download-content \[OPTIONS\] Скачать содержимое предложения с идентификатором (только для предложений, которые позволяют эту операцию) **4.4. Включить предложение** spctl offers enable **4.5. Получить предложение** spctl offers get Показать подробную информацию о предложении с идентификатором **4.5.1. Получить предложение TEE** spctl offers get tee \[OPTIONS\] Показать подробную информацию о предложении TEE с идентификатором **4.5.2 Получите предложение Value** spctl offers get value \[OPTIONS\] Показать подробную информацию о ценностном предложении с идентификатором **4.5.3. Получите предложение Информация ( Get offer info )** spctl offers get-info Отображение информации о предложении с идентификатором, поскольку он хранится в блокчейне 4.5.4. List offers spctl offers list Список предложений 4.5.5. List TEE offers spctl offers list tee \[OPTIONS\] Список предложений TEE 4.5.6. List value offers spctl offers list value \[OPTIONS\] Предложения со стоимостью списка 4.5.7. Update offer spctl offers update Обновить предложение 5. Orders (Предложение) spctl orders правление заказами Super Protocol 5.1. Cancel order (Отмена заказа) spctl orders cancel \[OPTIONS\] Отменить заказ с идентификатором 5.2. Download order result (Скачать результаты) spctl orders download-result \[OPTIONS\] Скачать результат заказа с id 5.3. Get order (Получить заказ) spctl orders get \[OPTIONS\] Показать подробную информацию о заказе с идентификатором 5.4. List orders (Список заказов) spctl orders list \[OPTIONS\] Список заказов 5.5. Replenish order deposit (Пополнить депозит заказа) spctl orders replenish-deposit \[OPTIONS\] Пополнить депозит заказа с id на сумму 5.6. Withdraw order deposit (Депозит заказа на снятие средств) spctl orders withdraw-deposit \[OPTIONS\] Снять неизрасходованный депозит с выполненного заказа с id 6. Providers spctl providers Управление поставщиками суперпротокола 6.1. Get provider (Получить провайдера) spctl providers get \[OPTIONS\] Показать подробную информацию о провайдере с адресом 6.2. List providers (Список Провайдеров) spctl providers list \[OPTIONS\] Список поставщиков 7. Solutions (Решения) spctl solutions Подготовьте решения для развертывания на Super Protocol 7.1. Generate a key (генерирование ключа) spctl solutions generate-key \[OPTIONS\] Создание ключа подписи решения 7.2. Prepare a solution (Подготовка решения) spctl solutions prepare \[OPTIONS\] Подготовьте решение к развертыванию 8.TII spctl tii Подготовьте пользовательский ресурс для обработки без совместного использования источника 8.1. Generate TII (Создать TII ) spctl tii generate \[OPTIONS\] Создание TII из загруженного ресурса 9. Workflows (Рабочие процессы) spctl workflows Создавайте новые заказы 9.1. Create workflow spctl workflows create \[OPTIONS\] Создавайте новые заказы 9.2. Generate private key spctl workflows generate-key Сгенерируйте закрытый ключ для шифрования результатов заказа **Управление предложениями** Предварительные требования​. Чтобы создавать предложения, вы должны быть зарегистрированы в качестве провайдера на Super Protocol. Создание/модификация предложения использует файл JSON в качестве источника информации для обновления в блокчейне. Вы можете получить образец файла для предложений TEE и Value из репозитория. Создание предложения При создании нового предложения заполните образец файла offerInfo.json необходимой информацией о вашем предложении. Затем выполните следующую команду: spctl offers get-info Вы можете проверить правильность создания предложения, выполнив команду offers get-info. Модификация предложения​ Вы можете получить информацию о текущем предложении с помощью следующей команды: spctl offers get-info Затем заполните файл offerInfo.json в соответствии с отображаемыми данными, внеся необходимые коррективы. После того, как вы обновили файл, вы готовы обновить свое предложение в блокчейне: spctl offers update --path ./offerInfo.json Вы можете убедиться, что обновление применяется правильно, снова выполнив команду offer get-info. **Выполнение скрипта Python Предпосылки** Предварительные требования​ Прежде чем вы сможете использовать это руководство, вам необходимо получить письмо-приглашение с личными учетными данными для доступа к тестовой сети Super Protocol. Если у вас его нет, обратитесь к руководству по началу работы. Для развертывания собственных решений вам необходим интерфейс командной строки (CLI). Поддерживаются следующие системы: линукс x64 macOS x64 Windows (только WSL) x64 ПРИМЕЧАНИЕ Процессоры на базе ARM, такие как Apple M1, не поддерживаются. Дополнительное необходимое программное обеспечение: Докер OpenSSL **Загрузка базового образа Python** Ваше решение будет использовать базовый образ Python, который уже доступен в Super Protocol. Поэтому, чтобы протестировать его локально, а также подготовить решение к развертыванию, вам необходимо скачать базовый образ и загрузить его в Docker. Используйте следующую команду CLI, чтобы загрузить базовый образ и сохранить его в текущем каталоге: spctl offers download-content 3 Загрузите образ в Docker: docker load -i python3.10-base-solution-image-0.0.2.image.tar.gz Создать новое решение Создайте следующие подкаталоги в корневом каталоге вашего решения: run: здесь размещается решение и библиотеки inputs: используется для входных файлов при локальном тестировании решения вывод: используется для выходных файлов при локальном тестировании решения. Создайте файл [entrypoint.py](http://entrypoint.py) в каталоге запуска со следующим кодом import os import traceback from PIL import Image, ImageDraw, ImageFont RUN\_DIR = os.getenv('RUN\_FOLDER', os.path.dirname(os.path.abspath(**file**))) INPUT\_DIR = os.getenv('INPUT\_DATA\_FOLDER', os.path.join(RUN\_DIR, "..", "inputs")) OUTPUT\_DIR = os.getenv('OUTPUT\_DATA\_FOLDER', os.path.join(RUN\_DIR, "..", "output")) FONT\_FILE = os.path.join(RUN\_DIR, 'arial.ttf') def draw\_from\_text\_file(text\_file, result\_image): with open(text\_file) as f: input\_text = f.read() width = 512 height = 512 font = ImageFont.truetype(FONT\_FILE, size=24) image = Image.new('RGB', (512, 512), color=(9, 10, 72)) img\_draw = ImageDraw.Draw(image) box = img\_draw.textbbox((0, 0), input\_text, font=font) x\_text = (width - (box\[2\] - box\[0\])) / 2 y\_text = (height - (box\[3\] - box\[1\])) / 2 img\_draw.text((x\_text, y\_text), input\_text, font=font, fill=(1, 240, 255)) image.save(result\_image) def main(): # Scan input directories and execute draw\_from\_text\_file function for each txt file # Each dataset is placed in a separate subdirectory under the `inputs` directory: input-0001, input-0002, etc. for root, dirs, files in os.walk(INPUT\_DIR): rel\_root = root\[len(INPUT\_DIR) + 1:\] os.makedirs(os.path.join(OUTPUT\_DIR, rel\_root), exist\_ok=True) for filename in files: try: if not filename.endswith(".txt"): raise TypeError("Only .txt files are supported as inputs") draw\_from\_text\_file( os.path.join(INPUT\_DIR, rel\_root, filename), os.path.join(OUTPUT\_DIR, rel\_root, filename\[:-len(".txt")\] + ".png")) except Exception: # If unsuccessful, create a file with an error with open(os.path.join(OUTPUT\_DIR, rel\_root, filename\[:-len(".txt")\] + ".err"), 'w') as output: output.write(str(traceback.format\_exc())) if **name** == '**main**': main() **ПРИМЕЧАНИЕ** Файл [entrypoint.py](http://entrypoint.py) — это тот, который запускается, когда вы запускаете свой скрипт Python в Super Protocol. Вы можете использовать любые дополнительные модули в своем проекте, пока у вас есть этот файл. Для приведенного выше сценария требуется файл шрифта arial.ttf в каталоге запуска. Вы можете скачать это здесь. Создайте файл requirements.txt в корневом каталоге вашего решения. Для приведенного выше сценария содержимое выглядит следующим образом: Подушка~=9.2.0 Выполните следующую команду в корневом каталоге решения, чтобы загрузить необходимые библиотеки: pip3 install -r requirements.txt -t ./run/pypi/lib/python3.10/site-packages Дважды проверьте себя! Если все сделано правильно, содержимое каталога запуска должно выглядеть следующим образом: pypi: библиотеки Python arial.ttf: файл шрифта [entrypoint.py](http://entrypoint.py): скрипт Python Протестируйте решение​ Чтобы протестировать решение, вам нужны некоторые данные в качестве входных данных. Создайте подкаталог input-0001 в каталоге inputs. В этом новом подкаталоге создайте файл text-file-1.txt со следующим текстом: Суперпротокол — это круто! Теперь таким же образом поместите в эту новую поддиректорию файл text-file-2.txt с любым текстом. Выполните следующую команду в корневом каталоге решения, чтобы запустить решение внутри контейнера Docker: docker run --rm -ti -v $PWD/run:/sp/run -v $PWD/inputs:/sp/inputs -v $PWD/output:/sp/output --entrypoint /usr/bin/python3 -w /sp/run -e PYTHONPATH="${PYTHONPATH}:/sp/run/pypi/lib/python3.10/site-packages" gsc-python3.10-base-solution:последняя точка входа.py Если все сделано правильно, выходной каталог должен иметь два подкаталога input-0001 и input-0002 с файлами png с тем же текстом, что и во входных файлах. Подготовьте решение Прежде чем запускать собственное решение на Super Protocol, его необходимо упаковать, зашифровать и загрузить в хранилище. Прежде всего, выполните следующую команду в каталоге, где вы разместили файл CLI, чтобы сгенерировать ключ подписи: Решения spctl генерируют ключ подписи ключа ПРИМЕЧАНИЕ Вам не нужно генерировать новый ключ для каждого решения, вы можете просто повторно использовать существующий. Затем упакуйте свое решение с помощью следующей команды: подготовка решений spctl --pack-solution solution.tar.gz --write-default-manifest --base-image-path python3.10-base-solution-image-0.0.2.image.tar.gz <корневой каталог вашего решения>/run signing-key Теперь загрузите свое решение в хранилище: файлы spctl загружают решение.tar.gz --output решение.json --filename решение.tar.gz --metadata ./metadata.json Подготовьте данные​ Упакуйте оба тестовых входных каталога в отдельные архивы tar.gz: tar -czvf input-1.tar.gz -C <корневой каталог вашего решения>/inputs/input-0001 . tar -czvf input-2.tar.gz -C <корневой каталог вашего решения>/inputs/input-0002 . Загрузить архивы в хранилище: Загрузка файлов spctl input-1.tar.gz --output input-1.json --filename input-1.tar.gz Загрузка файлов spctl input-2.tar.gz --output input-2.json --filename input-2.tar.gz Запустите решение на Super Protocol​ Чтобы запустить подготовленное решение с данными по Суперпротоколу, выполните следующую команду: рабочие процессы spctl create --tee 1 --storage 13 --solution 3 --solution solution.json --data input-1.json --data input-2.json Команда выше создает 2 заказа: TEE: родительский заказ на вычислительные ресурсы (предложение TEE с ID=1). Только этот конкретный узел может расшифровать ваше решение и данные и только в доверенной среде выполнения, поэтому даже владелец этого узла не может получить доступ и изменить код, данные или результаты. Решение: подзаказ на базовое изображение (предложение решения с ID=3). Кроме того, после завершения расчета будет создан подзаказ на хранение для временного хранения результатов (предложение по хранению с идентификатором = 13). В конце выполнения команда покажет идентификатор созданного родительского заказа TEE. Используйте этот идентификатор для проверки статуса заказа: заказы spctl получают <ID заказа> Когда статус будет выполнен, выполните следующую команду, чтобы загрузить результаты: spctl заказывает загрузку-результат <идентификатор заказа> В вашем каталоге CLI должен быть новый файл с именем result.tar.gz. В архиве вы должны найти тот же результат, который вы получили ранее при локальном тестировании, а также лог-файл. Если во время выполнения скрипта возникнут какие-либо ошибки, они будут записаны в этот лог-файл. Если статус заказа "Ошибка", вы все равно сможете скачать результаты, но вместо архива будет файл result.txt с сообщением об ошибке. Конфиденциальное исполнение Возможно, вы уже знаете, что можете запускать свои собственные решения в сети Super Protocol. Если нет, ознакомьтесь с руководством по выполнению сценариев Python, в котором объясняется, как подготовить собственные решения и данные. В этой статье более подробно рассматривается концепция решения. Чтобы гарантировать, что исходный код остается неизменным и выполняется в безопасной среде, создается файл TII. Например, это происходит, когда команда создания рабочих процессов запускается с файлом решения, переданным с использованием параметра --solution. Этот процесс генерирует TII во время выполнения и шифрует его, гарантируя, что он останется недоступным даже для создателя рабочего процесса. ПРИМЕЧАНИЕ Чтобы узнать больше о TII и его реализации, обратитесь к нашему техническому документу. В определенных ситуациях может потребоваться создать TII и сохранить полный контроль над ним. Например, чтобы иметь возможность поделиться своим решением с другими, не раскрывая исходный код. Использование ресурса удаленного хранилища нецелесообразно, поскольку оно позволяет читать исходный файл, в то время как TII зашифрован с помощью аппаратного ключа и может быть расшифрован только в области TEE. Чтобы сгенерировать TII, ваше решение должно быть подготовлено и загружено в удаленное хранилище. Имейте в виду, что сгенерированный файл metadata.json имеет решающее значение, так как он содержит хэш и mrenclave, которые подтверждают подлинность источника. Этот пример основан на руководстве по выполнению сценариев Python. Когда будете готовы, выполните команду: spctl tii generate --offer 1 --output ./solution-tii.json ./solution.json Эта команда создает файл solution-tii.json, зашифрованный открытым ключом предложения Compute с идентификатором 1. Открытый ключ извлекается из цепочки блоков. С этого момента решение-tii.json может работать только в предложении Compute 1, так как другие поставщики не могут его расшифровать. Теперь давайте запустим только что созданный TII в суперпротоколе: рабочие процессы spctl create --tee 1 --storage 13 --solution 3 --solution ./solution-tii.json --data input-1.json --data input-2.json Вы можете безопасно поделиться своим файлом ./solution-tii.json, позволяя другим запускать решение со своими данными. Хранилища На данный момент в качестве внешнего хранилища для Super Protocol поддерживается только STORJ. Дополнительные возможности будут доступны в будущем. **Storj** Введение​ Storj — это децентрализованное решение для хранения данных с бесплатными и платными предложениями. Прежде чем вы сможете начать использовать его для своих зашифрованных решений и данных, вам необходимо создать учетную запись на [storj.io](http://storj.io). Создание корзины. Создайте корзину, используя это руководство. Не забудьте сохранить кодовую фразу, чтобы не потерять данные. Имя корзины используется в конфигурационном файле CLI (параметр корзины в разделе хранилища). Создание грантов доступа Используйте это руководство, чтобы создать 2 гранта доступа: С разрешением на запись. Этот используется для загрузки ваших зашифрованных данных и решений в корзину. С разрешением на чтение. Этот используется поставщиками TEE для доступа к вашим зашифрованным данным и решениям. Оба производных токена используются в конфигурационном файле CLI (параметры writeAccessToken и readAccessToken в разделе хранилища). ОСТОРОЖНОСТЬ Оба гранта должны влиять на один и тот же сегмент, который был создан ранее. При создании разрешений на доступ используйте ту же фразу-пароль, что и для корзины. Чтобы использовать инструмент Super Protocol CLI, вам необходимо создать файл config.json в том же каталоге, где вы поместили файл spctl. Вы можете получить образец файла config.json из репозитория. Кроме того, вы можете использовать команды CLI, и инструмент автоматически создаст для вас пустой файл config.json. Откройте файл config.json и заполните параметры в соответствии с инструкциями ниже. серверная часть Этот раздел содержит параметры, необходимые для подключения к серверной части Super Protocol. Бэкенд значительно оптимизирует чтение данных из блокчейна, например, предложений и заказов. Прежде чем вы сможете развернуть свои собственные решения или использовать свои данные в Super Protocol, вам необходимо зашифровать их и загрузить в какое-либо хранилище, к которому могут иметь доступ поставщики TEE. См. эти руководства для получения информации о поддерживаемых хранилищах и их настройке. Этот раздел содержит параметры, связанные с созданием новых заказов. результат Шифрование​ Поставщики TEE всегда шифруют результаты перед их загрузкой в ​​хранилище. Приведенные ниже параметры относятся к этому шифрованию. [Гайд на английском языке](https://docs.superprotocol.com/testnet/cli/) [Русскоязычный дискорд](https://discord.gg/rKQJjM8NSA)

---

*Originally published on [icofomo](https://paragraph.com/@icofomo/super-protocol-cli-2)*
