Amirja Taakija libbitcoin je postala ena najnaprednejših alternativnih izvedb obstoječega protokola Bitcoin. Čeprav je na trgu na desetine alternativnih izvedb, je libbitcoin eden redkih, ki ponovno uvaja celoten standard Bitcoin, kar uporabnikom omogoča, da zaženejo deterministična denarnica, an vmesnik za podpisovanje sporočil eliptične krivulje in seveda a popolnoma funkcionalno Bitcoin vozlišče. Tudi transakcije z več podpisi, ki jih številne priljubljene denarnice, vključno z blockchain.info in Bitcoin Wallet za Android, še vedno ne podpirajo, se libbitcoin dobro znajde. Libbitcoin je edinstven tudi po svoji modularnosti; sam paket je knjižnica programske opreme, ki vsebuje nabor komponent, od katerih je vsako mogoče programsko poklicati posamično, pri čemer se izognemo potrebi po zagonu polnopravnega monolitnega demona programske opreme, le da opravimo nekaj preprostih transakcij ali poizvedb. Če želite, da polni odjemalec deluje lokalno, lahko za to uporabite libbitcoin, lahko pa prav tako enostavno uporabite libbitcoin le za upravljanje transakcij in mreženje ter se zanašate na druga vozlišča za podatke o transakcijah. Karkoli potrebujete, uporabljate in s čimer ne potrebujete, preprosto se ne obremenjujte.

Amir Taaki je pred kratkim izdal prvo večjo praktično uporabo libbitcoinov sx, nabor pripomočkov ukazne vrstice za delo s ključi Bitcoin in transakcije. Osnovni namen je preprost: uporabnikom Bitcoina, ki so nekoliko tehnično podkovani, a ne izkušeni programerji, omogočiti interakcijo z Bitcoinom ne le kot vmesnik, kjer vnesejo znesek in ciljni naslov, bitcoind pa naredi vse zanje, ampak tudi dela neposredno z osnovnimi gradniki. Vsako orodje sx sledi filozofiji Unix: naredi eno stvar in to dobro. genaddr

vzame seme denarnice Electrum ali glavni javni ključ in indeks ter vrne naslov.

mktx

ustvarja nepodpisane transakcije in

vnos znakov

podpiše transakcijske vložke.

zgodovino

vrne seznam neporabljenih transakcij, povezanih z Bitcoin naslovom, ki jih je mogoče uporabiti kot vhodne podatke – in tako naprej.

Do teh orodij lahko dostopate v ukazni vrstici za sestavljanje Bitcoin transakcij po korakih ali pa jih pokličete programsko (npr. Z os.popen (ukaz) .read ()

v Pythonu) za ustvarjanje programske opreme Bitcoin, kot so trgovski paketi in denarnice. Do zdaj je bilo ustvarjanje nove Bitcoin denarnice težko – treba je bilo vse znova uvesti iz nič, vzeti obstoječo denarnico in trdo delati, da razvozlamo kodo, da ločimo logiko transakcij od logike denarnice, ali pa se zanašati na vozlišče bitcoind, ki se izvaja v ozadju. Z libbitcoinom in sx pa so orodja za delo z Bitcoin transakcijami na najnižji ravni že na voljo – razvijalcem je omogočeno, da se lotijo ​​težav, ki resnično potrebujejo največ dela – na primer optimizacija varnosti in uporabniške izkušnje.

Več kot le knjižnica

Zakaj sta torej libbitcoin in SX pomembna? Izkazalo se je, da odgovor presega preprosto dejstvo, da so priročni. Ena glavnih težav ekosistema Bitcoin je, da čeprav je Bitcoin nominalno decentraliziran, v resnici rudarji, ki vzdržujejo omrežje, delujejo z istim delom osnovne programske opreme Bitcoin: bitcoind. Bitcoind je “brezglava” (tj. Samo ukazna vrstica) različica prvotnega odjemalca Bitcoin, ki je bila razvita odkar je Satoshi izdal prvo različico leta 2009 in služi kot programska oprema, ki jo vsi rudarji in skoraj vsa podjetja uporabljajo za komunikacijo z Bitcoin omrežje.

To je nezdravo iz dveh razlogov. Prvič, monopol lahko potencialno privede do motečih vilic blockchain; na primer, marca letos je odstranitev napake baze podatkov, ki vozliščem bitcoind preprečuje obdelavo bloka, ki hkrati vpliva na stanje več kot 5000 transakcij, povzročila, da se je omrežje Bitcoin približno šest ur razdelilo na polovico kot vozlišča z napako in brez napake se ni strinjal glede veljavnosti bloka in začel delati na dveh ločenih verigah blokov. Popravek: Bitcoinova skupnost se je zbrala in se dogovorila, da bo ugasnila vozlišča različice 0.8, ter dodala napako baze podatkov v uradni protokol za dva meseca, dokler je dva meseca kasneje ni mogoče nadzorovano odstraniti. Če bi bilo namesto tega pet različnih implementacij Bitcoina v aktivni in široki uporabi, bi neuspeh katerega koli od njih vplival le na majhen del Bitcoin omrežja – in odjemalci običajnih uporabnikov, ki običajno preverjajo samo transakcije in ne blokov, verjetno ne bi bili prizadeti. sploh, saj bi bil v primeru vilic skoraj vedno “legitimni” verižni blok tisti, ki poveljuje večini omrežja.

Drugi razlog je politični. Številni glavni razvijalci bitcoinov, zlasti vodilni razvijalec Gavin Andresen, so tudi del Bitcoin Foundation, organizacije, ki je sprejela jasne korake k uporabi političnega lobiranja kot strategije za zaščito Bitcoinov. Strah je, da bi v prihodnosti vlada poskušala bolj regulirati Bitcoin in fundaciji postaviti ultimat: vključite nekatere funkcije, ki ogrožajo zasebnost (zmerni primer je lahko “pristojbina za preverjanje naslova”, ki ljudi odvrača od kritja njihovih skladb z ustvarjanjem številnih Bitcoin naslovov) v protokolu ali prepovemo izmenjavo Bitcoinov. Fundacija lahko to tudi upošteva in ameriška vlada to ve. Če fundacija ne bi mogla izvajati tovrstnih sprememb protokola brez vsesplošnega mednarodnega soglasja, potem ameriška vlada ne bi imela te možnosti – prisiljeni bi bili bodisi poskušati dokončno prepovedati Bitcoin za ceno obsežnih vsaj dobre volje med tehnološko in odprtokodno skupnostjo ali pa jo pustite in se osredotočite na mehkejše regulativne strategije. Zato zagovorniki Bitcoinov, kot so Amir Taaki, Joerg Platzer in drugi, že dolgo podpirajo diverzifikacijo in internacionalizacijo ekosistema Bitcoin. In libbitcoin je lahko le katalizator, ki končno sproži postopek.

Kako uporabljate SX?

Namestitev sx je zelo preprosta, če uporabljate Linux; v ukazni vrstici wget http://sx.dyne.org/install-sx.sh

čemur sledi

sudo bash./install-sx.sh

je vse kar je potrebno. Če uporabljate Windows ali Mac, so stvari nekoliko bolj zapletene, čeprav ne bolj kot kateri koli drug podoben programski paket; izvorna koda je na voljo za prenos na https://github.com/genjix/sx, od tam pa jo lahko namestite ročno.

Ko je sx nameščen, je nekaj stvari, ki jih lahko storite z njim. Najprej osnovni naslov in ključne manipulacije.

Ustvari trojko zasebnega ključa / javnega ključa / naslova:

sx nova tipka > pk1cat pk1 | sx pubkey > pub1cat pk1 | sx naslov > addr1cat pk1 pub1 addr1

Iz denarnice Electrum ustvarite pare zasebnih ključev / naslovov:

sx newseed > seme za x v `seq 0 9`; naredi mačje seme | sx genpriv $ x; mačje seme | sx genaddr $ x; Končano

Ustvari samo naslove iz glavnega javnega ključa:

mačje seme | sx mpk > mpkfor x v `seq 0 9`; naredi mačka mpk | sx genaddr $ x; Končano

Transakcije

Zdaj je čas, da začnemo s transakcijami. Najprej je treba malo razumeti, kako delujejo transakcije. Bitcoin nima pojma “računi”; namesto tega se mora transakcija, ki porablja denar z naslova, neposredno sklicevati na nekatere transakcije, ki na ta naslov pošljejo vsaj enako količino denarja; ti se običajno imenujejo “predhodni izhodi transakcij”. Če imate na primer naslov, na katerega ste poslali 2 BTC, 3 BTC in nato 4 BTC in želite zapraviti 5 BTC, s tega naslova ne zapravite 5 BTC; namesto tega porabite 2 BTC in 3 BTC izhodne transakcije. Poleg tega proizvodnje ni mogoče „delno porabiti“; tudi če želite poslati samo 0,1 BTC, morate porabiti celoten izhod. Zapravljanju 1,9 BTC se lahko izognete tako, da transakciji dodate poseben izhod, imenovan »sprememba«, kjer preostala sredstva pošljete nazaj sebi.

Osnovni ukaz, ki ga boste uporabili za pridobivanje teh neizrabljenih izhodov transakcij, je zgodovina sx

:

zgodovina sx `cat addr1`

