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

  • Endpointhttps://poc5.phala.network/tee-api-1

Обратите внимание, что 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 installrustupandcargo

  • 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 часть. Он уже содержит интерфейс для демо-контракта, проверьте егопапку с примерами.

Следуйте инструкциям для запуска внешнего интерфейса

  1. Загрузите 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

  1. Подключите свой кошелек;

  2. Load the deployed contract;

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

✅ — |Website|Twitter|Github|Forum|

🤖 —Discord Phala Word

0
3tMUc3…q23WgPPost author

Информация о проктах дотсамы

0 comments

Информация о проктах дотсамы