MultiChain 1.0 beeta 2 ja 2.0 tegevuskava

Allikasõlm: 1742567

Kus me täna oleme ja kuhu me homme läheme

Täna on meil hea meel välja anda MultiChain 1.0 Linuxi, Windowsi ja Maci teine ​​beeta (praegu vajab Maci versioon kompileerimist). Sellega lõpetatakse MultiChain 1.0 kavandatud arendus - välja arvatud veaparandused, jääb MultiChain 1.0 lõplik väljaandmine suve jooksul muutmata.

Sel kuul möödub ka kaks aastat MultiChaini esimesest alfa-versioonist 2015. aasta juunis. Nagu iga uue toote puhul, ei olnud me ka kindlad, kuidas turg reageerib, ja teadsime, et teada on ainult üks viis - välja anda minimaalne elujõuline toode, mis tähendab esialgset versiooni, mis pakub märkimisväärset väärtust, kuid on konstruktsiooni osas esialgne. Õnneks erinevalt meie esimesest tootest MündiparkSai MultiChain tugeva ja kohese positiivse vastuse. Sellega kaasnes mõistlike funktsioonitaotluste tsunami, millest paljud oleme nüüd rakendanud. Paralleelselt toote arendamisega on ka kasutamine märkimisväärselt kasvanud iga meetme võrra. Näiteks sai MultiChaini veebisait 3,000. aasta juulis alla 2015 külastaja ja see toob nüüd kümme korda rohkem kui kuus.

MultiChaini jõudlus

Viimase kahe aasta jooksul oleme investeerinud palju jõupingutusi hargnenud MultiChaini optimeerimisse Bitcoin Core, avaliku bitcoini võrgu referentsteostus. Allpool on toodud ühe sõlme seadistamise tehingu läbilaskevõime võrdlus, kasutades toote viit versiooni:

.throughput td,.throughput th {text-align:right;}
Tehingute koguarv 1.0 alfa 3 1.0 alfa 21 1.0 alfa 22 1.0 1 beta 1.0 2 beta
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

Keskmine tehingute arv sekundis, sealhulgas API üldkulud ja ehitamine, tehingute ja plokkide allkirjastamine, kaevandamine ja kontrollimine.
Testid kasutades ab HTTP serveri võrdlusuuringute tööriist, mis saadab kaks samaaegset taotlust sendtoaddress API.
Serveri spetsifikatsioonid: Intel Core i7-4770, 4 südamikku @ 3.4 MHz, 32 GB muutmälu, Seagate 2 TB 7200 RPM SATA, CentOS 6.4.

Loomulikult tuli suurim hüpe alfa 22-s, kui meie üleminek andmebaasipõhisele rahakotile. Kuid sellest versioonist alates oleme MultiChaini kiirust jälle peaaegu kahekordistanud. Loodame, et oleme näidanud, et bitcoini limiit 4 tehingut sekundis tuleneb tema konkreetsetest võrguparameetritest ja sellel pole üldse seost plokiahelatega.

Muidugi on jõudluse optimeerimine lõputu ülesanne ja pole ühtegi põhjust, miks MultiChain ei jõua 10,000 XNUMX tx / s 16-tuumaline protsessor vastavate arhitektuuriliste muudatustega. Meie kasutajate ja partneritega peetud vestluste põhjal näib siiski, et vähesed loodavad lähiaastatel vajada rohkem kui 1,000 tx / s. Niisiis keskendume oma arendustegevuses uutele funktsioonidele, mis viib meid kenasti MultiChain 2.0 teemale.

MultiChain 2.0 ülevaade

MultiChaini versioon 2.0 on esimene, mis tuleb välja kahes väljaandes - Community (avatud lähtekoodiga) ja Enterprise (kaubandus). Keskendun siin tasuta kogukonna väljaandele, kuna arutame ainult MultiChain Enterprise üksikasju meie partnerid. Igal juhul on ühenduse ja ettevõtte väljaanded väga ühilduvad, kuna: a) ühenduse väljaandele rajatud rakendused töötavad MultiChain Enterpriseis muutmata kujul ja b) mõlemad väljaanded saavad omavahel ühenduda ja nendega tehinguid teha. samal ketil.

MultiChain 2.0 mõlemas väljaandes on täiustatud funktsionaalsuse kolm peamist valdkonda:

  • Rikkam andmemudel voogude, sealhulgas JSON-dokumentide jaoks.
  • Kohandatud programmeeritavad tehingufiltrid ahelas kinnitamiseks.
  • Blokiahela protokolli ja parameetrite sujuv uuendamine.

Pöördume nende kõigi üksikasjaliku arutamise poole.

