Pages:
Author

Topic: Давайте создадим с нуля биржу Open Source? - page 10. (Read 32334 times)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Баланс, как я понимаю у вас хранится в БД. То есть, при постановке ордера вы достаете число, списываете с него сумму и кладете ордер в "стакан" или на исполнение со ссылкой на юзера которому ордер принадлежит, чтобы ему вернуть деньги или то что он купил? Могу ли я быстрыми запросами наполнить стакан ордерами на сумму большую, чем у меня есть на балансе? Понятие "заморозки" средств на балансе есть?


У меня сейчас эта проблема решается блокировками. Новый ордер выставить (и отменить) нельзя пока не закончится добавление предыдущего ордера.

Что случится, если я одновременно (очень быстро) отправлю запрос на вывод и запрос на создание ордера? (если вы проверяете баланс до и после постановки ордера в стакан, такой финт должен неминуемо привести к одной-двум ошибкам).

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

Запросы в базу обрабатываются синхронно или асинхронно?

Если запросы обрабатываются асинхронно, то что обеспечивает синхронизацию? Сериализуются ли запросы?

Яваскрипт умеет только асинхронно. Синхронизация обеспечивается блокировками.


Quote from: progof
ри запуске биржи ошибка связна с почтой

Судя по логам, ип адрес вашего провайдера забанен гуглом. Либо поменяйте провайдера, либо одно из двух...


Quote from: reddish111
А как дела с api? Работает?

С утра работало.
sr. member
Activity: 1932
Merit: 349
А как дела с api? Работает?
jr. member
Activity: 157
Merit: 4
При запуске биржи ошибка связна с почтой, по логам видно что сообщение отправилось но на почту он не пришло и в спаме его тоже нету. Также пробывал два варианта enabled и disabled в /opentrade/server/constants.js "emailVerificationEnabled".

1. Движок запускаю на VPS
2. Почту использую gmail
3. Домен добавил в Postmaster Tools

Когда ввожу в браузере *ip-vps*:40443 ошибка ERR_CONNECTION_REFUSED

Code:
OpenTrade started!
send gmail.com>
send gmail.com>.
recv gmail.com>550-5.7.1 [*ip*       1] Our system has detected an unusual rate of
recv gmail.com>550-5.7.1 unsolicited mail originating from your IP address. To protect our
recv gmail.com>550-5.7.1 users from spam, mail sent from your IP address has been blocked.
recv gmail.com>550-5.7.1 Please visit
recv gmail.com>550-5.7.1  https://support.google.com/mail/?p=UnsolicitedIPError to review our
recv gmail.com>550 5.7.1 Bulk Email Senders Guidelines. 78si7652899uae.99 - gsmtp
SMTP responds error code 550
Error with your mail server: SMTP code:550 msg:550-5.7.1 [*ip*       1] Our system has detected an unusual rate of
550-5.7.1 unsolicited mail originating from your IP address. To protect our
550-5.7.1 users from spam, mail sent from your IP address has been blocked.
550-5.7.1 Please visit
550-5.7.1  https://support.google.com/mail/?p=UnsolicitedIPError to review our
550 5.7.1 Bulk Email Senders Guidelines. 78si7652899uae.99 - gsmtp

Возможно кто-то ранее сталкивался с этой проблемой и может подсказать где я допустил ошибку или что-то не дописал в коде
member
Activity: 70
Merit: 12
Мне думается сверять реальный баланс нужно не только перед выводом но и перед постановкой ордера тогда не будет возможности делать фейковые ордера на огромные суммы.  
Ещё простейшая защита - запрет выводить больше например 0.1 битка в день. И т.п. ограничения

Перед постановкой ордера тоже сверяется. И сразу после ордера тоже, на всякий случай )

Баланс, как я понимаю у вас хранится в БД. То есть, при постановке ордера вы достаете число, списываете с него сумму и кладете ордер в "стакан" или на исполнение со ссылкой на юзера которому ордер принадлежит, чтобы ему вернуть деньги или то что он купил? Могу ли я быстрыми запросами наполнить стакан ордерами на сумму большую, чем у меня есть на балансе? Понятие "заморозки" средств на балансе есть?

Что случится, если я одновременно (очень быстро) отправлю запрос на вывод и запрос на создание ордера? (если вы проверяете баланс до и после постановки ордера в стакан, такой финт должен неминуемо привести к одной-двум ошибкам).

Запросы в базу обрабатываются синхронно или асинхронно?
Если запросы обрабатываются синхронно, то что будет с базой если запросы генерят 200 пользователей (например ботов - ктото спрашивает свой баланс в цикле, кто-то ставит и отменяет мелкие ордера, а кто-то злой пытается вывести и ставить ордера одновременно)? Однопоточный sqlite Должен лежать не вставая.

Если запросы обрабатываются асинхронно, то что обеспечивает синхронизацию? Сериализуются ли запросы?


Quote
Депозит это сколько завели на биржу через блокчейн.
Баланс = депозит + сколько еще купили на бирже.
Баланс вполне законно может быть больше депозита.

Логика подсказывает что баланс может запросто быть произвольно больше, меньше или равен депозиту. Депозит, например, может быть равен нулю, но баланс сколь угодно велик (я купил койн на бирже, и не заводил). И наоборот - я депозитил и все слил. Т.е. по факту депозит связан с балансом через историю транзакций и никак иначе.


kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Историю депозитов можно удалить только удалив wallet.dat. Но если в валлете есть коины то есть нюансы.

Интересное решение, очень удобно при переносе на другой сервер.

Ну а как решать возможность с тем что что balance (b) был намного больше чем Deposit (D) - может вообще это запретить в коде и останавливать биржу?

Депозит это сколько завели на биржу через блокчейн.
Баланс = депозит + сколько еще купили на бирже.
Баланс вполне законно может быть больше депозита.
jr. member
Activity: 245
Merit: 1
Историю депозитов можно удалить только удалив wallet.dat. Но если в валлете есть коины то есть нюансы.

Интересное решение, очень удобно при переносе на другой сервер.

Ну а как решать возможность с тем что что balance (b) был намного больше чем Deposit (D) - может вообще это запретить в коде и останавливать биржу или уравнивать балансы...? где это можно сделать? в каком файле?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Сейчас тестировал биржу и переключал главные торговые пары - и в балансе вышло что balance (b) был намного больше чем Deposit (D), причем CHECK не лечил эту проблему, удалил базу sqlite.db, заново зарегистрировался, тогда чек сработал, но, странно история осталась и пользователи которые были раньше в разделе check balance с ненулевыми депозитами и историей остались - где можно эти данные удалить?

Историю депозитов можно удалить только удалив wallet.dat. Но если в валлете есть коины то есть нюансы.
jr. member
Activity: 245
Merit: 1
Сейчас тестировал биржу и переключал главные торговые пары - и в балансе вышло что balance (b) был намного больше чем Deposit (D), причем CHECK не лечил эту проблему, удалил базу sqlite.db, заново зарегистрировался, тогда чек сработал, но, странно история осталась и пользователи которые были раньше в разделе check balance с ненулевыми депозитами и историей остались? Хотя зарегистрирован 1 пользователь Online: 1  (Registered: 1) - где можно эти данные удалить?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Тогда мне не понятно как вообще возможен фейковые ордера на ложный баланс... Но в любом случае запрет на вывод крупных сумм или всего баланса это самое простое решение или запрос на вывод крупняка только после подтверждения администрацией это самое очевидное решение
Невозможны фейковые ордера и невозможно вывести фейковую сумму.
Альтмаркетс как-то через фронтэнд взломали скорее всего.
jr. member
Activity: 245
Merit: 1
Тогда мне не понятно как вообще возможен фейковые ордера на ложный баланс... Но в любом случае запрет на вывод крупных сумм или всего баланса это самое простое решение или запрос на вывод крупняка только после подтверждения администрацией это самое очевидное решение
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Мне думается сверять реальный баланс нужно не только перед выводом но и перед постановкой ордера тогда не будет возможности делать фейковые ордера на огромные суммы. 
Ещё простейшая защита - запрет выводить больше например 0.1 битка в день. И т.п. ограничения

Перед постановкой ордера тоже сверяется. И сразу после ордера тоже, на всякий случай )
jr. member
Activity: 245
Merit: 1
Мне думается сверять реальный баланс нужно не только перед выводом но и перед постановкой ордера тогда не будет возможности делать фейковые ордера на огромные суммы.  
Ещё простейшая защита - запрет выводить больше например 0.1 битка в день. И т.п. ограничения - вывод крупных сумм с подтверждения администрации это решит все проблемы.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
В дискорд каналах двух бирж (https://flame.exchange/ и https://greencoin.online/) авторы в панике хотят переходить на другие варианты - Peatio и Txbits - насколько я понимаю там требования к серверам на порядок выше а также и к компетенциям.

Мне думается этот проект рано хоронить - наоборот испытания признак интереса и в них оттачивается мастерство!

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

Кто-нибудь сможет это реализовать?



Я на 99.99% уверен, что никакой иньекции у них не было.
Но чтобы защититься от возможных иньекций, надо разделить таблицы баланса и истории по разным базам данных. Тогда иньекция в баланс ничего не сможет сделать с историей и наоборот. А эти две таблицы являются основными для проверки реального баланса пользователя перед попыткой вывода.
Я это сделаю когда руки дойдут и выложу этот патч на гитхаб.
jr. member
Activity: 245
Merit: 1
В дискорд каналах двух бирж (https://flame.exchange/ и https://greencoin.online/) авторы в панике хотят переходить на другие варианты - Peatio и Txbits - насколько я понимаю там требования к серверам на порядок выше а также и к компетенциям.

Мне думается этот проект рано хоронить - наоборот испытания признак интереса и в них оттачивается мастерство!

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

Кто-нибудь сможет это реализовать?

https://yandex.ru/search/?text=%D0%BF%D1%80%D0%B8%20%D0%B7%D0%B0%D1%85%D0%BE%D0%B4%D0%B5%20%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D1%8C%20%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D1%85%D0%B5%D1%88&clid=1955455&win=292&lr=35

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Так уязвимость на гитхабе закрыта или нет?

Уязвимость пока никто не показал.
Есть только голые слова диванных экспертов про sql иньекции.
jr. member
Activity: 245
Merit: 1
Так уязвимость на гитхабе закрыта или нет?
jr. member
Activity: 32
Merit: 1
Думаю хранить надо как в обозревателях и блокчейнах, в виде целого числа, в сатохах.
Спасибо! Я добавил число, на которое нужно разделить, чтобы получить, например btc, в таблицу с идентификаторами криптовалют.
Но если нам нужно в БД записать, например 5 ETH, то получается нужно записать:
5000000000000000000
?
Что лучше хранить такие большие числа в БД или хранить только степени 10-ок? (ну и отдельно целую часть для коэффициента, как в numeric)

"большие" числа не так уж и велики. Int64 должно хватить даже для этереума.
jr. member
Activity: 245
Merit: 1
Скорее всего у них была старая версия движка. Либо одно из двух...
Я кстати решил прекратить выкладывать новые версии на гитхаб. Так что кто будет форкать - ищите программиста который будет допиливать под ваши хотелки.
Очень жаль...
jr. member
Activity: 32
Merit: 1
Не осилил все посты. Такой вопрос:
В каком виде лучше хранить количество конкретной криптовалюты в БД? У меня postgreSQL, в которой рекомендуется использовать numeric. Но мне интересно, какой тип для этого у вас SQLite?
Проблема в том, что у нас для разных криптовалют должно быть разное количество значимых цифр и разное количество цифр после запятой. То есть в одном столбце не получится хранить, например, Bitcoin у которого 8 знаков после запятой и Ethereum у которого больше 8ми знаков после запятой.
Лично я просто сделал пользовательский тип у которого есть числитель и знаменатель...

Моё мнение: хоть и не работаю с Node.js, но моё мнение биржа на ноде нужна(прежде всего как экспериментальный проект), поэтому я звезданул проект на github. Проблема только в том, что web в принципе ущербная технология, с которой мы вынужденны работать.

Хранить балансы юзеров надо по возможности целыми числами в единицах блокчейна (применительно к BTC - сатоши, ETH - веи).
Дробей и деления, по возможности надо избегать.
JS из коробки в плане математики совсем не лучший выбор, т.к. точность вычислений с плавающей точкой у него неудовлетворительная и придется ухищряться (а это делать придется так или иначе, когда дело дойдет до снятия комисионных) https://stackoverflow.com/questions/11695618/dealing-with-float-precision-in-javascript

Для отображения балансов юзерам разумно рядом с валютой хранить decimals - т.е. кол-во сатошей в биткойне или веев в эфире.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Снова взломали - по крупному https://altmarkets.cc/announce

Quote
864878 doge

2.785 BTC

61924 x42

У них что старая версия движка стояла - или еще не все дыры закрыли?

Скорее всего у них была старая версия движка. Либо одно из двух...
Я кстати решил прекратить выкладывать новые версии на гитхаб. Так что кто будет форкать - ищите программиста который будет допиливать под ваши хотелки.
Pages:
Jump to: