Опережающая сделка (фронтран) происходит, когда брокер выставляет свои ордера до исполнения ордеров его клиентов. Это может быть крайне выгодно для брокера, который имеет возможность купить акции непосредственно перед тем, как крупный ордер на покупку приведет к повышению цены, а затем продать акции до того, как крупный ордер на продажу снизит ее. Это может произойти тогда, когда один участник рынка имеет возможность видеть ордера других участников и выставлять новые прямо перед ними. У Graphene есть открытый список ордеров, а транзакции транслируются, чтобы все могли получать уведомления о них в течение секунд. Это означает, что каждый может видеть ваш ордер и изменять свой ради увеличения собственной прибыли. Чтобы защитить пользователей, Graphene использует движок рынка типа “вы получаете то, чего просили” (YGWYAF), который дает участникам рынка такой же результат, как идеальная опережающая сделка. Данная статья объясняет, зачем это нужно.
Прежде чем дальше рассуждать об опережающих сделках, я хотел бы описать Graphene с разных точек зрения. Представьте себе, что биржевой стакан не может видеть никто, кроме брокера. Работа брокера – это знать всех и то, чего они хотят. Трейдеры знают, что самый быстрый и удобный способ произвести матчинг по своему ордеру – это пойти к брокеру, а не пытаться найти кого-то самостоятельно. Таким образом, брокер принимает запросы от всех и пытается удовлетворить их, не сообщая трейдерам, как он исполнил их ордер. Все клиенты знают, что брокер продал им то, что они искали, по цене, на которую они согласились. Брокер зарабатывает деньги, покупая дешево и продавая дорого. Это фактически и есть то, что делает блокчейн Graphene. Это брокер, который покупает самые низкие предложения и продает по самым высоким ставкам, зарабатывая на разнице. Нет ничего аморального в использовании знаний о рыночном спросе и действиях, которые позволят вам получить прибыль. Люди делают это каждый раз, когда замечают возможность для арбитража.
Пример опережающей сделки
Когда Сэм размещает большой ордер, он смотрит в биржевой стакан и видит, что может получить 10 монет за $1, 20 – за $2, или же 20 – за $3. Так как он хочет купить 50 монет, то знает, что это будет стоить ему $10 + $40 + $60, т.е. $110 за 50 монет; поэтому он размещает ордер на покупку 50 монет с максимальной ценой в $3 и финансирует его на $110. На традиционной бирже ордера исполняются по принципу “кто первый пришел – того первого обслужили”, поэтому если предположить, что не было выставлено никаких других ордеров, ордер будет полностью выполнен, и Сэм получит 50 монет.
Если бы биржа хотела, она могла бы опередить ордер Сэма, выполнив ордер на покупку дешевых монет за $1 и $2, а затем развернувшись и продав их Сэму по цене $3 доллара. Теоретически кто угодно между Сэмом и движком рынка мог бы «опередить» его. Это подразумевает любого пира в сети P2P, его интернет-провайдера или провайдера кошелька. Даже коллеги Сэма могут опередить его, если смогут наблюдать за тем, как он заполняет форму своего ордера.
В блокчейне Graphene ордера группируются в блоки, что означает, что все ордера принимаются «одновременно». Это значит, что бот может увидеть новый ордер и тут же создать другой, который отменит предложения за $1 и $2 и перенесет их на $3. Обе эти транзакции будут выполнены, и биржевой стакан обновится до начала сопоставления ордеров. Конечным результатом станет то, что продавец продаст 36,7 монет по $3 за прибыль в 13,3 монеты, а Сэм получит меньше, чем ожидал.
Решения для ситуации с опережающими сделками
В нашем примере обыкновенные пользователи в конечном счете получают меньше, чем ожидали, а прибыль получает продвинутый пользователь, который смог запустить бота, или любой, кто способен исполнить свой ордер первым. Уже не раз для этого предлагались различные решения, но в итоге все они сводятся к срокам. Некоторые люди предлагают «рандомизировать» порядок, в котором обрабатываются транзакции каждого блока. Другие предлагают двухэтапный процесс подачи и раскрытия. Все эти стратегии содержат значительные недостатки.
Рандомизация порядка
Метод рандомизации порядка, в котором обрабатываются ордера, не способствует решению проблемы опережающей сделки по нескольким причинам. При условии, что все остальное будет равным, данный прием уменьшает доходность опережающей сделки на 50% (50/50 шанс, что ваш ордер исполнится первым), а это значит, что в нашем примере владелец бота в среднем всё равно получит 6.65 монеты и, самое главное, половину времени Сэм будет получать меньше, чем рассчитывал. Это также не решает проблему с заверителями, которые могут выбирать, какие транзакции включать в блок, а следовательно, они всё еще могут контролировать порядок, задерживая подтверждение на 1 блок.
Два этапа – подача и раскрытие
В соответствии с двухэтапным методом ордера изначально подаются в зашифрованном виде, а затем, уже после того, как были размещены все ордера, каждый раскрывает, что он разместил, и тогда теоретически никто не сможет выиграть от опережающей сделки. Этот метод снизил бы, но не устранил, прибыльность опережающей сделки, если бы он мог быть хорошо реализован, но, к сожалению, это невозможно.
Проблема кроется во втором этапе. Бот всегда может подать ордер, а затем не раскрыть его, посмотрев на все остальные. Вы не можете ввести штраф за неудавшееся раскрытие, потому как создатель транзакции раскрытия не имеет контроля над тем, станет ли производитель блока своевременно включать транзакцию. Поэтому даже с системой подачи и раскрытия производители блоков все равно смогут контролировать порядок, ссылаясь на задержки в работе сети.
И тогда как двухэтапный метод может снизить риск, он также существенно снижает качество пользовательского опыта. Ордера потребуют как минимум в два раза больше времени на выполнение, и все равно останется большая неопределенность относительно того, каков будет результат.
Учтение опережающих сделок
Если вы не можете справиться с опережающей сделкой, то лучше принять ее. Если каждый пользователь платформы будет размещать свой ордер с учетом того, что его могут опередить максимально невыгодным образом, то сами пользователи естественным образом изменят характер своих ордеров. Сэм был готов заплатить в среднем по 2,20 доллара за монету, поэтому он выставил бы один ордер на 50 монет по цене 2,20 доллара США и не был бы обойден ботом, потому как в данном случае он или получит 2,20 доллара за монету, или ничего. Боту, который увидел ставку Сэма, было бы разумно отменить свои ордера на $1 и $2 и переместить их на $2.20, потому что это увеличило бы полученную ботом сумму без вреда для других участников рынка. Это навредило бы только прибыли биржи, которая заработала бы $16, если бы бот не изменил ордера.
Если бы Сэм выжидал появления выгодной сделки и не хотел спешить, тогда он мог бы получить все 50 монет за 110 долларов, если предположить, что никто не конкурировал с ним за покупку монет. Сначала он разместил бы ордер на покупку 10 монет по цене 1 доллар. После его исполнения он разместил бы второй ордер на 20 монет по цене 2 доллара, и наконец, третий на 20 монет по цене 3 доллара. Этот процесс занял бы в 3 раза больше времени, чем размещение единого «рыночного ордера» с лимитом в 3 доллара, но это защитило Сэма, не позволив боту сделать какие-либо деньги за счет того, что он быстрее, чем человек.
В конце концов те, кто хочет получить лучшую цену на крупные ордера, просто будут использовать рыночные ордера на стороне кошелька, нежели полагаться на то, что блокчейн сделает это для вас. Это приведет к увеличению количества транзакций и, следовательно, к увеличению комиссий, но на уровне всего в несколько центов за транзакцию это будет легко компенсироваться за счет более эффективного матчинга ордеров.
Заключение
Механизм матчинга ордеров в Graphene должен работать исключительно по принципу “вы получаете то, что хотели, и ничего больше”, потому как иначе прибыль будет получать кто-то другой, давая вам то, что вы хотели, и ничего больше. Этот подход дает пользователю максимальный контроль и позволяет кошелькам автоматически перемещаться по биржевому стакану на одну позицию за раз.
Лучше, чем централизованная биржа
Во многих отношениях это намного превосходит подход, используемый централизованными биржами, потому что пользователю даже не приходится доверять бирже в том, что она не станет намеренно опережать его. Все централизованные биржи сохраняют анонимность своих ордеров от пользователей, а это значит, что они способны легко совершать опережающие сделки незамеченными. Проблема централизованных бирж настолько серьезна, что регулирующим органам пришлось ввести закон против опережающих сделок, который Уолл-стрит эффективно обошла с помощью высокочастотной торговли. Если вам приходится принимать новые «законы», то, возможно, это признак того, что система не работает, и на ее место должна прийти новая.
Graphene не приносит извинений за отсутствие традиционного алгоритма матчинга ордеров на уровне блокчейна. Мы рекомендуем каждой бирже использовать наш подход и перенести исполнение алгоритма биржевого стакана на компьютер пользователя – тот уровень, где все более или менее равны.
Десктоп приложение с открытым исходным кодом под Linux, Windows, MacOS
Чаты сообщества в Telegram:
https://t.me/RU_DEX (рус)
https://t.me/graphene_dex (eng)
Graphene Forum — форум сообщества Graphene на платформе блокчейна Голос
@gph-ai,
тоесть теоретически публичная нода может выставлять опережающие сделки, просто придерживая транзакцию пользователя. Принять тразакцию, проанализировать ее, и создать транзакцию с выкупом по 2$ и 3$ и выставлением по 5$ . И брокер в лице публичной ноды ни чем не рискует - транзакция либо сработает, либо нет. А Сэму надо было выставить три ордера в одной транзакции, вместо одного ордера сразу по 5, у него тоже вся транзакция не прошла бы, если хитрый брокер успел бы выкупить ордера.
если я все верно понял
@bitwheeze, вы путаете ваш опыт взаимодействия с централизованными системами.
Если воспринмать публичную ноду как "брокера", то чисто теоретически то что вы описываете может и быть возможным, я не смотрел на этот счет в код. Мне кажется, что если транзакции так "придерживать", то они будут становиться не валидными.
Но что я знаю точно: мэтчинг ордеров происходит не на публичных нодах, а у витнесов.
Плюс, у вас всегда есть возможность сделать себе приватную ноду через которую и посылать свои заявки в чейн в обход любого "хитрого брокера".
@xanoxt, на счет публичной ноды, делается имхо просто. между нодой и пользователем ставится прокси. В транзакии указывается время жизни и привязка к блоку. Очередность определяется пулом. Имхо ничто не мешает принять прокси подписанную транзакцию пользователя, проанализировать ее и сформировать свою. А потом уже отправить обе транзакции реальной ноде.
Ну и да, либо как я написал выше, делать несколько fill ордеров в одной транзакции, вместо одного ордера сразу по 5 рублей. Либо да, свою ноду поднимать.
@bitwheeze, вы знаете способ как по пподписанной транзакции восстановить приватный ключ пользователя?
Давайте тогда проанализируем транзакции Сатоши Накамото и получим доступ к его биткам? :-)
@xanoxt, я же про статью, где описывается ситуация, где есть ордера на продажу по 2, и по 3 и по 5. В комментируемой статье Сэм выставляет ордер на покупку сразу по 5. В этом случае недоброкачественный брокер или манипулятивная нода API может при получении транзакции от пользователя создать транзакцию от своего аккаунта, на закрытие ордеров по 2 и 3 и создание ордеров на продажу по пять. И уже отправить свою транзакцию, и потом пользователя.
Если сработает сперва транзакция пользователя, а потом брокера, то транза брокера просто не пройдет. А в случае если транза брокера пройдет первой, он гарантированно наварится.
@bitwheeze, транза "брокера" в любом случае пройдет, если она будет позже, то она просто приведет к ввставлению его заявок в стакан.
Другой вопрос, что для этого сценария нужно, чтобы "брокер" был витнесом, имел модифцированную ноду и был уверен, что его очередь подписывать блок.
В остальных случаях — кто-нибудь с удовольствием заберет его заявки из стакана.
В общем не вижу большого экономического смысла в этих действиях, но ок.