Найти тему
Блокчейн.Экономика

Как на самом деле работает Биткоин?

Оглавление

Биткоин = блокчейн + транзакции.

Эта статья посвящена транзакциям. О том как работает блокчейн вы можете прочитать в этой статье.

Блок на блокчейн состоит из следующих частей:

-2
  • Порядковый номер (Index): #1
  • Хэш предыдущего блока (Previous Hash): 000D1F890FE6A2195BF207F48BE035D621080BBD18776B42CA38C0852BE58AC5
  • Отметка времени (Timestamp): MON, 21 MAY 2018 19:53:20 GMT
  • Данные блока (Data): здесь содержатся транзакции
  • Нонс (Nonce):  12543
  • Хэш блока (Hash): 000F4ED432CB51138BCF09AA5E8A410DD4A1E204EF84BFED1BE16DFBA1B22060

В качестве данных блока (data) в Биткоин содержатся транзакции.

Что такое транзакция?

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

Например, у Пети есть 100 монет (он получил их в качестве награды (reward) за майнинг блока #1).

-3

Он хочет перевести Васе 5 монет и готов заплатить за этот перевод 1 монету (mining fee). Петя использует имеющиеся у него 100 монет, чтобы осуществить данную транзакцию. Он ожидает получить 94 монеты в качестве сдачи.

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

Для реализации данного перевода будут созданы следующие выходы (outputs) транзакции:

-4

Так как полученные Петей 100 монет будут использованы в качестве входа (input) данной транзакции, то их статус изменится на потрачено (spent).

-5

Теперь постараемся разобраться в этом примере.

Типы транзакций

Существует три типа транзакций:

  • Награда (REWARD) — Петя и Дима получили награду за майнинг новых блоков
  • Обычная (REGULAR) — Петя перевел Васе 5 монет и получил 94 монеты в качестве сдачи
  • Плата (FEE) — плата за перевод, которую платит отправитель

Транзакция

Транзакция состоит из четырех частей:

  • Входы (INPUTS) — откуда берется ценность
  • Выходы (OUTPUTS) — куда перемещается ценность
  • Хэш (HASH) — однозначно идентифицирует транзакцию используя входы и выходы
  • Тип (TYPE) — награда, обычная или плата

Выходы

Выход состоит из двух частей:

  • Адрес (ADDRESS) — публичный адрес кошелька куда перемещается ценность
  • Количество (AMOUNT) — сколько монет перемещается

Входы

Вход должен иметь соответствующий ему предыдущий выход. Однако, выход может быть использован только один раз. Когда выход использован он потрачен (spent) и имеет соответствующий статус. Выходы, которые еще не использовались как вход, считаются доступными (unspent) и могут быть потрачены.

Вход состоит из 5 частей:

  • Хэш транзакции (TRANSACTION HASH) — хэш доступного выхода
  • Порядковый номер транзакции (OUTPUT INDEX) — номер доступного выхода
  • Количество (AMOUNT) — количество монет на доступном выходе
  • Адрес (ADDRESS) — адрес доступного выхода
  • Подпись (SIGNATURE) — подписан соответствующим приватным ключом для данного публичного адреса

Транзакция награды (REWARD)

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

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

Тип (TYPE): Награда (REWARD)

Входы (INPUTS): нет

Выходы (OUTPUTS):

  • Адрес (ADDRESS): публичный адрес Пети
  • Количество (AMOUNT): 100

Хэш (HASH): 𝑓(inputs+outputs)

Транзакция обычная (REGULAR)

Обычные транзакции создаются когда одна сторона переводит монеты другой стороне.

Например, Петя использует доступный (unspent) выход транзакции награды в качестве входа транзакции перевода Васе 5 монет. Он определяет плату за майнинг в размере 1 монеты.

Тип (TYPE): Обычная (REGULAR)

Входы (INPUTS):

  • Хэш транзакции (TRANSACTION HASH) — хэш транзакции награды Пети
  • Порядковый номер транзакции (OUTPUT INDEX) — 0 (первый порядковый номер)
  • Количество (AMOUNT) — 100 (количество монет на доступном выходе)
  • Адрес (ADDRESS) — публичный адрес Пети (адрес доступного выхода)
  • Подпись (SIGNATURE) — подписан соответствующим приватным ключом для данного публичного адреса Пети

Выходы (OUTPUTS):

Выход 1 (номер #0)

  • Адрес (ADDRESS): публичный адрес Васи
  • Количество (AMOUNT): 5

Выход 2 (номер #1)

  • Адрес (ADDRESS): публичный адрес Пети
  • Количество (AMOUNT): 94 (100 минус 5 (сумма перевода) и минус 1 (размер платы)

Первый выход — это платеж Васе. Второй выход — это сдача Пете.

Так как выход транзакции награды Пети был использован в качестве входа транзакции перевода Васе, он теперь считается потраченным (spent) и не может быть использован вновь.

Почему просто не просуммировать входы и выходы?
На входе мы имеем 100 монет. На выходе у нас 5+94=99 монет.

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

На входе должно быть больше или столько же монет, как и на выходе. Если количество монет на входе и выходе одинаковое, то плата за майнинг отсутствует.

Транзакция платы (FEE)

Например, Дима осуществил процесс майнинга транзакции перевода монет от Пети к Васе.

Тип (TYPE): Плата (FEE)

Входы (INPUTS): нет

Выходы (OUTPUTS):

  • Адрес (ADDRESS): публичный адрес Димы
  • Количество (AMOUNT): 1 (разница между входами и выходами регулярной транзакции перевода)

Так как Дима осуществил майнинг данной транзакции в новый блок, то помимо платы (fee) он получает и награду (reward) в количество 100 монет.

В блокчейн это выглядит так:

-6

Итоговый баланс

Петя: 94 = 100 (награда за майнинг блока #1) — 5 (платеж Васе) — 1 (плата)
Вася: 5 (платеж от Пети)
Дима: 101 = 100 (награда за майнинг блока #2) + 1 (плата)

Всего в обращении находятся 200 монет: 94 + 5 + 101 = 200

Два блока было добыто и каждый из блоков имел награду 100 монет за добычу (майнинг). Соответственно, должно быть в обращении 200 монет.