Zum Inhalt springen

Blackbelt Snap: Echtzeit-Schutz gegen Betrug

Ein ETHBogota Hackathon Snap

9 Min. Lesezeit
Blackbelt Snap: Echtzeit-Schutz gegen Betrug

MetaMask Snaps ist der Fahrplan, um MetaMask zur erweiterbarsten Wallet der Welt zu machen. Als Entwickler kannst du deine Features und APIs auf völlig neue Weise in MetaMask einbringen. Web3-Entwickler sind der Kern dieses Wachstums, und diese Serie soll die innovativen MetaMask Snaps vorstellen, die heute entwickelt werden.

Blackbelt Snap

Snap-Repo: https://github.com/s-a-malik/blackbelt

Warum habt ihr es gebaut?

Wir wollten Interaktionen auf Blockchains für Endnutzer sicherer machen. Besonders für neue und nicht technisch versierte Nutzer, die Angst haben, Opfer von Betrug und Exploits zu werden. Daher haben wir uns überlegt, wie wir eine Echtzeit-Risikobewertung für Smart-Contract-Interaktionen bereitstellen können.

Kannst du uns durch die technische Implementierung führen?

Das technische Setup

Blackbelt besteht aus drei Elementen: unserem Server, dem MetaMask Snap und unserem Website-Frontend. Der Server ruft Daten ab und berechnet die Risiko-Scores für Smart Contracts. Sowohl der MetaMask Snap als auch unsere Website rufen den Server auf und übermitteln die jeweilige Contract-Adresse innerhalb der HTTPS-Anfrage. Die vollständige Implementierung unseres Projekts ist hier zu finden.

Der Server

Unser Server besteht aus einem Flask-Backend, das Sicherheits-Scores und Metadaten als JSON zurückgibt. Wenn eine GET-Anfrage an die Route /security_score initiiert wird, wird die Funktion security_score() aufgerufen. Zunächst werden alle übermittelten Parameter, wie Contract-Adresse, Nutzeradresse, Chain-ID und Caller-Origin, entpackt und anschließend teilweise in die Funktion compute_security_score(contract_address, chain) übergeben, die On-Chain-Daten abruft und Sicherheits-Scores für mehrere Variablen berechnet (z. B. das Alter des Contracts). Um den Datenabruf innerhalb von MetaMask Snaps zu beschleunigen, stellen wir gecachte Ergebnisse bereit, sofern diese verfügbar sind, wenn der Server über MetaMask Snaps aufgerufen wird (siehe Variable is_snaps).

def security_score():
    """
    Returns the security score and the metadata used to compute it for a given contract address.
    Saves result to ipfs and local storage.
    Params:
    - user_address: the address of the user to check
    - contract_address (str): eth address of the contract
    - chain_id (int): chain to check the contract on
    Returns:
    - score (int): The security score (0-100)
    - contract_info (dict):        
    """
    user_address = request.args.get('user_address', type=str)
    contract_address = request.args.get('contract_address', type=str)
    chain_id = request.args.get('chain', default=1, type=int)
    is_snaps = request.args.get('is_snaps', default=False, type=str)

    #Check if chached results should be provided
    is_snaps = True if is_snaps == "true" else False
    if is_snaps and contract_address in contract_to_score:
        #Retrieve from cache and return
        return contract_to_score[contract_address][0]
    else:
        chain = "mainnet" if chain_id == 1 else "goerli"

        #Calculate new security score
        output = compute_security_score(contract_address, chain)
        if output["status"] != "ok":
            return output

        #Add to the server cache
        contract_to_score[contract_address].append(output)
        user_to_transactions[user_address].append(output)

    return output
Kopieren

Die Funktion compute_security_score (in der Datei logic.py) berechnet einen heuristischen Risiko-Score auf Basis von On-Chain-Daten aus den Coinbase Cloud APIs, den Etherscan APIs und unserer eigenen, community-gepflegten serverseitigen Datenbank gemeldeter bösartiger Adressen. Einige Beispiele für die Art der Faktoren, die zur Berechnung des Scores verwendet werden, sind im folgenden Ausschnitt dargestellt. Wir prüfen beispielsweise, ob der Contract auf Etherscan als verifiziert und auditiert ausgewiesen ist, und wie alt der Contract ist.

# in the compute_security_score function:
# ...
verified = is_verified(contract_address, chain)
audited = is_audited(contract_address, chain)
transactions, users, deployed_date_unix = numberOfTransactionsAndUsersAndAge(contract_address)
min_age_of_contract_in_days = (time.time() - deployed_date_unix) / 86400
num_times_reported = blacklist_dict[contract_address]
# ...
Kopieren

