Гайд по виконанню третього завдання в проекті 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"
source ~/.bashrc
# Перевірка версії Daml, якщо все вірно, то покаже поточну версію
daml version
Якщо пише версію - все ок, йдемо далі.
sudo apt update
sudo apt install zulu25-jdk jq openjdk-17-jre-headless
# Перевірка Java, знову ж якщо все вірно, то покаже поточну версію
java -version
daml new json-tests
cd json-tests
daml build
daml sandbox --wall-clock-time --dar ./.daml/dist/json-tests-0.0.1.dar
В результаті в вас має бути ось такий скрін:
ЗАЛИШАЄМО ЦЕ ВІКНО ВІДКРИТИМ ПОСТІЙНО
Відкриваємо інше на цьому ж сервері
cd ~/json-tests
# Створити конфіг файл json-api-app.conf
nano json-api-app.conf
{
"server": {
"address": "localhost",
"port": 7575
},
"ledger-api": {
"address": "localhost",
"port": 6865
}
}
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
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
nano create.json
Вставляємо в нього текст, замінюєте packageId на свій:
{
"templateId": "5c4aeeb3eecadc4e9cf1a4e0f8f855889ab382f0148155ccf84505da6d50a28b:Main:Asset",
"payload": {
"issuer": "Alice::твій_partyId_тут",
"owner": "Alice::твій_partyId_тут",
"name": "Example Asset Name"
}
}
Тепер потрібно згенерувати справжній 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
Якщо маєш пропозиції по співпраці або будь які запитання особисто до мене, пиши:
Дякую, що був зі мною до кінця статті!!!
Багато тобі щедрих дропів, гарного настрою і кайфового ворку!!!