Amir Taaki libbitcoin se stala jednou z nejpokročilejších alternativních implementací bitcoinového protokolu, která existuje. Ačkoli na trhu nyní existují desítky alternativních implementací, libbitcoin je jednou z mála, která znovu implementuje kompletní bitcoinový standard, což umožňuje uživatelům provozovat deterministická peněženka, an eliptická křivka rozhraní pro podepisování zpráv a samozřejmě a plně funkční bitcoinový uzel. Dokonce i transakce s více podpisy, které mnoho populárních peněženek včetně blockchain.info a bitcoinové peněženky pro Android stále nepodporuje, libbitcoin zvládá v pohodě. Libbitcoin je také jedinečný svou modularitou; samotný balíček je softwarová knihovna, která obsahuje sadu komponent, z nichž každou lze programově volat jednotlivě, takže není nutné spouštět plnohodnotného monolitického softwarového démona, jen aby bylo možné provést několik jednoduchých transakcí nebo dotazů. Pokud chcete, aby lokálně fungoval plný klient, můžete k tomu použít libbitcoin, ale stejně snadno můžete libbitcoin používat pouze pro správu transakcí a vytváření sítí a při transakčních datech se můžete spolehnout na jiné uzly. Cokoli potřebujete, použijete a s čímkoli, co nepotřebujete, se jednoduše neobtěžujte.
Jako první hlavní praktickou aplikaci libbitcoinu nedávno vydal Amir Taaki sx, sada nástrojů příkazového řádku pro práci s bitcoinovými klíči a transakcemi. Základní záměr je jednoduchý: umožnit uživatelům bitcoinů, kteří jsou do jisté míry technicky zdatní, ale nikoli zkušení programátoři, komunikovat s bitcoiny nejen jako rozhraní, kde zadávají částku a cílovou adresu a bitcoind dělá vše za ně, ale také pracují přímo se základními stavebními bloky. Každý nástroj sx se řídí unixovou filozofií: dělá jednu věc a dělá ji dobře. genaddr
vezme osivo peněženky Electrum nebo hlavní veřejný klíč a index a vrátí adresu.
mktx
vytváří nepodepsané transakce a
podpisový vstup
podepisuje transakční vstupy.
Dějiny
vrátí seznam nevyčerpaných transakcí spojených s bitcoinovou adresou, které lze použít jako vstupy – atd.
K těmto nástrojům lze přistupovat na příkazovém řádku a vytvářet bitcoinové transakce krok za krokem, nebo je lze volat programově (např. Pomocí os.popen (příkaz) .read ()
v Pythonu) k vytváření bitcoinového softwaru, jako jsou obchodní balíčky a peněženky. Dosud bylo vytvoření nové bitcoinové peněženky obtížné – člověk by musel buď úplně implementovat vše od začátku, vzít existující peněženku a tvrdě pracovat na rozmotání kódu, aby oddělil transakční logiku od logiky peněženky, nebo se spoléhat na bitcoindový uzel běžící na pozadí. U libbitcoinů a sx však již existují nástroje pro práci s bitcoinovými transakcemi na nejnižší úrovni – což vývojářům umožňuje pracovat na problémech, které skutečně potřebují nejvíce – jako je optimalizace zabezpečení a uživatelské zkušenosti.
Více než jen knihovna
Proč tedy záleží na libbitcoinu a SX? Jak se ukázalo, odpověď jde mnohem dál než k prostému faktu, že jsou pohodlné. Jedním z hlavních problémů bitcoinového ekosystému je, že ačkoliv jsou bitcoiny nominálně decentralizované, ve skutečnosti těží horníci, kteří udržují síť v chodu, stejný bitcoinový software: bitcoind. Bitcoind je „bezhlavá“ (tj. Pouze příkazová řádka) verze původního bitcoinového klienta, která byla vyvinuta od doby, kdy Satoshi vydal první verzi v roce 2009, a slouží jako software, který používají všichni horníci a téměř všechny podniky ke komunikaci s Bitcoinová síť.
To je nezdravé ze dvou důvodů. Zaprvé, mít monopol může potenciálně vést k vysoce rušivým blockchainovým vidlím; například v březnu letošního roku odstranění chyby v databázi, která bránila bitcoindovým uzlům ve zpracování bloku současně ovlivňujícího stav více než 5 000 transakcí, způsobila, že se bitcoinová síť rozdělila na polovinu asi na šest hodin jako uzly s chybou a bez chyby nesouhlasili s platností bloku a začali pracovat na dvou samostatných blockchainech. Oprava: Bitcoinová komunita se spojila a souhlasila s vypnutím uzlů verze 0.8 a přidala chybu databáze do oficiálního protokolu na dva měsíce, dokud nemohla být kontrolovaným způsobem odstraněna o dva měsíce později. Pokud by místo toho existovalo pět různých implementací bitcoinů v aktivním a rozšířeném používání, selhání kterékoli z nich by ovlivnilo pouze malou část bitcoinové sítě – a klienti běžných uživatelů, kteří obvykle pouze ověřují transakce a ne blokují, by to pravděpodobně nemělo být vůbec, v případě vidlice by „legitimní“ blockchain byl téměř vždy ten, který ovládá většinu sítě.
Druhý důvod je politický. Mnoho klíčových vývojářů bitcoindů, zejména hlavní vývojář Gavin Andresen, je také součástí Bitcoin Foundation, organizace, která podnikla jasné kroky k využívání politického lobbingu jako strategie ochrany bitcoinů. Existuje obava, že by se vláda mohla v budoucnu pokusit více regulovat bitcoiny a dát nadaci ultimátum: zahrnete určité prvky narušující soukromí (mírným příkladem může být „poplatek za ověření adresy“, který by lidi odrazoval od krytí jejich sleduje vytvořením mnoha bitcoinových adres) v protokolu, nebo bitcoinové výměny zakazujeme. Nadace to může dobře dodržovat a americká vláda to ví. Pokud by však nadace neměla pravomoc provádět tyto druhy změn v protokolu bez rozšířeného mezinárodního souhlasu, pak by americká vláda tuto možnost neměla – byla by nucena buď zkusit přímý zákaz bitcoinů, a to za cenu masivního přinejmenším dobrá vůle mezi technologickou a open-source komunitou, nebo nechte být a zaměřte se na měkčí regulační strategie. Z tohoto důvodu obhájci bitcoinů jako Amir Taaki, Joerg Platzer a další dlouhodobě podporovali diverzifikaci a internacionalizaci bitcoinového ekosystému. A libbitcoin může být jen katalyzátorem, který konečně nastaví celý proces.
Jak používáte SX?
Instalace sx je velmi jednoduchá, pokud používáte Linux; na příkazovém řádku wget http://sx.dyne.org/install-sx.sh
následován
sudo bash./install-sx.sh
je vše, co je potřeba. Pokud používáte Windows nebo Mac, věci jsou poněkud komplikovanější, i když ne více než jakýkoli jiný podobný softwarový balíček; zdrojový kód je k dispozici ke stažení na adrese https://github.com/genjix/sx a odtud jej můžete nainstalovat ručně.
Jakmile je sx nainstalován, je zde několik věcí, které s ním můžete dělat. Nejprve základní adresa a klíčové manipulace.
Vygenerujte trojnásobek soukromého klíče / veřejného klíče / adresy:
sx newkey > pk1cat pk1 | sx pubkey > pub1cat pk1 | sx adresa > addr1cat pk1 pub1 addr1
Generujte páry soukromých klíčů a adres z peněženky Electrum:
sx newseed > seedfor x v `sekvenci 09 ‘; dělat kočičí semeno | sx genpriv $ x; kočičí semeno | sx genaddr $ x; Hotovo
Vygenerujte pouze adresy z hlavního veřejného klíče:
kočičí semeno | sx mpk > mpkfor x v `seq 0 9`; dělat kočku mpk | sx genaddr $ x; Hotovo
Transakce
Nyní je čas pustit se do transakcí. Nejprve je třeba trochu porozumět tomu, jak transakce fungují. Bitcoin nemá koncept „účtů“; místo toho musí transakce, která utrácí peníze z adresy, přímo odkazovat na některé transakce odesílající alespoň stejnou částku peněz na tuto adresu; obvykle se tomu říká „předchozí transakční výstupy“. Například pokud máte adresu, na kterou jste poslali 2 BTC, 3 BTC a poté 4 BTC a chcete utratit 5 BTC, neutrácíte 5 BTC z této adresy; spíše utrácíte výstupy transakcí 2 BTC a 3 BTC. Výstup navíc nelze „částečně utratit“; i když chcete poslat jen 0,1 BTC, musíte spotřebovat celý výstup. Plýtvání 1,9 BTC se můžete vyhnout přidáním speciálního výstupu k transakci, který se nazývá „změna“ a který odešlete zbývající prostředky zpět sobě.
Základní příkaz, který použijete k získání těchto nevyčerpaných transakčních výstupů, je historie sx
:
historie sx `cat addr1`
Toto však samo o sobě vrací všechny transakce spojené s touto adresou, nejen ty, které chceme, takže musíme výstup trochu filtrovat. Toto je komplikovaný skript; v zásadě nejprve hledá v historii slovo „nevyčerpáno“ a získá tyto řádky plus data transakce ve dvou řádcích nad nimi. Potom používá grep a awk k extrakci pouze dat, která potřebujeme. Všimněte si, že příkaz vrací hodnoty v satoshi; 100 milionů satoshi se rovná 1 BTC. Zašlete 0,001 BTC na adresu obsaženou v souboru addr1 (cat addr1
vidět to a
sx qrcode `cat addr1` qrcode.png
vygenerovat skenovatelný QR kód) a spusťte následující příkaz:
historie sx `cat addr1` | grep Nevyčerpané -B 2 | grep výstup | awk ‘{print $ 2}’ > inputcat vstup
Teď, když máme historii, vytvořme a odešleme transakci pomocí sx.
sx mktx txfile.tx `cat input` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` cat addr1 | sx decode-addr`] rovnocenné ověření > raw.scriptcat pk1 | sx sign-input txfile.tx 0 `cat raw.script` > sigsx rawscript [`cat sig`] [` cat pub1`] | sx set-vstup txfile.tx 0 > txfile2.tx; mv txfile2.tx txfile.txsx broadcast-tx txfile.tx
Co dělat, pokud máte více transakčních vstupů, které chcete utratit. Pošlete 0,0002 BTC na vaši adresu pětkrát a znovu spusťte výše uvedený příkaz historie sx a ujistěte se, že vrací pět výstupů. Abychom nemuseli ručně kopírovat a vkládat pět transakčních vstupů, uděláme trochu více magie příkazového řádku:
historie sx `cat addr1` | grep Nevyčerpané -B 2 | grep výstup | awk ‘{print $ 2}’ > temp1cat temp1 | sed ‘s / ^ / – i /’ | tr ‘n’ ” > temp2cat temp2
Všimněte si, jak temp2 obsahuje všechny vstupy ve správném formátu pro sx mktx
. Nyní je jen spojíme:
sx mktx txfile.tx `cat temp2` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` cat addr1 | sx decode-addr`] rovnocenné ověření > raw.scriptfor x v `seq 0 4`; dělat kočku pk1 | sx sign-input txfile.tx $ x `kočka raw.script` > sig $ x; donefor x v `sekvenci 04 ‘; do sx rawscript [`cat sig $ x`] [` cat pub1`] | sx set-vstup txfile.tx $ x > txfile2.tx; mv txfile2.tx txfile.tx; donesx broadcast-tx txfile.tx,
Svatý grál: Transakce s více podpisy
Nejprve vygenerujeme 3 sady soukromých klíčů, stydkých koček a adres.
pro x v `sekv. 1 3`; udělat sx newkey > pk $ x; donefor x v `seq 1 3`; dělat kočku pk $ x | sx pubkey > hospoda $ x; donefor x v `seq 1 3`; dělat kočku pk $ x | sx adresa > addr $ x; Hotovo
Poté vytvoříme multisig adresu.
sx rawscript 2 [`cat pub1`] [` cat pub2`] [`cat pub3`] 3 checkmultisig > msig.scriptcat msig.script | sx showscriptcat msig.script | sx scripthash > 3addrcat 3addr
Zašlete 0,001 BTC na adresu (nefunguje se všemi peněženkami!) A poté spusťte následující příkaz, abyste získali hash transakce:
historie sx `kočka 3addr` | grep Nevyčerpané -B 2 | grep výstup | awk ‘{print $ 2}’ > inputcat vstup
Nyní musíme vytvořit transakci a podepsat ji, v tomto případě pomocí prvního a třetího soukromého klíče (první a druhý nebo druhý a třetí fungují stejně dobře). Zašleme pouze 50 000 satoshi, za poplatek tedy 0,0005 BTC.
sx mktx txfile.tx -i `kočičí vstup` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 50000cat pk1 | sx sign-input txfile.tx 0 `kočka msig.script` > sig1cat pk3 | sx sign-input txfile.tx 0 `kočka msig.script` > sig3sx rawscript nula [`kočka sig1`] [` kočka sig3`] [`kočka msig.script`] > input.scriptcat input.script | sx set-vstup txfile.tx 0
A nakonec transakci odvysílejte.
sx broadcast-tx txfile.tx
Docela komplikované, ale transakce s více podpisy nejsou v žádném případě úplně jednoduché. S sx se však složitost redukuje na řadu kroků, které můžete jednoduše sledovat, nebo dokonce začlenit do svých vlastních programů, které se spustí, kdykoli budete potřebovat. Ať už jste nadšenci příkazového řádku, vývojář bitcoinů nebo jen někdo, kdo má zájem hlouběji se podívat na to, jak transakce bitcoinů fungují, sx je nástroj pro vás. Šťastné hackování!