@leofcoin/chain 1.7.128 → 1.7.129

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.
@@ -4876,17 +4876,11 @@ class State extends Contract {
4876
4876
  let block = await globalThis.peernet.get(hash, 'block');
4877
4877
  if (block !== undefined) {
4878
4878
  block = await new BlockMessage(block);
4879
- const computedHash = await block.hash();
4880
- if (computedHash !== hash) {
4881
- throw new ResolveError(`block hash mismatch for ${hash}`, {
4882
- cause: new Error('hash does not match payload')
4883
- });
4884
- }
4885
4879
  const { index } = block.decoded;
4886
- if (this.#blocks[index] && this.#blocks[index].hash !== computedHash)
4887
- throw new ResolveError(`invalid block ${computedHash} @${index}`);
4888
- if (!(await globalThis.peernet.has(computedHash)))
4889
- await globalThis.peernet.put(computedHash, block.encoded, 'block');
4880
+ if (this.#blocks[index] && this.#blocks[index].hash !== block.hash)
4881
+ throw `invalid block ${hash} @${index}`;
4882
+ if (!(await globalThis.peernet.has(hash)))
4883
+ await globalThis.peernet.put(hash, block.encoded, 'block');
4890
4884
  }
4891
4885
  return block;
4892
4886
  }
@@ -5131,39 +5125,30 @@ class State extends Contract {
5131
5125
  }
5132
5126
  // @ts-ignore
5133
5127
  promises = await this.promiseRequests(promises);
5134
- const candidates = promises.sort((a, b) => b.value.index - a.value.index);
5135
- for (const { value, peer } of candidates) {
5136
- if (!value?.hash || value.hash === '0x0')
5137
- continue;
5138
- try {
5139
- let message = await globalThis.peernet.get(value.hash, 'block');
5140
- message = await new BlockMessage(message);
5141
- const hash = await message.hash();
5142
- if (hash !== value.hash) {
5143
- throw new Error(`invalid block hash for candidate ${value.hash}`);
5144
- }
5145
- const latest = { ...message.decoded, hash };
5146
- if (peer?.connected && peer.version === this.version) {
5147
- let data = await new globalThis.peernet.protos['peernet-request']({
5148
- request: 'knownBlocks'
5149
- });
5150
- let node = await globalThis.peernet.prepareMessage(data);
5151
- let response = await peer.request(node.encode());
5152
- response = await new globalThis.peernet.protos['peernet-response'](response);
5153
- this.knownBlocks = response.decoded.response;
5154
- }
5155
- return latest;
5156
- }
5157
- catch (error) {
5158
- console.warn('[state] ignoring invalid lastBlock candidate', {
5159
- error,
5160
- hash: value?.hash,
5161
- index: value?.index
5128
+ console.log({ promises });
5129
+ let latest = { index: 0, hash: '0x0', previousHash: '0x0' };
5130
+ promises = promises.sort((a, b) => b.index - a.index);
5131
+ if (promises.length > 0)
5132
+ latest = promises[0].value;
5133
+ if (latest.hash && latest.hash !== '0x0') {
5134
+ let message = await globalThis.peernet.get(latest.hash, 'block');
5135
+ message = await new BlockMessage(message);
5136
+ const hash = await message.hash();
5137
+ if (hash !== latest.hash)
5138
+ throw new Error('invalid block @getLatestBlock');
5139
+ latest = { ...message.decoded, hash };
5140
+ const peer = promises[0].peer;
5141
+ if (peer.connected && peer.version === this.version) {
5142
+ let data = await new globalThis.peernet.protos['peernet-request']({
5143
+ request: 'knownBlocks'
5162
5144
  });
5163
- continue;
5145
+ let node = await globalThis.peernet.prepareMessage(data);
5146
+ let message = await peer.request(node.encode());
5147
+ message = await new globalThis.peernet.protos['peernet-response'](message);
5148
+ this.knownBlocks = message.decoded.response;
5164
5149
  }
5165
5150
  }
5166
- return { index: 0, hash: '0x0', previousHash: '0x0' };
5151
+ return latest;
5167
5152
  }
5168
5153
  #loadBlockTransactions;
5169
5154
  #getLastTransactions;
package/exports/chain.js CHANGED
@@ -1003,17 +1003,11 @@ class State extends Contract {
1003
1003
  let block = await globalThis.peernet.get(hash, 'block');
1004
1004
  if (block !== undefined) {
1005
1005
  block = await new BlockMessage(block);
1006
- const computedHash = await block.hash();
1007
- if (computedHash !== hash) {
1008
- throw new ResolveError(`block hash mismatch for ${hash}`, {
1009
- cause: new Error('hash does not match payload')
1010
- });
1011
- }
1012
1006
  const { index } = block.decoded;
1013
- if (this.#blocks[index] && this.#blocks[index].hash !== computedHash)
1014
- throw new ResolveError(`invalid block ${computedHash} @${index}`);
1015
- if (!(await globalThis.peernet.has(computedHash)))
1016
- await globalThis.peernet.put(computedHash, block.encoded, 'block');
1007
+ if (this.#blocks[index] && this.#blocks[index].hash !== block.hash)
1008
+ throw `invalid block ${hash} @${index}`;
1009
+ if (!(await globalThis.peernet.has(hash)))
1010
+ await globalThis.peernet.put(hash, block.encoded, 'block');
1017
1011
  }
1018
1012
  return block;
1019
1013
  }
@@ -1258,39 +1252,30 @@ class State extends Contract {
1258
1252
  }
1259
1253
  // @ts-ignore
1260
1254
  promises = await this.promiseRequests(promises);
1261
- const candidates = promises.sort((a, b) => b.value.index - a.value.index);
1262
- for (const { value, peer } of candidates) {
1263
- if (!value?.hash || value.hash === '0x0')
1264
- continue;
1265
- try {
1266
- let message = await globalThis.peernet.get(value.hash, 'block');
1267
- message = await new BlockMessage(message);
1268
- const hash = await message.hash();
1269
- if (hash !== value.hash) {
1270
- throw new Error(`invalid block hash for candidate ${value.hash}`);
1271
- }
1272
- const latest = { ...message.decoded, hash };
1273
- if (peer?.connected && peer.version === this.version) {
1274
- let data = await new globalThis.peernet.protos['peernet-request']({
1275
- request: 'knownBlocks'
1276
- });
1277
- let node = await globalThis.peernet.prepareMessage(data);
1278
- let response = await peer.request(node.encode());
1279
- response = await new globalThis.peernet.protos['peernet-response'](response);
1280
- this.knownBlocks = response.decoded.response;
1281
- }
1282
- return latest;
1283
- }
1284
- catch (error) {
1285
- console.warn('[state] ignoring invalid lastBlock candidate', {
1286
- error,
1287
- hash: value?.hash,
1288
- index: value?.index
1255
+ console.log({ promises });
1256
+ let latest = { index: 0, hash: '0x0', previousHash: '0x0' };
1257
+ promises = promises.sort((a, b) => b.index - a.index);
1258
+ if (promises.length > 0)
1259
+ latest = promises[0].value;
1260
+ if (latest.hash && latest.hash !== '0x0') {
1261
+ let message = await globalThis.peernet.get(latest.hash, 'block');
1262
+ message = await new BlockMessage(message);
1263
+ const hash = await message.hash();
1264
+ if (hash !== latest.hash)
1265
+ throw new Error('invalid block @getLatestBlock');
1266
+ latest = { ...message.decoded, hash };
1267
+ const peer = promises[0].peer;
1268
+ if (peer.connected && peer.version === this.version) {
1269
+ let data = await new globalThis.peernet.protos['peernet-request']({
1270
+ request: 'knownBlocks'
1289
1271
  });
1290
- continue;
1272
+ let node = await globalThis.peernet.prepareMessage(data);
1273
+ let message = await peer.request(node.encode());
1274
+ message = await new globalThis.peernet.protos['peernet-response'](message);
1275
+ this.knownBlocks = message.decoded.response;
1291
1276
  }
1292
1277
  }
1293
- return { index: 0, hash: '0x0', previousHash: '0x0' };
1278
+ return latest;
1294
1279
  }
1295
1280
  #loadBlockTransactions;
1296
1281
  #getLastTransactions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/chain",
3
- "version": "1.7.128",
3
+ "version": "1.7.129",
4
4
  "description": "Official javascript implementation",
5
5
  "private": false,
6
6
  "exports": {