1- import type { Provider , Callback , JsonRPCResponse } from "web3/providers" ;
1+ import type {
2+ Block ,
3+ HexString ,
4+ Web3BaseProvider as Provider ,
5+ Web3ProviderRequestCallback as Callback
6+ } from "web3-types" ;
27import type { parsedUriObject } from "typings" ;
38
4- const Blockchain = {
9+ type BlockChainType = {
510 getBlockByNumber (
611 blockNumber : string ,
712 provider : Provider ,
8- callback : Callback < JsonRPCResponse >
13+ callback : Callback < Block >
14+ ) : void ;
15+ getBlockByHash (
16+ blockHash : string ,
17+ provider : Provider ,
18+ callback : Callback < Block >
19+ ) : void ;
20+ parse ( uri : string ) : parsedUriObject ;
21+ asURI ( provider : Provider ) : Promise < unknown > ;
22+ matches ( uri : string , provider : Provider ) : Promise < unknown > ;
23+ } ;
24+
25+ const Blockchain : BlockChainType = {
26+ getBlockByNumber (
27+ blockNumber : string ,
28+ provider : Provider ,
29+ callback : Callback < Block >
930 ) {
10- const params = [ blockNumber , true ] ;
31+ const params : [ string , boolean ] = [ blockNumber , true ] ;
1132 provider . send (
1233 {
1334 jsonrpc : "2.0" ,
@@ -22,9 +43,9 @@ const Blockchain = {
2243 getBlockByHash (
2344 blockHash : string ,
2445 provider : Provider ,
25- callback : Callback < JsonRPCResponse >
46+ callback : Callback < Block >
2647 ) {
27- const params = [ blockHash , true ] ;
48+ const params : [ string , boolean ] = [ blockHash , true ] ;
2849 provider . send (
2950 {
3051 jsonrpc : "2.0" ,
@@ -50,66 +71,53 @@ const Blockchain = {
5071 return parsed ;
5172 } ,
5273
53- asURI ( provider : Provider ) {
74+ asURI ( this : BlockChainType , provider : Provider ) {
5475 return new Promise ( ( resolve , reject ) => {
5576 let genesis : any , latest ;
5677
57- this . getBlockByNumber (
58- "0x0" ,
59- provider ,
60- ( err : Error , { result } : JsonRPCResponse ) => {
78+ this . getBlockByNumber ( "0x0" , provider , ( err : Error , { result } ) => {
79+ if ( err ) return reject ( err ) ;
80+ genesis = result ;
81+
82+ this . getBlockByNumber ( "latest" , provider , ( err : Error , { result } ) => {
6183 if ( err ) return reject ( err ) ;
62- genesis = result ;
63-
64- this . getBlockByNumber (
65- "latest" ,
66- provider ,
67- ( err : Error , { result } : JsonRPCResponse ) => {
68- if ( err ) return reject ( err ) ;
69- latest = result ;
70- const url = `blockchain://${ genesis . hash . replace (
71- "0x" ,
72- ""
73- ) } /block/${ latest . hash . replace ( "0x" , "" ) } `;
74- resolve ( url ) ;
75- }
76- ) ;
77- }
78- ) ;
84+ latest = result ;
85+ const url = `blockchain://${ genesis . hash . replace ( "0x" , "" ) } /block/${ (
86+ latest . hash as HexString
87+ ) . replace ( "0x" , "" ) } `;
88+ resolve ( url ) ;
89+ } ) ;
90+ } ) ;
7991 } ) ;
8092 } ,
8193
82- matches ( uri : string , provider : Provider ) {
94+ matches ( this : BlockChainType , uri : string , provider : Provider ) {
8395 return new Promise ( ( resolve , reject ) => {
8496 const parsedUri = this . parse ( uri ) ;
8597
8698 const expectedGenesis = parsedUri . genesis_hash ;
8799 const expectedBlock = parsedUri . block_hash ;
88100
89- this . getBlockByNumber (
90- "0x0" ,
91- provider ,
92- ( err : Error , { result } : JsonRPCResponse ) => {
93- if ( err ) return reject ( err ) ;
94- const block = result ;
95- if ( block . hash !== expectedGenesis ) return resolve ( false ) ;
96-
97- this . getBlockByHash (
98- expectedBlock ,
99- provider ,
100- ( err : Error , { result } : JsonRPCResponse ) => {
101- // Treat an error as if the block didn't exist. This is because
102- // some clients respond differently.
103- const block = result ;
104- if ( err || block == null ) {
105- return resolve ( false ) ;
106- }
107-
108- resolve ( true ) ;
101+ this . getBlockByNumber ( "0x0" , provider , ( err : Error , { result } ) => {
102+ if ( err ) return reject ( err ) ;
103+ const block = result ;
104+ if ( block . hash !== expectedGenesis ) return resolve ( false ) ;
105+
106+ this . getBlockByHash (
107+ expectedBlock ,
108+ provider ,
109+ ( err : Error , { result } ) => {
110+ // Treat an error as if the block didn't exist. This is because
111+ // some clients respond differently.
112+ const block = result ;
113+ if ( err || block == null ) {
114+ return resolve ( false ) ;
109115 }
110- ) ;
111- }
112- ) ;
116+
117+ resolve ( true ) ;
118+ }
119+ ) ;
120+ } ) ;
113121 } ) ;
114122 }
115123} ;
0 commit comments