/** Ċ * ĠCopyright ĠS or am its u ĠCo ., ĠLtd . ĠAll ĠRights ĠReserved . Ċ * ĠSPDX - License - Identifier : ĠGPL - 3 . 0 Ċ */ Ċ Ċ package Ġjp . co . sor am its u . feature _ ethereum _ impl . data . repository Ċ Ċ import Ġjp . co . sor am its u . common . domain . Asset Balance Ċ import Ġjp . co . sor am its u . common . domain . Serializer Ċ import Ġjp . co . sor am its u . common . domain . S ora Exception Ċ import Ġjp . co . sor am its u . core _ db . App Database Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . interfaces . E thereum Datasource Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . interfaces . E thereum Repository Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . model . Eth Register State Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . model . E thereum Credentials Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . model . Gas Ċ import Ġjp . co . sor am its u . feature _ ethereum _ api . domain . model . Gas Estimation Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . data . map pers . Eth Register State Mapper Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . data . map pers . E thereum Credentials Mapper Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . data . network . model . Eth PublicKey With Proof Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . data . network . model . K ecc ak Proof Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . data . repository . converter . Ether Wei Converter Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . util . Contracts Api Provider Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . util . Web 3 j B ip 3 2 Crypto Ċ import Ġjp . co . sor am its u . feature _ ethereum _ impl . util . Web 3 j Provider Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġorg . bouncycastle . util . en coders . Hex Ċ import Ġorg . web 3 j . crypto . Sign Ċ import Ġorg . web 3 j . protocol . core . Default Block ParameterName Ċ import Ġorg . web 3 j . utils . Numeric Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . KeyPair Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEthereum Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġeth DataSource : ĠEthereum Datasource , ĊĠĠĠ Ġprivate Ġval Ġe thereum Credentials Mapper : ĠEthereum Credentials Mapper , ĊĠĠĠ Ġprivate Ġval Ġweb 3 j Provider : ĠWeb 3 j Provider , ĊĠĠĠ Ġprivate Ġval Ġweb 3 j B ip 3 2 Crypto : ĠWeb 3 j B ip 3 2 Crypto , ĊĠĠĠ Ġprivate Ġval Ġserializer : ĠSerializer , ĊĠĠĠ Ġprivate Ġval Ġcontract Api Provider : ĠContract s Api Provider , ĊĠĠĠ Ġprivate Ġval Ġether Wei Converter : ĠE ther Wei Converter , ĊĠĠĠ Ġprivate Ġval Ġdb : ĠApp Database , ĊĠĠĠ Ġprivate Ġval Ġeth Register State Mapper : ĠE th Register State Mapper , Ċ ) Ġ: ĠEthereum Repository Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY _ PRO OF _ HASH Ġ= ĠByteArray ( 3 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Val Token Address ( eth Credentials : ĠEthereum Credentials ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontract Api Provider . get Smart Contract Api ( eth Credentials ). val Token Instance (). send () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtransfer Val E rc 2 0 ( ĊĠĠĠĠĠĠĠ Ġto : ĠString , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceipt Ġ= Ġcontract Api Provider . get E rc 2 0 Contract Api ( eth Credentials , Ġtoken Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transfer Val ( to , Ġether Wei Converter . from Ether To Wei ( amount )). send () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Price Ġ= Ġcontract Api Provider . get Gas Price () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Limit Ġ= Ġcontract Api Provider . get Gas Limit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfee Ġ= Ġether Wei Converter . from Wei To Ether ( gas Limit Ġ* Ġgas Price ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdb . transaction Dao (). insert ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠS ora Exception . unexpected Error ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Val E rc 2 0 And Eth Balance ( ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġeth Wallet Address : ĠString , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġget Val E rc 2 0 Balance Remote ( eth Credentials , Ġeth Wallet Address , Ġtoken Address ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġget E thereum Balance Remote ( eth Credentials ) ĊĠĠĠĠĠĠĠ Ġmutable ListOf ( a , Ġb ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . run In Transaction Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġdb . asset Dao (). update Balance ( it . asset Id , Ġit . balance ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Val E rc 2 0 Balance Remote ( ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġeth Wallet Address : ĠString , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ): ĠAsset Balance Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcontract Api Provider . get E rc 2 0 Contract Api ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeth Credentials , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Address ĊĠĠĠĠĠĠĠ Ġ). val Balance ( eth Wallet Address ). send () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from Wei To Ether ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠAsset Balance ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget E thereum Balance Remote ( eth Credentials : ĠEthereum Credentials ): ĠAsset Balance Ġ{ ĊĠĠĠĠĠĠĠ Ġe thereum Credentials Mapper . getAddress ( eth Credentials . privateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb 3 j Provider . web 3 j . eth Get Balance ( it , ĠDefault Block ParameterName . LATE ST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send (). balance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from Wei To Ether ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠAsset Balance ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal . ZERO , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Gas Price ( gas Price In G wei : ĠBigInteger ): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġset Gas Price Remote ( gas Price In G wei ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Gas Limit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from G wei To Wei ( gas Price In G wei ) Ġ* Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from Wei To Ether ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Gas Price Remote ( gas Price In G wei : ĠBigInteger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgas Price Ġ= Ġether Wei Converter . from G wei To Wei ( gas Price In G wei ) ĊĠĠĠĠĠĠĠ Ġcontract Api Provider . set Gas Price ( gas Price ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Gas Limit ( gas Limit : ĠBigInteger ): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġset Gas Limit Remote ( gas Limit ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Gas Price () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġgas Limit Ġ* Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from Wei To Ether ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Gas Price (): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontract Api Provider . get Gas Price () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Gas Limit (): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontract Api Provider . get Gas Limit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Gas Limit Remote ( gas Limit : ĠBigInteger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontract Api Provider . set Gas Limit ( gas Limit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Val E rc 2 0 Transfer Fee (): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Val E rc 2 0 Fee ( Contracts Api Provider . DEFAULT _ G AS _ LIMIT _ TRANSFER . to BigInteger ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Val E rc 2 0 Withdraw Fee (): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Val E rc 2 0 Fee ( Contracts Api Provider . DEFAULT _ G AS _ LIMIT _ WITH DRAW . to BigInteger ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Val E rc 2 0 Combined Fee (): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Val E rc 2 0 Fee ( Contracts Api Provider . DEFAULT _ G AS _ LIMIT _ WITH DRAW . to BigInteger () Ġ+ ĠContract s Api Provider . DEFAULT _ G AS _ LIMIT _ TRANSFER . to BigInteger ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Val E rc 2 0 Fee ( gas Limit : ĠBigInteger ): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontract Api Provider . set Gas Limit ( gas Limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġcontract Api Provider . fetch Gas Price () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from Wei To G wei ( it ) Ġ* Ġgas Limit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġether Wei Converter . from G wei To Ether ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Eth Wallet Address ( eth Credentials : ĠEthereum Credentials ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġe thereum Credentials Mapper . getAddress ( eth Credentials . privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Serialized Proof ( eth Credentials : ĠEthereum Credentials ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġeth Credentials . privateKey ĊĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= Ġe thereum Credentials Mapper . get PublicKey ( privateKey ) ĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġe thereum Credentials Mapper . getAddress ( privateKey ) ĊĠĠĠĠĠĠĠ Ġval Ġdata To Sign Ġ= Ġprepare DataTo Sign ( address ) ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġsign ( data To Sign , ĠprivateKey ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproof Ġ= ĠE th PublicKey With Proof ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK ecc ak Proof ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . v . toString ( charset (" UTF - 1 6 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHex . to HexString ( signature . r ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHex . to HexString ( signature . s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġserializer . serialize ( proof ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign ( message : ĠByteArray , ĠprivateKey : ĠBigInteger ): ĠSign . Signature Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġec KeyPair Ġ= Ġe thereum Credentials Mapper . get Credentials ( privateKey ). ec KeyPair ĊĠĠĠĠĠĠĠ Ġreturn ĠSign . sign Message ( message , Ġec KeyPair ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare DataTo Sign ( data : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdat Ġ= ĠNumeric . hex StringTo ByteArray ( data ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ(" \ u 0 0 1 9 E thereum ĠSigned ĠMessage :\ n " Ġ+ Ġ( dat . size )). toByteArray () Ġ+ Ġdat ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Eth Credentials ( mn emonic : ĠString ): ĠEthereum Credentials Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġeth DataSource . retrieve E thereum Credentials () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( credentials Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeth Credentials Ġ= Ġgenerate Eth Credentials ( mn emonic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeth DataSource . save E thereum Credentials ( eth Credentials ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġeth Credentials ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Eth Credentials ( mn emonic : ĠString ): ĠEthereum Credentials Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġseed Ġ= Ġweb 3 j B ip 3 2 Crypto . generate Seed From Mnemonic ( mn emonic ) ĊĠĠĠĠĠĠĠ Ġval Ġmaster KeyPair Ġ= Ġweb 3 j B ip 3 2 Crypto . generate E CM aster KeyPair ( seed ) ĊĠĠĠĠĠĠĠ Ġval Ġb ip 4 4 Key pair Ġ= Ġweb 3 j B ip 3 2 Crypto . derive EC KeyPair From Master ( master KeyPair ) ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġe thereum Credentials Mapper . get Credentials From EC KeyPair ( bip 4 4 Key pair ) ĊĠĠĠĠĠĠĠ Ġreturn ĠEthereum Credentials ( credentials . ec KeyPair . privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Withdraw ( ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġsrc AccountId : ĠString , ĊĠĠĠĠĠĠĠ Ġeth Address : ĠString , ĊĠĠĠĠĠĠĠ Ġtransaction Fee : ĠString , ĊĠĠĠĠĠĠĠ Ġkey Pair : ĠKey Pair ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Combined Val E rc Transfer ( ĊĠĠĠĠĠĠĠ Ġpartial Amount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġsrc AccountId : ĠString , ĊĠĠĠĠĠĠĠ Ġwithdraw Eth Address : ĠString , ĊĠĠĠĠĠĠĠ Ġtransfer Eth Address : ĠString , ĊĠĠĠĠĠĠĠ Ġtransaction Fee : ĠString , ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġkey Pair : ĠKey Pair ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Combined Val Transfer ( ĊĠĠĠĠĠĠĠ Ġpartial Amount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġtransfer AccountId : ĠString , ĊĠĠĠĠĠĠĠ Ġtransfer Name : ĠString , ĊĠĠĠĠĠĠĠ Ġtransaction Fee : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġkey Pair : ĠKey Pair , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Eth Registration State (): ĠE th Register State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġeth DataSource . get Eth Register State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregistration Started ( operation Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeth Register State Ġ= ĠE th Register State ( Eth Register State . State . IN _ PROGRESS , Ġoperation Id ) ĊĠĠĠĠĠĠĠ Ġeth DataSource . save Eth Register State ( eth Register State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregistration Completed ( operation Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeth Register State Ġ= ĠE th Register State ( Eth Register State . State . REGISTER ED , Ġoperation Id ) ĊĠĠĠĠĠĠĠ Ġeth DataSource . save Eth Register State ( eth Register State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregistration Failed ( operation Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeth Register State Ġ= ĠE th Register State ( Eth Register State . State . FAILED , Ġoperation Id ) ĊĠĠĠĠĠĠĠ Ġeth DataSource . save Eth Register State ( eth Register State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfirm Withdraw ( ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġtx Hash : ĠString , ĊĠĠĠĠĠĠĠ ĠaccountId : ĠString , ĊĠĠĠĠĠĠĠ Ġgas Price : ĠBigInteger , ĊĠĠĠĠĠĠĠ Ġgas Limit : ĠBigInteger , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmint Tokens By Peers ( ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġtx Hash : ĠString , ĊĠĠĠĠĠĠĠ Ġbene ficiary : ĠString , ĊĠĠĠĠĠĠĠ Ġv : ĠList < BigInteger >, ĊĠĠĠĠĠĠĠ Ġr : ĠList < ByteArray >, ĊĠĠĠĠĠĠĠ Ġs : ĠList < ByteArray >, ĊĠĠĠĠĠĠĠ Ġfrom : ĠString , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtx Hash Bytes Ġ= ĠHex . decode ( tx Hash ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontract Api Provider . get Smart Contract Api ( eth Credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mint Tokens By Peers ( amount , Ġbene ficiary , Ġtx Hash Bytes , Ġv , Ġr , Ġs , Ġfrom , Ġtoken Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. send () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . transaction Hash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Eth Register State (): ĠFlow < Eth Register State . State > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġeth DataSource . observe Eth Register State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Gas Est im ations ( ĊĠĠĠĠĠĠĠ Ġgas Limit : ĠBigInteger , ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials ĊĠĠĠ Ġ): ĠG as Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Gas Price () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġgas Price Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġestim ations Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Slow Est im ations ( gas Limit , Ġgas Price ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Regular Est im ations ( gas Limit , Ġgas Price ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Fast Est im ations ( gas Limit , Ġgas Price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgas Price In G wei Ġ= Ġether Wei Converter . from Wei To G wei ( gas Price ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gas Price In G wei Ġ== ĠBigInteger . ZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgas Price In G wei Ġ= ĠBigInteger . ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG as ( gas Price In G wei , Ġgas Limit , Ġestim ations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Slow Est im ations ( gas Limit : ĠBigInteger , Ġgas Price : ĠBigInteger ): ĠG as Estimation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġgas Limit Ġ- ĠBigInteger . TEN ĊĠĠĠĠĠĠĠ Ġval Ġg wei Price Ġ= Ġether Wei Converter . from Wei To G wei ( gas Price ) ĊĠĠĠĠĠĠĠ Ġval Ġamount With Price Ġ= Ġamount Ġ* Ġg wei Price ĊĠĠĠĠĠĠĠ Ġval Ġamount In Eth Ġ= Ġether Wei Converter . from G wei To Ether ( amount With Price ) ĊĠĠĠĠĠĠĠ Ġreturn ĠG as Estimation ( Gas Estimation . Type . S LOW , Ġamount , Ġamount In Eth , Ġ 6 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Regular Est im ations ( gas Limit : ĠBigInteger , Ġgas Price : ĠBigInteger ): ĠG as Estimation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġg wei Price Ġ= Ġether Wei Converter . from Wei To G wei ( gas Price ) ĊĠĠĠĠĠĠĠ Ġval Ġamount With Price Ġ= Ġgas Limit Ġ* Ġg wei Price ĊĠĠĠĠĠĠĠ Ġval Ġamount In Eth Ġ= Ġether Wei Converter . from G wei To Ether ( amount With Price ) ĊĠĠĠĠĠĠĠ Ġreturn ĠG as Estimation ( Gas Estimation . Type . REG ULAR , Ġgas Limit , Ġamount In Eth , Ġ 9 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Fast Est im ations ( gas Limit : ĠBigInteger , Ġgas Price : ĠBigInteger ): ĠG as Estimation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġgas Limit Ġ+ ĠBigInteger . TEN ĊĠĠĠĠĠĠĠ Ġval Ġg wei Price Ġ= Ġether Wei Converter . from Wei To G wei ( gas Price ) ĊĠĠĠĠĠĠĠ Ġval Ġamount With Price Ġ= Ġamount Ġ* Ġg wei Price ĊĠĠĠĠĠĠĠ Ġval Ġamount In Eth Ġ= Ġether Wei Converter . from G wei To Ether ( amount With Price ) ĊĠĠĠĠĠĠĠ Ġreturn ĠG as Estimation ( Gas Estimation . Type . FAST , Ġamount , Ġamount In Eth , Ġ 2 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Block Chain Explorer Url ( transaction Hash : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Actual Eth Register State (): ĠE th Register State . State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠE th Register State . State . NONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Bridge Enabled ( eth Credentials : ĠEthereum Credentials ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġcontract Api Provider . get Smart Contract Api ( eth Credentials ). proof (). send () ĊĠĠĠĠĠĠĠ Ġreturn Ġ! EMPTY _ PRO OF _ HASH . content Equals ( hash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Combined Withdraw Transaction ( ĊĠĠĠĠĠĠĠ Ġeth Address : ĠString , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġeth Credentials : ĠEthereum Credentials , ĊĠĠĠĠĠĠĠ Ġtoken Address : ĠString ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġether Wei Converter . from Ether To Wei ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract Api Provider . get E rc 2 0 Contract Api ( eth Credentials , Ġtoken Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transfer Val ( eth Address , Ġit ). send () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. transaction Hash ĊĠĠĠ Ġ} Ċ } Ċ