package Ġcom . rar ible . protocol . order . listener . service . descriptors . exchange . v 2 Ċ Ċ import Ġcom . rar ible . core . common . now Millis Ċ import Ġcom . rar ible . core . test . wait . Wait Ċ import Ġcom . rar ible . ethereum . domain . Eth UInt 2 5 6 Ċ import Ġcom . rar ible . protocol . contracts . exchange . v 2 . events . Match Event Ċ import Ġcom . rar ible . protocol . dto . Order Activity Match Dto Ċ import Ġcom . rar ible . protocol . dto . Part Dto Ċ import Ġcom . rar ible . protocol . dto . Prepare Order Tx Form Dto Ċ import Ġcom . rar ible . protocol . order . core . model .* Ċ import Ġcom . rar ible . protocol . order . core . service . Prepare Tx Service Ċ import Ġcom . rar ible . protocol . order . listener . integration . IntegrationTest Ċ import Ġcom . rar ible . protocol . order . listener . misc . setField Ċ import Ġcom . rar ible . protocol . order . listener . misc . sign Ċ import Ġjunit . framework . Assert . assertFalse Ċ import Ġjunit . framework . Assert . assertTrue Ċ import Ġkotlinx . coroutines . reactive . await First Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġscale ther . domain . Address Ċ import Ġscale ther . domain . Address Factory Ċ import Ġscale ther . domain . request . Transaction Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . math . BigInteger . ONE Ċ import Ġjava . math . BigInteger . TEN Ċ Ċ @ IntegrationTest Ċ class ĠExchange V 2 Match Descriptor Test Ġ: ĠAbstract Exchange V 2 Test () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprepare Tx Service : ĠPrepare Tx Service ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconvert () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġset Field ( prepare Tx Service , Ġ" e ip 7 1 2 Domain ", Ġe ip 7 1 2 Domain ) ĊĊĠĠĠĠĠĠĠ Ġval Ġorder Left Version Ġ= ĠOrder Version ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm aker Ġ= Ġuser Sender 1 . from (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt aker Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Ġ= ĠAsset ( E rc 2 0 Asset Type ( token 1 . address ()), ĠE th UInt 2 5 6 . TEN ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Ġ= ĠAsset ( E rc 7 2 1 Asset Type ( token 7 2 1 . address (), ĠE th UInt 2 5 6 . ONE ), ĠE th UInt 2 5 6 . ONE ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠOrder Type . R AR IBLE _ V 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsalt Ġ= ĠE th UInt 2 5 6 . TEN , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠOrder R ar ible V 2 Data V 1 ( emptyList (), ĠlistOf ( Part ( user Sender 2 . from (), ĠE th UInt 2 5 6 . ONE ))), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġnow Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Price Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Price Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Price Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Price Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Us d Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġorder Right Version Ġ= Ġorder Left Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. invert ( user Sender 2 . from ()). copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠOrder R ar ible V 2 Data V 1 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Part ( user Sender 2 . from (), ĠE th UInt 2 5 6 . of ( 1 0 0 0 0 ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Part ( Address Factory . create (), ĠE th UInt 2 5 6 . of ( 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġorder Update Service . save ( order Left Version ) ĊĠĠĠĠĠĠĠ Ġorder Update Service . save ( order Right Version ) ĊĊĠĠĠĠĠĠĠ Ġtoken 1 . mint ( user Sender 1 . from (), ĠT EN . pow ( 2 )). execute (). verify Success () ĊĠĠĠĠĠĠĠ Ġtoken 7 2 1 . mint ( user Sender 2 . from (), ĠONE , Ġ" test "). execute (). verify Success () ĊĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġe ip 7 1 2 Domain . hash To Sign ( Order . hash ( order Left Version )). sign ( privateKey 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprepared Ġ= Ġprepare Tx Service . prepare Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Left Version . copy ( signature Ġ= Ġsignature ). to Order Exact Fields (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrepare Order Tx Form Dto ( user Sender 2 . from (), ĠONE , Ġempty List (), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġuser Sender 2 . send Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexchange . address (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Sender 2 . from (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 0 0 0 0 . to BigInteger (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared . transaction . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). verify Success () ĊĊĠĠĠĠĠĠĠ ĠWait . wait Assert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġexchange History Repository . findBy ItemType ( ItemType . ORDER _ SIDE _ MATCH ). collect List (). await First () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( items ). has Size ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . data Ġas ĠOrder Side Match Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By Ġ{ Ġit . side Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġmap [ Order Side . LEFT ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġmap [ Order Side . RIGHT ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. fill ). isEqualTo ( Eth UInt 2 5 6 . ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. data ). isEqualTo ( order Left Version . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. fill ). isEqualTo ( Eth UInt 2 5 6 . TEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. data ). isEqualTo ( Order R ar ible V 2 Data V 1 ( emptyList (), Ġempty List ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. make ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( order Left Version . make . copy ( value Ġ= ĠE th UInt 2 5 6 . TEN )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. take ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( order Left Version . take . copy ( value Ġ= ĠE th UInt 2 5 6 . ONE )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. make ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( order Right Version . make . copy ( value Ġ= ĠE th UInt 2 5 6 . ONE )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. take ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( order Right Version . take . copy ( value Ġ= ĠE th UInt 2 5 6 . TEN )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. make Value ). isEqualTo ( BigDecimal (" 0 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. take Value ). isEqualTo ( BigDecimal ( 1 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. make Value ). isEqualTo ( right ?. take Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. take Value ). isEqualTo ( right ?. make Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( left ?. ad hoc !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( right ?. counter Ad hoc !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( right ?. ad hoc !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( left ?. counter Ad hoc !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Activity Was Published ( order Left Version . to Order Exact Fields (), ĠMatch Event . id (), ĠOrder Activity Match Dto :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconvert With Pay outs () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġset Field ( prepare Tx Service , Ġ" e ip 7 1 2 Domain ", Ġe ip 7 1 2 Domain ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Pay out Ġ= ĠAddress Factory . create () ĊĠĠĠĠĠĠĠ Ġval Ġright Pay out Ġ= ĠAddress Factory . create () ĊĊĠĠĠĠĠĠĠ Ġval Ġorder Left Version Ġ= ĠOrder Version ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm aker Ġ= Ġuser Sender 1 . from (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt aker Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Ġ= ĠAsset ( E rc 2 0 Asset Type ( token 1 . address ()), ĠE th UInt 2 5 6 . TEN ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Ġ= ĠAsset ( E rc 7 2 1 Asset Type ( token 7 2 1 . address (), ĠE th UInt 2 5 6 . ONE ), ĠE th UInt 2 5 6 . ONE ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠOrder Type . R AR IBLE _ V 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsalt Ġ= ĠE th UInt 2 5 6 . TEN , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠOrder R ar ible V 2 Data V 1 ( pay outs Ġ= ĠlistOf ( Part ( left Pay out , ĠE th UInt 2 5 6 . of ( 1 0 0 0 0 ))), Ġorigin Fees Ġ= ĠlistOf ( Part ( user Sender 2 . from (), ĠE th UInt 2 5 6 . ONE ))), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġnow Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Price Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Price Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Price Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Price Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Us d Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Us d Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġorder Update Service . save ( order Left Version ) ĊĊĠĠĠĠĠĠĠ Ġtoken 1 . mint ( user Sender 1 . from (), ĠT EN . pow ( 2 )). execute (). verify Success () ĊĠĠĠĠĠĠĠ Ġtoken 7 2 1 . mint ( user Sender 2 . from (), ĠONE , Ġ" test "). execute (). verify Success () ĊĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġe ip 7 1 2 Domain . hash To Sign ( Order . hash ( order Left Version )). sign ( privateKey 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprepared Ġ= Ġprepare Tx Service . prepare Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Left Version . copy ( signature Ġ= Ġsignature ). to Order Exact Fields (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrepare Order Tx Form Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm aker Ġ= Ġuser Sender 2 . from (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= ĠONE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpay outs Ġ= ĠlistOf ( Part Dto ( right Pay out , Ġ 1 0 0 0 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Fees Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġuser Sender 2 . send Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexchange . address (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Sender 2 . from (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 0 0 0 0 . to BigInteger (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepared . transaction . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). verify Success () ĊĊĠĠĠĠĠĠĠ ĠWait . wait Assert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġexchange History Repository . findBy ItemType ( ItemType . ORDER _ SIDE _ MATCH ). collect List (). await First () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( items ). has Size ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . data Ġas ĠOrder Side Match Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By Ġ{ Ġit . side Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġmap [ Order Side . LEFT ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġmap [ Order Side . RIGHT ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. data ). isEqualTo ( order Left Version . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. data ). isEqualTo ( Order R ar ible V 2 Data V 1 ( listOf ( Part ( right Pay out , ĠE th UInt 2 5 6 . of ( 1 0 0 0 0 ))), Ġempty List ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. maker ). isEqualTo ( left Pay out ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( left ?. t aker ). isEqualTo ( right Pay out ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. maker ). isEqualTo ( right Pay out ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( right ?. t aker ). isEqualTo ( left Pay out ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠOrder Version . invert ( maker : ĠAddress ) Ġ= Ġthis . copy ( ĊĠĠĠ Ġid Ġ= ĠObjectId (), Ġ// Ġrecreate ĠID . ĊĠĠĠ Ġm aker Ġ= Ġm aker , ĊĠĠĠ Ġmake Ġ= Ġtake , ĊĠĠĠ Ġtake Ġ= Ġmake , ĊĠĠĠ Ġhash Ġ= ĠOrder . hash Key ( maker , Ġtake . type , Ġmake . type , Ġsalt . value ) Ċ ) Ċ