Kurz erklärt:
Multicall bezeichnet ein Verfahren, bei dem mehrere Aufrufe an einen oder mehrere Smart Contracts in einer einzigen Transaktion oder Abfrage zusammengefasst werden. Ziel ist die Reduktion der Zahl separater Anfragen und die konsistente Auswertung mehrerer Datenpunkte.
Herkunft und Verbreitung
Das Multicall-Muster verbreitete sich ab etwa 2019 in Form öffentlich bereitgestellter Hilfsverträge. Bekannt wurde insbesondere der von der MakerDAO-Umgebung stammende Multicall-Vertrag, der später in weiterentwickelten Versionen (etwa Multicall2 und Multicall3) auf zahlreichen EVM-kompatiblen Netzwerken an einheitlichen Adressen bereitgestellt wurde. Multicall ist kein Opcode, sondern ein auf gewöhnlicher Vertragslogik beruhendes Entwurfsmuster.
Funktionsweise
Ein Multicall-Vertrag nimmt eine Liste von Aufrufen entgegen, die jeweils aus einer Zieladresse und den zu übergebenden Aufrufdaten bestehen. Der Vertrag führt diese Aufrufe nacheinander aus und gibt die gesammelten Ergebnisse gebündelt zurück. Bei lesenden Abfragen erlaubt dies, viele Datenpunkte innerhalb desselben Blocks abzurufen und damit einen konsistenten Zustandsschnappschuss zu erhalten.
Für schreibende Aufrufe existiert eine verwandte Ausprägung, bei der ein Vertrag mehrere Funktionen seiner selbst innerhalb einer Transaktion ausführt. Diese Variante wird häufig über Delegatecall umgesetzt, damit die einzelnen Aufrufe den ursprünglichen Absender beibehalten.
Anwendungsfälle
Im Bereich der Datenabfrage nutzen Benutzeroberflächen und Anwendungsprogramme Multicall, um beispielsweise Kontostände, Preise oder Vertragszustände mit einer einzigen Netzwerkanfrage abzurufen. Dies verringert die Belastung der Anbindungsknoten und beschleunigt das Laden von Oberflächen.
Bei schreibenden Operationen ermöglicht das Muster, mehrere Schritte atomar zu bündeln, etwa eine Freigabe und einen anschließenden Tausch. Verwandte Konzepte sind die Permit-Funktion und die Meta-Transaktion, die ebenfalls auf die Bündelung oder Vereinfachung von Nutzerinteraktionen abzielen.
Abgrenzung und Grenzen
Multicall ist von der protokollseitigen Bündelung mehrerer Transaktionen zu unterscheiden, wie sie etwa im Rahmen der Kontoabstraktion vorgesehen ist. Bei der lesenden Nutzung ist zu beachten, dass alle Aufrufe im selben Blockkontext ausgeführt werden. Bei schreibender Nutzung gelten dieselben Sicherheitsanforderungen wie bei jeder Vertragsinteraktion, insbesondere hinsichtlich der Weitergabe des Absenderkontexts.
Häufige Fragen
Ist Multicall ein EVM-Opcode?
Nein. Multicall ist ein Entwurfsmuster, das über gewöhnliche Smart-Contract-Logik umgesetzt wird. Es gibt keinen eigenen Opcode dafür.
Welchen Vorteil bietet Multicall bei Abfragen?
Mehrere Datenpunkte lassen sich mit einer einzigen Netzwerkanfrage im selben Blockkontext abrufen. Das entlastet Anbindungsknoten und liefert einen konsistenten Zustandsschnappschuss.
Was ist Multicall3?
Multicall3 ist eine weit verbreitete Weiterentwicklung des ursprünglichen Multicall-Vertrags, die auf vielen EVM-kompatiblen Netzwerken an einer einheitlichen Adresse bereitgestellt wurde.
Wie bündelt Multicall schreibende Aufrufe?
Eine verwandte Variante führt mehrere eigene Funktionen eines Vertrags in einer Transaktion aus, häufig über Delegatecall, damit der ursprüngliche Absender erhalten bleibt.
Worin unterscheidet sich Multicall von der Transaktionsbündelung der Kontoabstraktion?
Multicall arbeitet auf Ebene eines Hilfsvertrags innerhalb einer Transaktion. Die Kontoabstraktion sieht Bündelung auf Protokoll- beziehungsweise Kontoebene vor.
Zusammenfassung
Multicall ist ein ab 2019 verbreitetes Entwurfsmuster, das mehrere Vertragsaufrufe in einer Transaktion oder Abfrage bündelt. Es reduziert die Zahl der Netzwerkanfragen bei lesenden Abfragen und erlaubt atomare Bündelung schreibender Schritte, häufig über bekannte Hilfsverträge wie Multicall3.
Weiterführende Quellen
- Multicall3 – Projektdokumentation: github.com
- MakerDAO Multicall – Repository: github.com