Super Protocol CLI . Гайд для разработчиков.
April 20th, 2023

Super Protocol CLI — мощный инструмент для разработчиков. Он поддерживает все функции, доступные в настоящее время в протоколе.

  1. Установка

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

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

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

3. CLI-команды

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

  • files Manage files in third-party storages (Управление файлами в сторонних хранилищах)

  • offers Manage Super Protocol offers (Управление предложениями Super Protocol)

  • orders Manage Super Protocol orders (Управление заказами Super Protocol)

  • providers Manage Super Protocol providers (Управление поставщиками Super Protocol)

  • solutions Prepare solutions to be deployed on Super Protocol (Подготовьте решения для развертывания на Super Protocol)

  • tii Prepare custom resource to be processed without sharing the source (Подготовьте пользовательский ресурс для обработки без совместного использования источника)

  • workflows Create new orders (Создавайте новые заказы)

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

Usage spctl files

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

  • delete Delete a file in the remote storage using resource file (Удалить файл в удаленном хранилище с помощью файла ресурсов) <resourcePath>

  • download Download and decrypt a file from the remote storage to <localPath> using resource file (Загрузите и расшифруйте файл из удаленного хранилища в с помощью файла ресурсов.) <resourcePath>

  • upload Upload a file specified by the <localPath> argument to the remote storage (Загрузить файл, указанный аргументом , в удаленное хранилище)

3.2. Удаление файлов

spctl files delete [OPTIONS]

Удалить файл в удаленном хранилище, используя файл ресурсов <resourcePath>
Удалить файл в удаленном хранилище, используя файл ресурсов <resourcePath>

3.3. Скачивание Файлов

spctl files download [OPTIONS]

Загрузите и расшифруйте файл из удаленного хранилища в <localPath>, используя файл ресурсов <resourcePath>
Загрузите и расшифруйте файл из удаленного хранилища в <localPath>, используя файл ресурсов <resourcePath>

3.4. Загрузка файла

spctl files upload [OPTIONS]

Загрузить файл, указанный аргументом <localPath>, в удаленное хранилище
Загрузить файл, указанный аргументом <localPath>, в удаленное хранилище

4. Предложения (Offers)

spctl offers

Управление предложениями Super Protocol
Управление предложениями 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 с идентификатором
Показать подробную информацию о предложении 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
Список предложений 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
правление заказами Super Protocol

5.1. Cancel order (Отмена заказа)

spctl orders cancel [OPTIONS]

Отменить заказ с идентификатором
Отменить заказ с идентификатором

5.2. Download order result (Скачать результаты)

spctl orders download-result [OPTIONS]

Скачать результат заказа с id
Скачать результат заказа с 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 на сумму
Пополнить депозит заказа с id на сумму

5.6. Withdraw order deposit (Депозит заказа на снятие средств)

spctl orders withdraw-deposit [OPTIONS]

Снять неизрасходованный депозит с выполненного заказа с id
Снять неизрасходованный депозит с выполненного заказа с 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
Подготовьте решения для развертывания на 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 из загруженного ресурса
Создание 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 в каталоге запуска со следующим кодом

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 — это тот, который запускается, когда вы запускаете свой скрипт 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: скрипт 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.

Создание корзины. Создайте корзину, используя это руководство. Не забудьте сохранить кодовую фразу, чтобы не потерять данные.

Имя корзины используется в конфигурационном файле 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 всегда шифруют результаты перед их загрузкой в ​​хранилище. Приведенные ниже параметры относятся к этому шифрованию.

Subscribe to icofomo
Receive the latest updates directly to your inbox.
Nft graphic
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.