Phat (fat) contract Учебное пособие
2.2 В этом учебном пособиипоказано, как использовать возможности HTTP-запросов Phat Contract для связывания учетной записи Phala с пользователем Github. Такая функциональность служит ядром длядецентрализованной идентификации (DID). Далее мы покажем, как развернуть ваш контракт вPhala Testnetи взаимодействовать с ним через нашfrontend SDK.
Подготовьтесь к работе
Чтобы ваше приложение заработало, вам необходимо загрузить демонстрационный код внешнего и внутреннего интерфейса:
-
Код внутреннего интерфейса, также известный как демо-контракт Phat, доступен в нашемрепозитории Phat Contract Workshop;
-
Внешний SDK (JS-SDK), который уже содержит внешний интерфейс для взаимодействия с контрактом выше в качестве примера.
После того, как ваш контракт будет готов, вы должны загрузить его в какой-нибудь кластер контрактов вPhala Testnetи создать его экземпляр.
- Доступный кластер: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Вам понадобятся две конечные точки для настройки вашего интерфейса для взаимодействия с вашим контрактом:
-
Endpoint Phala node WebSocket для чтения данных ончейн и отправки. Команда: wss://poc5.phala.network/ws
-
Взаимодействие Secure Worker и одного Secure Worker для нашего Testnet
-
Worker 0x94a2ded4c77fbb910943f7e452e4d243ee5b60bf1a838a911acf2ffd4bae9b63
Обратите внимание, что endpoint узла в целом стабильна, в то время как доступный кластер и Secure Workers могут изменяться в связи с обновлением Testnet. Если что-то не работают сообщите в наш канал #devDiscord
Подготовка среды (Environment Preparation)
Для workshop рекомендуется операционная система macOS или Linux, например Ubuntu 18.04/20.04.
-
Пользователям macOS мы рекомендуем использоватьHomebrewдля установки зависимостей.
-
Пользователям других дистрибутивов Linux следует использовать менеджер пакетов с такой системой, как Apt/Yum
-
Rust toolchain
-
Install rustup, rustup is the “package manager” of different versions of Rust compilers:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
This will install
rustup
andcargo
-
Ink! Contract toolchain
-
Installbinaryenwith
-
Homebrew for macOS:
brew install binaryen
-
Apt for Ubuntu:
sudo apt install binaryen
-
or download thereleaseand put it under your
$PATH
-
Install dylint-link toolchain:
cargo install cargo-dylint dylint-link
-
Install contract toolchain:
cargo install cargo-contract --force
-
For macOS M1 chip users:
rustup component add rust-src --toolchain nightly-aarch64-apple-darwin
-
Install frontend toolchain
-
Node.js (>=v16), follow theofficial tutorial
-
Yarn (v1):
npm install --global yarn
Проверьте свою установку c
$ rustup toolchain list
# stable-x86_64-unknown-linux-gnu (default)
# nightly-x86_64-unknown-linux-gnu
$ cargo — version
# cargo 1.58.0 (f01b232bc 2022–01–19)
$ cargo contract — version
# cargo-contract 0.17.0-unknown-x86_64-linux-gnu
$ node — version
# v17.5.0
$ yarn — version
# 1.22.17
Создайте учетную запись Polkadot для использования Phala Testnet
Наша тестовая сеть запускается в разработке , поэтому для вас есть несколько предопределенных учетных записей разработки с достаточным количеством токенов.
Также вы можете установить расширение Polkadot.js и создать/импортировать учетную запись, следуяофициальномуруководствоPhala.
Подключиться к тестовой сети Phala
Откройтеhttps://polkadot.js.org/apps/;
Нажмите слева вверху, чтобы переключить сеть;
Выберите Test Networks — Phala (PoC 5) и нажмите Switch вверху;
Отправьте немного токенов на свой счет (ограничено);
Отправьте несколько монет с указанных выше счетов разработчиков.
Скомпилируйте контракт
В fat-contract-workshop выполните следующие команды:
cargo +nightly contract build
Также проверьте, чтобы убедиться, что все в порядке
cargo +nightly Contract test
Вы найдете результат компиляции в ./target/ink:
$ ls -h target/ink
# fat_sample.wasm metadata.json …
fat_sample.wasm содержит скомпилированный код контракта и будет загружен для выполнения; metadata.json , содержит информацию о вашем контракте, особенно всеinterfacesи их4-байтовые селекторы (4-byte selectors). Вы будете использовать эти селекторы при взаимодействии с контрактом, чтобы было понятно, какую функцию вызывать.
Развертывание (Deploy)
Соберите два вышеуказанных файла и создайте контракт в Phala Testnet (PoC 5). Развертывание контракта можно разделить на два этапа: загрузка кода и создание экземпляра контракта.
Мы рекомендуем следить заExplorer, чтобы не пропустить ни одного события истории.
Загрузка кода
Выберите Developer — Extrinsics и выберите внешний phalaFatContracts и uploadCodeToCluster.
-
Перетащите fat_sample.wasm ;
-
Используйте доступный Кластер, упомянутыйabove;
и отправить транзакцию.
Событие phalaFatContracts.CodeUploaded должно наблюдаться в обозревателе блоков с хешем кода, записывайте хеш для использования в будущем.
Загрузка кода может завершиться ошибкой, если в скомпилированном wasm есть недопустимые инструкции. Сообщите об этом в канале #dev нашего Discord, и мы поможем вам найти причину.
Создание контракта
Выберите Developer — Extrinsics и выберите внешний phalaFatContracts и instantiateContract. Мы назначаем аргументы следующим образом:
-
codeIndex: код для использования, выберите WasmCode и введите хэш загруженный вами;
-
data: аргумент создания экземпляра. Мы будем называть функцию-конструктор контракта конкретным селектором функций. Это можно найти в metadata.json (в данном случае 0xed4b9d1b)
…
“constructors”: [
{
“args”: [],
“docs”: [],
“label”: “default”,
“payable”: false,
“selector”: “0xed4b9d1b”
}
],
…
-
salt: несколько случайных байтов для предотвращения конфликтов, например 0x0 или 0x1234
-
clusterId: это должен быть то же, что и призагрузке кода, так как код хранится на уровне кластера
Необходимо наблюдать за тремя событиями, все эти события содержат идентификатор вашего контракта (Contract ID).
-
phalaFatContracts.Instantiating, чейн получил ваш запрос и начала создание экземпляра;
-
phalaFatContracts.ContractPubkeyAvailable — гейткипер сгенерировал ключ контракта для шифрования своего состояния и ввода/вывода;
-
phalaFatContracts.Instantiated, ваш контракт успешно создан.
Вы можете перейти в Developer — Chain state и выбрать внешние phalaFatContracts и contracts, чтобы увидеть все контракты.
Обработка отказа создания экземпляра. На данный момент журнал выполнения контракта недоступен разработчикам напрямую. Присоединяйтесь к нашемуDiscord, и мы можем помочь переслать журналы Worker, если это необходимо.
Запустите Frontend
Phala предоставляетjs-sdkдля упрощения frontend часть. Он уже содержит интерфейс для демо-контракта, проверьте егопапку с примерами.
Следуйте инструкциям для запуска внешнего интерфейса
- Загрузите Phala-Network/js-sdk
git clone — branch ethdenver-2022https://github.com/Phala-Network/js-sdk.git
2. Скомпилируйте и запустите внешний интерфейс. По умолчанию он будет обслуживать приложение по адресуhttp://localhost:3000:
cd js-sdk yarn
yarn
dev
Экспериментируйте со своим контрактом
Откройте frontend, по умолчанию он находится поадресу http://localhost:3000
-
Подключите свой кошелек;
-
Load the deployed contract;
-
Substrate endpoint: wss://poc5.phala.network/ws
-
Secure Worker endpoint:https://poc5.phala.network/tee-api-1
-
Contract ID: available duringContract Instantiation
-
ABI: copy from metadata.json (prebuilt copy)
3. Нажмите Sign a Certificate, это создаст сертификат для шифрования вашего трафика в/из контракта;
4. Следуйте инструкциям, скопируйте содержимое и создайте собщедоступныйGithub Gist;
5. Откройте файл RAW и скопируйте ссылку;
6. Вставьте ссылку в поле и нажмите Verify;
7. Окно активации кода будет обновляться каждые 5 секунд и должно показать ваш код после успешной проверки.
Внимание
По умолчанию poap_code пуст, поэтому пользователи могут получить только пустую строку, даже если они прошли проверку. Администратор контракта должен сначала вызвать admin_set_poap_code() , чтобы заполнить пул кодов выкупа, чтобы пользователи действительно могли что-то получить.
Задача: Fill in the Missing Code
Мы сделали вам две задачи (обозначенные TODO) для изучения.
-
Первая касается добавления необходимого контроля доступа к функции кода выкупа обновления. Вы узнаете, как получить доступ к метаданным контракта с помощью функции self.env() ;
-
Вторая — проверка на предотвращение двойного исполнения кода.
Решение
Пожалуйста, проверьте ветку ethdenver-2022-solution.
Appendix
Endpoints
Chain: wss://poc5.phala.network/ws
Polkadot.js quick link:https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpoc5.phala.network%2Fws#/explorer
Workers (with their identity key)
https://poc5.phala.network/tee-api-1
0x94a2ded4c77fbb910943f7e452e4d243ee5b60bf1a838a911acf2ffd4bae9b63
https://poc5.phala.network/tee-api-2
0x50ede2dd7c65716a2d55bb945dfa28d951879154f832e049851d7882c288db76
https://poc5.phala.network/tee-api-3
0xfe26077a6030e505136855100f335503ca40f6e8afa149b0c6c618e81c1cb53b
https://poc5.phala.network/tee-api-4
0x6cfc1282880305c7691f0941b98089b9da17acde43b66ef2220022797bb3e370
https://poc5.phala.network/tee-api-5
0xbed94c30d660a1de5a499e38f9f3afe9ccc1ef5f901530efd48de641679fbc7d
С первоисточником статьи можно ознакомиться здесь
💎 —Discord PhalaNetwork|Телеграм|Telegram en
Информация о проктах дотсамы
0 comments