Pull to refresh

Свидетельства мошенничества FTX обнаружились в самом коде

Level of difficultyEasy
Reading time6 min
Views28K
Original author: Molly White

Впервые взглянуть на кодовую базу FTX мы смогли в прошлую среду. Сторона обвинения показала скриншоты с Github в процессе допроса сотрудничающего со следствием свидетеля Гэри Вана, бывшего CTO компании FTX, который в разные промежутки времени отвечал за кодовую базу, лежащую в основе и FTX, и Alameda Research. Ван признал себя виновным по четырём пунктам обвинения.

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

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

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

Основная часть обсуждений касалась флага allow_negative, добавленного в кодовую базу FTX 1 августа 2019 года. Ван дал показания, что Сэм Бэнкман-Фрид попросил его и Нишада Сингха (бывшего технического директора FTX, тоже признавшего свою вину) добавить этот флаг. На скриншотах из Github видно, как Сингх внёс в код изменение, добавляющее столбец в базу данных, и логику, исключающую счета с этим флагом из проверок, которые в противном случае позволили бы определить, достаточно ли у них средств для снятия.

Из доказательства GX-617
Из доказательства GX-617

Позже самим Ваном было добавлено изменение, исключавшее ликвидацию счетов с этим флагом.

Github diff. Unchanged code: liquidating = (account.margin_fraction < (account.maintenance_margin_fraction_requirement * Decimal(0.99)))  Added line: ) and not account.allow_negative
Из доказательства GX-611

Обвинение воспользовалось этой возможностью, чтобы указать на то, что практически в тот же день, когда было внесено это изменение по приказу Бэнкмана-Фрида, сам Бэнкман-Фрид заявил в Twitter, что «Счёт [Alameda] не отличается от любого другого».

Tweet conversation:  Bitshine @bitshine_ Jul 31, 2019 @SBF_Alameda How are you going to resolve the conflict of interest of running your own derivative exchange, AND actively trading against the market at the same time?  People complain that @CryptoHayes trades against the market, yet FTX and your shop is out there.  SBF @SBF_FTX Jul 31, 2019 Alameda is a liquidity provider on FTX but their account is just like everyone else's.  Alameda's incentive is just for FTX to do as well as possible; by far the dominant factor is helping to make the trading experience as good as possible.  Bitshine @bitshine_ I guess we're just suppose to trust that you wont get preferential treatment on your own platform. Don't get me wrong, as a semi quant trader, I enjoyed your videos and FTX is a step in the right direction. BUT, i think there needs to be a bigger discussion about this issue.
«Bitshine: Как вы разрешаете конфликт интересов, управляя собственной биржей деривативов и одновременно активно торгуя против рынка? Сэм Бэнкман-Фрид: Alameda — поставщик ликвидности для FTX, но её счёт не отличается от любого другого. Мотивация Alameda — максимальный успех FTX; самый важный фактор для неё — помощь в повышении удобства трейдинга. Bitshine: Похоже, мы лишь должны поверить, что вы не получите преференций на собственной платформе. Не поймите меня неверно, я полуколичественный трейдер, мне нравятся ваши видео и я считаю, что FTX — это шаг в верном направлении. НО я думаю, что этот вопрос требует более широкого обсуждения.» В доказательство был включён только первый твит и ответ Бэнкмана-Фрида, но я думаю, ответ на него тоже стоит добавить. (твиты)

Ван подтвердил, что этот флаг allow_negative был особой привилегией, выдаваемой только трейдинговым счетам Alameda Research, а скриншот базы данных также продемонстрировал практически неограниченную кредитную линию, которую могла использовать Alameda Research:

Screenshot of a database query returning one row, with username info@alameda-research.com, and borrow 65,355,999,944
Доказательство GX-644

Ван рассказал, что изначально у Alameda не было такого высокого лимита кредита, но периодически трейдинговая фирма сталкивалась с проблемами в размещении торговых заявок из-за нехватки обеспечения, а Сэм Бэнкман-Фрид постоянно просил его повысить её лимит кредита, чтобы этого не происходило. По словам Вана, изначально лимит был установлен на «несколько миллионов долларов», но затем увеличен до одного миллиарда. Когда был достигнут и этот лимит, Бэнкман-Фрид попросил его установить значение настолько большое, чтобы они не могли его достичь. Тогда Ван установил его равным примерно 65 миллиардам долларов.

[Кто-то может задаться вопросом, почему Ван выбрал столь произвольное число, как $65355999994. Предположу, что он хотел задать его примерно равным $65,535 миллиардам (обратите внимание на перепутанные местами 5 и 3), выбрав число 65535, потому что в computer science оно означает наибольшее возможное значение беззнакового 16-битного целого числа. Это лишь предположение, но я не могу придумать более правдоподобной гипотезы.]

Затем сторона обвинения допросила Вана о «страховом фонде», который якобы должен был защитить и FTX, и её клиентов от неудачных торгов быстрее, чем на это мог среагировать механизм оценки рисков. FTX опубликовала предполагаемый баланс фонда на своём веб-сайте и активно рекламировала его существование, вплоть до свидетельства в Конгрессе США. Однако, по словам Вана, отображаемое на веб-сайте число было фальсифицированным.

Tweet: FTX @FTX_Official The 5.25 million FTT we put in our insurance fund in 2019 now makes the fund worth over 100 million USD  Screenshot: Backstop Fund Size: 5,478,274.51613972 USD, 5,250,000.00000000 FTT Last updated: 14/02/2021, 08:05:00
«Благодаря сумме в 5,25 миллиона FTT, помещённой нами в наш страховой фонд в 2019 году, фонд стоит более 100 миллионов долларов США.» Твит, доказательство GX-751

