Tutvustame MultiChaini vooge

Allikasõlm: 1213525

Jagatud muutumatute võtmeväärtuste ja aegridade andmebaaside jaoks

Täna avaldame uhkusega MultiChaini uusima versiooni, mis rakendab uut olulist funktsioonide komplekti, mida nimetatakse "voogudeks". Vood pakuvad loomulikku abstraktsiooni plokiahela kasutusjuhtudel, mis keskenduvad üldisele andmete otsimisele, ajatemplile ja arhiveerimisele, mitte varade ülekandmisele osalejate vahel. Vooge saab kasutada kolme erinevat tüüpi andmebaaside rakendamiseks ahelas:

  1. Võtmeväärtuste andmebaas või dokumendihoidla NoSQL-i stiilis.
  2. Aegridade andmebaas, mis keskendub kirjete järjestamisele.
  3. Identiteedipõhine andmebaas, kus kirjed liigitatakse nende autori järgi.

Neid võib käsitleda jagatud andmebaasi "mis", "millal" ja "kes" all.

Voogesituse põhitõed

MultiChaini plokiahelas saab luua mis tahes arvu vooge ja iga voog toimib iseseisva ainult lisatava üksuste kogumina. Igal voo üksusel on järgmised omadused.

  • Üks või mitu kirjastajad kes on selle üksuse digitaalselt allkirjastanud.
  • Valikuline võti mugavaks hilisemaks kättesaamiseks.
  • mõned andmed, mis võib ulatuda väikesest tekstiosast kuni mitme megabaidi toorbinaarfailini.
  • A ajatempel, mis on võetud selle ploki päisest, milles üksus on kinnitatud.

Kulisside taga kujutab voo iga üksust plokiahela tehing, kuid arendajad saavad lugeda ja kirjutada vooge ilma selle aluseks olevast mehhanismist teadmata. (Kogenumad kasutajad saavad kasutada töötlemata tehingud mitmesse voogu kirjutamiseks, varade väljastamiseks või ülekandmiseks ja/või lubade määramiseks ühe aatomitehinguga.)

Vood integreeruvad MultiChaini lubade süsteemiga mitmel viisil. Esiteks saavad vooge luua ainult need, kellel on selleks luba, samamoodi nagu varasid saavad väljastada ainult teatud aadressid. Kui voog luuakse, on see avatud või suletud. Avatud voogusid saavad kirjutada kõik, kellel on luba plokiahela tehingut saata, samas kui suletud voogusid piiratakse muudetava lubatud aadresside loendiga. Viimasel juhul on igal vool üks või mitu administraatorit, kes saavad neid kirjutamisõigusi aja jooksul muuta.

Igal plokiahelal on valikuline juurvoog, mis on selles määratletud parameetrid ja eksisteerib keti loomise hetkest. See võimaldab plokiahelat koheselt kasutada andmete salvestamiseks ja toomiseks, ootamata voo selgesõnalist loomist.

Nagu ma olen varem arutatud, on konfidentsiaalsus paljude plokiahela kasutusjuhtude puhul suurim väljakutse. Selle põhjuseks on asjaolu, et plokiahela iga sõlm näeb kogu ahela sisu täielikku koopiat. Vood pakuvad loomulikku viisi plokiahelas krüpteeritud andmete toetamiseks järgmiselt.

  1. Osalejad kasutavad ühte voogu oma avalike võtmete levitamiseks mis tahes avaliku võtmega krüptograafiaskeemi jaoks.
  2. Andmete avaldamiseks kasutatakse teist voogu, kus iga andmeosa krüpteeritakse sümmeetrilise krüptograafia abil unikaalse võtmega.
  3. Kolmas voog pakub juurdepääsu andmetele. Iga osaleja jaoks, kes peaks andmeid nägema, luuakse vookirje, mis sisaldab nende andmete salajast võtit, krüpteerituna selle osaleja avaliku võtmega.

See on tõhus viis andmete arhiivimiseks plokiahelas, muutes need nähtavaks ainult teatud osalejatele.

Otsimine voogudest

Voogude põhiväärtus on indekseerimine ja otsimine. Iga sõlm saab valida, milliseid vooge tellida, kusjuures plokiahel tagab, et kõik sõlmed, mis tellivad teatud voo, näevad sees samu üksusi. (Sõlm saab ka konfigureerida nii, et see tellib automaatselt iga uue loodud voo.)

Kui sõlm on voogu tellinud, saab sellest voost teavet hankida mitmel viisil.

  • Üksuste toomine voost järjekorras.
  • Üksuste toomine kindla võtmega.
  • Konkreetse väljaandja allkirjastatud üksuste toomine.
  • Voos kasutatavate võtmete loend koos iga võtme üksuste arvuga.
  • Väljaandjate loetlemine voogu koos üksuste arvuga.

