Ohjelmointi

Bitcoin aloittelijoille, osa 3: BitCoinJ-sovellusliittymä

Java-kehittäjille BitCoinJ on lähtökohta kehittää sovelluksia, jotka ovat vuorovaikutuksessa Bitcoin-verkon kanssa. Tässä kolmiosaisen sarjan viimeisessä artikkelissa Dirk Merkel auttaa sinua asettamaan BitCoinJ: n Eclipse-kehitysympäristöön, ja kävelee sitten läpi useita lyhyitä harjoituksia, jotka tutustuttavat sinut tähän Bitcoin-tapahtumaprotokollan kevyeen käyttöönottoon.

Tämän kolmiosaisen sarjan aiemmat erät ovat esittäneet Bitcoinin, virtuaalisen valuutan ja vertaisverkon, käsitteellisen ja teknisen kehyksen. Tässä artikkelissa, BitCoinJ-sovellusliittymän opetusohjelmassa, oletetaan, että olet perehtynyt Bitcoin-osoitteisiin, tapahtumiin, lohkoihin ja lohkoketjuun.

BitCoinJ on avoimen lähdekoodin Java-toteutus Bitcoin-protokollalle. Sellaisena se on kätevä työkalu, jos haluat kirjoittaa Java-sovelluksia, jotka ovat vuorovaikutuksessa Bitcoin-verkon kanssa. BitCoinJ-sovellusliittymän tutkimiseksi rakennamme useita esimerkkisovelluksia, jotka kuvaavat ohjelmointivaiheita, jotka ovat tarpeen monimutkaisempien Bitcoin-sovellusten rakentamiseksi Java-järjestelmään. Kun olet rakentanut ja perustanut projektin Mavenin avulla Eclipse IDE: ssä, harjoitamme Bitcoin-osoitteen luomista, tallentamista lompakkoon ja lompakon tallentamista levylle. Sitten muodostamme yhteyden Bitcoin-testiverkkoon ja haemme sen geneesilohkon. Lopuksi yhdistämme toistaiseksi näytekoodimme lähettämällä joitain Bitcoineja testiverkon osoitteeseen.

Tietoa henkilöstä BitCoinJ

BitCoinJ on Bitcoin-protokollan Java-toteutus. Kirjoittanut Mike Hearn, BitCoinJ ei ole alkuperäisen Bitcoin-asiakkaan täydellinen toteutus, mutta kevyempi ja helpompi versio. Vaikka se on tarpeeksi vankka oppia, BitCoinJ on edelleen kehitteillä (tällä hetkellä v.0.3), eikä sitä tule käyttää suurien määrien Bitcoinejen siirtämiseen.

Aloita BitCoinJ: n käyttö

BitCoinJ isännöi Google Code Subversion-arkistossa, ja se voidaan nimettömästi tarkistaa. Kun olet tarkistanut BitCoinJ-projektin rungon, voit pitää sen ajan tasalla. Et kuitenkaan voi tehdä muutoksia.

Voit käyttää Subversion-asiakasohjelmaa, joka on rakennettu suosikki IDE: hen, tai yksinkertaisesti tarkistaa projektin komentoriviltä, ​​kuten minä:

Kun sinulla on koodi, käännät sen Mavenilla, BitCoinJ: n rakennusjärjestelmällä. Maven noudattaa elinkaariajattelua rakennusprojekteissa ja on erittäin laajennettavissa monilla ydin- ja kolmansien osapuolien laajennuksilla. Se mitä Maven tekee erittäin hyvin, on riippuvuuksien hallinta. Jos tarkastelet Maven pom.xml -tiedostoa BitCoinJ: n juurihakemistossa, huomaat, että se käyttää vain kourallista riippuvuuksia; Näitä ovat JUnit ja EasyMock yksikötestausta varten, SLF4J kirjaamista varten ja Bouncy Castle Crypto -sovellusliittymät salaustoiminnoille, kuten hajautukselle ja allekirjoittamiselle.

Suorita komentoriviltä mvn puhdas paketti ja Maven noutaa nämä ja muut riippuvuudet, kokoaa projektin, suorittaa yksikön testipaketin ja pakkaa käännetyn koodin tilannekuvan JAR-tiedostoon. Kuten kuvassa 2 on esitetty, Maven suorittaa ensin puhtaan elinkaaren päästäkseen eroon aikaisempien rakennusten artefakteista. Sitten se suorittaa oletetun elinkaaren vaiheet pakettivaiheeseen asti.

Mavenilla on muutama hyödyllinen temppu hihassaan. Ensinnäkin, suorittaminen mvn site: sivusto rakentaa BitCoinJ-dokumentaation, mukaan lukien sivut riippuvuuksista, ongelmien seurannasta, postituslistoista, lisenssistä, kehitystiimistä, lähdetietovarastosta ja muista. Nämä sivut ovat yleensä informatiivisia, mutta perustiedot. Suoritetaan mvn javadoc: javadoc luo projektin dokumentaation, joka on kätevä, kun alamme käyttää BitCoinJ-sovellusliittymää.

