Predstavljamo večkanalne tokove

Izvorno vozlišče: 1213525

Za skupne nespremenljive baze podatkov ključ-vrednost in časovne vrste

Danes smo ponosni, da smo izdali najnovejšo različico MultiChain, ki uvaja ključni nov nabor funkcionalnosti, imenovanega "tokovi". Potoki zagotavljajo naravno abstrakcijo primerov uporabe verige blokov, ki se osredotočajo na splošno iskanje podatkov, časovno označevanje in arhiviranje, namesto na prenos sredstev med udeleženci. Potoki se lahko uporabljajo za izvajanje treh različnih vrst baz podatkov v verigi:

  1. Zbirka podatkov ključ / vrednost ali shramba dokumentov v slogu NoSQL.
  2. Baza časovnih vrst, ki se osredotoča na razvrščanje vnosov.
  3. Zbirka podatkov, ki temelji na identiteti, kjer so vnosi razvrščeni glede na njihovega avtorja.

Te lahko štejemo za "kaj", "kdaj" in "kdo" skupne baze podatkov.

Osnove tokov

V blokovni verigi MultiChain je mogoče ustvariti poljubno število tokov, vsak tok pa deluje kot neodvisna zbirka elementov, ki so samo dodani. Vsak element v toku ima naslednje značilnosti:

  • Eno ali več založnikov ki so ta element digitalno podpisali.
  • Izbirno ključ za priročno poznejše iskanje.
  • nekateri datum, ki lahko obsega od majhnega kosa besedila do veliko megabajtov surovega binarnega zapisa.
  • A Časovni žig, ki je vzeto iz glave bloka, v katerem je postavka potrjena.

V ozadju je vsak element v toku predstavljen s transakcijo verige blokov, vendar lahko razvijalci berejo in pišejo tokove, ne da bi se zavedali tega osnovnega mehanizma. (Naprednejši uporabniki lahko uporabljajo surove transakcije za zapisovanje v več tokov, izdajanje ali prenos sredstev in / ali dodelitev dovoljenj v eni atomski transakciji.)

Potoki se na več načinov integrirajo s sistemom dovoljenj MultiChain. Prvič, tokove lahko ustvarijo samo tisti, ki imajo za to dovoljenje, na enak način kot sredstva lahko izdajo samo določeni naslovi. Ko je tok ustvarjen, je odprt ali zaprt. Odprti tokovi lahko zapišejo vsi, ki imajo dovoljenje za pošiljanje transakcije verige blokov, medtem ko so zaprti tokovi omejeni na spremenljiv seznam dovoljenih naslovov. V slednjem primeru ima vsak tok enega ali več skrbnikov, ki lahko sčasoma spremenijo ta dovoljenja za pisanje.

Vsak verižni blok ima neobvezen „korenski“ tok, ki je opredeljen v njegovem parametri in obstaja od trenutka, ko je veriga ustvarjena. To omogoča, da se veriga blokov takoj uporabi za shranjevanje in pridobivanje podatkov, ne da bi čakali, da se tok izrecno ustvari.

Kot sem že razpravljali prej, zaupnost je največji izziv v velikem številu primerov uporabe verige blokov. To je zato, ker vsako vozlišče v verigi blokov vidi celotno kopijo vsebine celotne verige. Tokovi zagotavljajo naraven način za podporo šifriranim podatkom na verigi blokov, kot sledi:

  1. Udeleženci uporabljajo en tok za distribucijo svojih javnih ključev za katero koli shemo kriptografije z javnimi ključi.
  2. Za objavo podatkov se uporablja drugi tok, kjer je vsak del podatkov šifriran s simetrično kriptografijo z edinstvenim ključem.
  3. Tretji tok omogoča dostop do podatkov. Za vsakega udeleženca, ki bi moral videti del podatkov, se ustvari vnos v toku, ki vsebuje tajni ključ teh podatkov, šifriran z javnim ključem tega udeleženca.

To zagotavlja učinkovit način za arhiviranje podatkov v verigi blokov, hkrati pa so vidni samo nekaterim udeležencem.

Pridobivanje iz tokov

Bistvena vrednost tokov je v indeksiranju in iskanju. Vsako vozlišče lahko izbere, na katere tokove se bo naročil, pri čemer veriga blokov zagotavlja, da bodo vsa vozlišča, ki so naročena na določen tok, videla iste elemente znotraj. (Vozlišče je mogoče konfigurirati tudi za samodejno naročanje na vsak nov ustvarjeni tok.)

