MultiChain 1.0 beta 2 ja 2.0 -suunnitelma

Lähdesolmu: 1742567

Missä olemme tänään ja minne olemme menossa huomenna

Tänään on ilo julkaista MultiChain 1.0: n toinen beeta Linuxille, Windowsille ja Macille (toistaiseksi Mac-versio vaatii kääntämistä). Tämä päättää suunnitellun MultiChain 1.0 -kehityksen - lukuun ottamatta virhekorjauksia, MultiChain 1.0: n viimeinen julkaisu kesällä pysyy ennallaan.

Tässä kuussa on kulunut myös kaksi vuotta MultiChainin ensimmäisestä alfa-julkaisusta kesäkuussa 2015. Kuten minkä tahansa uuden tuotteen kohdalla, emme olleet varmoja siitä, miten markkinat reagoivat, ja tiesimme, että selville on vain yksi tapa - julkaise vähimmäiskykyinen tuote, mikä tarkoittaa alkuperäistä versiota, jolla on merkittävä arvo, mutta joka on suunnittelulta alustava. Onneksi, toisin kuin ensimmäinen tuotteemme CoinSpark, MultiChain sai vahvan ja välittömän myönteisen vastauksen. Tähän liittyi tsunami järkeviä ominaisuuspyyntöjä, joista monet olemme nyt toteuttaneet. Tuotteen kehityksen rinnalla käyttö on myös kasvanut merkittävästi jokaisella mittarilla. Esimerkiksi MultiChain-verkkosivusto sai alle 3,000 kävijää heinäkuussa 2015, ja nyt se tuo kymmenen kertaa enemmän kuukausittain.

MultiChain-suorituskyky

Kahden viime vuoden aikana olemme panostaneet paljon vaivattomasti MultiChainin optimointiin Bitcoin Core, julkisen bitcoin-verkon viitetoteutus. Alla on vertailu tapahtumien läpimenoaikaa yhden solmun kokoonpanossa käyttäen viittä tuotteen versiota:

.throughput td,.throughput th {text-align:right;}
Tapahtumat yhteensä 1.0 alfa 3 1.0 alfa 21 1.0 alfa 22 1.0 1 beeta 1.0 2 beeta
100 6.5 tps 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

Keskimääräinen tapahtuma sekunnissa, mukaan lukien API: n yleiskustannukset ja rakentaminen, allekirjoittaminen, kaivostoiminta ja tapahtumien ja estojen todentaminen.
Testit suoritetaan ab HTTP-palvelimen vertailutyökalu, joka lähettää kaksi samanaikaista pyyntöä sendtoaddress API.
Palvelimen tekniset tiedot: Intel Core i7-4770, 4 ydintä @ 3.4 MHz, 32 Gt RAM-muistia, Seagate 2 TB 7200 RPM SATA, CentOS 6.4.

Luonnollisesti suurin hyppy tuli alfa 22: ssa, kun me siirtynyt tietokantapohjaiseen lompakkoon. Mutta julkaisun jälkeen olemme melkein kaksinkertaistaneet MultiChainin nopeuden uudelleen. Toivomme, että olemme osoittaneet, että bitcoinin 4 tapahtuman sekunnissa raja johtuu sen erityisistä verkkoparametreista, eikä sillä ole mitään yhteyttä lohkoketjuihin yleensä.

Suorituskyvyn optimointi on tietysti loputon tehtävä, eikä ole mitään syytä, miksi MultiChain ei voi saavuttaa 10,000 tx / s 16-ytinen prosessori tarvittavien arkkitehtuurimuutosten kanssa. Käyttäjien ja yhteistyökumppaneiden kanssa käytyjen keskustelujen perusteella näyttää kuitenkin siltä, ​​että harvat odottavat tarvitsevan yli 1,000 tx / s lähivuosina. Joten keskitämme kehitystyömme uusiin ominaisuuksiin, mikä tuo meidät hienosti MultiChain 2.0 -aiheeseen.

MultiChain 2.0: n yleiskatsaus

MultiChainin versio 2.0 on ensimmäinen, joka tulee kahteen painokseen - Yhteisö (avoin lähdekoodi) ja Enterprise (kaupallinen). Keskityn tässä ilmaiseen yhteisöversioon, koska keskustelemme vain MultiChain Enterprise -tietojen kanssa kumppaniemme. Joka tapauksessa yhteisö- ja yritysversiot ovat erittäin yhteensopivia siinä mielessä, että: (a) yhteisöversioon rakennetut sovellukset toimivat ilman muutoksia MultiChain Enterprise -yrityksessä ja (b) molemmat versiot voivat muodostaa yhteyden ja tehdä kauppaa toistensa kanssa samassa ketjussa.

MultiChain 2.0: n molempien versioiden parannetun toiminnallisuuden kolme avainaluetta ovat:

  • Rikkaampi tietomalli suoratoistoille, mukaan lukien JSON-asiakirjat.
  • Mukautetut ohjelmoitavat tapahtumasuodattimet ketjun validointia varten.
  • Blockchainin protokollan ja parametrien saumaton päivitys.

Käännyn keskustelemaan näistä kaikista yksityiskohtaisesti.

Rikkaampi tietomalli suoratoistoille

MultiChain-virrat otettiin käyttöön syyskuussa 2016, ja ne ovat osoittautuneet erittäin suosituiksi. Kuten on kuvattu Tämä viesti, virrat tarjoavat yksinkertaisen ja luonnollisen abstraktin yleiskäyttöön tarkoitettujen tietojen tallentamista, indeksointia ja hakua varten lohkoketjussa. MultiChain-lohkoketju voi sisältää minkä tahansa määrän nimettyjä virtoja, joista kukin voi olla joko avoin kaikille kirjoittamista varten tai kirjoitettavissa vain tietyistä osoitteista.

MultiChain 1.0: ssa kullakin streamikohdalla on yksi tai useampi julkaisija (joka allekirjoittaa sen), valinnainen avain, enintään 64 Mt: n kokoinen binääridatan hyötykuorma ja aikaleima (johdettu lohkosta, johon se on upotettu). Jokainen solmu voi vapaasti päättää, minkä virran tilata, tai tilata kaikki virrat automaattisesti. Jos solmu on tilattu virtaan, se indeksoi suoratoiston sisällön reaaliajassa, mikä mahdollistaa tehokkaan haun julkaisijan, avaimen, lohkon, aikaleiman tai sijainnin mukaan.

MultiChain 2.0 rikastuttaa tämän suoratoiston toiminnallisuutta monin tavoin:

  • JSON-tuotteet. Binaaridatan lisäksi stream-kohteet tukevat jäsenneltyjä JSON-objekteja, jotka on tallennettu lohkoketjuun tehokkaassa sarjallisuusmuodossa, kuten UBJSON. Koska MultiChain-sovellusliittymä käyttää jo JSONia kaikkialla, nämä JSON-objektit ovat kirjoitettavissa ja luettavissa luonnollisella ja ilmeisellä tavalla.
  • Useita näppäimiä. Suoratoistokohteet tukevat useita avaimia, mikä mahdollistaa yhden tiedon indeksoinnin useilla tavoilla hakua varten liststreamkeyitems. Arvioimme jatkuvasti, kuinka paljon tietokantatoimintoja sisällytetään MultiChainiin, emmekä odota tukevasi version 2.0 JSON-streamiosien alaelementtien indeksointia. Usean avaimen salliminen stream-alkion kohdalla tarjoaa kohtuullisen kiertotavan.
  • Atomic kirjoittaa useista kohteista. MultiChain 1.0 mahdollistaa yhden tapahtuman kirjoittamisen useisiin virtoihin, mutta ei useiden kohteiden kirjoittamiseen samaan streamiin. MultiChain 2.0 poistaa tämän rajoituksen.
  • JSON sulautuu. Mikä tahansa järjestetty JSON-objektien luettelo voidaan luonnollisesti tasoittaa tai tiivistää "yhdistetyn" objektin luomiseksi. Yhdistetty objekti sisältää kaikki avaimet, jotka näkyvät yksittäisissä objekteissa, joissa kutakin avainta vastaava arvo otetaan viimeisestä objektista, jossa avain esiintyy. Jos haluat, yhdistetty objekti on tietokantarivin lopullinen tila, jonka sarakkeet määrittelee ensimmäinen objekti ja laajentaa tai päivittää myöhemmät objektit. MultiChain 2.0 lisää sovellusliittymiä, jotta JSON-kohteiden yhdistetty objekti voidaan noutaa helposti ja nopeasti tietyllä avaimella tai julkaisijalla.