Asiakirjat osoittavat, että sovellusliittymä on jaettu neljään pakettiin:

  • Löytö käsittelee vertaisverkkojen löytämistä / viestintää.
  • Kauppa sisältää tietorakenteet lohkojen ja lohkoketjun tallentamista varten.
  • Esimerkkejä sisältää kourallisen yksinkertaisia ​​sovelluksia, jotka perustuvat BitCoinJ: ään (nämä innoittivat omia esimerkkejäni tästä artikkelista).
  • Ydin sisältää suurimman osan BitCoinJ: n luokista ja toiminnallisuudesta, mukaan lukien luokat kommunikoida vertais solmujen kanssa, ladata lohkoketju sekä lähettää ja vastaanottaa tapahtumia.

Määritä esimerkkiprojekti Eclipse-sovelluksessa

Kehitämme tämän artikkelin esimerkkikoodin Eclipsessä käyttämällä Mavenia BitCoinJ: n hallintaan riippuvuutena. Onneksi BitCoinJ: llä on jatkuva integrointiympäristö, joka rakentaa projektin, kerää ja raportoi erilaisista esineistä ja tallentaa tilannekuvan JAR: n projektin omaan Nexus-pohjaiseen Maven-arkistoon.

Kuvassa 3 on Eclipse-projektin luonti -valintaikkuna, joka syntyy uuden Maven-projektin luomisesta ja "pikakäynnistyksen" arkkityypin valitsemisesta, joka luo Maven-perusprojektin. Tämän projektin koodi asuu nimellisessä paketissa com.waferthin.bitcoinj, joka tuottaa 0.0.1-SNAPSHOT: n Maven-rakennuksella.

Kun napsautat Valmis, ohjattu toiminto kehottaa luomaan projektin, mikä tarkoittaa "Hello World" -pääluokan pudottamista projektihakemistoon nimeltä src / main / java / com / waferthin / bitcoinj minun tapauksessani.

Lopuksi meidän on kerrottava Mavenille, että projekti riippuu BitCoinJ-tilannekuvasta, kuten luettelossa 1. Muokkasin Mavenin ohjatun toiminnon luomaa pom.xml-tiedostoa ilmoittamaan BitCoinJ: n Nexus-tietovaraston sijainnin ja nimen (rivit 18–28) ja asettamaan versio, josta koontiversio riippuu (rivit 39–45):

Listaus 1. Maven pom.xm BitCoinJ-projektille

001 | 002 | 4.0.0 003 | 004 | com.waferthin.bitcoinj. tutkittu 005 | bitcoinj-tutkittu 006 | 0.0.1-SNAPSHOT 007 | purkki 008 | 009 | bitcoinj-tutkittu 010 | //maven.apache.org 011 | 012 | 013 | UTF-8 014 | 015 | 016 | 017 | 018 | 019 | bitcoinj-release 020 | 021 | 022 | //nexus.bitcoinj.org/content/repositories/releases 023 | 024 | 025 | bitcoinj-tilannekuva 026 | 027 | //nexus.bitcoinj.org/content/repositories/snapshots 028 | 029 | 030 | 031 | 032 | 033 | junit 034 | junit 035 | 3.8.1 036 | testi 037 | 038 | 039 | 040 | 041 | com.google 042 | bitcoinj 043 | 0,3-SNAPSHOT 044 | koota 045 | 046 | 047 |

Siinä kaikki siinä on. Seuraavassa osassa tuomme BitCoinJ-luokat koodillemme ja rakennamme BitCoinJ-projektin Mavenin kanssa, ilman että meidän tarvitsee kopioida todellista JAR-tiedostoa.

Bitcoin-osoitteen luominen

Tarvitset osoitteen, jotta voit lähettää tai vastaanottaa Bitcoineja. Osoitteet johdetaan julkisen ja yksityisen salausavaimen parin julkisesta osasta (katso "Bitcoin aloittelijoille, osa 2: Bitcoin teknologiana ja verkostona"). Sellaista salausta, jota Bitcoin käyttää, kutsutaan elliptisen käyrän salaus (ECC). Useimmat meistä tietävät julkisen avaimen salauksen, joka perustuu suurten kokonaislukujen alkutekijöiden löytämiseen. Sitä vastoin ECC perustuu vaikeuteen löytää elliptisen käyrän diskreetti logaritmi. (Tämän selittäminen yksityiskohtaisemmin ei vain johtaisi meidät alas korkeamman algebran kani-reikään, mutta ylittäisi nopeasti myös korkeakoulujen matematiikan. Onneksi meidän ei tarvitse tietää enemmän voidaksemme käyttää BitCoinJ: itä ECKey luokka edustamaan ja luomaan avainparia.)

Luettelon 2 riville 20 luomme uuden elliptisen käyrän avainparin instantisoimalla tyypin objektin ECKey. Huomaa, että luokan oletusarvo toString () menetelmä korvataan julkisen ja yksityisen avaimen palauttamiseksi hex-merkinnällä, jota käytetään rivillä 23.

