Solidity — investicija broj jedan za developere u 2022.
Ako se za Bitcoin može reći da je započeo jednu revoluciju, onda je Ethereum smisao te revolucije podigao na viši nivo.
Kriptovalute su napravile veliki bum, ali mnogi su videli dodatni potencijal decentralizovanih mreža i tražili kako da prošire osnovne ideje Bitcoin protokola na druge aplikacije.
Za takve eksperimente je bilo neophodno razviti adekvatne alate. Tako je nastao Solidity — programski jezik koji će radikalno proširiti funkcionalnosti blockchain-a.
Šta je Solidity?
Solidity je objektno orijentisan programski jezik koji služi za pisanje pametnih ugovora za Ethereum blockchain. On je statički veoma tipiziran jezik koji podržava mehanizme kao što su biblioteke i nasleđivanje. Dizajniran je da radi na Ethereum virtuelnoj mašini (EVM), koja je hostovana na Ethereum nodovima povezanim na blockchain.
Ovaj curly-bracket jezik je ideja Gevina Vuda, jednog od osnivača Ethereuma i čoveka koji je potom osnovao Polkadot. Njegovu ideju iz 2014. je potom pretočio u delo Ethereum tim predvođen Kristijanom Rajtvajsnerom.
Gde leže koreni Solidity-ja?
Solidity je najviše uticaja pokupio od C++. To se ponajviše vidi u sintaksi deklaracija varijabli, sintaksi petlji, konceptu preopterećenja funkcija, implicitnim i eksplicitnim konverzijama tipova, ali i nekim drugim slučajevima.
Takođe, na Solidity je, naročito u njegovoj ranoj fazi, delimično uticao i JavaScript. U ranijim verzijama se ta sličnost ogledala kroz opseg promenljivih na nivou funkcije i ključnu reč var.
Uticaja je imao i Python. Od njega su preuzeti višestuko nasleđivanje, C3 linearizacija i ključna reč super. Semantika dodeljivanja i kopiranja vrednosti je takođe preuzeta iz Pythona.
Uloga Solidity-ja u Ethereum ekosistemu
Da bi se u celosti razumeo princip funkcionisanja Soldity-ja, neophodno je shvatiti i koncepte Tjuringove potpunosti i Tjuringove mašine. Veliki matematičar Alan Tjuring je u svom radu „O izračunljivim brojevima” iz 1936. zamislio mašinu koja bi mogla da reši bilo koju vrstu problema koje su i ljudi sposobni da reše, tj. želeo je da rezonovanje svede na obično računanje.
Da li će se određeni računarski kod izvršiti na određenoj mašini zapravo znači da li ćemo dobiti definitivan odgovor ili će mašina ući u beskonačnu petlju. To znači da se Tjuring-potpunim jezikom smatra sistem pravila za manipulaciju podacima koji može da simulira Tjuringovu mašinu.
Solidity je, dakle, Tjuring-kompletan jezik. To programerima omogućava da napišu bilo kakav program na vrhu Ethereum blockchaina.
Pisanje pametnih ugovora
Kao što je pomenuto, primarna funkcija Solidity programskog jezika je pisanje pametnih ugovora koji su esencija Ethereum platforme.
Pametan ugovor je programski napisana logika, koja je nepromenjiva i deterministička. Izvršavanje pametnih ugovara se inicira tako što se pošalje transakcija na adresu tog ugovora zajedno sa ulaznim podacima.
Pametni ugovori omogućavaju obavljanje kredibilnih transakcija bez posrednika. Nakon što se ugovor primeni na Ethereum mrežu, kad god ga bilo koji čvor pokrene, moraju ga pokrenuti svi čvorovi u Ethereum ekosistemu.
Višeslojnost upotrebe pametnih ugovora u okviru Ethereum okruženja ogleda se kroz različite studije slučaja poslednjih godina. Tako se može reći da je Solidity direktan “krivac” za omogućavanje koncepata kao što su NFT, DeFi, derivati, stablecoini i slično.
Veza Solidity-ja i EVM
Ethereum virtuelna mašina (EVM) je moćan virtuelni stek ugrađen u svaki full Ethereum čvor. Nakon što kompajler transformiše solidity kod u bajt kod, virtuelna mašina ga izvršava. EVM obezbeđuje da je mašinski kod potpuno izolovan od mreže, sistema datoteka ili bilo kog procesa glavnog računara. On nameće svim čvorovima u Ethereum mreži da pokreću iste instrukcije ili operacije, iako su nezavisni jedan od drugog.
Razvojna okruženja za Solidity
IDE ili integrisana razvojna okruženja su alati razvijeni da olakšaju život Solidity programera.
Remix nudi jednostavan način za programere decentralizovanih aplikacija da pišu, pokreću, otklanjaju greške, postavljaju pametne ugovore na blockchain i komuniciraju sa njim. Jedna od glavnih prednosti korišćenja Remixa je što omogućava korišćenje svih dostupnih biblioteka, frejmvorka i alate potrebnih za razvoj pametnih ugovora na Ethereum platformi. Tu je i srpski startap Tenderly koji olakšava debagovanje, razumevanje i real-time praćenje pametnih ugovora.
Ostale IDE platforme koje podržavaju Solidity su Truffle, Hardhat, Microsoft Visual Studio, Microsoft Visual Studio Code i Tendermint.
Specifičnosti jezika
Kao što je pomenuto, Solidity je statički tipiziran jezik. To implicira da zahteva da se svaka varijabla deklariše određenim tipom podataka pre prve upotrebe. Jezik poseduje vrednosne i referentne tipove.
Vrednosni tipovi podataka
Vrednosni tipovi podataka su varijable koje mogu da sadrže samo jednu vrednost određenog tipa. Solidity koristi standardne vrednosne tipove podataka koji se sreću i u drugim jezicima kao što su bool, bytes, int, uint, itd. Ipak, za razliku od drugih jezika postoji tip podataka address u kom se skladište adrese drugih korisnika, ali i pametnih ugovora.
Referentni tipovi podataka
Referentni tipovi su promenljive koje se odnose na adresu u memoriji gde se čuva stvarna vrednost. Uvek je neophodno naznačiti oblast podataka u kojoj se čuva referentni tip: memory, storage ili calldata. Solidity poznaje sledeće referentne tipove podataka:
Struct: Ova funkcija strukture omogućava korisnicima da konstruišu i specifikuju svoje tipove.
Array: Nizovi su kontejneri koji čuvaju više vrednosti istog tipa. Određuju se navođenjem tipa, praćenog uglastim zagradama koje sadrže nula ili više vrednosti tog tipa razdvojenih zarezima. Vrednostima se pristupa putem njihovog indeksa.
Mapping: Ovaj tip podataka označava kontejnere u kojima se skladište parovi ključ/vrednost gde i ključ i vrednost imaju neki tip podataka povezan sa njima.
Kako započeti sa učenjem Solidity-ja?
Prethodni deo je dao samo mali uvid u neke osnovne osobenosti jezika. Učenje Solidity-ja kao relativno mladog jezika može da bude izazovno, ali materijala svakako ne nedostaje.
Zvanična dokumentacija je svakako prvi korak na putu do postanka funkcionalnog Solidity programera. Za dublje ovladavanje znanjem potrebno je kombinovati sve vidove učenja koji su na raspolaganju: video tutorijale kao što je Learning Solidity, blogove Kako naučiti Solidity?, Kako napraviti pametni ugovor?, Kako napraviti decentralizovanu aplikaciju?, potom interaktivne video igre za pravljenje decentralizovanih aplikacija kao što je CryptoZombies.
Od grupa za razmenu informacija korisno je posetiti Solidity na Gitter-u ili Ethereum na StackExchange-u. Za one sa debljim živcima tu je i Solidity komuna na redditu. Ali ipak u malim dozama.
Bitno je napomenuti da iako je Solidity nastao sa ciljem da rešava izazove na Ethereumu, on danas nije vezan isključivo za ovu platformu već se upotrebljava i na brojnim drugim blockchain-ovima kao što su Ethereum Classic, Binance Smart Chain, Avalanche ili Tron, što ide u prilog stanovištu da se može smatrati jezikom koji je dovoljno sazreo.
Google trends za poslednjih pet godina takođe nagoveštava da je Solidity… pa, u trendu.
I plata za Solidity developere takođe.
Iako trendovi ne moraju nužno da predviđaju dalju budućnost, rast Solidity-ja se čini neumoljivim. Razlog tome su, naravno, brojne mogućnosti koje kombinacija tehnologije, entuzijazma i znanja blockchain inženjera može doneti. S tim u vezi, učenje Solidity-ja ne predstavlja samo još jednu veštinu više ili dodatak tech stack-u jednog programera. To je prilika — i to veoma značajna — da se kao deo Ethereum zajednice aktivno istražuju mogućnosti i osmisle rešenja za neke od najvećih nedostataka savremenog društva.
U Decenteru imamo stalno otvoreno mesto za Solidity programera sa iskustvom. Prijavi se da zajedno kodiramo budućnost.