• Rezultati Niso Bili Najdeni

Komponente sistema

5.1.1 Pametna pogodba

V arhitekturi platforme StreamAI igra pametna pogodba pomembno vlogo, saj je zadolžena za shranjevanje podatkov o ponudnikih infrastrukture, meto-dah umetne inteligence, podatkih o preroku in za prenos sredstev na ustrezne račune. Skrbi tudi za odobritev najema metode umetne inteligence, pri če-mer uporablja preroka za dostop do podatkov, ki niso shranjeni na verigi blokov. Uporablja nekaj struktur, ki enkapsulirajo sorodne podatke:

1. CProviderhrani podatke o ponudniku infrastrukture. Vsebuje polja za njegovo ime, količino delovnega pomnilnika, število procesorskih jeder, število jeder na grafični kartici in največje dovoljeno število sočasnih

55

izvajalnih nalog. Hrani tudi zasedenost omenjenih parametrov navide-znega stroja.

2. AiMethodhrani podatke o metodi umetne inteligence. Vsebuje njenega kreatorja, ime, potrebno število procesorskih in grafičnih jeder, koli-čino delovnega pomnilnika in ceno najema. Ima tudi polje za IPFS identifikator, ki hrani referenco na podroben opis metode, binarno po-lje, ki v primeru, da je nastavljeno, omogoča najem le avtoriziranim uporabnikom ter identifikator metode na platformi DockerHub (npr.

uporabniško_ime/ime_slike:različica).

3. LockedFunds hrani podatke o rezerviranih sredstvih, ko je najem še v teku. Vsebuje naslove ponudnika infrastrukture, razvijalca metode umetne inteligence in najemnika. Ima tudi polja za zneske, ki jih mora vsak od akterjev prejeti, ko se najem zaključi. Vsebuje zakupljen čas in identifikator metode umetne inteligence.

4. BuyAiData vsebuje podatke, ki so pomembni za zaledni strežnik, da lahko sproži namestitev vsebnika z metodo umetne inteligence na iz-brano vozlišče v Kubernetesovi infrastrukturi. Vsebuje polja za čas na-jema, URL videotoka, identifikator nana-jema, identifikator metode ume-tne inteligence in naslov ponudnika infrastrukture.

V tabeli 5.1 so predstavljeni pomembnejši atributi pametne pogodbe, v tabeli 5.2 vse preslikave (angl. mapping) in v tabeli 5.3 vsi dogodki (angl.

event).

Osrednjo funkcionalnost pametne pogodbe predstavljajo funkcije, ki lahko spreminjajo atribute, prenašajo sredstva, kličejo preroke in izvajajo matema-tične operacije. Javne funkcije, ki so definirane v pametni pogodbi platforme StreamAI so:

1. changeOracleDataje administratorska funkcija, namenjena spreminja-nju podatkov o preroku. Spremenimo lahko vse 3 dele URL naslova,

5.1. KOMPONENTE SISTEMA 57

Atribut Tip Privzeta

vre-dnost

Pomen

methodCounter uint32 0 števec metod umetne inteligence dealIdCounter uint32 0 števec uspešno izvedenih najemov hostCounter uint32 0 števec ponudnikov infrastrukture

admin address kreator pametne pogodbe

feeAccount address račun, kamor se nakazujejo pristoj-bine

feeMake uint 1200000 znesek Wei, ki jih mora plačati raz-vijalec metod umetne inteligence, da svojo metodo objavi na platformi feeTake uint 18 odstotek, ki ga dobi platforma od

vsa-kega najema metode umetne inteli-gence (opomba: 18 predstavlja 1,8 %) minTime uint24 10 minimalen čas najmema (v sekundah) maxTime uint24 10000000 maksimalen čas najmema (v

sekun-dah)

url0 string prvi del URL naslova, ki ga pokliče prerok (npr. http://194.249.2.111:

30081/api/v1/permissions/

allowedToUse?userAddress=) url1 string drugi del URL naslova, ki ga pokliče

