September 5, 2018

Приключения в платежных каналах вместе с Эфимерным Риком

(здесь и далее используется термин Counterfactual букв. эфимерный, нереальный. Существует одноименный проект, который занимается проблемами масштабируемости и, в частности, прямыми платежными каналами. Именно решение данного проекта под названием "Counterfactual Instantiations" и является предметом рассмотрения данной статьи)

оригинал https://medium.com/spankchain/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea

Перевел @CryptoLamer

Озвучил @Сыендук (нет)

Вабба дубба даб даб! Это Эфимерный Рииик. Так, слух сюда, Морти, сегодня я собираюсь принять твои жалкие извинения за собственную тупость и провести с тобой глубокое погружение в мир таких горячих прямых платежных каналов. Всё это время ты проектировал свои говнодапсы, вообще не вкуривая как их масштабировать, надеясь отсидеться тихо в уголке пока кто-то со стороны не спасет твою задницу. Бл*ть, просто безнадежно.

Но сегодня настал твой счастливый день, ибо с тобой Эфимерный Рик, детка! Просто хорошенько и с умом подойди к нашей "саенс адвенчуре" и может быть ты выйдешь в конце тоннеля не таким уж бесполезным для человечества овощем, вместо того чтобы остаться слабоумным придурком, зависящим от других, чтобы масштабировать своё дерьмо.

Усёк? Так то. Тэк, прежде чем что-либо предпринимать, мне нужно чтобы ты усвоил эти зерна знаний

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

Итак, первое что ты должен знать – основы. Ты ведь знаешь основы? Ты не знаешь основы. Ох бл*, это продлиться немного дольше, чем я ожидал.

Бери мою портальную пушку и не возвращайся пока не получишь хотя бы минимальные знания о платежных каналах, чтобы хотя бы иметь право дышать одним воздухом со мной. Ну так чего ты ещё здесь делаешь? Пошёл!

Знания о платежных каналах

Сегодня в нашем приключение мы рассмотрим генерализованные прямые каналы и эфимерные реализации, так что если ты захочешь вернуться к азам о работе прямых платежных каналов, начни с этого Machinomy post, и вот этого Ameen’s talk.

Я здесь не при чём

Хорошо Морти, держись за что-нибудь, потому что наши приключения начинаются.

Почему генерализованные прямы платежные каналы имеют значение

Если бы ты был доисторическим идиотом, пытающимся построить первый платежный канал с помощью "го8на и палки", то ты бы, наверное, задеплоил любой контракт однозадачного платежного канала, нужный тебе для твоего дапа, и завязал с этим.

Конечно, это даже может работать недолго, но ты в итоге захочешь развернуть другой тип каналов или проапгрейдить начальные настройки своего канала. Патамушта ПРОГРЕСС, Морти! Всё меняется! Ты же не хочешь отстать от паровоза, Морти, не так ли?

Когда ты собираешься развернуть новую систему платежных каналов, тебе приходится деплоить совершенно новые смарт-контракты, Морти. Всё потому что твой примитивный разум не способен мыслить на шаг вперед и теперь тебе придётся всё начинать с нуля. И каждый из этих новых контрактов будет содержать некий баланс, а значит твой смарт-контракт должен будет пройти тщательный аудит. Аудит, бл*ть, Морти! Ты знаешь сколько стоит аудит смарт-контракта в текущем ICO-пузыре? Просто сумашествие, Морти.

А теперь подумай о юзерах, Морти. Если им захочется провести апгрейд до твоей новой системы платежных каналов, им придётся вынуть деньги из оригинального смарт-контаркта и переместить их на новый! Это две ончейн транзакции на юзера, Морти! Это ж, бл*ть, ой как много газа!

Пример: Апгрейдим прямой платёжный канал

Итак, каждый из твоих контрактов содержит набор однотипных функций. Ты знаешь что такое функция, Морти? Взгляни на диагрумму:

На этой диаграмме представлены функции, которые используются при апгрейде каналов. Первый контракт – простейший из возможных для платежных каналов: однонаправленный и только для Эфира. Второй позволяет трансфер токенов, а третий позволяет производить платежи в эфире и токенах в обоих направлениях.

Ты заметил, Морти, что они имеют почти одни и те же функции? Ты будешь удивлен, но это потому что эти контракты в своей основе одинаковые. Разница в том, что когда апгрейдишь контракт V1 до поддержки токенов, то функция OpenChannel должна понимать как принимать токены и изменять баланс отправителя, isValidUpdate должна принимать перевод токенов таким же валидным как и эфир, а closeChannel должна уметь перечислять на баланс токены как эфир, основываясь на конечных балансах пользователей канала.

Когда апгрейдишь V2 до поддержки двунаправленных транзакций, главное изменение – это добавление функции joinChannel, так чтобы оба участника платежного канала могли бы посылать актив в канал, а также проапгрейдить isValidUpdate, чтобы принимать платежи и в токенах и в эфире в обоих направлениях.

Введение в генерализованные прямые платежные каналы

Ты можешь поступить гораздо умнее, чем все эти узколобые идиоты, которые деплоят совершенно новые контракты, используя «Bond Manager». Bond Maneger – это крайне умный контракт, который предоставляет «Фреймворк для генерализованных прямых платежных каналов», который каждый может использовать для любых систем платежных каналов, которые надо развернуть. Он служит основой для всех внедренных систем платежных каналов, которые содержат некоторый баланс, и предоставляет все общие функции, необходимые всем системам платёжных каналов.

Теперь, в данных условиях тебе всё ещё нужно задеплоить новый смарт-контракт каждый раз, когда тебе нужен апгрейд. Но новый контракт не будет содержать балансов. К тому же он ответственен только за функции setState и isValidUpdate, которые уникальны для каждой системы платежных каналов. А это значит, что ты можешь сберечь время и деньги на разработку, тестирование и аудит каждого нового контракта для прямого платежного канала. Нужно думать о выгоде, Морти!

Мы называем эти более мелкие, более специфичные контракты «интерпритаторами», Морти. Потому что они помогают Bond-менеджеру интерпретировать конечное состояние канала и понять как распределить активы.

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

Любопытно, чтобы бы ты стал делать на этот счёт? М.б. нанять кого-то поумнее, кто сделает всё лучше и быстрее чем ты бы смог за сотню лет? М.б. кого-то, у кого решение содержится в его чёртовом названии? Да, пора Эфимерному Рику спасти положение, детка!

Эфимерные реализации

Пора, бл*ть, взоврвать твой *банный мозг, Морти! Что если вместо Bond-менеджера заставить тебя выбрать конкретную систему каналов для подключения, это позволит тебе войти в «мета канал», который включает все возможные системы платёжных каналов, даже те, которые не существуют? Ну вот это и есть то, что нам позволяют делать эфимерные реализации, Морти. Это, бл*ть, будущее.

Когда присоединяешься к мета каналу, ты можешь входить в любое количество подканалов, используемых контрактом-интерпритатором. Ну давай представим что ты и я, Морти, взяли по паре своих монет и вместе присоединились к мета каналу. Мы можем решить затем переместить несколько наших монет в двунаправленный платежный подканал и обмениваться ими, сделать ставку на исход матча @syroamst и @IvanGbi по шахматам на шахматном подканале или взять наших таких миленьких криптокотиков и заставить их махаться до кровавого поноса в подканале «Смертельная битва Криптокотиков». И прикинь Морти, мы всё это можем делать ОД-НО-ВРЕ-МЕН-НО! ОДНОВРЕМЕННО, Морти! В ОДНОМ МЕТА КАНАЛЕ! Ты понимаешь, что внутри мета каналов содержаться безграничные возможности?

Отлично Морти, я вижу у тебя пена из рта пошла, так что я поделюсь с тобой секретом сычуаньского соуса, который заставит все это дерьмо работать. Эфимерные реализации, Морти

Причина почему ты и я можем подключаться к подканалам из мета канала в том, что Bond-менеджер, для любого подканала, может задеплоить контракт-инетрпритатор, управляющий данным каналом, в блокчейн, а затем использовать задеплоиный контракт для разрешения споров, которые могут возникнуть для данного подканала. Так что когда мы присоединяемся к нашему подканалу, мы вообще-то не деплоим контракт-интерпритатор в блокчейн, Морти. Все что мы делаем – это соглашаемся, что в случае возникновения спора, любой из нас сможет задеплоить его.

Разве ты не видишь, Морти? Контракт-инетерпритатор. Он как бы не существует в реальности! Когда мы соглашаемся подключиться к подканалу, мы как бы эфимерно создаем экземпляр его контракта-интерпритатора. Контракт-интерпритатор существует только в нашем мета канале и мы деплоим его только в случае возникновения разногласий, Морти. А если мы с тобой ведем себя как паиньки, то нам и не надо его исполнять. У нас может быть сотни подканалов, но если у нас никогда не будет возникать спорных ситуаций нам вообще не придётся ни один из этих контрактов-интерпритаторов исполнять в блокчейне, Морти!

И шансы что вы никогда не задеплоите интерепритатор в блокчейн офигеть как высоки! Теория игр, Морти! Вероятность задеплоить интерпретатор крайне мала, потому что оба участника знают что конкретно произойдёт, если это всё-таки случится. Как мы точно знаем что случится, если обитатели моей батарейки с микровселенной когда-нибудь сойдут со своих устройств для выработки энергии.

Вернись к примеру апгрейда платежных каналов, Морти! Если ты используешь мета канал, то один из твоих пользователей может просто войти в V0 однонаправленный канал только для Эфира с тобой. Когда юзер захочет "прокачаться" до V1, он просто закрывает канал V0 и открывает V1 и все вне основной цепочки. Твоим юзерам больше не нужно совершать две транзакции, чтобы апгредить каналы, Морти. Больше не нужно тратить газ. Я же говорил, что смогу это, Морти! Эфимерный Рик уделывает всех!!!! ДААА, ДЕТКА!!!

Заключение

Это ещё далеко не конец, ты тупоголовый Морти. Я просто устал и мне надо прилечь. Я обязательно вернусь на следующей неделе со второй частью, чтобы ты узнал ужасающие подробности генерализованных и мета каналов, а также эфимерных реализаций. А пока, проверь этот анонс от Спанкчейна - у них самая прошаренная система платежных каналов в галактике, Морти! И посмотри это видео, которое они выпустили. И этот анализ собственного кода, Морти. Я устал, Морти. Спокойной ночи.

P.S. примечание переводчика.

Я не программист, поэтому, возможно, некоторые термины, из-за отсутствия устоявшихся аналогов, не совсем корректны. Но такой перевод показался мне наиболее близким к сути. Есть вопросы или советы - пиши в личку. Спасибо автору канала @Crypto_eli5 Артёму за консультации. Подписывайся на его канал, если владеешь инглишем хотя бы на уровне ламера.