✨Salut, tuturor, sunt Momo. Recent am învățat despre Ethereum și am organizat câteva note din procesul de învățare într-un articol, pe care doresc să-l împărtășesc cu voi. Această serie 0x1 este pentru cunoștințe de bază pentru începători, sper să avem prieteni cu aceleași interese pentru a învăța și a discuta împreună, de asemenea, vă rog pe cei cu experiență să mă sfătuiască.
# 0x00 Introducere
În trecut, am discutat despre principiile și logica de bază a Uniswap V2; cei interesați pot consulta articolele anterioare.
Uniswap V2 este împărțit în două părți principale:
Core: include Factory, Pair, Pair ERC20
Periphery: include Routers
Adresa de implementare a contractului pe rețeaua principală
Adresa contractului Factory: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Adresa contractului V2Router02: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
În cadrul acestuia, Core este responsabil în principal pentru logica de bază și pentru gestionarea unui singur swap; Periphery oferă servicii externe, construind servicii pe baza tuturor swap-urilor.
# 0x01 Analiza Uniswap V2 Core
## UniswapV2Factory: Crearea și gestionarea perechilor de tranzacționare
Contractul `UniswapV2Factory` este unul dintre componentele de bază ale protocolului Uniswap V2, responsabil pentru crearea și gestionarea tuturor perechilor de tranzacționare (Pair). Acesta oferă mai multe funcții esențiale, inclusiv `createPair`, `allPairs` și `getPair`.
Notă: Consultați adresa contractului UniswapV2Factory în browserul blockchain pentru a vedea informațiile funcțiilor contractului.

🦄### allPairs și allPairsLength
`allPairs` este un array care stochează toate adresele contractelor de perechi de tranzacționare create. Prin intermediul array-ului `allPairs`, utilizatorii pot accesa informațiile despre adresele tuturor perechilor de tranzacționare.
• Funcția `allPairsLength`
Această funcție returnează lungimea array-ului `allPairs`, adică numărul total de perechi de tranzacționare create până în prezent.

Această funcție oferă utilizatorilor o metodă rapidă de a obține numărul de perechi de tranzacționare, facilitând dezvoltatorilor și utilizatorilor să înțeleagă numărul total de perechi disponibile în protocolul curent.
• Utilizarea `allPairs`
Accesând array-ul `allPairs` prin index, se pot obține adresele perechilor de tranzacționare pentru o anumită poziție de index.

Această funcționalitate permite utilizatorilor să interogheze adresa specifică a perechii de tranzacționare prin index, facilitând astfel parcurgerea sau interogarea pe blockchain.
🦄### getPair
`getPair` este o mapare (mapping) care permite interogarea rapidă a adresei perechii de tranzacționare între două tokenuri. Aceasta utilizează adresele `tokenA` și `tokenB` ca chei și returnează adresa contractului perechii corespunzătoare.
• Funcția `getPair`

Implementarea acestei funcții se bazează pe o mapare bidimensională, care interoghează adresa perechii de tranzacționare prin combinația adreselor `tokenA` și `tokenB`. Dacă perechea de tranzacționare nu există, se returnează `0x0000000000000000000000000000000000000000`.
• Logica de creare a `getPair`
În funcția `createPair`, `getPair` este utilizat pentru a înregistra adresa perechii de tranzacționare nou create.

Beneficiul acestui design este că, indiferent de ordinea lui `tokenA` și `tokenB`, se poate interoga rapid adresa perechii corespunzătoare prin `getPair`.
🦄### createPair
Funcția `createPair` este una dintre funcțiile de bază ale `UniswapV2Factory`, destinată creării de noi perechi de tranzacționare. Aceasta primește două adrese de tokenuri `tokenA` și `tokenB` ca intrare și returnează adresa contractului pentru perechea creată.
Logica de creare

În primul rând, funcția verifică dacă `tokenA` și `tokenB` sunt identice și le sortează, asigurându-se că adresa `token0` este mai mică decât `token1`.
Apoi, prin codul de operațiune `create2`, se creează un nou contract de pereche de tranzacționare, iar adresa contractului este înregistrată în mapa `getPair` și în array-ul `allPairs`.
În cele din urmă, se declanșează evenimentul `PairCreated`, notificând observatorii externi că o nouă pereche de tranzacționare a fost creată.
# 0x02 Analiza Uniswap V2 Periphery
## UniswapV2Router02: Podul de interacțiune pentru utilizatori
`UniswapV2Router02` este principala interfață de interacțiune între utilizator și contractul Core, învăluind funcționalitățile contractului Core și oferind utilizatorilor un mod mai convenabil de a gestiona tranzacțiile și lichiditatea. Funcțiile sale principale includ:
🦄### Gestionarea lichidității
`addLiquidity` și `addLiquidityETH` permit utilizatorilor să adauge lichiditate.
`removeLiquidity` și `removeLiquidityETH` sunt utilizate pentru a elimina lichiditatea.
🦄### Funcționalități de tranzacționare
`swapExactTokensForTokens` și `swapTokensForExactTokens` permit utilizatorilor să efectueze schimburi de tokenuri.
`swapExactETHForTokens` și `swapTokensForExactETH` permit schimbul între ETH și tokenuri ERC20.
🦄### Suport pentru Flash Swaps
`UniswapV2Router02` suportă Flash Swaps (împrumuturi rapide), permițând utilizatorilor să împrumute tokenuri într-o singură tranzacție și să finalizeze o serie de operațiuni, pentru a returna tokenurile la final.
## Biblioteci: Extinderea funcționalității bibliotecilor de instrumente
Partea Periphery include, de asemenea, mai multe biblioteci de instrumente pentru a oferi suport suplimentar pentru funcționalitate:
🦄### UniswapV2Library
Oferă funcția de calcul a adresei perechii `pairFor`.
Oferă funcțiile de calcul al prețului `getAmountOut` și `getAmountIn`, utilizate pentru a calcula cantitățile de tokenuri de intrare și ieșire pentru tranzacții.
🦄### UniswapV2OracleLibrary
Oferă funcționalități de calcul TWAP, permițând utilizatorilor să obțină datele de preț pe baza prețului mediu ponderat în timp.
# 0x03 Rezumat
Uniswap V2 realizează funcționalitatea esențială a tranzacțiilor descentralizate prin cele două părți Core și Periphery.
Contractul `UniswapV2Factory` gestionează eficient crearea și interogarea perechilor de tranzacționare prin funcțiile `createPair`, `allPairs` și `getPair`.
`UniswapV2Router02` oferă utilizatorilor o interfață de interacțiune convenabilă, care învăluie logica de bază a tranzacțiilor și gestionării lichidității. Acest design stratificat nu doar că îmbunătățește flexibilitatea protocolului, ci și îi sporește scalabilitatea.
-- Indiferent de cod sau de designul general, este cu adevărat impresionant! Cu siguranță este creatorul sufletului din Defi!