package Ġcom . l umi wallet . android . core . bitcoin Cash . transaction Ċ Ċ import Ġcom . l umi wallet . android . core . bitcoin Cash . constant . OpCodes Ċ import Ġcom . l umi wallet . android . core . utils . Sha 2 5 6 Hash Ċ import Ġcom . l umi wallet . android . core . utils . btc _ based . ByteBuffer Ċ import Ġcom . l umi wallet . android . core . utils . btc _ based . types . Op Size Ċ import Ġcom . l umi wallet . android . core . utils . btc _ based . types . UInt Ċ import Ġcom . l umi wallet . android . core . utils . btc _ based . types . UL ong Ċ Ċ object ĠSig Pre image Producer Ġ{ ĊĊĠĠĠ Ġinternal Ġfun Ġproduce Pre image ( ĊĠĠĠĠĠĠĠ Ġinputs : ĠList < Input >, ĊĠĠĠĠĠĠĠ Ġoutputs : ĠList < Output >, ĊĠĠĠĠĠĠĠ Ġcurrent Input : ĠInput ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpre image Ġ= ĠByteBuffer () ĊĊĠĠĠĠĠĠĠ Ġ// 2 . Ġhash Prev Out s ĊĠĠĠĠĠĠĠ Ġval Ġprev Out s Ġ= ĠByteBuffer () ĊĠĠĠĠĠĠĠ Ġinputs . forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Out s . append (* input . transaction Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Out s . append (* UInt . of ( input . index ). lit End Bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpre image . append (* Sha 2 5 6 Hash . hash Tw ice ( prev Out s . bytes )) ĊĊĠĠĠĠĠĠĠ Ġ// 3 . Ġhash Sequences ĊĠĠĠĠĠĠĠ Ġval Ġsequences Ġ= ĠByteBuffer () ĊĠĠĠĠĠĠĠ Ġfor Ġ( input Ġin Ġinputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequences . append (* input . sequence . as Lit End Bytes ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpre image . append (* Sha 2 5 6 Hash . hash Tw ice ( sequences . bytes )) ĊĊĠĠĠĠĠĠĠ Ġ// 4 . ĠPrevious Transaction Hash ĊĠĠĠĠĠĠĠ Ġpre image . append (* current Input . transaction Hash ) ĊĊĠĠĠĠĠĠĠ Ġ// 5 . Input Index ĊĠĠĠĠĠĠĠ Ġpre image . append (* UInt . of ( current Input . index ). as Lit End Bytes ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġscript Code Ġ= ĠByteBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp Codes . DUP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp Codes . HASH 1 6 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp Size . of Int ( 2 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* current Input . privateKey . publicKey Hash , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp Codes . EQUAL VERIFY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp Codes . CHECK SIG ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// 6 . Script Data Count ĊĠĠĠĠĠĠĠ Ġpre image . append ( Op Size . of Int ( script Code . size )) ĊĊĠĠĠĠĠĠĠ Ġ// 7 . Script Data ĊĠĠĠĠĠĠĠ Ġpre image . append (* script Code . bytes ) ĊĊĠĠĠĠĠĠĠ Ġ// 8 . Amount ĊĠĠĠĠĠĠĠ Ġpre image . append (* UL ong . of ( current Input . sat oshi ). as Lit End Bytes ()) ĊĊĠĠĠĠĠĠĠ Ġ// 9 . Sequence ĊĠĠĠĠĠĠĠ Ġpre image . append (* current Input . sequence . as Lit End Bytes ()) ĊĊĠĠĠĠĠĠĠ Ġ// 1 0 . Outputs Hash ĊĠĠĠĠĠĠĠ Ġval Ġout s Ġ= ĠByteBuffer () ĊĠĠĠĠĠĠĠ Ġoutputs . forEach Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout s . append (* output . serialize For Sig Hash ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpre image . append (* Sha 2 5 6 Hash . hash Tw ice ( outs . bytes )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpre image . bytes () ĊĠĠĠ Ġ} Ċ } Ċ