Rücktritt Vertrag Muster

Ein Leistungsschalter, der auch als Notstopp bezeichnet wird, ist in der Lage, die Ausführung von Funktionen innerhalb des Smart Contracts zu stoppen. Ein Leistungsschalter kann manuell von vertrauenswürdigen Parteien ausgelöst werden, die im Vertrag enthalten sind, wie der Vertragsadministrator oder mithilfe programmatischer Regeln, die den Leistungsschalter automatisch auslösen, wenn die definierten Bedingungen erfüllt sind. Die häufigste Verwendung eines Leistungsschalters ist, wenn ein Fehler entdeckt wird. Pragma-Anweisungen können schweben, wenn ein Vertrag für den Verbrauch durch andere Entwickler bestimmt ist, wie im Fall von Verträgen in einer Bibliothek oder einem EthPM-Paket. Andernfalls müsste der Entwickler das Pragma manuell aktualisieren, um lokal kompiliert zu werden. Verwenden Sie tx.origin niemals für die Autorisierung, ein anderer Vertrag kann eine Methode haben, die Ihren Vertrag aufruft (wo der Benutzer z. B. über einige Mittel verfügt) und Ihr Vertrag wird diese Transaktion autorisieren, da Ihre Adresse in tx.origin ist. Wenn Sie hingegen das Muster “Zurückziehen” aus dem ersten Beispiel verwenden, kann der Angreifer nur dazu führen, dass sein eigener Rückzug fehlschlägt und nicht der Rest der Vertragsarbeit. Wie bereits erwähnt, handelt es sich um einen rein böswilligen Vertrag, da er dem Empfänger bedingungslos entherlichen Zugang zu seinen Geldern verwehrt. Da ein smarter Vertrag jedoch ein Programm ist, könnte ein fortgeschrittenerer BadSender die Transaktion basierend auf Zeit, Saldo eines anderen Kontos, einem internen Flag usw.

zulassen oder verweigern. Die bösartigen Möglichkeiten sind endlos und ermöglichen es dem Absender, den Empfänger zu Lösegeld zu halten. Das Problem tritt auf, wenn eine Ethereum-Transaktion versucht, Gelder an eine Adresse freizugeben, die nicht unter der Kontrolle der Person steht, die die Transaktion sendet. Ein viel vereinfachter Beispielvertrag, der dies tut, wird unten gezeigt: Dieser Speed-Bump Solidity-Vertrag verzögert eine Auszahlungsanfrage um 4 Wochen. Verwenden Sie Modifikatoren, um doppelte Zustandsprüfungen in mehreren Funktionen zu ersetzen, z. B. isOwner(), andernfalls verwenden Sie die Option “Erfordern” oder “Wiedergeben” innerhalb der Funktion. Dadurch ist Ihr smarter Vertragscode besser lesbar und leichter zu überwachen. Die empfohlene Methode, Mittel nach einem Effekt zu senden, ist die Verwendung des Auszahlungsmusters. Obwohl die intuitivste Methode zum Senden von Ether als Ergebnis eines Effekts ein direkter Sendeaufruf ist, wird dies nicht empfohlen, da dies ein potenzielles Sicherheitsrisiko mit sich bringt. Weitere Informationen hierzu finden Sie auf der Seite Sicherheitsüberlegungen. Auf einer tiefen Design-Ebene würde ich argumentieren, dass der Vertrag niemandem versichert, dass sie ihr Geld zurückbekommen werden.

Nur der Besitzer kann die Funktion initiieren, aber sie sind verstört, möglicherweise untergetaucht, möglicherweise unverantwortlich, möglicherweise den einzigen Signaturschlüssel verloren haben, der es möglich macht. Der Besitzer ist ein einziger Fehlerpunkt, und dieses Muster deutet auf die Einhaltung serverzentrierten Denkens hin – nur ein privilegierter Benutzer sollte in der Lage sein, eine Massenverteilung von Geldern zu initiieren. Ein Ereignis ist eine bequeme Möglichkeit, etwas zu protokollieren, das im Vertrag passiert ist. Ereignisse, die emittiert wurden, bleiben zusammen mit den anderen Vertragsdaten in der Blockchain und stehen für zukünftige Audits zur Verfügung. Hier ist eine Verbesserung des obigen Beispiels, bei dem Veranstaltungen verwendet werden, um eine Geschichte der Spenden der Wohltätigkeitsorganisation bereitzustellen. Hier wird der Spielvertrag einen internen Aufruf an Charity.donate() tätigen. Diese Transaktion wird nicht in der externen Transaktionsliste von Charity angezeigt, sondern nur in den internen Transaktionen sichtbar. Es scheint interessant.

Könnte irgendjemand die Idee des Rückzugsmusters auf einfache Weise erklären? Wenn wir die Buchhaltung gemacht haben, was wir sollten, und wenn wir jedem eine Möglichkeit gegeben haben, seine Mittel einzufordern, was wir sollten, dann gibt es oft keine Notwendigkeit für den naiven Ansatz, der versucht, Überweisungen auf andere Konten zu schieben.