package Ġorg . star coin . si ri us . protocol . ethereum Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . channels . Receive Channel Ċ import Ġkotlinx . coroutines . channels . send Blocking Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . star coin . si ri us . core .* Ċ import Ġorg . star coin . si ri us . crypto . Crypto Key Ċ import Ġorg . star coin . si ri us . crypto . eth . Eth Crypto Key Ċ import Ġorg . star coin . si ri us . lang . hex To ByteArray Ċ import Ġorg . star coin . si ri us . lang . to BigInteger Ċ import Ġorg . star coin . si ri us . lang . to HEX String Ċ import Ġorg . star coin . si ri us . lang . to Unsigned BigInteger Ċ import Ġorg . star coin . si ri us . protocol . Chain Event Ċ import Ġorg . star coin . si ri us . protocol . E thereum Transaction Ċ import Ġorg . star coin . si ri us . protocol . Transaction Result Ċ import Ġorg . star coin . si ri us . protocol . Tx Deferred Ċ import Ġorg . web 3 j . protocol . Web 3 j Ċ import Ġorg . web 3 j . protocol . core . Default Block Parameter Ċ import Ġorg . web 3 j . protocol . core . Default Block ParameterName Ċ import Ġorg . web 3 j . protocol . core . Response . Error Ċ import Ġorg . web 3 j . protocol . core . methods . request . Eth Filter Ċ import Ġorg . web 3 j . protocol . core . methods . response . Eth Block Ċ import Ġorg . web 3 j . protocol . core . methods . response . Eth Log . Log Object Ċ import Ġorg . web 3 j . protocol . core . methods . response . Transaction Ċ import Ġorg . web 3 j . protocol . http . Http Service Ċ import Ġorg . web 3 j . protocol . ipc . Unix I pc Service Ċ import Ġorg . web 3 j . protocol . websocket . WebSocket Client Ċ import Ġorg . web 3 j . protocol . websocket . WebSocket Service Ċ import Ġjava . io . IOException Ċ import Ġjava . math . BigInteger Ċ import Ġjava . net . URI ĊĊ Ċ const Ġval ĠDEFAULT _ WS Ġ= Ġ" ws :// 1 2 7 . 0 . 0 . 1 : 8 5 4 6 " Ċ const Ġval ĠG AS _ LIMIT _ BOUND _ DI VIS OR Ġ= Ġ 1 0 2 4 Ċ const Ġval Ġblock Gas Increase Percent Ġ= Ġ 0 Ċ Ċ class ĠEthereum Chain Ġconstructor ( url : ĠString Ġ= ĠDEFAULT _ WS ) Ġ: ĊĠĠĠ ĠEthereum Base Chain () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġdestroy Ġjob ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash List Ġ= Ġtx Deferred s . keys . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hash List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceipt s Ġ= Ġget Transaction Receipt s ( hash List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceipt s . forEach Ġ{ Ġreceipt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceipt ?. let Ġ{ Ġcomplete Deferred ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwait Transaction Processed ( hash : ĠHash ): ĠTx Deferred Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . register Deferred ( hash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwait Blocks ( block Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Block Num Ġ= Ġget Block Number () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Block Num Ġ+ Ġblock Count Ġ>= Ġget Block Number ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Number (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġweb 3 . eth Block Number (). send Async (). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( resp . has Error ()) Ġfail Ġ{ Ġresp . error . message Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresp . block Number . longValue Exact () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġweb Socket Client : ĠWebSocket Client ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġweb 3 : ĠWeb 3 j Ġ= ĊĠĠĠĠĠĠĠ ĠWeb 3 j . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . startsWith (" http :// ") Ġ-> ĠHttp Service ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . startsWith (" ipc :// ") Ġ-> ĠUnix I pc Service ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . startsWith (" ws :// ") Ġ|| Ġurl . startsWith (" wss :// ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client Ġ= ĠWebSocket Client ( URI ( url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWebSocket Service ( web Socket Client , Ġfalse ). also Ġ{ Ġit . connect () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail Ġ{ Ġ" Unknown Ġurl Ġto Ġinit ĠE ther um Chain " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Nonce ( address : ĠAddress ): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġuse Ġtransaction Count Ġis Ġright ? ĊĠĠĠĠĠĠĠ Ġreturn Ġweb 3 . eth Get Transaction Count ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Block ParameterName . PENDING ĊĠĠĠĠĠĠĠ Ġ). send (). transaction Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo Submit Transaction ( account : ĠEthereum Account , Ġtransaction : ĠEthereum Transaction ): ĠTx Deferred Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction . sign ( account . key Ġas ĠE th Crypto Key ) ĊĠĠĠĠĠĠĠ Ġval Ġhex Tx Ġ= Ġtransaction . to HEX String () ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġweb 3 . eth Send Raw Transaction ( hex Tx ). send Async (). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( resp . has Error ()) Ġthrow ĠNew Tx Exception ( resp . error ) ĊĠĠĠĠĠĠĠ Ġaccount . inc AndGet Nonce () ĊĠĠĠĠĠĠĠ Ġreturn Ġregister Deferred ( resp . transaction Hash . to Hash ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwatch Transactions ( filter : Ġ( Transaction Result < E thereum Transaction >) Ġ-> ĠBoolean ): ĠReceive Channel < Transaction Result < E thereum Transaction >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch Ġ= ĠChannel < Transaction Result < E thereum Transaction >>() ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb 3 . transaction Flow able (). subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceipt s Ġ= Ġget Transaction Receipt s ( listOf ( Hash . wrap ( it . hash ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx r Ġ= ĠTransaction Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Transaction ( it ), Ġreceipt s [ 0 ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter ( tx r )) Ġch . send Blocking ( tx r ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride ĊĠĠĠ Ġfun Ġwatch Events ( ĊĠĠĠĠĠĠĠ Ġcontract : ĠAddress , ĊĠĠĠĠĠĠĠ Ġevents : ĠCollection < Chain Event >, ĊĠĠĠĠĠĠĠ Ġfilter : Ġ( Transaction Result < E thereum Transaction >) Ġ-> ĠBoolean ĊĠĠĠ Ġ): ĠChannel < Transaction Result < E thereum Transaction >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch Ġ= ĠChannel < Transaction Result < E thereum Transaction >>( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġeth Filter Ġ= ĠE th Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Block ParameterName . EAR LI EST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Block ParameterName . LATE ST , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevents . forEach Ġ{ Ġeth Filter . add Single Topic ( org . web 3 j . crypto . Hash . sha 3 String ( it . event Signature )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Filter Resp Ġ= Ġweb 3 . eth New Filter ( eth Filter ). send Async (). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Filter Resp . has Error ()) Ġthrow ĠNew Filter Exception ( new Filter Resp . error ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfilter Change Resp Ġ= Ġweb 3 . eth Get Filter Changes ( new Filter Resp . filter Id ). send Async (). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( filter Change Resp . logs . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Change Resp Ġ= Ġweb 3 . eth Get Filter Changes ( new Filter Resp . filter Id ). send Async (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Change Resp . has Error ()) Ġthrow ĠFilter Change Exception ( filter Change Resp . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Change Resp . logs . map Ġ{ Ġit Ġas ĠLog Object Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrece pit Resp Ġ= Ġweb 3 . eth Get Transaction Receipt ( it . transaction Hash ). send Async (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re ce pit Resp . has Error ()) Ġthrow ĠGet Re ce pit Exception ( re ce pit Resp . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġrece pit Resp . transaction Receipt . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceipt Ġ= ĠEthereum Receipt ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Resp Ġ= Ġweb 3 . eth Get Transaction By Hash ( r . transaction Hash ). send Async (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tx Resp . has Error ()) Ġthrow ĠGet Transaction Exception ( tx Resp . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġtx Resp . transaction . get (). chain Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx r Ġ= ĠTransaction Result ( tx , Ġreceipt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter ( tx r )) Ġch . send ( tx r ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwatch Block ( ĊĠĠĠĠĠĠĠ Ġstart Block Num : ĠBigInteger , ĊĠĠĠĠĠĠĠ Ġfilter : Ġ( E thereum Block ) Ġ-> ĠBoolean ĊĠĠĠ Ġ): ĠChannel < E thereum Block > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch Ġ= ĠChannel < E thereum Block >() ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Notify Ġ= Ġweb 3 . new Head s Notifications () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsync Block Num Ġ= ĠBigInteger . valueOf (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Block Num Ġ!= ĠBigInteger . valueOf (- 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Block Num Ġ= Ġget Block Number (). to BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġstart Block Num ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( height Ġ<= Ġsync Block Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġget Block ( height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block != null Ġ&& Ġfilter ( block )) Ġch . send Blocking ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight . inc () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotify ch Ġ= ĠChannel < BigInteger >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead Notify . subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Num Ġ= Ġit . params . result . number . hex To ByteArray (). to Unsigned BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// LOG . info (" Rec ive Ġblock Ġnum :$ block Num ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Num Ġ> Ġsync Block Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ch . send Blocking ( block Num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġweb Socket Client ?. reconnect () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġnotify ch . close () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! notify ch . is Closed For Send ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġget Block ( notify ch . receive ()) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch . send Blocking ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Balance ( address : ĠAddress ): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb 3 . eth Get Balance ( address . toString (), ĠDefault Block ParameterName . LATE ST ). send Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠ Ġif Ġ( req . has Error ()) Ġthrow ĠIOException ( req . error . message ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreq . balance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Transaction ( hash : ĠHash ): ĠEthereum Transaction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġweb 3 . eth Get Transaction By Hash ( hash . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. send () ĊĠĠĠĠĠĠĠ Ġif Ġ( resp . has Error ()) Ġthrow ĠException ( resp . error . message ) ĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġresp . transaction . orElse ( null ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtx . chain Transaction () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Block ( height : ĠBigInteger ): ĠEthereum Block ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Req Ġ= Ġweb 3 . eth Get Block By Number ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Ġ== ĠBigInteger . valueOf (- 1 )) ĠDefault Block ParameterName . LATE ST Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Block Parameter . valueOf ( height ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ). send Async (). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( block Req . has Error ()) Ġthrow ĠIOException ( block Req . error . message ) ĊĠĠĠĠĠĠĠ Ġreturn Ġblock Req . block ?. block Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Get Transaction Receipt s ( block : ĠE th Block . Block ): ĠList < Receipt > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . do Get Transaction Receipt s ( block . transactions . map Ġ{ Ġval Ġtx Ġ= Ġit Ġas ĠTransaction ; Ġtx . hash Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit !! Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Get Transaction Receipt s ( tx Hash s : ĠList < String >): ĠList < Receipt ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtx Hash s . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// send ĠAsync Ġbatch , Ġthen Ġget Ġresult . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb 3 . eth Get Transaction Receipt ( it ). send Async () ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrece pit Resp Ġ= Ġit . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġnot Ġfind Ġresp Ġ. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re ce pit Resp . has Error ()) Ġthrow ĠGet Re ce pit Exception ( re ce pit Resp . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrece pit Resp . transaction Receipt . orElse ( null )?. let Ġ{ ĠEthereum Receipt ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Transaction Receipt s ( tx Hash s : ĠList < Hash >): ĠList < Receipt ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . do Get Transaction Receipt s ( tx Hash s . map Ġ{ Ġit . toString () Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġcall Const Function ( caller : ĠCrypto Key , Ġcontract Address : ĠAddress , Ġdata : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġthis . web 3 . eth Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . web 3 j . protocol . core . methods . request . Transaction . create Eth Call Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaller . address . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract Address . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . to HEX String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠDefault Block ParameterName . LATE ST Ġ// TODO : ĠPass Ġthe Ġblock Num Ġin Ġreceipt Ġbetter ? ĊĠĠĠĠĠĠĠ Ġ). send Async (). get () ĊĠĠĠĠĠĠĠ Ġif Ġ( resp . has Error ()) Ġfail Ġ{ Ġresp . error . message Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresp . value . hex To ByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTransaction . chain Transaction () Ġ= ĠEthereum Transaction ( this ) ĊĊĠĠĠ Ġprivate Ġfun ĠE th Block . Block . block Info (): ĠEthereum Block Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEthereum Block ( this , Ġdo Get Transaction Receipt s ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġc ac ulate Gas Limit (): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBigInteger . valueOf ( 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠ Ġreturn ĠByte Util . bytes To BigInteger ( parent . get Gas Limit ()) ĊĠĠĠĠĠĠĠ Ġ. multiply ( G AS _ LIMIT _ BOUND _ DI VIS OR Ġ* Ġ 1 0 0 Ġ+ Ġblock Gas Increase Percent ) ĊĠĠĠĠĠĠĠ Ġ. divide ( BigInteger . valueOf (( G AS _ LIMIT _ BOUND _ DI VIS OR Ġ* Ġ 1 0 0 ). to Long ())) **/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠNew Tx Exception ( error : ĠError ) Ġ: ĠException ( error . message ) ĊĠĠĠ Ġopen Ġclass ĠWatch Tx Exec ption ( error : ĠError ) Ġ: ĠException ( error . message ) ĊĠĠĠ Ġclass ĠNew Filter Exception ( error : ĠError ) Ġ: ĠWatch Tx Exec ption ( error ) ĊĠĠĠ Ġclass ĠFilter Change Exception ( error : ĠError ) Ġ: ĠWatch Tx Exec ption ( error ) ĊĠĠĠ Ġclass ĠGet Re ce pit Exception ( error : ĠError ) Ġ: ĠWatch Tx Exec ption ( error ) ĊĠĠĠ Ġclass ĠGet Transaction Exception ( error : ĠError ) Ġ: ĠWatch Tx Exec ption ( error ) ĊĊĠĠĠ Ġoverride Ġfun Ġnew Transaction ( account : ĠEthereum Account , Ġto : ĠAddress , Ġvalue : ĠBigInteger ): ĠEthereum Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEthereum Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . get Nonce (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Base Chain . default Gas Price , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Base Chain . default Gas Limit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb 3 . shutdown () ĊĠĠĠ Ġ} Ċ }