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" ;
2
7
import type { parsedUriObject } from "typings" ;
3
8
4
- const Blockchain = {
9
+ type BlockChainType = {
5
10
getBlockByNumber (
6
11
blockNumber : string ,
7
12
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 >
9
30
) {
10
- const params = [ blockNumber , true ] ;
31
+ const params : [ string , boolean ] = [ blockNumber , true ] ;
11
32
provider . send (
12
33
{
13
34
jsonrpc : "2.0" ,
@@ -22,9 +43,9 @@ const Blockchain = {
22
43
getBlockByHash (
23
44
blockHash : string ,
24
45
provider : Provider ,
25
- callback : Callback < JsonRPCResponse >
46
+ callback : Callback < Block >
26
47
) {
27
- const params = [ blockHash , true ] ;
48
+ const params : [ string , boolean ] = [ blockHash , true ] ;
28
49
provider . send (
29
50
{
30
51
jsonrpc : "2.0" ,
@@ -50,66 +71,53 @@ const Blockchain = {
50
71
return parsed ;
51
72
} ,
52
73
53
- asURI ( provider : Provider ) {
74
+ asURI ( this : BlockChainType , provider : Provider ) {
54
75
return new Promise ( ( resolve , reject ) => {
55
76
let genesis : any , latest ;
56
77
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 } ) => {
61
83
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
+ } ) ;
79
91
} ) ;
80
92
} ,
81
93
82
- matches ( uri : string , provider : Provider ) {
94
+ matches ( this : BlockChainType , uri : string , provider : Provider ) {
83
95
return new Promise ( ( resolve , reject ) => {
84
96
const parsedUri = this . parse ( uri ) ;
85
97
86
98
const expectedGenesis = parsedUri . genesis_hash ;
87
99
const expectedBlock = parsedUri . block_hash ;
88
100
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 ) ;
109
115
}
110
- ) ;
111
- }
112
- ) ;
116
+
117
+ resolve ( true ) ;
118
+ }
119
+ ) ;
120
+ } ) ;
113
121
} ) ;
114
122
}
115
123
} ;
0 commit comments