package Ġcom . r 3 . cord a . sdk . token . contracts Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Return Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . commands . Issue Token Command Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . commands . Move Token Command Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . commands . Re deem Token Command Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . utilities . held By Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . utilities . iss ued By Ċ import Ġcom . r 3 . cord a . sdk . token . contracts . utilities . of Ċ import Ġcom . r 3 . cord a . sdk . token . money . GBP Ċ import Ġcom . r 3 . cord a . sdk . token . money . USD Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . contracts . Type Only Command Data Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . core . node . Not ary Info Ċ import Ġnet . cord a . node . services . api . Identity Service Internal Ċ import Ġnet . cord a . testing . common . internal . test Network Parameters Ċ import Ġnet . cord a . testing . core . D UMMY _ NOT ARY _ NAME Ċ import Ġnet . cord a . testing . core . Serialization Environment Rule Ċ import Ġnet . cord a . testing . core . Test Identity Ċ import Ġnet . cord a . testing . dsl . En force Verify OrFail Ċ import Ġnet . cord a . testing . dsl . Transaction DSL Ċ import Ġnet . cord a . testing . dsl . Transaction DSL Interpreter Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . transaction Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠF ung ible Token Tests Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠNOT ARY Ġ= ĠTest Identity ( D UMMY _ NOT ARY _ NAME , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠISS U ER Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" IS SU ER ", Ġ" L ondon ", Ġ" GB ")) ĊĠĠĠĠĠĠĠ Ġval ĠA LIC E Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" AL ICE ", Ġ" L ondon ", Ġ" GB ")) ĊĠĠĠĠĠĠĠ Ġval ĠB OB Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" BO B ", Ġ" L ondon ", Ġ" GB ")) ĊĠĠĠĠĠĠĠ Ġval ĠP ET ER Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" PET ER ", Ġ" L ondon ", Ġ" GB ")) ĊĠĠĠĠĠĠĠ Ġval ĠPA UL Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" PA UL ", Ġ" L ondon ", Ġ" GB ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġtest Serialization Ġ= ĠSerialization Environment Rule () ĊĊĠĠĠ Ġprivate Ġval Ġalice Services Ġ= ĠMock Services ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ord app Packages Ġ= ĠlistOf (" com . r 3 . cord a . sdk . token . contracts ", Ġ" com . r 3 . cord a . sdk . token . money "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Identity Ġ= ĠA LIC E , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Service Ġ= Ġmock < Identity Service Internal >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( AL ICE . party ). wh enever ( it ). party From Key ( AL ICE . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( BO B . party ). wh enever ( it ). party From Key ( BO B . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( PET ER . party ). wh enever ( it ). party From Key ( PET ER . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( PA UL . party ). wh enever ( it ). party From Key ( PA UL . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( IS SU ER . party ). wh enever ( it ). party From Key ( IS SU ER . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Parameters Ġ= Ġtest Network Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Platform Version Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot aries Ġ= ĠlistOf ( Not ary Info ( NOT ARY . party , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġtransaction ( script : ĠTransaction DSL < Transaction DSL Interpreter >. () Ġ-> ĠEn force Verify OrFail ) Ġ{ ĊĠĠĠĠĠĠĠ Ġalice Services . transaction ( NOT ARY . party , Ġscript ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠWrong Command Ġ: ĠType Only Command Data () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` issue Ġtoken Ġtests `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissued Token Ġ= ĠG BP Ġissued By ĠISS U ER . party ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġwith Ġonly Ġone Ġoutput . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġcommand Ġfails . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" A Ġtransaction Ġmust Ġcontain Ġat Ġleast Ġone Ġcommand " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSigned Ġby Ġa Ġparty Ġother Ġthan Ġthe Ġissuer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( BO B . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" The Ġissuer Ġmust Ġbe Ġthe Ġonly Ġsigning Ġparty Ġwhen Ġan Ġamount Ġof Ġtokens Ġare Ġissued ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNon Ġissuer Ġsignature Ġpresent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠB OB . publicKey ), ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" The Ġissuer Ġmust Ġbe Ġthe Ġonly Ġsigning Ġparty Ġwhen Ġan Ġamount Ġof Ġtokens Ġare Ġissued ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWith Ġan Ġincorrect Ġcommand . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( BO B . publicKey , ĠWrong Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġmust Ġbe Ġat Ġleast Ġone Ġtoken Ġcommand Ġin Ġthis Ġtransaction ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWith Ġdifferent Ġcommand Ġtypes Ġfor Ġone Ġgroup . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġmust Ġbe Ġexactly Ġone ĠToken Command Ġtype Ġper Ġgroup ! ĠFor Ġexample : ĠYou Ġcannot Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" map Ġan ĠIssue ĠAND Ġa ĠMove Ġcommand Ġto Ġone Ġgroup Ġof Ġtokens Ġin Ġa Ġtransaction ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġa Ġgroup Ġwith Ġno Ġassigned Ġcommand . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠISS U ER . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġis Ġa Ġtoken Ġgroup Ġwith Ġno Ġassigned Ġcommand !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWith Ġa Ġzero Ġamount Ġin Ġanother Ġgroup . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Token Ġ= ĠUSD Ġissued By ĠISS U ER . party ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 0 Ġof Ġother Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( other Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġiss uing Ġtokens Ġan Ġamount Ġ> ĠZERO Ġmust Ġbe Ġissued ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWith Ġsome Ġinput Ġstates . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġiss uing Ġtokens , Ġthere Ġcannot Ġbe Ġany Ġinput Ġstates ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġa Ġzero Ġoutput . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" You Ġcannot Ġissue Ġtokens Ġwith Ġa Ġzero Ġamount ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġanother Ġtoken Ġtype Ġand Ġa Ġmatching Ġcommand . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Token Ġ= ĠUSD Ġissued By ĠISS U ER . party ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġother Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( other Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġmore Ġoutput Ġstates Ġof Ġthe Ġsame Ġtoken Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 0 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġthe Ġsame Ġtoken Ġissued Ġby Ġa Ġdifferent Ġissuer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġwouldn 't Ġusually Ġdo Ġthis Ġbut Ġit Ġis Ġpossible . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 . GBP Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( BO B . publicKey , ĠIssue Token Command ( GBP Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWith Ġthe Ġcorrect Ġcommand Ġand Ġsigned Ġby Ġthe Ġissuer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠIssue Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` move Ġtoken Ġtests `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissued Token Ġ= ĠG BP Ġissued By ĠISS U ER . party ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġwith Ġa Ġbasic Ġmove Ġwhich Ġmoves Ġ 1 0 Ġtokens Ġin Ġentire ty Ġfrom ĠA LIC E Ġto ĠB OB . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠB OB . party ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġmove Ġcommand , Ġsigned Ġby ĠA LIC E . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġcoup led Ġwith Ġan Ġissue . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( BO B . publicKey , ĠIssue Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInput Ġmissing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġmoving Ġtokens , Ġthere Ġmust Ġbe Ġinput Ġstates Ġpresent ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOutput Ġmissing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġmoving Ġtokens , Ġthere Ġmust Ġbe Ġoutput Ġstates Ġpresent ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInputs Ġsum Ġto Ġzero . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" In Ġmove Ġgroups Ġthere Ġmust Ġbe Ġan Ġamount Ġof Ġinput Ġtokens Ġ> ĠZERO ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOutputs Ġsum Ġto Ġzero . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" In Ġmove Ġgroups Ġthere Ġmust Ġbe Ġan Ġamount Ġof Ġoutput Ġtokens Ġ> ĠZERO ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠU nb al anced Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 1 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" In Ġmove Ġgroups Ġthe Ġamount Ġof Ġinput Ġtokens ĠMUST ĠEQUAL Ġthe Ġamount Ġof Ġoutput Ġtokens . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" In Ġother Ġwords , Ġyou Ġcannot Ġcreate Ġor Ġdestroy Ġvalue Ġwhen Ġmoving Ġtokens ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" You Ġcannot Ġcreate Ġoutput Ġtoken Ġamounts Ġwith Ġa ĠZERO Ġamount ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTwo Ġmoves Ġ( two Ġdifferent Ġgroups ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 . USD Ġissued By ĠB OB . party Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( USD Ġissued By ĠB OB . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfor Ġthe Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTwo Ġmoves Ġ( one Ġgroup ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġbasic Ġmove Ġfrom ĠPeter Ġto ĠPaul . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 2 0 Ġof Ġissued Token Ġheld By ĠP ET ER . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 2 0 Ġof Ġissued Token Ġheld By ĠPA UL . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( PET ER . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWrong Ġpublic Ġkey . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( BO B . publicKey , ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġare Ġrequired Ġsign ers Ġmissing Ġor Ġsome Ġof Ġthe Ġspecified Ġsign ers Ġare Ġnot Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" required . ĠA Ġtransaction Ġto Ġmove Ġtoken Ġamounts Ġmust Ġbe Ġsigned Ġby ĠONLY ĠALL Ġthe Ġowners Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" of ĠALL Ġthe Ġinput Ġtoken Ġamounts ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncludes Ġan Ġincorrect Ġpublic Ġwith Ġthe Ġcorrect Ġkey Ġstill Ġbeing Ġpresent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠA LIC E . publicKey ), ĠMove Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġare Ġrequired Ġsign ers Ġmissing Ġor Ġsome Ġof Ġthe Ġspecified Ġsign ers Ġare Ġnot Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" required . ĠA Ġtransaction Ġto Ġmove Ġtoken Ġamounts Ġmust Ġbe Ġsigned Ġby ĠONLY ĠALL Ġthe Ġowners Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" of ĠALL Ġthe Ġinput Ġtoken Ġamounts ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` re deem Ġtoken Ġtests `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissued Token Ġ= ĠG BP Ġissued By ĠISS U ER . party ĊĠĠĠĠĠĠĠ Ġval Ġother Issuer Token Ġ= ĠG BP Ġissued By ĠB OB . party ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġwith Ġa Ġbasic Ġrede em Ġwhich Ġrede ems Ġ 1 0 Ġtokens Ġin Ġentire ty Ġfrom ĠA LIC E Ġ. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( IS SU ER . publicKey , ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" Contract Ġverification Ġfailed : ĠOwn ers Ġof Ġre dee med Ġstates Ġmust Ġbe Ġthe Ġsigning Ġparties ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe Ġholder Ġbut Ġnot Ġissuer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE . publicKey , ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" Contract Ġverification Ġfailed : ĠThe Ġissuer Ġmust Ġbe Ġthe Ġsigning Ġparty Ġwhen Ġan Ġamount Ġof Ġtokens Ġare Ġre dee med ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠZero Ġoutputs . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġadditional Ġinput Ġto Ġrede em , Ġby Ġdifferent Ġissuer . ĠF ails Ġbecause Ġit Ġrequires Ġcommand Ġsigned Ġby Ġthat Ġissuer . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġother Issuer Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( other Issuer Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġis Ġa Ġtoken Ġgroup Ġwith Ġno Ġassigned Ġcommand !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTwo Ġrede em Ġgroups Ġverify . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġother Issuer Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( other Issuer Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠOne Ġoutput . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġchange Ġback Ġto ĠAlice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 5 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠOne Ġoutput Ġ- Ġbut Ġdifferent Ġowner , Ġcan Ġhappen Ġwith Ġanonymous Ġkeys . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġchange Ġback Ġto ĠB OB . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 5 Ġof Ġissued Token Ġheld By ĠB OB . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠOutput Ġtoo Ġbig . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġchange Ġback Ġto ĠAlice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 1 0 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" Change Ġshouldn 't Ġexceed Ġamount Ġre dee med ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠOutput Ġis Ġzero . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġchange Ġback Ġto ĠAlice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , ĠAmount . zero ( iss ued Token ) Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" If Ġthere Ġis Ġan Ġoutput , Ġit Ġmust Ġhave Ġa Ġvalue Ġgreater Ġthan Ġzero ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠToo Ġmany Ġoutputs . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġchange Ġback Ġto ĠAlice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 2 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 2 Ġof Ġissued Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġrede em ing Ġtokens , Ġthere Ġmust Ġbe Ġzero Ġor Ġone Ġoutput Ġstate ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠThis Ġshould Ġfail Ġbecause Ġthere Ġis Ġadditional Ġcommand Ġwithout Ġinputs / outputs ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġrede em Ġcommand , Ġsigned Ġby Ġthe ĠISS U ER Ġand ĠA LIC E Ġ- Ġowner . ĠNo Ġinput Ġfor Ġone Ġgroup . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( other Issuer Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( other Issuer Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( F ung ible Token Contract . contract Id , Ġ 2 Ġof Ġother Issuer Token Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" ĠWhen Ġrede em ing Ġtokens , Ġthere Ġmust Ġbe Ġinput Ġstates Ġpresent ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠZero Ġamount Ġinput Ġ- Ġfail . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( F ung ible Token Contract . contract Id , ĠAmount . zero ( other Issuer Token ) Ġheld By ĠA LIC E . party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( IS SU ER . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( iss ued Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( BO B . publicKey , ĠA LIC E . publicKey ), ĠRe deem Token Command ( other Issuer Token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" When Ġrede em ing Ġtokens Ġan Ġamount Ġ> ĠZERO Ġmust Ġbe Ġre dee med ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