• Rezultati Niso Bili Najdeni

Sodelovanje uporabnikov v ekosistemu

binarni odgovor in ga zapiše v transakcijo. Če je odgovor strežnika pritr-dilen, nadaljujemo z zagonom metode, v nasprotnem primeru uporabniku prikažemo napako o neavtoriziranem dostopu.

3.4 Sodelovanje uporabnikov v ekosistemu

Podjetja, ki delujejo kot posredniki med kupci in prodajalci, se soočajo s temeljno strateško odločitvijo. Ali naj poslujejo kot preprodajalci (npr. tr-govine z živili), ki izdelke najprej kupijo in jih prodajo z maržo? Ali naj delujejo kot večstranske platforme (angl. multisided platform, MSP), kjer si ne lastijo izdelkov, ampak služijo kot stičišče med kupci in prodajalci, pri tem pa od vsakega nakupa dobijo provizijo? Ali naj združijo oba poslovna modela [100]?

AirBnB, Google, Uber, Facebook in Amazon so primeri podjetij, ki so brez večjih produktnih ali procesnih inovacij uspela zamajati obstoječe in-dustrije. Omenjena podjetja temeljijo na modelu platforme, kjer povezujejo različne skupine uporabnikov. Temeljni karakteristiki večstranskih platform sta [101]:

1. Vsaka skupina udeležencev predstavlja stranke večstranske platforme.

2. Večstranske platforme omogočajo neposredno interakcijo med udele-ženci.

Za lažje razumevanje konceptov so na sliki 3.1 predstavljeni različni tipi posrednikov med kupci in prodajalci. Produktna platforma krši prvo karak-teristiko, saj končni kupec ni stranka platforme in ni povezan z njo. Model preprodajalca izpolnjuje prvo katakteristiko, krši pa drugo, saj ni direktne interakcije med različnimi udeleženci. Večstranska platforma pa izpolnjuje obe.

StreamAI je večstranska platforma, ki različnim tipom uporabnikov omo-goča neposredno interakcijo. Prodajalci (razvijalci metod umetne inteligence in ponudniki infrastrukture) na platformi ponujajo svoje izdelke ali storitve,

produktna platforma

Slika 3.1: Umestitev produktne platforme, preprodajalca in večstranske platforme med kupce in prodajalce.

kupci pa jih lahko najamejo za določen čas. Platforma služi le kot vmesni člen, ki združuje različne tipe uporabnikov na enem mestu. Ponuja raznolike storitve in vključuje širok nabor uporabnikov z različnimi potrebami. To dejstvo je v prid prodajalcem, ki lahko pričakujejo, da bojo stranke izrazile zanimanje za njihove storitve, in kupcem, ki bodo zaradi širokega spektra storitev našli tisto, ki ustreza njihovim zahtevam.

Poglavje 4

Ključne tehnologije

Na podlagi prebrane literature in sorodnih aplikacij smo se odločili za upo-rabo najprimernejših programskih jezikov, ogrodij, knjižnic in pristopov za reševanje zastavljenega cilja – implementacija platforme za analizo video-tokov s pomočjo vsebnikov, kjer različni deležniki v sistemu ponujajo vire, jedro sistema pa predstavlja pametna pogodba na verigi blokov Ethereum, ki za avtorizacijo uporabnikov uporablja preroka (angl. oracle).

Aplikacija je v grobem sestavljena iz treh delov:

1. Verige blokov, ki omogoča decentralizirano izvajanje funkcij in hranje-nje podatkov. Pametna pogodba uporablja tudi preroka za pridobiva-nje podatkov iz zalednega sistema za avtorizacijo dostopa do virov.

2. Zalednega dela, ki izpostavlja REST API vmesnik za pridobivanje po-datkov iz PostgreSQL popo-datkovne baze v obliki JSON objektov.

3. Čelnega dela, ki uporabniku ponuja pregleden in interaktiven uporab-niški vmesnik za analizo videotokov. Administratorjem ponuja tudi upravljanje z nastavitvami platforme in vizualizacijo obremenjenosti vozlišč v Kubernetes gruči.

Aplikacija se poganja v Docker vsebniku, orkestrira pa se s pomočjo Ku-bernetesa. Ob kreiranju oznake na Githubu se aplikacija samodejno namesti v produkcijsko okolje s pomočjo GitHub Actions.

31

4.1 Veriga blokov

4.1.1 Ethereum in pametne pogodbe

Ethereum je projekt, čigar namen je zgraditi generalizirano tehnologijo, na kateri je mogoče zgraditi vse koncepte končnega avtomata, ki v osnovi te-meljijo na transakcijah [102]. Nastal je v času, ko so ljudje že spoznali moč Bitcoina in so želeli preseči njegove omejitve pri razvoju aplikacij na verigi blokov. Bitcoin ima skop nabor tipov transakcij, podatkovnih tipov in ve-likosti podatkov, ki jih lahko hrani. Število aplikacij, ki so lahko delovale izključno z verigo blokov, brez podatkov izven nje, je zato bilo majhno. Pro-jekti, ki so potrebovali več svobode in fleksibilnosti pri razvoju, predvsem s ciljem, da se vse dogaja na verigi blokov, so potrebovali novo rešitev. Izkazalo se je, da je za to potrebna nova kriptovaluta – Ethereum [103].

Pojem pametnih pogodb je definiral strokovnjak za kriptografijo Nick Szabo v [104], kjer je opisal možnost računalniškega izvajanja pogodb med dvema strankama brez potrebe po tretji osebi:

Pametne pogodbe so nabor obljub, vključujoč protokole, znotraj katerih stranke izvajajo druge obljube. Protokoli so običajno im-plementirani s programi na računalniškem omrežju ali v drugih oblikah digitalne elektronike, zato so te pogodbe pametnejše od svojih papirnatih prednikov.

Dandanes večina pojem pametne pogodbe povezuje z nespremenljivim determinističnim računalniškim programom, ki teče v kontekstu Ethereu-movega navideznega stroja (EVM) kot del EthereuEthereu-movega omrežnega proto-kola (decentraliziranega Ethereumovega svetovnega računalnika). Razložimo zgornjo definicijo po delih:

1. Računalniški program. Pametne pogodbe so običajni računalniški pro-grami, ki jih največkrat pišemo v programskem jeziku Solidity. Beseda pogodba nima nobenega legalnega pomena.

4.1. VERIGA BLOKOV 33

2. Nespremenljivost. Ko je pametna pogodba postavljena na verigo blo-kov, je ni več možno spremeniti, kar je v modernem programskem in-ženirstvu neobičajno. Če jo želimo popraviti ali nadgraditi, jo moramo ponovno namestiti, pri tem pa dobi tudi nov naslov, kjer je dostopna.

3. Determinizem. Rezultat klica neke funkcije iz pametne pogodbe je enak za vse, ki jo pokličejo. To drži ob predpostavki, da sta enaka kontekst transakcije, ki je sprožila klic funkcije in stanje verige blokov v trenutku izvedbe.

4. Kontekst Ethereumovega navideznega stroja. Pametne pogodbe se iz-vajajo v izoliranem okolju, kjer imajo dostop samo do svojih podatkov, podatkov o transakciji in nekaj splošnih podatkov o verigi blokov (npr.

številka zadnjega bloka).

5. Decentraliziran svetovni računalnik. EVM se izvaja na vsakem vozlišču Ethereuma, vendar si vsa delijo začetno stanje verige blokov. Pričako-vano je, da vsa vrnejo enak rezultat.

Valuta, ki jo uporablja Ethereum, se imenuje eter (ETH, simbolΞ). Pro-tokol jo podeljuje rudarjem kot nagrado za dodajanje blokov. To jih spodbuja k temu, da nadaljujejo s procesiranjem novih transakcij. Vsak Ethereumov račun ima unikaten naslov, sestavljen iz 42 heksadecimalnih znakov, začenši z 0x (npr. 0x71C7656EC7ab88b098defB751B7401B5f6d8976F). Ima ETH sta-nje, ki ga lahko pošilja drugim računom. Najmanjša podenota valute ETH je Wei, ki je enak 10−18 ETH. Poznamo dve vrsti računov, uporabniške račune in pogodbe. Obe vrsti imata ETH stanje, lahko prenašata sredstva na druge račune, kličeta funkcije v pogodbah ali ustvarjata nove pogodbe. V omrežju se na njiju sklicujemo glede na njun naslov.

Transakcije lahko ustvarjajo le uporabniški računi. Veljavne so, če so pod-pisane s privatnim ključem računa. Le-ta je 64 znakov dolg heksadecimalni niz znakov, ki se uporabi za generiranje uporabniškega naslova z algoritmom ECDSA [105]. Ta omogoča pridobitev podpisovalčevega Ethereum naslova iz podpisa transakcije, ne da bi moral poznati njegov privatni ključ.