Помощник федерального прокурора: Это реальное число?

Ван: Нет.

Помощник федерального прокурора: То есть это поддельное число?

Ван: Да.

Помощник федерального прокурора: Реальное число было выше или ниже поддельного?

Ван: Ниже.

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

Github diff showing addition of code:  def _get_change()-> Decimal:     daily_volume = current_session().query(func.sum(Trade.size * Trade.price)).filter(         Trade.created_at > datetime.now() - timedelta(days=1)).scalar() or Decimal()         return f2d(numpy.random.normal(7500, 3000))* daily_volume / Decimal('1e9')  @always_run_in_transaction(ro=False) def update_public_insurance_fund():     change = _get_change() sess = current_session() +     public_insurance_fund = Public InsuranceFund.get(sess)  sess.add(Public InsuranceFundChange(public_insurance_fund-public_insurance_fund, size-change))     public_insurance_fund.size += change     sess.commit()
Из доказательства GX-600. Поддельные изменения в балансе счёта в основном вычисляются в строке 19.

Это достаточно веское доказательство вины. Вероятно, можно было бы объяснить неточность числа — допустим, кто-то просто прописал его в коде веб-сайта и оно никогда не менялось и не отражало истинного баланса фонда; тогда это можно было оправдать тем, что оно точно описывало значение в какой-то момент времени, но потом его забыли изменить. Но очень сложно найти убедительное объяснение тому, что фонд увеличивался на случайное меняющееся число, никоим образом не связанное с реальным балансом счёта. Единственное объяснение очевидно: FTX пыталась показать клиентам сфабрикованное, но убедительное число. А это можно считать мошенничеством.

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

function InsuranceFundInformation() {   let insuranceFund = useData('/stats/insurance_fund');   let classes = useStyles();   if (!insuranceFund) {     return null;   }   return (     <Card className={classes.card}>       <CardContent>         <Typography variant="h5" gutterBottom>           <Trans>Insurance Fund</Trans>         </Typography>         <Typography>           <Trans>             Size: {{ usdSize: coinSizeFormat.format(insuranceFund.size) }} USD,{' '} {{ fttSize: coinSizeFormat.format(5250000) }} FTT           </Trans>         </Typography>       <Typography>         <Trans>           Last updated: {{ lastUpdated: new Date(insuranceFund.updatedAt).toLocaleString() }}         </Trans>       </Typography>       </CardContent>     </Card>   ); }
Из доказательства GX-600. Прописанное значение FTT указано в строке 64.

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

В процессе допроса Вана стороной обвинения он рассказал, что во множестве случаев FTX сталкивалась с убытками, которые превосходили реальные, меньшие суммы средств, выделенные на страховой фонд. Один из таких случаев произошёл в 2021 году, когда трейдер смог воспользоваться багом в системе маржи FTX, что позволило ему вывести крупную позицию в криптовалюте MobileCoin. Позже он был ликвидирован, а у FTX возник ущерб на «много сотен миллионов долларов».

Сторона обвинения не упоминала этого, но Сэм Бэнкман-Фрид в мае 2022 года заявил под присягой перед Конгрессом США, что за предыдущие три года «страховой фонд выплатил суммарно $9,5 миллиона» и что «крупнейшее единовременное снятие за день из страхового фонда FTX.com составило $4,7 миллиона».

Однако обвинение показало фрагмент из подкаста Odd Lots, в котором Сэм Бэнкман-Фрид солгал интервьюеру Мэтту Ливайну, сказав, что механизм оценки рисков FTX настолько хорош, что «не было ни дня, когда сумма потерь была выше, чем мы заработали на биржевых сборах».

Ван свидетельствовал, что ущерб от аферы с MobileCoin и другие подобные потери, превышавшие суммы в страховом фонде, «брала на себя» Alameda, забирая позиции и обеспечение счёта, по сути, самостоятельно поглощая ущерб. Ван сказал, что Бэнкман-Фрид рассуждал так: «балансовые ведомости FTX публичнее, чем балансовые ведомости Alameda, а у инвесторов есть доступ к финансам FTX, но не к финансам Alameda».

И в самом деле, лишь недавно мы слышали свидетельство венчурного капиталиста Paradigm Мэтта Хуана, во время которого жюри были показаны балансовые ведомости: из них следовало, что за весь 2021 год было приблизительно $63 миллиона торговых расходов и $63 миллиона прочих расходов; в них совершенно точно отсутствовало «много сотен миллионов долларов», потерянных из-за инцидента с MobileCoin.

До завершения судебного заседания сторона защиты лишь вкратце допросила Вана, но начала с предположения о том, что он может говорить то, что хочет услышать государство, надеясь на более мягкий приговор (он может получить до 50 лет тюрьмы, но, скорее всего, благодаря сотрудничеству со следствием получит гораздо более короткий срок или вообще не будет отбывать наказание в виде лишения свободы). Также защита попыталась предложить альтернативное объяснение наличию флага allow_negative: Alameda занималась конвертацией долларов США в стейблкойны, и на короткий промежуток времени ей нужно было заимствовать фонды FTX, прежде чем вернуть их в виде стейблкойнов. Однако не было ответа на вопрос, зачем для этого понадобился потолок в $65 миллиардов; скорее всего, на судебном заседании во вторник этот вопрос всплывёт.

Кроме того, во вторник будет свидетельствовать Кэролин Эллисон, бывшая CEO Alameda Research и девушка Сэма Бэнкмана-Фрида. Ожидается, что она станет «звёздным свидетелем» в этом деле, а сторона защиты уже рассказала в своих вступительных заявлениях о линии защиты «во всём винить Кэролин».

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 78: ↑78 and ↓0+78
Comments63

Articles