Меню Закрыть

Aspx catid palpation bitcoin

Содержание

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

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

Table of content

Introduction

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

А значит, если пройтись по всему блокчейну, то можно посчитать, сколько монет "принадлежит" конкретному адресу.

Inputs & outputs

Реальная транзакция в сети Bitcoin, на самом деле, немного сложнее описанной выше. В действительности, это некоторая громоздкая структура, главными составляющими которой являются входы (inputs) и выходы (outputs).

Inputs — это транзакции, на которые вы "ссылаетесь". Представим, что на ваш адрес X когда-то было отправлено три транзакции:

  • TXN_ID — 123456, VALUE — 40 BTC
  • TXN_ID — 6453795, VALUE — 10 BTC
  • TXN_ID — 888888, VALUE — 100 BTC

Если вам нужно потратить, например, 45 BTC, то вы можете сослаться на транзакцию 888888, или сразу на две транзакции: 123456 и 6453795. При желании вы можете даже сослаться на все три транзакции, правда непонятно зачем.

Outputs — дословно "выходы". Пока что можете считать, что это адреса (хотя это не так), на которые в результате исполнения транзакции будут "отправлены" средства. Выходов также может быть несколько, и каждому из них указывается своя сумма.

На картинке ниже создается новая транзакция C, которая ссылается на два выхода — A и B. В результате на входе у транзакции получается 0.008 BTC, которые потом разделяются на два выхода — на первый адрес отправляется 0.003 BTC, а на второй 0.004 BTC.

Возможность указать сразу несколько выходов — это очень важная фича, потому что транзакцию (а если точнее — ее выход) можно использовать как вход только один раз и только целиком. То есть если у вас есть входящая транзакция на 10 BTC, а вам нужно потратить 8 из них в каком-нибудь Старбаксе, вы просто создаете транзакцию с одним входом и двумя выходами: на 8 BTC в магазин и на 2 BTC обратно на свой адрес. Если же вы создадите транзакцию, в которой сумма выходов меньше суммы входов (как на картинке), то разница отправляется на адрес майнера, записавшего вашу транзакцию в блок.

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

На картинке ниже вы можете видеть фоторобот майнера, которому пришла транзакция с комиссией в 135.000$.

Как только новая транзакция занесена в блокчейн, ее выходы могут быть использованы в качестве входов. Для таких, пока еще непотраченных выходов, существует специальное название — UTXO (unspent transaction output). Как я уже говорил, каждый выход может быть использован в качестве входа только один раз, поэтому на практике интерес представляют именно непотраченные выходы, а уже использованные хранятся скорее как дань безопасности системы.

BTW под UTXO часто подразумевают весь массив непотраченных выходов, хотя воспитанные молодые люди должны писать UTXO pool ну или в крайнем случае UTXO set.

Возвращаясь к началу статьи, теперь вам должно быть понятно, что для подсчета баланса адреса не нужно перебирать весь блокчейн, а достаточно обойтись только перебором UTXO pool, что, очевидно, быстрее.

Structure

Общий вид транзакции описан в официальной спецификации протокола, здесь же я приведу живой пример, взятый из блога Ken Shirriff.

По какой-то загадочной причине, value и previous output hash должны быть представлены в little endian форме, то есть в нашем случае хэш транзакции, на которую мы ссылаемся, вообще-то равен 81 b4 c8 32. , хотя в транзакции он записывается в виде . 32 c8 b4 81. Точно так же сумма транзакции равна 0.00091234 BTC или 0x016462 в hex, но в протоколе она записывается как 62 64 01 00 00 00 00 00.

BTW хэш транзакции считается крайне просто — берете всю транзакцию в виде последовательности байт (в примере выше получается строка вида 010000000148. 00), два раза считаете от нее хэш SHA-256 и представляете результат в little endian форме.

previous output index — ссылаемся не на саму транзакцию, хэш которой указан в previous output hash, а на один из ее выходов. В этом параметре мы и указываем, какой конкретно выход нас интересует, нумерация начинается с нуля. Кстати, в тексте я часто буду говорить именно о "ссылке на транзакцию", но это только ради выразительности языка.

block lock time — этот параметр довольно редко используется на практике. Если он не равен 0 и меньше 500 млн, то это номер блока, начиная с которого данной транзакцией можно воспользоваться в качестве входа. Так как в среднем блоки появляются раз в 10 минут, то несложно прикинуть время, когда транзакция "откроется".

Если lock time больше 500 млн, то он означает UNIX timestamp, начиная с которого транзакция станет доступна. В нашем случае там стоит 0, то есть транзакция доступна сразу.

sequence — эта фича больше не используется, почитать про нее можно здесь.

Параметры со словом script в названии существенно сложнее, о них будет рассказано ниже.

Script

Скорее всего вы уже слышали, что в сети Bitcoin существует механизм, основанный на криптостойких алгоритмах + паре приватный / публичный ключ, позволяющий создать систему, в которой только владелец приватного ключа может воспользоваться монетами, ассоциированными с адресом, полученным из этого ключа. Сейчас я покажу, как это реализуется "под капотом".

Начнем с того, что внутри Bitcoin существует свой собственный язык программирования, названный Script. Вот что о нем пишет Bitcoin wiki:

Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based, and processed from left to right. It is purposefully not Turing-complete, with no loops.

Суть в том, что язык прост как пробка, stack-based и Тьюринг-неполный. Вот пример типичной программы:

Читайте также:  Максимальное значение силы тока в контуре

Каждая инструкция называется opcode — всего их порядка 80, так что язык действительно довольно примитивен. На картинке ниже изображен процесс исполнения программы 2 3 OP_ADD 5 OP_EQUAL :

Lock & unlock transaction

Вернемся к языку чуть позже, а сначала давайте разберемся, зачем он здесь вообще нужен.
Для этого вспоминаем структуру транзакции и два параметра: scriptSig и scriptPubKey. В отличие от других параметров, назначение этих двух вообще не очевидно, и имхо это самое сложное, что есть в Bitcoin.

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

1.000.000$ переходят к Алисе только после того, как ей исполнится 18 лет

В этом случае, сам текст завещания — это некоторое условие, при котором можно воспользоваться деньгами (читай можно воспользоваться транзакцией на 1.000.000$ как входом), а ксерокопия паспорта в 19 лет — это доказательство того, что условие выполнено и самое время получить деньги.

Именно для того, чтобы задать условие, при котором можно будет потратить выход, и для возможности подтвердить то, что условие выполнено и нужен SCRIPT, приватные / публичные ключи и прочие сложности.

В случае Bitcoin, завещание — это locking script, который указывается в транзакции внутри поля pk_script. Его еще часто называют scriptPubKey из-за того, что чаще всего это программа, содержащая публичный ключ или адрес, хотя, вообще говоря, он может не иметь ничего общего с криптографией.

Своего рода "доказательство" того, что условие из locking script выполнено, называется unlocking script, пишется в поле signature script и часто называется scriptSig, догадайтесь почему.

Сам механизм проверки скрипта на валидность очень прост — для этого нужно соединить unlocking script + locking script и запустить получившуюся программу как одно целое. Если после исполнения, сверху стека останется TRUE , то транзакция валидна, и невалидна в любом другом случае.

Multiplication-based script

Скорее всего, вы ничего не поняли, поэтому давайте напишем какой-нибудь максимально простой скрипт, чтобы окончательно во всем разобраться. Идея состоит в том, чтобы заблокировать деньги с помощью какого-нибудь числа, например 370 . Locking script будет выглядеть как OP_MUL 370 OP_EQUAL и для того, чтобы разблокировать транзакцию, нужно будет указать два числа, дающие 370 в произведении.

Для экспериментов со Script воспользуемся онлайн площадкой для запуска и дебага Bitcoin скриптов. В unlocking script запишем например 10 37 . Проверяем:

Pay to Public Key Hash (P2PKH)

P2PKH используется, наверное, в 99 транзакциях из 100, так что стоит понимать, как он работает. Вот его общий вид:

Этот скрипт известен с самого появления Bitcoin и, возможно, придуман самим Сатоши. Именно он выполняет ту задачу, о которой я писал выше: сделать так, чтобы только владелец приватного ключа смог воспользоваться монетами, ассоциированными с адресом, полученным из этого ключа.

На пальцах это выглядит следующим образом: пусть вашему другу B принадлежит приватный ключ P. Он получает из него публичный ключ K, адрес A и сообщает адрес вам. Далее вы отправляете на адрес A 1 BTC и в поле locking script пишите примерно следующее:

