Private verträge Muster

Wenn Sie eine neue Instanz eines Vertrags aus dem Code Ihres Vertrags erstellen, werden diese Kreationen direkt von Solidity und nicht von OpenZeppelin Upgrades verarbeitet, was bedeutet, dass diese Verträge nicht aktualisiert werden können. Checks-Effects-Interaction Pattern: Die Interaktion mit anderen Verträgen sollte immer der letzte Schritt in der Vertragsfunktion sein. Es ist entscheidend, dass der aktuelle Vertrag seine Funktionalität vor der Verarbeitung der Kontrolle mit anderen Verträgen abgeschlossen hat und nicht von der Ausführung des anderen Vertrags abhängt. Der obige Code implementiert das Singleton-Muster mithilfe einer statischen Variablen und der statischen Erstellungsmethode getInstance(). Beachten Sie Folgendes: Wir sehen, dass DBC-Verträge als Inspiration für unsere Komponententests dienen können, vorausgesetzt, die Verträge wurden formuliert. Methodenzentrierte Testfälle können in der Regel direkt in Vor- und Nachbedingungen übersetzt werden und umgekehrt. Die große (unbeantwortete) Frage lautet daher: An welchem Punkt unseres Test-First-Entwicklungszyklus ist es sinnvoll, die Verträge explizit zu spezifizieren? Ein DBC-Vertrag kann seine erfolgreichste Rolle als unwissende Ideenquelle während der Test-First-Entwicklung spielen, wenn der Entwickler häufig Vorbedingungen, Post-Bedingungen und Invarianten im Sinn hat, ohne sie explizit zu formulieren. Aber die eigentlichen Verträge stellen die Komponententests selbst dar. Mit dem Strategiemuster kapseln Sie bestimmte Algorithmenfamilien, sodass die Clientklasse, die für die Instanziierung eines bestimmten Algorithmus verantwortlich ist, keine Kenntnis von der tatsächlichen Implementierung hat. Es gibt mehrere Variationen des Strategiemusters, von denen die einfachste unten beschrieben wird: Einschränkungen für Bibliotheken im Vergleich zu Verträgen: Zeitmanipulation: Vom Sperren eines Token-Verkaufs bis zum Entsperren von Geldern zu einem bestimmten Zeitpunkt müssen sich Verträge manchmal auf die aktuelle Zeit verlassen. Dies geschieht in der Regel über block.timestamp oder seinen Alias jetzt in Solidity.

Im öffentlichen Ethereum kommt dieser Wert von den Bergleuten, aber im Quorum kommt er vom Minter oder von validatoren, daher sollten intelligente Verträge vermeiden, sich stark auf die Sperrzeit für kritische Entscheidungen zu verlassen. Beachten Sie, dass block.timestamp nicht für die Generierung von Zufallszahlen verwendet werden sollte. Da dieses Muster beim Schreiben von erweiterbaren Verträgen sehr häufig ist, stellt OpenZeppelin Upgrades einen initialisierbaren Basisvertrag bereit, der über einen Initialisierungsmodifizierer verfügt, der sich darum kümmert: Wenn ein abgeleiteter Vertrag die Argumente für alle Konstruktoren seiner Basisverträge nicht angibt, ist er abstrakt. Dzidek et al. [89] besprechen die Lehren, die sie bei der Entwicklung eines dynamischen OCL-Einschränkungserzwingungstools für Java-Sprache gelernt haben. Das Tool ocl2j instrumentiert automatisch OCL-Einschränkungen, die als Verträge in Java-Programmen mit aspektorientierter Programmiertechnik dargestellt werden. Die von ocl2j durchgeführte Instrumentierung ist nicht aufdringlich, da die Seitenausrichtung hilft, die Assertionen vom Quellcode zu trennen. Die Technik ermöglicht die parallele Entwicklung von Java, solange das Klassendiagramm und der Kontrakt stabil sind. Das Tool hat oCL-Einschränkungen erfolgreich auf royale und loyale Fallstudien instrumentiert.