package Ġio . nod le . substr ates dk . rpc Ċ Ċ import Ġio . nod le . substr ates dk . account . Account Ċ import Ġio . nod le . substr ates dk . scale . read Metadata Ċ import Ġio . nod le . substr ates dk . types . Call NotFoundException Ċ import Ġio . nod le . substr ates dk . types . Runtime Metadata Ċ import Ġio . nod le . substr ates dk . types . Transfer Call Ċ import Ġio . nod le . substr ates dk . types . find Call Ċ import Ġio . nod le . substr ates dk . utils . hex To Ba Ċ import Ġio . nod le . substr ates dk . utils . on Debug Only Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġorg . json . JSONObject Ċ import Ġjava . math . BigInteger Ċ import Ġjava . nio . ByteBuffer Ċ Ċ /** Ċ Ġ* Ġ@ author ĠLuc ien ĠLo ise au Ġon Ġ 2 9 / 0 7 / 2 0 . Ċ Ġ*/ Ċ class ĠSub strate Provider ( var arg Ġsubstr ate Rpc Url : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġrpc Ġ= ĠSub strate Rpc ( substr ate Rpc Url ) ĊĊĠĠĠ Ġvar Ġgenesis Hash : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmetadata : ĠRuntime Metadata ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġruntime Version : ĠJSONObject ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Genesis Hash (): ĠSingle < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( genesis Hash Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( genesis Hash ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrpc . send < String >( Chain Get Block Hash ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . remove Prefix (" 0 x ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġgenesis Hash Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġget Metadata (): ĠSingle < Runtime Metadata > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( metadata Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( metadata ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrpc . send < String >( State Get Metadata ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . hex To Ba () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠByteBuffer . wrap ( it ). read Metadata () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġmetadata Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġtransfer Call ( dest Account : ĠAccount , Ġamount : ĠBigInteger ): ĠSingle < Transfer Call > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getMetadata (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġit . find Call (" Balances ", Ġ" transfer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠCall NotFoundException (" Balance Ġtransfer Ġcall Ġis Ġnot Ġsupported Ġon Ġthis Ġblockchain ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransfer Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . module Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . call Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Runtime Version (): ĠSingle < JSONObject > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( runtime Version Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( runtime Version ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrpc . send < JSONObject >( State Get Runtime Version ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġruntime Version Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Spec Version (): ĠSingle < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . get Runtime Version (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getLong (" spec Version ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Transaction Version (): ĠSingle < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . get Runtime Version (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getLong (" transaction Version ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }