La DeFi spesso replica meccanismi già esistenti nella finanza tradizionale. In particolare qui ci riferiamo ad una sorta di titolo al portatore che consente di dimostrare il possesso di una quota di un fondo e di poterlo riscattare, sperabilmente ad un valore maggiore di quanto lo abbiamo pagato.

Di fatto un vero e proprio fondo di investimento aperto fatto con i token, ma non chiamiamolo così altrimenti scattano gli allarmi Consob, BDI, BCE, le guardie, LaGarde, Draghi, Dungeons eccetera eccetera.


smart contract developer

Caso d'uso per i vault token: esempio pratico

Deposito 100 DAI dentro un ipotetico contratto Vault che promette il 3% di APY ed in cambio ottengo 100 vToken dove vToken è il simbolo del token coniato dalla Vault. Il vToken non sarebbe un token popolare o liquidabile come il DAI, ma rappresenta la quota di proprietà degli asset della Vault e come tale può essere liquidato con un guadagno o con una perdita.

Come sappiamo DAI è un token ERC20, ma se ci pensiamo anche la nostra ipotetica Vault ed i token vToken che emette devono essere compliant con ERC20, quindi visibili e scambiabili con qualsiasi wallet Ethereum.

Inoltre se la popolarità e la liquidità lo consente, tali vToken potrebbero essere accettati per scambi in liquidity pool o altri exchange proprio in virtù del fatto che prima o poi potranno essere riscattati in cambio di DAI.

Senza entrare nel merito di strategie magiche che promettono APY a doppia cifra, resta il fatto che la finanza è sempre stata questo: rinunciare ad una somma oggi per averne una maggiore domani.

Senza entrare nel merito delle possibili applicazioni di una Vault e dei token yield bearing vogliamo solo descrivere il nuovo standard per i contract che serve come riferimento per tutti coloro che vogliono sviluppare servizi di DeFi secondo questa modalità.

Avere uno standard per gli Yield Bearing Tokens è comunque importante perché le implementazioni di riferimento saranno ben testate dalla community riducendo almeno i rischi di vulnerabilità del codice, posto che i rischi finanziari e gli scam possono essere evitati solo da uno studio approfondito delle strategie di investimento adottate dalla Vault.

Il noto servizio di DeFi yearn.finance è uno dei più attivi promotori di questo nuovo standard.

https://twitter.com/iearnfinance/status/1511444226566983683

Lo standard EIP 4626

Una cosa simpatoca di questo standard è che è uno dei pochi nuovi standard di cui mi ricordo a memoria il numero. Sarà dovuto al fatto che fa la rima 46 - 26 😊😊

Quali sono gli elementi di questo nuovo standard.

Lo standard è come sempre visibile e scaricabile nel sito della Ethereum Foundation

https://eips.ethereum.org/EIPS/eip-4626

Vediamo i punti salienti del nuovo Contratto. Intanto è derivato da ERC20. Quindi ogni Vault è sempre anche un token ERC20.

Inoltre prevede l'emissione di eventi di deposito e di prelievo.

interface IERC4626 is IERC20, IERC20Metadata {

event Deposit(
        address indexed caller, 
        address indexed owner, 
        uint256 assets, 
        uint256 shares
);

    event Withdraw(
        address indexed caller,
        address indexed receiver,
        address indexed owner,
        uint256 assets,
        uint256 shares
    );

Deve fornirci informazioni (view) su qual è l'asset sottostante, che deve essere un altro token ERC20, che viene gestito dalla Vault (ad esempio DAI) e qual è il totale del sottostante gestito.


    function asset() external view returns 
(address assetTokenAddress);

    
    function totalAssets() external view returns (uint256 totalManagedAssets);

Ok, se sei arrivato fin qui hai superato le parti più noiose, oppure sono tutte noiose? Comunque abbiamo le funzioni di deposito e di riscatto (redeem).

deposit( ) fa il minting dei token di quote vault (le shares) e deposita l'asset sottostante dentro il contratto

redeem( ) fa esattamente il contrario, brucia le quote (shares) e tira fuori dal contratto il dovuto in token del sottostante (ad esempio DAI)

function deposit(
        uint256 assets, 
        address receiver) 
external returns (uint256 shares);
    

function redeem(
        uint256 shares,
        address receiver,
        address owner
    ) external returns (uint256 assets);

La cosa interessante è che non si tratta solo di una specifica, esiste anche un'implementazione di riferimento, che è quella di Open Zeppelin

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol