package Ġcom . r 3 . cord an . primary . contracts . development Ċ Ċ import Ġcom . r 3 . cord an . primary . states . development . Re ve aled Development Card State Ċ import Ġcom . r 3 . cord an . primary . states . development . Development Card Type Ċ import Ġcom . r 3 . cord an . primary . states . development . Face Down Development Card State Ċ import Ġcom . r 3 . cord an . primary . states . board . Game Board State Ċ import Ġnet . cord a . core . contracts . Command Data Ċ import Ġnet . cord a . core . contracts . Contract Ċ import Ġnet . cord a . core . contracts . require Single Command Ċ import Ġnet . cord a . core . contracts . require That Ċ import Ġnet . cord a . core . crypto . Digital Signature Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ Ċ // Ġ************************* **** Ċ // Ġ* ĠDevelopment ĠCard ĠContract Ġ* Ċ // Ġ************************* **** Ċ class ĠDevelopment Card Contract Ġ: ĠContract Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUsed Ġto Ġidentify Ġour Ġcontract Ġwhen Ġbuilding Ġa Ġtransaction . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ" com . r 3 . cord an . primary . contracts . development . Development Card Contract " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠA Ġtransaction Ġis Ġvalid Ġif Ġthe Ġverify () Ġfunction Ġof Ġthe Ġcontract Ġof Ġall Ġthe Ġtransaction 's Ġinput Ġand Ġoutput Ġstates ĊĠĠĠ Ġ// Ġdoes Ġnot Ġthrow Ġan Ġexception . ĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands >() ĊĠĠĠĠĠĠĠ Ġval Ġgame Board State Ġ= Ġtx . reference Input Refs OfType < Game Board State >(). single (). state . data ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( command . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Issue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissued Development Card Ġ= Ġtx . outputs OfType < Face Down Development Card State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Re veal Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreve aled Development Card Ġ= Ġtx . outputs OfType < Re ve aled Development Card State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcast ed Command Ġ= Ġcommand . value Ġas ĠCommands . Re veal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrand Input From Peers Ġ= Ġcast ed Command . rand Input From Peers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdev Card Type Ġ= ĠDevelopment Card Type . values ()[ rand Input From Peers . sum By Ġ{ Ġit . first Ġ} Ġ% Ġ 5 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġissued Ġdevelopment Ġcard Ġis Ġof Ġthe Ġappropriate Ġtype " Ġusing Ġ( re ve aled Development Card . card Type Ġ== Ġdev Card Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" All Ġother Ġplayers Ġmust Ġhave Ġprovided Ġrandom Ġinput ." Ġusing Ġ( rand Input From Peers . size Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġlist Ġof Ġplayers Ġsigning Ġthe Ġdata Ġmust Ġbe Ġthe Ġsame Ġas Ġthose Ġplaying Ġthe Ġgame " Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrand Input From Peers . map Ġ{ Ġit . second . by Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== Ġgame Board State . players . map Ġ{ Ġit . own ing Key Ġ}. toSet () Ġ- Ġreve aled Development Card . owner . own ing Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" All Ġsignatures Ġmust Ġbe Ġvalid " Ġusing Ġrand Input From Peers . all Ġ{ Ġrand Input Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata To Verify Ġ= Ġbyte ArrayOf ( cast ed Command . seed . to Byte (), Ġrand Input . first . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrand Input . second . isValid ( data To Verify ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUsed Ġto Ġindicate Ġthe Ġtransaction 's Ġintent . ĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠIssue : ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠRe veal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseed : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrand Input From Peers : ĠList < Pair < Int , ĠDigital Signature . With Key >> ĊĠĠĠĠĠĠĠ Ġ): ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPlay V ictory Point : ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPlay Mon op oly : ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPlay K night : ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPlay Year Of Pl enty : ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPlay Road Building : ĠCommands ĊĊĠĠĠ Ġ} Ċ }