Nämä ominaisuudet ovat peräisin tavallisista tavoista, joilla kehittäjät käyttävät tällä hetkellä virtoja. Toisin sanoen havaitsemme, mitä monet ihmiset rakentavat MultiChainin päälle sovellustasolla, ja tuomme kyseisen toiminnallisuuden itse MultiChainiin - mallia, jota aiomme jatkaa. Nyt kun stream-kohteet sisältävät tyyppitietoja, niitä voidaan helposti laajentaa tulevaisuudessa tukemaan muita tietomuotoja, kuten XML, HDF5 ja MIME-tunnistettu sisältö. Puhumattakaan avoimesta ketjun pakkaamisesta ja salauksesta.

MultiChain 2.0 tukee myös JSON-objekteja raakatapahtumien metatiedoille (ts. Ei suoratoista kohteita) sekä omaisuuserien liikkeeseenlaskun ja suoratoiston luomistapahtumien metatietoja MultiChain 1.0: ssa toteutettujen vain teksti-avain / arvo-parien sijaan. listassets API tarjoaa JSON-yhdistämisen kaikkien omaisuuserien liikkeeseenlaskutapahtumien välillä, jotta kunkin liikkeeseenlaskun metatiedot voivat päivittää tehokkaasti omaisuuden lopullisen kuvauksen.

Mukautetut tapahtumasuodattimet

Olemme miettineet paljon siitä, kuinka lisätä mukautettavat ohjelmoitavat säännöt MultiChainiin. Vaikka Ethereumin "älykkään sopimuksen" paradigma on suosittu, sillä on useita keskeisiä puutteita suuritehoisten luvattujen lohkoketjujen suhteen. Ensinnäkin älykkäät sopimukset tuovat globaalin riippuvuuden lohkoketjun koko osavaltioon, mikä heikentää dramaattisesti samanaikaisuutta ja suorituskykyä. Toiseksi älykkäät sopimukset eivät voi estää virheellisten tapahtumien upottamista lohkoketjuun, vaan estävät vain kyseisiä tapahtumia päivittämästä lohkoketjutietokannan tilaa. Vaikka pitkällä aikavälillä odotamme Ethereum-yhteensopivan virtuaalikoneen tarjoamista korkean tason abstraktina MultiChainissa, emme usko, että se on oikea ratkaisu matalan tason validointiin.

MultiChain 2.0 esittelee toisen paradigman, jota kutsutaan tapahtumasuodattimiksi, jotka validoivat yksittäiset tapahtumat ilman viittausta mihinkään globaaliin tilaan. Odotamme suodattimien kirjoittavan Javascriptilla ja suoritettaviksi sulautetussa ajonaikaisessa moottorissa, kuten v8, jota käytetään Googlen kromi selain ja Node.js foorumi. Tietenkin meidän on varmistettava, että suodatuskoodi toimii identtisesti jokaisessa lohkoketjun solmussa, estäen kaikki ei-determinismin lähteet kuten ajan lukeminen, satunnaislukujen käyttö, pääsy verkkoon tai levylle tai matemaattisten operaatioiden suorittaminen isäntäpalvelimen arkkitehtuurista riippuen. Deterministisen Javascript-ajonaikaisen ympäristön luominen on haaste, mutta uskomme (ilman liian paljon), että siitä on hyötyä useille muille MultiChain-ominaisuuksille tulevaisuudessa.

Suodattimille välitetään JSON-objekti, joka kuvaa yksittäistä tapahtumaa, joka on strukturoitu kuten decoderawtransaction mutta ylimääräisillä kentillä. Esimerkiksi jokaiseen JSON-tapahtuman syötteeseen sisältyy rakenne, joka kuvaa edellisen käyttämänsä tapahtumalähdön, ja jokaiseen osoitteeseen liitetään luettelo tällä osoitteella tällä hetkellä olevista käyttöoikeuksista. Suodattimen tehtävä on palauttaa Boolen-arvo, joka ilmaisee, onko tapahtuma hyväksyttävä, ja jos ei, anna tekstivirhe selittäen miksi. MultiChainin sovellusliittymä sisältää komennot suodattimien luomiseen, niiden testaamiseen aiemmilla tai uusilla tapahtumilla ja aktivoimiseksi järjestelmänvalvojan yksimielisyydellä.

