A DeFi kevésbé napos oldala

Miközben a DeFi (decentralizált pénzügyi kütyük, amik jellemzően ethereum blockchainen futnak) fénykorukat élik, sajnos beindult a DeFi piacra épülő scam projektek özönvízszerű áramlása is.

Az ami egykoron az ICO mánia volt, majd a fork mánia, majd az IEO mánia… nos ezek ma átcsaptak a governance token mániába. Ha nem sokat mond neked még a DeFi, illetve a governance token téma, akkor olvasd el a téma kapcsán készült értelmező cikkemet:

Egy konkrét példán keresztül had mutassam be, hogy mi is fortyog perpillanat az Ethereum hálózat bugyraiba:

A pokolba vezető út is jószándékkal van kikövezve

A történet valahol ott kezdődött bő egy éve, hogy elindultak a liquidity pool elvű onchain (defi) lending platformok. Ezek közül a leghíresebb a Compound, de ide sorolandó a fulcrum, dydx, aave és még néhány egyéb játékos. Ezek működési elve pofon egyszerű: az ügyfelek tokenjeit egy kalapba (pool) söprik, amiből bárki tud felvenni kölcsönt fedezet ellenében. A kölcsönre fizetett kamat pedig szétoszlik a poolon belül pénzen. Ennek nyilvántartására és kezelésére jöttek létre az interest-bearing tokenek. Az egész ökoszisztéma finomhangolására jöttek létre a governance tokenek, amiken keresztül pl. szavazni lehet, hogy milyen küszöbértékeknél hogyan változzanak a kamatok, stb. Összességében ezek a projektek kifejezetten pozitív példáját mutatják, hogy mire is jó a DAO működés.

Mivel a különböző projektekben különböző mennyiségű szabad likviditás áll rendelkezésre és különböző a dinamikája a kölcsönök felvételének is; ezért logikusan előfordulhat, hogy az egyik platform sokkal több kamatot kínál mint egy másik.

És akkor jöttek a kufárok…

yEarn.finance

A yearn.finance és hasonló megoldások, azt tűzték ki zászlajukra, hogy majd ők szépen lefölözik a kamat profitot a különböző DeFi lending projektek között. Lényegében az ügyfél nem a compoundba tölti be a (pl.) USDC tokenjét, hanem a yEarn.financebe, ami a teljes vagyont szépen mozgatja a különböző lending providerek között, mindig oda rakva, ahol a legtöbb kamatot lehet érte kapni.

Az ügyfelek pedig ezért cserébe ugyanúgy egy interest-bearning tokent kapnak… USDC esetén az yUSDC-t.

Sajnos a valóság az, hogy a yearn.finance nemhogy pozitív eredményt nem képes termelni, de gyakorlatilag konkrétan kivégzi maga alatt a teljes piacot. Ennek megértéséhez nézzünk egy konkrét példát:

A yearn finance yUSDCv3 contractjában jelenleg cirka 360 ezer dollárnyi USDC található. Ennek most a 100%-a az Aave-be van allokálva. Ez persze nem tűnik soknak az Aavenél lévő 229 millió dollárhoz képest, de elég nagy ahhoz, hogy ha átkerül a teljes összeg mondjuk a compoundra, akkor jelentősen módosítja a két platform közötti kamat kínálatot.

Jelenleg (a cikk írásakor) 1,81% az irányadó éves kamat az Aave USDC pooljában, míg pl. a compoundnál ez 1.95%, de a dydx-nél éppen most 3% felett van. Akkor miért is van a teljes vagyon az Aave-n? Nos a válasz nagyon egyszerű: mert nem éri meg átmozgatni, mivel ha megtennék, akkor a compundon vagy a dydx-en vernék le a kamatokat.

A probléma nagyon egyszerű: addig amíg sok-sok egyedi játékos könnyedén tudna arbitrálni a különböző platformok között és akár jelentősebben nyerni is, addig ugyanezen vagyont összegereblyézve már egyáltalán nem lehet ilyen hatékonyan mozgatni.

Persze logikus lenne, hogy akkor a yearn.finance ossza szét úgy ezt a 360 ezer dollárt, hogy mindenhova csak annyit allokáljon amennyivel nem mozdítja el túlságosan a kamatokat. De sajnos ezt nem érezték fontosnak implementálni a fejlesztők.

function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        _supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        _supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        _supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        _supplyAave(balance());
      }
    }

    provider = newProvider;
  }

Nem túlságosan szofisztikált egy rebalance… annyit el kell ismerni.

Hogy miként is hat a YFI sikerére a tény, hogy egyébként a projekt gyakorlati értéke nulla és csak veszteséget okoz? Természetesen hatalmas sikerként!

Annyira sikerként, hogy a YFI (yearn.finance) egyébként nulla hozzáadott értékére máris elindult a másolatok versenye.

YFI, YFV, YFII, YFL, YFFI, YFIVE, YFIE, FYIS, FYIB

Szinte naponta indul el egy újabb YFI klón projekt. Ezek nagy része már arra sem veszi a fáradtságot, hogy legalább leklónozza a contractot, sőt van olyan aminek mégcsak token contractja sincs, simán csak egy blank address-re gyűjti az ethereumokat.

