✨Ciao a tutti, sono Momo. Recentemente ho scoperto Ethereum e ho raccolto alcune note del processo di apprendimento in articoli da condividere con voi. Questa serie 0x1 è una conoscenza di base per i principianti. Spero che amici che la pensano allo stesso modo possano impararla e discuterne insieme. Chiedo anche consigli agli esperti.

#Uniswp

#0x00 Prefazione

Abbiamo già visto i principi e la logica alla base di Uniswap V2. Gli amici interessati possono leggere prima gli articoli precedenti.

Uniswap V2 è diviso in due parti principali:

  • Core: incluso Factory, Pair, Pair ERC20

  • Periferia: contiene router

Indirizzo di distribuzione del contratto Mainnet

  • Indirizzo del contratto di fabbrica: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

  • Indirizzo del contratto V2Router02: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

Tra questi, Core è principalmente responsabile della logica di base e dell'elaborazione di un singolo swap; Periphery è un servizio periferico che crea servizi basati su tutti gli swap.

# 0x01 Analisi del core Uniswap V2

## UniswapV2Factory: creazione e gestione di coppie di trading

Il contratto `UniswapV2Factory` è uno dei componenti principali del protocollo Uniswap V2, responsabile della creazione e della gestione di tutte le coppie di trading. Fornisce numerose funzioni chiave, tra cui `createPair`, `allPairs` e `getPair`.

Nota: è possibile visualizzare le informazioni sulla funzione del contratto interrogando l'indirizzo del contratto UniswapV2Factory nel browser blockchain

🦄### allPairs da allPairsLength

`allPairs` è un array utilizzato per memorizzare gli indirizzi dei contratti di tutte le coppie di transazioni create. Tramite l'array `allPairs`, gli utenti possono interrogare le informazioni sugli indirizzi di tutte le coppie di transazioni.

• Funzione `allPairsLength`

Questa funzione restituisce la lunghezza dell'array `allPairs`, che è il numero totale di coppie di trading attualmente create.

Questa funzione fornisce agli utenti un modo rapido per ottenere il numero di coppie di trading, rendendo più facile per sviluppatori e utenti comprendere il numero totale di coppie di trading disponibili nel protocollo attuale.

• Utilizzo di `allPairs`

Accedendo all'array `allPairs` tramite l'indice, è possibile ottenere l'indirizzo della coppia di transazioni in una posizione di indice specifica.

Questa funzione consente agli utenti di interrogare indirizzi di coppie di transazioni specifiche tramite indici, semplificando l'esplorazione o l'interrogazione sulla catena.

🦄### ottieniCoppia

`getPair` è una mappatura utilizzata per interrogare rapidamente gli indirizzi delle coppie di transazioni tra due token. Utilizza gli indirizzi di `tokenA` e `tokenB` come chiavi e restituisce gli indirizzi dei contratti delle coppie di transazioni corrispondenti.

• Funzione `getPair`

L'implementazione di questa funzione si basa su una mappatura bidimensionale e l'indirizzo della coppia di transazioni viene interrogato tramite la combinazione di indirizzi `tokenA` e `tokenB`. Se la coppia di trading non esiste, restituisce `0x0000000000000000000000000000000000000000000000000000`.

• Logica di creazione `getPair`

Nella funzione `createPair`, `getPair` viene utilizzato per registrare l'indirizzo della coppia di transazioni appena creata.

Il vantaggio di questa progettazione è che, indipendentemente dall'ordine di `tokenA` e `tokenB`, l'indirizzo della coppia di transazioni corrispondente può essere rapidamente interrogato tramite `getPair`.

🦄### creaCoppia

La funzione `createPair` è una delle funzioni principali di `UniswapV2Factory` e viene utilizzata per creare nuove coppie di trading. Riceve due indirizzi token `tokenA` e `tokenB` come input e restituisce l'indirizzo del contratto della coppia di transazioni creata.

  • Crea logica

  • Per prima cosa, la funzione controlla se `tokenA` e `tokenB` sono uguali e li ordina, assicurandosi che l'indirizzo di `token0` sia minore di `token1`.

  • Viene quindi creato un nuovo contratto di coppia di trading tramite l'opcode `create2` e l'indirizzo del contratto viene registrato nella mappatura `getPair` e nell'array `allPairs`.

  • Infine, viene attivato l'evento `PairCreated` per notificare agli ascoltatori esterni che è stata creata una nuova coppia di trading.

# 0x02 Analisi della periferia Uniswap V2

UniswapV2Router02: un ponte per l'interazione dell'utente

`UniswapV2Router02` è la principale interfaccia di interazione tra gli utenti e il contratto Core. Incapsula le funzioni del contratto Core e fornisce agli utenti funzioni di trading e gestione della liquidità più convenienti. Le sue funzioni principali includono:

🦄### Gestione della liquidità

  • Le funzioni `addLiquidity` e `addLiquidityETH` consentono agli utenti di aggiungere liquidità.

  • Le funzioni `removeLiquidity` e `removeLiquidityETH` vengono utilizzate per rimuovere la liquidità.

🦄### Caratteristiche di trading

  • Le funzioni `swapExactTokensForTokens` e `swapTokensForExactTokens` supportano gli utenti nello scambio di token.

  • Le funzioni `swapExactETHForTokens` e `swapTokensForExactETH` supportano lo scambio tra token ETH ed ERC20.

🦄### Supporto per Flash Swaps

`UniswapV2Router02` supporta Flash Swaps, che consente agli utenti di prendere in prestito token e completare una serie di operazioni nella stessa transazione per poi restituire i token.

## Librerie: estensione funzionale delle librerie di strumenti

La parte Periferia include anche diverse librerie di strumenti per fornire ulteriore supporto funzionale:

🦄### Libreria UniswapV2

  • Fornisce la funzione di calcolo `pairFor` per gli indirizzi delle coppie di transazioni.

  • Fornisce le funzioni di calcolo del prezzo `getAmountOut` e `getAmountIn` per calcolare gli importi dei token di input e output di una transazione.

🦄### LibreriaOracleUniswapV2

  • Fornisce la funzione di calcolo TWAP, consentendo agli utenti di ottenere dati sui prezzi basati sul prezzo medio ponderato nel tempo.

Uniswap V2 implementa le funzioni principali del trading decentralizzato attraverso Core e Periphery.

Il contratto `UniswapV2Factory` gestisce in modo efficiente la creazione e la query delle coppie di trading tramite funzioni quali `createPair`, `allPairs` e `getPair`.

`UniswapV2Router02` fornisce agli utenti una comoda interfaccia interattiva che racchiude la logica fondamentale del trading e della gestione della liquidità. Questa progettazione a strati non solo migliora la flessibilità del protocollo, ma ne potenzia anche la scalabilità.

-- Sia per quanto riguarda il codice che per il design complessivo, è davvero sorprendente! È degno di essere il forgiatore di anime in Defi!

$UNI

$BNB