Только тот, кто владеет приватным ключом для адреса A, сможет потратить эту транзакцию. В качестве доказательства запишите в unlocking script, во-первых, публичный ключ K, а во-вторых подпись свой транзакции приватным ключом P.

Когда B решит использовать вашу транзакцию в качестве входа, то он создаст свою, например, на 0.5 BTC, а в поле unlocking script вставит подпись своей транзакции приватным ключом P — и сам публичный ключ K


  1. Подпись транзакции добавляется в стек
  2. Публичный ключ добавляется в стек
  3. OP_DUP берет верхний элемент стека и дублирует его, теперь в стеке сверху два публичных ключа
  4. OP_HASH160 заменяет верхний элемент стека на его хэш RIPEMD160(SHA256(x))
  5. В стек добавляется такой же хэш публичного ключа, но уже посчитанный отправителем транзакции. Если вы внимательно читали Bitcoin in a nutshell — Cryptography, то для вас должно быть очевидно, что RIPEMD160(SHA256(public_key)) и адрес — это в принципе одно и то же.
  6. OP_EQUALVERIFY удаляет два верхних элемента стека, и если они не равны, то исполнение программы прерывается с ошибкой
  7. OP_CHECKSIG проверяет подпись на соответствие транзакции. Если все верно, то удаляет подпись, удаляет публичный ключ и добавляет TRUE

P2P storage

Одно из самых интересных свойств Bitcoin, да и технологии блокчейн вообще, — это неизменяемость и гипотетическая "вечность" всего, что туда попадает. Неудивительно, что со временем нашлись люди, захотевшие использовать это в своих целях. И первое, что пришло им в голову — попытаться сохранить в блокчейн какие-нибудь сторонние данные и получить P2P дропбокс.

Я думаю вы уже поняли, как это делается. Берем строку Make America great again и просто записываем ее в locking script. Это все еще будет вполне корректный скрипт, другое дело, что к нему не получится придумать такой unlocking script, чтобы разблокировать средства. Но если вы отправите на выход с таким сриптом, условно говоря, 0.0000001 BTC, то в принципе и не жалко. Единственное ограничение — это размер вашей транзакции. Считайте, что она не может быть больше 100 КБ, хотя в реальности там все немного сложнее, можете почитать здесь.

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

Для того, чтобы достичь компромиса, был добавлен OP_RETURN , который позволяет "легально" хранить в блокчейне до 40 байт данных.

OP_RETURN is a script opcode used to mark a transaction output as invalid. Since the data after OP_RETURN are irrelevant to Bitcoin payments, arbitrary data can be added into the output after an OP_RETURN — Bitcoin wiki

Вот так выглядит простейший locking script с его участием: OP_RETURN . Что примечательно, выход с таким скриптом приобретает статус provably unspendable, то есть доказуемо непотрачиваемый. Из-за этого он даже не попадает в UTXO pool, тем самым экономя драгоценное место. Остальные причины использовать OP_RETURN вместо вы можете найти здесь.

Спойлер — их нет, если вы конечно не убежденный альтруист.

CoinPot — кошелек для сбора криптовалют и токена с кранов, сервис обмена и майнинга криптовалюты

Что такое CoinPot?

CoinPot — микрокошелек, служащий для добычи и объединения выплат с разнообразных криптовалютных кранов, в числе которых вся линейка «лунных» ресурсов: MoonBitcoin , MoonDogecoin , MoonLitecoin , MoonDash , MoonBitcoinCash , а также BonusBitcoin и BitFun .

В сервисе КоинПот есть возможность зарабатывать на майнинге пяти видов криптовалют и CoinPot Tokens (внутренние монеты сервиса).

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

Регистрация, вход и привязка кранов к кошельку CoinPot

Для регистрации кошелька CoinPot на главной странице выбираем пункт Register. В появившейся форме указываем свои данные:

Читайте также:  Dir 615 настроить как репитер

После чего переходите по ссылке из пришедшего письма и можете смело начинать работу с этим сервисом.

Если же Вы уже зарабатывали на каких-либо кранах, завязанных на этот микрокошелек, то, в принципе, аккаунт для Вашего почтового ящика уже создан. Только при условии, что именно по этой почте Вы на них регистрировались. В таком случае на главной странице сайта необходимо будет выбрать пункт Sign in и сбросить пароль. Опять же указываете свой email и получаете на почту новый (позже его можно будет изменить на свое значение). Система Вас распознает — если можно так выразиться. Останется только прилинковать все адреса к единому аккаунту. Теперь все заработанные сатоши по каждой криптовалюте будут отражаться в одном месте:

Регистрируйте аккаунт в CoinPot и аккаунты во всех криптовалютных кранах приведенных ниже на один и тот же почтовый ящик. Тогда привязка ваших аккаунтов в кранах к аккаунту в КоинПоте произойдет автоматически.

Кранов с выводом на CoinPot несколько, но они достойны внимания, как надежные и удобные для пользования. Линейку кранов с выводом на КоинПот часто называют «Лунные краны», так как большинство из них в названии домена и сайта имеет слово «moon».

Список кранов, с которых осуществляется сбор заработанных средств через кошелек CoinPot:

Что такое CoinPot Tokens и как их заработать?

CoinPot Tokens – внутренний актив сервиса. Токены автоматически начисляются за каждый сбор на криптовалютных кранах (краны с выплатой на CoinPot) в размере 3 токена + 1 за сбор реферала.

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

На что можно потратить CoinPot Tokens?

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

Купить лотерейные билеты CoinPot.

В перспективе сервис ориентирован на то, чтобы вы могли использовать ваши токены CoinPot в будущем, в том числе возможность обменять их на подарки, подарочные карты и другие игры, такие как лотерея!

Как обменивать и выводить криптовалюту из CoinPot?

Для того, чтобы поизвести обмен выберите в левом меню ту валюту, которую Вы желаете обменять (например Litecoin):

Далее нажимаете Convert litecoin и в появившемся окне выбираете перевести в Dogecoin, ниже указываете сумму Litecoin, которую Вы намерены обменять, вводите пароль от кошелька и нажимаете Convert (конвертировать). После чего монеты Dogecoin моментально будут зачислены на баланс кошелька.

Аналогичным образом происходит обмен остальных криптовалют, включая CoinPot Tokens, в сервисе CoinPot.

Вывод криптовалюты с кошелька CoinPot осуществляется подобным образом, но с некоторыми дополнениями, на которые следует особо обратить внимание. А именно.

В левом меню выберите криптовалюту для вывода (например Dogecoin). Далее нажмаете Withdraw dogecoin и в открывшемся окне выбираете кошелек, на который будет произведена выплата. Еще ниже заполняете соответствующие поля, в которых указываете адрес кошелька, сумму для вывода и пароль от кошелька CoinPot. Проходите антибот (рекапча) и нажимаете Withdraw.

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

При выводе криптовалюты с CoinPot, обязательно обращайте внимание на комиссионные сборы и на требования к минимальным суммам зачисления (депозита) на том кошельке, в который Вы совершаете перевод. Если средств будет меньше чем минимальные суммы депозита, криптовалюта не дойдет и Вы можете потерять заработанные средства.

Куда выводить криптовалюты с кошелька CoinPot?

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

В связи с чем, наиболее благоразумным будет вывести криптовалюту с кошелька CoinPot в сервисы и проекты, предоставляющие нам возможность приумножения собранных с кранов среств или обмена на фиатную валюту.

В качестве примера рассмотрим несколько таких вариантов.

Биржа LiveCoin

Выводим сатоши Bitcoin (на момент написания статьи минмальная сумма на вывод с CoinPot – 0.0001 BTC) на биржу LiveCoin , где минимальная сумма сделки также составляет 10 000 сатоши. На бирже в разделе торговля выбираем валютную пару Minexcoin/Bitcoin (MNX/BTC) и используя форму КУПИТЬ MNX ЗА BTC покупаем криптовалюту Minexcoin. Замечу сразу, что эта биржа предоставляет возможность продать сатоши за рубли, доллары и евро. И вывести эту фиатную валюту на популярные платежные системы (Payeer, Advcash, Qiwi, Perfect Money).

На официальном сайте Minexcoin скачиваем и устанавливаем на ПК или ноутбук кошелек Minexcoin, после чего проходим регистрацию в сервисе MinexBank , тем самым мы связываем и синхронизируем свой кошелек с данным сервисом. Таким образом, адрес кошелька с меткой MyMinexBank и адрес монеты в самом сервисе MinexBank будут идентичными. Если Вы пополните свой кошелек по указанному адресу, то зачисленная сумма (депозит) автоматически отразится на Вашем балансе в онлайн-сервисе MinexBank.