Toisin kuin älykkäät sopimukset, jos suodattimen koodista löytyy virhe, se voidaan helposti korvata uudella versiolla. Siitä huolimatta, kuten kaikki Turingin koko koodit, suodattimet ovat edelleen vaarassa päästä äärettömään silmukkaan. Tätä ongelmaa lievennetään kahdella tavalla:

  • Suodattimet voivat asentaa ja aktivoida vain ketjun järjestelmänvalvojat yksimielisyydellä. Tämä antaa jokaiselle järjestelmänvalvojalle mahdollisuuden tutkia suodattimen koodi perusteellisesti ennen äänestämistä sen aktivoimiseksi.
  • Kaikki hyvin käyttäytyvät solmut validoivat uudet tapahtumat aktiivisilla suodattimilla ennen niiden edelleenlähettämistä vertais solmuihin. Tämän seurauksena, jos tapahtuma lähettää suodattimen äärettömään silmukkaan, tapahtuman ei pitäisi levitä sen luoneen solmun ulkopuolelle.

Odotamme, että yksi suosittu suodatinsovellus vahvistaa stream-kohteet. Esimerkiksi suodatin voi varmistaa, että tietyt streamin JSON-kohteiden kentät sisältävät numeroita tietyllä alueella. MultiChain 1.0: ssa tämäntyyppinen vahvistus on tehtävä sovellustasolla joko kirjoittaessa suoratoistokohteita (jos lähde luotetaan) tai kun luet niitä. Sen sijaan MultiChain 2.0 mahdollistaa näiden sääntöjen upottamisen itse lohkoketjuun, kuten tarkista rajoitukset relaatiotietokannassa.

MultiChain 2.0 sisältää kaksi lisäominaisuutta, jotka tekevät suodattimista entistä tehokkaampia. Ensinnäkin se ottaa käyttöön käyttäjän määrittelemät käyttöoikeudet, jotka ovat olemassa MultiChainin määrittelemien kahdeksan käyttöoikeuden rinnalla. Kuten tavallisilla käyttöoikeuksilla, järjestelmänvalvojat (ja joissakin tapauksissa käyttäjät, joilla on activate oikeudet) ja sisällytetään osoitteisiin rinnakkain suodattimeen välitettävään JSON-objektiin. Suodatin voisi esimerkiksi varmistaa, että vain osoitteet, joilla on tietty käyttäjän määrittelemä lupa, voivat kirjoittaa tietyntyyppisiä tietoja virtaan tai tehdä kauppaa tietyssä resurssissa tietyn kynnyksen yläpuolella.

Toiseksi MultiChain 2.0 tukee mukautettuja (binaarisia tai JSON) metatietoja tavallisissa tapahtumalähdöissä. Tämän avulla kaikki lähdöt voivat toimia yleisenä tietokantarivinä, jonka "omistaa" sisällä oleva osoite. Suodattimet näkevät kaikki metatiedot tapahtuman käytetyissä ja luomissa tuotoksissa osana JSON-kuvausta. Tämän seurauksena MultiChainista tulee universaali jaetun tietokannan moottori, jossa tapahtuman pätevyys määräytyy luomien ja poistettavien rivien mukautettavan toiminnon avulla. (Jos tämä kuulostaa hieman abstraktilta, annamme varmasti konkreettisia esimerkkejä.)

Blockchain-päivitys

Koska estoketjut on suunniteltu toimimaan vuosia, niiden ominaisuuksia saatetaan joutua muuttamaan ajan myötä. Nykyinen MultiChain-versio tarjoaa jo riittävän joustavuuden, mikä mahdollistaa käyttöoikeuksien muutokset (mukaan lukien järjestelmänvalvojat ja kaivostyöläiset yksimielisesti), uusien resurssien ja virtojen luomisen sekä solmujen saumattoman lisäämisen tai poistamisen verkosta. Siitä huolimatta MultiChain 1.0: ssa blockchainin perusosa parametrit, kuten lohkon enimmäiskoko ja kohteen vahvistusaika, ovat kiinteät, kun ketju luodaan, eikä niitä voida muuttaa myöhemmin.

