✨Hallo zusammen, ich bin Momo. Ich habe kürzlich etwas über Ethereum gelernt und einige meiner Notizen während des Lernprozesses in Artikeln zusammengestellt, um sie mit Ihnen zu teilen. Diese 0x1-Serie ist Grundwissen für Anfänger. Ich hoffe, dass gleichgesinnte Freunde es gemeinsam lernen und diskutieren können.

#Uniswp

# 0x00 Vorwort

Wir haben die Prinzipien und die zugrunde liegende Logik von Uniswap V2 bereits kennengelernt. Interessierte Freunde können zuerst die vorherigen Artikel lesen.

Uniswap V2 ist in zwei Hauptteile unterteilt:

  • Kern: einschließlich Factory, Pair, Pair ERC20

  • Peripherie: Enthält Router

Bereitstellungsadresse des Mainnet-Vertrags

  • Fabrikvertragsadresse: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

  • V2Router02 Vertragsadresse: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

Unter diesen ist Core hauptsächlich für die Kernlogik und die Verarbeitung eines einzelnen Swaps verantwortlich; Periphery ist ein Peripheriedienst, der Dienste basierend auf allen Swaps erstellt.

# 0x01 Uniswap V2 Core-Analyse

## UniswapV2Factory: Erstellung und Verwaltung von Handelspaaren

Der „UniswapV2Factory“-Vertrag ist eine der Kernkomponenten des Uniswap V2-Protokolls und für die Erstellung und Verwaltung aller Handelspaare verantwortlich. Es bietet mehrere Schlüsselfunktionen, darunter „createPair“, „allPairs“ und „getPair“.

Hinweis: Sie können die Vertragsfunktionsinformationen anzeigen, indem Sie die UniswapV2Factory-Vertragsadresse im Blockchain-Browser abfragen.

🦄### allPairs und allPairsLength

„allPairs“ ist ein Array, das zum Speichern der Vertragsadressen aller erstellten Transaktionspaare verwendet wird. Über das Array „allPairs“ können Benutzer die Adressinformationen aller Transaktionspaare abfragen.

• Funktion „allPairsLength“

Diese Funktion gibt die Länge des Arrays „allPairs“ zurück, also die Gesamtzahl der aktuell erstellten Handelspaare.

Mit dieser Funktion können Benutzer schnell die Anzahl der Handelspaare ermitteln, sodass Entwickler und Benutzer die Gesamtzahl der im aktuellen Protokoll verfügbaren Handelspaare leichter ermitteln können.

• Verwendung von „allPairs“

Indem Sie über den Index auf das Array „allPairs“ zugreifen, können Sie die Transaktionspaaradresse an einer bestimmten Indexposition abrufen.

Mit dieser Funktion können Benutzer bestimmte Transaktionspaaradressen über Indizes abfragen, was das Durchlaufen oder Abfragen der Kette erleichtert.

🦄### getPair

„getPair“ ist eine Zuordnung, die zum schnellen Abfragen der Transaktionspaaradressen zwischen zwei Token verwendet wird. Es verwendet die Adressen von „TokenA“ und „TokenB“ als Schlüssel und gibt die entsprechenden Vertragsadressen des Transaktionspaars zurück.

• `getPair`-Funktion

Die Implementierung dieser Funktion basiert auf einer zweidimensionalen Abbildung, wobei die Transaktionspaaradresse über die Adresskombination „TokenA“ und „TokenB“ abgefragt wird. Wenn das Handelspaar nicht existiert, wird „0x00000000000000000000000000000000000000000000000“ zurückgegeben.

• `getPair`-Erstellungslogik

In der Funktion „createPair“ wird „getPair“ verwendet, um die neu erstellte Transaktionspaaradresse aufzuzeichnen.

Der Vorteil dieses Designs besteht darin, dass unabhängig von der Reihenfolge von „TokenA“ und „TokenB“ die entsprechende Transaktionspaaradresse schnell über „getPair“ abgefragt werden kann.

🦄### Paar erstellen

Die Funktion „createPair“ ist eine der Kernfunktionen von „UniswapV2Factory“ und wird zum Erstellen neuer Handelspaare verwendet. Es erhält zwei Token-Adressen „tokenA“ und „tokenB“ als Eingabe und gibt die Vertragsadresse des erstellten Transaktionspaares zurück.

  • Logik erstellen

  • Zuerst prüft die Funktion, ob „TokenA“ und „TokenB“ identisch sind, und sortiert sie. Dabei wird sichergestellt, dass die Adresse von „Token0“ kleiner ist als die von „Token1“.

  • Anschließend wird über den Opcode „create2“ ein neuer Handelspaarvertrag erstellt und die Vertragsadresse in der Zuordnung „getPair“ und im Array „allPairs“ aufgezeichnet.

  • Schließlich wird das Ereignis „PairCreated“ ausgelöst, um externe Listener darüber zu benachrichtigen, dass ein neues Handelspaar erstellt wurde.

# 0x02 Uniswap V2 Peripherieanalyse

UniswapV2Router02: Eine Brücke für Benutzerinteraktion

„UniswapV2Router02“ ist die wichtigste Interaktionsschnittstelle zwischen Benutzern und dem Core-Vertrag. Es kapselt die Funktionen des Core-Vertrags und bietet Benutzern bequemere Handels- und Liquiditätsmanagementfunktionen. Zu seinen Hauptfunktionen gehören:

🦄### Liquiditätsmanagement

  • Die Funktionen „addLiquidity“ und „addLiquidityETH“ ermöglichen es Benutzern, Liquidität hinzuzufügen.

  • Die Funktionen „removeLiquidity“ und „removeLiquidityETH“ werden zum Entfernen von Liquidität verwendet.

🦄### Handelsfunktionen

  • Die Funktionen „swapExactTokensForTokens“ und „swapTokensForExactTokens“ unterstützen Benutzer beim Austauschen von Token.

  • Die Funktionen „swapExactETHForTokens“ und „swapTokensForExactETH“ unterstützen den Austausch zwischen ETH- und ERC20-Tokens.

🦄### Flash Swaps-Unterstützung

„UniswapV2Router02“ unterstützt Flash Swaps, wodurch Benutzer Token ausleihen, eine Reihe von Vorgängen in derselben Transaktion durchführen und die Token schließlich zurückgeben können.

## Bibliotheken: Funktionale Erweiterung von Werkzeugbibliotheken

Der Peripherieteil enthält außerdem mehrere Werkzeugbibliotheken, die zusätzliche funktionale Unterstützung bieten:

🦄### UniswapV2Bibliothek

  • Stellt die Berechnungsfunktion „pairFor“ für Transaktionspaaradressen bereit.

  • Bietet die Preisberechnungsfunktionen „getAmountOut“ und „getAmountIn“, um die Eingabe- und Ausgabe-Token-Beträge einer Transaktion zu berechnen.

🦄### UniswapV2OracleBibliothek

  • Bietet eine TWAP-Berechnungsfunktion, mit der Benutzer Preisdaten basierend auf dem zeitgewichteten Durchschnittspreis erhalten können.

# 0x03 Zusammenfassung

Uniswap V2 implementiert die Kernfunktionen des dezentralen Handels über Core und Periphery.

Der Vertrag „UniswapV2Factory“ verwaltet die Erstellung und Abfrage von Handelspaaren effizient durch Funktionen wie „createPair“, „allPairs“ und „getPair“.

„UniswapV2Router02“ bietet Benutzern eine praktische interaktive Schnittstelle, die die Kernlogik des Handels- und Liquiditätsmanagements vereint. Dieses geschichtete Design verbessert nicht nur die Flexibilität des Protokolls, sondern steigert auch seine Skalierbarkeit.

– Ob vom Code oder vom Gesamtdesign, es ist wirklich erstaunlich! Er ist würdig, der Seelenschmied in Defi zu sein!

$UNI

$BNB