Тестируем near protocol

13.02.2019 06:59

Есть такой проект, "near protocol", это очередной блокчейн. В отличии от биткоина и эфира, он в теории, должен быть быстрым и масштабируемым. Прям сейчас проект "is currently under heavy development".

Мой тестовый план:

  1. Поднимаем 1 ноду
  2. Создаём пару тестовых аккаунтов
  3. Пробуем перекидывать между кошельками транзакции/токены
  4. Пробуем запушить 100500 транзакций и смотрим на какой скорости всё это сдохнет
  5. Поднимаем тестнет near

1. Поднимаем первую ноду near

Создаём тестовую виртуалочку, и далее следуем инструкции: 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

И через пару секунд ловим первые грабли:

near protocol install error

Нужно воткнуть дополнительные пакетики:

apt-get install build-essential

Оно начинает долго компилиться и выдаёт следующие грабли:

error: failed to run custom build command for `parity-snappy-sys v0.1.2`

Нужно поставить ещё и cmake:

apt-get install cmake

И после долгого билда оно запускается. В консоль падает строчка:

To boot from this node: 127.0.0.1:3000/8RBsoeyoRwajj86MZfZE6gMDJQVYGYcdSfx1zxqxNHbr

Её нужно куда-нить сохранить, возможно оно пригодится. Нам же нужно перезапустить ноду с другими параметрами, чтобы она поднялась в тестовом локальном девнете:

cargo run --release --package=devnet -- --log-level Debug

2. Создаём пару тестовых аккаунтов near

Документация на офф сайте говорит что нужно сделать:

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
near rpc.py error

Поймали третьи грабли. Нужно воткнуть питоновский 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"}

3. Пробуем перекидывать между кошельками транзакции/токены

Воспользуемся примером из документации:

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"}

И нифига не переводится, смотрим в лог сервера:

Near transfer money error

К счастью, я уже прописался в дискорд чатике разработчиков. Зарепортил им багу, тут же получил ответ: "thx, can reproduce locally, will figure out where amount is gettting set to 0", а через 15 минут хотфикс и ссылку почему была бага:

near protocol bug

Вытягиваем свежую ветку, перезапускаемся и пробуем ещё раз:

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

4. Нагрузочное тестирование near

Я зафигачит тестик на jmeter. Натравил его на виртуалку с 8цпу и 32Гб памяти, результат: 822 реквеста в минуту

near protocol load test

Виртуалка использует меньше 1Гб памяти и упирается в ЦПУ. Работает достаточно быстро. Плюс разработчики обещали ускориться ещё в 100 раз.

5. Поднимаем тестнет near

Делаем по шагам из документации, пока всё запускаем на одной и той же виртуалке:

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/
account jason does not exist while viewing

А вот и нихера. Ок, повторяем ещё раз всё то же самое. Сносим папки 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/
account test1 does not exist while viewing

Юзер не создался, и в логах нет подтверждающих блоков:

Попробуем создать пользователя с публичным ключём из примера в документации, мало ли что там захаркожено...

./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. Но будем наблюдать.



Продвинутое использование ORM Sequelize

В этот раз мы углубимся в join реквесты, сеттеры и ещё пару вещей, а для затравки разберём пару простых методов:

ИП в грузии, мой скромный опыт плаванья

Сейчас идёт уже 3ий месяц моего плаванья в качестве ИП в Грузии. Я сдал 2 декларации, одну с нулевым доходом, и 1 уже с ненулевым. Но давайте по порядку.


(2) Комментариев

Vadim - 07.04.2019 14:58:13
- 0    + 0
Спасибо за обзор. А новостей никаких нет по этому проекту?
Ilya - 28.05.2019 02:43:02
- 0    + 0
Кароч они всё разломали. pynear не работает, девнет стартует теперь только через докер. near-shell ещё нифига не умеет. Фпизду, ждём релиза.