Vendar to samo po sebi vrne vse transakcije, povezane s tem naslovom, ne le tiste, ki jih želimo, zato moramo izhod nekoliko filtrirati. To je zapleten scenarij; v bistvu najprej v zgodovini poišče besedo »Neporabljeno« in te vrstice ter podatke o transakcijah dobi v dveh vrsticah nad njimi. Nato z grep in awk izvleče samo podatke, ki jih potrebujemo. Ukaz upošteva vrednosti v satoshis; 100 milijonov satošijev je enako 1 BTC. Pošljite 0,001 BTC na naslov, ki ga vsebuje datoteka addr1 (cat addr1

da ga vidim in

sx qrcode `mačka addr1` qrcode.png

za generiranje skenirane QR kode) in zaženite naslednji ukaz:

zgodovina sx `cat addr1` | grep Neporabljeno -B 2 | grep izhod | awk ‘{print $ 2}’ > inputcat input

Zdaj, ko imamo zgodovino, uporabimo sx za ustvarjanje in pošiljanje transakcije.

sx mktx txfile.tx `vnos mačke` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` cat addr1 | sx decode-addr`] enakoverify checkig > raw.scriptcat pk1 | sx sign-input txfile.tx 0 `mačka raw.script` > sigsx rawscript [`mačka sig`] [` mačka pub1`] | sx set-input txfile.tx 0 > txfile2.tx; mv txfile2.tx txfile.txsx broadcast-tx txfile.tx

Evo, kaj morate storiti, če želite porabiti več vhodov za transakcije. Petkrat pošljite 0,0002 BTC na svoj naslov in znova zaženite zgornji ukaz sx history in se prepričajte, da vrne pet izhodov. Da ne bi bilo treba ročno kopirati in prilepiti pet vhodov za transakcije, bomo naredili še nekaj čarovnije ukazne vrstice:

zgodovina sx `cat addr1` | grep Neporabljeno -B 2 | grep izhod | awk ‘{print $ 2}’ > temp1cat temp1 | sed ‘s / ^ / – i /’ | tr ‘n’ ” > temp2cat temp2

Upoštevajte, kako temp2 vsebuje vse vhode v natančno pravi obliki za sx mktx

. Zdaj jih samo združimo v:

sx mktx txfile.tx `cat temp2` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6: 90000sx rawscript dup hash160 [` mačka addr1 | sx decode-addr`] enakoverify checkig > raw.scriptfor x v `seq 0 4`; mačka pk1 | sx sign-input txfile.tx $ x `mačka raw.script` > sig $ x; narejeno za x v `naslednjih 0 4`; naredi sx rawscript [`mačka sig $ x`] [` mačka pub1`] | sx set-input txfile.tx $ x > txfile2.tx; mv txfile2.tx txfile.tx; donesx oddaja-tx txfile.tx,

Sveti gral: Transakcije z več podpisi

Najprej bomo ustvarili 3 sklope zasebnih ključev, pubkeyjev in naslovov.

za x v “naslednjih 13”; naredi sx novo tipko > pk $ x; narejeno za x v `zaporedju 1 3`; mačka pk $ x | sx pubkey > pub $ x; narejeno za x v `zaporedju 1 3`; mačka pk $ x | sx naslov > addr $ x; Končano

Nato bomo ustvarili naslov multisig.

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

Na naslov pošljite 0,001 BTC (ne deluje z vsemi denarnicami!), Nato pa zaženite naslednje, da dobite zgoščeno transakcijo:

zgodovina sx `mačka 3addr` | grep Neporabljeno -B 2 | grep izhod | awk ‘{print $ 2}’ > inputcat input

Zdaj moramo zgraditi transakcijo in jo podpisati, v tem primeru s pomočjo prvega in tretjega zasebnega ključa (prvi in ​​drugi ali drugi in tretji delujeta enako dobro). Poslali bomo samo 50000 satošijev, za plačilo pa bomo pustili 0.0005 BTC.

sx mktx txfile.tx -i `vnos mačke` -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 nič [`mačka sig1`] [` mačka sig3`] [`mačka msig.script`] > input.scriptcat input.script | sx set-input txfile.tx 0

In končno, predvajajte transakcijo.

sx oddaja-tx txfile.tx

Dokaj zapletene, vendar transakcije z več podpisi v nobenem primeru niso ravno preproste. S sx pa se zapletenost zmanjša na vrsto korakov, ki jih lahko preprosto sledite ali celo vključite v svoje programe, ki se izvajajo, kadar koli je to potrebno. Ne glede na to, ali ste navdušenec nad ukazno vrstico, razvijalec Bitcoinov ali samo nekdo, ki ga zanima poglobljeno preverjanje delovanja Bitcoin transakcij, je sx orodje za vas. Srečno hekanje!