Мы подошли к главному вопросу, для чего производить все эти замысловатые операции? Ответ: естественно для извлечения прибыли!

Заходим в сервис MinexBank и на панели управления выбираем раздел settings, где в первой сверху строчке копируем адрес minexcoin. Также этот адрес можно скопировать в самом кошельке во вкладках file-receiving addresses-MyMinexBank. Переходим на биржу Livecoin, открываем раздел баланс, из списка монет выбираем minexcoin и кликаем вывод. В открывшемся окне заполняем два поля, указываем сумму перевода, вставляем ранее скопированный адрес minexcoin и нажимаем отправить платеж. В следующем окне подтверждаем перевод, в первом поле вводим код из письма, которое придет на электронную почту, указанную при регистрации на бирже, и во втором поле вводим пин-код, также созданный при регистрации на бирже. Исходя из моего опыта, перевод осуществляется в течение нескольких минут.

Когда монеты (точнее доли монет-minextoshis, если сумма менее одной монеты) minexcoin будут зачислены на баланс MinexBank, сразу же открывается возможность сделать инвестицию (вклад под проценты) в рамках представленных четырех инвестиционных планов.

Как видно из скриншота я каждый день всю сумму minextoshis на моем балансе инвестирую по тарифному плану 0.24% в день, что на данный момент дает мне прибыль в размере 0,00199042 MNX. Каждый день эта сумма увеличивается и в перспективе она может достичь значительного показателя, при условии что монета Minexcion укрепит свои позиции на рынке криптовалют и вырастет в цене. По данным популярного сервиса CoinMarketCap в настоящий момент ее цена составляет 19,49 USD или 0,00288532 BTC при ее рыночной капитализации 70 123 674 USD.

Облачный майнинг EOBOT

Сервис EOBOT дает нам возможность добычи (майнинга) 20-ти видов криптовалют, включая Bitcoin, Dogecoin, Litecoi, Ethereum, Dash и др., а также доллары США. Сам процесс майнинга начинается с приобретения так называемого облака мощности, где 1 единица облака SHA-256 соответствует 1.0 GHS мощности SHA-256.

Читайте также:  Htc one mini 2 lte

Но поскольку на данном проекте низкие минимальные суммы депозитов, к примеру 0,0001 BTC, 0,0001 DASH, 1 DOGE, постольку пользуясь этим преимуществом, можно выводить накопленную на CoinPot криптовалюту в указанный сервис, где практически на любое количество монет (например1 DOGE, или скажем 10 сатоши Bitcoin) приобретать облако мощности и по своему выбору добывать одну или несколько криптовалют. При этом EOBOT предоставляет своим пользователям также возможность майнинга самого облака мощности, то есть его увеличения, а следовательно, ускорения процесса добычи криптовалюты. Чем больше покупается единиц облака, тем быстрее идет процесс майнинга криптовалюты и самого облака. В дополнение замечу, что на сервисе EOBOT также имеется кран, на котором можно по Вашему выбору раз в сутки собирать одну из криптовалют, USD или определенное количество облака мощности.

UTXO расшифровывается как Unspent Transaction (TX) Output. Фактически, это означает количество оставшейся криптовалютной «мелочи», которую вы получаете в качестве сдачи с каждой транзакции. Не так давно мы разбирали что такое «селекция монет», но решили более детально рассмотреть этот момент. Для более подробного объяснения придется сначала рассмотреть, как происходит типичная крипто транзакция. Используем в качестве примера Bitcoin, так как это самая популярная криптовалюта, использующая UTXO.

Пример UTXO транзакции

Когда вы проверяете свой кошелек Bitcoin, вы видите свой баланс. Для примера давайте предположим, что у вас 100 Биткоинов. Хотя вы видите только сумму на счете, ваш баланс состоит из нескольких UTXO. У вас может быть четыре UTXO по 25 BTC, два UTXO по 50 или, например, сет UTXO из 37, 18, 40 и 5 Биткоинов. Стоимость каждого UTXO не имеет значения, но их сумма в нашем случае всегда будет составлять 100 BTC.

Продолжая наш пример, давайте предположим, что мы отправились покупать новый автомобиль. Отбросив стереотипный вариант Lamborghini, вы останавливаете свой выбор на Porche за 35 Биткоинов. Однако в вашем кошельке есть UTXO ценностью только в 15, 17, 28 и 40 BTC и нет «купюры» номиналом в 35 Биткоинов. UTXO невозможно разделить, поэтому вы просто не сможете отдать ровно 35 Биткоинов.

Вместо этого вы отдадите 40 BTC, на месте которых сеть создаст два новых UTXO ценностью в 35 и 5 Bitcoin. Автодилер получит 35 BTC, а вы получите свою сдачу в размере 5 BTC.

Также вы можете потратить свои UTXO в 17 и 28 Биткоинов, получив в качестве сдачи 10 Биткоинов. Транзакция может использовать любую комбинацию UTXO и у вас нет возможности повлиять на ее выбор.

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

А что насчет комиссии за транзакцию?

Комиссия также включается в транзакцию и вычитается из получаемого в качестве сдачи UTXO. Уравнение выглядит примерно так:

Новое UTXO = (сумма UTXO в транзакции) – (значение транзакции) – (комиссия за транзакцию)

Добавим в наш недавний пример комиссию в один Bitcoin:

Новое UTXO = (17+28) – (35) – (1) = 9 BTC

Важность UTXO и потенциальные проблемы

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

Таким образом, каждый коин в экосистеме Bitcoin может быть потрачен только единожды. Биткоины, в данный момент находящиеся на кошельках, еще не были использованы по двум причинам:

  1. Либо это Bitcoin, полученный майнером в качестве вознаграждения
  2. Либо это созданный во время транзакции Bitcoin

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

Потенциальные проблемы с хранением

Ноды хранят базу данных UTXO в RAM, поэтому важно соблюдать разумный объем данных. По мере того, как он растет, стоимость работы заполненной ноды тоже увеличивается. Если обслуживание заполненной ноды станет слишком дорогим, мы будем наблюдать дальнейшую централизацию сети Bitcoin в руках более состоятельного меньшинства, которое сможет себе позволить использовать эти ноды.

Риск централизации – один из главных аргументов против увеличения размера блока Bitcoin. Разработчик Bitcoin Гевин Андерсен хорошо описал это в своей статье «UTXO uh-oh…»:

«Один мегабайтовый блок содержит около 100 млн 500-байтовых транзакций в год. Если каждый блок увеличит UTXO на 500 байт, это прибавит около 50 гигабайт в год».

Размер блока в один мегабайт ограничивает верхний лимит, до которого каждый год может расти база данных UTXO. Гевин продолжил:

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

Дабы не вырывать из контекста слова Андерсена, стоит отметить: в своей статье он выступает все-таки за увеличение размера блока. Он утверждает, что влияние объема UTXO не такое существенное, как считают многие. А учитывая сложность масштабирования второго уровня, необходимо ввести увеличенные блоки в ближайшее время, пока эти решения еще будут актуальны в долгосрочной перспективе.

Решения

К счастью, существует несколько решений потенциальной проблемы с хранением. Во-первых, нодам не надо хранить всю базу данных UTXO в RAM. Часть данных можно хранить на более дешевом диске HDD или SSD. Хотя это замедлит время валидации каждой ноды, особых проблем не возникнет, если это время будет составлять меньше 10 минут.

Вдобавок, разработчики Bitcoin постоянно улучшают механизмы транзакций, для оптимизации базы данных UTXO.

Наконец, Segregated Witness (Segwit) и похожие решения масштабирования косвенно замедляют рост базы данных UTXO. Следующая информация взята напрямик из документации Bitcoin Core:

«Segwit улучшает ситуацию за счет создания подписных данных, которые не влияют на объем UTXO, и стоят на 75% меньше. Это, в свою очередь, побуждает пользователей отдавать предпочтение транзакциям, минимизирующим влияние на UTXO из-за меньшей комиссии на них. А разработчиков это заставляет работать над смарт-контрактами и новыми функциями, которые бы дальше минимизировали влияние на UTXO».

Заключение: альтернативы UTXO

Мы постоянно использовали Bitcoin в нашем сегодняшнем примере, однако существует немало других использующих UTXO криптовалют типа Bitcoin Cash, Litecoin, Komodo и тому подобных коинов.

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

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

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

Для торговли на рынке криптовалют Хриплый Биток рекомендует биржу Exmo!

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.