Nagu alguses mainitud, võimaldavad need otsingumeetodid vooge kasutada võtmeväärtuse andmebaasid, aegridade andmebaasid ja identiteedipõhised andmebaasid. Kõik otsingu API-d pakuvad algus ja loe parameetrid, mis võimaldavad pikkade loendite alajaotisi tõhusalt hankida (nagu LIMIT-klausel SQL-is). Negatiivsed väärtused algus võimaldab hankida uusimad üksused.

Vood võivad sisaldada mitut sama võtmega üksust ja see lahendab loomulikult pinge plokiahela muutumatuse ja andmebaasi värskendamise vajaduse vahel. Igale tõhusale andmebaasi kirjele tuleks teie rakenduses määrata kordumatu võti, kusjuures iga selle kirje värskendust tähistab uus vooüksus koos selle võtmega. MultiChaini voootsingu API-sid saab seejärel kasutada: (a) antud kirje esimese või viimase versiooni hankimiseks, (b) kirje täieliku versiooniajaloo hankimiseks, (c) teabe hankimiseks mitme kirje, sealhulgas esimese ja viimase kirje kohta. igaühe versioonid.

Pange tähele, et plokiahela peer-to-peer arhitektuuri tõttu võivad voos olevad üksused jõuda erinevatesse sõlmedesse erinevas järjekorras ja MultiChain võimaldab üksusi tuua enne, kui need on blokis "kinnitatud". Selle tulemusena pakuvad kõik otsingu API-d valida globaalse (vaikeseade) või kohaliku järjestuse vahel. Globaalne tellimine tagab, et kui kett on jõudnud konsensuseni, saavad kõik sõlmed samade API-kutsete kaudu samad vastused. Kohalik tellimine tagab, et mis tahes konkreetse sõlme puhul ei muutu voo üksuste järjestus kunagi API-kutsete vahel. Iga rakendus saab teha oma vajadustele vastava valiku.

Vood ja MultiChaini tegevuskava

Voogude avaldamisega oleme lõpetanud viimase suurema töö MultiChain 1.0 jaoks ja oleme nüüd kindlalt teel beetaversioonile. Eeldame, et järgmised paar kuud veedame oma sisemise testikomplekti laiendamiseks (juba üsna suureks!), Windowsi ja Maci pordi viimistlemiseks, kasulike API-de lisamiseks, uurija voogude jaoks konsensusmehhanismi aspektide kohandamine, meie veebidemo avaldamine ning üldiselt koodi ja abisõnumite korrastamine. Kõige tähtsam on see, et jätkame vigade parandamist niipea, kui need avastatakse, et meie vead teie tööd ei segaks.

Kuhu mahuvad vood pikemas perspektiivis MultiChaini tegevuskavasse? Astudes sammu tagasi, pakub MultiChain nüüd kolme kõrgetasemelise funktsionaalsuse valdkonda:

  • Õigused et kontrollida, kes saab ühendada, tehinguid teha, varasid/vooge luua, kaevandada/valideerida ja administreerida.
  • vara sealhulgas emiteerimine, uuesti väljastamine, üleandmine, aatomivahetus, tingdeponeerimine ja hävitamine.
  • Voogud API-dega voogude loomiseks, kirjutamiseks, tellimiseks, indekseerimiseks ja allalaadimiseks.

Mis on selles loendis järgmine pärast MultiChain 1.0 (ja lisatasu versiooni) väljaandmist? Kui vaatate API käsk mida kasutatakse voogude loomiseks, märkate ilmselt üleliigset parameetrit, mille fikseeritud väärtus on stream. See parameeter võimaldab MultiChainil tulevikus toetada teist tüüpi kõrgetasemelisi üksusi.

Parameetri võimalikud tulevased väärtused hõlmavad järgmist evm (an Ethereum-ühilduv virtuaalmasin), sql (SQL-stiilis andmebaasi jaoks) või isegi wiki (koostöös toimetatud teksti jaoks). Potentsiaalne kandidaat on iga jagatud üksus, mille oleku määrab järjestatud muudatuste seeria. Iga selline üksus vajab: (a) API-sid, mis pakuvad selle oleku värskendamiseks õiget abstraktsiooni, (b) vastavaid mehhanisme tellitud sõlmede jaoks selle oleku jälgimiseks ja (c) API-sid oleku osa või kogu oleku tõhusaks toomiseks. Ootame teada, millised teised kõrgetasemelised olemid oleksid kõige kasulikumad, mida meie või kolmandad osapooled pistikprogrammi arhitektuuri kaudu juurutavad.

