Super Protocol CLI — мощный инструмент для разработчиков. Он поддерживает все функции, доступные в настоящее время в протоколе.
Linux:
curl -L 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 -o spctl
sudo install spctl /usr/local/bin/spctl
ПРИМЕЧАНИЕ 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]
3.3. Скачивание Файлов
spctl files download [OPTIONS]
3.4. Загрузка файла
spctl files upload [OPTIONS]
4. Предложения (Offers)
spctl offers
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]
4.5.2 Получите предложение Value
spctl offers get value [OPTIONS]
4.5.3. Получите предложение Информация ( Get offer info )
spctl offers get-info
spctl offers list
spctl offers list tee [OPTIONS]
spctl offers list value [OPTIONS]
spctl offers update
spctl orders
spctl orders cancel [OPTIONS]
spctl orders download-result [OPTIONS]
spctl orders get [OPTIONS]
spctl orders list [OPTIONS]
spctl orders replenish-deposit [OPTIONS]
spctl orders withdraw-deposit [OPTIONS]
spctl providers
spctl providers get [OPTIONS]
spctl providers list [OPTIONS]
spctl solutions
spctl solutions generate-key [OPTIONS]
spctl solutions prepare [OPTIONS]
spctl tii
spctl tii generate [OPTIONS]
spctl workflows
spctl workflows create [OPTIONS]
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 всегда шифруют результаты перед их загрузкой в хранилище. Приведенные ниже параметры относятся к этому шифрованию.