Voogude rikkalikum andmemudel

MultiChaini voogid võeti kasutusele 2016. aasta septembris ja on osutunud äärmiselt populaarseks. Nagu on kirjeldatud punktis sellele ametikohale, pakuvad vood lihtsa ja loomuliku abstraktsiooni üldotstarbeliseks andmete salvestamiseks, indekseerimiseks ja plokiahelas otsimiseks. MultiChaini plokiahel võib sisaldada suvalist arvu nimelisi vooge, millest igaüks võib olla kõigile avatud kirjutamiseks või kirjutatav ainult teatud aadressidelt.

MultiChain 1.0 versioonis on igal vooüksusel üks või mitu väljaandjat (kes sellele alla kirjutavad), valikuline võti, kuni 64 MB suurune binaarandmete koormus ja ajatempel (tuletatud plokist, kuhu see on manustatud). Iga sõlm saab vabalt otsustada, milliseid vooge tellida, või tellida kõik voogud automaatselt. Kui voog on tellitud sõlme, indekseerib see selle voo sisu reaalajas, võimaldades väljaandja, võtme, ploki, ajatempli või asukoha järgi tõhusat otsingut.

MultiChain 2.0 rikastab seda voogude funktsionaalsust mitmel viisil:

  • JSON üksused. Lisaks binaarsetele andmetele toetavad vooüksused ka struktureeritud JSON-objekte, mida salvestatakse plokiahelas tõhusas serialiseerimisvormingus, näiteks UBJSON. Kuna MultiChaini API juba kasutab JSON-i kogu ulatuses, on need JSON-objektid kirjutatavad ja loetavad loomulikul ja ilmselgel viisil.
  • Mitu klahvi. Vooüksused toetavad mitut võtit, võimaldades ühe andmekogu indekseerimiseks mitmel viisil, kasutades seda liststreamkeyitems. Hindame pidevalt, kui palju andmebaasifunktsionaalsust MultiChaini peaks kaasama, ega loodeta toetada versiooni 2.0 JSON-vooüksuste alamelementide indekseerimist. Mitme võtme lubamine vooüksuse kohta annab mõistliku lahenduse.
  • Atomic kirjutab mitmest üksusest. MultiChain 1.0 võimaldab ühel tehingul kirjutada mitmesse voogu, kuid mitte kirjutada mitu üksust samasse voogu. MultiChain 2.0 eemaldab selle piirangu.
  • JSON ühendamine. Mis tahes JSON-i objektide järjestatud loendit saab loomulikult lamestada või kokku võtta, et luua ühendatud objekt. Ühendatud objekt sisaldab kõiki võtmeid, mis kuvatakse üksikobjektides, kus igale võtmele vastav väärtus võetakse viimasest objektist, milles see võti ilmub. Kui soovite, on ühendatud objekt andmebaasi rea lõplik olek, mille veerud määratleb esimene objekt ja laiendavad või värskendavad hilisemad objektid. MultiChain 2.0 lisab API-d JSON-i üksuste ühendatud objekti hõlpsaks ja kiireks hankimiseks konkreetse võtme või avaldajaga voos.

Need funktsioonid tulenevad levinud viisidest, kuidas arendajad praegu voogusid kasutavad. Teisisõnu, me jälgime, mida paljud inimesed rakenduse tasandil MultiChaini peale ehitavad, ja toome selle funktsionaalsuse ka MultiChaini endasse - mustri, mida kavatseme jätkata. Nüüd, kui voogesitused sisaldavad tüübiteavet, saab neid tulevikus hõlpsasti laiendada, et toetada muid andmevorminguid, nagu XML, HDF5 ja MIME-tuntud sisu. Rääkimata läbipaistva ahelasisese pakkimise ja krüptimise võimalustest.

MultiChain 2.0 toetab ka JCS-objekte tehingute töötlemata metaandmete (st mitte vooüksuste) ning varade väljastamise ja voo loomise sündmuste metaandmeid asemel, mis on MultiChain 1.0-s rakendatud ainult tekstiga võtme- / väärtuspaarideks. listassets API pakub JSONi ühendamist kõigis vara emiteerimissündmustes, nii et iga emiteerimise metaandmed saaksid vara lõplikku kirjeldust tõhusalt uuendada.

Kohandatud tehingufiltrid

