Масштабируем блокчейн сохраняя децентрализацию с Failsafe Network
Как многие уже заметили, комиссии в биткоине последнее время стабильно держатся в районе 10–20 баксов за простой перевод.
Это происходит потому что размер блока ограничен константным значением, а желающих вместить свою транзакцию в блок заметно больше чем раньше. Что вызывает конкуренцию за комиссию и ее естественный рост.
Логично, что увеличив блок мы сможем вместить больше людей, а значит отложить проблему? С одной стороны — да — так поступил Bitcoin Cash вся суть которого сводится к увеличению блоксайза до 8Мб.
С другой стороны — нет. Об этом, и о разработанном блокчейне Failsafe который элегантно решает эту проблему — под катом.
1. С увеличением блоксайза становится сложнее содержать фулноду
Напоминаю, единственный правильный способ использования криптовалюты это быть фулнодой — иначе вы полагаетесь на картель майнеров чтобы он следовал правилам консенсуса. Майнерам/валидаторам же нужно максимизировать прибыль, и как только они почувствуют власть они начнут банить неугодных, создавать unspent transaction outputs из воздуха, и так далее.
Каждая нода верифицирующая каждое движение стейта — залог децентрализованной и честной сети. В последнее время стало модно говорить что simple payment verification это нормально и что мы так или иначе верим майнерам что они не совершают дабл спенд. Не будем в это углубляться — любой желающий может нагуглить почему крайне важно максимальное количество фулнод, и почему лэптоп должен всегда рутинно быть фулнодой, иначе происходит централизация сети вокруг state keepers, которые в какой то момент могут просто перестать раздавать новые блоки наблюдателям и превратиться в cross-signed paypal state, «с деньгами берущимися из ниоткуда и пропадающими в никуда, лишь бы подписи были».
За константу, возьмем average world internet connection — 1 мегабайт в секунду, и заявим что пользователь открывающий кошелек раз в неделю должен в лучшем случае ждать не дольше 10 минут чтобы синхронизироваться с остальной сетью. Это выходит как раз текущий bandwidth usage у Bitcoin Core. Подробнее про этот параметр который я окрестил weekly sync friction можно читать тут.
Вторая проблема блоксайза это то что даже у него есть практические лимиты.
Многие новые «псевдо» блокчейны любят заявлять tps (transaction per second) в районе 10 и даже 100к (например bitshares). Однако, начиная читать «fine print» про них можно увидеть что они предполагают gigabit connection и дьявольски мощные сервера. Очевидно, ни на каком лэптопе такое не запустить. Это пара десятков фул нод крутящихся в централизованном облаке, а то и вообще в одном датацентре, в которых от блокчейна ничего не осталось.
А нужно ли нам 100к тпс? Каждый решает сам, но я верю в 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 файлы и слить ваши приватные ключи).
А какие альтернативы?
По большому счету предлагаются 3 варианта. Sharding — когда блокчейн делится на шарды, и ваш клиент становится аналогом SPV при работе с чужими шардами, side chains/plasma где создается отдельный блокчейн который может быть «жирным», но обязан слать чекпоинты в главный чейн чтобы его можно было поймать и наказать. Оба варианта слабо увеличивают tps, хороши лишь для микротранзакций и плохо влияют на децентрализацию — про них мы не будем говорить. Третий же вариант это системы построенные на основе payment channels такие как lightning и raiden.
Пеймент канал по сути это объявление в блокчейне что два участника далее решают состояние баланса некого аккаунта между ними двумя, multisig на двоих.
В пеймент канале не возможен дабл спенд, так как он двух сторонний. И если я получаю комитмент на сумму Х (подписанная строка от другого участника) я на 100% уверен что я получу Х ведь он не мог больше никому их пообещать. Блокчейн же тут выступает роль арбитра, к которому обращаются когда нужно закрыть этот канал и каждому взять свою часть денег.
Существует очень мало людей которым имеет смысл открывать каналы между собой, так как все платят разным лицам. Поэтому логично предположить что система может приносить пользу только при существовании хабов. Алиса открывает канал к хабу, хаб открывает канал к Бобу, Алиса платит хабу, хаб платит Бобу, все довольны.
Именно эту стратегию считают основной в масштабировании биткоина — подробнее можно прочитать на сайте LN.
Lightning и ликвидность
Если же вдуматься в эту архитектуру, можно увидеть серьезный промах в модели мотиваций участников. Да, Алисе ничего не стоит открыть канал на 100 баксов к хабу, но для того чтобы хабу открыть канал к Бобу ему надо инвестировать свои собственные деньги, послав транзакцию в блокчейн.
Боб может быть эфемерным ботом, и это может быть единственный перевод в его сторону. Каналы имеют смысл лишь когда они использованы многоразово — сотни и тысячи раз, если же он используется редко то он убыточен для хаба.
Так же, у канала есть объем — те Алиса не сможет послать больше 100 баксов что есть в канале (иначе хаб теоретически просто не сможет их забрать из блокчейн контракта, ведь в нем только 100 и лежит). Та же проблема на выходе — если у хаба с Бобом канал только на 50 баксов, то Алиса не сможет зароутить платежи больше 50 баксов в сторону Боба через хаб — тк вместимость считается по минимальному каналу на цепочке, и хаб просто не сможет пообещать и послать криптографический коммитмент Бобу на более чем 50 баксов.
Это проблему я окрестил incentive / cost / capacity — у хаба нет мотивации открывать каналы без тщательного KYC (know your customer + anti money laundry), оперировать хабом очень дорого и нужно инвестировать собственные средства, и у выходных каналов хаба всегда ограничена вместимость, а значит многие платежи просто провалятся (вы в кафе и от вас до владельца кафе не хватает $1 в объеме каналов — вы не способны заплатить несмотря на ваш собственный канал к хабу в 100 баксов). Подробно эту проблему я описал так же в этой статье.
Failsafe Network
Вот мы и плавно подошли к тому над чем я работаю уже полгода. Фс как концепт это и решение для масштабирования обычного блокчейна, но я так же разработал новый блокчейн с нуля, которое это решение включает в себя из коробки.
Демо https://failsafe.network/#install
Система берет за основу lightning network и добавляет возможность посылать деньги в долг.. Т.е. там где ЛН ложиться на лопатки и говорит что не найден route/capacity в каком то направлении в фс хаб просто обещает эту сумму своему пользователю, и это криптографическое обещание так же можно послать в блокчейн и получить по нему деньги (но при условии что хаб не взломан и имеет эти деньги).
Само подписанное платежное поручение мы называем delta — те отклонение вашего офчейн баланса от текущего ончейн баланса (aka collateral, insurance). В lightning используют название commitment transaction (тк то что вы даете хабу по сути валидная биткоин транзакция — у нас это не так, это спец форматированная строчка), в raiden (эфировая альтернатива, заточенная под посылку ERC-20 токенов) называет это balance proof.
Таким образом мы достигаем бесконечный скейлинг офчейн, сохраняя сам блокчейн маленьким, что не составляет труда быть фулнодой на лэптопе или смартфоне.
Теперь каждый участник сети не сообщает всем остальным о переводе за кофе или квартиру — вместо этого практически все платежи (кроме совсем огромных в миллионы долларов) должны проходить через хабы.
Каждый участник может выбрать 1 или более хабов с которыми он будет держать канал. Пока еще неясно как эти хабы будут создаваться, но наиболее логично что по географическому признаку. И так moscow hub может обслуживать всех жителей Москвы.
Как выглядит оплата?
- Алиса приходит в кафе и просит счет.
- Алиса касается телефона / сканирует QR, ее кошелек берет последнее значение дельты хранимое с местным хабом и уменьшает эту дельту на сумму покупки .
- Эта подписанная дельта шлется прямиком на сервер хаба с примечанием «переслать этому кафе У за этот инвойс Х).
- Хаб верифицирует изменение дельты и узнает какую же сумму Алиса платит. Убеждается что объем оплаты меньше или равен размеру канала (сама Алиса в долг платить пока не может.
Но это пока — кредитки в этой системе тоже предусмотрены) - Хаб ищет в системе открытый вебсокет в сторону кафе У, достает из своей базы данных последнюю дельту с этим кафе и увеличивает ее на эту же сумму минус офчейн комиссию (0.1%
в данный момент — в 30 раз меньше визы и пейпала) - Платежный терминал или смартфон владельца кафе получает новую дельту от хаба и примечание за какой инвойс пришел платеж. Если сумма инвойса и то насколько дельта была увеличина равны, инвойс помечается как оплачена. Алиса может идти.
Таким образом мы не только решаем проблему объема блока, но и делаем процедуру платежа предельно дешевой и моментальной — что идеально подходит для офлайновой коммерции и вполне приятное дополнение для онлайновой (никому не охота ждать по 30 минут 3 конфирмаций).
Хаб же в свою очередь должен делать умный машин лернинг на статистике дельт всех юзеров. Когда дельта равна -10 это значит хаб владеет 10 юнитами из канала данного пользователя. Когда дельта +10 значит хаб пообещал данному пользователю добавить в канал 10 юнитов.
Есть риск что хаб пообещает денег больше чем у него хранится в негативных дельтах — и поэтому хаб обязан делать ребаланс своих каналов как только они перевесят определенные суммы например <-100 и >+100.
Сам блокчейн превращается в легковестный снапшот страховок (insurance). Часть баланса будет insured — так же как и в биткоине этот баланс гарантирован и выживет даже после полного взлома хаба, а малая часть uninsured — обещанный баланс у некоторых пользователей.
.
После значительных колебаний у тех юзеров кто много потратил (послал негативную дельту хабу) забираются деньги и отдаются тем кто много заработал уже ончейн, и выполняется на компьютерах всех пользователей. Эти транзакции будут редкими и легковесными, в то время как офчейн проходят миллионы транзакций не оставляя и следа о себе внутри блокчейна.
Каждый будет видеть внутри своего кошелька у кого сколько денег хранится в хабе, а точнее «с хабом» (в этом и главное отличие хаба от банка — деньги не принадлежат хабу, он лишь их временный держатель) — и получать из сети одни только ребалансы этих страховок с хабом. Но никто не будет знать кому, когда и сколько ты послал лишь финальный результат в конце недели что твой баланс уменьшился на $10,000.
Самое же крутое, что большинство пользователей почти не будут касаться блокчейна и избегут ончейн комиссий (которые так же как и в биткоине будут в районе 10–100 баксов) если они правильно структурируют платежные потоки вокруг себя (streaming money). Каждый полученный доллар будет направлен на аренду или оплату кредита — и размер дельты всегда стремится к 0, а значит почти весь баланс пользователя застрахован всегда и обладает теми же свойствами что и биткоин.
Все хабы существуют независимо друг от друга (как и ISP хабы в сети интернет), могут иметь каналы между собой с определенными лимитами риска (прямо как корреспондент счета в банках), и разделяют общий сеттлемент слой (что является заменой центрального банка). И вся эта система способна выдержать миллионы транзакций в секунду без ущерба децентрализации первому слою (на котором хранятся лишь страховки которые очень редко ребалансируются)
PS: написал и сам ужаснулся как все пропитано странными терминами и сложно описано. Заранее простите, концепт двухуровневый и весьма сложный, и много крутых фишек типа встроенных снапшотов и децентрализованной установки не вошли в текст — с удовольствием отвечу на все вопросы.
С системой как я уже сказал можно поиграться на failsafe.network, а код прототипа есть на Гитхабе.