Logo Zephyrnet

Test di proprietà generalizzati per i caveau ERC4626

Data:

Man mano che la DeFi cresce e matura, l'infrastruttura scalabile e la componibilità sono al primo posto per gli sviluppatori. Richieste di commenti (o ERC) di Ethereum: toolkit standardizzati per la creazione di app basate su Ethereum, come lo standard di token ampiamente utilizzato ERC20 — svolgere il ruolo essenziale di fornire linee guida coerenti affinché gli sviluppatori contribuiscano all'ecosistema senza iniziare da zero. All'inizio di quest'anno, standard del deposito tokenizzato ERC4626 è stato creato per incoraggiare la compatibilità incrociata tra i token di rendimento. La standardizzazione dei dettagli delle implementazioni può anche risolvere problemi urgenti di componibilità, rendendo l'integrazione del protocollo più semplice e, in definitiva, meno soggetta a errori.

Diversi progetti DeFi lo hanno già fatto adottato lo standard, cercando di aumentare la componibilità dei loro depositi, e prevediamo un'adozione più ampia in tutto l'ecosistema. Tuttavia, l'adattamento delle volte esistenti causa alcuni dolori crescenti; in modo critico, alcuni errori di implementazione possono esporre nuovi obiettivi per l'attacco. Anche piccoli errori (piccoli come l'interpretazione errata dell'interfaccia standard) possono avere conseguenze significative sia per la sicurezza che per l'esperienza dell'utente, sottolineando la necessità di più strumenti e misure di sicurezza, in particolare all'interno di un ecosistema DeFi più componibile. 

Fortunatamente, errori semplici possono avere soluzioni relativamente semplici se rilevati molto prima di essere sfruttati (e idealmente anche prima che vengano implementati). A tal fine, abbiamo rilasciato ERC4626 test di proprietà per l'esecuzione fuzzing e simbolica per aiutare i costruttori di vault a rilevare le violazioni standard che potrebbero interrompere le integrazioni o portare a vulnerabilità su tutta la linea. In questo post, spieghiamo il problema motivante, esaminiamo il nostro approccio e concludiamo con alcuni consigli attuabili.

Prima un po' di background sullo standard ERC4626

Finalizzato a marzo, ERC4626 è lo standard per i depositi tokenizzati. È stato introdotto per estendere il ampiamente utilizzato ERC20 standard (attualmente la base per centinaia di token), incoraggiare la standardizzazione tra depositi di rendimento e garantire la componibilità per le app e i protocolli (ad esempio gli aggregatori di rendimento) che devono interagire con essi. Ciò significa che qualsiasi app costruita su un deposito ERC4626 può essere facilmente estesa per funzionare con qualsiasi altro deposito ERC4626. 

I depositi tokenizzati consentono agli utenti di depositare liberamente risorse per coniare azioni del deposito e successivamente riscattare tali azioni per prelevare capitale e interessi dal deposito. Queste azioni del caveau sono token ERC20 e quindi possono essere facilmente scambiate o utilizzate come garanzia per prendere in prestito altre risorse. Ad esempio, gli utenti possono depositare le proprie risorse nei depositi di Yearn per coniare token yVault, che possono quindi essere scambiati su Uniswap, puntati per un rendimento aggiuntivo o utilizzati come garanzia per i protocolli di prestito.

