Werkzeug AT-W36REV. 2026-A

Funktions-Selektor und Event-Topic berechnen, auch rückwärts

Der Funktions-Selektor sind die ersten 4 Byte des Keccak-256-Hashes der kanonischen Signatur, also Name und Parametertypen ohne Leerzeichen und ohne Namen. Aus transfer(address,uint256) wird 0xa9059cbb. Ein Event-Topic0 ist derselbe Hash in voller Länge, ein Fehler-Selektor entsteht wie der einer Funktion. Der Rechner bildet die kanonische Form aus Quelltext oder ABI selbst und schlägt Selektoren in einer Liste von 401 bekannten Signaturen nach.

  • kostenlos
  • ohne Anmeldung
  • rechnet im Browser

Signatur einfügen, Selektor und Topic ablesen

Rechner · Selektor, Topic0, Fehler-Selektor und Rückwärtssuche

Der Rechner bildet Signaturen nach der Solidity-ABI-Spezifikation. Er liest keine Blockchain und löst keine Transaktion aus. Ob ein Vertrag eine Funktion wirklich hat, zeigt nur sein Bytecode oder der geprüfte Quelltext.

EingabeSignatur, Solidity, ABI oder Selektor einfügen

Erlaubt sind einzelne Signaturen, Zeilen aus dem Quelltext, ganze Verträge mit struct und enum, ABI-JSON (auch Hardhat- oder Foundry-Artefakte) und Hex-Werte zum Nachschlagen, mehrere je Zeile. Das Werkzeug erkennt die Art selbst.

Ergebnis