In Zukunft planen wir, weitere Informationsquellen zu integrieren, die dabei helfen könnten, bösartige Contracts zu identifizieren (wie automatisierte Verifizierungstools und bestehende Blacklist-Datenbanken), und auch eine differenziertere Berechnung des Risiko-Scores einzusetzen, beispielsweise mithilfe von Machine-Learning-Methoden.

Der Snap

Für den Snap verwenden wir die Transactions Insights API, die immer dann ausgelöst wird, wenn eine Transaktion stattfindet. Der Snap besteht aus vier Schritten. Zunächst werden die wichtigsten Transaktionsdetails aus dem Transaction-Struct abgerufen. Anschließend werden die Transaktionsdetails an unseren Server gesendet und wir erhalten den Sicherheits-Score sowie die Metadaten zurück. Im dritten Schritt prüfen wir den Anfragestatus und behandeln etwaige Fehler. Im vierten Schritt geben wir den Sicherheits-Score und die Metadaten als JSON-Objekt innerhalb von MetaMask Snaps zurück.


export const onTransaction: OnTransactionHandler = async ({
  transaction,
  chainId,
}) => {

  // Get tx data
  const user_address = transaction.from;
  const contract_address =  transaction.to;
  const chain_id =  chainId.split(":")[1];

  // Call api for risk assessment
  const url = 'https://blackbelt.xyz/security_score?contract_address='+contract_address+'&user_address='+user_address+'&chain='+chain_id+'&is_snaps=true';
  let x = await fetch(url);
  let data = await x.json();

  // Cases for returning insights
  if (data.status == "ok"){
    const individual_scores = stringify_json('individual_scores', data)
    const individual_details = stringify_json('contract_info', data)
    return {
      insights: {"Risk Assessment": data.risk_level, "Security Score": data.security_score, "Recommendation": data.recommendation, "Details": individual_details, "Individual Scores": individual_scores, "Assessment Timestamp": data.risk_assessment_timestamp, "IPFS Storage Hash": data.ipfs_hash},
    };
  } else if(data.status =='error, not a contract address'){
    return {
      insights: {"No Score Available": "No interaction with a smart contract detected.", "Assessment Timestamp": data.risk_assessment_timestamp},
    };
  } else if(data.status =='error, unsupported chain'){
    return {
      insights: {"Chain Not Supported": "We are currently supporting Ethereum and Goerli only. We are working on adding more networks."},
    };
  } else {
    return {
      insights: {"Unknown Error": "An unknown error occured. Please contact the team and try again later."},
    };
  }
};
Kopieren

Die Website

Die Website ist in React geschrieben und dient dazu, unser Feature schnell zu testen, bevor wir es zu MetaMask hinzufügen. Nutzer können unser Feature ausprobieren, indem sie eine Contract-Adresse eingeben und auf „Rate now" klicken. Wenn Nutzern unsere Anwendung gefällt, können sie sie zu ihrer MetaMask hinzufügen, indem sie oben rechts auf „Add MetaMask Snap" klicken.

Was wären die nächsten Schritte, wenn ihr das weiterentwickeln würdet?

Die nächsten Schritte wären die Verbesserung unseres Backends und unserer Analysefähigkeiten, um riskante Contracts zuverlässiger zu erkennen. Derzeit basiert unsere Bewertung auf Heuristiken, wie der Anzahl der DAU oder Transaktionen (je höher, desto besser), aber wir würden gerne fortgeschrittenere Techniken wie Machine Learning einsetzen, um den Risiko-Score genauer zu berechnen. Nach der Verbesserung der Analytik würden wir uns darauf konzentrieren, den gesamten Risikobewertungsprozess zu beschleunigen, um die Nutzererfahrung so reibungslos wie möglich zu gestalten – dies könnte durch Caching oder schnellere Datenabrufverfahren erreicht werden.

Kannst du uns ein wenig über dich und dein Team erzählen?

Wir sind ein Team bestehend aus drei Oxford-Doktoranden und einem Oxford-Absolventen. Wir sind mit der Oxford Blockchain Society verbunden und haben uns beim ETHBogota-Hackathon kennengelernt, wo wir unser Team gebildet haben.

Lucas Schneider: Lucas ist DPhil-Kandidat in Informatik an der University of Oxford mit Schwerpunkt auf computergestützten und Machine-Learning-Modellen zur Vorhersage von Gen-Editing-Ergebnissen in CRISPR-Systemen. Vor Beginn seines DPhil arbeitete Lucas als Analyst bei der Barclays Investment Bank in London in der Securitised Products Structuring Group, wo er an mehreren exotischen strukturierten Kredittransaktionen sowie der Finanzierung von Non-Performing Loans und gewerblichen Immobilienportfolios beteiligt war. Er besitzt einen MSc in Finance von der London School of Economics and Political Science sowie einen BA in Wirtschaftswissenschaften mit Schwerpunkt auf quantitativen Methoden von der Friedrich-Alexander-Universität Erlangen-Nürnberg.