La logica aziendale per generare e distribuire il rendimento (e determinare il prezzo delle azioni) può variare tra le implementazioni. Per coprire il maggior numero possibile di depositi (con l'obiettivo di renderli interoperabili o identici), lo standard ERC4626 si concentra sulla descrizione dell'interfaccia utente, lasciando la maggior parte dei dettagli di implementazione non specificati. Ciò consente variazioni nella logica aziendale purché il deposito soddisfi i requisiti specifici dell'interfaccia e li incoraggi interoperabilità tra diversi tipi di app e tipi di depositi ERC4626.

Man mano che vengono creati più depositi, ci aspettiamo di vederli implementati secondo lo standard ERC4626 dall'inizio; ma attualmente siamo in una fase di transizione, in cui gli sviluppatori che cercano di trarre vantaggio da una maggiore componibilità dovranno aggiornare i depositi, le app e i protocolli esistenti per conformarsi allo standard. E mentre si aggiornano, affrontano una serie di complessità e sfide. 

Le sfide della conformità agli standard (e le insidie ​​del mancato rispetto)

Seguire un nuovo standard non è sempre semplice. Ogni caveau ERC4626 deve implementare fedelmente (ed esattamente) i requisiti dello standard come descritto. In caso contrario, l'integrazione dei depositi ERC4626 diventa sempre più complessa per tenere conto delle diverse variazioni. Questa complessità rende le integrazioni intrinsecamente soggette a errori; e poiché non sono sufficientemente a prova di futuro, possono portare a vulnerabilità della sicurezza nel tempo.

I token ERC20 non standard (ad es. Tether USD) richiedono che molti sistemi DeFi utilizzino una libreria aggiuntiva (come SafeERC20) durante l'esecuzione di trasferimenti di token per gestire in modo sicuro comportamenti divergenti (ad esempio non restituire nulla quando un trasferimento riesce invece di restituire true). Ciò significa che qualsiasi sistema che interagisce con questi token potrebbe diventare vulnerabile se il sistema non è progettato per gestire correttamente i casi di "rendimenti mancanti". Questi scenari possono potenzialmente introdurre un problema di sicurezza comune e aumentare i costi complessivi di sviluppo e manutenzione (se si tiene conto della logica aggiuntiva e delle dipendenze necessarie per mitigare i problemi). La conformità allo standard è quindi fondamentale non solo per le singole implementazioni ma anche per la sicurezza dell'intero ecosistema. Una vulnerabilità in un singolo sistema o dipendenza può causare problemi diffusi.

Idealmente, gli standard dovrebbero essere specificati formalmente senza ambiguità (ad es. specifica formale di ERC20), e ogni implementazione potrebbe essere formalmente verificata rispetto alle specifiche standard. In pratica, tuttavia, ciò non è facile da ottenere in un breve lasso di tempo, a causa dei costi e degli sforzi richiesti dalla comunità.

Presentazione delle proprietà ERC4626 eseguibili per identificare i problemi di conformità 

Mentre lavoriamo verso uno stato ideale (ogni deposito è formalmente verificato rispetto a rigorose specifiche formali), abbiamo scritto lo standard ERC4626 proprietà per rilevare discrepanze in dettagli sottili e facili da perdere rispetto ai requisiti standard.  

Gli sviluppatori di Vault possono eseguire i test per rilevare potenziali violazioni degli standard nelle loro implementazioni prima della distribuzione. E gli integratori di vault possono verificare se i depositi dati seguono lo standard prima di integrarli nel loro sistema. Le proprietà possono anche essere testate rispetto ai Live Vault già distribuiti sulla rete principale, tramite il fork di mainnet. Il test dei depositi attivi può essere utile, soprattutto quando i depositi sono stati distribuiti o aggiornati di recente, per garantire che tutti i parametri di sistema siano stati impostati correttamente. 

Abbiamo scelto test basati sulle proprietà — scritti in Foundry e pronti per essere eseguiti dal suo fuzzer — per rendere le proprietà eseguibili (e quindi testabili). In futuro, potrebbero anche essere eseguiti da strumenti di esecuzione simbolica o di verifica del modello per verificare formalmente che il deposito specificato soddisfi le proprietà per tutti i possibili input e condizioni.

Abbiamo scritto le proprietà in modo che siano sufficientemente generali da poter essere applicate a un'ampia gamma di depositi che implementano logiche di business diverse. Abbiamo utilizzato solo le funzioni dell'interfaccia pubblica per renderle indipendenti dai dettagli di implementazione. (A causa di questa restrizione, tuttavia, alcuni requisiti standard che fanno riferimento a dati interni specifici dell'implementazione sono stati omessi dalle proprietà.)

Ad esempio, la seguente proprietà corrisponde a uno dei requisiti del convertToShares() funzione, "NON DEVE mostrare variazioni a seconda del chiamante.” Dati i due indirizzi di conto e l'importo, fa chiamare ciascuno dei conti convertToShares() con lo stesso importo e garantisce che i due valori di ritorno siano uguali. Questa proprietà è indipendente dai dettagli di implementazione di convertToShares(), che varia tra i depositi e deve essere soddisfatto da tutti i depositi che implementano ERC4626. Questa proprietà può essere eseguita fornendo valori di input specifici (per unit test), molti input casuali (per test fuzz) o valori simbolici (per esecuzione simbolica e verifica formale). Può anche essere eseguito localmente o su un fork di mainnet (per test di integrazione).

Caso d'uso: proprietà che verificano gli errori di arrotondamento

Gli errori di arrotondamento, ad esempio, sono una classe importante di bug (apparentemente minori) che possono avere alcune implicazioni di serie. La logica contabile alla base dell'ERC4626, ad esempio il calcolo del numero di azioni da coniare o dell'importo delle attività da prelevare, viene implementata utilizzando l'aritmetica a virgola fissa: gli errori di arrotondamento sono inevitabili. Per problemi di, tuttavia, lo standard specifica in modo esplicito la direzione di arrotondamento preferita per ciascuna funzione di interfaccia, lasciando i limiti di errore non specificati e dipendenti dall'implementazione. Nello specifico, il deposit() ed redeem() le funzioni dovrebbero restituire un per-approssimazione del valore esatto, mentre il mint() ed withdraw() le funzioni dovrebbero restituire un ancora-approssimazione. Ad esempio, se il prezzo corrente dell'azione (cioè l'importo delle attività per azione) è 2, allora deposit() con 3 wei di attività dovrebbe coniare solo fino a 1 wei di azioni (cioè, floor(3/2)), mentre withdraw() con 3 wei di asset dovrebbe bruciare almeno 2 wei di azioni (cioè, ceil(3/2)).

Abbiamo scritto le proprietà relative all'arrotondamento in modo che siano indipendenti dalla logica contabile sottostante trattandola come una scatola nera. Nello specifico, le abbiamo formulate come cosiddette proprietà di “andata e ritorno”, che descrivono la relazione tra due funzioni opposte. Ad esempio, la seguente proprietà specifica che il prelievo di beni che sono stati appena pignorati coniando N azioni deve bruciare non meno di N azioni. In altre parole, nessuno può realizzare un profitto gratuito convertendo beni e azioni del caveau avanti e indietro coniando e ritirando ripetutamente.

frammento di test di proprietà ERC4626

In effetti, abbiamo riscontrato che diversi depositi ERC4626 sulla rete principale non soddisfano la proprietà di cui sopra a causa di errori di arrotondamento. Ciò significa che chiunque potrebbe guadagnare, ad esempio, un paio di satoshi BTC (1 satoshi ~= 0.02 cent al momento della scrittura) semplicemente (e ripetutamente) coniando e ritirando, svuotando lentamente il caveau. Ciò potrebbe effettivamente generare un profitto su catene che godono di commissioni gas molto basse (ad es. Fantom) o se il prezzo dell'attività diventa abbastanza alto in futuro.

Testare lo standard ERC4626 in natura

Abbiamo testato le nostre proprietà rispetto a circa 100 volte ERC4626 su mainnet e abbiamo trovato molti depositi che non rispettavano i requisiti standard, principalmente a causa degli errori di arrotondamento (ad esempio, utilizzando l'arrotondamento del pavimento dove si desidera il soffitto, come descritto). In particolare, alcuni caveau non hanno coniato il numero esatto di azioni richiesto dal mint() funzione, sebbene lo standard lo richieda esplicitamente questo. Alcuni di loro hanno anche emesso un incoerente Deposit evento in cui i dati registrati sono diversi da quelli effettivamente coniati. Con nostra sorpresa, alcune volte non sono mai state coniate sul posto; invece, mettono semplicemente le richieste di zecca in una coda e le elaborano in seguito in un batch come transazione separata.

Sebbene questi comportamenti divergenti non fossero di per sé sfruttabili, possono diventare vulnerabili se integrati in altri sistemi che si aspettano solo comportamenti standard. Questi problemi renderanno l'integrazione del vault molto più difficile, neutralizzando potenzialmente gli sforzi in corso e guidando la motivazione alla base della standardizzazione.

Utilizzando i nostri test di proprietà e altri passaggi attuabili verso la conformità agli standard

Seguire esattamente lo standard può prevenire comportamenti divergenti (idealmente prima che vengano implementati). Ci auguriamo che le nostre proprietà siano d'aiuto, insieme ad alcune azioni aggiuntive. Per coloro che stanno sviluppando e/o integrando vault ERC4626:

  • Consigliamo vivamente di gestire la nostra proprietà test contro le tue volte. Troveranno rapidamente problemi se ci sono chiare violazioni dello standard.
  • Suggeriamo inoltre di rivedere il ns proprietà per verificare la tua comprensione dei requisiti standard e modificare la tua implementazione in caso di discrepanza non intenzionale.
  • Se il tuo deposito deve divergere dallo standard, ti consigliamo di documentare chiaramente i comportamenti non standard, in modo che altri possano gestire correttamente queste deviazioni durante l'integrazione con il tuo deposito. Si prega di notare che questo dovrebbe essere considerato come l'ultima risorsa.

***
I depositi ERC4626 hanno il potenziale per diventare un elemento fondamentale per la DeFi nel prossimo futuro e, per motivi di componibilità, è importante che sia i depositi nuovi che quelli esistenti seguano lo standard. Nuove implementazioni emergeranno seguendo lo standard, quindi non c'è momento migliore del presente per standardizzare i depositi esistenti. 

Mentre lavoriamo verso uno stato ideale (in cui diversi depositi sono componibili in modo uniforme), è possibile eseguire test di proprietà ERC4626 per rilevare più facilmente le violazioni standard nelle implementazioni del deposito. I test delle proprietà (con documentazione ed esempi) sono tutti pubblicamente disponibili nel nostro Github deposito. Accogliamo con favore il tuo feedback e i tuoi contributi!

***
Le opinioni qui espresse sono quelle del personale di AH Capital Management, LLC ("a16z") citato e non sono le opinioni di a16z o delle sue affiliate. Alcune informazioni qui contenute sono state ottenute da fonti di terze parti, incluse società in portafoglio di fondi gestiti da a16z. Sebbene tratti da fonti ritenute affidabili, a16z non ha verificato in modo indipendente tali informazioni e non fornisce dichiarazioni sull'accuratezza attuale o duratura delle informazioni o sulla sua adeguatezza per una determinata situazione. Inoltre, questo contenuto può includere pubblicità di terze parti; a16z non ha esaminato tali annunci pubblicitari e non approva alcun contenuto pubblicitario in essi contenuto.

Questo contenuto viene fornito solo a scopo informativo e non deve essere considerato come consulenza legale, commerciale, di investimento o fiscale. Dovresti consultare i tuoi consulenti in merito a tali questioni. I riferimenti a qualsiasi titolo o risorsa digitale sono solo a scopo illustrativo e non costituiscono una raccomandazione di investimento o un'offerta per fornire servizi di consulenza in materia di investimenti. Inoltre, questo contenuto non è diretto né destinato all'uso da parte di investitori o potenziali investitori e non può in alcun caso essere invocato quando si decide di investire in qualsiasi fondo gestito da a16z. (Un'offerta per investire in un fondo a16z sarà fatta solo dal memorandum di collocamento privato, dal contratto di sottoscrizione e da altra documentazione pertinente di tale fondo e dovrebbe essere letta nella sua interezza.) Eventuali investimenti o società in portafoglio menzionati, citati o descritti non sono rappresentativi di tutti gli investimenti in veicoli gestiti da a16z, e non si può garantire che gli investimenti saranno redditizi o che altri investimenti effettuati in futuro avranno caratteristiche o risultati simili. Un elenco degli investimenti effettuati da fondi gestiti da Andreessen Horowitz (esclusi gli investimenti per i quali l'emittente non ha autorizzato a16z a divulgare pubblicamente e gli investimenti non annunciati in asset digitali quotati in borsa) è disponibile all'indirizzo https://a16z.com/investments /.

Grafici e grafici forniti all'interno sono esclusivamente a scopo informativo e non dovrebbero essere presi in considerazione quando si prende una decisione di investimento. I rendimenti passati non sono indicativi di risultati futuri. Il contenuto parla solo a partire dalla data indicata. Eventuali proiezioni, stime, previsioni, obiettivi, prospettive e/o opinioni espresse in questi materiali sono soggette a modifiche senza preavviso e possono differire o essere contrarie alle opinioni espresse da altri. Si prega di consultare https://a16z.com/disclosures per ulteriori informazioni importanti

spot_img

L'ultima intelligenza

spot_img