Pogodbe so poseben tip računov, saj hranijo tudi programsko kodo in omogočajo shranjevanje podatkov. Funkcije znotraj pogodbe lahko spreje-majo parametre in vračajo rezultat klicatelju. Znotraj telesa funkcije lahko izvajajo različne operacije – pošiljanje ETH na druge račune, aritmetične operacije, klice lastnih in zunanjih funkcij, ustvarjanje novih pogodb in pri-dobivanje informacij o trenutno aktivni transakciji. Napisane so v objektno-usmerjenem visokonivojskem programskem jeziku Solidity, ki je nastal pod vplivom jezikov C++, Python in JavaScript. Je statično tipiziran, podpira dedovanje, uporabo knjižnic in kompleksne tipe. Izvaja se na EVM.

Spodnja pametna pogodba prikazuje implementacijo zelo osnovne oblike kriptovalute. Oseba, ki je ustvarila pametno pogodbo, lahko ustvarja po-ljubno število novih kovancev. Vsakdo lahko pošilja kovance drugim brez potrebe po registraciji z uporabniškim imenom in geslom, potreben je samo Ethereum račun.

pragma solidity ^0.4.21;

contract Kovanec {

// ključna beseda "public" omogoča zunanji dostop do // spremenljivk

address public lastnik;

mapping (address => uint) public stanjaNaRacunu;

// dogodki (events) omogočajo odjemalcem odzivanje na // spremembe v pogodbi

event Poslano(address posiljatelj, address prejemnik, uint znesek);

// konstruktor se pokliče, ko se ustvari nova pogodba constructor() public {

// lastnik postane pošiljatelj transakcije lastnik = msg.sender;

4.1. VERIGA BLOKOV 35

}

function ustvari(address prejemnik, uint znesek) public { if (msg.sender != lastnik) return;

stanjaNaRacunu[prejemnik] += znesek;

}

function poslji(address prejemnik, uint znesek) public { if (stanjaNaRacunu[msg.sender] < znesek) return;

stanjaNaRacunu[msg.sender] -= znesek;

stanjaNaRacunu[prejemnik] += znesek;

emit Poslano(msg.sender, prejemnik, znesek);

} }

Da bi preprečili neskončno dolgo izvajanje operacij na računalnikih ru-darjev, se za izvajanje transakcij zaračunava plin (angl. gas). Ob ustvarjanju se za vsako transakcijo zaračuna določeno količino plina, katerega namen je omejiti količino dela, ki je potrebno za izvedbo transakcije in hkrati plačati za njeno izvajanje. Medtem ko EVM izvaja transakcijo, se plin postopoma porablja v skladu s pravili. Če plina zmanjka, se transakcija zavrne. Na-sprotno, če je plina preveč, se neporabljen del vrne pošiljatelju transakcije.

Plin ima dve komponenti, omejitev in ceno. Omejitev plina (angl. gas li-mit) predstavlja največjo količino plina, ki ga je pošiljatelj pripravljen plačati za potrditev transakcije. Najmanjša možna vrednost je 21000. Cena plina (angl. gas price) je število GWei (109 Wei), ki jih je pošiljatelj pripravljen zapraviti za vsako enoto plina.

4.1.2 Avtorizacija uporabnikov – prerok

Razvoj pametne pogodbe je drugačen kot razvoj aplikacije, ki deluje po prin-cipu strežnik – odjemalec. Ključna razlika je, da morajo biti podatki, s ka-terimi operira pametna pogodba, na voljo na verigi blokov. Podatkov ni

možno pridobiti iz drugih zunanjih virov. To ni le omejitev programskega jezika Solidity, ampak celotnega koncepta verige blokov.

Denimo, da razvijamo pametno pogodbo za pobiranje stav. Uporabniki lahko položijo stavo v poljubnem znesku. V primeru, da zmagajo, dobijo sorazmeren delež glede na njihov vložek. V primeru, da njihov favorit izgubi, izgubijo ves vložek. Pametna pogodba zbira stave v valuti ETH, jih shrani v pogodbo in ob zaključku tekme razdeli sredstva med poražence in zmagovalce.

Vendar, kako pogodba ve, kdo je zmagovalec? Zaradi omejitev ne more dostopati do podatkov izven verige blokov, ne more izvesti REST API klica na zunanji strežnik. Uporabiti mora le podatke, ki so na voljo na verigi blokov.

Rešitev se ponuja že sama po sebi – če lahko pametna pogodba dostopa le do podatkov na verigi blokov, jih moramo nekako zapisati nanjo. Ravno to je naloga prerokov. Ti so v osnovi prav tako pametne pogodbe, ki zapisujejo podatke na verigo blokov in tako ostalim pametnim pogodbam omogočajo dostop do njih. Interakcija med verigo blokov, prerokom in decentraliziranimi aplikacijami je predstavljena na sliki 4.1.