Če je vozlišče naročeno na tok, je mogoče informacije pridobiti iz tega toka na več načinov:

  • Pridobivanje elementov iz toka po vrstnem redu.
  • Pridobivanje predmetov z določenim ključem.
  • Pridobivanje predmetov, ki jih je podpisal določen založnik.
  • Naštevanje ključev, uporabljenih v toku, s številom elementov za vsak ključ.
  • Naštevanje založnikov v toku s številom elementov.

Kot je bilo omenjeno na začetku, ti načini iskanja omogočajo uporabo tokov baze podatkov ključ-vrednost, zbirke podatkov o časovnih vrstah podatkovne baze, ki temeljijo na identiteti. Ponujajo se vsi API-ji za iskanje Začetek in štetje parametri, ki omogočajo učinkovito pridobivanje pododdelkov dolgih seznamov (kot stavek LIMIT v SQL). Negativne vrednosti za Začetek omogoči nalaganje najnovejših predmetov.

Pretoki lahko vsebujejo več elementov z istim ključem, kar naravno rešuje napetost med nespremenljivostjo verige blokov in potrebo po posodobitvi baze podatkov. Vsakemu učinkovitemu 'vnosu' baze podatkov bi moral biti dodeljen unikatni ključ v vaši aplikaciji, pri čemer je vsaka posodobitev tega vnosa predstavljena z novim elementom toka s ključem. API-je za pridobivanje tokov MultiChain lahko nato uporabite za: (a) pridobivanje prve ali zadnje različice določenega vnosa, (b) pridobivanje celotne zgodovine različic za vnos, (c) pridobivanje informacij o več vnosih, vključno s prvim in zadnjim različice vsakega.

Upoštevajte, da lahko zaradi enakovredne arhitekture blokovne verige predmeti v toku prispejo do različnih vozlišč v različnih vrstnih razredih, MultiChain pa omogoča, da se predmeti pridobijo, preden so v bloku "potrjeni". Posledično vsi API-ji za iskanje ponujajo izbiro med globalnim (privzetim) ali lokalnim naročanjem. Globalno naročanje zagotavlja, da ko je veriga dosegla konsenz, vsa vozlišča prejmejo enake odzive iz istih klicev API. Lokalno naročanje zagotavlja, da se za katero koli vozlišče urejanje elementov toka med klici API ne bo nikoli spremenilo. Vsaka aplikacija lahko naredi ustrezno izbiro za svoje potrebe.

Potoki in načrt MultiChain

Z izdajo tokov smo zaključili zadnje večje delo za MultiChain 1.0 in smo zdaj na dobri poti do beta različice. Pričakujemo, da bomo v naslednjih nekaj mesecih razširili naš interni testni paket (že precej velik!), Zaključili vrata za Windows in Mac, dodali še nekaj uporabnih API-jev in posodobili Explorer za tokove, prilagajanje vidikov mehanizma soglasja, sprostitev našega spletnega predstavitvenega dela in na splošno pospravljanje kode in sporočil o pomoči. Najpomembneje je, da bomo še naprej odpravljali morebitne napake, takoj ko jih odkrijemo, da naše napake ne bodo motile vašega dela.

Kdaj se potoki dolgoročno prilegajo načrtu MultiChain? Korak nazaj, MultiChain zdaj ponuja tri področja funkcionalnosti na visoki ravni:

  • Dovoljenja za nadzor nad tem, kdo se lahko poveže, izvaja transakcije, ustvarja sredstva / tokove, mine / potrjuje in upravlja.
  • Sredstva vključno z izdajo, ponovno izdajo, prenosom, atomsko izmenjavo, hrambo in uničenjem.
  • Potoki z API-ji za ustvarjanje tokov, pisanje, naročanje, indeksiranje in pridobivanje.

Kaj je naslednje na tem seznamu po izdaji MultiChain 1.0 (in premium različice)? Če pogledate API ukaz ki se uporablja za ustvarjanje tokov, boste opazili na videz odvečen parameter s fiksno vrednostjo stream. Ta parameter bo v prihodnosti MultiChain podpiral druge vrste entitet na visoki ravni.

Možne prihodnje vrednosti parametra vključujejo evm (za Ethereum-kompatibilni navidezni stroj), sql (za zbirko podatkov v slogu SQL) ali celo wiki (za skupno urejeno besedilo). Vsak subjekt v skupni rabi, katerega stanje določa urejena serija sprememb, je potencialni kandidat. Vsaka taka entiteta bo potrebovala: (a) API-je, ki zagotavljajo pravo abstrakcijo za posodabljanje njenega stanja, (b) ustrezne mehanizme za naročena vozlišča za sledenje tega stanja in (c) API-je za učinkovito pridobivanje dela ali celotnega stanja. Čakamo, da se naučimo, kateri drugi subjekti na visoki ravni bi bili najbolj uporabni, da jih bomo implementirali mi ali tretje osebe prek vtične arhitekture.

