@dashevo/dapi-client 0.24.0-dev.1 → 0.24.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,156 +12,120 @@ module.exports = {
12
12
  // that breaks test suite and application logic. Temporary solution is to hardcode
13
13
  // reliable DCG testnet masternodes to connect. Should be removed when PoSe is introduced.
14
14
  dapiAddressesWhiteList: [
15
- '52.11.85.154',
16
- '52.38.248.133',
17
- '34.212.231.240',
18
- '54.185.249.226',
19
- '34.215.57.86',
20
- '54.190.73.116',
21
- '34.214.2.219',
22
- '54.212.84.164',
23
- '35.164.96.124',
24
- '34.219.81.129',
25
- '34.221.42.205',
26
- '34.208.88.128',
27
- '54.189.162.193',
28
- '34.220.124.90',
29
- '54.201.242.241',
30
- '54.68.10.46',
31
- '34.210.81.39',
32
- '18.237.47.243',
33
- '54.187.229.6',
34
- '34.214.102.160',
35
- '34.219.93.145',
36
- '35.165.37.186',
37
- '54.202.157.120',
38
- '34.215.144.176',
39
- '52.13.119.69',
40
- '34.220.12.188',
41
- '18.237.5.33',
42
- '54.191.32.70',
43
- '54.213.219.155',
44
- '35.167.25.157',
45
- '54.213.89.75',
46
- '52.32.232.156',
47
- '34.212.226.44',
48
- '35.160.140.37',
49
- '52.11.133.244',
50
- '54.201.189.185',
51
- '34.216.200.22',
52
- '34.220.144.226',
53
- '34.216.195.19',
54
- '54.185.1.69',
55
- '35.166.29.155',
56
- '18.237.147.160',
57
- '34.220.228.214',
58
- '54.212.75.8',
59
- '35.163.152.74',
60
- '18.236.78.191',
61
- '54.148.106.179',
62
- '34.211.46.222',
63
- '35.160.13.25',
64
- '34.220.17.107',
65
- '34.212.65.137',
66
- '54.185.249.172',
67
- '54.70.65.199',
68
- '54.69.210.42',
69
- '18.236.160.247',
70
- '54.245.197.173',
71
- '54.187.11.213',
72
- '54.218.70.46',
73
- '35.165.207.13',
74
- '34.211.49.3',
75
- '34.219.36.94',
76
- '34.222.127.158',
77
- '34.222.242.228',
78
- '52.26.220.40',
79
- '52.36.244.225',
80
- '34.222.225.76',
81
- '18.236.169.114',
82
- '54.201.236.212',
83
- '54.203.241.214',
84
- '34.221.254.29',
85
- '54.187.50.120',
86
- '54.184.140.221',
87
- '34.215.192.133',
88
- '35.164.180.39',
89
- '54.184.183.20',
90
- '52.43.197.215',
91
- '54.201.42.245',
92
- '54.218.113.88',
93
- '54.244.141.192',
94
- '34.217.98.54',
95
- '34.222.168.33',
96
- '52.32.143.49',
97
- '54.187.224.80',
98
- '54.189.87.145',
99
- '52.39.164.105',
100
- '54.70.55.164',
101
- '54.214.68.206',
102
- '54.201.239.109',
103
- '34.215.146.162',
104
- '18.236.233.120',
105
- '54.190.217.178',
106
- '34.220.41.134',
107
- '34.212.178.215',
108
- '34.219.169.55',
109
- '54.218.251.43',
110
- '18.236.216.191',
111
- '54.188.17.60',
112
- '54.191.227.118',
113
- '34.213.5.102',
114
- '35.166.79.235',
115
- '54.71.107.225',
116
- '54.201.162.86',
117
- '52.34.141.75',
118
- '34.217.43.189',
119
- '52.38.77.105',
120
- '52.11.252.174',
121
- '54.191.221.246',
122
- '54.218.107.83',
123
- '54.212.18.218',
124
- '34.220.53.77',
125
- '54.244.41.15',
126
- '34.222.135.203',
127
- '54.191.110.152',
128
- '34.208.190.130',
129
- '34.222.6.55',
130
- '54.184.7.184',
131
- '52.12.47.86',
132
- '34.217.28.248',
133
- '54.149.252.146',
134
- '54.149.80.193',
135
- '34.215.55.0',
136
- '34.220.74.48',
137
- '34.209.124.112',
138
- '34.217.23.70',
139
- '34.222.102.137',
140
- '34.209.166.42',
141
- '18.236.128.49',
142
- '35.163.99.20',
143
- '34.215.67.224',
144
- '34.211.244.117',
145
- '18.236.199.232',
146
- '54.191.237.52',
147
- '34.223.226.224',
148
- '54.149.133.143',
149
- '52.41.198.242',
150
- '54.148.215.161',
151
- '54.188.193.70',
152
- '54.218.104.194',
153
- '34.209.73.208',
154
- '34.220.88.70',
155
- '52.40.101.104',
156
- '18.236.68.153',
157
- '34.218.76.179',
158
- '34.219.94.178',
159
- '54.218.127.128',
160
- '52.27.198.246',
161
- '18.237.204.153',
162
- '35.166.57.113',
163
- '54.191.15.3',
164
- '18.237.128.46',
15
+ '34.216.69.175',
16
+ '34.218.75.96',
17
+ '18.237.220.27',
18
+ '54.191.38.234',
19
+ '35.93.95.157',
20
+ '35.166.240.246',
21
+ '35.91.186.151',
22
+ '35.161.123.225',
23
+ '54.212.169.115',
24
+ '54.187.168.12',
25
+ '18.236.191.199',
26
+ '18.237.165.224',
27
+ '52.36.42.1',
28
+ '34.220.32.216',
29
+ '34.222.238.250',
30
+ '35.93.34.215',
31
+ '34.221.10.165',
32
+ '54.203.241.195',
33
+ '35.92.138.231',
34
+ '52.38.169.156',
35
+ '54.187.21.108',
36
+ '34.219.48.219',
37
+ '34.217.38.221',
38
+ '35.92.157.107',
39
+ '18.236.82.230',
40
+ '54.184.225.22',
41
+ '18.237.144.120',
42
+ '18.237.254.214',
43
+ '35.88.29.196',
44
+ '35.89.126.245',
45
+ '34.217.148.69',
46
+ '35.89.193.46',
47
+ '35.89.119.37',
48
+ '54.186.161.236',
49
+ '52.13.63.7',
50
+ '18.236.233.225',
51
+ '54.191.138.72',
52
+ '54.191.59.75',
53
+ '18.237.160.84',
54
+ '54.218.236.193',
55
+ '54.148.178.140',
56
+ '35.161.168.136',
57
+ '35.161.33.22',
58
+ '35.160.130.44',
59
+ '34.212.104.247',
60
+ '52.13.29.83',
61
+ '54.149.39.172',
62
+ '35.89.93.255',
63
+ '35.85.46.137',
64
+ '54.188.154.252',
65
+ '54.218.11.172',
66
+ '54.186.47.235',
67
+ '54.244.145.48',
68
+ '18.236.232.153',
69
+ '34.220.226.135',
70
+ '34.220.30.59',
71
+ '18.237.160.97',
72
+ '18.236.146.99',
73
+ '35.88.169.18',
74
+ '35.164.17.198',
75
+ '54.218.80.158',
76
+ '34.220.102.107',
77
+ '35.165.60.113',
78
+ '34.215.234.63',
79
+ '35.89.146.226',
80
+ '35.89.86.26',
81
+ '35.88.160.231',
82
+ '54.245.8.155',
83
+ '52.36.221.94',
84
+ '52.35.46.188',
85
+ '34.221.153.67',
86
+ '54.212.153.15',
87
+ '35.85.55.192',
88
+ '35.89.105.90',
89
+ '52.24.22.52',
90
+ '54.212.33.96',
91
+ '52.10.19.238',
92
+ '35.160.190.165',
93
+ '34.219.3.61',
94
+ '54.187.32.187',
95
+ '35.162.221.77',
96
+ '35.91.64.183',
97
+ '18.236.189.15',
98
+ '35.91.145.195',
99
+ '54.186.251.30',
100
+ '54.245.9.46',
101
+ '35.91.48.128',
102
+ '54.244.75.85',
103
+ '34.221.159.53',
104
+ '35.89.88.166',
105
+ '54.185.249.165',
106
+ '54.245.9.209',
107
+ '34.222.167.162',
108
+ '54.191.88.232',
109
+ '54.191.111.112',
110
+ '18.237.146.37',
111
+ '35.89.148.27',
112
+ '35.91.8.48',
113
+ '18.236.208.138',
114
+ '54.213.60.60',
115
+ '35.92.151.94',
116
+ '18.237.241.37',
117
+ '54.202.209.229',
118
+ '34.221.9.70',
119
+ '35.89.38.62',
120
+ '54.218.81.193',
121
+ '34.221.158.21',
122
+ '35.88.97.57',
123
+ '54.68.247.40',
124
+ '35.88.168.176',
125
+ '35.89.202.171',
126
+ '34.220.106.205',
127
+ '34.210.86.23',
128
+ '44.230.40.184',
165
129
  ],
166
130
  },
