✨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.
#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.
# 0x03 Riepilogo
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!