Масштабируем блокчейн сохраняя децентрализацию с Failsafe Network

Технология блокчейн

Многие уже заметили, комиссии в биткоине последнее время стабильно держатся в районе 10-20 баксов за простой перевод.

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

Увеличив блок мы сможем вместить больше людей а значит отложить проблему? С одной стороны — да — так поступил Bitcoin Cash (Курс Bitcoin Cash) вся суть которого сводится к увеличению блоксайза до 8Мб.

С другой стороны — нет. Об этом, и о разработанном блокчейне Failsafe который элегантно решает эту проблему — под катом.

1. С увеличением блоксайза становится сложнее содержать фулноду

Напоминаю, единственный правильный способ использования криптовалюты это быть фулнодой — иначе вы полагаетесь на картель майнеров чтобы он следовал правилам консенсуса. Майнерам/валидаторам же нужно максимизировать прибыль, и как только они почувствуют власть они начнут банить неугодных, создавать unspent transaction outputs из воздуха, и так далее.

Каждая нода верифицирующая каждое движение стейта — залог децентрализованной и честной сети. В последнее время стало модно говорить что simple payment verification это нормально и что мы так или иначе верим майнерам что они не совершают дабл спенд. Не будем в это углубляться — любой желающий может нагуглить почему крайне важно максимальное количество фулнод, и почему лэптоп должен всегда рутинно быть фулнодой, иначе происходит централизация сети вокруг state keepers, которые в какой то момент могут просто перестать раздавать новые блоки наблюдателям и превратиться в cross-signed paypal state, «с деньгами берущимися из ниоткуда и пропадающими в никуда, лишь бы подписи были». Каждая нода верифицирующая каждое движение стейта — залог децентрализованной и честной сети. В последнее время стало модно говорить что simple payment verification это нормально и что мы так или иначе верим майнерам что они не совершают дабл спенд. Не будем в это углубляться — любой желающий может нагуглить почему крайне важно максимальное количество фулнод, и почему лэптоп должен всегда рутинно быть фулнодой, иначе происходит централизация сети вокруг state keepers, которые в какой то момент могут просто перестать раздавать новые блоки наблюдателям и превратиться в cross-signed paypal state, «с деньгами берущимися из ниоткуда и пропадающими в никуда, лишь бы подписи были».

За константу, возьмем average world internet connection — 1 мегабайт в секунду, и заявим что пользователь открывающий кошелек раз в неделю должен в лучшем случае ждать не дольше 10 минут чтобы синхронизироваться с остальной сетью. Это выходит как раз текущий bandwidth usage у Bitcoin Core.

Практические лимиты размера блока

Многие новые «псевдо» блокчейны любят заявлять tps (transaction per second) в районе 10 и даже 100к (например bitshares). Однако, начиная читать «fine print» про них можно увидеть что они предполагают gigabit connection и дьявольски мощные сервера. Очевидно, на лэптопе такое не запустится. Это пара десятков фул нод крутящихся в централизованном облаке, или в одном датацентре, в которых от блокчейна ничего не осталось.

А нужно 100к transaction per second? Каждый решает сам, но я верю в sound money — циферки на экране которые я могу послать любому человеку на земле, и он примет их понимая их стоимость так же как и я, не парясь о объемах блока и платя мизерные комиссии. А значит надо чтобы такая система поддерживала абсолютно любой перевод стоимости для всего человечества. Грубо прикинув что есть 5 млрд entities (все платежеспособные люди + бизнесы) совершающих 1 транзакцию в день требует 58,000 tps. А если прикинуть что этих транзакций не 1 а 10 (мир интернет коммерции растет не по дням а по часам) то и все 580к. Такой объем среднего tps просто невозможно уместить on-chain, ни сейчас, ни через 10 лет.