Luettelo 2. Elliptisen käyrän avainparin luominen ECKeyllä

001 | paketti com.waferthin.bitcoinj; 002 | 003 | Tuo com.google.bitcoin.core.ECKey; 004 | Tuo com.google.bitcoin.core.NetworkParameters; 005 | Tuo com.google.bitcoin.core.osoite; 006 | 007 | public class CreateAddress 008

Saatat muistaa, että Bitcoin-avainparin julkisen osan tulisi olla osoite. Mutta yllä olevan koodin luoman avaimen julkinen osa ei aluksi näytä siltä kuin osoitteet, joita Bitcoin-asiakas näyttää käyttöliittymässään. Osoitelomake, jonka olemme tottuneet näkemään Bitcoin-tapahtumassa, johdetaan toistuvista hash-operaatioista julkiseen avaimeen. Tämä lomake sisältää lipun, joka ilmoittaa, mihin kahdesta Bitcoin-verkosta avain kuuluu - Bitcoinin tuotantoverkko tai sen testiverkko. (Katso Bitcoin-wiki-sivulta tarkempi kuvaus Bitcoin-avainparien algoritmisesta luomisesta.)

Eriytetään Bitcoin-verkot

Tällä hetkellä on kaksi Bitcoin-verkkoa, yksi tuotantoa varten ja toinen kehitykseen. Molemmilla verkoilla on oma geneesilohko ja sitä seuraava lohkoketju. Myöhemmin tässä artikkelissa käytämme Bitcoin-testiverkkoa suorittaaksemme Bitcoin-tapahtuman. Toistaiseksi sinun tarvitsee vain tietää, että verkot erotetaan toisistaan ​​ennakoimalla yksi tavu yhden ECC-algoritmin salaushajauksen tuloon: 0x6f tarkoittaa tuotantoverkkoa ja 0x00 testiverkkoa.

Meidän ei tarvitse soveltaa salauksen hajautusjärjestystä itse, koska ECKey luokka tarjoaa saman toiminnallisuuden osoitteeseen() menetelmä. Kun olet käyttänyt tätä menetelmää ja siirtänyt verkkotyypin a: n kautta Verkon parametrit objektin (katso rivin 26 luettelossa 2), osoitteeseen() method palauttaa Osoite esine. Tuo esine on toString () menetelmä antaa oikean Bitcoin-osoitteen. Luokan laatimisen ja suorittamisen jälkeen saan seuraavan osoitteen Bitcoinin testiverkolle:

mpJ9UDd4qtNhMiGefK8NM1V5PMq9jMb7ck

Testnet-osoitteet alkavat yleensä m tai n, kun taas tuotanto-osoitteet alkavat 1. Yritä suorittaa sama koodi omalla koneellasi ja saat toisen, yksilöllisen osoitteen.

Lompakot ja avaimet

Jos osallistut Bitcoin-talouteen, pidät todennäköisesti kaikki rikkautesi lompakossa. lompakko ei ole muuta kuin paikallinen datatiedosto, joka sisältää sarjoitettuja objekteja, jotka edustavat kaikkia Bitcoin-tapahtumiasi, ja käyttämättömien osoitteiden välimuistia. Saapuvien ja lähtevien tapahtumien summa on lompakon Bitcoins-määrä. Tässä osiossa käytämme BitCoinJ: itä Lompakko objekti luo lompakon datatiedosto, täytä se viidellä osoitteella ja tallenna se levylle.

Lompakko luokka toteuttaa Sarjattavissa käyttöliittymä, jotta voimme säilyttää sen levylle tai muulle pysyvämmälle tallennusvälineelle. Erityisesti menetelmät loadFromFile (tiedosto) ja vastaava saveToFile (tiedosto) lukea ja kirjoittaa lompakon tiedostoja. Käytämme loadFromFile (tiedosto) kirjoittaa äskettäin luotu lompakon objekti tiedostoon.

Merkintä että BitCoinJ-lompakon tiedostot eivät ole yhteensopivia virallisen Bitcoin-asiakkaan luomien lompakon tiedostojen kanssa.

Avainten luominen ja tallentaminen

Lompakko luokassa on julkinen jäsen nimeltä avaimenperä se on ArrayList tyypin ECKey, jota käytetään kaikkien EC-avainparien tallentamiseen lompakkoon. addKey (ECKey) -menetelmää käytetään avainparien lisäämiseen, mutta tällä hetkellä ei ole menetelmää niiden poistamiseksi. Tämä on järkevää, koska käyttäjien tai ohjelmien ei pitäisi olla helppoa poistaa yksityisiä avaimia: yksityinen avain vaaditaan vastaavan julkisen avaimen kautta lähetettyihin varoihin pääsemiseksi. Ilman avainparia lompakossa tai varmuuskopioita jonnekin, kaikki lähetetyt varat menetetään ikuisesti.

$config[zx-auto] not found$config[zx-overlay] not found