prerok (npr. &aiMethodId=)

url2 string tretji del URL naslova, ki ga pokliče prerok (npr. &contractAddress=

0x123...) oracleAddr address naslov preroka

jobId bytes32 prerokov identifikator dela

oracleFee uint256 pristojbina v Wei, ki jo zahteva pre-rok

Tabela 5.1: Imena, tipi, privzete vrednosti in pomeni pomembnejših atri-butov v pametni pogodbi.

Preslikava Iz V Pomen

hosts address CProvider pridobi ponudnika infra-strukture na podlagi na-slova

hostsIndex uint32 address preveri, ali obstaja po-nudnik na indeksu aiMethods uint32 AiMethod pridobi podatke o

me-todi umetne inteligence glede na indeks

providersPrice uint32 mapping(address

=> uint)

pridobi podatke o ceni metode umetne inteli-gence na ponudniku in-frastrukture

eth address uint pridobi sredstva za

ra-čun

locked uint32 LockedFunds pridobi zadržana sred-stva (najem je še v teku) buyAiData bytes32 BuyAiData pridobi podatke o na-jemu za nek identifikator zahteve

Tabela 5.2: Imena preslikav, izhodiščni in ciljni podatkovni tipi ter njihov pomen.

5.1. KOMPONENTE SISTEMA 59

DogodekParametri Pomen ImeTipPomen AssignedDealIddealIduint32identifikatornajemaDogodeksesprožiobuspe- šnemnajemu.Čelnidelupo- rabnikapreusmerinastran zaanalizovideotoka. BuyAi

userBuyingaddressnaslovnajemnikaDogodeksesprožiob uspešnemnajemuin avtorizacijiuporabnika. Zalednidelsprožipostopek namestitvevsebnikaz metodoumetneinteligence.

aiMethodIduint32identifikatormetode umetneinteligence provideraddressnaslovponudnikainfra- strukture timeInSecuint24dolžinanajemavse- kundah dealIduint32identifikatornajema videoStreamUrlstringURLnaslovvideotoka Tabela5.3:Parametridogodkovinnjihovpomen.

naslov preroka, njegov identifikator naloge in zahtevano pristojbino.

Parametri funkcije so:

(a) string url0 predstavlja prvi del URL naslova, (b) string url1 predstavlja drugi del URL naslova,

(c) string url2 predstavlja tretji del URL naslova, (d) address oracleAddr predstavlja naslov preroka,

(e) uint256 oracleFeeje pristojbina v Wei, ki jo moramo poslati ob klicu preroka,

(f) bytes32 jobId je identifikator naloge preroka.

2. changeFeeAccountje administratorska funkcija, namenjena spreminja-nju računa, kamor se nakazujejo pristojbine, ki jih plačujejo uporab-niki, razvijalci metod umetne inteligence in ponudniki infrastrukture.

Parameter funkcije je address feeAccount, ki predstavlja nov naslov računa za pristojbine.

3. changeFeeMake je administratorska funkcija, namenjena spreminjanju pristojbine, ki jo morajo razvijalci metod umetne inteligence plačati za njihovo objavo na platformi. Sprejme parameter uint feeMake, ki ponazarja znesek v enoti Wei.

4. changeFeeTake je administratorska funkcija, namenjena spreminjanju odstotka od vsakega najema, ki ga pobere platforma. Sredstva se pre-nesejo na račun, ki je shranjen v atributufeeAccount. Sprejme para-meter uint16 feeTake, ki ponazarja desetkratnik odstotne vrednosti (npr. vrednost 32 predstavlja 3,2 %).

5. allowCProviderje administratorska funkcija, ki se uporablja za ozna-čevanje ponudnika infrastrukture kot dovoljenega ali nedovoljenega. To potrditev mora izvesti administrator, ko se se ponudnik registrira v sistem. Parametra funkcije sta:

