October 8

Гайд по виконанню третього завдання в проекті Canton

Крипто-подорожі з Дмитром - канал про ретродропи, тестнети, блокчейни, скрипти, NFT, криптобіржі, коротше, про все цікаве зі світу криптовалюти. Впевнений, тобі буде цікаво та корисно.
Чат каналу - ласкаво прошу, спілкуємось, ділимося новими активностями, допомагаємо один одному.

Привіт всім.

Отже, сьогодні виконуємо третє завдання для проекту Canton, в якого 400 лямів інвесту. Перше і друге я розписав в своєму ТГ каналі, там не складно, можете ознайомитись:
Перше
Друге

Посилання на сторінку з завданням:
https://earn.stackup.dev/campaigns/unlocking-canton-with-daml-unifying-traditional-and-crypto-markets-on-chain

Результатом виконання завдання має бути скрін, який ви бачите зверху. Погнали?

В роботі я користуюсь програмою MobaXterm, вона зручна і безкоштовна.

Для початку вам треба будь який сервер на лінуксі. Напевно, можна це зробити і Докером на Віндовс, але в мене все одно стоять зараз сервера Nexus, тому я одного форматнув і використав для цього завдання.

# Оновлення nameserver (якщо потрібно) - я це вводив, бо в мене постійно якісь проблеми з DNS на сервері, вам можливо, не знадобиться:


echo -e "nameserver 8.8.8.8\nnameserver 1.1.1.1" | sudo tee /etc/resolv.conf

# Встановлення Daml SDK (версія 2.10.2)


curl -sSL https://get.daml.com/ | sh -s 2.10.2

# Відкрити файл .bashrc для додавання Daml в PATH


nano ~/.bashrc


# В кінець файлу додати рядок:


export PATH="$HOME/.daml/bin:$PATH"


# Зберегти (Ctrl+X, Y, Enter)

# Оновити сесію терміналу


source ~/.bashrc

# Перевірка версії Daml, якщо все вірно, то покаже поточну версію


daml version

Якщо пише версію - все ок, йдемо далі.

# Встановлення OpenJDK 11+

sudo apt update
sudo apt install zulu25-jdk jq openjdk-17-jre-headless

# Перевірка Java, знову ж якщо все вірно, то покаже поточну версію


java -version

# Створення нового проекту


daml new json-tests
cd json-tests

# Компиляція Daml проекту


daml build

# Запуск sandbox


daml sandbox --wall-clock-time --dar ./.daml/dist/json-tests-0.0.1.dar

В результаті в вас має бути ось такий скрін:

ЗАЛИШАЄМО ЦЕ ВІКНО ВІДКРИТИМ ПОСТІЙНО

Відкриваємо інше на цьому ж сервері

# Зайти до папки json-tests


cd ~/json-tests

# Створити конфіг файл json-api-app.conf


nano json-api-app.conf

Вставляєте цей код:

{
"server": {
"address": "localhost",
"port": 7575
},
"ledger-api": {
"address": "localhost",
"port": 6865
}
}

Зберегти: Ctrl+X, Y, Enter

# Запустити JSON API

daml json-api --config json-api-app.conf

Результат ви бачите на скріні, ЦЕ ВІКНО ТЕЖ ПОТРІБНО ЗАЛИШИТИ ВІДКРИТИМ І ЗАПУСТИТИ ТРЕТЄ

Переходимо в папку:

cd ~/json-tests

Перевіряємо готовність JSON API:

curl -X GET localhost:7575/readyz


Має прийти відповідь, щось типу: ledger ok (SERVING) readyz check passed

Задаємо тимчасовий JWT токен:

export ALICE_JWT='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2RhbWwuY29tL2xlZGdlci1hcGkiOnsibGVkZ2VySWQiOiJzYW5kYm94IiwiYXBwbGljYXRpb25JZCI6IkhUVFAtSlNPTi1BUEktR2F0ZXdheSIsImFjdEFzIjpbIkFsaWNlIl19fQ.FIjS4ao9yu1XYnv1ZL3t7ooPNIyQYAHY3pmzej4EMCM'