Kaj pa pametne pogodbe?

V splošnem smislu MultiChain uporablja pristop, pri katerem datum je nespremenljivo vdelana v verigo blokov, toda Koda za razlago podatkov v vozlišču ali v aplikacijski plasti. To se namerno razlikuje od paradigme "pametnih pogodb", kot jo ponazarja Ethereum, v katero je koda vdelana v verigo blokov in deluje v navideznem računalniku. V teoriji, ker pametne pogodbe so Turing popoln, lahko reproducirajo vedenje MultiChain ali katere koli druge blockchain platforme. V praksi pa imajo pametne pogodbe v slogu Ethereuma številne boleče pomanjkljivosti:

  • Vsako vozlišče mora izvesti vsak izračun, pa naj bo to zanimivo ali ne. Nasprotno pa se v vozlišču MultiChain vsako vozlišče odloči, na katere tokove se bo naročil, in lahko prezre podatke, ki jih vsebujejo drugi.
  • Navidezni stroj, ki se uporablja za pametne pogodbe, ima drastično slabše zmogljivosti kot koda, ki je bila prvotno sestavljena za določeno računalniško arhitekturo.
  • Koda pametne pogodbe je nespremenljivo vdelana v verigo, kar preprečuje dodajanje funkcij in odpravljanje napak. To je bilo močno prikazano v propad DAO.
  • Transakcije, poslane na pametno pogodbo ni mogoče posodobiti stanje blokovne verige, dokler ni znano njihovo končno naročanje, zaradi narave izračuna splošnega namena. To vodi do zamud (dokler transakcija ni potrjena v bloku), pa tudi do možnih razveljavitev (v primeru vilice v verigi). Nasprotno pa lahko MultiChain vsako vrsto nepotrjene transakcije obravnava na ustrezen način: (a) dohodna sredstva takoj posodobijo nepotrjeno stanje vozlišča, (b) vhodni elementi toka so takoj na voljo, njihovo globalno naročanje pa je naknadno dokončano, (c) spremembe dovoljenj se takoj uporabijo in nato predvajajo v dohodnih blokih.

Kljub temu, kot sem že rečeno prejzagotovo ne izključujemo pametnih pogodb kot koristne paradigme za blockchain aplikacije, če in kadar opazimo močne primere uporabe. Vendar bi bile pametne pogodbe v MultiChain izvedene v toku podobnem sloju na vrhu verige blokov, namesto na najnižji ravni transakcije. To bo ohranilo vrhunsko zmogljivost MultiChain za enostavnejše blockchain entitete, kot so sredstva in tokovi, hkrati pa ponuja počasnejše računanje v verigi, kjer je to res potrebno. A takšnih primerov je manj, kot bi si mislili.

 

Prosimo, pošljite kakršne koli pripombe na LinkedIn.

 

Tehnični dodatek

Vsi ukazi, povezani s tokovi, so v celoti dokumentirani v Stran MultiChain API, a tukaj je kratek povzetek:

  • Ustvari tok s pomočjo create stream or createfrom ... stream
  • Dodajte element v tok z publish or publishfrom
  • Pridobite seznam tokov z liststreams
  • Začnite ali ustavite sledenje toku z subscribe in unsubscribe
  • Pridobite elemente v toku s pomočjo liststreamitems, liststreamkeyitems in liststreampublisheritems
  • Seznam ključev pretoka in založnikov z liststreamkeys in liststreampublishers
  • Za velike elemente v toku prenesite celotne podatke s pomočjo gettxoutdata (Glej maxshowndata spodaj)
  • Nadzirajte dovoljenja za posamezen tok s klici, kot je grant [address] stream1.write
  • Oglejte si dovoljenja za tok z uporabo listpermissions stream1.*

Nekaj ​​drugih opomb za razvijalce, ki se nanašajo na tokove:

  • O create dovoljenje omogoča naslovu za ustvarjanje tokov.
  • Ustrezna dovoljenja za posamezen tok so write, admin in activate
  • Novo parametri blockchain: root-stream-name (pustite prazno za nobeno), root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • Novo parametri izvajanja: autosubscribe da se samodejno naročite na nove tokove, ustvarjene in maxshowndata za omejitev količine podatkov v odzivih API (glej gettxoutdata zgoraj).
  • Največjo velikost podatkov elementa v toku določi max-std-op-return-size blockchain parameter, pa tudi manjši od maximum-block-size in max-std-tx-size vrednosti minus nekaj sto bajtov.
  • Vozlišča, ki uporabljajo staro obliko denarnice, se ne morejo naročiti na tokove in je treba nadgraditi.

 

Časovni žig:

Več od Večnamenska veriga