Cryptocurrencies; Blockchain; Ethereum; Codemining; Smart contract; Fingerprinting; Gas optimization; Code optimization; Control flow graph
en
Abstract:
Ethereum ist seit Jahren die größte Smart-Contract-Blockchain und nach Bitcoin die zweitgrößte Blockchain-Plattform. Smart-Contracts, die als dezentrale Anwendungen beschrieben werden können, laufen auf einer gemeinsamen Rechenplattform, auf der alle Teilnehmer auf einer geteilten Codebasis arbeiten. Zur Absicherung ist es nötig, dass ein Konsens über die Ein- und Ausgaben aller Smart-Contracts geschaffen wird. Die Ausführung von Smart-Contract-Code verbraucht sogenannte Gas-Einheiten, die als eine Art Treibstoff betrachtet werden können. Gas-Einheiten zeigen den erforderlichen Rechenaufwand an und haben direkte Auswirkungen auf den realen Energieverbrauch. Daher sollten idealerweise alle Smart-Contracts so implementiert sein, dass sie möglichst wenig Gas-Einheiten verbrauchen. Derartige Codeoptimierungsansätze sind nicht trivial. Zum Zeitpunkt des Verfassens dieser Diplomarbeit gibt es bereits solche Mechanismen, welche teilweise direkt in den gängigen Compilern integriert sind. Solche Mechanismen basieren in der Regel auf festen Mustern, welche manuell beschrieben werden müssen und dann auf Smart-Contracts angewendet werden können. In dieser Arbeit haben wir untersucht, ob klassische Verfahren zur Erkennung von Codeähnlichkeiten verwendet werden können, um Optimierungsmuster automatisch aus Quellcode-Repositories ableiten zu können. Zunächst haben wir einen Symbolic-Execution-Ansatz untersucht, welcher sich aufgrund von technischen Einschränkungen und der Abhängigkeit von veralteten Compiler-Versionen als ungeeignet erwies. Daraufhin haben wir einen Fingerprinting-Ansatz basierend auf Kontrollflussgraph-Blöcken gewählt. Mithilfe von Slither konnten wir Metriken wie Cyclomatic-Complexity, Fan-Out und Informationsfluss-Metriken extrahieren und anschließend Distanzen zwischen Codestücken berechnen, um mit den Ergebnissen potenzielle semantische Code-Klone zu erkennen. Wir haben die Evaluierung unseres Ansatzes auf 1.200 manuell markierten Smart-Contracts aus einem Datensatz mit 160.000 Einträgen durchgeführt, was zu 574 Vergleichen führte und konnten eine korrigierte Genauigkeit von 88% für die Erkennung von semantischen Code-Äquivalenzen auf Blockebene erzielen. Für 1.300 Code-Paare haben wir zusätzlich eine Gasverbrauchsmessung durchgeführt, indem wir die Blöcke in generierte Smart-Contracts verpackt und auf einer lokalen Blockchain ausgeführt haben. Dabei konnten wir tatsächliche gasreduzierende Codeänderungen identifizieren. Trotz einiger wesentlichen Einschränkungen zeigt das, dass das Mining gasoptimiertem Codes aus versionierten Source-Code-Repositories mittels Code-Metriken möglich ist.
de
For years, Ethereum has been the largest smart contract blockchain and the second-largest public blockchain platform, after Bitcoin. Smart contracts, which can be described as decentralized applications, are executed on a mutual computation platform, with all participants operating on a shared codebase. For validation purposes, consensus must be achieved on the inputs and outputs of all smart contract calls. The execution of smart contract code consumes gas units, which can be considered analogous to fuel. Gas units represent the computational effort expended and directly impact the real-world energy consumption. Therefore, all smart contracts should aim to consume as little gas as possible in an ideal scenario. Such code optimization approaches are not trivial, however. At the time of writing, mechanisms to achieve this already exist, as described in related work, and some are directly integrated into the most popular code compiler. Those mechanisms utilize fixed code patterns, which must be manually formulated and can then be applied to smart contracts. In this thesis, we investigated whether classical code similarity detection methods can be used to identify optimization patterns from a repository of source code automatically. We first explored symbolic execution using Oyente, but due to technical limitations and its dependency on outdated compiler versions, the approach proved to be restricted in practice. We therefore shifted towards a Control Flow Graph (CFG) fingerprinting approach. Leveraging Slither, we extracted metrics including cyclomatic complexity, fan-out, and information flow metrics, and then computed distances between code fragments to detect potential semantic clones. We evaluated our approach on 1,200 manually labeled contracts from a 160,000-contracts dataset, resulting in 574 comparisons. After a manual error correction, we achieved a precision of 88% for semantic equivalence computation at the CFG block level. For 1,300 code pairs we further measured gas consumption by deploying generated wrapper contracts to a local blockchain. We were able to identify actual gas-saving code changes, which demonstrates, besides some major limitations, that mining gas-optimized code from versioned code repositories is feasible by leveraging structural code metrics.
en
Additional information:
Arbeit an der Bibliothek noch nicht eingelangt - Daten nicht geprüft