Abhebungsvertrag muster

Da die Fallback-Funktionen nicht nur für einfache Ätherübertragungen (ohne Daten) aufgerufen werden, sondern auch, wenn keine andere Funktion übereinstimmt, sollten Sie überprüfen, ob die Daten leer sind, wenn die Fallback-Funktion nur zum Zweck der Protokollierung empfangener Ether verwendet werden soll. Andernfalls werden Anrufer nicht benachrichtigt, wenn Ihr Vertrag falsch verwendet wird und Funktionen, die nicht vorhanden sind, aufgerufen werden. 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 stark vereinfachter Beispielvertrag, der dies tut, wird unten gezeigt: Der Code in einem Modifikator wird in der Regel vor dem Funktionstext ausgeführt, sodass Statusänderungen oder externe Aufrufe das Check-Effects-Interactions-Muster verletzen. Darüber hinaus können diese Anweisungen auch vom Entwickler unbemerkt bleiben, da der Code für modifizierer weit von der Funktionsdeklaration entfernt sein kann. Zum Beispiel kann ein externer Anruf im Modifikator zu einem Reentrancy-Angriff führen: Im folgenden Vertrag, wenn Sie als der reichste an sich gerissen werden, erhalten Sie das Geld der Person, die sich zum neuen Reichsten entwickelt hat. 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. Dieser Speed-Bump Solidity-Vertrag verzögert eine Auszahlungsanfrage um 4 Wochen. 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. Hinweis: Die obige Rückerstattungstabelle gilt nicht für Kurse mit einer Dauer von 2 Tagen oder weniger als 214,00 USD (einschließlich GST) Auszahlungsgebühr gilt auch Die Delegatecall-Funktion wird verwendet, um Funktionen aus anderen Verträgen aufzurufen, als ob sie zum Anrufervertrag gehören. So kann der Angerufene den Status der anrufenden Adresse ändern. Dies kann unsicher sein.

Ein Beispiel unten zeigt, wie die Verwendung von Delegatecall zur Zerstörung des Vertrags und zum Verlust seines Saldos führen kann. Jeder nicht triviale Vertrag hat Fehler. Ihr Code muss daher in der Lage sein, auf Fehler und Schwachstellen ordnungsgemäß zu reagieren. Beachten Sie beim Schreiben von Code die folgenden Sicherheitsentwurfsmuster. Man könnte das vielversprechend sehen: ethereum.stackexchange.com/questions/15641/how-does-a-contract-find-out-if-another-address-is-a-contract Die Verinnerlichung und Ausübung dieses Ansatzes ist ein wichtiger Aspekt des sicheren Umgangs mit Fonds in Solidity. Zur Erinnerung: Produktionscodekandidaten sollten immer eine strenge Peer-Review ertragen. Probleme sind möglicherweise nicht offensichtlich. Das Auszahlungsmuster ist eine Möglichkeit, offensichtliche Schwachstellen zu beseitigen. Es ist wichtig zu verstehen, dass das Zurücksetzen der Transaktion alle von ihr ausgeführten Aktionen abbricht, so dass der Zustand von Ethereum so ist, als ob die Transaktion nie stattgefunden hätte.

Wäre dies nicht der Fall, könnte der Vertrag einfach geschrieben werden, um dem Empfänger vor dem Absender Geld zu senden und das Problem zu vermeiden. Betrachten wir einen naiven Vertrag. Betrachten wir nur eine Situation, in der Gelder auf mehr als ein Konto verteilt werden müssen. Es könnte ein Lufteinbruch, eine Dividende oder etwas anderes sein. Nehmen wir an, jeder hat zu einem Crowdfunding-Projekt beigetragen, aber das Finanzierungsziel wurde nicht erreicht und jetzt sollte jeder sein Geld zurückbekommen. Das Auszahlungsmuster stellt sicher, dass kein direkter Überweisungsaufruf erfolgt, der eine Sicherheitsbedrohung darstellt. Der folgende Vertrag zeigt die unsichere Verwendung von Transferanruf, um Äther zu senden. Sie können riesige Systeme vertrauenswürdiger Verträge erstellen, die miteinander sprechen, und das ist in Ordnung, wenn Sie die Zugriffssteuerung verwenden, um sicherzustellen, dass msg.sender etwas Vertrauenswürdiges ist. In diesem Zusammenhang bedeutet Vertrauen, dass es keinen Zweifel an seinen Absichten gibt, was es tut oder wie es funktioniert.