Aga arukad lepingud?

Üldises mõttes kasutab MultiChain lähenemisviisi, milles andmed on põimitud muutumatult plokiahelasse, kuid kood sõlme või rakenduse kihis olevate andmete tõlgendamiseks. See erineb teadlikult "nutikate lepingute" paradigmast, mille näide on Ethereum, mille puhul kood on manustatud plokiahelasse ja töötab virtuaalses masinas. Teoreetiliselt, sest targad lepingud on Turing valmis, võivad nad reprodutseerida MultiChaini või mõne muu plokiahela platvormi käitumist. Praktikas on aga Ethereumi stiilis nutikatel lepingutel palju valusaid puudujääke:

  • Iga sõlm peab sooritama kõik arvutused, olenemata sellest, kas see pakub huvi või mitte. Seevastu MultiChainis otsustab iga sõlm, milliseid vooge tellida, ja võib ignoreerida teiste sisalduvaid andmeid.
  • Nutikate lepingute jaoks kasutatav virtuaalmasin on drastiliselt halvema jõudlusega kui kood, mis on antud arvutiarhitektuuri jaoks algselt kompileeritud.
  • Nutikas lepingukood on muutumatult ahelasse manustatud, takistades funktsioonide lisamist ja vigade parandamist. Seda demonstreeriti jõuliselt aastal DAO surm.
  • Tehingud saadeti nutikale lepingule ei saa värskendada plokiahela olek, kuni nende lõplik järjestus on teada üldotstarbelise arvutuse olemuse tõttu. See toob kaasa nii viivitusi (kuni tehingu kinnitamiseni plokis) kui ka võimalikke tagasipööramisi (juhul, kui ketis on kahvel). MultiChain saab seevastu käsitleda igat tüüpi kinnitamata tehinguid sobival viisil: (a) sissetulevad varad värskendavad viivitamatult sõlme kinnitamata saldot, (b) sissetulevad vooüksused on kohe saadaval ja nende globaalne järjestamine on seejärel lõpule viidud, (c) load muutuvad. rakendatakse kohe ja esitatakse seejärel uuesti sissetulevates plokkides.

Sellest hoolimata, nagu ma olen ütles enne, ei välista me kindlasti nutikaid lepinguid kui kasulikku paradigmat plokiahela rakenduste jaoks, kui ja kui näeme tugevaid kasutusjuhtumeid. Kuid MultiChainis rakendataks nutikaid lepinguid pigem voolaadse kihina plokiahela peal, mitte madalaimal tehingutasemel. See säilitab MultiChaini suurepärase jõudluse lihtsamate plokiahela üksuste jaoks, nagu varad ja vood, pakkudes samal ajal aeglasemat ahelasisest arvutust seal, kus seda tõesti vaja on. Kuid selliseid juhtumeid on vähem, kui arvata võiks.

 

Palun postitage kõik kommentaarid LinkedIn.

 

Tehniline lisa

Kõik voogudega seotud käsud on täielikult dokumenteeritud MultiChain API leht, kuid siin on lühike kokkuvõte:

  • Looge voog kasutades create stream or createfrom ... stream
  • Lisage üksus voogu rakendusega publish or publishfrom
  • Otsige voogude loendit kasutades liststreams
  • Alustage või lõpetage voo jälgimine rakendusega subscribe ja unsubscribe
  • Otsige vooüksused, kasutades liststreamitems, liststreamkeyitems ja liststreampublisheritems
  • Loetlege voo võtmed ja avaldajad koos liststreamkeys ja liststreampublishers
  • Suurte vooüksuste puhul hankige täielikud andmed kasutades gettxoutdata (Vt maxshowndata allpool)
  • Juhtige voopõhiseid lubasid selliste kõnedega nagu grant [address] stream1.write
  • Vaadake voo lubasid kasutades listpermissions stream1.*

Mõned muud arendaja märkused voogudega seotud kohta:

  • . create luba võimaldab aadressil vooge luua.
  • Asjakohased voopõhised load on write, admin ja activate
  • Uus plokiahela parameetrid: root-stream-name (jätke tühjaks mitte ühegi jaoks), root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • Uus käituse parameetrid: autosubscribe et automaatselt tellida uusi loodud vooge ja maxshowndata API vastuste andmemahu piiramiseks (vt gettxoutdata ülalpool).
  • Vooüksuse andmete maksimaalse suuruse määrab max-std-op-return-size plokiahela parameeter, aga ka väiksem maximum-block-size ja max-std-tx-size väärtused miinus paarsada baiti.
  • Vana rahakotivormingut kasutavad sõlmed ei saa vooge tellida ja tuleks uuendada.

 

Ajatempel:

Veel alates Mitmeharuline