Почему балансы не в блокчейне?

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

Ответы (3)

Это не сработает, потому что система спроектирована так, что на счетах нет кучи монет, которые можно потратить. Расходуемые монеты существуют в виде выходных данных транзакции, которые еще не использовались в качестве входных данных последующей транзакции. Чтобы сформировать действительную транзакцию, вы должны получить монеты из определенных выходов транзакции, а не из определенных учетных записей.

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

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

Технически вы должны использовать новый адрес для каждой новой входящей транзакции, чтобы защитить свою анонимность. Стандартный клиент также отправляет остаток после перехода на новую пару ключей. Это сделает сумму транзакции синонимом баланса.

Что касается адресов, которые используются более одного раза - это было бы, во-первых, немного расточительно (добавлять дополнительное поле для каждой транзакции), и, кроме того, вам не нужно каждый раз запрашивать все входы для данного адреса. вы отправляете монеты. Иногда вы не хотите запрашивать каждый вход — например, с транзакциями с низким уровнем подтверждения. Скажем, у вас есть транзакция с 10 подтверждениями и транзакция с 1 — если вы хотите убедиться, что ваш перевод пройдет, даже если некоторые блоки будут перезаписаны, вы должны использовать только 10 подтверждений и оставить 1 подтверждение для созревания. Такие операции очень быстро привели бы к нарушению баланса.

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

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

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