Smart Contracts sind in aller Munde. Auf Basis von Blockchains soll die Ausführung von Verträgen zwischen mehreren Parteien (die sich nicht zwangsläufig vertrauen müssen) automatisiert werden. Blockchains stellen sicher, dass die im Vertrag definierten Regeln auch zwangsläufig eingehalten werden. Allerdings ist es mit existierenden Sprachen (wie bspw. Solidity) nicht so einfach, Veträge so zu implementieren, dass alle beteiligten Parteien (insbesondere auch nicht-Programmierer) verstehen welche Regeln denn nun in dem Vertrag definiert sind. Solidity ist letztendlich eine General-Purpose Programmiersprache, die typischen Muster für Mehr-Parteien-Verträge werden nicht direkt unterstützt. In diesem Vortrag zeige ich anhand konkreter Code-Beispiele, wie man kollaborative Verträge so beschreiben kann, dass das Verhalten leichter verständlich und leichter auf Korrektheit prüfbar ist. Dabei kommen unter anderem Zustandsmaschinen, deklarative Entscheidungsstrategien und Mechanismen zur Vermeidung spieltheoretischer Angriffe zum Einsatz. Die Implementierung beruht auf KernelF, einer funktionalen Sprache die wir über die letzten Jahre entwickelt haben um als Basis für domänenspezifische Sprachen zum Einsatz zu kommen. Da die Sprache mittels Jetbrains MPS entwickelt ist, lässt sie sich modular erweitern. Die Abstraktionen für Smart Contracts sind ein Beispiel für solcheErweiterungen. Der Talk dient damit auch als Illustration der Mächtigkeit funktionaler Sprachen sowie für Sprachbau mittels MPS.