2017-10-03 5 views
0

In unserem Anwendungsfall müssen wir bestimmte Regeln zur Laufzeit definieren, auf deren Grundlage ein Knoten mit anderen Knoten im Netzwerk arbeitet. Zum Beispiel wollen wir eine Rate am Frontend definieren und überprüfen, dass die Transaktion nur für diesen bestimmten Knoten mit dieser Rate stattfindet. Mit anderen Worten, können wir die Bedingungen zur Laufzeit definieren und würde dies immer noch als intelligenter Vertrag bezeichnet werden oder muss ein intelligenter Vertrag immer fest codiert sein. Gibt es eine alternative Möglichkeit, dies zu betrachten?Corda: Verträge dynamisch erstellen

Antwort

0

Der Vertrag selbst ist fest codiert. Dies liegt daran, dass jeder Knoten für immer zustimmen muss, dass eine gegebene Transaktion gemäß den Vertragsregeln gültig ist. Wenn sie basierend auf dem Knoten variieren, würden einige Knoten eine Transaktion für gültig halten, während ein anderer die Transaktion als ungültig betrachten würde, was zu Inkonsistenzen in ihren Konten führen würde.

Stattdessen müssten Sie diese Logik in den Fluss auferlegen. Nehmen wir an, Sie haben einen TradeOffer Flow, der einen Trade vorschlägt. Jeder Knoten könnte seinen eigenen Antwortfluss installieren, der von TradeOffer flow initiiert wird. Der Antwortfluss jedes Knotens könnte unterschiedliche Bedingungen auferlegen. Zum Beispiel könnte ein Knoten jede Transaktion signieren, während ein anderer prüfen würde, dass die vorgeschlagene Rate innerhalb spezifizierter Grenzen liegt.

1

Um Joels Kommentar zu erweitern, ist der Vertrag tatsächlich fest codiert, aber es ist nichts falsch daran, Metalogik dort einzubauen, solange der Code jedes Mal auf die gleiche Weise läuft (d. H. Er ist deterministisch).

Was meine ich damit? Nun, Sie können einen String-Typ in Ihren Zustand einfügen, der einen Ausdruck enthält, der dann ausgewertet werden kann (wenn Sie sich auf https://relayto.com/r3/FIjS0Jfy/VB8epyay73 beziehen, können Sie die Einbeziehung eines sehr einfachen mathematischen Ausdrucks sehen, der in einem intelligenten Vertrag verwendet wird). Es ist nichts falsch daran, diesen String so komplex wie möglich zu gestalten, aber seien Sie sich dessen bewusst, dass potenzielle Benutzer Ihrer Anwendung die Augenbrauen heben werden, wenn Sie den Schutz von Corda für die Validierung entfernen, wenn Sie die codierte Verifikationslogik aufklappen alles in eine Zeichenfolge einfügen.