Биткойн Вайтпейпер:一种点对点的现金系统

PANews редакция: 31 октября 2008 года Сатоши Накамото опубликовал Вайтпейпер Биткойна, сегодня отмечается 17-я годовщина. Ниже приведён перевод Вайтпейпера от Ли Сяолай, чтобы все могли вновь ознакомиться с классикой.

Резюме: Чисто одноранговая версия электронной денежной системы позволит осуществлять онлайн-платежи напрямую от одного участника к другому без участия финансовых учреждений. Цифровые подписи предоставляют часть решения, но если всё ещё требуется доверенный третий участник для предотвращения двойных расходов, то основное преимущество электронных платежей теряется. Мы предлагаем решение, использующее одноранговую сеть для устранения проблемы двойных расходов. Одноранговая сеть будет отмечать временные метки для каждой Торговли, записывая хеш данных Торговли в постоянно расширяющуюся цепочку доказательства работы на основе хеша, формируя запись, которую невозможно изменить без полного пересчёта. Самая длинная цепочка одновременно доказывает засвидетельствованные события и их последовательность, а также подтверждает, что она создана крупнейшим пулом Мощности Хэша. Пока большинство Мощности Хэша контролируется добросовестными Узлами — то есть, они не сотрудничают с теми, кто пытается атаковать сеть — добросовестные Узлы будут создавать самую длинную цепочку и опережать атакующих по скорости. Сама сеть требует минимальной структуры. Информация распространяется по принципу максимальных усилий, Узлы свободно присоединяются и покидают сеть; однако при присоединении они всегда принимают самую длинную цепочку доказательства работы как доказательство всего, что произошло за время их отсутствия.

1. Введение (Introduction)

Интернет-коммерция почти полностью зависит от финансовых учреждений как доверенных третьих сторон для обработки электронных платежей. Хотя для большинства Торговли эта система работает достаточно хорошо, она всё же страдает от недостатков, присущих модели, основанной на доверии. Абсолютно необратимые Торговли невозможны, поскольку финансовые учреждения не могут избежать арбитража споров. Арбитраж увеличивает стоимость Торговли, ограничивает минимальный возможный размер Торговли и попросту препятствует многим мелким платежам. Кроме того, существует ещё большая стоимость: система не может обеспечить необратимые платежи для необратимых услуг. Возможность отмены создаёт повсеместную потребность в доверии. Продавцы должны остерегаться своих клиентов, вынуждая их предоставлять больше информации, которая была бы не нужна при наличии доверия. Определённый уровень мошенничества считается неизбежным. Эти издержки и неопределённость платежей можно избежать при прямых платежах физической валютой между людьми; однако не существует механизма, позволяющего осуществлять платежи через коммуникационные каналы, если одна из сторон не доверяет другой.

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

2. Торговля (Transactions)

Мы определяем электронную монету как цепочку цифровых Подписей. Когда владелец передаёт монету другому лицу, он добавляет к цепочке цифровых Подписей следующую Подпись: хеш предыдущей Торговли и Открытый ключ нового владельца. Получатель может проверить Подпись, чтобы убедиться в праве собственности на цепочку цифровых Подписей.

Проблема этого пути в том, что получатель не может убедиться, что ни один из предыдущих владельцев не совершил двойную трату. Обычное решение — ввести доверенный централизованный орган, или «монетный двор», который проверяет каждую Торговлю на предмет двойных расходов. После каждой Торговли монета должна возвращаться в монетный двор, который выпускает новую монету. Таким образом, только монеты, выпущенные напрямую монетным двором, считаются надёжными и не потраченными дважды. Проблема этого решения в том, что судьба всей валютной системы зависит от компании, управляющей монетным двором (как банк), и каждая Торговля должна проходить через него.

Нам нужен способ, позволяющий получателю убедиться, что ни один из предыдущих владельцев не подписал какие-либо предыдущие Торговли. Для наших целей засчитывается только самая ранняя Торговля, поэтому нас не волнуют попытки двойной траты после неё. Единственный способ подтвердить отсутствие Торговли — знать обо всех Торговлях. В модели монетного двора он знает все Торговли и может подтвердить их порядок. Чтобы выполнить эту задачу без участия доверенной стороны, записи Торговли должны быть публично объявлены, и нам нужен механизм, позволяющий участникам согласовать единую историю Торговли. Получатель должен доказать, что в момент Торговли большинство Узлов согласились, что она была первой полученной.

3. Сервер временных меток (Timestamp Server)

Наше решение начинается с сервера временных меток. Сервер временных меток работает так: он ставит временную метку на хеш группы записей (блок), а затем транслирует хеш, как это делает газета или сообщение в группе новостей (Usenet)[2-5]. Очевидно, временная метка доказывает, что данные существовали до этого момента, иначе хеш не мог бы быть создан. Каждый временной штамп включает хеш предыдущего, формируя цепочку; каждый новый временной штамп добавляется после предыдущего.

4. Доказательство работы (Proof-of-Work)

Для реализации однорангового распределённого сервера временных меток мы используем систему доказательства работы, подобную Hashcash Адама Бэка, а не газету или сообщения в группе новостей. Доказательство работы — это поиск числа, которое после хеширования (например, с помощью SHA-256) даёт хеш, начинающийся с определённого количества нулей. С увеличением числа требуемых нулей объём работы возрастает экспоненциально, а проверка требует лишь одного хеширования.

В нашей сети временных меток доказательство работы реализуется так: в Блок постоянно добавляется nonce, пока не будет найдено подходящее значение, при котором хеш Блока начинается с заданного количества нулей. Как только результат, полученный затратой Мощности Хэша, удовлетворяет доказательству работы, этот Блок больше нельзя изменить без повторного выполнения всей работы. По мере добавления новых Блоков изменение текущего Блока требует пересчёта всех последующих Блоков.

Доказательство работы также решает вопрос, кто принимает решения от имени большинства. Если бы «большинство» определялось по принципу «один IP — один голос», любой, кто может получить много IP, считался бы большинством. Доказательство работы по сути — «один CPU — один голос». Решения большинства представляются самой длинной цепочкой, поскольку в неё вложено больше всего работы. Если большинство Мощности Хэша контролируется честными Узлами, честная цепочка растёт быстрее всех конкурентов. Чтобы изменить уже созданный Блок, атакующему придётся пересчитать этот Блок и все последующие, а затем догнать и перегнать честных Узлов. Далее показано, почему вероятность того, что отстающий атакующий догонит, экспоненциально снижается с увеличением числа Блоков.

Для учёта роста совокупной Мощности Хэша оборудования и возможных изменений числа Узлов со временем сложность доказательства работы определяется скользящим средним по количеству Блоков, создаваемых в час. Если Блоки создаются слишком быстро, сложность увеличивается.

5. Сеть (Network)

Шаги работы сети:

  1. Все новые Торговли транслируются всем Узлам;
  2. Каждый Узел собирает новые Торговли в Блок;
  3. Каждый Узел начинает искать доказательство работы для этого Блока;
  4. Как только найдено доказательство работы, Узел транслирует Блок всем Узлам;
  5. Другие Узлы принимают Блок только если все Торговли в нём действительны и не потрачены дважды;
  6. Узлы показывают, что приняли Блок, добавляя его хеш как предыдущий хеш при создании следующего Блока.

Узлы всегда считают самой длинной цепочку правильной и продолжают добавлять к ней новые данные. Если два Узла одновременно транслируют разные версии «следующего Блока», некоторые Узлы получат одну версию раньше, другие — другую. В этом случае Узлы продолжают работу с первым полученным Блоком, но сохраняют альтернативную ветвь на случай, если она станет самой длинной. Когда найдено следующее доказательство работы и одна из ветвей становится длиннее, временное расхождение разрешается, и Узлы переключаются на более длинную цепочку.

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

6. Награды (Incentive)

По соглашению первая Торговля в каждом Блоке — особая Торговля, которая создаёт новую монету, принадлежащую создателю Блока. Это стимулирует Узлы поддерживать сеть и обеспечивает способ выпуска монет в обращение — ведь в этой системе нет централизованного органа для выпуска монет. Таким образом, стабильное добавление определённого количества новых монет в обращение похоже на то, как золотодобытчики расходуют ресурсы для добычи золота. В нашей системе расходуемый ресурс — это время работы CPU и потребляемая ими электроэнергия.

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

Механизм наград может стимулировать Узлы к честности. Если жадный атакующий сможет собрать больше Мощности Хэша, чем все честные Узлы вместе, ему придётся выбирать: использовать Мощность Хэша для мошенничества, возвращая себе потраченные деньги, или для создания новых монет? Он должен понять, что действовать по правилам выгоднее: текущие правила позволяют ему получать больше монет, чем всем остальным вместе, что явно лучше, чем тайно разрушать систему и обесценивать свои средства.

7. Освобождение дискового пространства (Reclaiming Disk Space)

Если последняя Торговля монеты произошла достаточно давно, все предыдущие записи о расходах этой монеты можно удалить для экономии дискового пространства. Чтобы сделать это, не нарушая хеш Блока, записи Торговли включаются в дерево Меркла[7,2,5], а в хеш Блока включается только корень дерева. Обрезая ветви, старые Блоки можно сжать. Внутренние хеши сохранять не нужно.

Заголовок Блока без записей Торговли занимает около 80 байт. Если Блок создаётся каждые 10 минут, 80 байт × 6 × 24 × 365 = 4,2 МБ в год. К 2008 году большинство продаваемых компьютеров оснащены 2 ГБ памяти, а по прогнозу закона Мура ежегодно добавляется 1,2 ГБ, так что даже если заголовки Блоков нужно хранить в памяти, это не проблема.

8. Упрощённое подтверждение платежа (Simplified Payment Verification)

Даже не запуская полный Узел сети, можно подтвердить платеж. Пользователь хранит копию заголовков самой длинной цепочки с доказательством работы — он может запросить у онлайн-Узлов подтверждение, что его копия действительно из самой длинной цепочки — а затем получить ветви дерева Меркла, чтобы связать Торговлю с Блоком, в котором она была отмечена временной меткой. Пользователь не может проверить Торговлю самостоятельно, но, связав её с цепочкой, он видит, что Узел сети принял Торговлю, а последующие Блоки подтверждают, что сеть приняла Торговлю.

Пока честные Узлы контролируют сеть, проверка надёжна. Однако если сеть контролируется атакующим, проверка становится ненадёжной. Хотя Узлы могут сами проверять Торговли, если атакующий продолжит контролировать сеть, упрощённая проверка может быть обманута поддельными Торговлями. Одна из стратегий — клиентское ПО должно принимать предупреждения от Узлов. Когда Узлы обнаруживают недействительный Блок, они отправляют предупреждение, всплывающее на ПО пользователя, предлагая скачать полный Блок и проверить Торговлю на согласованность. Продавцы с высокой частотой платежей всё равно должны запускать собственные полные Узлы для независимой безопасности и быстрого подтверждения Торговли.

9. Объединение и разделение стоимости (Combining and Splitting Value)

Хотя можно обрабатывать монеты по одной, создавать отдельную запись для каждого цента неудобно. Для разделения и объединения стоимости записи Торговли содержат несколько входов и выходов. Обычно это либо один вход от крупной предыдущей Торговли, либо несколько входов от мелких сумм; при этом максимум два выхода: один — платеж (получателю), второй — сдача (отправителю), если необходимо.

Стоит отметить, что «разветвление» здесь не проблема — разветвление означает, что одна Торговля зависит от нескольких, а те — от ещё большего числа. Никогда не требуется получать полную независимую историю какой-либо Торговли.

10. Конфиденциальность (Privacy)

Традиционная банковская модель обеспечивает некоторую конфиденциальность, ограничивая доступ к информации о Торговле и доверенной третьей стороне. Потребность в публичности всех записей Торговли исключает этот подход. Однако конфиденциальность можно сохранить, разорвав поток информации в другом месте — через анонимность Открытого ключа. Публично видно, что кто-то перевёл кому-то определённую сумму, но нет информации, указывающей на конкретного человека. Такой уровень раскрытия информации похож на биржевые Торговли: публикуются только время и сумма, но никто не знает, кто были стороны Торговли.

11. Вычисления (Calculations)

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

Соревнование между честной цепочкой и атакующим можно описать как биномиальное случайное блуждание. Успех — когда к честной цепочке добавлен новый Блок, увеличивая её преимущество на 1; неудача — когда к цепочке атакующего добавлен новый Блок, уменьшая преимущество честной цепочки на 1.

Вероятность того, что атакующий догонит, аналогична задаче о банкротстве игрока. Допустим, игрок с бесконечными фишками начинает с долга и может делать неограниченное число ставок, чтобы покрыть долг. Мы можем вычислить вероятность того, что он покроет долг, то есть вероятность того, что атакующий догонит честную цепочку[8], как показано ниже:

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

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

Получатель генерирует новую пару Открытого и закрытого ключей и сообщает Открытый ключ отправителю незадолго до подписания. Это предотвращает ситуацию, когда отправитель заранее готовит цепочку Блоков и, если повезёт, опережает сеть, а затем совершает Торговлю. После отправки средств нечестный отправитель начинает тайно работать над параллельной цепочкой, пытаясь включить обратную Торговлю.

Получатель ждёт, пока Торговля будет включена в Блок и за ней будет добавлен ещё один Блок. Он не знает, как продвигается работа атакующего, но может предположить среднее время создания честных Блоков; прогресс атакующего соответствует распределению Пуассона, с ожидаемым значением:

Чтобы вычислить вероятность того, что атакующий всё ещё может догнать, нужно умножить плотность Пуассона для каждого прогресса атакующего на вероятность догнать с этой точки:

Чтобы избежать суммирования бесконечного ряда плотности…

Переводим в программу на C…

Получая частичные результаты, видно, что вероятность экспоненциально снижается с увеличением Z:

Если P меньше 0,1%…

12. Заключение (Conclusion)

Мы предложили электронную платёжную систему, не требующую доверия; она начинается с обычной схемы монеты с цифровой Подписью, которая обеспечивает надёжный контроль собственности, но не предотвращает двойные расходы. Для решения этой проблемы мы предложили одноранговую сеть с доказательством работы для записи публичной истории Торговли; пока честные Узлы контролируют большинство Мощности Хэша, атакующий не сможет изменить систему только за счёт Мощности Хэша. Надёжность сети обеспечивается её неструктурированной простотой. Узлы могут работать одновременно с минимальной координацией. Им даже не нужно идентифицироваться, поскольку маршруты сообщений не зависят от конкретных Узлов; сообщения распространяются по принципу максимальных усилий. Узлы свободно присоединяются и покидают сеть, при повторном присоединении принимая цепочку доказательства работы как доказательство всего, что произошло за время их отсутствия. Они голосуют своей Мощностью Хэша, добавляя новые действительные Блоки в цепочку и отклоняя недействительные, выражая согласие или несогласие с Торговлями. Любые необходимые правила и награды могут быть реализованы через этот механизм Соглашения.

BTC1.78%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить