Что такое Libbitcoin и SX и почему они имеют значение

Амира Тааки libbitcoin стал одной из самых передовых альтернативных реализаций протокола Биткойн. Хотя сейчас на рынке существуют десятки альтернативных реализаций, libbitcoin – одна из немногих, реализующих полный стандарт Биткойн, позволяя пользователям запускать детерминированный кошелек, ан интерфейс подписи сообщений эллиптической кривой и, конечно же, полностью функциональный узел Биткойн. Даже транзакции с несколькими подписями, которые многие популярные кошельки, включая blockchain.info и Bitcoin Wallet для Android, по-прежнему не поддерживают, libbitcoin обрабатывает отлично. Libbitcoin также уникален по своей модульности; сам пакет представляет собой программную библиотеку, содержащую набор компонентов, каждый из которых может быть программно вызван индивидуально, что позволяет избежать необходимости запускать полноценный монолитный программный демон только для выполнения нескольких простых транзакций или запросов. Если вы хотите, чтобы полный клиент работал локально, вы можете использовать для этого libbitcoin, но вы также можете легко использовать libbitcoin только для управления транзакциями и сети и полагаться на другие узлы для данных транзакций. Все, что вам нужно, вы используете, и все, что вам не нужно, просто не беспокойтесь о.

В качестве первого крупного практического применения libbitcoin Амир Тааки недавно выпустил sx, набор утилит командной строки для работы с биткойн-ключами и транзакциями. Основная цель проста: дать возможность пользователям Биткойн, обладающим некоторой технической квалификацией, но не опытным программистам, взаимодействовать с Биткойн не только как с интерфейсом, в котором они вводят сумму и адрес назначения, а биткойн делает все за них, но и работает напрямую. с лежащими в основе строительными блоками. Каждый инструмент sx следует философии Unix: он делает одно, и делает это хорошо. Genaddr

принимает начальное значение кошелька Electrum или главный открытый ключ и индекс и возвращает адрес.

mktx

создает неподписанные транзакции и

знак-ввод

подписывает вводы транзакций.

история

возвращает список неизрасходованных транзакций, связанных с биткойн-адресом, который можно использовать в качестве входных данных – и так далее..

Доступ к этим инструментам можно получить из командной строки для пошагового построения транзакций Биткойн, или их можно вызвать программно (например, с помощью os.popen (command) .read ()

в Python) для создания программного обеспечения Биткойн, такого как торговые пакеты и кошельки. До сих пор создание нового биткойн-кошелька было трудным – нужно было либо заново реализовать все с нуля, взять существующий кошелек и усердно работать, чтобы распутать код, чтобы отделить логику транзакции от логики кошелька, либо полагаться на Узел bitcoind работает в фоновом режиме. Однако с libbitcoin и sx инструменты для работы с биткойн-транзакциями на самом низком уровне уже есть, что позволяет разработчикам работать над проблемами, которые действительно требуют больше всего работы, например, оптимизация безопасности и взаимодействия с пользователем..

Больше, чем просто библиотека

Так почему же так важны libbitcoin и SX? Как оказалось, ответ выходит далеко за рамки простого факта, что они удобны. Одна из основных проблем экосистемы Биткойн заключается в том, что, хотя Биткойн номинально децентрализован, на самом деле все майнеры, поддерживающие работу сети, используют одно и то же основное программное обеспечение Биткойн: биткойн. Bitcoind – это «безголовая» (т.е. только из командной строки) версия исходного клиента Биткойн, который был разработан с тех пор, как Сатоши выпустил первую версию в 2009 году, и служит программным обеспечением, которое все майнеры и почти все предприятия используют для связи с Биткойн сеть.

Это вредно для здоровья по двум причинам. Во-первых, наличие монополии может потенциально привести к очень разрушительным разветвлениям блокчейна; например, в марте этого года устранение ошибки базы данных, не позволяющей узлам bitcoind обрабатывать блок, одновременно влияя на статус более 5000 транзакций, привело к тому, что сеть Биткойн разделилась пополам примерно на шесть часов, поскольку узлы с ошибкой и без нее не согласились с действительностью блока и начали работать над двумя отдельными блокчейнами. Исправление: сообщество Биткойн объединилось и согласилось закрыть узлы версии 0.8 и добавило ошибку базы данных в официальный протокол на два месяца, пока ее не удастся удалить контролируемым образом через два месяца. Если бы вместо этого было пять различных реализаций Биткойн в активном и широком использовании, отказ любой из них затронул бы только небольшую часть сети Биткойн – и клиенты обычных пользователей, которые обычно только проверяют транзакции, а не блоки, вероятно, не пострадали бы. вообще, поскольку в случае форка «законный» блокчейн почти всегда будет управлять большей частью сети..