5.1. KOMPONENTE SISTEMA 61

(a) address provider predstavlja naslov ponudnika infrastrukture, ki ga spreminjamo,

(b) bool allow označuje, ali je ponudnik dovoljen ali nedovoljen.

6. allowAiMethod je administratorska funkcija, namenjena označevanju metode umetne inteligence kot dovoljene ali nedovoljene. Ko razvija-lec metodo objavi na platformo, jo mora administrator pregledati in potrditi njeno ustreznost. Parametra funkcije sta:

(a) uint32 aiMethodIdje enolični identifikator metode umetne inte-ligence, ki jo spreminjamo,

(b) bool allow označuje, ali je metoda dovoljena ali nedovoljena.

7. startje administratorska funkcija, ki jo pokliče zaledni sistem tik pre-den začne s postopkom namestitve vsebnika v oblačno infrastrukturo.

Sprejme parameter uint32 dealId, ki označuje enolični identifikator najema.

8. deliveredje administratorska funkcija, ki jo pokliče zaledni sistem po poteku zakupljenega časa. Ob tem izbriše vsebnik z metodo umetne inteligence in uporabniku se prikaže obvestilo o končanju analize.

9. newCProvider je funkcija, s pomočjo katere lahko uporabnik ustvari ponudnika infrastrukture. Parametri funkcije so:

(a) string name predstavlja ime ponudnika infrastrukture,

(b) uint32 maxRam predstavlja količino delovnega polnilnika v MB, (c) uint24 maxCpus predstavlja število procesorskih jeder,

(d) uint24 maxGpus predstavlja število jeder grafične kartice,

(e) uint24 maxRunningpredstavlja število dovoljenih sočasnih name-stitev.

10. changeCProviderData je funkcija, s pomočjo katere lahko ponudnik infrastrukture ureja podrobnosti infrastrukture. Ne more spreminjati imena. Parametri funkcije so:

(a) uint32 maxRam predstavlja novo količino delovnega polnilnika v MB,

(b) uint24 maxCpus predstavlja novo število procesorskih jeder, (c) uint24 maxGpus predstavlja novo število jeder grafične kartice, (d) uint24 maxRunning predstavlja novo število dovoljenih sočasnih

namestitev.

11. setContainerCostje funkcija, s pomočjo katere ponudnik infrastruk-ture nastavi ceno izvajanja določene metode umetne inteligence. Para-metra funkcije sta:

(a) uint32 aiMethodId je enolični identifikator metode umetne inte-ligence, za katero nastavljamo ceno,

(b) uint containerCost predstavlja ceno izvajanja na sekundo v enoti Wei.

12. sell je funkcija, ki razvijalcem metod umetne inteligence omogoča dodajanje nove metode na platformo. Parametri funkcije so:

(a) string name predstavlja ime metode,

(b) uint32 ram predstavlja zahtevano količino delovnega pomnilnika v MB,

(c) uint24 cpus predstavlja zahtevano število procesorskih jeder, (d) bool gpu označuje, ali metoda za izvajanje potrebuje grafično

kartico,

(e) uint price predstavlja ceno najema na sekundo v enoti Wei, (f) string ipfsCIDpredstavlja enolični identifikator podrobnega opisa,

ki je objavljen na IPFS,

5.1. KOMPONENTE SISTEMA 63

(g) bool onlyAllowedUsers označuje, ali lahko metodo najamejo le avtorizirani uporabniki,

(h) string dockerHubLink predstavlja enolični identifikator Docker slike na portalu DockerHub.

13. updateAiMethod je funkcija, ki razvijalcem metod umetne inteligence omogoča urejanje že obstoječe metode. Parametri funkcije so:

(a) uint32 aiMethodId predstavlja enolični identifikator metode, ki jo spreminjamo,

(b) string name predstavlja novo ime metode,

(c) uint32 ram predstavlja novo zahtevano količino delovnega po-mnilnika v MB,

(d) uint24 cpus predstavlja novo zahtevano število procesorskih je-der,

(e) bool gpu označuje, ali metoda za izvajanje potrebuje grafično kartico,

(f) uint pricepredstavlja novo ceno najema na sekundo v enoti Wei, (g) bool active označuje, ali je metoda aktivna,

(h) string ipfsCIDpredstavlja nov enolični identifikator podrobnega opisa, ki je objavljen na IPFS,

(i) bool onlyAllowedUsers označuje, ali lahko metodo najamejo le avtorizirani uporabniki,

(j) bool deleted označuje, ali je metoda izbrisana,

(k) string dockerHubLinkpredstavlja nov enolični identifikator Doc-ker slike na portalu DocDoc-kerHub.

14. buy je funkcija, ki uporabnikom omogoča najem metode umetne in-teligence za analizo izbranega videotoka za zakupljen čas. Parametri funkcije so:

(a) uint32 aiMethodId predstavlja enolični identifikator metode, ki jo želimo najeti,

(b) address provider predstavlja izbranega ponudnika infrastruk-ture, kamor želimo namestiti vsebnik,

(c) uint containerPrice predstavlja ceno namestitve izbrane me-tode na izbrano infrastrukturo na sekundo v enoti Wei,

(d) uint aiMethodPricepredstavlja ceno najema izbrane metode na sekundo v enoti Wei,

(e) uint timeInSec predstavlja dolžino najema v sekundah,

(f) uint videoStreamUrl predstavlja URL naslov do videotoka, ki ga želimo analizirati.

15. withdrawomogoča vsem tipom uporabnikov prenos zadržanih sredstev na njihov ETH račun.

16. isUserAllowedToUseMethod je zasebna funkcija, ki se uporablja za preverjanje, ali je uporabnik avtoriziran za najem metode umetne in-teligence. Zgradi zahtevo v ustreznem formatu in jo pošlje preroku.

Parametra funkcije sta:

(a) address user predstavlja naslov uporabnika, za katerega želimo preveriti pravico do najema,

(b) uint32 aiMethodId predstavlja enolični identifikator metode.

17. fulfill je javna funkcija, ki jo pokliče prerok, da zapiše zunanje po-datke nazaj na verigo blokov. Rezultat prejmemo v obliki dveh para-metrov:

(a) bytes32 requestId predstavlja enolični identifikator zahteve, ki je bila poslana preroku,

(b) uint256 allowIntpredstavlja rezultat poizvedbe o avtorizirano-sti uporabnika za določeno metodo. Če je enak 1, je uporabnik

5.1. KOMPONENTE SISTEMA 65

avtoriziran in nadaljujemo s postopkom namestitve vsebnika. V nasprotnem primeru zavrnemo zahtevo.

Pametna pogodba lahko dostopa le do podatkov na verigi blokov. Za dostop do zunanjih podatkov potrebuje preroka, ki je zmožen te podatke poslati na verigo blokov v obliki povratnega klica s parametri, ki vsebujejo rezultat. Shematski prikaz uporabe preroka je prikazan na sliki 5.1.

sendChainlinkRequest

odgovor: 0 ali 1

Slika 5.1: Potek zahteve od pametne pogodbe do preroka in nazadnje do REST API strežnika, ki preroku odgovori z binarnim odgovorom. Prerok nato rezultat zapiše na verigo blokov s klicem funkcije fulfill.

5.1.2 Čelni del – spletna aplikacija

Pri razvoju čelnega dela smo upoštevali moderne smernice za strukturiranje Vue projekta [127, 128]. Projekt smo v grobem razdelili na imenike, prikazane na sliki 5.2. Njihov pomen je:

1. Imenik assets vsebuje vse CSS in SCSS datoteke, v katerih so defi-nirani stili spletne strani. SCSS je nadgradnja jezika CSS in omogoča uporabo spremenljivk, hierarhijo, funkcije in mnoge druge izboljšave, ki olajšajo in pohitrijo razvoj ter vzdrževanje.