167
131
  evonet: {
@@ -20,4 +20,10 @@ afterEach(function afterEach() {
20
20
  this.sinon.restore();
21
21
  });
22
22
 
23
+ before(function before() {
24
+ if (!this.sinon) {
25
+ this.sinon = sinon.createSandbox();
26
+ }
27
+ });
28
+
23
29
  global.expect = expect;
@@ -1,10 +1,18 @@
1
1
  /**
2
- * @returns {{coreChainLockedHeight: number, height: number}}
2
+ * @returns {{
3
+ * coreChainLockedHeight: number,
4
+ * height: number,
5
+ * signature: Buffer,
6
+ * protocolVersion: number,
7
+ * timeMs: number,
8
+ * }}
3
9
  */
4
10
  function getMetadataFixture() {
5
11
  return {
6
12
  height: 10,
7
13
  coreChainLockedHeight: 42,
14
+ timeMs: new Date().getTime(),
15
+ protocolVersion: 1,
8
16
  };
9
17
  }
10
18
 
@@ -2,14 +2,15 @@
2
2
  * @returns {{
3
3
  * merkleProof: Buffer,
4
4
  * signature: Buffer,
5
- * signatureLLMQHash: Buffer
5
+ * quorumHash: Buffer
6
6
  * }}
7
7
  */
8
8
  function getProofFixture() {
9
9
  return {
10
- signatureLLMQHash: Buffer.from('AQEBAQEBAQEBAQEB', 'base64'),
10
+ quorumHash: Buffer.from('AQEBAQEBAQEBAQEB', 'base64'),
11
11
  signature: Buffer.from('AgICAgICAgICAgIC', 'base64'),
12
12
  merkleProof: Buffer.from('0100000001f0faf5f55674905a68eba1be2f946e667c1cb5010101', 'hex'),
13
+ round: 42,
13
14
  };
14
15
  }
15
16
 
@@ -0,0 +1,54 @@
1
+ const EventEmitter = require('events');
2
+
3
+ class BlockHeadersWithChainLocksStreamMock extends EventEmitter {
4
+ constructor(sinon) {
5
+ super();
6
+
7
+ sinon.spy(this, 'on');
8
+ sinon.spy(this, 'removeListener');
9
+ sinon.spy(this, 'emit');
10
+ sinon.spy(this, 'removeAllListeners');
11
+ sinon.spy(this, 'cancel');
12
+
13
+ this.errored = false;
14
+ }
15
+
16
+ cancel() {
17
+ if (!this.errored) {
18
+ const err = new Error('CANCELED_ON_CLIENT');
19
+ err.code = 1;
20
+ this.emit('error', err);
21
+ }
22
+ }
23
+
24
+ emit(event, data) {
25
+ if (event === 'error') {
26
+ this.errored = true;
27
+ }
28
+ super.emit(event, data);
29
+ }
30
+
31
+ /**
32
+ * @param headers {BlockHeader[]}
33
+ */
34
+ sendHeaders(headers) {
35
+ this.emit('data', {
36
+ getBlockHeaders: () => ({
37
+ getHeadersList() {
38
+ return headers.map((header) => header.toBuffer());
39
+ },
40
+ }),
41
+ });
42
+ }
43
+
44
+ errorHandler(e) {
45
+ this.emit('error', e);
46
+ }
47
+
48
+ end() {
49
+ this.emit('end');
50
+ this.removeAllListeners();
51
+ }
52
+ }
53
+
54
+ module.exports = BlockHeadersWithChainLocksStreamMock;
@@ -0,0 +1,55 @@
1
+ const X11 = require('wasm-x11-hash');
2
+ const { BlockHeader, configure } = require('@dashevo/dashcore-lib');
3
+ const { genesis } = require('@dashevo/dash-spv');
4
+
5
+ const getRoot = (network) => {
6
+ switch (network) {
7
+ case 'testnet':
8
+ return genesis.getTestnetGenesis();
9
+ case 'devnet':
10
+ return genesis.getDevnetGenesis();
11
+ case 'regtest':
12
+ return genesis.getRegtestGenesis();
13
+ default:
14
+ break;
15
+ }
16
+
17
+ return null;
18
+ };
19
+
20
+ const BLOCK_TIME = 2.5 * 60;
21
+
22
+ let x11;
23
+
24
+ const mockHeadersChain = async (network, length, root) => {
25
+ if (!x11) {
26
+ x11 = await X11();
27
+ // Configure Dashcore lib to operate with wasm x11
28
+ configure({
29
+ x11hash: x11,
30
+ });
31
+ }
32
+
33
+ const rootHeader = root || getRoot(network);
34
+
35
+ const chain = [rootHeader];
36
+
37
+ let prevHeader = rootHeader;
38
+ for (let i = 0; i < length - 1; i += 1) {
39
+ const header = new BlockHeader({
40
+ version: prevHeader.version,
41
+ prevHash: Buffer.from(prevHeader.hash, 'hex').reverse(),
42
+ merkleRoot: Buffer.alloc(32),
43
+ time: prevHeader.time + BLOCK_TIME,
44
+ bits: prevHeader.bits,
45
+ nonce: 3861367235,
46
+ });
47
+
48
+ chain.push(header);
49
+ prevHeader = header;
50
+ }
51
+
52
+ return chain;
53
+ };
54
+
55
+ module.exports = mockHeadersChain;
@@ -2,7 +2,7 @@ const cbor = require('cbor');
2
2
 
3
3
  const createConsensusError = require('@dashevo/dpp/lib/errors/consensus/createConsensusError');
4
4
  const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes');
5
- const { Metadata } = require('@grpc/grpc-js/build/src/metadata');
5
+ const { parseMetadata } = require('@dashevo/dapi-grpc');
6
6
 
7
7
  const NotFoundError = require('./errors/NotFoundError');
8
8
  const TimeoutError = require('./errors/TimeoutError');
@@ -50,15 +50,7 @@ function createGrpcTransportError(grpcError, dapiAddress) {
50
50
 
51
51
  const message = grpcError.details || grpcError.message;
52
52
 
53
- let metadata = {};
54
-
55
- if (grpcError.metadata) {
56
- // In cases of gRPC-Web client we get plain map instead of Metadata instance
57
- metadata = grpcError.metadata;
58
- if (grpcError.metadata instanceof Metadata) {
59
- metadata = grpcError.metadata.getMap();
60
- }
61
- }
53
+ const metadata = parseMetadata(grpcError.metadata) || {};
62
54
 
63
55
  // Error data
64
56
  const driveErrorData = metadata['drive-error-data-bin'];