MultiChain 2.0 lisää mahdollisuuden päivittää lohkoketju, jolloin monia (mutta ei kaikkia) sen parametreja voidaan muokata, kun ketju jatkuu. Kuten muutkin tärkeät toiminnot, lohkoketjun päivittäminen vaatii mukautettavan järjestelmänvalvojan konsensustason, jossa tämä taso itsessään on parametri, jota voidaan muuttaa. Päivitykset tulevat voimaan tietystä lohkosta, ja niitä sovelletaan sen jälkeen jokaiseen seuraavaan lohkoon seuraavaan päivitykseen saakka.

Blockchain-parametrit, jotka voidaan päivittää, sisältävät:

  • Protokollaversio. Tämä mahdollistaa yhden MultiChain-version luoman lohkoketjun päivittämisen tukemaan uuden version ominaisuuksia, kuten JSON-suoratoistokohteita tai tapahtumasuodattimia. Protokollaversio 10008 käyttöön otettu MultiChain 1.0 alpha 29: ssä (ja jota käytetään beta-versiossa) on jo turvattu tulevaisuudessa tämäntyyppiselle päivitykselle dokumentoimattomalla tuella. Kun MultiChain 1.0 -lohkoketju on päivitetty 2.0-protokollaksi, se saa myös pääsyn muihin tässä kuvattuihin parametrimuutoksiin.
  • Blockchain-skaalaus. Lohkoketjut, joista tulee suosittuja, voivat kasvaa tavoitearvon vahvistamisajalle tai tapahtumien ja lohkojen kooille asetetut alkuperäiset arvot. MultiChain 2.0 mahdollistaa näiden arvojen korottamisen tai pienentämisen tarpeen mukaan.
  • Lupamalli. MultiChain 2.0: n avulla voidaan päivittää monia käyttöoikeuksiin ja hallintaan liittyviä parametreja, mukaan lukien: (a) anyone-can-* parametrit, jotka ohjaavat tapoja, joilla lohkoketju on auki tai kiinni, (b) admin-consensus-* parametrit, jotka määrittävät tietyille operaatioille vaadittavan järjestelmänvalvojan konsensuksen tason, ja (c) mining-diversity parametri, joka kontrolloi round-robin-konsensusalgoritmin tiukkuutta.

Kun tämä päivitystoiminto on otettu käyttöön, ei pitäisi olla mitään syytä, miksi MultiChainissa luotu estoketju ei voi toimia vuosikymmenien ajan tai pidempään.

Katse eteenpäin

Olemme jo aloittaneet työn MultiChain 2.0: n kanssa ja odotamme eteenpäin tämän tiekartan toteuttamista. Epäilemättä sisällytetään myös muita parannuksia. Kuten MultiChain 1.0: lla, meillä on myös alfa-julkaisuja matkan varrella, jotta kehittäjät voivat käyttää ja oppia uusia ominaisuuksia niiden käyttöönoton yhteydessä (ja tietysti ilmoittaa ongelmista tai puutteista). Luonnollisesti jatkamme version 1.0 ylläpitoa koko tämän ajanjakson, korjaamalla kaikki esiintyvät virheet.

Haluaisin lopuksi kiittää kehitysryhmää, jota johtaa tohtori Michael Rozantsev, jatkuvasta huippuosaamisesta ja kovasta työstä. Mielestämme MultiChain on yksinkertainen ohjelmistosuunnitteluprojekti, jossa koodin laatu ja testaus laskevat ennen kaikkea. Minulla on etuoikeus työskennellä ihmisten kanssa, jotka voivat muuttaa monimutkaisen tuotevision vakaana toimivana ohjelmistona niin merkittävällä tehokkuudella ja nopeudella.

Ole hyvä ja lähetä kommentit LinkedIn.

Aikaleima:

Lisää aiheesta moniketjuisille