2. Imenik components vsebuje vse vizualne komponente spletne strani.

Vključuje:

(a) Imenik common vsebuje elemente, ki so skupni vsem podstranem.

V našem primeru sta to zgornji in stranski navigacijski meni.

(b) Imenik pages vsebuje vse podstrani aplikacije. Dalje je razdeljen na smiselne funkcionalne celote oz. skupine podstrani, ki opra-vljajo podobno nalogo. V primeru aplikacije StreamAI so primeri funkcionalnih celot upravljanje z videotokovi, nadzorna plošča, upravljanje z metodami umetne inteligence in stran za najem.

(c) Imenikwidgetsvsebuje gradnike, ki se lahko pojavijo na več stra-neh. Vue to omogoča z uporabo t.i. komponent, ki jih vključimo v druge strani in jim podamo potrebne parametre za prikaz.

3. Imenik helpersvsebuje pomožne funkcije za delo s pametno pogodbo, datumi, objekti, pretvorbami med podatkovnimi tipi in nekaj konstant, ki se uporabljajo v vseh delih aplikacije.

4. Imenik store vsebuje funkcije za delo z Vuex knjižnico za branje in spreminjanje globalnega stanja aplikacije. V globalnem stanju je shra-njen trenutno prijavljen uporabnik.

5. Datoteki App.vue in main.js sta temeljni datoteki vsakega Vue pro-jekta. Vsebujeta inicializacijsko kodo in osnovni pogled, ki ga upora-bljajo vse druge strani.

6. Datoteka routes.js vsebuje vse podstrani in naslov, na katerem so dostopne. Za končno točko (npr. /dashboard) navedemo, katera kom-ponenta (npr. Dashboard.vue) naj se odpre ob obisku te podstrani.

Za dostop in klic funkcij pametne pogodbe uporabljamo knjižnico web3.

Pametno pogodbo v pomnilnik naložimo tako, da konstruktorju podamo ABI datoteko1, ki smo jo dobili pri prevajanju pametne pogodbe. Spodnji izsek kode prikazuje inicializacijo objekta, ki se uporablja za interakcijo s pametno pogodbo in pridobivanje vrednosti enega od atributov.

1Seznam funkcij in njihovih argumentov v JSON formatu.

5.1. KOMPONENTE SISTEMA 67

Slika 5.2: Visokonivojska struktura Vue projekta za čelni del aplikacije StreamAI.

try {

// inicializiraj web3 vmesnik za dostop do pametne pogodbe web3 = createAlchemyWeb3(

process.env.VUE_APP_ALCHEMY_URL_WSS );

sc = new web3.eth.Contract(

contractData,

process.env.VUE_APP_CONTRACT_ADDRESS );

} catch (err) {

console.error(’Could not set up web3.’);

console.error(err);

process.exit(1);

}

// pridobi pristojbino za objavo metode umetne inteligence var feeMake = await sc.methods.feeMake().call();

Aplikacija uporablja dve izvajalni okolji, razvojno in produkcijsko. Vsako od okolij vsebuje drug naslov pametne pogodbe in URL naslov do zalednega dela. Ne želimo, da s testiranjem aplikacije na lokalnem računalniku ali na testnem strežniku spreminjamo produkcijsko podatkovno bazo, kjer so shra-njeni podatki končnih strank. V Vue aplikaciji vrednosti okoljskih spremen-ljivk za posamezno okolje definiramo v .env.{okolje} datoteki, ki vsebuje vrednosti v obliki ključ-vrednost. Tipične vrednosti v teh datotekah so URL povezava do zalednega sistema, ključi za dostop do zunanjih storitev in kon-figuracijske vrednosti aplikacije.

5.1.3 Zaledni strežnik – Java SpringBoot