Сатоши Накамото полагал в 2009 году что мощности компьютеров будут расти так быстро что off-chain масштабирование не нужно. Оказалось, что рядовому консьюмеру уже и так хорошо, а значит зачем стараться больше? Apple не собирается инвестировать в разработку 10 терабайтных айфоном с 1 гигабитным интернетом чтобы внутри можно было запустить блокчейн. Это реально, но для них в этом нет коммерческого интереса.

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

Наоборот, фул нода должна быть маленькой утилиткой в углу системы, тихо сжирающая 1% интернет траффика, 1% пространства на диске и 1% процессорной мощности. Иначе она будет удалена — что собственно и произошло сейчас с биткоином и эфириумом. Запускать фул ноды на лэптопе стало практически невозможно, и все перешли на SPV кошельки а то и вообще вебсайты типа myetherwallet.com (который в любую секунду может быть взломан, заменить .js файлы и слить ваши приватные ключи).

Альтернативы для блокчейна

  • Sharding когда блокчейн делится на шарды, и ваш клиент становится аналогом SPV при работе с чужими шардами
  • Side chains/plasma Создается отдельный блокчейн который может быть «жирным» но обязан слать чекпоинты в главный чейн чтобы его можно было поймать и наказать
  • Payment channels Lightning и Raiden

Первые два варианта слабо увеличивают tps, хороши только для микротранзакций и плохо влияют на децентрализацию — про них мы не будем говорить.

Пеймент канал по сути это объявление в блокчейне что два участника далее решают состояние баланса некого аккаунта между ними двумя, multisig на двоих.

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

Существует очень мало людей которым имеет смысл открывать каналы между собой, так как все платят разным лицам. Поэтому логично предположить что система может приносить пользу только при существовании хабов. X открывает канал к хабу, хаб открывает канал к Y, X платит хабу, хаб платит Y, все довольны.

Lightning и ликвидность

Если же вдуматься в эту архитектуру, можно увидеть серьезный промах в модели мотиваций участников. Да, X ничего не стоит открыть канал на 100 баксов к хабу, но для того чтобы хабу открыть канал к Y ему надо инвестировать свои собственные деньги, послав транзакцию в блокчейн.

Y может быть эфемерным ботом, и это может быть единственный перевод в его сторону. Каналы имеют смысл лишь когда они использованы многоразово — сотни и тысячи раз, если же он используется редко то он убыточен для хаба.

Так же, у канала есть объем — те X не сможет послать больше 100 баксов что есть в канале (иначе хаб теоретически просто не сможет их забрать из блокчейн контракта, ведь в нем только 100 и лежит). Та же проблема на выходе — если у хаба с Y канал только на 50 баксов, то X не сможет зароутить платежи больше 50 баксов в сторону Y через хаб — тк вместимость считается по минимальному каналу на цепочке, и хаб просто не сможет пообещать и послать криптографический коммитмент Y на более чем 50 баксов.

Это проблему окрестили incentive / cost / capacity — у хаба нет мотивации открывать каналы без тщательного KYC (know your customer + anti money laundry), оперировать хабом очень дорого и нужно инвестировать собственные средства, и у выходных каналов хаба всегда ограничена вместимость а значит многие платежи просто провалятся (вы в кафе и от вас до владельца кафе не хватает $1 в объеме каналов — вы не способны заплатить несмотря на ваш собственный канал к хабу в 100 баксов). Подробно эту проблему я описал так же в этой статье.

Failsafe Network

Failsafe example

Система берет за основу lightning network и добавляет возможность посылать деньги в долг.. Т.е. там где ЛН ложиться на лопатки и говорит что не найден route/capacity в каком то направлении в фс хаб просто обещает эту сумму своему пользователю, и это криптографическое обещание так же можно послать в блокчейн и получить по нему деньги (но при условии что хаб не взломан и имеет эти деньги).

Само подписанное платежное поручение мы называем delta — те отклонение вашего офчейн баланса от текущего ончейн баланса (aka collateral, insurance). В lightning используют название commitment transaction (тк то что вы даете хабу по сути валидная биткоин транзакция — у нас это не так, это спец форматированная строчка), в raiden (эфировая альтернатива, заточенная под посылку ERC-20 токенов) называет это balance proof.

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