Oleme palju mõelnud, kuidas lisada MultiChaini kohandatud programmeeritavad reeglid. Ehkki Ethereumi nutika lepingu paradigma on populaarne, on sellel suure läbilaskevõimega lubatud plokiahelate jaoks mitmeid peamisi puudusi. Esiteks toovad nutikad lepingud globaalse sõltuvuse kogu plokiahela kogu osariigist, mis kahjustab drastiliselt samaaegsust ja jõudlust. Teiseks, nutikad lepingud ei saa takistada valede tehingute kinnistamist plokiahelasse, vaid takistavad ainult neid tehinguid plokiahela andmebaasi oleku värskendamisel. Ehkki pikas perspektiivis eeldame, et Ethereumi ühilduvat virtuaalmasinat pakutakse MultiChaini kõrgetasemelise abstraktsioonina, ei pea me seda madalal valideerimisel õigeks lahenduseks.

MultiChain 2.0 tutvustab teistsugust paradigmat, mida nimetatakse tehingufiltriteks ja mis kinnitavad üksikuid tehinguid ilma ühegi globaalse olekuta. Eeldame, et filtrid kirjutatakse Javascripti ja käivitatakse manustatud käitusmootoris, näiteks v8, mida kasutatakse Google'is Kroom brauser ja Node.js platvorm. Loomulikult peame tagama, et filtrikood töötab plokiahela igas sõlmes identselt, blokeerides kõik mittedeterminismi allikad näiteks aja lugemine, juhuslike arvude kasutamine, võrgule või kettale juurdepääs või matemaatiliste toimingute sooritamine, mis sõltuvad hostiserveri arhitektuurist. Deterministliku Javascripti käituskeskkonna loomine on väljakutse, kuid usume, et (liiga palju ära andmata) on see tulevikus kasulik mitmete teiste MultiChaini funktsioonide jaoks.

Filtritele antakse üle JSON-i objekt, mis kirjeldab üksikut tehingut ja mille struktuur on sarnane väljundiga decoderawtransaction kuid lisaväljadega. Näiteks sisaldab iga JSON-i tehingu sisend struktuuri, mis kirjeldab eelmist kulutatud tehingu väljundit, ja igale aadressile lisatakse loend õigustest, mis sellel aadressil praegu on. Filtri ülesandeks on tagastada Boole'i ​​väärtus, mis näitab, kas tehing on vastuvõetav, ja kui mitte, esitage tekstiline viga, miks see selgitatakse. MultiChaini API sisaldab käske filtrite loomiseks, nende testimiseks eelmistel või uutel tehingutel ning aktiveerimiseks administraatori nõusolekul.

Erinevalt nutikatest lepingutest, kui filtri koodis avastatakse viga, saab selle hõlpsalt uue versiooniga asendada. Sellegipoolest, nagu ka kogu Turing-täielik kood, on filtritel ikkagi oht siseneda lõpmatusse ahelasse. Seda probleemi leevendatakse kahel viisil:

  • Filtreid saavad installida ja aktiveerida ainult keti administraatorid, tingimusel, et neid nõustutakse. See annab igale administraatorile võimaluse enne selle aktiveerimise hääletamist filtri koodi põhjalikult uurida.
  • Kõik korrektselt käituvad sõlmed valideerivad uued tehingud aktiivsete filtrite abil, enne kui need edastatakse oma kaaslaskesõlmedele. Seetõttu, kui tehing saadab filtri lõpmatusse ahelasse, ei tohiks tehing levida kaugemale selle sõlminud sõlmest.

Eeldame, et üks populaarne filtrite rakendus kinnitab vooüksusi. Näiteks võib filter tagada, et voo JSON-üksuste teatud väljad sisaldavad kindlas vahemikus olevaid numbreid. MultiChain 1.0 versioonis tuleb seda tüüpi valideerimine teha rakenduse tasemel, kas vooüksuste kirjutamisel (kui allikas on usaldusväärne) või neid lugedes. Seevastu võimaldab MultiChain 2.0 need reeglid kinnistada pigem plokiahelasse, nagu näiteks kontrollige piiranguid relatsiooniandmebaasis.

MultiChain 2.0 sisaldab kahte lisafunktsiooni, mis muudavad filtrid veelgi võimsamaks. Esiteks tutvustatakse sellega kasutaja määratletud õigusi, mis eksisteerivad koos MultiChaini määratletud kaheksa õigusega. Nagu tavaliste lubade puhul, annavad administraatorid (ja mõnel juhul ka kasutajatega domeeni kasutajad) need konkreetsele aadressile activate privileegid) ja sisalduvad filtritele edastatud JSON-objekti aadresside kõrval. Näiteks võib filter tagada, et ainult konkreetse kasutaja määratletud õigusega aadressid saavad voogu kirjutada teatud tüüpi andmeid või teha tehinguid konkreetse varaga, mis ületab teatud läve.

