September 27, 2019

@MinterInfoBot: Отчет #BND

Данный отчёт позволяет узнать персональную средневзвешенную цену кастомных монет относительно BIP по одному или нескольким адресам в результате различных транзакций и событий, а также сравнить эти цены с текущими ценами делегирования и продажи.

Как это работает

Чтобы открыть данный отчёт, необходимо перейти в информацию о кошельке отправив боту адрес, либо перейдя в него из избранного. А затем внизу нажать кнопку #BND.

При первом открытии этого отчета по адресу или набору адресов бот будет скачивать все относящиеся к ним транзакции из эксплорера, начиная с первой версии сети. Во время скачивания транзакций будет показана версия сети, адрес кошелька, блок, с которого началось скачивание, и процент загрузки. Если по каким-то причинам бот не сможет скачать транзакции, он уведомит соответствующей ошибкой. После успешной загрузки транзакции будут закешированы и при повторных открытиях отчёта с этим же набором адресов будут скачаны только новые транзакции.

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

После того как все транзакции будут загружены и обработаны вы получите от бота отчёт, в котором по каждой монете будет примерно такой вывод:

POPE (70%)
Reserve: 15'166'875 BIP
Amount: 0,504
Spent: 2'355 BIP
PriceA: 4'672 BIP
PriceD: 3'537 BIP (-24,29%)
StakeD: 1'783 BIP (-24,29%)
PriceS: 5'020 BIP (+7,46%)
StakeS: 2'531 BIP (+7,46%)

Первая строка - тикер и crr монеты
Reserve - резерв монеты в BIP
Amount - приблизительное количество имеющейся на адресе кастомной монеты
Spent/Profit - сколько на нее было потрачено / сколько на ней заработали
PriceA - персональная средневзвешенная цена по всем операциям (average price)
PriceD - цена делегирования
StakeD - какое количество BIP при делегировании составит ваш объем монет
PriceS - цена продажи
StakeS - какое количество BIP составит ваш объем монет при продаже
У PriceD и PriceS в скобках указана дельта относительно PriceA.
У StakeD и StakeS в скобках указана дельта относительно Spent.

В отчёт попадают все кастомные монеты в вашем кошельке, StakeS которых больше 1 BIP. Монеты в отчете сортируются также по StakeS в порядке убывания.

Для того чтобы посчитать персональную средневзвешенную цену (PriceA), нужно знать какое количество кастомной монеты вы имеете (Amount) и сколько BIP вы на это потратили (Spent). В результате:

PriceA = Spent / Amount

Изменение Spent и Amount зависит от типа и параметров транзакции.

Также по каждой кастомной монете выводится количество транзакций каждого типа:

🔼 - покупка монеты за BIP
🔽 - продажа монеты за BIP
⏫ - покупка монеты за другой кастом
⏬ - продажа монеты за другой кастом
↗️ - получение монеты с внешнего адреса (в т.ч. через мультисенды и чеки)
↙️ - отправка монет на внешний адрес (в т.ч. через мультисенды и чеки)
🚮 - штрафы
🆕 - иконка выводится, если монета была создана с текущего адреса

Покупка и продажа за BIP

Это самый простой и понятный тип операции. Давайте рассмотрим его на примере. Допустим, что не имея до этого монеты POPE мы покупаем 0.1 POPE и тратим на это 400 BIP. Тогда:

Amount = 0.1 POPE
Spent = 400 BIP + 0.1 BIP = 400.1 BIP
где 0.1 - комиссия за конвертацию
PriceA = 400.1 / 0.1 = 4001 BIP

Допустим, что после этого мы покупаем ещё 0.2 POPE и тратим на это уже 900 BIP. Тогда:

Amount = 0.1 + 0.2 = 0.3 POPE
Spent = 400.1 + 900 + 0.1 = 1300.2 BIP
PriceA = 1300.2 / 0.3 = 4334 BIP

Таким образом при покупке кастомной монеты за BIP Amount увеличивается на купленный объем, а Spent увеличивается на сумму, которая отдана в BIP с учётом комиссии.

Допустим, что после этого мы продаем 0.1 POPE и получаем за это 500 BIP. Тогда:

Amount = 0.3 - 0.1 = 0.2 POPE
Spent = 1300.2 - 500 + 0.1 = 800.3 BIP
PriceA = 4001.5 BIP

Таким образом при продаже кастомной монеты за BIP Amount уменьшается на проданный объем, а Spent уменьшается на сумму, которая получена в BIP и увеличивается на сумму комиссии.

Получение и отправка кастомной монеты

Продолжим наш пример. Допустим, что мы решили задонатить имеющиеся у нас монеты POPE в какой-то сервис или купить на них какой-то товар и отправляем на другой адрес 0.1 POPE. Тогда:

Amount = 0.2 - 0.1 = 0.1 POPE
Spent = 800.3 + 0.01 = 800.31 BIP
PriceA = 800.31 / 0.1 = 8003.1 BIP

Таким образом при отправке кастомной монеты на другой адрес Amount уменьшается на отправленную сумму, а Spent увеличивается на размер комиссии. В результате чего PriceA увеличивается.

Теперь допустим, что на наш адрес кто-то задонатил 1000 MINTERINFO, которых у нас до этого не было. Тогда:

Amount = 1000 MINTERINFO
Spent = 0 BIP
PriceA = 0 / 1000 = 0 BIP

Обратите внимание, что мы ничего не потратили на эту монету, поэтому средневзвешенная цена монеты для нашего адреса равна 0. Таким образом при получении кастомных монет Amount увеличивается на сумму перевода, а Spent остаётся без изменений.