Теперь каждый участник сети не сообщает всем остальным о переводе за кофе или квартиру — вместо этого практически все платежи (кроме совсем огромных в миллионы долларов) должны проходить через хабы.

Каждый участник может выбрать 1 или более хабов с которыми он будет держать канал. Пока еще неясно как эти хабы будут создаваться, но наиболее логично что по географическому признаку. И так moscow hub может обслуживать всех жителей Москвы.

Как выглядит оплата?

  1. X приходит в кафе и просит счет.
  2. X касается телефона / сканирует QR, кошелек берет последнее значение дельты хранимое с местным хабом и уменьшает эту дельту на сумму покупки .
  3. Эта подписанная дельта шлется прямиком на сервер хаба с примечанием «переслать этому кафе У за этот инвойс Х).
  4. Хаб верифицирует изменение дельты и узнает какую же сумму X платит. Убеждается что объем оплаты меньше или равен размеру канала (сам X в долг платить пока не может.
    Но кредитки в этой системе тоже предусмотрены)
  5. Хаб ищет в системе открытый вебсокет в сторону кафе У, достает из своей базы данных последнюю дельту с этим кафе и увеличивает ее на эту же сумму минус офчейн комиссию (0.1% в данный момент — в 30 раз меньше визы и пейпала)
  6. Платежный терминал или смартфон владельца кафе получает новую дельту от хаба и примечание за какой инвойс пришел платеж. Если сумма инвойса и то насколько дельта была увеличина равны, инвойс помечается как оплачена. X может идти.

Таким образом мы не только решаем проблему объема блока, но и делаем процедуру платежа предельно дешевой и моментальной — что идеально подходит для офлайновой коммерции и вполне приятное дополнение для онлайновой (никому не охота ждать по 30 минут 3 конфирмаций).

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

Hub delta

Есть риск что хаб пообещает денег больше чем у него хранится в негативных дельтах — и поэтому хаб обязан делать ребаланс своих каналов как только они перевесят определенные суммы например <-100 и >+100.

Сам блокчейн превращается в легковестный снапшот страховок (insurance). Часть баланса будет insured — так же как и в биткоине этот баланс гарантирован и выживет даже после полного взлома хаба, а малая часть uninsured — обещанный баланс у некоторых пользователей.

Sending via hub

После значительных колебаний у тех юзеров кто много потратил (послал негативную дельту хабу) забираются деньги и отдаются тем кто много заработал уже ончейн, и выполняется на компьютерах всех пользователей. Эти транзакции будут редкими и легковесными, в то время как офчейн проходят миллионы транзакций не оставляя и следа о себе внутри блокчейна.

Sending via hub

Каждый будет видеть внутри своего кошелька у кого сколько денег хранится в хабе, а точнее „с хабом“ (в этом и главное отличие хаба от банка — деньги не принадлежат хабу, он лишь их временный держатель) — и получать из сети одни только ребалансы этих страховок с хабом. Но никто не будет знать кому, когда и сколько ты послал лишь финальный результат в конце недели что твой баланс уменьшился на $10,000.

Самое же крутое, что большинство пользователей почти не будут касаться блокчейна и избегут ончейн комиссий (которые так же как и в биткоине будут в районе 10-100 баксов) если они правильно структурируют платежные потоки вокруг себя (streaming money). Каждый полученный доллар будет направлен на аренду или оплату кредита — и размер дельты всегда стремится к 0 а значит почти весь баланс пользователя застрахован всегда и обладает теми же свойствами что и биткоин.

Все хабы существуют независимо друг от друга (как и ISP хабы в сети интернет), могут иметь каналы между собой с определенными лимитами риска (прямо как корреспондент счета в банках), и разделяют общий сеттлемент слой (что является заменой центрального банка). И вся эта система способна выдержать миллионы транзакций в секунду без ущерба децентрализации первому слою (на котором хранятся лишь страховки которые очень редко ребалансируются)