Shreshth Malik: Shreshth ist DPhil-Kandidat im Bereich Machine Learning an der University of Oxford mit Schwerpunkt auf der Verbesserung der Robustheit und Zuverlässigkeit von Deep-Learning-Methoden, um vertrauenswürdigere Anwendungen in der realen Welt zu ermöglichen. Er hat außerdem bei einer Reihe von KI-Startups und einem in London ansässigen Seed-Stage-VC-Fonds gearbeitet. Er besitzt Master-Abschlüsse in Machine Learning (UCL) und Physical Natural Sciences (University of Cambridge).

Paweł Narkiewicz: Paweł ist Serienunternehmer, Wissenschaftler und Technikbegeisterter. Im Alter von 18 Jahren veröffentlichte er seine erste Forschungsarbeit in der Zahlentheorie gemeinsam mit renommierten Mathematikern von Stanford und Harvard. Ein Jahr später gründete er ein erfolgreiches EdTech-Startup zur Förderung der Technologiekompetenz in Polen. Das Unternehmen wurde nach drei Monaten selbsttragend. Gleichzeitig trat Paweł einem MedTech-Startup als operativer Gesellschafter und ML-Ingenieur bei, um die Entwicklung eines der Kernfeatures der Technologie des Startups zu leiten. Er arbeitete direkt mit führenden Forschern aus Oxford, Stanford und Harvard zusammen. Das Startup erhielt eine Finanzierung von 770.000 USD in einer Pre-Seed-Runde und 3,2 Mio. GBP in einer Seed-Runde. Er besitzt einen Bachelor-Abschluss in Mathematik und Informatik von Oxford.

Jessica Pointing: Jessica promoviert in Physik an der University of Oxford mit Spezialisierung auf Quantencomputing und war zuvor als Knight-Hennessy Scholar Doktorandin in Informatik an der Stanford University. Sie erwarb ihren Bachelor-Abschluss in Physik und Informatik an der Harvard University mit Auszeichnung als John Harvard Scholar, nachdem sie als Bachelor-Studentin am MIT eingeschrieben war. Jessica wurde für Forbes 30 Under 30 in der Kategorie Wissenschaft ausgewählt und wurde als Council Fellow für den Global Future Council on Quantum Applications des Weltwirtschaftsforums ernannt. Sie wurde als TEDx-Speakerin ausgewählt und hat Keynote-Vorträge auf Technologiekonferenzen weltweit gehalten, darunter IBMs Think-Konferenz und die Oracle Code One-Konferenz. Sie absolvierte Praktika als Quantenforscherin bei KBR am NASA Ames Research Center, als Software-Ingenieurin bei Google, als Unternehmensberaterin bei McKinsey and Company, als Investmentbankerin bei Goldman Sachs und als Strategin bei Morgan Stanley. Jessica gründete die Stanford Quantum Computing Association und die Harvard College Quantum Computing Association. Sie gewann den IBM Q Quantum Computing Award für den Sieg mit einem Team beim ersten Quantum-Computing-Hackathon von IBM. Sie war außerdem Preisträgerin beim Quantum-Computing-Hackathon des Creative Destruction Lab. Jessica nahm an ETHAmsterdam, einem Ethereum-Hackathon, teil, und ihr Team gewann den Grand-Finalist-Preis sowie Sponsor-Preise. Sie wurde mit dem McKinsey Women's Impact Award ausgezeichnet und als Google Anita Borg Scholar benannt. Außerdem erhielt sie Stipendien von Microsoft, Palantir, Adobe Research, Morgan Stanley, Goldman Sachs, Neo, der Society of Women Engineers und der Society of Geophysicists.

Wann seid ihr zum ersten Mal mit MetaMask Snaps in Berührung gekommen und wie war eure Erfahrung?

Wir wurden zum ersten Mal beim ETHBogota mit MetaMask Snaps bekannt gemacht. Es war das perfekte Feature, um Blackbelt auf die nutzerfreundlichste Weise zum Leben zu erwecken. Insgesamt war die Erfahrung mit MetaMask Snaps angenehm, da MetaMask Snaps recht einfach zu verwenden sind. Angesichts der Neuheit von MetaMask Snaps gibt es noch einige kleinere Kinderkrankheiten, die uns während des Hackathons gelegentlich Kopfzerbrechen bereitet haben, aber nichts wirklich Gravierendes.

Was unterscheidet MetaMask Snaps von anderen Wallets?

