Что такое клиент SPV?

Я видел клиента SPV, упомянутого в нескольких местах. Что такое клиент SPV? Как он отличается от стандартного клиента?

60 голосов | спросил kirian 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 01:13:32 +0400 2012, 01:13:32

3 ответа


39

Упрощенная проверка оплаты:

  

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

MultiBit , Биткойный кошелек для Android , и Electrum являются примерами клиентов SPV.

ответил Stephen Gornick 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 03:17:24 +0400 2012, 03:17:24
0

SPV - это упрощенная проверка платежей, и это обычно контрастирует с «запуском полного узла». SPV вокруг с оригинального воплощения биткойна, он был там с самого начала. Это прекрасный способ управлять кошельком.

Сеть биткойнов опирается на определенные «консенсусные правила» для работы. Одно из этих правил заключается в том, что вы не можете тратить что-то, что у вас есть дважды. Когда вы отправляете транзакцию в сеть биткойнов, она в конечном итоге будет записана в блок-цепочку. Полные узлы загружают полную цепочку и проверяют каждую транзакцию в ней, чтобы соответствовать правилам. Это важно и для вас, получая средства, так как он гарантирует, что то, что было потрачено кем-то, отправив его вам, было законно потрачено и предназначено для вас.

Кошелек SPV загружает только определенную часть цепочки блоков, «заголовки блоков». Каждый блок в цепочке блоков указывает на предыдущий блок. Идентификатор, используемый для идентификации блока, является «хэшем» его заголовка. Обнаружение этого хэша часто называют «криптографической головоломкой» или «доказательством проблемы работы», которую должен решить шахтер, чтобы добавить блок в цепочку. Хэш должен соответствовать определенной сложности, которая динамически корректируется в сети. Чтобы убедиться, что вас не обманывают, вам нужно отсканировать самую последнюю историю блочной цепи, чтобы понять, какова текущая трудность, и действительно ли новые блоки, которые вы видите, действительно действительны в соответствии с этой трудностью. Это меньше данных, чем полная цепочка.

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

Кошелек SPV не менее безопасен для конечного пользователя. Он правильно скажет вам, сколько биткойнов вы можете потратить, и действительно ли можно потратить немного биткойнов, которые были отправлены вам надежно (т. е. владеете ли вы им). Моя формулировка может показаться немного странной, потому что технически вы никогда не владеете чем-либо, кроме некоторых криптографических ключей, которые позволяют вам тратить определенные средства, которые были отправлены вам.

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

Подводя итог: если бы не было полных узлов, не было бы биткойн-сети. Но для использования биткойна для отправки /получения средств нет необходимости запускать полный узел. На вашу собственную безопасность не влияет. ИМХО лучше участвовать и тем самым повышать ценность биткойнов как полезность, чем вообще не участвовать. Также лучше использовать свой собственный кошелек, чем, например, веб-кошелек при любом обмене.

Дальнейшие чтения:

ответил scravy 11 J000000Wednesday18 2018, 20:13:44
0

Существенное отличие узла SPV в отличие от полного узла заключается в том, как они оба строят информацию. Допустим, мы хотим узнать о какой-то мнимой транзакции Z (TxZ), которую мы можем сравнить, как получить информацию об этом.

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

У узла SPV нет полной цепочки транзакций, поэтому не может быть уверен, что TxZ не был потрачен (см. SPV двойная трата атаки ). Узел SPV определит связь между TxZ и блоком, который содержит его, используя путь merkle (см. merkle trees ). Этот путь содержится в заголовках блоков, которые узел SPV специально запрашивает у подключенных узлов полного узла, используя getheaders , а затем любую информацию о TxZ, используя getdata .

Теперь узлы SPV используют вероятностные фильтры поиска (см. цветные фильтры ), чтобы запутать желание узла SPV получить конкретную информацию о транзакции, запрашиваемую от нескольких полных узлов, к которым подключен узел SPV.

ответил Britt Kelly 11 J000000Wednesday18 2018, 21:53:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132