package Ġcom . v enc imento . contract Ċ Ċ import Ġcom . v enc imento . state . Status V enc imento Ċ import Ġcom . v enc imento . state . V enc imento State Ċ import Ġnet . cord a . core . contracts . Command Data Ċ import Ġnet . cord a . core . contracts . Contract Ċ import Ġnet . cord a . core . contracts . require That Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ Ċ class ĠV enc imento Contract Ġ: ĠContract Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomando Ġ= Ġtx . commands OfType < Commands >(). single () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( com ando . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Emit ir Ġ-> Ġverify Emit ir ( tx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Ace itar Ġ-> Ġverify Res posta ( tx , ĠStatus V enc imento . AP ag ar , ĠStatus V enc imento . Emit ido ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Re cus ar Ġ-> Ġverify Res posta ( tx , ĠStatus V enc imento . Re cus ado , ĠStatus V enc imento . Emit ido ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Pag ar Ġ-> Ġverify Res posta ( tx , ĠStatus V enc imento . Pago , ĠStatus V enc imento . AP ag ar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre gr as Ġvalid as Ġpara Ġtodos Ġos Ġcom andos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Todos Ġos Ġparticipant es Ġdev em Ġass inar Ġa Ġtrans aÃ§Ã£o ." Ġusing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . outputs . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtodos Os Ass in antes Ġ= Ġtx . commands . flatMap Ġ{ Ġit . sign ers Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch aves Dos Participant es Ġ= Ġit . data . participants ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . own ing Key Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtodos Os Ass in antes . contains All ( ch aves Dos Participant es ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Res posta ( tx : ĠLed ger Transaction , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Nov o : ĠStatus V enc imento , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus At ual : ĠStatus V enc imento ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// valid aÃ§Ãµes Ġda Ġtrans aÃ§Ã£o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" De ve Ġha ver Ġinput ." Ġusing Ġ( tx . inputs OfType < V enc imento State >(). isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" De ve Ġha ver Ġoutput ." Ġusing Ġ( tx . outputs OfType < V enc imento State >(). isNotEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinputs Ġ= Ġtx . inputs OfType < V enc imento State >(). sorted By Ġ{ Ġit . linear Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutputs Ġ= Ġtx . outputs OfType < V enc imento State >(). sorted By Ġ{ Ġit . linear Id Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" As Ġlist as Ġde Ġinput Ġe Ġoutput Ġdev em Ġter Ġo Ġmesmo Ġtamanho ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . size Ġ== Ġoutputs . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinputs E Outputs Ġ= Ġinputs . zip ( outputs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Os Ġinputs Ġe Ġoutputs Ġdev em Ġposs uir Ġos Ġme sm os Ġids ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs E Outputs . all Ġ{ Ġit . first . linear Id Ġ== Ġit . second . linear Id Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// valid aÃ§Ãµes Ġdo Ġneg Ã³ c io ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Os Ġvalores Ġdo Ġinput Ġe Ġoutput Ġdev em Ġser Ġos Ġmesmo ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs E Outputs . all Ġ{ Ġit . first . valor Ġ== Ġit . second . valor Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠDe Ġdo Ġinput Ġe Ġoutput Ġdev em Ġser Ġos Ġmesmo ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs E Outputs . all Ġ{ Ġit . first . de Ġ== Ġit . second . de Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠPara Ġdo Ġinput Ġe Ġoutput Ġdev em Ġser Ġos Ġmesmo ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs E Outputs . all Ġ{ Ġit . first . para Ġ== Ġit . second . para Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠStatus Ġdo Ġoutput Ġdeve Ġser Ġ$ status Nov o ." Ġusing Ġ( outputs . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . status V enc imento Ġ== Ġstatus Nov o Ġ} Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠStatus Ġdo Ġinput Ġdeve Ġser Ġ$ status At ual ." Ġusing Ġ( inputs . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . status V enc imento Ġ== Ġstatus At ual } Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Emit ir ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// valid aÃ§Ãµes Ġda Ġtrans aÃ§Ã£o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" NÃ£o Ġpode Ġha ver Ġinput ." Ġusing Ġtx . inputs OfType < V enc imento State >(). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" De ve Ġha ver Ġum Ġoutput ." Ġusing Ġ( tx . outputs OfType < V enc imento State >(). size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutputs Ġ= Ġtx . outputs OfType < V enc imento State >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// valid aÃ§Ãµes Ġdo Ġneg Ã³ c io ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠDe Ġe Ġo ĠPara ĠnÃ£o Ġpodem Ġser Ġig ua is ." Ġusing Ġ( outputs . all Ġ{ Ġit . de Ġ!= Ġit . para Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O Ġvalor Ġdeve Ġser Ġmai or Ġque Ġzero ." Ġusing Ġ( outputs . all Ġ{ Ġit . valor Ġ> Ġ 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ĠStatus Ġdo ĠV enc imento Ġdeve Ġser Ġ${ Status V enc imento . Emit ido } ." Ġusing Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs . all Ġ{ Ġit . status V enc imento Ġ== ĠStatus V enc imento . Emit ido Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Pag ar ( tx : ĠLed ger Transaction ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Re cus ar ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠEmit ir Ġ: ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠA ce itar Ġ: ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠRe cus ar Ġ: ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠPag ar Ġ: ĠCommands ĊĠĠĠ Ġ} Ċ Ċ }