MetaMask Snaps ist eine großartige Möglichkeit, die Entwicklung von Wallet-Erweiterungen zu Open-Sourcen und vielfältige, individuelle Lösungen für Endnutzer mit unterschiedlichen Bedürfnissen zu ermöglichen. Soweit wir wissen, ist MetaMask bisher der einzige Wallet-Anbieter, der benutzerdefinierte Plugins unterstützt.

Erzähl uns, wie es für dich und dein Team ist, Snaps mit MetaMask zu entwickeln?

Das Entwickeln mit MetaMask Snaps war recht einfach. Wir begannen mit einem der Beispielprojekte, das uns half, die Mechanismen von MetaMask Snaps besser zu verstehen, und bauten dann auf dem Beispielcode auf. Das Entwickeln in MetaMask Snaps hat Spaß gemacht, aber gelegentlich haben uns einige Bugs wirklich herausgefordert, besonders angesichts des engen Zeitrahmens während des Hackathons.

Was bedeutet MetaMask Snaps für dich?

MetaMask Snaps ist das Feature, das wir uns in unseren Wallets immer gewünscht haben. Für einen Entwickler eröffnet es eine breite Palette an Innovationsmöglichkeiten.

Welche Chancen siehst du in MetaMask Snaps und den Möglichkeiten, die es für den Web3-Bereich eröffnet?

MetaMask Snaps wird eine größere Anpassbarkeit im gesamten Web3-Ökosystem ermöglichen und damit auch die allgemeine Nutzererfahrung verbessern, da Nutzer selbst entscheiden können, welche Features sie möchten.

Hast du Ratschläge für Entwickler, die MetaMask Snaps ausprobieren möchten?

Spielt einfach mit MetaMask Snaps herum. Am einfachsten ist es, mit einem der Beispielprojekte zu beginnen, um zu verstehen, wie MetaMask Snaps funktioniert, und dann darauf aufzubauen. Wenn unbekannte Probleme auftreten, könnt ihr das Problem jederzeit im MetaMask Snaps Git posten, um Hilfe von den MetaMask Snaps-Entwicklern zu erhalten.

Mit MetaMask Snaps entwickeln

So startest du mit MetaMask Snaps:

  1. Schau dir die Entwicklerdokumentation an

  2. Installiere MetaMask Flask

  3. Schau dir einen MetaMask Snaps-Leitfaden an

  4. Bleib mit uns in Kontakt auf Twitter, GitHub Discussions und Discord

Halte Ausschau nach unserem Team beim nächsten Hackathon in deiner Nähe! Happy BUIDLing ⚒️

Haftungsausschluss: MetaMask Snaps werden im Allgemeinen von Dritten entwickelt, die nicht Consensys Software sind. Die Nutzung von durch Dritte entwickelten MetaMask Snaps erfolgt nach eigenem Ermessen und auf eigenes Risiko, und du stimmst zu, dass du allein für alle Verluste oder Schäden verantwortlich bist, die aus solchen Aktivitäten resultieren. Consensys gibt keine ausdrückliche oder stillschweigende Garantie, weder mündlich noch schriftlich, in Bezug auf durch Dritte entwickelte MetaMask Snaps und lehnt jede Haftung für durch Dritte entwickelte MetaMask Snaps ab. Die Nutzung von Blockchain-bezogener Software birgt Risiken, die du bei der Verwendung von MetaMask Snaps vollständig übernimmst.

KI-übersetzt. Kann Fehler enthalten. Bitte überprüfen Sie die Informationen stets.

Bewerten Sie die Übersetzung

Dieser Artikel wurde verfasst von:

  • MetaMask

    MetaMask, ehemals Consensys Software Inc, ist die weltweit größte Self-Custody-Finanzplattform und bietet Menschen einen zentralen Ort, um ihr Geld in Krypto- und traditionellen Vermögenswerten zu verwahren, auszugeben, zu sparen und zu vermehren. Das Unternehmen entwickelt die Verbraucherplattform, auf der all das stattfindet, und vereint Zahlungen, Sparen, Investieren und digitale Assets in einem nahtlosen Erlebnis. Ausgehend von der weltweit meistgenutzten Self-Custody-Wallet gibt MetaMask Nutzern die direkte Kontrolle über ihr Geld und ihre Vermögenswerte – mit einer Reichweite in rund 190 Ländern. MetaMask hat seit 2016 eine grundlegende Rolle beim Wachstum von Ethereum gespielt. Heute steht MetaMask im Mittelpunkt der Blockchain-Wirtschaft, entwickelt das Betriebssystem für Open Money und gibt Menschen die volle Kontrolle über ihr finanzielles Leben.

    Alle Artikel lesen