Как эффективно определить, действителен ли внутренний адрес в транзакции и имеет ли он требуемый объем данных?

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

Я читал о деревьях Меркеля. Насколько я понимаю, они помогают определить, присутствует ли транзакция в определенном порядке в блоке. Но цепочка блоков будет иметь много блоков. Итак, как майнеры делают это эффективно?

Не будет ли проще создать хеш-карту из биткойн-адреса в сумму?

Ответы (1)

Нет таких вещей, как «внутриадреса» или «от адресов», и это не имеет ничего общего с деревьями меркла или даже с блоками.

Биткойн работает с транзакциями, создающими выходы, и другими транзакциями, расходующими средства из предыдущих выходов транзакций. Каждый выход имеет связанное значение. Когда вы тратите биткойны, вы тратите деньги из предыдущих транзакций. Ваша транзакция будет включать ссылку на вывод, который она тратит: txid и индекс вывода. Поскольку все транзакции (кроме транзакций coinbase — транзакции генерации монет, а не компании) тратятся на вывод предыдущей транзакции, все транзакции связаны друг с другом. Вы можете пройти назад по этой цепочке транзакций, чтобы проверить правильность значений всех транзакций.

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

Спасибо за ваш ответ. Можете ли вы объяснить, как это делается эффективно and makes sure that no other transaction has spent those outputs already. :?
И как он находит биткойн-значение в предыдущих выходных транзакциях (я думаю, это то, что называется внутренними адресами)? Он закодирован в самом адресе? (Я сомневаюсь..)
Значение находится в самом выводе транзакции.
Чтобы гарантировать, что никакая другая транзакция не потратила выходы, потраченные транзакцией, узел поддерживает список всех неизрасходованных выходов транзакции. Он обновляет этот список по мере получения новых транзакций, добавляя созданные выходы и удаляя потраченные. Он может эффективно видеть, был ли уже потрачен выход, проверяя, есть ли он в списке. Если это так, выход не был потрачен. Если его нет, то он был потрачен или транзакция не существует.
Я предполагаю, что это будет хэш-набор ... просто чтобы быть точным, поскольку этот вопрос касается эффективного поиска информации.
В Bitcoin Core он называется набором UTXO и хранится в виде базы данных LevelDB (которая представляет собой несколько перекрывающихся отсортированных списков) и агрессивно кэшируется в ОЗУ в хеш-таблице.