Алокація партії:

curl -d '{"identifierHint":"Alice"}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ALICE_JWT" \
-X POST localhost:7575/v1/parties/allocate | jq

Скопіюйте partyId із відповіді, воно потім пригодиться, там має бути щось типу Alice::12206ffc46a9647edb1e8ff5368dddad57d4a0135664a7b94cd0baef05d82ea5ed4e. Будьте уважні, далі по тексту є записи ваш_partyId, то це він якраз і є.

Створюємо користувача:

curl -H "Authorization: Bearer $ALICE_JWT" \
-H 'Content-Type: application/json' \
-d '{ "userId": "alice", "primaryParty": "Alice"}' \
-X POST localhost:7575/v1/user/create

У відповідь має прийти статус 200 - отже все правильно зробили

Тепер потрібно знайти packageId:

daml damlc inspect-dar .daml/dist/json-tests-0.0.1.dar

Копіюєте весь довгий текст з терміналу, закидаєте в чатгпт, просите знайти packageId, має знайтись щось типу 5c4aeeb3eecadc4e9cf1a4e0f8f855889ab382f0148155ccf84505da6d50a28b

Створюємо json

nano create.json


Вставляємо в нього текст, замінюєте packageId на свій:

{
"templateId": "5c4aeeb3eecadc4e9cf1a4e0f8f855889ab382f0148155ccf84505da6d50a28b:Main:Asset",
"payload": {
"issuer": "Alice::твій_partyId_тут",
"owner": "Alice::твій_partyId_тут",
"name": "Example Asset Name"
}
}

Зберігаємо: Ctrl+X, Y, Enter

Тепер потрібно згенерувати справжній JWT з partyId. Для цього переходимо на сайт https://10015.io/tools/jwt-encoder-decoder, вставляємо json

{
"https://daml.com/ledger-api": {
"ledgerId": "sandbox",
"applicationId": "HTTP-JSON-API-Gateway",
"actAs": ["Alice::твій_partyId"]
}
}

В полі Signing Key — пишемоsecret

Натискаємо Encode, копіюємо JWT (велика така штука, на пару рядків)

В терміналі пишемо

export ALICE_JWT='JWT_який_тільки_що_скопіювали'

Створюємо контракт:

curl -H "Content-Type: application/json" \
-H "Authorization: Bearer $ALICE_JWT" \
-d @create.json \
-X POST localhost:7575/v1/create | jq

Має видати довгий текст і статус 200, без помилок

Створюємо ще один json для запиту контрактів:

nano query.json

Вставляємо текст:

{
"templateIds": [
"5c4aeeb3eecadc4e9cf1a4e0f8f855889ab382f0148155ccf84505da6d50a28b:Main:Asset"
]
}

Зберігаємо, як завжди: Ctrl+X, Y, Enter

Робимо запит активних контрактів:

curl -H "Content-Type: application/json" \
-H "Authorization: Bearer $ALICE_JWT" \
-d @query.json \
-X POST localhost:7575/v1/query | jq

Все, видихайте. Те, що ви побачите на екрані і є потрібним нам результатом. Робите скрін і закидаєте його на перевірку на сайті.

Якщо видає якісь помилки - ЧатГПТ вам в допомогу, страшно тільки на перший погляд, я пару разів повертався на крок назад і за пару годин все зробив.

А ви з інструкцією за 10 хвилин справитесь )

Скидаєте скрін (підпишіть його правильно) і чекаємо наступних завдань

Якщо хочеш читати всі актуальні новини і гайди, підписуйся на мій канал:

https://t.me/CryptoTravelsWithDmytro

Якщо маєш запитання по відпрацюванні якогось проекту, приєднуйся до чату:

https://t.me/+O07RU8qeDoUwZGFi

Якщо маєш пропозиції по співпраці або будь які запитання особисто до мене, пиши:

https://t.me/aquada_vn

Дякую, що був зі мною до кінця статті!!!

Багато тобі щедрих дропів, гарного настрою і кайфового ворку!!!