Osnovno arhitekturo Java SpringBoot aplikacij smo predstavili že v poglavju 4.2.3 Aplikacijski strežnik – Java Spring Boot. HTTP zahtevo prevzame krmilnik in jo preda storitvenemu nivoju, ki običajno dostopa do baze in izvede zahtevano operacijo. Pri tem se poslužujemo tudi koncepta vstavljanja odvisnosti. Struktura projekta je prikazana na sliki 5.3.

5.1. KOMPONENTE SISTEMA 69

Slika 5.3: Visokonivojska struktura Java SpringBoot projekta za zaledni del aplikacije StreamAI.

Pomen datotek in imenikov je:

1. Imenik apivsebuje krmilnike, ki sprejmejo HTTP zahtevo na določeni končni točki. Iz zahteve izluščijo morebitne parametre poizvedbe in telo zahtevka.

2. Imenik dao vsebuje javanske vmesnike, kjer so definirane metode za izvajanje poslovne logike – dostopanje do podatkovne baze, klici metod v pametni pogodbi in spremljanje stanja vozlišč v Kubernetesovi gruči.

Poleg vmesnikov so tudi njihove dejanske implementacije.

3. Imenikdatasource vsebuje konfiguracijo Hikari knjižnice, ki se upora-blja za dostop do podatkovne baze.

4. Imenik helpers vsebuje pomožne metode, kot so formatiranje datu-mov, konstante in konfiguracijski objekt.

5. Imenikmodelvsebuje javanske entitete, ki se lahko preslikajo v entitete podatkovne baze.

6. Imenik rowMappers vsebuje pomožne funkcije za preslikovanje podat-kov iz podatpodat-kovne baze v javanske modele.

7. Imenikservicevsebuje visokonovijsko abstrakcijo storitvenega nivoja, ki ga preko vstavljanja odvisnosti uporabimo v krmilnikih.

8. Imenik smartContract vsebuje javanski razred, ustvarjen na podlagi ABI datoteke. Funkcije iz pametne pogodbe so preslikane v javanske metode, vključno s podatkovnimi tipi.

9. Datoteka StreamAiApplication.java je temeljna datoteka vsakega SpringBoot projekta. Vsebuje razred, ki se uporabi ob zagonu aplika-cije. Privzeto je označen z anotacijo @SpringBootApplication, lahko pa dodajamo tudi druge.

Krmilniki, storitve in modeli SpringBoot StreamAI zalednega dela so pri-kazani na sliki 5.4.

Zaledni del odjemalcem izpostavlja REST API končne točke, ki spreje-majo in vračajo JSON objekte. Končne toče so predstavljene v tabeli 5.4.

Krmilnik Končna točka HTTP

metoda

GET pridobi stanje voz-lišč v Kubernetesovi gruči

5.1. KOMPONENTE SISTEMA 71

UserMethod Permission

isUserAllowed-ToUseMethod

GET vrni logično vrednost, ki označuje, ali upo-rabnik lahko najame metodo umetne inte-ligence

isUserAllowed-ToUseMethodInt

GET vrni numerično vre-dnost, ki označuje, ali uporabnik lahko

GET pridobi seznam upo-rabnikov, ki imajo

POST dodaj uporabnika, ki lahko najame metodo dovolje-nih za najem metode umetne inteligence VideoStream addVideoStream POST dodaj nov videotok

GET pridobi videotok z enoličnim identifika-torjem

updateVideo-StreamById

PUT posodobi videotok z enoličnim identifika-torjem

deleteVideo-StreamById

DELETE izbriši videotok z eno-ličnim identifikator-jem

Tabela 5.4: Kočne točke REST API zalednega sistema.

Prav tako kot čelni del tudi zaledni del uporablja dve izvajalni okolji – razvojno in produkcijsko. Nastavitve za posamezno okolje definiramo v dato-tekiapplication-{okolje}.yml, skupne nastavitve pa vapplication.yml.

Čelni in zaledni del se morata izvajati v istem okolju – če je čelni del zagnan v razvojnem okolju, mora biti tudi zaledni.