Мультисенды

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

Чеки

Если вы обналичили чек, то такая транзакция учитывается также как и получение монет с другого адреса. Если кто-то обналичил чек, который создали вы, то такая транзакция учитывается как отправка монет на другой адрес.

Создание монеты

Данная транзакция учитывается также как и покупка монеты.

Продажа кастома за кастом

Допустим, что мы решили купить ZERO за имеющиеся у нас POPE. Продаем 0.05 POPE, получаем 100 ZERO. Чтобы учесть данную операцию, нужно посчитать сколько BIP перетечет из POPE в ZERO:

8003.1 BIP * 0.05 POPE = 400.155 BIP
где 8003.1 BIP - средневзвешенная цена POPE после последней операции
0.05 POPE - продаваемый объем POPE
400.155 BIP - столько BIP перетечет из POPE в ZERO

Тогда:

POPE
Amount = 0.1 - 0.05 = 0.05 POPE
Spent = 800.31 - 400.155 = 400.155 BIP
PriceA = 400.155 BIP / 0.05 POPE = 8003.1 POPE

ZERO
Amount = 100 ZERO
Spent = 400.155 BIP
PriceA = 4.00155 BIP

Таким образом при покупке кастома за кастом стоимость BIP перетекает из продаваемой монеты в покупаемую.

Штрафы

Получение штрафа в кастомной монете учитывается также как и отправка монет на другой адрес. Amount уменьшается, Spent остается без изменений.

Ликвидация монет

При ликвидации монеты, имеющейся на адресе, ее Amount и Spent обнуляются для того, чтобы при новых операциях с монетой, созданной с таким же тикером, расчет PriceA начался заново.

Если инициатором ликвидации монеты стал ваш адрес, то сначала обработается транзакция продажи, а затем событие ликвидации, в результате которого данные обнулятся.

Spent/Profit

Представим, что мы решили продать половину монет MINTERINFO, которые нам задонатили. Вот наше текущее состояние:

Amount = 1000 MINTERINFO
Spent = 0 BIP
PriceA = 0 / 1000 = 0 BIP

Продаем 500 MINTERINFO за 25 BIP. Тогда:

Amount = 1000 - 500 = 500 MINTERINFO
Spent = 0 - 25 = -25 BIP
PriceA = -25 BIP / 500 MINTERINFO = -0.05 BIP

Отрицательный Spent означает, что в результате всех операций по данной монете мы вернули все потраченные BIP и ещё получили сверх этого доход, поэтому в отчёте Spent поменяется на Profit. Т.к. отрицательный PriceA не имеет особого смысла, то в отчёте он будет равен 0 или вовсе не будет указан.

Если такая монета будет сконвертирована в другую кастомную монету, то для учёта такой операции будут вычислены PriceA со знаком минус, и стоимость в BIP со знаком минус, которая перейдет в покупаемую монету.

Я прекрасно понимаю, что читающие это экономисты, бухгалтеры и трейдеры скажут, что так нельзя считать. Но это самый простой способ учесть все операции по монете. Если кто-то подробно опишет как правильно учитывать все типы транзакций и событий, то я буду готов внедрить это в отчёт. А пока данный способ покрывает большую часть потребностей по анализу купленных и делегированных монет.

Остальные типы транзакций

Все вышеперечисленные типы транзакций и событий так или иначе влияют на PriceA. Ниже представлен список типов транзакций, которые никак не влияют на PriceA кастомных монет:

  • Делегирование монет
  • Отзыв монет из валидатора
  • Декларирование новой мастерноды
  • Редактирование мастерноды
  • Включение/выключение мастерноды
  • Создание мультисига

Комиссия в кастомной монете

В примерах выше, когда мы продавали и покупали монеты, подразумевалось, что комиссию мы платим в BIP, и учитывали это в Spent. Но по факту мы могли оплатить комиссию в какой-нибудь кастомной монете. К сожалению на момент написания этого функционала из API эксплорера можно достать не все данные по комиссии, чтобы корректно ее учесть. Поэтому этим мы пренебрегаем. Это, кстати, может стать причиной небольшого отличия между Amount в отчёте и действительным балансом на адресе (с учётом делегированных средств). Но т.к. комиссии довольно маленькие, это не должно сильно повлиять в большинстве случаев.

Отчет по нескольким адресам

У одного человека может быть несколько адресов, между которыми может происходить движение кастомных монет. Для того, чтобы увидеть корректный отчет по нескольким адресам, нужно добавить их все в избранное. Кроме ваших адресов в избранном не должно быть других, чтобы отчет был правильным. Далее заходим в "Общий баланс" и нажимаем кнопку BND.

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

Итоговые данные

В конце отчёта выводятся итоговые данные по всем монетам:
- сумма потраченных на кастомы BIP (Spent)
- все ваши кастомные монеты при делегировании (StakeD) и при продаже (StakeS)
В скобках после StakeD и StakeS указана дельта относительно Spent.

Обратная связь

Если у вас остались вопросы по построению отчета, то я буду рад на них ответить в чате поддержки и осветить их в этом документе. Благодаря вам это описание станет более полным.

Данный функционал будет дорабатываться и улучшаться, поэтому если у вас есть предложения, то можете их озвучить тоже в чате поддержки.

Если вам нравится это функционал и @MinterInfoBot в целом, то вы можете перечислить немного BIP на кошелек проекта: Mxe97b54e594c1d748e37476d240d91836ac15bc98

Полученные средства пойдут на оплату серверов, с помощью которых работает бот.

Спасибо за внимание!