UNPKG

2.7 kBJavaScriptView Raw
1"use strict";
2require("source-map-support/register");
3const 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 // Treat an error as if the block didn't exist. This is because
62 // some clients respond differently.
63 const block = result;
64 if (err || block == null) {
65 return resolve(false);
66 }
67 resolve(true);
68 });
69 });
70 });
71 }
72};
73module.exports = Blockchain;
74//# sourceMappingURL=index.js.map
\No newline at end of file