Teiseks toetab MultiChain 2.0 tavaliste tehingute väljundites kohandatud (binaarseid või JSON) metaandmeid. See võimaldab mis tahes väljundil toimida üldise andmebaasireana, mille omanikuks on sees olev aadress. Filtrid näevad tehingu kulutatud ja loodud väljundites JSON-kirjelduse osana kõiki metaandmeid. Selle tulemusel saab MultiChainist universaalne jagatud andmebaasimootor, kus tehingu kehtivuse määrab selle loodud ja kustutatud ridade kohandatav funktsioon. (Kui see kõlab veidi abstraktselt, toome kindlasti mõned konkreetsed näited.)

Blockchaini värskendamine

Kuna plokiahelad on loodud töötama aastaid, võib nende omadusi olla vaja aja jooksul muuta. MultiChaini praegune versioon pakub juba piisavalt paindlikkust, võimaldades lubade muutmist (sh administraatorite ja kaevurite üksmeelel), uute varade ja voogude loomist ning sõlmede sujuvat lisamist või võrgust eemaldamist. Sellest hoolimata on MultiChain 1.0-s plokiahela põhiline parameetrid, näiteks maksimaalne ploki suurus ja eesmärgi kinnitamise aeg, on keti loomisel fikseeritud ja neid ei saa hiljem muuta.

MultiChain 2.0 lisab plokiahela värskendamise võimaluse, võimaldades paljusid (kuid mitte kõiki) selle parameetreid muuta ahela jätkudes. Sarnaselt muude oluliste toimingutega nõuab ka plokiahela värskendamine kohandatavat administraatori konsensuse taset, kus see tase ise on parameeter, mida saab muuta. Värskendused jõustuvad teatud plokist ja kehtivad pärast seda igale järgmisele plokile kuni järgmise värskenduseni.

Plokiahela parameetrid, mida saab värskendada, hõlmavad järgmist:

  • Protokolli versioon. See võimaldab MultiChaini ühe versiooniga loodud plokiahelat uuendada, et toetada uue versiooni funktsioone, nagu JSON-voo üksused või tehingufiltrid. Tõepoolest, protokolli versioon 10008 versioonis MultiChain 1.0 alfa 29 (ja beetaversioonides kasutatav) on juba seda tüüpi versiooniuuenduste dokumenteerimata toetamisega tulevikukindlad. Kui MultiChain 1.0 plokiahelat on uuendatud 2.0-protokollile, pääseb see juurde ka muudele siin kirjeldatud parameetrimuudatustele.
  • Plokk-keti mastaapimine. Populaarseks muutunud plokiahelad võivad ületada esialgsed väärtused, mis on seatud nende eesmärgi kinnitusajale või maksimaalsele tehingu ja ploki suurusele. MultiChain 2.0 võimaldab neid väärtusi vajadusel suurendada või vähendada.
  • Lubade mudel. MultiChain 2.0 võimaldab värskendada paljusid lubade andmise ja haldusega seotud parameetreid, sealhulgas: (a) anyone-can-* parameetrid, mis kontrollivad plokiahela avamise või sulgemise viise, (b) admin-consensus-* parameetrid, mis määravad teatud toiminguteks vajaliku administraatori konsensuse taseme, ja (c) mining-diversity parameeter, mis kontrollib ümarlaine konsensuse algoritmi täpsust.

Kui see värskendamisfunktsioon on rakendatud, ei tohiks olla põhjust, miks MultiChainis loodud blokeering ei saa töötada mitu aastakümmet või enam.

tulevikku

Oleme juba alustanud tööd MultiChain 2.0-ga ja ootame selle tegevuskava täitmist edasi. Kahtlemata lisatakse ka muid täiustusi. Nagu ka MultiChain 1.0 puhul, on ka meil alfaväljaandeid, et arendajad saaksid rakendamisel uusi funktsioone kasutada ja õppida (ning loomulikult teatada probleemidest või puudustest). Loomulikult jätkame versiooni 1.0 kogu selle perioodi vältel, parandades ilmnenud vead.

Lõpetuseks sooviksin tänada meie arendustiimi eesotsas dr Michael Rozantseviga jätkuva tipptaseme ja raske töö eest. Me näeme MultiChaini otsekohese tarkvaratehnika projektina, kus koodikvaliteet ja testimine loevad ennekõike. Mul on privileeg töötada inimestega, kes suudavad keeruka tootevisiooni muuta sellise märkimisväärse tõhususe ja kiirusega stabiilseks töötavaks tarkvaraks.

Palun postitage kõik kommentaarid LinkedIn.

Ajatempel:

Veel alates Mitmeharuline