Übertragungsvertrag muster gbr

Die Verwendung des Pull over Push-Musters ist eine gute Möglichkeit, einige der Eigenheiten zu mildern, die mit Solidity beim Senden von Äther kommen, insbesondere wenn mehrere Übertragungen gleichzeitig ausgeführt werden. Aufgrund der Isolierung der fehleranfälligen Übertragungsfunktionalität führt eine fehlgeschlagene Übertragung nicht mehr zu einer Wiederherstellung aller erfolgreichen Operationen. Darüber hinaus liegt es nun in der Verantwortung des anfragenden Benutzers, sicherzustellen, dass er Äther empfangen kann. Die teilnehmenden Entitäten für dieses Muster sind der Vertrag, der den Äther sendet, sowie die Adresse, die ihn erhält. Das empfangende Ende kann entweder ein anderer Vertrag oder ein externes Konto sein. Das Muster wird beim Sendevertrag implementiert. Die Empfangsadresse spielt jedoch auch eine entscheidende Rolle, vor allem, wenn es sich um einen anderen Vertrag handelt, da es die Möglichkeit gibt, den Sendevertrag mit böswilliger Absicht wieder aufzunehmen, falls genügend Gas weitergeleitet wird. Eine spezialisiertere Implementierung findet sich in einem Vertrag namens BlockParty, einem Vertrag zur Verwaltung von Anwesenheitseinlagen für kostenlose Veranstaltungen. Benutzer erhalten ihre Einzahlung nur zurück, wenn sie bei der Veranstaltung erschienen sind, für die sie sich registriert haben. Die Teilnehmer können einen Rücktritt beantragen, nachdem der Vertragsinhaber, in den meisten Fällen der Veranstalter der Veranstaltung, ihre Teilnahme über eine Transaktion mit ihrer Ethereum-Adresse bestätigt hat. Das Problem ist jedoch leicht zu lösen. Logikkontrakte sollten den Code innerhalb des Konstruktors in eine reguläre Initialisierungsfunktion verschieben und diese Funktion immer dann aufgerufen haben, wenn der Proxy mit diesem Logikvertrag verknüpft ist.

Bei dieser Initialisierungsfunktion ist besondere Vorsicht geboten, damit sie nur einmal aufgerufen werden kann, was eine der Eigenschaften von Konstruktoren in der allgemeinen Programmierung ist. Der unstrukturierte Speicherproxymechanismus schützt nicht vor dieser Situation. Es liegt am Benutzer, dass neue Versionen eines Logikvertrags frühere Versionen erweitern oder auf andere Weise garantieren, dass die Speicherhierarchie immer angehängt, aber nicht geändert wird. OpenZeppelin Upgrades erkennt solche Kollisionen jedoch und warnt den Entwickler entsprechend. Einerseits sorgt die Differenzierung in drei Methoden, die für dieselbe Aufgabe verwendet werden, für Flexibilität, da die einfache Übertragungsfunktion für die meisten Anwendungsfälle verwendet werden kann, während der kompliziertere call.value angepasst und für spezielle Aufgaben verwendet werden kann. Auf der anderen Seite kann die Differenzierung für Entwickler und Benutzer gleichermaßen verwirrend sein, da es keine wirklichs semantischen Hinweise zwischen der Benennung der verschiedenen Optionen gibt, wo ihre Unterschiede sein könnten. Schließlich bleibt dem Benutzer drei verschiedene Optionen, um Äther von einer Vertragsadresse mit jeweils unterschiedlichen Attributen und Anwendungsbereichen zu übertragen. Ziel dieses Musters ist es, die verschiedenen Optionen voneinander abzugrenzen und Empfehlungen zu geben, wann welche Methode entsprechend den gegebenen Anforderungen anzuwenden ist. Verschieben Sie das mit der Übertragung von Äther verbundene Risiko auf den Benutzer. Auf diese Weise umgesetzt, würde eine ausgelöste Ausnahme in einem der Transfers nur diese spezifische Übertragung und nicht eine ganze Reihe von Transfers oder sogar den gesamten Vertrag, wie im Beispiel von oben, bewirken. Wie in den vorherigen Abschnitten beschrieben, funktionieren erweiterbare Vertragsinstanzen (oder Proxys), indem alle Aufrufe an einen Logikvertrag delegiert werden.

Die Proxys benötigen jedoch einige eigene Funktionen, z. B. upgradeTo(address), um auf eine neue Implementierung zu aktualisieren. Dies wirft die Frage auf, wie es weitergehen soll, wenn der Logikvertrag auch eine Funktion namens upgradeTo(address) hat: Hat der Aufrufer bei einem Aufruf dieser Funktion beabsichtigt, den Proxy oder den Logikvertrag aufzurufen? Beachten Sie, wie der Vertrag Initialisierbar erweitert und den von ihm bereitgestellten Initialisierer implementiert. 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. Ein Beispiel dafür ist ein blinder Auktionsvertrag, der in der Phase “Verblendungen annehmen” beginnt und dann zu “Enthüllungsgeboten” übergeht, die mit “Auktionsergebnis bestimmen” beendet wird.

Comments Posted in Uncategorized