1 | "use strict";
|
2 | require("source-map-support/register");
|
3 | const Blockchain = {
|
4 | getBlockByNumber(blockNumber, provider, callback) {
|
5 | const params = [blockNumber, true];
|
6 | provider.send({
|
7 | jsonrpc: "2.0",
|
8 | method: "eth_getBlockByNumber",
|
9 | params,
|
10 | id: Date.now()
|
11 | }, callback);
|
12 | },
|
13 | getBlockByHash(blockHash, provider, callback) {
|
14 | const params = [blockHash, true];
|
15 | provider.send({
|
16 | jsonrpc: "2.0",
|
17 | method: "eth_getBlockByHash",
|
18 | params,
|
19 | id: Date.now()
|
20 | }, callback);
|
21 | },
|
22 | parse(uri) {
|
23 | const parsed = {};
|
24 | if (uri.indexOf("blockchain://") !== 0)
|
25 | return parsed;
|
26 | const cleanUri = uri.replace("blockchain://", "");
|
27 | const pieces = cleanUri.split("/block/");
|
28 | parsed.genesis_hash = `0x${pieces[0]}`;
|
29 | parsed.block_hash = `0x${pieces[1]}`;
|
30 | return parsed;
|
31 | },
|
32 | asURI(provider) {
|
33 | return new Promise((resolve, reject) => {
|
34 | let genesis, latest;
|
35 | this.getBlockByNumber("0x0", provider, (err, { result }) => {
|
36 | if (err)
|
37 | return reject(err);
|
38 | genesis = result;
|
39 | this.getBlockByNumber("latest", provider, (err, { result }) => {
|
40 | if (err)
|
41 | return reject(err);
|
42 | latest = result;
|
43 | const url = `blockchain://${genesis.hash.replace("0x", "")}/block/${latest.hash.replace("0x", "")}`;
|
44 | resolve(url);
|
45 | });
|
46 | });
|
47 | });
|
48 | },
|
49 | matches(uri, provider) {
|
50 | return new Promise((resolve, reject) => {
|
51 | const parsedUri = this.parse(uri);
|
52 | const expected_genesis = parsedUri.genesis_hash;
|
53 | const expected_block = parsedUri.block_hash;
|
54 | this.getBlockByNumber("0x0", provider, (err, { result }) => {
|
55 | if (err)
|
56 | return reject(err);
|
57 | const block = result;
|
58 | if (block.hash !== expected_genesis)
|
59 | return resolve(false);
|
60 | this.getBlockByHash(expected_block, provider, (err, { result }) => {
|
61 |
|
62 |
|
63 | const block = result;
|
64 | if (err || block == null) {
|
65 | return resolve(false);
|
66 | }
|
67 | resolve(true);
|
68 | });
|
69 | });
|
70 | });
|
71 | }
|
72 | };
|
73 | module.exports = Blockchain;
|
74 |
|
\ | No newline at end of file |