Вторая причина – политическая. Многие основные разработчики биткойнов, в частности ведущий разработчик Гэвин Андресен, также являются частью Bitcoin Foundation, организации, которая предприняла четкие шаги в направлении использования политического лоббирования в качестве стратегии защиты биткойнов. Есть опасения, что в будущем правительство может попытаться больше регулировать Биткойн и предъявить фундаменту ультиматум: вы включите определенные функции, нарушающие конфиденциальность (умеренным примером может быть «плата за проверку адреса», чтобы люди не скрывали свои отслеживает, создавая множество адресов биткойнов) в протоколе, или мы запрещаем обмен биткойнами. Фонд вполне может подчиниться, и правительство США знает об этом. Однако, если бы у Фонда не было полномочий вносить такие изменения в протокол без широкого международного согласия, то у правительства США не было бы такой возможности – они были бы вынуждены либо попытаться полностью запретить Биткойн, ценою огромного добрая воля среди технологического сообщества и сообщества разработчиков ПО с открытым исходным кодом, по крайней мере, или пусть будет так и сосредоточится на более мягких регуляторных стратегиях. Вот почему сторонники Биткойна, такие как Амир Тааки, Йорг Платцер и другие, уже давно поддерживают диверсификацию и интернационализацию экосистемы Биткойн. И libbitcoin может стать катализатором, который наконец запускает процесс..

Как вы используете SX?

Установить sx очень просто, если вы работаете в Linux; в командной строке wget http://sx.dyne.org/install-sx.sh

с последующим

sudo bash./install-sx.sh

это все, что нужно. Если вы работаете на Windows или Mac, все несколько сложнее, хотя и не более, чем в любом другом аналогичном программном пакете; исходный код доступен для загрузки по адресу https://github.com/genjix/sx, и оттуда вы можете установить его вручную.

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

Сгенерируйте тройку закрытый ключ / открытый ключ / адрес:

sx newkey > pk1cat pk1 | sx pubkey > pub1cat pk1 | sx адрес > addr1cat pk1 pub1 addr1

Сгенерируйте пары закрытый ключ / адрес из кошелька Electrum:

sx newseed > seedfor x в seq 0 9; делать кошачье семя | sx genpriv $ x; кошачье семя | sx genaddr $ x; сделано

Сгенерируйте только адреса из главного открытого ключа:

кошачье семя | sx mpk > mpkfor x в `seq 0 9`; сделать кот мпк | sx genaddr $ x; сделано

Сделки

Теперь пора заняться транзакциями. Во-первых, необходимо немного понять, как работают транзакции. Биткойн не имеет понятия «счета»; вместо этого транзакция, расходующая деньги с адреса, должна напрямую ссылаться на некоторые транзакции, отправляющие по крайней мере равную сумму денег на этот адрес; их обычно называют «выходами предыдущих транзакций». Например, если у вас есть адрес, на который вы отправили 2 BTC, 3 BTC, а затем 4 BTC, и вы хотите потратить 5 BTC, вы не тратите 5 BTC с этого адреса; скорее, вы тратите 2 выхода BTC и 3 транзакции BTC. Кроме того, выход не может быть «частично израсходован»; даже если вы хотите отправить только 0,1 BTC, вы должны использовать весь вывод. Вы можете не тратить 1,9 BTC впустую, добавив к транзакции специальный вывод, называемый «сдача», когда вы отправляете оставшиеся средства обратно себе..

Основная команда, которую вы будете использовать для получения этих неизрасходованных выходных данных транзакций, – это sx history.

:

sx история `cat addr1`

Однако это само по себе возвращает все транзакции, связанные с этим адресом, а не только те, которые нам нужны, поэтому нам нужно немного отфильтровать вывод. Это сложный сценарий; в основном, он сначала ищет слово «неизрасходованные» в истории и получает эти строки плюс данные транзакции в двух строках над ними. Затем он использует grep и awk для извлечения только тех данных, которые нам нужны. Обратите внимание, что команда возвращает значения в сатоши; 100 миллионов сатоши равны 1 BTC. Отправьте 0,001 BTC на адрес, содержащийся в файле addr1 (cat addr1

чтобы увидеть это, и

sx qrcode `cat addr1` qrcode.png

для создания сканируемого QR-кода) и выполните следующую команду:

sx history `cat addr1` | grep Unspent -B 2 | вывод grep | awk ‘{print $ 2}’ > inputcat ввод

Теперь, когда у нас есть история, давайте используем sx для создания и отправки транзакции..

sx mktx txfile.tx `cat input` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` cat addr1 | sx decode-addr`] equalverify checkig > raw.scriptcat pk1 | sx sign-input txfile.tx 0 `cat raw.script` > sigsx rawscript [`cat sig`] [` cat pub1`] | sx набор-вход txfile.tx 0 > txfile2.tx; mv txfile2.tx txfile.txsx broadcast-tx txfile.tx

Вот что делать, если у вас есть несколько входов транзакции, которые вы хотите потратить. Отправьте 0,0002 BTC на свой адрес пять раз и снова запустите указанную выше команду sx history и убедитесь, что она возвращает пять выходных данных. Чтобы избежать необходимости вручную копировать и вставлять пять входных данных транзакции, мы сделаем еще немного волшебства в командной строке:

sx history `cat addr1` | grep Unspent -B 2 | вывод grep | awk ‘{print $ 2}’ > temp1cat temp1 | sed ‘s / ^ / – i /’ | tr ‘n’ ” > temp2cat temp2

Обратите внимание на то, что temp2 содержит все входные данные в правильном формате для sx mktx

. Теперь мы просто объединяем их:

sx mktx txfile.tx `cat temp2` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` cat addr1 | sx decode-addr`] equalverify checkig > raw.scriptfor x в `seq 0 4`; сделать кот pk1 | sx sign-input txfile.tx $ x `cat raw.script` > sig $ x; done для x в seq 0 4; сделать sx rawscript [`cat sig $ x`] [` cat pub1`] | sx набор-ввод txfile.tx $ x > txfile2.tx; mv txfile2.tx txfile.tx; donesx broadcast-tx txfile.tx,

Святой Грааль: транзакции с несколькими подписями

Сначала мы сгенерируем 3 набора закрытых ключей, общих ключей и адресов..

для x в “seq 1 3”; сделать sx newkey > pk $ x; done для x в seq 1 3; сделать кот pk $ x | sx pubkey > pub $ x; done для x в seq 1 3; сделать кот pk $ x | sx адрес > адрес $ x; сделано

Затем мы создадим адрес с несколькими подписями..

sx rawscript 2 [`cat pub1`] [` cat pub2`] [`cat pub3`] 3 checkmultisig > msig.scriptcat msig.script | sx showscriptcat msig.script | sx scripthash > 3addrcat 3addr

Отправьте 0,001 BTC на адрес (не работает со всеми кошельками!), А затем выполните следующую команду, чтобы получить хеш транзакции:

sx history `cat 3addr` | grep Unspent -B 2 | вывод grep | awk ‘{print $ 2}’ > inputcat ввод

Теперь нам нужно создать транзакцию и подписать ее, в данном случае используя первый и третий закрытые ключи (первый и второй или второй и третий работают одинаково хорошо). Мы отправим всего 50000 сатоши, оставив 0,0005 BTC в качестве комиссии..

sx mktx txfile.tx -i `cat input` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 50000cat pk1 | sx sign-input txfile.tx 0 `cat msig.script` > sig1cat pk3 | sx sign-input txfile.tx 0 `cat msig.script` > sig3sx rawscript zero [`cat sig1`] [` cat sig3`] [`cat msig.script`] > input.scriptcat input.script | sx набор-вход txfile.tx 0

И, наконец, транслируйте транзакцию.

sx трансляция-tx txfile.tx

Довольно сложные, но транзакции с несколькими подписями в любом случае не совсем просты. Однако с sx сложность сводится к серии шагов, которые вы можете просто выполнить или даже включить в свои собственные программы, чтобы запускать их всякий раз, когда вам нужно. Независимо от того, являетесь ли вы энтузиастом командной строки, разработчиком биткойнов или просто кем-то, кто заинтересован в более глубоком изучении работы биткойн-транзакций, sx – это инструмент для вас. Удачного взлома!