The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Биткойн был большой технической загадкой для меня. Все статьи, которые я читал о нем, звучали чрезвычайно сложно и совершенно неперевариваемо. Пока я не застрял с задачей: мне нужно было интегрировать Zold, наш экспериментальный неблокчейн криптовалюты, с биткойном. Мне пришлось изучить архитектуру биткойна, и я нашел этот короткий и простой видеоролик (я настоятельно рекомендую вам его посмотреть). Мне удалось реализовать интеграцию и понять, как работает блокчейн. Вот мое краткое резюме. Надеюсь, оно будет полезным.
Во-первых, есть личный ключ, который является коротким текстовым фрагментом, например:
Как я его сгенерировал? Это случайно. Вы тоже можете сгенерировать его. Установите Sibit, мою Ruby-библиотеку, и запустите следующую команду (это инструмент командной строки):
Каждый раз, когда вы вызываете sibit generate
, вы получаете новый приватный ключ. Это просто случайный текст (ну, большое шестнадцатеричное число). Затем вы создаете адрес на основе своего приватного ключа. У каждого приватного ключа есть ровно один адрес. Вот как его создать:
Вы передаете его кому-то, кто хочет отправить вам платеж. Транзакция в Bitcoin - это не то, о чем вы привыкли думать, когда представляете себе банковскую транзакцию. У транзакции Bitcoin есть несколько адресов входа и выхода. Скажем, три входа по 10 BTC каждый и два выхода по 25 BTC и 5 BTC. Сумма всех входов должна быть равна сумме всех выходов.
Таким образом, в одной транзакции вы можете перемещать много цифровых денег между адресами. Вы можете взять сто входных адресов и отправить их на другие сто выходных адресов. Это меня немного удивило, когда я обнаружил это. Транзакции могут быть достаточно большими по размеру. И размеры имеют значение. Они рассчитываются в байтах. Транзакция с одним входом и одним выходом будет занимать примерно 220 байт. Запомните это число, мы скоро к нему вернемся.
Как вы уже можете представить, чтобы рассчитать, сколько денег у вас на вашем адресе, вам просто нужно пройти через все транзакции во всей базе данных (их уже более 400 миллионов) и посмотреть, сколько транзакций имели ваш адрес в качестве своих выходов (ваши входы). Затем вы вычитаете любые транзакции, которые были вашими выходами и входами других людей. Вы получаете баланс. Есть много публичных и бесплатных веб-сервисов, которые могут сделать эту работу за вас. Вам не нужно искать всю базу данных самостоятельно, просто используйте Blockchain API (например), и они предоставят вам информацию о любом адресе Bitcoin. Попробуйте, например, этот адрес:
Это в сатоши, что составляет 0,2 BTC. Нажмите здесь и вы увидите входы и выходы этого адреса. Здесь упоминается только одна транзакция. В этой транзакции был один вход и два выхода. Один из выходов принадлежит мне. Я получил 0,2 биткоина, и они все еще находятся здесь, так как нет транзакций, которые бы их переместили куда-либо еще.
Таким образом, в двух словах, база данных Blockchain - это большой список транзакций с входами и выходами в каждой из них. Как только новая транзакция попадает в эту базу данных, баланс нескольких адресов меняется. База данных только растет, и никакие предыдущие транзакции не могут быть удалены или изменены. Так что, как только ваша транзакция попадает в базу данных, деньги перемещаются из адреса в адрес.
Для создания транзакции вам нужно знать все входные адреса, их приватные ключи и все выходные адреса. Если вы хотите отправить сумму, большую, чем у вас есть на одном адресе, вам нужно несколько входов. В Bitcoin существует так называемый кошелек, который является программным обеспечением, например, Electrum, которое отслеживает все ваши адреса и знает, как создавать транзакции, сочетая несколько адресов и используя их в качестве входов. Вот и все.
Итак, вы знаете входы, указываете выходы и ожидается, что останется небольшая непотраченная сумма. Допустим, у вас есть 10 000 сатоши на входах, и вы указываете выход на 8 000. Вы оставляете непотраченные 2 000. Они называются комиссией майнера. Вы отправляете свою транзакцию всем узлам Bitcoin, они помещают ее в свой пул памяти и пытаются объединить несколько тысяч транзакций в блок. Они все пытаются вместе, и только один из них справляется с этим, примерно раз в десять минут. Как только победитель решает блок, он получает те 2 000, которые вы оставили нетронутыми в своей транзакции. Каждая транзакция в блоке платит победителю небольшую комиссию.
Возможно ли заплатить ничего? Да. Однако, чем меньше комиссию вы оставляете в своей транзакции, тем меньше шансов, что ваша транзакция попадет в следующий блок. Каждый майнер хочет извлечь максимум из каждого блока и помещает наиболее “щедрые” транзакции в блок, пытаясь майнить его.
Комиссия зависит от размера транзакции в байтах. Поскольку любая транзакция может включать множество входов и выходов, ее размер - это единственное, что имеет значение. Например, комиссия, которую я заплатил в этой транзакции, составляла 8 971 сатоши, что примерно 40 сатоши за байт, так как моя транзакция включала 225 байт.
Чтобы отправить свою транзакцию всем узлам Bitcoin, у вас есть два варианта. Первый - создать собственный полный узел, который будет взаимодействовать с другими узлами через протокол Bitcoin. Второй вариант - использовать один из HTTP-ретрансляторов, где вы просто отправляете свою транзакцию в POST-запросе HTTP, и ретранслятор отправляет ее всем узлам Bitcoin; вот один из них.
Sibit автоматизирует этот процесс. Вы просто говорите:
Здесь первый аргумент - это сумма, которую вы отправляете. Второй - это комиссия, которую вы хотите оставить без изменений. Я сделал это проще для вас, чтобы помочь вам избежать расчетов. Просто скажите S
, M
, L
или XL
, и комиссия будет рассчитана примерно верно. Третий аргумент - это список адресов и их приватных ключей, разделенных двоеточием. Четвертый аргумент - это целевой адрес (с помощью Sibit можно отправить только на один адрес). Последний аргумент - это адрес, на который будет отправлен остаток.
Если у вас есть 50 000 сатоши на ваших входах, и вы хотите отправить 15 000 сатоши другу, вам нужно найти место, куда будет отправлено остальное - ну, минус комиссия майнера. Просто укажите свой собственный адрес, и сдача придет туда.
Это практически все, что вам нужно знать о Bitcoin и Blockchain, чтобы использовать его. Что я упустил?
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 04:48