хуйу нас не матерятся
Есть такой проект, "near protocol", это очередной блокчейн. В отличии от биткоина и эфира, он в теории, должен быть быстрым и масштабируемым. Прям сейчас проект "is currently under heavy development".
Мой тестовый план:
Создаём тестовую виртуалочку, и далее следуем инструкции: https://docs.nearprotocol.com/#/quick_start. Первым делом нас просят поставить раст:
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
Затем добавить раст компонентик:
rustup component add clippy-preview
И протобуф-компиллер:
apt-get install protobuf-compiler
И после этого уже можно собирать сам проект:
git clone https://github.com/nearprotocol/nearcore
cd nearcore
cargo run
И через пару секунд ловим первые грабли:
Нужно воткнуть дополнительные пакетики:
apt-get install build-essential
Оно начинает долго компилиться и выдаёт следующие грабли:
Нужно поставить ещё и cmake:
apt-get install cmake
И после долгого билда оно запускается. В консоль падает строчка:
To boot from this node: 127.0.0.1:3000/8RBsoeyoRwajj86MZfZE6gMDJQVYGYcdSfx1zxqxNHbr
Её нужно куда-нить сохранить, возможно оно пригодится. Нам же нужно перезапустить ноду с другими параметрами, чтобы она поднялась в тестовом локальном девнете:
cargo run --release --package=devnet -- --log-level Debug
Документация на офф сайте говорит что нужно сделать:
cargo run --package keystore -- keygen
Чтобы инитнулся дефолтный юзер в кистор, но для дев нета нужно чтобы дефолтный юзер, alice, инитнулась со своими собственными, захардкожеными ключами:
rm keystore/*
cargo run --package keystore -- keygen --test-seed alice.near
Кстати, об этом не говорится на сайте с документацией, об этом шаге можно узнать только из гит рид.ми(https://github.com/nearprotocol/nearcore), либо как в моём случае из чатика разработччиков, за что им большой рахмэд.
Вот теперь можем создать тестового юзера:
./scripts/rpc.py create_account new_user 1
Поймали третьи грабли. Нужно воткнуть питоновский protobuf
apt-get install python
apt-get install python-pip
pip install protobuf
root@near3:~/nearcore# ./scripts/rpc.py create_account new_user 1
{"hash": "MEa95WdM23WrHTNmubyfnJAuBe81kT5rnM7V66yu5DY"}
Юзер создался, проверим, запросив инфу о нём:
root@near3:~/nearcore# ./scripts/rpc.py view_account -a new_user
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "new_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
Воспользуемся примером из документации:
root@near3:~/nearcore# ./scripts/rpc.py view_account -a new_user
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "new_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
root@near3:~/nearcore# ./scripts/rpc.py send_money -r new_user -a 3
{"hash": "DXk33QakNexsarKompFQTWTGAxSQsUt9iyqtrxK9NZzp"}
root@near3:~/nearcore# ./scripts/rpc.py view_account -a new_user
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "new_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
И нифига не переводится, смотрим в лог сервера:
К счастью, я уже прописался в дискорд чатике разработчиков. Зарепортил им багу, тут же получил ответ: "thx, can reproduce locally, will figure out where amount is gettting set to 0", а через 15 минут хотфикс и ссылку почему была бага:
Вытягиваем свежую ветку, перезапускаемся и пробуем ещё раз:
root@near3:~/nearcore# ./scripts/rpc.py send_money -r new_user -a 3
{"hash": "DXk33QakNexsarKompFQTWTGAxSQsUt9iyqtrxK9NZzp"}
root@near3:~/nearcore# ./scripts/rpc.py view_account -a new_user
{"nonce": 0, "amount": 4, "stake": 0, "account_id": "new_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
Вот теперь всё ок. Но для теста нам нужно больше чем 100 стартовых токенов, для этого нужно подправить конфиг: https://github.com/nearprotocol/nearcore/blob/master/node/configs/res/default_chain.json опять спасибо разработчикам.
Копапастим этот файлик, обзываем его test_chain.json меняем 100 на 1000000 и перезапускаем сервер:
cargo run --package=devnet -- --log-level Debug --chain-spec-file test_chain.json
Я зафигачит тестик на jmeter. Натравил его на виртуалку с 8цпу и 32Гб памяти, результат: 822 реквеста в минуту
Виртуалка использует меньше 1Гб памяти и упирается в ЦПУ. Работает достаточно быстро. Плюс разработчики обещали ускориться ещё в 100 раз.
Делаем по шагам из документации, пока всё запускаем на одной и той же виртуалке:
rm -rf test1 test2
cargo run -- --addr 127.0.0.1:3000 --rpc_port 3030 --log-level Debug --base-path=test1 --test-network-key-seed 1 --chain-spec-file ./node/configs/res/testnet_chain.json
И в ещё 1 новой консольке:
cargo run -- -a bob.near --addr 127.0.0.1:3001 --rpc_port 3031 --log-level Debug --base-path=test2 --test-network-key-seed 2 --chain-spec-file ./node/configs/res/testnet_chain.json --boot-nodes 127.0.0.1:3000/D5kxnrPGZFtGXEniPV76CURQod4t3YMy1Q6qpWQm9mCe
Добавляем тестового пользователя:
./scripts/rpc.py create_account jason 1 --public-key 22skMptHjFWNyuEWY22ftn2AbLPSYpmYwGJRGwpNHbTV
{"hash": "9GTxpeEy9sGtsDUKwhNDrLpqCFkbDjckoAPuWokRx5ts"}
На обоих нодах видим лог, что всё ок:
Проверяем что пользователь создался:
./scripts/rpc.py view_account -a jason -u http://127.0.0.1:3031/
А вот и нихера. Ок, повторяем ещё раз всё то же самое. Сносим папки test1 и test2 перезапускаем ноды и опять добавляем юзера:
В этот раз сгенерировался ещё 1 блок, проверяем юзера:
./scripts/rpc.py view_account -a jason -u http://127.0.0.1:3031/
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "jason", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
Хорошо, добавим ещё 1 тестового пользователя:
./scripts/rpc.py create_account test1 1 --public-key DNn6kRMrQVwYi6nLUj5AfGs55Dui8iRLkKoXqgb2Zv61
{"hash": "EV2HEnsJhMRfbju3k9CNmc3W2dtUAwoswS1u69NBZUox"}
./scripts/rpc.py view_account -a test1 -u http://127.0.0.1:3031/
Юзер не создался, и в логах нет подтверждающих блоков:
Попробуем создать пользователя с публичным ключём из примера в документации, мало ли что там захаркожено...
./scripts/rpc.py create_account test1 1 --public-key 22skMptHjFWNyuEWY22ftn2AbLPSYpmYwGJRGwpNHbTV
{"hash": "Hbajvcdje2hyW3JPL3v1RgybM4LMAeCV1bovjrQZ4gNW"}
./scripts/rpc.py view_account -a test1
account test1 does not exist while viewing
Ок, сделаем ещё 1 эксперимент, опять сносим тестнет, запускаем заново, и пробуем добавить первого пользователя, но не jason, а test_user:
./scripts/rpc.py create_account test_user 1 --public-key 22skMptHjFWNyuEWY22ftn2AbLPSYpmYwGJRGwpNHbTV
{"hash": "HziFv6vNwD8F13ZExJSqAJTk4WgMXeNQJR2RTmJSg9Yc"}
./scripts/rpc.py view_account -a test_user
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "test_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
Юзер создался. Тогда добавляем ещё 1 юзера:
./scripts/rpc.py create_account test_test 2 --public-key DNn6kRMrQVwYi6nLUj5AfGs55Dui8iRLkKoXqgb2Zv61
{"hash": "41WMXbgsmZKHAck5ZDUGqVqPTZ3ExNG2UkEmsP4SQq42"}
./scripts/rpc.py view_account -a test_test
account test_test does not exist while viewing
./scripts/rpc.py create_account test_test 2 --public-key 22skMptHjFWNyuEWY22ftn2AbLPSYpmYwGJRGwpNHbTV
{"hash": "2YRrDhT2TibVBqusmJwSqnu6tSW7x8CZSB7AYAs9gLed"}
./scripts/rpc.py view_account -a test_test
account test_test does not exist while viewing
Похоже, что что-то ещё сильно не допилено. Попробуем перекинуть денег от Алисы к успешно созданному юзеру:
./scripts/rpc.py send_money -r test_user -a 2
{"hash": "6hp1yU3BwargPWtSi9f4fD3Ffe2Tjnf2oC2SFr4zL5Lv"}
./scripts/rpc.py view_account -a test_user
{"nonce": 0, "amount": 1, "stake": 0, "account_id": "test_user", "code_hash": "GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn"}
Ничего не изменилось, и в логе ноды нет подтверждения транзакций.
Проект многообещающий, но прям сейчас, действительно находится "under heavy development" и очень далёк от production ready. Но будем наблюдать.
Кароч они всё разломали. pynear не работает, девнет стартует теперь только через докер. near-shell ещё нифига не умеет. Фпизду, ждём релиза.
Там уже запущен Stake Wars 2, гайд https://nodes.cryptasutra.com/near-protocol/stake-wars-episode-2
Спасибо за обзор. А новостей никаких нет по этому проекту?