This commit is contained in:
progr76@gmail.com
2019-02-26 04:55:33 +03:00
parent 5782e4c1ca
commit d436ca1710
34 changed files with 961 additions and 266 deletions

View File

@@ -204,47 +204,6 @@ pm2 start run-test.js
## Описание принципа хранения монет
Монеты хранятся на счетах, по аналогии с банковскими счетами. Счета нумеруются с 0 по порядку. Нулевой номер счета имеет системный аккаунт, на который первоначально эмитировано 1 млрд монет. Для создания нового счета нужно в сеть отправить спец. транзакцию с кодом 100, в которой указывается публичный ключ владельца счета и необязательный параметр название счета (строка до 40 байт длины). Название желательно для проверки правильности ввода номера счета при отправке платежа.
Минимальный размер транзакции перевода монет со счета на счет равен 114 байтам. Такой размер получается в том случае, если указан один получатель и нет описания назначения платежа.
Транзакция в текстовом в формате JSON выглядит так:
```js
{
"Type": 110,
"Version": 2,
"Currency": 0,
"FromID": 1,
"OperationID": 40167,
"To":
[
{
"ID": 2,
"SumTER": 100,
"SumCENT": 0
}
],
"Description": "test",
"Sign": "B39C39D91136E92C5B9530ABC683D9A1AF51E27382AFC69EA3B1F14AD7C4CDBE46D36BD743F2B4AE7760F8DDE706D81FB8201ABBF27DABF6F1EC658FE432C141"
}
```
* Примечание: транзакция в примере выше имеет длину 118 байт
Version = 0 - цифровая подпись содержимого транзакции
Version = 2 - цифровая подпись содержимого транзакции + список 33 байтных публичных ключей получателей. Применяется для защиты от мутабельности аккаунтов при маленьком времени подтверждении. Например создается аккаунт и в следующий блок отправляется транзакция на перевод монет на этот счет. Потом транзакция из первого блока исчезает вследствии мутабельности блокчейн сети, в вместо нее создается другая транзакция создания счета - от неизвестной третьей стороны. В этом случае монеты не переведутся на неизвестный счет и они не будут потеряны, т.к. произойдет проверка соответствия публичного кошелька получателя требуемому значению.
Version = 3 - поддержка переводов на счета со смарт-контрактами
Текстовое представление запаковывается в бинарный формат + добавляется 12 байт POW (для защиты от ДДОС).
Назначение платежа допускается до 200 байт. Вообще размер ограничен 65535 байтами, но 200 байт это размер который видят кошельки пользователей, большую длину они обрезают.
Чем больше длина транзакции, тем больше нужно выполнить расчет POW, чтобы транзакция была конкурентоспособна и попала в блок.
При каждом изменении таблицы счетов в блокчейн записывается хеш. Это реализуется с помощью специального типа транзакций с кодом 117. Они запускаются системным DApp Accounts, который обслуживает таблицу счетов.
Транзакция имеет формат:
```js
{
"Type": 119,
"BlockNum": 1500000,
"Hash": "AB1429BC0FE5B28DB218F30D46AE9F953DC34059EA1A65A15775D73389A4EB51"
}
```
## Майнинг возможен только при наличии публичного IP