A projektek mindegyike egyetlen dolgot igér: Olyanok leszünk mint a YFI, csak sokkal jobbak! Nem ismerős ez? Mintha hallottuk volna ezt már néhányszor például a Bitcoin kontextusában.

A címben felsorolt coinok mind csak governance tokenek, olyan governance tokenek, amiknek mégcsak governance contractja sincs, nincs is mire szavazni vagy bármilyen jutalmat zsebre tenni.

Persze gondolhatnánk, hogy azért az ICO-n edzett közösség át lát már egy ilyen átverésen, hogy megtanultuk: DYOR! (do your own research)

És nem…

Ássuk a mélyére!

Az elmúlt napokban esettanulmány jelleggel megnéztem az egyik ilyen YFI klón projektet. A választásom a YFIE-re esett, aminek már a weboldal címe is igen beszédes: FYIEXCHANGE.FINANCE (hú micsoda kavalkád)

Ennél talán csak maga a weboldal beszédesebb:

Az igényesség csimborasszója!

A FYIE egyébként egy kifejezetten professzionális contract, ami leírása alapján bonding curve alapú ármegállapítással végezte a presale során a token árának a meghatározását, amiben az is benne van, hogy a tokeneket bármikor el lehet adni is közvetlenül a contractnak.

Ez aztán a komoly szakma színvonal, egyből bele is vetettem magam a bonding curve megvizsgálásába… ám sajnos csak ezt találtam:

    /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth
    /// @param newSellPrice Price the users can sell to the contract
    /// @param newBuyPrice Price users can buy from the contract
    function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public {
        sellPrice = newSellPrice;
        buyPrice = newBuyPrice;
    }

Ennyi… tényleg ennyi… Tehát az a nagy bounding curve, hogy van egy onlyOwner contract hívás, amivel olyan árat állít be magának, amit akar a contract tulajdonosa.

Akkor nézzük ezt a sellToken hívást is, amivel ugye bármikor vissza lehet adni a korábban megvásárolt YFIE tokeneket:

    /// @notice Sell `amount` tokens to contract
    /// @param amount amount of tokens to be sold
    function sell(uint256 amount) public {
        address myAddress = this;
        require(myAddress.balance >= amount * sellPrice);
        _transfer(msg.sender, this, amount);
        msg.sender.transfer(amount * sellPrice);
    }

Tehát a contractban lévő szabad Ether balance terhére valóban vissza lehet váltani bármikor a YFIE tokeneket.

Apró szépséghiba, hogy a contract Ether egyenlege: 0

Ennyit a bonding curveről…

Persze a YFIE governance token mellett elkezdett értékesíteni ugyanez a projekt egy YFIS security tokent is. Hogy mit? Ha van governance token, akkor mi is akar lenni a security token? Oké ne menjünk bele. Nyilvánvaló a projekt gazdája sem nagyon gondolhatta ezt komolyan, amikor sikerült neki így ledeployolnia a contractot:

Tehát valójában ez nem security token, hanem scurity token. Oké…

Ez lehet az a pont, amikor nyilván az olvasóba is felmerül a kérdés, hogy miért érdemes erről egyáltalán írni? Nos nézzük meg példaként a YFIE és YFIS tokenek performanciáját a uniswap tőzsdén:

A YFIE governance tokenei jelenleg közel 100 dollárt érnek és a mai forgalma 1,4 millió dollár. Míg a YFIS 40 dollárt ér és csak ma 400 ezer dollárnyi forgalom volt benne.

Mivel a uniswap egy dex (decentralizált tőzsde), így itt nem lehet trükközni a számokkal. Ezen közel két millió dollárnyi trade mögött bizony tényleg ott volt ennyi érték mozgatása.

Minez úgy, hogy az uniswapra ma konkrétan nem lehetett 400 gWei gasPrice alatt tranzakciót beküldeni, ami annyit tesz, hogy egy vételi vagy eladási megbízás potom 20-25 dollárbe került.

Na most tessék ezt végig gondolni…

Ha valaki igazán perverz késztetés érez, akkor nézzen be a FYIEXCHANGE.FINANCE projekt telegram csatornájára: -link itt-. A csatornán perpillanat 3421 tag örvendezik egész nap és meme tengerben ünnepli, hogy már mennyire sokat kerestek a YFIE tokenen és hogy a csúcs az 1000 dollár vagy inkább már mindjárt a hold. Egyesek már binance listingről pletykálnak, és rendben le is oltanak mindenkit, aki fel meri vetni, hogy ez nem-e esetleg egy scam projekt. Érdekes lesz 1-2 hét múlva ennek a telegram csatornának a tartalma, amikor eljön a kiábrándulás.

De azért DeFi a DeFi, ugye?

Térjünk vissza az eredeti YFI projektre (yearn.finance), ami ugyan hasztalan szereplő és a rebalance elve miatt egyébként ahogy növekszik egyre hasztalanabb lesz… De végülis működik, vannak valós ügyfelei és valóban zajlik a governance rendszer is.

