Page 1 of 2 12 LastLast
Results 1 to 10 of 16

Thread: Двойная запись. Идеи реализации.

  1. #1
    Администратор
    Join Date
    Oct 2017
    Posts
    536

    Двойная запись. Идеи реализации.

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

    Основные константы. Вернее не совсем константы, сюда можно добавлять записи когда будет листинг новой монеты
    1. План счетов
    2. Журнал допустимых проводок.

    Основная таблица:
    1. Журнал транзакций.

    Идем по порядку.

    В плане счетов две/три колонки
    номер счета || номер субсчета || Название счета || комментарий

    В журнале допустимых проводок
    ИД проводки || номер счета откуда берем || номер субсчета1 || номер счета куда переводим || номер субсчета2 || название проводки

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

    Журнал транзакции
    ИД проводки1 || сумма1 || ИД проводки2 || сумма2 || комментарий.


    Вот пока как-то так у меня получается.
    Сейчас думаю как получать отчеты из журнала транзакций? Как в любой момент получить информацию о том, что все идет как надо и нигде не возникло бага?

  2. #2
    Администратор
    Join Date
    Oct 2017
    Posts
    468
    N Cчета Дебет Кредит N Транзакциии N Cчета Дебет Кредит N Транзакциии
    BTC Alekserk 1 0 МС Alekserk 0 0
    BTC KZV 0 0 МС KZV 1000 0
    Сальдо 1 Сальдо 1000
    Транзакция
    N Cчета Дебет Кредит N Транзакциии N Cчета Дебет Кредит N Транзакциии
    BTC Alekserk 1 0 МС Alekserk 0 0
    0 -1 N00001 1000 0 N00001
    BTC KZV 0 0 МС KZV 1000 0
    1 0 N00001 0 -1000 N00001
    Сальдо 1 Сальдо 1000
    N 00001 | BTC Alekserk Deb 0 | BTC Alekserk kred -1|MC Alekserk deb +1000|MC Alekserk kred 0| BTC KZV Deb +1 | BTC kred 0|MC KZV deb 0|MC KZV kred -1000|

  3. #3
    Местный Alekserk's Avatar
    Join Date
    Feb 2018
    Posts
    234
    NСчета - это "МОНЕТА + ЮЗЕР"

    Например, BTCKZV

    Сальдо всегда считается по каждой монете отдельно.

    В Записи транзакции можно добавить комиссию таким образом

    N 00001 | BTC Alekserk Deb 0 | BTC Alekserk kred -1|MC Alekserk deb +999|MC Alekserk kred 0| BTC KZV Deb +1 | BTC kred 0|MC KZV deb 0|MC KZV kred -1000|BTC OpenTrade deb 0 |BTC OpenTrade kred 0|MC OpenTrade deb +1|MC OpenTrade kred 0|

  4. #4
    Администратор
    Join Date
    Oct 2017
    Posts
    536
    Кроме комиссии бирже, есть еще вознаграждения спонсорам и партнерам. Все это и то, что может в перспективе появиться, невозможно учесть в одной строчке.

    Поэтому в журнале транзакций видимо должны быть очень короткие строчки типа
    ИД проводки || субсчет_монеты || субсчет_пользователя || сумма || ИД операции

    Отдельно писать дебит и кредит в журнале транзакций не обязательно. Счета дебита и кредита прописаны в журнале допустимых проводок. То есть Дебитовая проводка или кредитовая - понятно из "ИД проводки".

    Еще добавится поле с уникальным номером операции и можно будет потом по этому номеру делать группировки и выборки.
    Для логов можно добавить таблицу операций вида:
    ИД операции || комментарий

    Над планом счетов надо думать. Пока что-то типа такого вижу:
    0 - внешний блокчейн
    1 - баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит)
    3 - баланс на ордерах
    4 - доступный для торгов баланс
    5 - баланс ожидающий подтверждения вывода
    6 - выведенный с биржи баланс

    В принципе субсчета в эту таблицу не обязательно делать. Субсчетом может быть ИД монеты и ИД пользователя.

    Теперь таблица допустимых проводок

    ИД проводки || номер счета откуда берем || номер счета куда переводим || название проводки

    1 || 0 || 1 || Перевод входящего депозита на ожидающий подтверждения баланс пользователя
    2 || 1 || 4 || Перевод ожидающего подтверждения баланса на доступный баланс
    3 || 4 || 5 || Перевод доступного баланса на ожидание подтверждения вывода
    4 || 5 || 6 || Вывод баланса с биржи
    5 || 4 || 3 || Перевод баланса на ордер
    6 || 3 || 4 || Получение баланса из ордера


    Примеры журнала транзакций:
    1. Ставится ордер на продажу 10000 догов по цене 0.00001 бтц/дог
    ИД проводки || субсчет_монеты || субсчет_пользователя || сумма || ИД операции
    5 || DOGE || kzv || 10000 || 1

    2. Ставится ордер на покупку 100 догов по цене 0.00001 бтц/дог
    ИД проводки || субсчет_монеты || субсчет_пользователя || сумма || ИД операции
    5 || BTC || alekserk || 0.001 || 2

    3. Исполняется сделка на покупку/продажу догов по цене 0.00001 бтц/дог
    ИД проводки || субсчет_монеты || субсчет_пользователя || сумма || ИД операции
    6 || DOGE || alekserk || 100 || 3
    6 || BTC || kzv || 0.001-комиссия || 3
    6 || BTC || биржа || комиссия/3 || 3
    6 || BTC || адиинистратор1 || комиссия/3 || 3
    6 || BTC || адиинистратор2 || комиссия/3 || 3

    Все красиво, но до меня пока не доходит: как из этой красоты итоговые балансы вытаскивать?
    Еще как это с таблицей ордеров связать? Еще одним субсчетом?

  5. #5
    Местный Alekserk's Avatar
    Join Date
    Feb 2018
    Posts
    234
    Это не бухгалтерская запись. В бухгалтерской записи есть ДЕБЕТ и КРЕДИТ

    Вообще классическая запись выглядит так:
    .................................................. ..Open Trade
    Контр агенты Дебет Кредит Сумма
    MC alekserk 02 01 1000
    MC alexserk 05 02 1000

    01 Перевод входящего депозита на ожидающий подтверждения баланс пользователя
    02 Перевод ожидающего подтверждения баланса на доступный баланс
    05 Перевод баланса на ордер

    Но такая запись возможна для взаимоотношений пользователей и биржи.
    Когда пользователи взаимодействуют между собой, запись должна быть сложнее. Например так:

    Дебет Кредит Сумма Дебет Кредит Сумма Nтранзакции
    MC alekserk MC kzv 1000 BTC kzv BTC alekserk 0.1 N 0000123
    Last edited by Alekserk; 04-23-2019 at 01:31 PM.

  6. #6
    Администратор
    Join Date
    Oct 2017
    Posts
    536
    Давай с классической записью сначала разберемся тогда
    План счетов прежний
    0 - внешний блокчейн
    1 - баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит)
    3 - баланс на ордерах
    4 - доступный для торгов баланс
    5 - баланс ожидающий подтверждения вывода
    6 - выведенный с биржи баланс

    Добавляем таблицу контрагентов (пользователей)
    1 - kzv
    2 - alekserk
    ...

    Добавляем таблицу монет
    1 - МС
    2 - BTC
    ...

    Как в классическом варианте выглядят три разные проводки:
    "Перевод входящего депозита на ожидающий подтверждения баланс пользователя"
    "Перевод ожидающего подтверждения баланса на доступный баланс"
    "Перевод баланса на ордер"

    ?

    Мой вариант ответа на поставленный вопрос.
    пользователь монета дебит кредит сумма ид операции
    kzv МС 0 1 1000 1
    kzv МС 1 4 1000 2
    kzv МС 4 3 100 3

    строка 1 - "Перевод входящего депозита на ожидающий подтверждения баланс пользователя"
    строка 2 - "Перевод ожидающего подтверждения баланса на доступный баланс"
    строка 3 - "Перевод баланса на ордер"

    Так правильно?

  7. #7
    Местный Alekserk's Avatar
    Join Date
    Feb 2018
    Posts
    234
    Кредит, это то, что биржа "условно" должна.
    Дебит, это активы.

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

    kzv || MC || 1 || 0 || 1000 || 1

    Т.е. мы должны ВХОДУ (счет 0), а зачисляем эти деньги в актив(дебит) на баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит) (счет 1)

    Таким образом мы 1000 должны счету N0 и тысяча у нас есть на счете N1

    kzv || MC || 4 || 1|| 1000|| 2

    Мы берем со счета N1 т.е. списываем 1000, значит ставим ее в кредит по счету N1 и зачисляем на дебет счета N4.

    kzv || MC || 3 || 4 || 100 ||3

    Мы списываем со счета N4 100 монет (ставим в кредит) и зачисляем на счет N3 ставим в дебит.

    Т.е. все как у тебя,только местами поменять.
    Last edited by Alekserk; 04-23-2019 at 08:14 PM.

  8. #8
    Местный Alekserk's Avatar
    Join Date
    Feb 2018
    Posts
    234
    Над планом счетов надо думать. Пока что-то типа такого вижу:
    0 - внешний блокчейн
    1 - баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит)
    3 - баланс на ордерах
    4 - доступный для торгов баланс
    5 - баланс ожидающий подтверждения вывода
    6 - выведенный с биржи баланс
    6 счет не нужен. Вывод с Биржи относится к счету 0. Ввод на биржу это кредит по счету 0, Вывод с биржи это дебет по счету 0.

    Так же и по 3 счету. Дебет это зачисление на ордера (постановка ордера) кредит это отмена ордера.

    Так же и со счетом 5 и 1. Думаю, можно сделать это одним счетом "Неподтвержденный баланс". На дебет ставим ожидающий зачисления неподтвержденный баланс. На кредит ожидающий вывод неподтвержденный баланс.

  9. #9
    Администратор
    Join Date
    Oct 2017
    Posts
    536
    Тогда так получается

    План счетов
    0 - внешний блокчейн
    1 - баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит)
    2 - баланс на ордерах
    3 - доступный для торгов баланс

    таблица допустимых проводок
    ИД проводки дебет кредит название проводки
    1 1 0 поступление депозита из блокчейна на ожидающий баланс
    2 0 1 вывод депозита с ожидающего баланса в блокчейн
    3 3 1 вывод депозита с ожидающего баланса на доступный для торгов баланс
    4 1 3 вывод депозита с доступного для торгов на ожидающий баланс
    5 2 3 вывод депозита с доступного баланса на ордер
    6 3 2 вывод депозита из ордера на доступный для торгов баланс

    Все верно теперь?

    Давайте начнем с монетами и пользователями. Как выглядит операция постановки/отмены ордера.

    пользователь монета ордер ИД дебит кредит сумма ид операции комментарий
    kzv MC order1 2 3 100 1 создаем ордер
    kzv MC order1 3 2 сумма 2 закрываем ордер

    В операции отмены должна быть та сумма, которая осталась на ордере после торгов.
    Тут возникает вопрос: так ведь быть не должно? Если сумма будет отличаться от 100, у нас потом баланс не сойдется.
    Надо отмену ордера значит делать другой проводкой по какому-то накопительному счету. Или как это сделать? Я пока не понимаю.

    Давайте попробуем торги записать, может станет понятней...
    1. kzv выставил ордер на продажу 100 MC по цене 1 МС = 2 DOGE.
    2. kzv выставил ордер на покупку 200 MC по цене 1 МС = 1 DOGE. Это то же самое, что ордер на продажу 200 DOGE по цене 1 МС = 1 DOGE
    3. alekserk выставил ордер на покупку 10 МС по цене 1 МС = 2 DOGE. Это то же самое, что ордер на продажу 20 DOGE по цене 1 МС = 2 DOGE

    пользователь монета ордер ИД дебит кредит сумма ид операции

    Тут в таблице нигде нет цены и нет монеты-корреспондента. Надо их сюда добавлять или учесть их только в отдельной таблице с ордерами?

    таблица ордеров
    ордер ИД пользователь покупка или продажа? (buy/sell) монета ордера монета - корреспондент начальная сумма ордера цена

  10. #10
    Местный Alekserk's Avatar
    Join Date
    Feb 2018
    Posts
    234
    Quote Originally Posted by kzv View Post
    Тогда так получается

    План счетов
    0 - внешний блокчейн
    1 - баланс ожидающий подтверждения в блокчейне (неподтвержденный депозит)
    2 - баланс на ордерах
    3 - доступный для торгов баланс

    таблица допустимых проводок
    ИД проводки дебет кредит название проводки
    1 1 0 поступление депозита из блокчейна на ожидающий баланс
    2 0 1 вывод депозита с ожидающего баланса в блокчейн
    3 3 1 вывод депозита с ожидающего баланса на доступный для торгов баланс
    4 1 3 вывод депозита с доступного для торгов на ожидающий баланс
    5 2 3 вывод депозита с доступного баланса на ордер
    6 3 2 вывод депозита из ордера на доступный для торгов баланс

    Все верно теперь?
    Все верно. Но я бы присвоил "БАЛАНС доступный для торгов" СЧЕТ N2, А "баланс на ордерах" СЧЕТ N3. Так как-то логичнее. Ведь чтобы попасть на ордер, надо сначала попасть на баланс доступный для торгов.

    Давайте начнем с монетами и пользователями. Как выглядит операция постановки/отмены ордера.

    пользователь монета ордер ИД дебит кредит сумма ид операции комментарий
    kzv MC order1 2 3 100 1 создаем ордер
    kzv MC order1 3 2 сумма 2 закрываем ордер

    В операции отмены должна быть та сумма, которая осталась на ордере после торгов.
    Тут возникает вопрос: так ведь быть не должно? Если сумма будет отличаться от 100, у нас потом баланс не сойдется.
    Надо отмену ордера значит делать другой проводкой по какому-то накопительному счету. Или как это сделать? Я пока не понимаю.
    Здесь все просто. Допустим ты с ордера снял не 100, а 10 МС.

    пользователь монета ордер ИД дебит кредит сумма ид операции комментарий
    kzv MC order1 2 3 100 1 создаем ордер
    kzv MC order1 3 2 10 2 закрываем ордер

    Таким образом:

    Нам надо проверить баланс на счете 2

    Мы делаем выписку по счету 2, так называемый самолетик.

    Счет 2
    Дебет ||Кредит
    100....||....10
    Сальдо +90

    Значит в Ордерах осталось 90 МС.

    Т.е. когда ты считаешь какой-нибудь баланс, ты берешь только один конкретный счет и смотришь, какие дебет и кредит были по нему в проводках.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •