В первой части мы придумали свою криптовалюту Инфокоин и описали основные принципы ее работы. В этой части мы рассмотрим реально существующую криптовалюту Биткоин и опишем протокол его работы.

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

Вот так, например, выглядит окно клиента Multibit. Слева отображается текущий баланс, а справа — последние совершенные сделки.

multibit01

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

multibit02

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

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

  1. {«hash»:«7c4025…»,
  2. «ver»:1,
  3. «vin_sz»:1,
  4. «vout_sz»:1,
  5. «lock_time»:0,
  6. «size»:224,
  7. «in»:[
  8. {«prev_out»:
  9. {«hash»:«2007ae…»,
  10. «n»:0},
  11. «scriptSig»:«304502… 042b2d…»}],
  12. «out»:[
  13. {«value»:«0.31900000»,
  14. «scriptPubKey»:«OP_DUP OP_HASH160 a7db6f OP_EQUALVERIFY OP_CHECKSIG»}]}

Разберем каждую строчку транзакции

1. Хеш оставшейся части сделки в шестнадцатеричном представлении. Используется в качестве идентификатора транзакции.

2. Версия протокола Биткоин

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

5. Значение lock_time используется для контроля времени завершения транзакции. На сегодняшний день для большинства транзакций это значение устанавливается в 0, что означает, что транзакция немедленно завершена.

6. Размер транзакции в байтах.

7-11. Эти строки определяют биткоины, входящие в транзакцию. В строках 8-10 говорится, что ввод должен взяться из вывода предыдущей транзакции с соответствующей хэш-суммой, выраженной в шестнадцатеричной форме.
n=0 говорит о том, что это первый вывод из этой транзакции. И в 11 строке содержится подпись лица, передающего деньги, за которым после пробела идет открытый ключ, опять же в шестнадцатеричном формате.

Обратите внимание, в транзакции отсутствует точное указание какое количество биткоинов из предыдущей транзакции должны быть потрачены в этой. На самом деле будут потрачены все биткоины от n=0-го вывода предыдущей транзакции. Естественно существует механизм получение сдачи, который основан на транзакциях с несколькими входами и выходами, которые мы рассмотрим чуть позже.

12-14. В этих строках определяется вывод биткоинов из сделки. Строка 13 определяет значение вывода: 0.319 биткоинов. Строка 14 содержит Биткоин-адрес получателя средств в шестнадцатеричном формате.

В первой части мы задали вопрос: “Как формируются серийные номера биткоинов?”. Так вот — роль этого номера выполняет хэш-сумма транзакций. В приведенном выше примере 0.319 BTC берутся из вывода предыдущей транзакции с хэш-суммой 2007ae… (строка 9). Если бы мы разобрали эту транзакцию, то увидели бы, что ее вход берется из более ранней сделки, и так далее.

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

Если мы продолжим путешествие по цепочке блоков в прошлое, то рано или поздно мы наткнемся либо на самую первую транзакцию Биткоин (Genesis block), у которой есть только выход в 50BTC и нет входа, либо на базовую транзакцию (coinbase transaction). За исключением Начального блока, каждый блок операций в цепочке блоков начинается со специальной базовой транзакции, которая является награждением майнера за поддержание работы сети.

Операции с несколькими входами и выходами

Выше мы рассмотрели пример, как выглядит транзакция с одним входом и одним выходом. Но на практике удобнее создавать транзакции с несколькими входами и выходами. Такая транзакция выглядит так:

  1. 1. . {«hash»:«993830…»,
  2. «ver»:1,
  3. «vin_sz»:3,
  4. «vout_sz»:2,
  5. «lock_time»:0,
  6. «size»:552,
  7. «in»:[
  8. {«prev_out»:{
  9. «hash»:«3beabc…»,
  10. «n»:0},
  11. «scriptSig»:«304402… 04c7d2…»},
  12. {«prev_out»:{
  13. «hash»:«fdae9b…»,
  14. «n»:0},
  15. «scriptSig»:«304502… 026e15…»},
  16. {«prev_out»:{
  17. «hash»:«20c86b…»,
  18. «n»:1},
  19. «scriptSig»:«304402… 038a52…»}],
  20. «out»:[
  21. {«value»:«0.01068000»,
  22. «scriptPubKey»:«OP_DUP OP_HASH160 e8c306… OP_EQUALVERIFY OP_CHECKSIG»},
  23. {«value»:«4.00000000»,
  24. «scriptPubKey»:«OP_DUP OP_HASH160 d644e3… OP_EQUALVERIFY OP_CHECKSIG»}]}

1. хэш остальной части транзакции, используемый в качестве идентификатора транзакции

2. версия протокола Биткоин

3-4 определяют, что сделка имеет три входа и два выхода

5. время завершения транзакции.

6. размер сделки в байтах

7-18 список входов транзакции. Каждый вход соответствует выходу из предыдущей транзакции.

первый ввод определяется в строках 8-11.
в частности в строках 8-10 указывается, что вход должен быть взят n=0-го вывода их сделки со значением хэша 3beabc…
Строка 11 содержит подпись и открытый ключ отправителя, разделенные пробелом.

12-15. второй ввод транзакции, аналогичен первому

16-19 третий ввод

20-24 список выходов их транзакции
Первый вывод определяется в строках 21 и 22. Строка 21 определяет сумму вывода 0,01068000BTC. В строке 22 определяется адрес получателя криптовалюты.

23-24 второй вывод транзакции

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

Одно из применений транзакций с множеством входов и выходов является возвращение сдачи. Например, кто-то передает вам 0.15 BTC. Он отправляет вам средства из предыдущей транзакции, в которой получил 0.2 BTC. В этом случае вам отправляется 0.15BTC, а 0.05, которые являются сдачей, уходят в кошелек отправителя. Это немного отличается от сдачи, которую мы получаем в магазине, так как в данном случае сдача организована как плата самому себе.

В завершении хотелось бы отметить несколько важных и спорных моментов.

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

Анонимность биткоин-платежей это миф. На сегодняшний день Биткоин, возможно самый открытый и прозрачный финансовый инструмент в мире.

Можно ли разбогатеть при помощи криптовалюты? Многие люди видят в криптовалюте какое-то волшебное средство легкого и мгновенного обогащения, они считают Биткоин чем-то вроде новой пирамиды типа МММ и продолжают задавать одни и те же вопросы “Куда нести деньги и сколько я получу процентов?”. Такие рассуждения в корне неправильны. Биткоин — не пирамида, не банк и не инвестиционный фонд. Биткоин — это просто платежное средство.

Биткоин - это не пирамида

Биткоин — это не пирамида

 

Сейчас, пока криптовалюта набирает обороты, она подвержена резким колебаниям курса, чем пытаются пользоваться спекулянты. Купить подешевле и продать подороже — хорошая стратегия, но только если вы точно знаете, сколько это «дешево» и «дорого». Многие люди сказочно разбогатели, намайнив или купив биткоины за копейки в самом начале появления криптовалюты, и продав ее в декабре прошлого года по 1200$ за монету. Но задумайтесь — если они продали свою криптовалюту по 1200$, значит кто-то ее купил. Кто-то решил, что 1200$ за один биткоин это хорошая цена и в итоге прилично потерял.

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

Хорошим способом является продажа своих товаров и услуг за криптовалюту. Например, один из крупнейших интернет-ретейлеров Overstock.com позволил своим покупателям расплачиваться криптовалютой. В первый же день нововведения за биткоины было продано товаров на сумму боле 120 тысяч долларов.

Криптовалюта меняет мир. Со временем обычные платежи уйдут в прошлое. Может быть их заменит Биткоин, может что-то другое, с похожей идеей. Но одно можно сказать точно — мир уже не будет таким, как прежде.