Bugün tarixə şahidlik etdik. Məşhur DEX protokolu CurveFinance hücuma məruz qaldı, bir neçə hovuzun likvidliyi oğurlandı. İlk araşdırmalara görə, bu, intellektual müqavilə tərtibatçısı Vyper-in günahıdır! Həqiqətən də, bu, inanılmazdır, insanın ağlına gəlmir. İlk statistikaya görə, itki 50 milyon dollardan çoxdur, CRV platforma tokeninin qiyməti bir vaxtlar sıfıra yaxınlaşdı!
Texnologiyanı başa düşməyən dostlara sadə izah edim, biz blokçeyndən istifadə edəndə, çox vaxt blokçeyndə işləyən kodlarla əlaqə saxlayırıq, bu kodlar “ağıllı müqavilə” adlanır.
Ethereum kimi ağıllı müqavilələrə əsaslanan açıq blokçeyn üçün, onun bir standart kodu var ki, bu da üzərində tətbiqlər (həm də dApp, mərkəzləşdirilməmiş tətbiq) hazırlayanlar üçün yazmaq və icra etmək üçün istifadə olunur. Məsələn, Uniswap, Curve kimi tətbiqlər, Ethereum üzərində çalışan dApp-lərdir.
Kompüterin işləməsi üçün əlverişli olsun, yaddaş yerinə qənaət edilsin deyə, zəncirə yazılan standart kod maşın dilinə yaxın, çox yığcam ikilik rəqəmlərdir; insanlar onu birbaşa oxumaq və yazmaqda o qədər də rahat deyil.
Tətbiqləri daha rahat açmaq və oxuyub yazmaq üçün proqram yazmaq məqsədilə çoxlu növ “yüksək səviyyəli dillər” icad ediblər. Ethereum-da vaxtilə üç cür belə dil olub: sintaksisi LISP-ə bənzəyirdi və geniş yayılmadı; sintaksisi Python-a bənzəyirdi — Vitalik (Ethereum-un yaradıcısı) itələdiyi üçün populyarlaşdı və adı Vyperdir; sonuncu sintaksisi isə Javascript-ə bənzəyirdi və buna Solidity deyilir.
Proqramçılar bu yüksək səviyyəli dillərlə ağıllı kontrakt proqramlarını yazandan sonra, blokçeyn Ethereum-un işlədə biləcəyi “maşın dili”ni, yəni standart kodu “tərcümə” etmək üçün “kompilyator” deyilən bir alət proqramından istifadə etməlidirlər.
Görünür, müxtəlif yüksək səviyyəli dillərin öz fərqli kompilyatorları var. Bu da başa düşüləndir: yapon dilindən tərcümə ilə ingilis dilindən tərcümə mütləq fərqli olur. Pis olan odur ki, günah bu kompilyatorun/tərcüməçinin özündə olur.
Bu dəfə Curve hücuma məruz qalanda, Curve hissəsində istifadə olunan Vyper kompilyatorunun müəyyən bir versiyasında qüsur olduğu üçün baş verdi (şübhəli, hələ də araşdırılır). Bu, sanki siz yapon dilində “mən içki içmək istəyirəm” deyirsiniz, tərcüməçi də onu çin dilinə “mən xərçəng yemək istəyirəm” kimi çevirir. Bu nə cür şeydir, dəli olmaqdır!
Şükürlər olsun ki, bu Vyper o qədər də geniş yayılmayıb. Hazırda Ethereum və ona uyğun (kompatibil) zəncirlərdə ən çox istifadə olunan hələ də Soliditydir. İngilis dilində “tərcüməçi” daha aydındır: tərcümə xətası yoxdur — şükür Allaha!
DEX-lərin lideri olan Uniswap ən ən ən erkən dövrlərində təsisçi Hayden məhz Vyper dilində kod yazırdı. Şükür ki, sonradan Hayden peşəkar CTO tutdu və kodu Solidity-ə çevirdilər. Ona görə də bu dəfə Vyper kompilyator problemi Uniswap-a dəymədi. Amma Vyper-dən çox istifadə edən Curve Finance bədbəxt oldu…
Bu qüsurdan doğan problem klassik “yenidən giriş (reentrancy)” problemidir. Yadımdadır, o vaxt 2015-ci ildə The DAO hadisəsi birbaşa olaraq Ethereum-a hardfork yaratdı və ETH ilə ETC-yə parçalandı — məhz bu reentrancy problemi idi, həqiqətən də tarixin lənəti!
Amma o vaxt The DAO-nun reentrancy problemi yüksək səviyyəli dil səviyyəsində baş verirdi — yəni ingiliscədə səhv demişdilər. Məsələ “içmək” əvəzinə “xərçəng yemək” kimi deyil: tərcüməçi səhv çevirməmişdi.
Bu dəfə Curve hadisəsində qorxulu olan odur ki, sən düz demişdin, amma tərcüməçi səhv çevirmişdi; sən isə bunu anlaya bilmirdin (auditor şirkətləri də tərtib olunmuş binar kodu yoxlamır). Nəticə etibarilə, gözlənilmədən ölümcül BUG daxil olub! Bu da bu gün bütün DeFi sənayesinə, hətta ümumilikdə blokçeyn dünyasına bir xəbərdarlıq zəngi vurur!
Bu gün hər kəs — kod yazanlardan tutmuş, kodu auditi edənlərə, hətta üçüncü tərəf auditlərə qədər — kompilyasiya olunmuş binar kodlara baxmır. Hamı kompilyatorun problem yaratmayacağına inanır: sadəcə yüksək səviyyəli dildə kodun düzgün yazıldığını görən kimi, bunun kifayət olduğunu düşünürlər.
Satoshi niyə BTC skriptinə bu qədər güclü ağıllı kontrakt imkanlarını əlavə etmədi? Çünki mürəkkəblik artanda bağışlanmaz səhvlərin yaranmasının qarşısını almaq idi. Bəziləri deyir BTC konservativdir, amma milyonlarla, yüz milyonlarla, hətta milyardlarla dollar dəyərində aktivlər qarşısında diqqətli və konservativ olmaq heç də artıq deyil. Əksəriyyət isə adi insanlardır: onlarla, bir neçə yüz minlərlə dollar itkini kimin üstünə düşürsə, bu, ölümcül zərbə olur.
Bu da Murfeyin qanununun xəbərdarlığını üzə çıxarır: səhv düşə bilən hər hansı bir mərhələ, kifayət qədər uzun vaxt keçəndən sonra mütləq səhv edəcək. Bu dəfə Vyper-in çıxması çox şanslı idi. Bəs gələcəkdə? Əgər Solidity ölümcül boşluq (vulnerability) tapsa? Bütün DeFi — minlərlə protokol, yüz milyardlarla, min milyardlarla aktiv — hər biri qumun üzərində qurulmuş bir möhtəşəm göydələn kimi, ani olaraq dibdən qopacaq, hamısı uçub-dağılacaq… Bu, necə də qorxuludur?
Niyə keçid dövrlərində keçmək çətindir? O “bu və ya başqa” arzunun məqsədinə çatmağa çalışmazdan əvvəl, əvvəlcə özünə bax: “o günə qədər yaşaya biləcəyəmmi?” Çox vaxt yaşamaq elə qələbədir, qalib qalan isə kral olur.