В Биткойне система учета BTC основана на UTXO (неизрасходованных выходах транзакций), что предотвращает многократное расходование одного и того же BTC. Я слышал, что у Эфириума более простая система баланса счетов, но я не знаю подробностей. Как работает баланс счета Ethereum?
Если у меня есть сообщение, отправляющее 1 ETH от Алисы Бобу, что мешает использовать одно и то же сообщение более одного раза? Существует ли система порядковых номеров (например, TCP)?
Если Алиса сначала подписывает сообщение, отправляющее 1 ETH от Алисы Бобу, а затем подписывает сообщение, отправляющее 1 ETH от Алисы Чарли, может ли второе сообщение быть подтверждено раньше первого?
Каждая учетная запись имеет глобальный доступ , что предотвращает повторные атакиnonce
в той же цепочке и двойные траты. Это порядковый номер, который проверяют майнеры, потому что блок, который имеет транзакцию с неправильным одноразовым номером, является недопустимым блоком (другие майнеры не будут строить поверх него). ( Не защищает от атак с повторным воспроизведением с перекрестной цепочкой.)nonce
nonce
Второе сообщение (с более высоким одноразовым номером) не может быть подтверждено до первого.
См. это для дополнительных деталей, таких как:
глобальное состояние хранит список учетных записей с балансами, кодом и внутренней памятью
транзакция действительна, если на счете-отправителе достаточно остатка для ее оплаты, и в этом случае счет-отправитель дебетуется, а счет-получатель зачисляется на сумму
Я не даю здесь ответа, но я развиваю небольшую дискуссию с @eth, которая имеет отношение к вопросу ОП, и я хотел поделиться тем, что узнал, благодаря @eth и немного почитав.
У меня было неправильное понимание того, что все узлы выполняют код, когда транзакция вызывает этот код, и поэтому предполагалось, что результат выполнения кода затем передается в сеть, собирается и преобразуется в блок.
Этот процесс транзакции, передачи, сбора и майнинга для подтверждения — это то, как работает блокчейн Биткойн, но это не то, как работает блокчейн Эфириума, и это причина, по которой я неправильно понял, почему двойные траты невозможны в блокчейне Эфириума. Механизм не сразу очевиден, поэтому я хотел объяснить его.
В Эфириуме все узлы выполняют код, но особенно это касается узлов майнинга. Каждый узел майнинга определяет транзакции, которые он хочет выполнить, и, выполняя их, одновременно ищет следующий блок.
Это означает, что когда узлу майнинга посчастливится обнаружить следующий блок, он уже выбрал транзакцию, которая выиграла, и не будет выполнять две конкурирующие транзакции с одним и тем же одноразовым номером.
Другими словами, любая заданная комбинация адреса и одноразового номера может быть выполнена только один раз для каждого узла, и если в случае ее выполнения узел успешно находит блок, одноразовый номер будет увеличен. Это приведет к тому, что все другие узлы отклонят конкурирующую транзакцию, потому что глобальный реестр адресов и одноразовых номеров скажет, что одноразовый номер слишком мал, тем самым исключив все попытки двойного расходования.
Я надеюсь, что это поможет другим понять, почему это работает.
Я думаю, что немного опоздал на это, но на этот вопрос уже был дан ответ в следующем вопросе.
Что такое одноразовый номер в Ethereum? Как это предотвращает двойные расходы?
Взглянуть.
Т9б
эт
Т9б
Т9б
эт
Т9б
альмель