package Ġcom . cord ships . contracts Ċ Ċ import Ġcom . cord ships . states . Private GameState Ċ import Ġcom . cord ships . states . Ship Ċ 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 . transactions . Ledger Transaction Ċ Ċ // Ġ********* *** Ċ // Ġ* ĠContract Ġ* Ċ // Ġ********* *** Ċ Ċ /** ĠThis Ġcontract Ġgover ns Ġthe Ġstate Ġevolution Ġof Ġprivate Ġcopies Ġof Ġgame Ġstates Ġfor Ġeach Ġplayer . Ġ*/ Ċ class ĠPrivate Game Contract Ġ: ĠContract Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ" com . cord ships . contracts . Private Game Contract " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands >() ĊĊĠĠĠĠĠĠĠ Ġwhen ( command . value ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Issue Private GameState Ġ-> Ġrequire That { ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinput Ġ= Ġtx . inputs ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġshould Ġbe Ġno Ġinput Ġstate ." Ġusing Ġ( input . isEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoutput Ġ= Ġtx . outputs [ 0 ]. data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġshould Ġbe Ġone Ġoutput Ġstate ." Ġusing Ġ( tx . outputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġoutput Ġstate Ġshould Ġbe Ġof Ġtype Ġprivate Ġgame Ġstate ." Ġusing Ġ( tx . outputs [ 0 ]. data Ġis ĠPrivate GameState ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoutput Private GameState Ġ= Ġoutput Ġas ĠPrivate GameState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġshould Ġbe Ġ 7 Ġsh ips ." Ġusing Ġ( output Private GameState . board . size Ġ== Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġneeds Ġto Ġbe Ġexactly Ġone Ġair Craft Carrier ." Ġusing Ġ( output Private GameState . board . count Ġ{ it . ship Size Ġ== ĠShip . Ship Size . Air Craft Carrier } Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġneeds Ġto Ġbe Ġexactly Ġone Ġbattle ship ." Ġusing Ġ( output Private GameState . board . count Ġ{ it . ship Size Ġ== ĠShip . Ship Size . C ru iser } Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġneeds Ġto Ġbe Ġexactly Ġone Ġc ru iser ." Ġusing Ġ( output Private GameState . board . count Ġ{ it . ship Size Ġ== ĠShip . Ship Size . Battle Ship } Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġneeds Ġto Ġbe Ġexactly Ġtwo ĠDestroy ers ." Ġusing Ġ( output Private GameState . board . count Ġ{ it . ship Size Ġ== ĠShip . Ship Size . Destroy er } Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġneeds Ġto Ġbe Ġexactly Ġtwo ĠSub mar ines ." Ġusing Ġ( output Private GameState . board . count Ġ{ it . ship Size Ġ== ĠShip . Ship Size . Sub mar ine } Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Air Craft Carrier Ġneeds Ġto Ġbe Ġof Ġsize Ġ 5 ." Ġusing Ġ( Ship . Ship Size . Air Craft Carrier . length Ġ== Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Battle Ship Ġneeds Ġto Ġbe Ġof Ġsize Ġ 4 ." Ġusing Ġ( Ship . Ship Size . Battle Ship . length Ġ== Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C ru iser Ġneeds Ġto Ġbe Ġof Ġsize Ġ 3 ." Ġusing Ġ( Ship . Ship Size . C ru iser . length Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Destroy er Ġneeds Ġto Ġbe Ġof Ġsize Ġ 2 ." Ġusing Ġ( Ship . Ship Size . Destroy er . length Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sub mar ine Ġneeds Ġto Ġbe Ġof Ġsize Ġ 2 ." Ġusing Ġ( Ship . Ship Size . Sub mar ine . length Ġ== Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrequired Sign ers Ġ= Ġoutput Private GameState . participants . map Ġ{ Ġit . own ing Key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Owner Ġmust Ġsign Ġthe Ġtransaction ." Ġusing Ġ( command . sign ers Ġ== Ġrequired Sign ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠIssue Private GameState Ġ: ĠCommands ĊĠĠĠ Ġ} Ċ }