A kérdés az, hogy vajon a YFI esetén valóban érvényesül-e a “decentralizált finance”, tehát tényleg egy önálló dologról van szó, amibe nem lehet belenyúlni kívülről és nem lehet pl. kipakolni a teljes ügyfélvagyont… hiszen pragmatikus ezt gondolnánk a DeFi céljának, nemde?

Példaként az yUSDC contractot vizsgáltam meg. Az elvárás az lenne, hogy a contractból az ügyfelek pénze kizárólag a lender platformok (compound, aave, dydx, fulcrum) poolok között vándorolhat, de egyéb külső helyre nem mehet. Ha ez így lenne, akkor mondhatnánk, hogy ez bizony DeFi. A helyzet az, hogy a fentebb már idézett rebalance() hívás alapján ez a feltételezés látszólag meg is áll. Hiszen a pénzeket valóban csak ezen négy platform között mozgatja a yearn.finance… A baj ott kezdődik amikor az ember megnézi a Lender contract konstruktorát és mondjuk a set_new_COMPOUND() funkciót:

constructor () public ERC20Detailed("iearn USDC", "yUSDC", 6) {
    token = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x9bA00D6856a4eDF4665BcA2C2309936572473B7E);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 2;
    approveToken();
  }
[...]
function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }

Gyakorlatilag a contract ownere BÁRMIKOR át tudja írni például a compound contract addressét. Ez önmagában több szempotból is aggályos:

  1. Ha ez egy DAO, akkor egy ennyire fontos paramétert miért tud egy személyben átírni a contract owner? Miért nincs erre egy governance folyamat? Miért nem tudnak vote-olni a YFI ownerek ennek az átírására?
  2. Ha ezt egy személyben át tudja írni az owner, akkor mi akadályozza meg, hogy mondjuk a compound addressét átírja egy saját maga által bírtokolt ethereum walletre, majd meghívva a rebalance()-t, oda átlapátolja az összes ügyfélpénzt?
  3. Ki ez a személy?

Az utolsó kérdésre a válasz valószínűleg Andre Cronje, a yearn alapítója. Aki ezek szerint bármikor ki tudná pakolni a teljes platformon.

Akkor ebben most mi is a DeFi?

Persze szívesen veregetném meg a saját vállamat, hogy mekkora hibát találtam a yEarn-ben… de valójában csak spanyolviasz… Július 24-én publikálta a Quantstamp Labs a saját security auditját, amiben szerepel a következő megállapítás:

Owner and Governance are not multisig-wallet
Severity: Medium
Description: Similarly to pool 3 above, the current owner and governance addresses are set to 0x2d407ddb06311396fe14d4b49da5f0471447d45c. This gives the address power to transfer tokens (other than YFI and yCRV) to itself.

Hogy ennek a megállapításnak a severity-je miért medium azt nem igazán értem.

Mit jelent ez pontosan? Valójában semmit. Ez nem egy hiba, egyszerűen így van tervezve. Egy szülő életében a legnagyobb mérföldkő, amikor elengedi a gyermeke kezét és hagyja, hogy önállóan élje az életét. Nincs ez másként egy DeFi contracttal sem. A YFI contract nem úgy lett tervezve, hogy valaha is el lehessen engedi a kezét. Az owner mindig ott lesz a contract felett. Ez persze nem jelenti azt, hogy pl. Andre Cronje valaha is le fog lépni az ügyfelek pénzével, ugyanúgy, sőt kifejezetten valószínű, hogy neki sokkal inkább megéri ezt csinálni amíg megy a DeFi szekere, hiszen “first-mover”.

A probléma csak az mindezzel, hogy a DeFi nem úgy van eladva, hogy akkor innentől megbízunk Andre Cronjeben, hanem úgy, hogy nem kell senkiben megbíznunk, hiszen a pénzünk feletti szabad rendelkezés jogát nem veszítjük el és senki nem tudja ellopni a pénzünket. Nos… ez például ebben a konkrét esetben egyáltalán nem igaz.

Hogyan tovább?

Biztosan nem szeretném azt a képet sugallni, hogy a YFI, a Curve és a többi hasonló platform teljesen hasztalan (még ha az is), azt sem szeretném sugallni, hogy ezekből bármikor ki lehet pakolni az ügyfelek pénzét (még ha ki is lehet), azt viszont szeretném, ha az olvasó a cikk elolvasása után tisztán látná, hogy mi is ma a DeFi és mit jelent ez számára. Ezek a megoldás a látszólagos transzparencián kívül semmivel sem adnak többet mint bármely custody alapú lending platform.

A következő hetekben tervezem alaposabban atomjaira szedni a jelenlegi DeFi univerzumot és közvetlenül diskurálni is az ökoszisztem prominenseivel. Meglátjuk mi sül ki belőle. Ha bármire is fogok jutni… nos akkor folytatása következik…

Bookmark the permalink.

3 Comments

  1. Vajon mi kovetkezik mindebbol az eth arfolyamara nezve?

  2. gerebje–> gereblye please

Leave a Reply

Your email address will not be published. Required fields are marked *