Сегодня о Bitcoin не слышал, наверное, только ленивый. Слышать-то слышал, но мало кто задавался вопросом, как он там «внутри» работает. Многие довольствуются теми знаниями, которых хватает, чтобы завести кошелек, получить, отправить криптовалюту на другой или продать ее. Работает – и ладно, а как именно – не важно. Тем не менее, знать это необходимо, так как эта информация может снять множество вопросов и избежать проблем с использованием.
Однажды мы уже рассматривали, что такое биткоин, но не углублялись в детали. В этой статье мы постараемся доступно и подробно расписать, как работает биткоин.
Сеть
Как говорят нам многие источники, Bitcoin — это одноранговая платёжная система (сеть), расчетной единицей операций в которой является одноименная криптовалюта.
Одноранговая сеть — это компьютерная сеть, принципом которой является равноправие всех участников. Каждый узел (peer) или нода, как их еще называют, выполняет функции как клиента, так и сервера. Такая организация позволяет сохранять работоспособность сети при любом количестве и любом сочетании доступных нод (от перестановки мест слагаемых сумма не меняется). Участниками сети являются все пиры, поэтому главной особенностью системы является полная децентрализация: нет какого-либо центрального администратора или сервера. Вместо термина «одноранговая» можно использовать такие определения, как: децентрализованная, пиринговая или p2p (peer-to-peer) сеть.
Blockchain
Основой биткоина, а попутно и «книгой» учета транзакций является упорядоченная последовательность (цепочка) набора данных (блоков), или просто — блокчейн. Каждый блок сети биткоина вмещает до 1 Мб данных, формируется в среднем 10 минут, содержит информацию обо всех транзакциях, помещенных в него и информацию, которая связывает его с предыдущим блоком.
Каждый блок в цепочке криптографически взаимосвязан с предыдущим и последующим. Эта взаимосвязь защищает сеть от подмены или модификации имеющихся блоков в будущем, делая блокчейн неизменным, а транзакции — необратимыми.
Принцип работы
Для более наглядного понимания основ работы сети биткоина представим гипотетического криптоэнтузиаста Тони, у которого установлен биткоин-кошелек с 2-мя BTC на балансе. Что такое биткоин-кошелек мы рассматривали в предыдущей статье.
Наш Тони желает подарить 1 BTC своей подруге Синди, и для этого ему нужен ее уникальный биткоин-адрес кошелька (аналог номера счета в традиционном банке). Этот адрес Тони вносит в соответствующее поле ввода своего кошелька, а в другом указывает сумму перевода — 1 BTC. Затем Тони переходит к выставлению размера комиссии за транзакцию, тут остановимся чуть подробнее.
Транзакции и нагрузка сети
Как и в любой другой платежной системе, в биткоине происходят транзакции, то есть осуществляются перемещение активов от одного клиента к другому. При транзакциях биткоина взимается комиссия, которая отходит в награду майнерам, подтверждающим эти транзакции. Чем выше комиссия и чем ниже нагрузка сети, тем быстрее подтверждаются транзакции.
Под нагрузкой сети подразумевается обобщенное количество участников, отправляющих свои перевод в этот же момент.
По сути, транзакция — это набор информации, которая указывает участникам сети на какое значение уменьшился баланс отправителя, и на какое значение увеличился баланс получателя.
Майнеры
Чтобы транзакция была успешно осуществлена, ее должны подтвердить (валидировать) майнеры. Сейчас, это специализированные организации, которые с помощью мощного вычислительного оборудования (ASIC-фермы) проверяют транзакции на «правильность», собирают эти транзакции в блоки, а блоки последовательно присоединяют друг к другу. На формирование 1 блока алгоритмом сети отводится 10 минут, в течение которых майнеры ежесекундно выполняют однотипную вычислительную работу в поисках одного единственно правильного решения. Это не сложно, это не математическая проблема, но это очень большой объём работы, который тяжело сделать маленькими вычислительными мощностями быстро и эффективно.
За выполненную работу майнеры получают вознаграждение в виде BTC. Это вознаграждение состоит из тех комиссий, которые заплатили пользователи за транзакции и абсолютно новых биткоинов, которые сгенерировала сама сеть в момент, когда из транзакций был собран и подтвержден новый блок. Подробнее о майнерах и генерировании новых биткоинов мы поговорим в отдельной статье.
Комиссии
Вернемся к нашему криптоэнтузиасту… Выставляя размер комиссии за транзакцию, Тони руководствуется тем, что за каждый байт информации он должен заплатить некоторое количество сатоши — дробной части биткоина. Поскольку Тони не знает, какой объем данных займет его транзакция, то решает сэкономить и поставить цену в 1 satoshi за байт.
Для вас, читатели, мы расскажем, как сформируется вес и стоимость транзакции Тони.
Те 2 BTC, который он имеет на балансе, появились в кошельке не просто так. Тони их заработал. 1 BTC в 2017 году, 1 BTC — в 2018. Теперь он хочет отправить половину подруге. В его транзакцию, помимо сведений о количестве монет, будет включена информация об адресах, с которых ему пришли монеты (их называют входы), информация об адресах получателей (их называют выходы) и информация о его собственном адресе.
— Каждый вход, с которого были получены монеты весит ~148 байтов
— Каждый выход, на который уходят монеты — ~34 байта
— Сама транзакция весит ~10 байтов, независимо от количества адресов или суммы перевода.
Считаем: 148*2+34*2+10=374 байта. Теперь мы знаем, что наш «жадный» Тони заплатит за транзакцию 374 satoshi.
Сдача
Вы спросите, а почему мы 34 (вес адреса получателя) умножаем на 2, когда получатель всего один? Дело в том, что когда вы отправляете часть своего баланса кому-либо, то с вашего баланса уходит не часть, а вся сумма, и после валидации, т.е. включения транзакции в блок, остаток (за вычетом комиссия сети) возвращается обратно на ваш кошелек. Поэтому, помимо информации об адресе получателя, в транзакцию включается и информация об адресе отправителя, то есть вашем адресе. Этот возврат называется сдачей. В обозревателях этот момент можно увидеть в следующем виде.
Mempool
Выставив мизерную комиссию в 374 сатоши, Тони подтверждает отправку 1 BTC и ждет, когда майнеры подтвердят эту транзакцию.
Вот только майнеры не спешат её подтверждать, транзакция попадает в мемпул — книгу очереди на подтверждение. Почему? Потому что майнеры хотят зарабатывать, а не просто эксплуатировать свое оборудование, ведь за подтверждение транзакции Тони они получат всего 374 satoshi. Специально для таких очень дешевых транзакций и существует мемпул с его системой сортировки.
В первую очередь майнеры «берут» из мемпула более легкие транзакции и с более высокой комиссией, т.к. подтверждать их выгоднее и в блок их помещается гораздо больше.
Кстати, если отправитель пользуется технологией SegWit, то его исходящие транзакции весят меньше обычных, что также привлекает майнеров.
Но не следует думать, что попав в мемпул, транзакции присваивается какой-то порядковый номер. Нет. Эта очередь динамична, каждую секунду в нее попадает множество транзакций с различной комиссией и весом, поэтому транзакция нашего Тони может ожидать своего подтверждения долго. И, самое главное, пока она будет находиться в мемпуле, Тони не сможет распорядиться сдачей.
Фактически, в такой ситуации балансы отправителя как бы «заморожены». Именно этот механизм защищает сеть от спам-транзакций — ситуаций, когда спамер создает множество дешевых отправок, тем самым перегружая сеть.
Пока транзакция Тони находится в мемпуле, она не считается подтвержденной и не считается зависшей. При этом, находиться в очереди она может достаточно длительное время — до тех пор, пока не подтвердится, либо пока не будет удалена валидирующими нодами из мемпула. По статистике, максимальный период ожидания очереди равен ~3 суткам, но в моменты высокой активности сети этот срок может растянуться на неделю и дольше.
Согласитесь, что скорость переводов в наше время — это одна из приоритетных характеристик в вопросе использования платежных систем, а такие вот очереди не очень приятны, мягко говоря.
Чтобы протолкнуть транзакцию в мемпуле существует много способов. Все они достаточно сложны понимании и осуществлении для рядового пользователя, а некоторые граничат с таким мошенническим способом как «double-spending» (повторная трата). Тем не менее, есть одна замечательная функция, которой может пользоваться любой, о ней и поговорим. Называется она «Замена комиссионных» (Replace-by-Fee или RBF).
Replace-by-fee (RBF)
В настоящий момент не каждый, а тем более мобильный биткоин-кошелек имеет подобный продвинутый функционал.
RBF — это редактирование существующей транзакции, которая находится в мемпуле.
Редактирование означает, что в новой транзакции будут использованы те же входы что и в старой, но при этом будет изменена комиссия. Такая редактированная транзакция не будет считаться «double-spending», так как использование опции Replace-by-Fee позволит этого избежать. Ноды сети bitcoin воспринимают отредактированную транзакцию как старую, и она переносится в очереди мемпула на более привлекательные для майнеров позиции.
Таким образом, если комиссия слишком мала, то увеличить ее — это нормальная практика в случае, если требуется ускорить операцию. Не пренебрегайте функцией RBF и включите ее перед совершением транзакций, это позволит подстраховаться на случай, если перевод задержится в очереди.
Подтверждение
Тони вовремя сообразил, что из-за его жадности Синди может не получить подарок вовсе, поэтому своевременно воспользовался функцией RBF и увеличил комиссию. Транзакция, как и ожидалось, стала более привлекательной для майнеров, и они включили ее в очередной блок — транзакция получила 1 подтверждение. С каждым последующим найденным блоком, эта транзакция будет получать по 1 дополнительному подтверждению. Когда таких подтверждений набирается 6 и более, транзакция считается подтвержденной.
Скорость транзакций
Говоря о скорости переводов, следует понять, что нет четкого значения. Но давайте вычислим ее на основе транзакции Тони и имеющихся у нас данных.
Условие:
- размер одного блока ~1 Мб (1’048’576 байтов);
каждый блок, заполненный транзакциями формируется раз в ~10 минут (600 секунд);
- транзакция нашего Тони имеет вес 374 байта.
Решение:
- 1’048’576 байтов : 374 байта = 2803,6 транзакций в одном десятиминутном блоке.
- 2803,6 транзакций : 600 секунд = 4,6 транзакций в секунду.
Ответ: Каждую секунду майнеры подтверждают ~5 транзакций, подобных транзакции Тони.
Разумеется, все это примерные значения, так как скорость обработки меняется каждую секунду и зависит от многих факторов. Главное, чтобы ваша транзакция была взята из мемпула как можно скорее, и если это произойдет, то ваш перевод дойдет до получателя в пределах 1-600 секунд.
Фактически, после включения транзакции в блок, получатель может не только видеть средства у себя на балансе, но и при определенном условии распоряжаться ими. Быстро, не так ли?
Да, но как же правило про 6 подтверждений? 6 блоков, по 10 минут на каждый, итого — 1 час…
Bitcoin-клиенты
Все дело в программном обеспечении, которым пользуются держатели криптовалюты. Классические Bitcoin-кошельки будут отображать транзакцию как «неподтвержденную» до тех пор, пока она не получит 6 подтверждений (блоков).
Сервисы, которые принимают BTC в качестве оплаты, могут выставлять свои ограничения на количество блоков, нужных для подтверждения (7, 10, 45, 214 …).
BTC, которые генерируются сетью в качестве награды за нахождение блока, можно использовать только через 100 подтверждений, но классические биткоин-кошельки не будут отображать монеты, полученные за нахождение блока, пока не наберется 120 подтверждений.
Цифра «6» была выбрана не случайно. С каждым новым блоком, транзакция становится все менее уязвимой к подмене или изменению. Чтобы сделать что-то с уже подтвержденной транзакцией в блоке, нужно будет «переписать» все последующие блоки, а это требует очень огромных вычислительных мощностей и миллионных капиталовложений. И чем больше подтверждений получит транзакция, тем надежнее она будет защищена.
Но в таком мощном и устойчивом блокчейне, как у биткоина, это, скорее, требование получателя транзакции, а не правило протокола.
Поэтому наши Синди и Тони используют не классический, а очень продвинутый и функциональный биткоин-кошелек. Благодаря активированной в нем функции использования неподтвержденных транзакций, исходящая транзакция Тони, после включения в блок будет тут же отображена на кошельке Синди. При этом Тони сможет сразу распоряжаться сдачей, а Синди — полученным подарком.
Связка «SegWit + RBF + использование неподтвержденных транзакций» позволяет выжать максимум скорости из блокчейна BTC, что немаловажно для некастодиальных сервисов.
Предвидя ваш вопрос, что за биткоин-кошелек используют Тони и Синди, ответим сразу — Trustee Wallet.
Заключение
Биткоин очень сложен и очень технологичен. В одной статье невозможно описать все тонкости и нюансы его работы, но об его основах мы вам все же рассказали. Теперь вы знаете, какие сложные путешествия совершают ваши монеты в пределах всего лишь одной единственной транзакции между двумя кошельками и с какой скоростью. Как и каким способом сеть защищает себя от взломов, спам-атак, мошенничества или необдуманных действий новичков.
Устойчивая работа bitcoin одинаково зависит как от майнеров, так и от обычных пользователей, и чем больше участников будет в сети, тем защищенней и децентрализованней она станет.
В следующей статье мы раскроем детали использования функции RBF в Trustee Wallet, а также покажем на примере как можно ускорять не только исходящие транзакции, но и входящие! Не переключайтесь и следите за нашими новостями и обновлениями!
Если у вас остались вопросы или появились предложения — будем рады видеть их в нашем Telegram чате!
#BTC 2TheMoon!