Nutileping

**Nutileping** ehk lepingumonitor (ingl *Smart Contract*) on arvestusraamatu kirje, mis esitab mingit kasutajatevahelist lepingut. Nutilepingud võimaldavad kasutajatel luua ja kinnitada digitaalseid lepinguid ning jõustada ja kontrollida nende lepingute täitmist. Nutilepingute abil loodud lepingud ja tehtud tehingud on plokiahela peal avalikult jälgitavad ning neid ei ole võimalik pärast tehingu sooritamist enam muuta ega tagasi võtta. Nutilepinguid esitles esmakordselt Nick Szabo, kes kasutas seda terminit 1994. aastal.

Nutilepingute eesmärgiks on pakkuda kasutajatele traditsiooniliste lepingutega võrreldes suuremat turvalisust, paremat ökonoomsust ja kiirust ning väiksemaid tehingukulusid. Samuti on täheldatud, et paljude traditsiooniliste lepingute tingimusi ja punkte on võimalik kas osaliselt või täielikult teisendada isetäituvaks ja isejõustuvaks.

## Ajalugu
Kui esimesena mainiti nutilepinguid 1994. aastal, siis praktilised lahendused said võimalikuks alles tänu plokiahela tehnoloogiate tekkimisele 2008. aastal. Esimesed taolised tehnoloogiad, näiteks Bitcoin, toetasid küll nutilepinguid, kuid seda vaid algeliselt. Puudus Turingi-täielikkus ja lihtne viis nutilepingute loomiseks. Selle probleemi lahendamiseks tuli 2013. aastal oma ideega välja Vitalik Buterin, kes võttis eesmärgiks luua keskkond detsentraliseeritud rakenduste jaoks. Selle projekti nimeks sai Ethereum, mis võimaldas luua Turing-täielikke rakendusi, kasutades samal ajal detsentraliseeritud plokiahela tehnoloogiat.

## Tingimused nutilepingu loomiseks
Nutilepingute olemasolu eelduseks on teatavad tingimused:

#Avaliku võtme krüptograafia kasutamine *–* peamiselt turvaliste juurdepääsuvõtmete loomiseks, mille abil saab plokiahela keskkonnas kasutajat omada ja enda tehinguid allkirjastada. 
# Avatud ja detsentraliseeritud infokeskkonna ehk plokiahela olemasolu *–* koht, kus turvaliselt hoiustada nutilepingut ning mis loob nutilepingule töötamiseks vajalikud sisend- ja väljundinfokanalid. 
# Detsentraliseeritud Turing-täieliku täitmiskeskonna olemasolu *–* koht, kus turvaliselt nutilepingu programmi täita, näiteks Ethereum, Codius, Counterparty.

## Turvaprobleemid
Kuna nutilepingute loomise üheks eelduseks on detsentraliseeritud ja avaliku plokiahela kasutamine, siis on sinna üles pandud nutileping kõigile nähtav ja kättesaadav. See loob aga olukorra, kus nutilepingus olevad vead, sealhulgas ka turvaaugud, on kõigile nähtavad. Samuti ei ole enamasti võimalik nutilepingut hiljem muuta, seega leitud vead jäävadki plokiahelasse ja lepingusse alles.

Üks selline rünnak viidi edukalt läbi 2016. aasta juunis The DAO vastu, kus ründaja sai enda kontrolli alla 50 miljoni USA dollari väärtuses Etherit firma Ethereumi kontodelt. The DAO nutilepingute tingimuste tõttu pidi ründaja aga 28 päeva ootama, et raha täielikult enda valdusse saada. Selle aja jooksul otsustasid Ethereumi arendajad lõhestada plokiahela (ingl *hard fork*), mille abil liigutati varastatud raha tagasi nende omanikele.

Nutilepingute turvaprobleemid tulenevadki enamasti nutilepingu enda koodi, kompilaatori ja täitmiskeskonna vigadest, võimalik on ka rünnata plokiahelat ennast. Keerulisust lisavad ka asjaolud, et nutilepingud on kõigile nähtavad, neid ei saa hiljem muuta ning puudub keskne allikas dokumenteerimaks leitud turvaauke, teadaolevaid rünnakuid ja problemaatilisi praktikaid.

## Viited