С июля будущего года россиянам запрещают переводить криптовалюту с личных адресов на их же собственные некастодиальные кошельки. То есть на аппаратные, холодные кошельки, доступ к активам на которых имеет только владелец. До 1 июля такие переводы не запрещены.
Что думаете ? На биткоин форуме уже во всю идёт кипишь. Как будем выводить деньги с биржи? А пополнять?
Первая версия мессенджера, про которую был предыдущий пост, работала на технологии WebRTC: это хорошо проработанный набор протоколов для установления прямого соединения между устройствами через интернет и передачи текстовой/бинарной и медиа информации, такой как голос и видео. WebRTC настолько популярен, что, в общем-то, все видеоконференции сейчас работают на этом фреймворке - его поддержка вшита во все браузеры а для мобильных разработчиков поставляются и регулярно обновляются готовые библиотеки. Если очень кратко, два клиента, которые хотят установить прямое соединение, получают информацию о своем присутствии в интернете от STUN-сервера (сокр. от англ. Session Traversal Utilities for NAT, это сетевой протокол, который позволяет клиенту определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети) и публикует все что нашел на особом сигнальном сервере. Сигнальный сервер для обоих клиентов должен быть один и тот же, а STUN-сервера - какие угодно, их много публичных и бесплатных.
Проблемы начинаются, когда один или оба клиента спрятаны за NAT (Network Adress Translation, это технология, которые используют роутеры чтобы преобразовать адреса внутренней сети в адреса интернета и обратно) и входящие соединения невозможны, то есть в современном интернете - практически всегда. Для того, чтобы устройства все-таки смогли как-то установить соединение, WebRTC предполагает использование TURN-серверов (Traversal Using Relays around NAT), специальных реле, которые передают зашифрованные аудио/видео/данные потоки между устройствами когда прямое соединение не может быть установлено. Для своего приложения я использовал TURN-сервера от metered.ca.
Когда я опубликовал первую версию мессенджера, внезапно обнаружилось, что metered.ca в России заблокирован, давно и прочно. Общение не задалось.
Так вот, первая хорошая новость - я, наконец-то, полностью, окончательно и бесповоротно (потому что я никогда не возьмусь переделывать это взад) перевел мессенджер на libp2p. Это открытый фреймворк для разработки P2P приложений, со встроенным шифрованием, обходом NAT и поиском клиентов в распределенных хэш-таблицах. libp2p подразумевает, что где-то в интернете должны быть доступны стартовые ноды с известными адресами, а дальше по мере роста количества клиентов, распределенная сеть будет становиться все устойчивее и устойчивее. Пока я выкатил 4 стартовые ноды, и, если их заблокируют, я легко смогу перевыпустить их с новыми адресами и обновить приложение.
1/4
Япония, к слову, не блокирует ничего пока, там и первая версия работала. Но обновленная - намного лучше.
libp2p работает немного похоже на WebRTC но есть и принципиальные отличия. Например, когда клиент ААА хочет установить соединение с клиентом АББ, в случае WebRTC этим занимался сигнальный сервер - он знал контактные данные обоих клиентов и дружил их друг с другом:
WebRTC
В случае libp2p, никакого сервера больше нет, некому сообщить ААА контактные данные АББ и наоборот. Но вместо этой потенциальной точки отказа, у нас есть распределенная хэш-таблица с контактными данными, где ААА может запросить контакты АББ и инициировать соединение. Дальше либо будет установлено прямое соединение если это возможно, если нет, то потоки данных будут транслироваться через одну из нод, до которой оба ААА и АББ соединения уже установили. Практически можно сказать, что вместо одного большого сигнального сервера у нас теперь много маленьких сигнальненьких серверочков.
Аудио и видео звонки я оставил работать через WebRTC, для этого в свои ноды я добавил встроенный TURN-сервер на основе открытого coturn. Так как контакты обоих устройств уже известны - вы не можете позвонить не установив соединение - сигнальный сервер не нужен. 4 слабеньких ноды - это, конечно, не панацея, но пару сотен одновременных звонков выдержат. В теории, если надо, и для усиленной безопасности, люди смогут публиковать в интернете свои собственные ноды - и привязать их к приложению, это все уже реализовано.
И это вторая хорошая новость - я собираюсь открыть исходники под какой-нибудь подходящей лицензией, и уже начал подготовку - автосборки, автоформат кода, автовыполнение тестов при открытии пулл-реквестов, и все такое. Процесс небыстрый, к сожалению.
Ноды можно запускать как простым бинарником, так и в докере. Потом как-нибудь сделаю линукс сервис.
Из других нововведений: добавил групповые чаты, один аккаунт теперь может быть зарегистрирован на нескольких устройствах, все они будут синхронизированы, улучшена передача файлов.
В следующем посте, пожалуй, расскажу об интересном механизме синхронизации сообщений. Так как мой мессенджер не имеет серверной части, вся переписка хранится на устройстве. Для переезда с одного телефона на другой, можно сделать зашифрованный бэкап, но если единственный телефон умер - переписку не восстановить. Но есть вариант загрузить всю историю сообщений от ваших собеседников! И она загрузится. Если, конечно, вы не потеряли сам аккаунт, так что не забывайте сохранять фразу безопасности в надежном месте.
Другие темы для будущих постов
Если захотите пощупать это приложение самостоятельно, ссылку на Google Play я оставлю в комментариях.
Рынок цифровых валют постепенно обрастает правилами. Банк России планирует ввести для банков новый норматив: риск по операциям с цифровыми валютами и связанными с ними инструментами не должен превышать 1%.
Регулятор ограничивает то, насколько банк может загрузить собственный баланс крипториском. В расчёт попадут прямые вложения в цифровые валюты и производные инструменты, зависящие от их курса.
Планируется, что обороты по таким инструментам начнут отражаться в банковской отчётности с января 2027 года.
Что изменится для обычного владельца криптовалюты?
ЦБ не ограничивает личный криптокошелёк напрямую. Он заставляет банки считать свой риск и затрагивает владельца криптовалюты через рублёвую часть сделки — перевод продавцу, получение денег после продажи или работу через посредника.
Для бизнеса дополнительные вопросы по USDT уже стали обычными. Для физлиц массовые проверки пока не подтверждены, но непрозрачные P2P-переводы и крупные поступления иногда вызывают банковский комплаенс — запрос документов, объяснение экономического смысла операции или отказ в переводе.
Главный вопрос теперь в том, станут ли банки чаще запрашивать документы по рублёвым операциям, связанным с криптовалютой, и насколько это усложнит её покупку и продажу?
Кстати, для тех, кто будет покупать криптовалюту через предусмотренную законом инфраструктуру, уже установлен лимит: для неквалифицированного инвестора — до 300 тысяч рублей в год через одного посредника. Об этом уже был пост в сообществе.
Полноценный майнинг давно перестал быть историей про “любой желающий может подключиться и участвовать”.
В реальности это уже совсем другой мир: дорогое оборудование, серьёзные мощности, постоянные расходы, отдельная инфраструктура, и игроки, у которых есть ресурсы держать всё это на плаву.
Формально в крипту может зайти почти каждый. Но если смотреть не на красивые лозунги, а на практику, становится видно другое: основная тяжёлая часть системы давно сместилась туда, где обычному человеку места почти не осталось.
Именно отсюда у меня когда-то и вырос главный вопрос:
можно ли попробовать построить другую модель?
Не ещё один токен. Не ещё одну монету ради шума. Не ещё одну обёртку вокруг модных слов.
А именно мобильную децентрализованную криптосеть, в которой участие в системе было бы ближе к обычному человеку и его повседневному устройству — смартфону.
Так появился ColorChain.
Что такое ColorChain
ColorChain — это проект мобильной децентрализованной криптосети с собственным технологическим ядром и нативной цифровой единицей LBU₽.
Если говорить совсем просто, идея в том, чтобы смартфон был не только экраном, не только интерфейсом и не только точкой доступа к чужим сервисам, а инструментом участия в собственной цифровой системе.
То есть для меня ColorChain — это попытка ответить на вопрос:
можно ли сделать криптосистему более мобильной, более близкой пользователю и менее завязанной на тяжёлую промышленную модель?
Почему я вообще этим занялся
Меня давно не отпускало ощущение, что в цифровой среде обычный человек почти всегда остаётся только пользователем чужой инфраструктуры.
Он создаёт активность. Создаёт данные. Создаёт ценность. Проводит в цифровой среде огромную часть жизни.
Но сама архитектура, сами правила и большая часть выгоды при этом почти всегда принадлежат не ему.
В крипте картина часто очень похожая.
Да, на словах туда может войти каждый. Но если говорить о реальном участии в серьёзной сетевой механике, всё очень быстро упирается в деньги, мощности, оборудование и отдельную инфраструктуру.
Мне захотелось попробовать развернуть эту оптику в другую сторону.
В чём идея проекта
ColorChain для меня — это не просто интерфейс и не просто монета.
Сейчас я собираю основу: мобильную логику, сетевую архитектуру, взаимодействие между устройствами, механику добычи, и фундамент для дальнейшего роста системы.
То есть смысл проекта не в том, чтобы просто назвать что-то “криптой”, а в том, чтобы у этой системы была своя техническая основа.
Если совсем коротко:
ColorChain = мобильная сеть + собственное ядро + LBU₽
Что такое LBU₽
LBU₽ — это нативная цифровая единица ColorChain.
Для меня это не просто значок и не просто цифра в интерфейсе. Если говорить совсем прямо:
ColorChain — это сама система. LBU₽ — её внутренняя цифровая единица.
То есть это часть общей конструкции, а не отдельная декоративная надстройка.
Что уже есть сейчас
ColorChain для меня — не абстрактная идея на словах, а уже идущая разработка.
Я больше года занимаюсь этим проектом самостоятельно. За это время он прошёл путь: от концепции, к архитектуре, к логике узлов, к первой рабочей мобильной сборке, к тестированию ранних элементов системы.
То есть сейчас ColorChain существует не только как замысел, но и как реальный прототип, у которого уже есть техническая основа и понятное направление развития.
Что мне важно сейчас
На этом этапе мне важнее не громкие заявления, а честная реакция на саму идею и на то, что уже удалось собрать.
Интересно понять: как вам сама постановка задачи; где в ней есть сильная сторона, а где она вызывает скепсис; и есть ли, на ваш взгляд, смысл в попытке приблизить участие в криптосети к обычному смартфону и повседневному использованию.
Если тема будет интересна, следующим постом могу уже предметнее показать: как выглядит текущий прототип, что в проекте уже собрано, и где у ColorChain сейчас самые сложные технические места.
Замечаю, что у многих до сих пор очень странное представление о криптообменниках и P2P.
Люди часто думают так:
P2P - это что-то мутное, непонятное, рискованное. А вот обменник - это уже “нормально”, “официальнее”, “спокойнее”.
И вот здесь у огромного количества людей начинается главная ошибка.
Потому что в реальности очень многие обменники сами в той или иной форме используют P2P-стаканы, P2P-ликвидность и P2P-механику расчётов.
То есть по факту человек думает, что он “ушёл от P2P”, а на деле он просто зашёл в P2P через посредника.
Только уже с комиссией, наценкой и без понимания, что происходит под капотом.
Объясню проще.
Человек хочет купить или продать крипту. Он боится биржи, боится кнопок, боится слова P2P, боится “самому что-то не так нажать”.
И, не удивительно, ведь сейчас столько скама вокруг. Также, мы в новостях постоянно читаем про грязь, блокировки по 161-ФЗ, 115-ФЗ, "наливку" с процессинга (когда оплачивают в несколько чеков, и можно свои 20.000 рублей получить, в лучшем случае, в 10 переводов по 2.000р). Никто не хочет рисковать своими картами.
Поэтому человек и ищет в сети обменник, и предпочитает совершить обмен именно там.
Но, при этом нужно понимать, что в связи с усилением антифрода и комплаенса банков, из-за огромного количества мошенничества, из-за ограничений по 115-ФЗ - банковские карты при больших оборотах не живут. Соответственно - логический вывод, почти ни один обменник не сможет долго работать по своим картам, и картам своих знакомых. Да и покупать карты сейчас не является ни возможным, ни законным, из-за ужесточений и поправок в ст. 187 УК РФ.
Что же делает обменник?
Обменник берёт его заявку, закладывает свой спред, и дальше сам решает задачу через те же p2p-платформы или близкую механику.
То есть клиенту продают не магию. Ему продают удобную обёртку.
Иногда эта обёртка действительно нужна. Не все хотят разбираться сами. Не всем комфортно работать напрямую. Не всем подходит ручной формат.
Но проблема в том, что многие люди думают, будто платят за “другой тип сделки”.
Хотя часто они платят просто за то, что кто-то сделал тот же путь вместо них.
И вот тут важно разделять две вещи.
Если тебе нужен обменник, потому что тебе важны удобство, скорость и минимум действий с твоей стороны, - то окей, согласен, это понятная причина платить комиссию.
Но если ты идёшь в обменник просто потому, что думаешь, будто там “не P2P”, а что-то принципиально другое, - ты можешь просто не понимать, за что именно переплачиваешь.
По сути, на рынке часто происходит смешная вещь:
Человек боится P2P -> идёт в обменник -> а обменник потом идёт в P2P.
То есть страх остался у клиента, маржа ушла посреднику, а механика по факту осталась той же самой.
Но тут ещё надо знать одну вещь: обменник обменнику рознь.
У каких-то обменников действительно налажена работа, и тебе придут нормальные деньги от нормального отправителя и проблем не будет. А какие-то обменники хотят заработать и на тебе и на сделке на самой Р2Р-платформе. А вот тут тебе уже может полететь и перевод в несколько чеков, и сама сделка может обрабатываться долго, и могут потом быть жалобы на тебя от отправителя денег.
Я не говорю, что все обменники одинаковые. Не говорю, что все они сидят только на P2P. Не говорю, что обменник - это плохо.
Я говорю о другом:
очень многие люди вообще не понимают, как на самом деле устроен путь их денег.
Они видят красивую витрину и думают, что внутри какой-то другой мир. Хотя внутри, зачастую, всё та же самая рыночная ликвидность, просто поверх неё поставили удобный сервис и добавили цену за вход.
Именно поэтому перед любой покупкой или продажей крипты полезно задать себе простой вопрос:
Я плачу за реальное удобство и сервис - или просто за то, что кто-то нажмёт те же кнопки вместо меня?
Потому что это две очень разные истории.
В первом случае ты осознанно покупаешь комфорт. Во втором - просто переплачиваешь из-за непонимания, как устроен рынок.
И вот это, как по мне, одна из самых недооценённых вещей в крипте.
Многие думают, что выбирают между P2P и обменником.
Хотя часто выбирают между: Сделать самому и заплатить посреднику за ту же самую механику.
К сожалению, всё упрётся (или уже упёрлось) в контент. Не все захотят грузить в эту систему что-либо, опасаясь ответственности.
Ещё один негативный момент состоит в том, что будет загружено множество дублей, плохо оформленных файлов, плохого качества и т.п., что приведёт к полному беспорядку и захламлению места на дисках пользователей.
Помимо этого, не все захотят просто хранить какие-то объёмы файлов ради других.
Вот если бы где-нибудь существовал торрент-трекер, где все файлы лежали бы упорядочено, были бы хорошо и единообразно оформлены. Например, какой-нибудь форум, где всё на столько было бы упорядочено, что даже парсить описание песен и альбомов оттуда можно было бы... Вот тогда это приложение "Патефон" можно было бы сделать дополнением к такому торрент-трекеру, используя его как базу контента, заодно и увеличивая количество участников раздач.
А ещё можно будет добавить туда раздел аудиокниги...
Когда люди слышат про спорный перевод между физлицами, у большинства сразу включается простая логика:
Отправитель - это жертва.
Получатель - это злоумышленник.
Но реальность давно сложнее.
Мошенником может быть не только тот, кто получил деньги.
Мошенником может быть и тот, кто их отправил.
И пока этого не понимать, невозможно нормально разбирать ни конфликты вокруг переводов, ни ложные претензии, ни то, что вообще происходит в P2P-среде.
Есть как минимум две очень разные ситуации:
Первая - это то, что принято называть «чёрным треуголом».
Это когда человека реально обманывают: он думает, что платит за товар, услугу, билет, путёвку, заработок или что-то ещё, а на деле его деньги уходят третьему лицу, которое вообще не имеет отношения к обещанию.
В этом случае отправитель действительно жертва.
Но и получатель перевода не всегда мошенник - его тоже могли использовать вслепую.
Вторая - это, так называемый, «манибэк».
Когда человек сам, добровольно и осознанно отправляет деньги: например, на пополнение казино, беттинга, серого сервиса или совершает любую другую оплату.
А потом хочет эти деньги вернуть назад - через жалобу, давление, банк, полицию или легенду о том, что его якобы обманули.
И вот здесь отправитель уже не имеет ничего общего с жертвой.
Это уже сам недобросовестный человек, который пытается использовать банковую систему как инструмент отката своей же добровольной операции.
В этом и кроется вся проблема.
Пока рынок, банки и сами участники переводов мыслят по примитивной формуле:
«кто отправил - тот прав, кто получил - тот виноват», - ошибок будет огромное количество.
Потому что в одной истории отправитель - действительно жертва.
В другой - активный участник схемы.
В третьей - человек, который сам совершил отправку, а потом решил переиграть ситуацию через жалобу.
И, получатель при этом, тоже может быть очень разным.
Он может быть мошенником.
Может быть сознательным участником грязной схемы.
Может быть добросовестным получателем, который просто не увидел настоящий контекст перевода.
Именно поэтому переводы между физлицами нельзя оценивать без понимания контекста.
Кто с кем договаривался?
Кто кому писал?
За что реально шёл перевод?
Кто получил экономическую выгоду?
Была ли добровольность?
Была ли подмена роли?
Это жертва, чёрный треугол или попытка манибэка, замаскированная под «я жертва - меня обманули»?
Пока этих различений нет, крайними будут иногда становиться совсем не те.
И это одна из главных причин, почему рынок нельзя лечить только запретами и шаблонной реакцией.
Пока рынок и банки живут по формуле «кто отправил - тот жертва», ошибок будет только больше.
Понятно, что в процентном соотношении, «черные треуголы» встречаются в разы чаще чем «манибеки», но о последних тоже нужно помнить, и знать что они есть.
Где-то с полгода назад, когда началась эта история с блокировками и замедлением, я задался вопросом: "Ведь скоро заблокировано будет чуть более, чем всё. А как мне, собственно, при этом всём общаться с семьей и друзьями, когда я живу заграницей, а они в России?". Я вышел в интернет с таким вопросом, и начал поиски удобного надежного мессенджера, чтоб чисто писать, звонить и скидывать мемы. Несколько вариантов нашлись довольно быстро, какие-то заработали у родителей, какие-то нет, парочка отвалилась в процессе тестирования, в общем, это не особо важно, уже даже на Пикабу встречал несколько обсуждений, так что обойдемся без подробностей.
Во время всего этого священнодействия, меня не отпускала одна мысль. А чего бы не сделать свой мессенджер? Опыт есть, в прошлом я плотно занимался разработкой под Андроид по работе, да и своих личных приложений опубликовал с десяток. Тем более, у меня уже есть свое родное приложение для видеоконференций, peer-to-peer: прямое соединение от устройства до устройства, никаких лишних серверов, одна красота. Ну разве что надо будет заменить конференции на звонки, прикрутить к нему список контактов, чаты, профили, криптографию, аутентификацию, цифровые подписи, подтверждения и удаления контактов, базу данных, индексы, миграции, транзакции, пейджинг, навигацию, передачу сообщений, файлов, уведомления, настройки, поиск, блэклист, потом интегрировать все это великолепие со службами телеком Андроида, добавить просмотр картинок и видео, тесты, ботов, шэринг, перевести на основные мировые языки. Что может быть проще?
Проще, конечно, не было. Весь процесс занял почти 5 месяцев.
За 5 месяцев работы по вечерам и выходным (ну, конечно, не каждый день), 543 коммита и примерно 40000 строк кода, получилось что-то более-менее удобоваримое и стабильное.
Так как человек я бедный экономный, и не планирую поддерживать дорогую серверную инфраструктуру, даже чаты в моем приложении работают через p2p - прямое соединение между телефонами. Это, кстати, редкость среди публично доступных мессенджеров, подавляющее большинство используют сервис пуш-уведомлений Гугла или Эппл для доставки сообщений. В моем случае, сначала оба устройства устанавливают прямое соединение друг с другом, и только в случае успеха начинают обмениваться шифрованными мемами со страшной силой без промежуточного сервера. Если соединиться прямо сейчас не удалось, все будет локально сохранено и доставлено автоматом при первой же возможности. Кое-какой обмен с сервером для установления прямого соединения все равно необходим - телефоны должны обменяться информацией о своем подключении и IP-адресах, но как только соединение установлено - сервер можно даже выключить - общению это не помешает.
И в этом заключается как огромное преимущество, так и некоторые недостатки: переписки и звонки мало того что закодированы сквозным шифрованием, так еще и никогда даже не попадают на сервер - это чертовки приватно и секьюрно и не надо сильно беспокоиться об утечках - невозможно слить то, чего нет. С другой стороны, теперь конечные устройства ответственны за доставку текстовых сообщение и пакетов данных - сам телефон должен организовать повторную доставку, если что пошло не так, для всех переписок. Это не проблема вовсе для частных контактов, небольшая трудность для групповых чатов на 50-100 человек, но огромная головная боль для публичных каналов на миллионную аудиторию. Публичных каналов, поэтому, нет. Групповых чатов, впрочем, тоже пока нет.
Чтобы добавить кого-то в свой список контактов нужно просканировать QR-код с временным криптоключём, или добавить по идентификатору и ждать, пока тот вручную подтвердит добавление и клиенты обменяются цифровыми подписями.
Эта девстори не была бы полной, если бы я не упомянул о самом трудоемком (да и самом интересном). Я ж ниибаца профессионал, на работе я делаю софт, которым пользуются миллионы, весь такой safety-critical С++ покрытый на 100% тестами и анализаторами по самую макушку. Нельзя же просто взять и сделать Ардроид приложение, это слишком просто, надо извернуться и с самого начала создать целый фреймворк для мессенджеров.
Я разработал С++ ядро, единое для всех поатформ, а приложение Андроид должно по задумке быть только тонким клитентом вокруг этого ядра. Забегая вперед, скажу что задумка удалась почти полностью. Конечное приложение действительно работает как оболочка вокруг единого производительного и набитого тестами ядра, и если я захочу сделать приложение, например, для Эппл, мне нужно будет только скопировать пользовательский интерфейс, биндинги на ядро и интеграцию с родными службами айфона. Вся логика, настройки, все модели, хранилище, шифрование и вообще всё-всё - уже в ядре. Это здорово, но насколько же все усложнилось, кто бы знал. Тем не менее, оно работает, и в общем, работает весьма неплохо, потребление приложением батареи за день на фоне всего остального вообще не заметно. Есть еще поле для оптимизации хранения в базе данных, да и ядро можно порефакторить во имя вечного и недостижимого приближения к идеалу, но в целом и так хорошо.
Надеюсь, понятно и без перевода. Если кратко - батарею не жрёт.
Итого, получилось довольно неплохое приложение для общения. Уже больше недели я с семьей и друзьями используем его для ежедневных переписок и пока все всех устраивает и, более того, нравится. Настолько, что я решил выложить мессенджер в Google Play, а мою девстори прямо сюда. Для желающих скачать и потрогать, ссылка вот https://play.google.com/store/apps/details?id=hela.eillance, там нет рекламы, нет подписок и платного контента. И вряд ли когда-либо будет, добавлять рекламу или подписку в мессенджер, когда вокруг столько бесплатных альтернатив (как, например, поддерживаемый на государственном уровне, MAX/sarcasm), это просто приговор.
Кстати, не переименовать ли мне его в Sarcasm Chat?