Geben Sie eine Signatur, Solidity, eine ABI oder einen Selektor ein.

    Liste bekannter Signaturen: Standards und verbreitete Bibliotheken, jede Gruppe mit Quelle, Stand 14. November 2026. Smart Contracts und Oberflächen dazu entwickeln wir unter Web3-Entwicklung.

    Rechnet in Ihrem Browser. Es wird nichts gesendet oder gespeichert.

    So entsteht ein Selektor

    Eine Transaktion an einen Vertrag beginnt mit 4 Byte. Der Vertrag vergleicht sie am Anfang seines Codes mit den Selektoren seiner Funktionen und springt zur passenden; die Argumente folgen danach. Woher die 4 Byte kommen, legt die ABI-Spezifikation von Solidity fest: Man schreibt die Signatur in eine feste Form, hasht sie mit Keccak-256 und nimmt den Anfang. Weil dieser Vergleich im Bytecode steht, lassen sich die Selektoren eines Vertrags auch ohne Quelltext auslesen Grech u. a. 2019.

    keccak256("transfer(address,uint256)")SELEKTOR · 4 BYTE · 0xA9059CBBa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049bTOPIC0 BEI EVENTS · ALLE 32 BYTE

    Abb. 1 · Keccak-256 über die kanonische Signatur, gerechnet mit demselben Code wie das Werkzeug.

    Die kanonische Form

    Kanonisch heißt: Name, Klammer, die Typen mit genau einem Komma dazwischen. Parameternamen, memory und calldata, Sichtbarkeit, Modifier und der Rückgabetyp gehören nicht dazu. Ein einziges Leerzeichen ergibt einen ganz anderen Hash. Dazu kommen Ersetzungen, weil das ABI manche Solidity-Typen nicht kennt:

    Solidity-Typ und Form im Selektor (gerechnet)
    SolidityBeispielIm SelektorRegel
    uint, intuint menge, int deltaf(uint256,int256)immer mit Bitzahl
    address payableaddress payable anf(address)payable fällt weg
    Vertrag, InterfaceIERC20 tokenf(address)wird zur Adresse
    enumStatus s mit enum Status { Offen, Beendet }f(uint8)uint8; vor 0.8.0 bei über 256 Werten größer
    eigener WerttypPreis p mit type Preis is uint128f(uint128)der Grundtyp
    structGebot g mit struct Gebot { address bieter; uint betrag; }f((address,uint256))Tupel in Klammern, auch verschachtelt
    Arraysuint[] a, address[3] bf(uint256[],address[3])Länge bleibt, Elementtyp wird kanonisch
    fixed, ufixedfixed xf(fixed128x18)fixed128x18 bzw. ufixed128x18
    byte (bis 0.7)byte bf(bytes1)bytes1
    Funktionstypfunction(uint) external returns (bool) cbf(function)function, kodiert wie bytes24
    öffentliche Variablemapping(address => mapping(address => uint)) public allowanceallowance(address,address)Getter: je mapping ein Schlüssel, je Array-Ebene uint256

    Regeln nach der Solidity-ABI-Spezifikation, Abschnitte „Types" und „Mapping Solidity to ABI types", Stand 14. November 2026.

    Gleichnamige Funktionen mit anderen Typen sind verschiedene Funktionen. ERC-721 hat zwei safeTransferFrom: mit Datenfeld 0xb88d4fde, ohne 0x42842e0e. Eine öffentliche Zustandsvariable bekommt einen Getter mit eigenem Selektor; mapping(address => uint256) public balanceOf ergibt balanceOf(address) und damit 0x70a08231, genau wie die Funktion aus ERC-20. Bibliotheken bilden Selektoren für storage-Zeiger und structs nach einer eigenen Regel mit Typnamen; solche Funktionen rechnet das Werkzeug nicht und sagt das auch.

    Topic0 für Events, Selektoren für Fehler

    Ein Log-Eintrag trägt bis zu vier Topics. Das erste ist der volle Hash der Event-Signatur, die übrigen sind die indexierten Parameter, höchstens drei. Die nicht indexierten stehen im Datenteil. Wer Logs abfragt, filtert deshalb über das Topic0: Studien zum Token-Ökosystem bauen ihre Daten genau so aus den Event-Logs auf Chen u. a. 2020.

    • Gleicher Name, gleicher Hash. Transfer aus ERC-20 und Transfer aus ERC-721 haben beide das Topic0 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. Ob ein Parameter indexiert ist, ändert die Signatur nicht. Unterscheiden lassen sich die beiden an der Zahl der Topics: drei bei ERC-20, vier bei ERC-721.
    • Indexierte Texte und Arrays. Bei string, bytes, Arrays und structs steht im Topic nur der Keccak-Hash des Werts. Den Text selbst bekommen Sie aus dem Log nicht zurück.
    • Anonyme Events. Mit anonymous entfällt das Topic0, dafür darf ein vierter Parameter indexiert sein. Filtern geht dann nur über die Adresse und die Werte.

    Fehler beim Abbruch

    Bricht ein Vertrag ab, beginnen die Rückgabedaten mit einem Fehler-Selektor, gebildet wie bei Funktionen. Zwei sind fest eingebaut: 0x08c379a0 steht für Error(string) aus require oder revert mit Text, 0x4e487b71 für Panic(uint256) mit einem Code. Seit Solidity 0.8.4 gibt es eigene Fehler wie error ERC20InsufficientBalance(address,uint256,uint256), Selektor 0xe450d38c. Die Werte 0x00000000 und 0xffffffff sind reserviert; trifft ein eigener Fehler einen davon, warnt der Rechner.

    Panic-Codes nach Solidity-Doku
    CodeUrsache
    0x00allgemeiner, vom Compiler eingefügter Abbruch
    0x01assert mit falscher Bedingung
    0x11Über- oder Unterlauf außerhalb von unchecked
    0x12Division oder Modulo durch null
    0x21zu großer oder negativer Wert für ein enum
    0x22falsch kodiertes Byte-Array im Storage
    0x31.pop() auf leerem Array
    0x32Index außerhalb eines Arrays, bytesN oder Slice
    0x41zu viel Speicher angefordert oder zu großes Array
    0x51Aufruf einer nicht gesetzten internen Funktionsvariable

    Was ein Selektor verrät und was nicht

    Einen Hash kann man nicht umkehren. Man kann nur nachsehen, ob eine bekannte Signatur denselben Wert ergibt. Genau das tut die Rückwärtssuche, mit einer eigenen Liste von 263 Funktionen, 69 Events und 69 Fehlern aus den Standards und den Bibliotheken, die fast jeder Vertrag nutzt. Dass so eine Liste weit trägt, liegt am Ökosystem: Über 96 Prozent der untersuchten Verträge hatten Duplikate He u. a. 2020, und mehr als 80 Prozent der Teilverträge stammen aus fremden Quellen, ein gutes Drittel davon sind Interfaces für Standards Sun u. a. 2023.

    Ein Treffer heißt trotzdem nur: Diese Signatur passt. Öffentliche Datenbanken mit Millionen Einträgen sind unvollständig, deshalb lesen Forscher Selektor und Parametertypen direkt aus dem Bytecode, mit 98,7 Prozent Trefferquote Chen u. a. 2022. Auch Decompiler leiten die Argumente ab Grech u. a. 2022, sind aber nicht fehlerfrei Liu u. a. 2023. Und ein Vertrag, der alle ERC-20-Selektoren hat, ist noch kein ordentlicher Token: Die Erkennung am Interface findet die Standard-Token zuverlässig, Token, die den Standard bewusst meiden, aber nur über ihr Verhalten Fröwis u. a. 2019. Welche Standards ein Vertrag erfüllt, lässt sich aus dem Bytecode prüfen di Angelo und Salzer 2020; die Interface-IDs nach ERC-165 rechnet der Rechner dafür mit.

    Vier Byte sind schnell gefunden

    Ein Selektor hat 2³² mögliche Werte, rund 4,3 Milliarden. Das klingt nach viel, reicht aber nicht gegen Absicht. Schon bei etwa 77.163 beliebigen Signaturen liegt die Wahrscheinlichkeit für irgendein Paar mit gleichem Selektor bei 50 Prozent. Wer gezielt einen bestimmten Selektor treffen will, probiert Namen durch, bis es passt. Das ist für heutige Rechner keine Hürde:

    Gleicher Selektor, andere Signatur (gerechnet)
    SelektorSignatur ASignatur BBekannt als
    0x42966c68burn(uint256)collate_propagate_storage(bytes16)Lehrbeispiel für Proxys
    0x23b872ddtransferFrom(address,address,uint256)gasprice_bit_ether(int128)ERC-20 gegen eine sinnlose Signatur
    0x41973cd9putCurEpochConPubKeyBytes(bytes)f1121318093(bytes,bytes,uint64)Poly Network, August 2021

    Beim Angriff auf Poly Network im August 2021 hat der Angreifer genau so einen Funktionsnamen gesucht: Sein Aufruf landete bei putCurEpochConPubKeyBytes(bytes), weil beide 0x41973cd9 ergeben (Vorfallsbericht bei rekt.news). Der Rechner warnt deshalb, wenn ein eingegebener Selektor in der Liste zu einer anderen Signatur gehört, und meldet gleiche Selektoren innerhalb Ihrer Eingabe. Wer wissen will, was eine konkrete Transaktion tut, liest die Calldata mit dem Calldata-Decoder und prüft die Zieladresse mit dem Ethereum-Adress-Prüfer.

    Proxys: wenn zwei Verträge sich einen Selektor teilen

    Viele Verträge lassen sich austauschen. Ein Proxy hält die Daten und reicht jeden Aufruf per delegatecall an eine Implementierung weiter, die sich später ersetzen lässt. Gemessen wurden 1,4 Millionen solcher Proxys, und rund die Hälfte ließ sich von einer einzelnen Adresse umstellen Salehi u. a. 2023. Eine Folgestudie beschreibt sechs gängige Muster und fand über 10.000 Ketten tatsächlicher Austausche Li u. a. 2024. Zur Einordnung: Über alle Verträge gerechnet sind nur 3 Prozent austauschbar, und davon wurden nur 0,34 Prozent je ausgetauscht Qasse u. a. 2025. Für die Selektoren heißt das: Hinter derselben Adresse können morgen andere Funktionen stehen.

    Haben Proxy und Implementierung eine Funktion mit demselben Selektor, läuft die des Proxys, und die der Implementierung ist von außen nicht erreichbar. Das Transparent-Muster trennt deshalb Admin und Nutzer, beim UUPS-Muster liegt die Upgrade-Funktion in der Implementierung. Eine Messung über 36 Millionen Verträge fand 54,2 Prozent Proxys und rund 1,5 Millionen Verträge mit mindestens einer Kollision von Funktionen oder Speicher Chen u. a. 2025. Fügen Sie Proxy und Implementierung zusammen in den Rechner ein; gleiche Selektoren meldet er über Vertragsgrenzen hinweg.

    Speicherplätze nach EIP-1967

    Teilen sich zwei Verträge den Speicher und deuten ihn verschieden, entstehen Speicherkollisionen Ruaro u. a. 2024. EIP-1967 legt die Adresse der Implementierung deshalb an einen Platz, der aus einem Hash entsteht und mit keiner normalen Variable zusammenfällt: keccak256("eip1967.proxy.implementation") − 1. Wer einen 32-Byte-Wert nachschlägt, bekommt diese Plätze und die Upgrade-Events angezeigt.

    EIP-1967: Speicherplätze und Events (gerechnet)
    WasWert
    EIP-1967-Speicherplatz der Implementierung0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
    EIP-1967-Speicherplatz des Admins0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103
    EIP-1967-Speicherplatz des Beacons0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50
    Event Upgraded(address)0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
    Event AdminChanged(address,address)0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f
    Event BeaconUpgraded(address)0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e

    Diamanten nach EIP-2535 gehen weiter: Ein Vertrag ordnet jeden Selektor einzeln einer Facette zu. Die Funktion dafür nimmt ein Array von structs mit einem enum, kanonisch diamondCut((address,uint8,bytes4[])[],address,bytes), Selektor 0x1f931c1c. Ein gutes Beispiel dafür, warum der Rechner structs und enums selbst auflöst: Von Hand vertippt man sich hier leicht.

    Die Liste bekannter Signaturen

    401 Signaturen in 48 Gruppen, jede mit Quelle und Version. Die Signaturen stammen aus den Quelldateien selbst, gelesen mit dem Parser dieses Werkzeugs; jeder Wert unten ist gerechnet. Wo eine Gruppe ein Interface genau abbildet, steht die Interface-ID nach ERC-165 dabei. Stand 14. November 2026.

    Solidity (eingebaut) 2

    Quelle: Solidity-Doku: Panic via assert und Error via require

    SignaturArtSelektor bzw. Topic0
    Error(string)Fehler0x08c379a0
    Panic(uint256)Fehler0x4e487b71
    ERC-20 8 · ID 0x36372b07

    Quelle: EIP-20: Token Standard

    SignaturArtSelektor bzw. Topic0
    totalSupply()Funktion0x18160ddd
    balanceOf(address)Funktion0x70a08231
    transfer(address,uint256)Funktion0xa9059cbb
    allowance(address,address)Funktion0xdd62ed3e
    approve(address,uint256)Funktion0x095ea7b3
    transferFrom(address,address,uint256)Funktion0x23b872dd
    Transfer(address,address,uint256)Event0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
    Approval(address,address,uint256)Event0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
    ERC-20 Metadata 3 · ID 0xa219a025

    Quelle: OpenZeppelin v5.4.0: IERC20Metadata

    SignaturArtSelektor bzw. Topic0
    name()Funktion0x06fdde03
    symbol()Funktion0x95d89b41
    decimals()Funktion0x313ce567
    ERC-20 Burnable 2

    Quelle: OpenZeppelin v5.4.0: ERC20Burnable

    SignaturArtSelektor bzw. Topic0
    burn(uint256)Funktion0x42966c68
    burnFrom(address,uint256)Funktion0x79cc6790
    ERC-20 (OpenZeppelin 4.x) 7

    Quelle: OpenZeppelin v4.9.6: ERC20 und ERC20PresetMinterPauser

    SignaturArtSelektor bzw. Topic0
    increaseAllowance(address,uint256)Funktion0x39509351
    decreaseAllowance(address,uint256)Funktion0xa457c2d7
    mint(address,uint256)Funktion0x40c10f19
    pause()Funktion0x8456cb59
    unpause()Funktion0x3f4ba83a
    MINTER_ROLE()Funktion0xd5391393
    PAUSER_ROLE()Funktion0xe63ab1e9
    ERC-2612 Permit 6 · ID 0x9d8ff7da

    Quelle: EIP-2612: Permit Extension for EIP-20 Signed Approvals

    SignaturArtSelektor bzw. Topic0
    permit(address,address,uint256,uint256,uint8,bytes32,bytes32)Funktion0xd505accf
    nonces(address)Funktion0x7ecebe00
    DOMAIN_SEPARATOR()Funktion0x3644e515
    ERC2612ExpiredSignature(uint256)Fehler0x62791302
    ERC2612InvalidSigner(address,address)Fehler0x4b800e46
    InvalidAccountNonce(address,uint256)Fehler0x752d88c0
    ERC-6093 Fehler 21

    Quelle: EIP-6093: Custom errors for commonly-used tokens

    SignaturArtSelektor bzw. Topic0
    ERC20InsufficientBalance(address,uint256,uint256)Fehler0xe450d38c
    ERC20InvalidSender(address)Fehler0x96c6fd1e
    ERC20InvalidReceiver(address)Fehler0xec442f05
    ERC20InsufficientAllowance(address,uint256,uint256)Fehler0xfb8f41b2
    ERC20InvalidApprover(address)Fehler0xe602df05
    ERC20InvalidSpender(address)Fehler0x94280d62
    ERC721InvalidOwner(address)Fehler0x89c62b64
    ERC721NonexistentToken(uint256)Fehler0x7e273289
    ERC721IncorrectOwner(address,uint256,address)Fehler0x64283d7b
    ERC721InvalidSender(address)Fehler0x73c6ac6e
    ERC721InvalidReceiver(address)Fehler0x64a0ae92
    ERC721InsufficientApproval(address,uint256)Fehler0x177e802f
    ERC721InvalidApprover(address)Fehler0xa9fbf51f
    ERC721InvalidOperator(address)Fehler0x5b08ba18
    ERC1155InsufficientBalance(address,uint256,uint256,uint256)Fehler0x03dee4c5
    ERC1155InvalidSender(address)Fehler0x01a83514
    ERC1155InvalidReceiver(address)Fehler0x57f447ce
    ERC1155MissingApprovalForAll(address,address)Fehler0xe237d922
    ERC1155InvalidApprover(address)Fehler0x3e31884e
    ERC1155InvalidOperator(address)Fehler0xced3e100
    ERC1155InvalidArrayLength(uint256,uint256)Fehler0x5b059991
    ERC-165 1 · ID 0x01ffc9a7

    Quelle: EIP-165: Standard Interface Detection

    SignaturArtSelektor bzw. Topic0
    supportsInterface(bytes4)Funktion0x01ffc9a7
    ERC-721 12 · ID 0x80ac58cd

    Quelle: EIP-721: Non-Fungible Token Standard

    SignaturArtSelektor bzw. Topic0
    balanceOf(address)Funktion0x70a08231
    ownerOf(uint256)Funktion0x6352211e
    safeTransferFrom(address,address,uint256,bytes)Funktion0xb88d4fde
    safeTransferFrom(address,address,uint256)Funktion0x42842e0e
    transferFrom(address,address,uint256)Funktion0x23b872dd
    approve(address,uint256)Funktion0x095ea7b3
    setApprovalForAll(address,bool)Funktion0xa22cb465
    getApproved(uint256)Funktion0x081812fc
    isApprovedForAll(address,address)Funktion0xe985e9c5
    Transfer(address,address,uint256)Event0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
    Approval(address,address,uint256)Event0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
    ApprovalForAll(address,address,bool)Event0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31
    ERC-721 Metadata 3 · ID 0x5b5e139f

    Quelle: EIP-721: Metadata-Erweiterung

    SignaturArtSelektor bzw. Topic0
    name()Funktion0x06fdde03
    symbol()Funktion0x95d89b41
    tokenURI(uint256)Funktion0xc87b56dd
    ERC-721 Enumerable 3 · ID 0x780e9d63

    Quelle: EIP-721: Enumeration-Erweiterung

    SignaturArtSelektor bzw. Topic0
    totalSupply()Funktion0x18160ddd
    tokenOfOwnerByIndex(address,uint256)Funktion0x2f745c59
    tokenByIndex(uint256)Funktion0x4f6ccce7
    ERC-721 Receiver 1 · ID 0x150b7a02

    Quelle: EIP-721: ERC721TokenReceiver

    SignaturArtSelektor bzw. Topic0
    onERC721Received(address,address,uint256,bytes)Funktion0x150b7a02
    ERC-1155 10 · ID 0xd9b67a26

    Quelle: EIP-1155: Multi Token Standard

    SignaturArtSelektor bzw. Topic0
    balanceOf(address,uint256)Funktion0x00fdd58e
    balanceOfBatch(address[],uint256[])Funktion0x4e1273f4
    setApprovalForAll(address,bool)Funktion0xa22cb465
    isApprovedForAll(address,address)Funktion0xe985e9c5
    safeTransferFrom(address,address,uint256,uint256,bytes)Funktion0xf242432a
    safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)Funktion0x2eb2c2d6
    TransferSingle(address,address,address,uint256,uint256)Event0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62
    TransferBatch(address,address,address,uint256[],uint256[])Event0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb
    ApprovalForAll(address,address,bool)Event0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31
    URI(string,uint256)Event0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b
    ERC-1155 Metadata URI 1 · ID 0x0e89341c

    Quelle: EIP-1155: Metadata-Erweiterung

    SignaturArtSelektor bzw. Topic0
    uri(uint256)Funktion0x0e89341c
    ERC-1155 Receiver 2 · ID 0x4e2312e0

    Quelle: EIP-1155: ERC1155TokenReceiver

    SignaturArtSelektor bzw. Topic0
    onERC1155Received(address,address,uint256,uint256,bytes)Funktion0xf23a6e61
    onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)Funktion0xbc197c81
    ERC-2981 Royalties 1 · ID 0x2a55205a

    Quelle: EIP-2981: NFT Royalty Standard

    SignaturArtSelektor bzw. Topic0
    royaltyInfo(uint256,uint256)Funktion0x2a55205a
    ERC-4906 Metadaten-Update 2

    Quelle: EIP-4906: EIP-721 Metadata Update Extension

    SignaturArtSelektor bzw. Topic0
    MetadataUpdate(uint256)Event0xf8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7
    BatchMetadataUpdate(uint256,uint256)Event0x6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c
    ERC-7572 contractURI 2

    Quelle: ERC-7572: Contract-level metadata via contractURI()

    SignaturArtSelektor bzw. Topic0
    contractURI()Funktion0xe8a3d485
    ContractURIUpdated()Event0xa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962
    ERC-4626 Vault 18

    Quelle: EIP-4626: Tokenized Vaults

    SignaturArtSelektor bzw. Topic0
    asset()Funktion0x38d52e0f
    totalAssets()Funktion0x01e1d114
    convertToShares(uint256)Funktion0xc6e6f592
    convertToAssets(uint256)Funktion0x07a2d13a
    maxDeposit(address)Funktion0x402d267d
    previewDeposit(uint256)Funktion0xef8b30f7
    deposit(uint256,address)Funktion0x6e553f65
    maxMint(address)Funktion0xc63d75b6
    previewMint(uint256)Funktion0xb3d7f6b9
    mint(uint256,address)Funktion0x94bf804d
    maxWithdraw(address)Funktion0xce96cb77
    previewWithdraw(uint256)Funktion0x0a28a477
    withdraw(uint256,address,address)Funktion0xb460af94
    maxRedeem(address)Funktion0xd905777e
    previewRedeem(uint256)Funktion0x4cdad506
    redeem(uint256,address,address)Funktion0xba087652
    Deposit(address,address,uint256,uint256)Event0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
    Withdraw(address,address,address,uint256,uint256)Event0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db
    ERC-1271 Signaturprüfung 1

    Quelle: EIP-1271: Standard Signature Validation Method for Contracts

    SignaturArtSelektor bzw. Topic0
    isValidSignature(bytes32,bytes)Funktion0x1626ba7e
    ERC-5267 EIP-712-Domäne 2

    Quelle: EIP-5267: Retrieval of EIP-712 domain

    SignaturArtSelektor bzw. Topic0
    eip712Domain()Funktion0x84b0196e
    EIP712DomainChanged()Event0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31
    Ownable 6

    Quelle: OpenZeppelin v5.4.0: Ownable

    SignaturArtSelektor bzw. Topic0
    owner()Funktion0x8da5cb5b
    renounceOwnership()Funktion0x715018a6
    transferOwnership(address)Funktion0xf2fde38b
    OwnershipTransferred(address,address)Event0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
    OwnableUnauthorizedAccount(address)Fehler0x118cdaa7
    OwnableInvalidOwner(address)Fehler0x1e4fbdf7
    Ownable2Step 3

    Quelle: OpenZeppelin v5.4.0: Ownable2Step

    SignaturArtSelektor bzw. Topic0
    pendingOwner()Funktion0xe30c3978
    acceptOwnership()Funktion0x79ba5097
    OwnershipTransferStarted(address,address)Event0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700
    AccessControl 10 · ID 0x7965db0b

    Quelle: OpenZeppelin v5.4.0: IAccessControl

    SignaturArtSelektor bzw. Topic0
    hasRole(bytes32,address)Funktion0x91d14854
    getRoleAdmin(bytes32)Funktion0x248a9ca3
    grantRole(bytes32,address)Funktion0x2f2ff15d
    revokeRole(bytes32,address)Funktion0xd547741f
    renounceRole(bytes32,address)Funktion0x36568abe
    RoleAdminChanged(bytes32,bytes32,bytes32)Event0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff
    RoleGranted(bytes32,address,address)Event0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
    RoleRevoked(bytes32,address,address)Event0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
    AccessControlUnauthorizedAccount(address,bytes32)Fehler0xe2517d3f
    AccessControlBadConfirmation()Fehler0x6697b232
    AccessControl-Rolle 1

    Quelle: OpenZeppelin v5.4.0: AccessControl

    SignaturArtSelektor bzw. Topic0
    DEFAULT_ADMIN_ROLE()Funktion0xa217fddf
    AccessControlEnumerable 2 · ID 0x5a05180f

    Quelle: OpenZeppelin v5.4.0: IAccessControlEnumerable

    SignaturArtSelektor bzw. Topic0
    getRoleMember(bytes32,uint256)Funktion0x9010d07c
    getRoleMemberCount(bytes32)Funktion0xca15c873
    Pausable 5

    Quelle: OpenZeppelin v5.4.0: Pausable

    SignaturArtSelektor bzw. Topic0
    paused()Funktion0x5c975abb
    Paused(address)Event0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258
    Unpaused(address)Event0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa
    EnforcedPause()Fehler0xd93c0665
    ExpectedPause()Fehler0x8dfc202b
    Votes (Governance) 9

    Quelle: OpenZeppelin v5.4.0: IVotes

    SignaturArtSelektor bzw. Topic0
    getVotes(address)Funktion0x9ab24eb0
    getPastVotes(address,uint256)Funktion0x3a46b1a8
    getPastTotalSupply(uint256)Funktion0x8e539e8c
    delegates(address)Funktion0x587cde1e
    delegate(address)Funktion0x5c19a95c
    delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)Funktion0xc3cda520
    DelegateChanged(address,address,address)Event0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f
    DelegateVotesChanged(address,uint256,uint256)Event0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724
    VotesExpiredSignature(uint256)Fehler0x4683af0e
    OpenZeppelin-Hilfsfehler 14

    Quelle: OpenZeppelin v5.4.0: Address, Errors, SafeERC20, ECDSA, ReentrancyGuard, Initializable

    SignaturArtSelektor bzw. Topic0
    Initialized(uint64)Event0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2
    ReentrancyGuardReentrantCall()Fehler0x3ee5aeb5
    AddressEmptyCode(address)Fehler0x9996b315
    FailedCall()Fehler0xd6bda275
    FailedDeployment()Fehler0xb06ebf3d
    InsufficientBalance(uint256,uint256)Fehler0xcf479181
    MissingPrecompile(address)Fehler0x42b01bce
    SafeERC20FailedOperation(address)Fehler0x5274afe7
    SafeERC20FailedDecreaseAllowance(address,uint256,uint256)Fehler0xe570110f
    ECDSAInvalidSignature()Fehler0xf645eedf
    ECDSAInvalidSignatureLength(uint256)Fehler0xfce698f7
    ECDSAInvalidSignatureS(bytes32)Fehler0xd78bce0c
    InvalidInitialization()Fehler0xf92ee8a9
    NotInitializing()Fehler0xd7e6bcf8
    Proxy (EIP-1967, UUPS, Transparent, Beacon) 17

    Quelle: EIP-1967 und OpenZeppelin v5.4.0: proxy/

    SignaturArtSelektor bzw. Topic0
    upgradeToAndCall(address,bytes)Funktion0x4f1ef286
    proxiableUUID()Funktion0x52d1902d
    UPGRADE_INTERFACE_VERSION()Funktion0xad3cb1cc
    upgradeAndCall(address,address,bytes)Funktion0x9623609d
    implementation()Funktion0x5c60da1b
    upgradeTo(address)Funktion0x3659cfe6
    Upgraded(address)Event0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
    AdminChanged(address,address)Event0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f
    BeaconUpgraded(address)Event0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e
    ERC1967InvalidImplementation(address)Fehler0x4c9c8ce3
    ERC1967InvalidAdmin(address)Fehler0x62e77ba2
    ERC1967InvalidBeacon(address)Fehler0x64ced0ec
    ERC1967NonPayable()Fehler0xb398979f
    UUPSUnauthorizedCallContext()Fehler0xe07c8dba
    UUPSUnsupportedProxiableUUID(bytes32)Fehler0xaa1d49a4
    ProxyDeniedAdminAccess()Fehler0xd2b576ec
    BeaconInvalidImplementation(address)Fehler0x847ac564
    Proxy (OpenZeppelin 4.x) 6

    Quelle: OpenZeppelin v4.9.6: TransparentUpgradeableProxy, Initializable

    SignaturArtSelektor bzw. Topic0
    admin()Funktion0xf851a440
    implementation()Funktion0x5c60da1b
    changeAdmin(address)Funktion0x8f283970
    upgradeTo(address)Funktion0x3659cfe6
    upgradeToAndCall(address,bytes)Funktion0x4f1ef286
    Initialized(uint8)Event0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498
    EIP-2535 DiamondCut 2 · ID 0x1f931c1c

    Quelle: EIP-2535: Diamonds, Multi-Facet Proxy

    SignaturArtSelektor bzw. Topic0
    diamondCut((address,uint8,bytes4[])[],address,bytes)Funktion0x1f931c1c
    DiamondCut((address,uint8,bytes4[])[],address,bytes)Event0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673
    EIP-2535 DiamondLoupe 4 · ID 0x48e2b093

    Quelle: EIP-2535: Diamonds, Loupe-Funktionen

    SignaturArtSelektor bzw. Topic0
    facets()Funktion0x7a0ed627
    facetFunctionSelectors(address)Funktion0xadfca15e
    facetAddresses()Funktion0x52ef6b2c
    facetAddress(bytes4)Funktion0xcdffacc6
    Multicall3 16

    Quelle: Multicall3 (mds1/multicall3)

    SignaturArtSelektor bzw. Topic0
    aggregate((address,bytes)[])Funktion0x252dba42
    tryAggregate(bool,(address,bytes)[])Funktion0xbce38bd7
    tryBlockAndAggregate(bool,(address,bytes)[])Funktion0x399542e9
    blockAndAggregate((address,bytes)[])Funktion0xc3077fa9
    aggregate3((address,bool,bytes)[])Funktion0x82ad56cb
    aggregate3Value((address,bool,uint256,bytes)[])Funktion0x174dea71
    getBlockHash(uint256)Funktion0xee82ac5e
    getBlockNumber()Funktion0x42cbb15c
    getCurrentBlockCoinbase()Funktion0xa8b0574e
    getCurrentBlockDifficulty()Funktion0x72425d9d
    getCurrentBlockGasLimit()Funktion0x86d516e8
    getCurrentBlockTimestamp()Funktion0x0f28c97d
    getEthBalance(address)Funktion0x4d2301cc
    getLastBlockHash()Funktion0x27e86d6e
    getBasefee()Funktion0x3e64a696
    getChainId()Funktion0x3408e470
    Multicall (OpenZeppelin, Uniswap) 3

    Quelle: Uniswap swap-router-contracts: IMulticallExtended

    SignaturArtSelektor bzw. Topic0
    multicall(bytes[])Funktion0xac9650d8
    multicall(uint256,bytes[])Funktion0x5ae401dc
    multicall(bytes32,bytes[])Funktion0x1f0464d1
    Uniswap V2 Router 24

    Quelle: Uniswap v2-periphery: IUniswapV2Router02

    SignaturArtSelektor bzw. Topic0
    factory()Funktion0xc45a0155
    WETH()Funktion0xad5c4648
    addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)Funktion0xe8e33700
    addLiquidityETH(address,uint256,uint256,uint256,address,uint256)Funktion0xf305d719
    removeLiquidity(address,address,uint256,uint256,uint256,address,uint256)Funktion0xbaa2abde
    removeLiquidityETH(address,uint256,uint256,uint256,address,uint256)Funktion0x02751cec
    removeLiquidityWithPermit(address,address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)Funktion0x2195995c
    removeLiquidityETHWithPermit(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)Funktion0xded9382a
    swapExactTokensForTokens(uint256,uint256,address[],address,uint256)Funktion0x38ed1739
    swapTokensForExactTokens(uint256,uint256,address[],address,uint256)Funktion0x8803dbee
    swapExactETHForTokens(uint256,address[],address,uint256)Funktion0x7ff36ab5
    swapTokensForExactETH(uint256,uint256,address[],address,uint256)Funktion0x4a25d94a
    swapExactTokensForETH(uint256,uint256,address[],address,uint256)Funktion0x18cbafe5
    swapETHForExactTokens(uint256,address[],address,uint256)Funktion0xfb3bdb41
    quote(uint256,uint256,uint256)Funktion0xad615dec
    getAmountOut(uint256,uint256,uint256)Funktion0x054d50d4
    getAmountIn(uint256,uint256,uint256)Funktion0x85f8c259
    getAmountsOut(uint256,address[])Funktion0xd06ca61f
    getAmountsIn(uint256,address[])Funktion0x1f00ca74
    removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)Funktion0xaf2979eb
    removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)Funktion0x5b0d5984
    swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)Funktion0x5c11d795
    swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,address[],address,uint256)Funktion0xb6f9de95
    swapExactTokensForETHSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)Funktion0x791ac947
    Uniswap V2 Pair 19

    Quelle: Uniswap v2-core: IUniswapV2Pair

    SignaturArtSelektor bzw. Topic0
    PERMIT_TYPEHASH()Funktion0x30adf81f
    MINIMUM_LIQUIDITY()Funktion0xba9a7a56
    factory()Funktion0xc45a0155
    token0()Funktion0x0dfe1681
    token1()Funktion0xd21220a7
    getReserves()Funktion0x0902f1ac
    price0CumulativeLast()Funktion0x5909c0d5
    price1CumulativeLast()Funktion0x5a3d5493
    kLast()Funktion0x7464fc3d
    mint(address)Funktion0x6a627842
    burn(address)Funktion0x89afcb44
    swap(uint256,uint256,address,bytes)Funktion0x022c0d9f
    skim(address)Funktion0xbc25cf77
    sync()Funktion0xfff6cae9
    initialize(address,address)Funktion0x485cc955
    Mint(address,uint256,uint256)Event0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f
    Burn(address,uint256,uint256,address)Event0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496
    Swap(address,uint256,uint256,uint256,uint256,address)Event0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822
    Sync(uint112,uint112)Event0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1
    Uniswap V2 Factory 10

    Quelle: Uniswap v2-core: IUniswapV2Factory, IUniswapV2Callee

    SignaturArtSelektor bzw. Topic0
    feeTo()Funktion0x017e7e58
    feeToSetter()Funktion0x094b7415
    getPair(address,address)Funktion0xe6a43905
    allPairs(uint256)Funktion0x1e3dd18b
    allPairsLength()Funktion0x574f2ba3
    createPair(address,address)Funktion0xc9c65396
    setFeeTo(address)Funktion0xf46901ed
    setFeeToSetter(address)Funktion0xa2e74af6
    uniswapV2Call(address,uint256,uint256,bytes)Funktion0x10d1e85c
    PairCreated(address,address,address,uint256)Event0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9
    Uniswap V3 Pool 36

    Quelle: Uniswap v3-core: IUniswapV3Pool (Actions, State, Immutables, DerivedState, Events)

    SignaturArtSelektor bzw. Topic0
    initialize(uint160)Funktion0xf637731d
    mint(address,int24,int24,uint128,bytes)Funktion0x3c8a7d8d
    collect(address,int24,int24,uint128,uint128)Funktion0x4f1eb3d8
    burn(int24,int24,uint128)Funktion0xa34123a7
    swap(address,bool,int256,uint160,bytes)Funktion0x128acb08
    flash(address,uint256,uint256,bytes)Funktion0x490e6cbc
    increaseObservationCardinalityNext(uint16)Funktion0x32148f67
    slot0()Funktion0x3850c7bd
    feeGrowthGlobal0X128()Funktion0xf3058399
    feeGrowthGlobal1X128()Funktion0x46141319
    protocolFees()Funktion0x1ad8b03b
    liquidity()Funktion0x1a686502
    ticks(int24)Funktion0xf30dba93
    tickBitmap(int16)Funktion0x5339c296
    positions(bytes32)Funktion0x514ea4bf
    observations(uint256)Funktion0x252c09d7
    factory()Funktion0xc45a0155
    token0()Funktion0x0dfe1681
    token1()Funktion0xd21220a7
    fee()Funktion0xddca3f43
    tickSpacing()Funktion0xd0c93a7c
    maxLiquidityPerTick()Funktion0x70cf754a
    observe(uint32[])Funktion0x883bdbfd
    snapshotCumulativesInside(int24,int24)Funktion0xa38807f2
    uniswapV3SwapCallback(int256,int256,bytes)Funktion0xfa461e33
    uniswapV3MintCallback(uint256,uint256,bytes)Funktion0xd3487997
    uniswapV3FlashCallback(uint256,uint256,bytes)Funktion0xe9cbafb0
    Initialize(uint160,int24)Event0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95
    Mint(address,address,int24,int24,uint128,uint256,uint256)Event0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde
    Collect(address,address,int24,int24,uint128,uint128)Event0x70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0
    Burn(address,int24,int24,uint128,uint256,uint256)Event0x0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c
    Swap(address,address,int256,int256,uint160,uint128,int24)Event0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67
    Flash(address,address,uint256,uint256,uint256,uint256)Event0xbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca633
    IncreaseObservationCardinalityNext(uint16,uint16)Event0xac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a
    SetFeeProtocol(uint8,uint8,uint8,uint8)Event0x973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133
    CollectProtocol(address,address,uint128,uint128)Event0x596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151
    Uniswap V3 Factory 9

    Quelle: Uniswap v3-core: IUniswapV3Factory

    SignaturArtSelektor bzw. Topic0
    owner()Funktion0x8da5cb5b
    feeAmountTickSpacing(uint24)Funktion0x22afcccb
    getPool(address,address,uint24)Funktion0x1698ee82
    createPool(address,address,uint24)Funktion0xa1671295
    setOwner(address)Funktion0x13af4035
    enableFeeAmount(uint24,int24)Funktion0x8a7c195f
    OwnerChanged(address,address)Event0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c
    PoolCreated(address,address,uint24,int24,address)Event0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118
    FeeAmountEnabled(uint24,int24)Event0xc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc
    Uniswap V3 SwapRouter 11

    Quelle: Uniswap v3-periphery ISwapRouter, IPeripheryPayments und swap-router-contracts IV3SwapRouter (SwapRouter02)

    SignaturArtSelektor bzw. Topic0
    exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))Funktion0x414bf389
    exactInput((bytes,address,uint256,uint256,uint256))Funktion0xc04b8d59
    exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))Funktion0xdb3e2198
    exactOutput((bytes,address,uint256,uint256,uint256))Funktion0xf28c0498
    exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))Funktion0x04e45aaf
    exactInput((bytes,address,uint256,uint256))Funktion0xb858183f
    exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))Funktion0x5023b4df
    exactOutput((bytes,address,uint256,uint256))Funktion0x09b81346
    unwrapWETH9(uint256,address)Funktion0x49404b7c
    refundETH()Funktion0x12210e8a
    sweepToken(address,uint256,address)Funktion0xdf2ab5bb
    Uniswap V3 Positionen 9

    Quelle: Uniswap v3-periphery: INonfungiblePositionManager

    SignaturArtSelektor bzw. Topic0
    positions(uint256)Funktion0x99fbab88
    mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))Funktion0x88316456
    increaseLiquidity((uint256,uint256,uint256,uint256,uint256,uint256))Funktion0x219f5d17
    decreaseLiquidity((uint256,uint128,uint256,uint256,uint256))Funktion0x0c49ccbe
    collect((uint256,address,uint128,uint128))Funktion0xfc6f7865
    burn(uint256)Funktion0x42966c68
    IncreaseLiquidity(uint256,uint128,uint256,uint256)Event0x3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f
    DecreaseLiquidity(uint256,uint128,uint256,uint256)Event0x26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b4
    Collect(uint256,address,uint256,uint256)Event0x40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f01
    Uniswap Universal Router 9

    Quelle: Uniswap universal-router: UniversalRouter, IUniversalRouter

    SignaturArtSelektor bzw. Topic0
    execute(bytes,bytes[],uint256)Funktion0x3593564c
    execute(bytes,bytes[])Funktion0x24856bc3
    executeSigned(bytes,bytes[],bytes32,bytes32,bool,bytes32,bytes,uint256)Funktion0x44684dc3
    signedRouteContext()Funktion0xd04d79a2
    ExecutionFailed(uint256,bytes)Fehler0x2c4029e9
    ETHNotAccepted()Fehler0x1231ae40
    TransactionDeadlinePassed()Fehler0x5bf6f916
    LengthMismatch()Fehler0xff633a38
    InvalidEthSender()Fehler0x38bbd576
    Permit2 31

    Quelle: Uniswap permit2: IAllowanceTransfer, ISignatureTransfer, PermitErrors, SignatureVerification

    SignaturArtSelektor bzw. Topic0
    allowance(address,address,address)Funktion0x927da105
    approve(address,address,uint160,uint48)Funktion0x87517c45
    permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)Funktion0x2b67b570
    permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)Funktion0x2a2d80d1
    transferFrom(address,address,uint160,address)Funktion0x36c78516
    transferFrom((address,address,uint160,address)[])Funktion0x0d58b1db
    lockdown((address,address)[])Funktion0xcc53287f
    invalidateNonces(address,address,uint48)Funktion0x65d9723c
    nonceBitmap(address,uint256)Funktion0x4fe02b44
    permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)Funktion0x30f28b7a
    permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)Funktion0x137c29fe
    permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)Funktion0xedd9444b
    permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)Funktion0xfe8ec1a7
    invalidateUnorderedNonces(uint256,uint256)Funktion0x3ff9dcb1
    DOMAIN_SEPARATOR()Funktion0x3644e515
    NonceInvalidation(address,address,address,uint48,uint48)Event0x55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f3
    Approval(address,address,address,uint160,uint48)Event0xda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b
    Permit(address,address,address,uint160,uint48,uint48)Event0xc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec
    Lockdown(address,address,address)Event0x89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4
    UnorderedNonceInvalidation(address,uint256,uint256)Event0x3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d
    AllowanceExpired(uint256)Fehler0xd81b2f2e
    InsufficientAllowance(uint256)Fehler0xf96fb071
    ExcessiveInvalidation()Fehler0x24d35a26
    InvalidAmount(uint256)Fehler0x3728b83d
    LengthMismatch()Fehler0xff633a38
    SignatureExpired(uint256)Fehler0xcd21db4f
    InvalidNonce()Fehler0x756688fe
    InvalidSignatureLength()Fehler0x4be6321b
    InvalidSignature()Fehler0x8baa579f
    InvalidSigner()Fehler0x815e1d64
    InvalidContractSignature()Fehler0xb0669cbc
    Safe (Multisig) 46

    Quelle: Safe Smart Account v1.4.1: Safe, OwnerManager, ModuleManager, GuardManager, FallbackManager

    SignaturArtSelektor bzw. Topic0
    setup(address[],uint256,address,bytes,address,address,uint256,address)Funktion0xb63e800d
    execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)Funktion0x6a761202
    checkSignatures(bytes32,bytes,bytes)Funktion0x934f3a11
    checkNSignatures(bytes32,bytes,bytes,uint256)Funktion0x12fb68e0
    approveHash(bytes32)Funktion0xd4d9bdcd
    domainSeparator()Funktion0xf698da25
    encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)Funktion0xe86637db
    getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)Funktion0xd8d11f78
    VERSION()Funktion0xffa1ad74
    nonce()Funktion0xaffed0e0
    signedMessages(bytes32)Funktion0x5ae6bd37
    approvedHashes(address,bytes32)Funktion0x7d832974
    addOwnerWithThreshold(address,uint256)Funktion0x0d582f13
    removeOwner(address,address,uint256)Funktion0xf8dc5dd9
    swapOwner(address,address,address)Funktion0xe318b52b
    changeThreshold(uint256)Funktion0x694e80c3
    getThreshold()Funktion0xe75235b8
    isOwner(address)Funktion0x2f54bf6e
    getOwners()Funktion0xa0e67e2b
    enableModule(address)Funktion0x610b5925
    disableModule(address,address)Funktion0xe009cfde
    execTransactionFromModule(address,uint256,bytes,uint8)Funktion0x468721a7
    execTransactionFromModuleReturnData(address,uint256,bytes,uint8)Funktion0x5229073f
    isModuleEnabled(address)Funktion0x2d9ad53d
    getModulesPaginated(address,uint256)Funktion0xcc2f8452
    setGuard(address)Funktion0xe19a9dd9
    setFallbackHandler(address)Funktion0xf08a0323
    getStorageAt(uint256,uint256)Funktion0x5624b25b
    simulateAndRevert(address,bytes)Funktion0xb4faba09
    getChainId()Funktion0x3408e470
    checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)Funktion0x75f0bb52
    checkAfterExecution(bytes32,bool)Funktion0x93271368
    SafeSetup(address,address[],uint256,address,address)Event0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8
    ApproveHash(bytes32,address)Event0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c
    SignMsg(bytes32)Event0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4
    ExecutionFailure(bytes32,uint256)Event0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23
    ExecutionSuccess(bytes32,uint256)Event0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e
    AddedOwner(address)Event0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26
    RemovedOwner(address)Event0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf
    ChangedThreshold(uint256)Event0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93
    EnabledModule(address)Event0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440
    DisabledModule(address)Event0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276
    ExecutionFromModuleSuccess(address)Event0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8
    ExecutionFromModuleFailure(address)Event0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375
    ChangedGuard(address)Event0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2
    ChangedFallbackHandler(address)Event0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0
    Safe ProxyFactory und MultiSend 6

    Quelle: Safe Smart Account v1.4.1: SafeProxyFactory, MultiSend

    SignaturArtSelektor bzw. Topic0
    proxyCreationCode()Funktion0x53e5d935
    createProxyWithNonce(address,bytes,uint256)Funktion0x1688f0b9
    createChainSpecificProxyWithNonce(address,bytes,uint256)Funktion0xec9e80bb
    createProxyWithCallback(address,bytes,uint256,address)Funktion0xd18af54d
    multiSend(bytes)Funktion0x8d80ff0a
    ProxyCreation(address,address)Event0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235
    WETH9 4

    Quelle: WETH9 (gnosis/canonical-weth)

    SignaturArtSelektor bzw. Topic0
    deposit()Funktion0xd0e30db0
    withdraw(uint256)Funktion0x2e1a7d4d
    Deposit(address,uint256)Event0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c
    Withdrawal(address,uint256)Event0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65
    Chainlink Preis-Feed 5

    Quelle: Chainlink: AggregatorV3Interface

    SignaturArtSelektor bzw. Topic0
    decimals()Funktion0x313ce567
    description()Funktion0x7284e416
    version()Funktion0x54fd4d50
    getRoundData(uint80)Funktion0x9a6fc8f5
    latestRoundData()Funktion0xfeaf968c

    So prüfen Sie Selektoren in der Praxis

    1. Signatur aus dem verifizierten Quelltext nehmen. Nicht aus einem Forum und nicht aus einer Datenbank. Ganze Dateien samt struct- und enum-Definitionen können Sie direkt einfügen.
    2. Selektor im Bytecode suchen. Steht der Wert nicht im Code des Vertrags, hat er die Funktion nicht, egal was die Oberfläche sagt.
    3. Bei Proxys die Implementierung lesen. Ihre Adresse steht im EIP-1967-Speicherplatz. Proxy und Implementierung zusammen in den Rechner geben, Kollisionen prüfen.
    4. Events über das Topic0 filtern und an der Zahl der Topics prüfen, welcher Standard dahintersteht.
    5. Fehler entschlüsseln. Die ersten 4 Byte der Rückgabe nachschlagen; Text und Argumente zeigt der Calldata-Decoder.

    Wo der Rechner aufhört

    • Keine Blockchain. Er rechnet aus Text. Ob ein Vertrag eine Funktion hat, zeigt erst sein Bytecode.
    • Unbekannte Typen. Ist ein struct oder enum nicht mit eingefügt, rechnet er die Signatur nicht. Namen nach dem Muster IName wertet er als Interface und sagt das dazu.
    • Bibliotheken. Externe Bibliotheksfunktionen mit storage-, struct- oder enum-Parametern folgen einer eigenen Regel und bleiben außen vor.
    • Rückwärtssuche als Kandidat. Die Liste ist kuratiert, nicht vollständig. Ein Treffer ist eine passende Signatur, kein Beweis.

    Mehr Werkzeuge rund um Verträge und Wallets stehen in der Web3-Übersicht, darunter der Gas-Rechner. Wie wir Smart Contracts und die Oberflächen dazu bauen, steht unter Web3-Entwicklung.

    Was die Forschung dazu sagt

    Fünf Befunde, die das Werkzeug prägen. Die vollständige Liste mit Prüfvermerk steht weiter unten.

    • Selektoren stecken im Bytecode. Decompiler lesen über 99,98 Prozent der Verträge Grech u. a. 2019, Signaturen samt Typen lassen sich zu 98,7 Prozent zurückgewinnen Chen u. a. 2022. Darum verweist der Rechner bei jeder Unsicherheit auf den Bytecode.
    • Wenige Standards decken viel ab. Verträge sind stark kopiert He u. a. 2020 und bestehen großteils aus fremden Bausteinen Sun u. a. 2023. Deshalb ist die Liste nach Bibliotheken gegliedert und nennt die Version.
    • Selektoren beweisen keinen Standard. Token lassen sich am Interface erkennen, solche ohne Standard nur am Verhalten Fröwis u. a. 2019.
    • Proxys sind häufig, Kollisionen auch. Mehr als jeder zweite aktive Vertrag ist ein Proxy, rund 1,5 Millionen zeigen eine Kollision Chen u. a. 2025. Der Rechner prüft deshalb über Vertragsgrenzen hinweg.
    • Speicher braucht feste Plätze. Speicherkollisionen sind ein eigenes Risiko Ruaro u. a. 2024; die EIP-1967-Plätze erkennt der Rechner beim Nachschlagen.

    Dieses Werkzeug aus einem KI-Assistenten nutzen

    Assistenten wie Claude oder ChatGPT, die das Model Context Protocol (MCP) sprechen, können die Rechnung dieser Seite direkt aufrufen, statt sie nachzubauen. Der Server ist öffentlich, braucht keine Anmeldung und speichert nichts. Die Antwort enthält immer den Link auf diese Seite, den Stand der Daten und die Grenzen des Ergebnisses.

    Endpunkt
    https://aureum-tech.com/mcp
    Werkzeug
    werkzeug_selektor_rechner
    Transport
    Streamable HTTP, nur lesend
    Eingaben
    NamePflichtBedeutung
    eingabejaWas berechnet oder nachgeschlagen werden soll, als Text: eine Signatur („transfer(address,uint256)"), eine oder mehrere Zeilen Solidity („function transfer(address to, uint amount) external returns (bool);", „event Transfer(address indexed from, …)", „error X(uint256)"), ein ganzer Vertrag oder ein Interface mit struct-, enum- und type-Definitionen, eine ABI als JSON (auch ein Hardhat-/Foundry-Artefakt mit „abi") oder Hex-Werte zum Nachschlagen (4-Byte-Selektor, 32-Byte-Topic, Calldata).

    Fragen, bei denen ein Assistent es aufrufen sollte

    • „Welcher Funktions-Selektor gehört zu transfer(address,uint256)?"
    • „Zu welcher Funktion gehört der Selektor 0x095ea7b3?"
    • „Wie lautet das Topic0 für event Transfer(address indexed from, address indexed to, uint256 value)?"
    • „Rechne mir aus dieser ABI alle Selektoren aus und prüfe, ob zwei Funktionen kollidieren."
    • „Welche Interface-ID nach ERC-165 hat dieses Solidity-Interface?"

    Wie die Anbindung funktioniert und was MCP im eigenen Betrieb leisten kann, steht auf der Seite zu MCP-Integrationen.

    Häufige Fragen zu Selektoren und Topics

    Was ist ein Funktions-Selektor?

    Die ersten 4 Byte der Calldata, mit denen eine Transaktion sagt, welche Funktion eines Vertrags laufen soll. Sie sind die ersten 4 Byte des Keccak-256-Hashes der kanonischen Signatur, also Name und Parametertypen ohne Leerzeichen, Parameternamen und Rückgabe. Aus transfer(address,uint256) wird 0xa9059cbb, aus approve(address,uint256) 0x095ea7b3.

    Wie berechne ich den Selektor einer Funktion mit struct-Parameter?

    Das struct wird zum Tupel: seine Feldtypen in Klammern, in der Reihenfolge der Deklaration, verschachtelte structs ebenso. Ein enum wird uint8, ein Vertrag oder Interface address. exactInputSingle von Uniswap V3 nimmt ein struct mit acht Feldern und lautet kanonisch exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160)), Selektor 0x414bf389. Fügen Sie dem Rechner die struct-Definition mit ein, dann löst er das selbst auf.

    Warum haben Transfer bei ERC-20 und ERC-721 dasselbe Topic0?

    Beide Events heißen Transfer(address,address,uint256), also ist auch der Hash gleich: 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. Die indexierten Parameter gehören nicht zur Signatur. Unterscheiden lassen sich die beiden an der Zahl der Topics: ERC-20 indexiert Absender und Empfänger (drei Topics), ERC-721 zusätzlich die Token-ID (vier Topics).

    Kann man aus einem Selektor die Funktion zurückrechnen?

    Nein, ein Hash lässt sich nicht umkehren. Man kann nur nachsehen, welche bekannte Signatur denselben Wert ergibt. Der Rechner kennt 401 Signaturen verbreiteter Standards und Bibliotheken, öffentliche Datenbanken kennen Millionen. Weil 4 Byte nur rund 4,3 Milliarden Werte haben, lassen sich passende Signaturen gezielt erzeugen; ein Treffer ist deshalb ein Kandidat, keine Gewissheit.

    Was bedeutet 0x08c379a0 in einer fehlgeschlagenen Transaktion?

    0x08c379a0 ist der Selektor von Error(string): Der Vertrag hat mit require oder revert und einem Text abgebrochen, der Text folgt ABI-kodiert dahinter. 0x4e487b71 steht für Panic(uint256), etwa bei einem Überlauf (Code 0x11) oder einer Division durch null (0x12). Eigene Fehler wie ERC20InsufficientBalance haben eigene Selektoren, die der Rechner nachschlägt.

    Was ist eine Interface-ID nach ERC-165?

    Das XOR der Selektoren aller Funktionen, die ein Interface selbst deklariert. Ein Vertrag meldet über supportsInterface(bytes4), welche Interfaces er umsetzt. ERC-721 hat die ID 0x80ac58cd, ERC-1155 0xd9b67a26. Fügen Sie ein Interface im Quelltext ein, dann rechnet das Werkzeug die ID mit.

    Wo hört der Selektor-Rechner auf?

    Er bildet Signaturen nach der ABI-Spezifikation und schlägt in einer kuratierten Liste nach. Er liest keine Blockchain, also weiß er nicht, ob ein bestimmter Vertrag eine Funktion wirklich hat, und hinter einem Proxy kann sich die Implementierung jederzeit ändern. Bibliotheksfunktionen mit storage-, struct- oder enum-Parametern rechnet er nicht. Wenn Sie Verträge und die Anwendung dazu brauchen, entwickeln wir das mit Ihnen.

    Worauf sich das Werkzeug stützt

    Die Richtwerte und Hinweise oben beruhen auf diesen 14 wissenschaftlichen Arbeiten. Jede ist über ihren DOI bzw. die Seite des Verlags geprüft (zuletzt am 14. November 2026): Es gibt sie, sie ist nicht zurückgezogen, und ihr Befund trägt für die Frage heute noch.

    1. Chen, T.; Li, Z.; Luo, X. u. a. (2022): SigRec: Automatic Recovery of Function Signatures in Smart Contracts. IEEE Transactions on Software Engineering 48 (8), S. 3066–3086

      Befund Bytecode enthält keine Typinformation; bisherige Werkzeuge stützten sich auf unvollständige Datenbanken bekannter Signaturen. SigRec liest Selektor und Parametertypen aus dem Verhalten der EVM und trifft in 98,7 Prozent der Fälle.

      Im Werkzeug Begründet, warum die Rückwärtssuche nur Kandidaten liefert: Eine Liste kennt nur, was jemand eingetragen hat; Gewissheit gibt erst der Bytecode.

    2. Grech, N.; Brent, L.; Scholz, B.; Smaragdakis, Y. (2019): Gigahorse: Thorough, Declarative Decompilation of Smart Contracts. IEEE/ACM 41st International Conference on Software Engineering (ICSE), S. 1176–1186

      Befund Ein Decompiler kann über 99,98 Prozent der veröffentlichten Verträge aus dem Bytecode in eine lesbare Zwischenform bringen, ohne den Quelltext zu kennen.

      Im Werkzeug Stützt den Hinweis, dass sich die Selektoren eines Vertrags aus seinem Bytecode lesen lassen, auch wenn er nicht verifiziert ist.

    3. Grech, N.; Lagouvardos, S.; Tsatiris, I.; Smaragdakis, Y. (2022): Elipmoc: advanced decompilation of Ethereum smart contracts. Proceedings of the ACM on Programming Languages 6 (OOPSLA1), S. 1–27

      Befund Der Nachfolger von Gigahorse leitet Argumente und Rückgaben der Funktionen ab und löst 99,5 Prozent der Operanden auf (Gigahorse: 62,8 Prozent); er deckt deutlich mehr ab als der Decompiler im Block-Explorer.

      Im Werkzeug Zeigt, dass Parametertypen aus dem Bytecode erschlossen werden; der Rechner sagt deshalb, eine gefundene Signatur sei ein Kandidat, keine Gewissheit.

    4. Liu, X.; Hua, B.; Wang, Y.; Pan, Z. (2023): An Empirical Study of Smart Contract Decompilers. IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER), S. 1–12

      Befund Erste große Vergleichsstudie von fünf Decompilern: Die Autoren benennen wiederkehrende Ursachen für Fehlschläge und unvollständige Ergebnisse und raten, das Werkzeug je nach Zweck zu wählen, statt dem Ergebnis blind zu trauen.

      Im Werkzeug Begründet die Grenze: Wer wissen muss, was ein Vertrag tut, braucht den geprüften Quelltext, nicht nur dekompilierte Selektoren.

    5. Fröwis, M.; Fuchs, A.; Böhme, R. (2019): Detecting Token Systems on Ethereum. Financial Cryptography and Data Security, Lecture Notes in Computer Science, S. 93–112

      Befund Token-Verträge lassen sich am ERC-20-Interface im Bytecode erkennen (in der Prüfmenge vollständig). Eine Erkennung am Verhalten fand 89 Prozent und auch Token, die den Standard bewusst nicht umsetzen.

      Im Werkzeug Der Rechner nennt passende Standards zu einem Selektor, sagt aber dazu, dass die Selektoren allein nicht beweisen, dass ein Vertrag den Standard wirklich erfüllt.

    6. di Angelo, M.; Salzer, G. (2020): Tokens, Types, and Standards: Identification and Utilization in Ethereum. IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), S. 1–10

      Befund Token-Verträge werden aus dem Bytecode identifiziert, indem man prüft, welche Standards ihre Funktionen erfüllen; ausgewertet bis Block 8.750.000 (Oktober 2019).

      Im Werkzeug Trägt die Gliederung der Liste nach Standards und die Interface-ID je Standard (ERC-165), mit der Verträge sich selbst ausweisen.

    7. He, N.; Wu, L.; Wang, H.; Guo, Y.; Jiang, X. (2020): Characterizing Code Clones in the Ethereum Smart Contract Ecosystem. Financial Cryptography and Data Security, Lecture Notes in Computer Science, S. 654–675

      Befund Von 10 Millionen untersuchten Verträgen hatten über 96 Prozent Duplikate; das Ökosystem ist stark gleichförmig.

      Im Werkzeug Erklärt, warum eine kuratierte Liste von wenigen hundert Standard-Signaturen einen großen Teil der Aufrufe im Alltag trifft.

    8. Sun, K.; Xu, Z.; Liu, C. u. a. (2023): Demystifying the Composition and Code Reuse in Solidity Smart Contracts. ESEC/FSE 2023, Proceedings of the 31st ACM Joint European Software Engineering Conference, S. 796–807

      Befund In über 350.000 Verträgen stammten mehr als 80 Prozent der Teilverträge aus fremden Quellen, rund 35 Prozent davon waren Interfaces für Standards und Protokolle.

      Im Werkzeug Begründet, die Liste nach den verbreiteten Bibliotheken zu führen (OpenZeppelin, Uniswap, Safe, Permit2) und je Gruppe die Quelle mit Version zu nennen.

    9. Chen, W.; Zhang, T.; Chen, Z.; Zheng, Z.; Lu, Y. (2020): Traveling the token world: A graph analysis of Ethereum ERC20 token ecosystem. Proceedings of The Web Conference 2020, S. 1411–1421

      Befund Über 80 Prozent der ICOs setzten auf ERC-20-Token. Die Studie baut das Ökosystem aus Transaktionen und Event-Logs nach und erkennt darin Beziehungen zwischen Konten.

      Im Werkzeug Beispiel dafür, dass Auswertungen Events über das Topic0 filtern; der Rechner liefert genau diesen Wert und weist darauf hin, dass ERC-20 und ERC-721 dasselbe Transfer-Topic0 haben.

    10. Salehi, M.; Clark, J.; Mannan, M. (2023): Not so Immutable: Upgradeability of Smart Contracts on Ethereum. Financial Cryptography and Data Security. FC 2022 International Workshops, Lecture Notes in Computer Science, S. 539–554

      Befund Sechs Muster für austauschbare Verträge beschrieben und gemessen: 1,4 Millionen Proxy-Verträge, davon 8.225 eigenständige; rund die Hälfte ließ sich von einer einzelnen Adresse umstellen.

      Im Werkzeug Begründet den Abschnitt zu Proxys: Hinter einer Adresse kann später ein anderer Code stehen, also auch andere Selektoren.

    11. Li, X.; Yang, J.; Chen, J.; Tang, Y.; Gao, X. (2024): Characterizing Ethereum Upgradable Smart Contracts and Their Security Implications. Proceedings of the ACM Web Conference 2024, S. 1847–1858

      Befund Sechs gängige Muster austauschbarer Verträge; über 60 Millionen Verträge ohne Quelltext untersucht, 10.218 Ketten von Upgrades rekonstruiert.

      Im Werkzeug Stützt die Aufzählung der Proxy-Muster (Transparent, UUPS, Beacon, Diamond) und den Hinweis, die Upgrade-Events Upgraded und AdminChanged zu beobachten.

    12. Qasse, I.; Hamdaqa, M.; Jónsson, B. Þ. (2025): Immutable in principle, upgradeable by design: exploratory study of smart contract upgradeability. Empirical Software Engineering 31 (2), Art. 39

      Befund Von über 44 Millionen Verträgen trugen nur 3 Prozent Merkmale der Austauschbarkeit, und nur 0,34 Prozent davon wurden tatsächlich ausgetauscht.

      Im Werkzeug Ordnet ein: Die meisten Verträge sind nicht austauschbar; wo doch, lohnt der Blick auf den EIP-1967-Speicherplatz.

    13. Chen, C.-K.; Chu, W.-Y.; Tran, M. u. a. (2025): Uncovering Hidden Proxy Smart Contracts for Finding Collision Vulnerabilities in Ethereum. IEEE 45th International Conference on Distributed Computing Systems (ICDCS), S. 1099–1109

      Befund Von über 36 Millionen aktiven Verträgen (2015 bis 2023) waren 54,2 Prozent Proxys; rund 1,5 Millionen zeigten mindestens eine Kollision von Funktionen oder Speicher zwischen Proxy und Logik.

      Im Werkzeug Grund für die Kollisionsprüfung über mehrere eingefügte Verträge: Proxy und Implementierung zusammen einfügen, dann meldet der Rechner gleiche Selektoren.

    14. Ruaro, N.; Gritti, F.; McLaughlin, R. u. a. (2024): Not your Type! Detecting Storage Collision Vulnerabilities in Ethereum Smart Contracts. Network and Distributed System Security Symposium (NDSS) 2024

      Befund Teilen zwei Verträge per delegatecall ihren Speicher und deuten ihn verschieden, entstehen Speicherkollisionen; das System CRUSH untersuchte rund 14,2 Millionen Verträge und erzeugte Beweis-Angriffe.

      Im Werkzeug Begründet, warum EIP-1967 Speicherplätze aus einem Hash ableitet; der Rechner erkennt diese drei Plätze beim Nachschlagen.

    Normen, Behörden und Herstellerangaben

    Mo–Fr 8–17 Uhr

    Sie planen einen Smart Contract oder eine Anwendung, die Verträge anspricht? Schicken Sie uns kurz, worum es geht, gern mit dem kopierten Ergebnis. Wir entwickeln die Verträge und die Oberflächen dazu, aus Rodewisch im Vogtland.

    +49 3744 4399760[email protected]

    Mo–Fr 8–17 Uhr · Straße der Jugend 5, 08228 Rodewisch

    Web3-Projekt anfragen
    MENÜ
    +49 3744 4399760Mo–Fr 8–17 Uhr
    AnrufenRückruf

    STÜCKLISTE · BLATT 1/1

    Woraus diese Seite besteht

    Werte beim Build gemessen — mit JavaScript misst Ihr Browser live nach.

    POSBAUTEILTYPGRÖSSE
    01index.htmlDokument≈ 29 kB
    02styles.cssStylesheet≈ 20 kB
    03scripts.jsScript≈ 13 kB
    04archivo-variable.woff2Schrift≈ 58 kB
    05ibm-plex-mono.woff2Schrift≈ 30 kB
    06favicon.svgGrafik< 1 kB

    Werbe- oder Analyse-Cookies: keine. Ohne Ihre Einwilligung lädt die Seite nichts von fremden Servern außer unserem Auslieferungsdienst Cloudflare — Schriften, Skripte und Grafiken liegen bei uns. So bauen wir auch Ihre IT.

    AUSSERHALB DER GESCHÄFTSZEITEN

    Rufen Sie ruhig trotzdem an

    Regulär sind wir Mo–Fr 8–17 Uhr im Büro.

    Die Nummer ist auch abends und am Wochenende zu uns umgeleitet, und oft geht dann jemand ran. Versprechen können wir das nicht.

    Erreichen Sie niemanden, sprechen Sie kurz auf die Mailbox: Name, Nummer und worum es geht. Wir rufen so schnell wie möglich zurück, spätestens am nächsten Werktag.

    Das Gespräch kostet nichts. Muss außerhalb der Geschäftszeiten sofort jemand ran, gilt der Zuschlag aus dem Preisblatt.

    Jetzt anrufen+49 3744 4399760

    Lieber schreiben? Über das Kontaktformular oder an [email protected]. Das lesen wir am nächsten Werktag.

    DIAGNOSE · AT-K2

    Was liegt an?

    ↵ AUSWÄHLENESC SCHLIESSENANRUFEN: +49 3744 4399760

    Individuelle Einstellungen

    Welche Dienste dürfen laden?

    Technisch notwendig

    Ihre hier getroffene Entscheidung sowie die Einstellungen für Farbschema und Bewegung. Diese Angaben bleiben als kleine Einträge auf Ihrem Gerät und werden nie an einen Server gesendet. Sie sind für den Betrieb nötig und deshalb nicht abwählbar.