Глоссарий / Майнинг и консенсус
Зрелость Coinbase
Другие названия: Правило зрелости Coinbase.
- Что такое зрелость Coinbase?
- Зрелость Coinbase представляет собой правило консенсуса, которое блокирует новые монеты, созданные блоком, еще на 100 блоков, прежде чем какая-либо транзакция сможет их потратить.
Вознаграждения за майнинг не являются деньгами, которые можно потратить в момент нахождения блока. Bitcoin Core задает COINBASE_MATURITY равной 100 в своем заголовочном файле консенсуса, поэтому ожидание составляет 100 блоков, около 16 часов и 40 минут при целевом интервале блока в десять минут. Монеты, которые вы покупаете на бирже, никогда не попадают под это правило, потому что все, что до вас дошло, уже было потрачено хотя бы один раз.
Как это работает
Зрелость Coinbase проверяется каждым полным узлом как сетевое правило, а значит, ни одна настройка, ни один кошелек и ни один пул не может его ослабить.
Сама проверка состоит из одного вычитания. Проверяя транзакцию, узел просматривает каждый вход, и если монета происходит из coinbase-транзакции, он вычитает высоту блока этой монеты из высоты, на которой окажется трата. Если разница меньше 100, Bitcoin Core отклоняет транзакцию с кодом bad-txns-premature-spend-of-coinbase и сообщением, в котором указана глубина, на которой была предпринята попытка. Вознаграждение, выплаченное в блоке 900 000, впервые можно потратить в блоке 900 100, это наименьшая высота, на которой такое вычитание достигает 100.
Задержка существует потому, что выход coinbase является единственным видом монет, который может перестать существовать. Обычные монеты переживают реорганизацию цепи: транзакции, в которых они находятся, возвращаются в пул памяти и снова добываются. Вознаграждение блока существует только потому, что этот блок находится в цепи, поэтому если побеждает конкурирующая ветвь, вознаграждение исчезает, а вместе с ним и все, что от него произошло. Траты, построенные на вознаграждении, которое затем исчезло, обрушили бы каждый кошелек, который к нему прикасался.
Bitcoin Core также контролирует разрыв между блоками. Каждая запись пула памяти помечается в зависимости от того, тратит ли она coinbase, и комментарий в исходном коде объясняет причину: эти записи повторно просматриваются во время реорганизаций, чтобы проверить, что правило 100 блоков по-прежнему соблюдается. Все, что снова стало незрелым, отбрасывается, а не добывается.
Одно свойство этого правила застает людей врасплох. Ожидание считается в блоках, а не в часах, поэтому медленная эпоха сложности его удлиняет, а быстрая сокращает. Биткоин нацелен на один блок каждые 600 секунд, отсюда и 16 часов с 40 минутами, и привычные 144 блока в день, а средний интервал в одиннадцать минут растягивает те же 100 блоков до 18 часов и 20 минут.
Где это видно
Чаще всего зрелость coinbase видна, когда кошелек показывает два баланса вместо одного.
Метод getbalances в Bitcoin Core возвращает поле immature, которое в исходном коде описано как баланс из незрелых выходов coinbase, а getreceivedbyaddress и listunspent обе принимают флаг include_immature_coinbase, который по умолчанию равен false. Кошелек Core на один блок строже консенсуса и держит вознаграждение незрелым, пока блок, выплативший его, не достигнет глубины 101 блока, поэтому майнер, работающий в одиночку, видит разблокировку баланса на один блок позже, чем требует одно сетевое правило.
Панели пулов используют собственные термины, обычно колонку ожидающего или незрелого баланса рядом с подтвержденным. Пул, платящий фиксированную сумму за долю, зачисляет средства своим майнерам задолго до того, как монеты созреют, то есть выдает деньги в счет вознаграждения, которым пока не может распоряжаться, и если этот блок будет заменен, рискует пул, а не майнер.
Правило также задает нижнюю границу того, как быстро добытые монеты попадают на рынок. Майнер, который хочет продать, пережидает 100 блоков, отправляет монеты на биржу, а затем пережидает ее политику пополнения, обычно несколько подтверждений, а не сто.
Зрелость Coinbase vs подтверждение
Зрелость Coinbase представляет собой фиксированную глубину, записанную в консенсусе, тогда как число подтверждений является текущим итогом, порог для которого может выбрать любой.
Биржа, требующая шесть подтверждений перед зачислением пополнения, выбрала это число сама и может изменить его завтра. Правило 100 блоков не является выбором. Оно охватывает только монеты, созданные блоком, применяется одинаково на каждом узле, который проверяет транзакции, а транзакция, нарушающая его, не медленная, а недействительная: ни один майнер не может включить ее, потому что блок, содержащий ее, тоже был бы отклонен.