@leofcoin/chain 1.4.47 → 1.4.48

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.
@@ -7860,6 +7860,7 @@ class Contract extends Transaction {
7860
7860
  globalThis.BigNumber = BigNumber;
7861
7861
  // check if browser or local
7862
7862
  class Chain extends Contract {
7863
+ version;
7863
7864
  #state;
7864
7865
  #lastResolved;
7865
7866
  #slotTime = 10000;
@@ -8024,7 +8025,7 @@ class Chain extends Contract {
8024
8025
  let data = await new globalThis.peernet.protos['peernet-request']({ request: 'lastBlock' });
8025
8026
  let node = await globalThis.peernet.prepareMessage(data);
8026
8027
  for (const peer of globalThis.peernet?.connections) {
8027
- if (peer.connected) {
8028
+ if (peer.connected && peer.version === this.version) {
8028
8029
  promises.push(async () => {
8029
8030
  try {
8030
8031
  const result = await peer.request(node.encoded);
@@ -8035,11 +8036,6 @@ class Chain extends Contract {
8035
8036
  }
8036
8037
  });
8037
8038
  }
8038
- else if (!peer.connected) {
8039
- globalThis.peernet.removePeer(peer);
8040
- // todo: remove peer
8041
- // reinitiate channel?
8042
- }
8043
8039
  }
8044
8040
  promises = await this.promiseRequests(promises);
8045
8041
  let latest = { index: 0, hash: '0x0', previousHash: '0x0' };
@@ -8056,7 +8052,7 @@ class Chain extends Contract {
8056
8052
  let node = await globalThis.peernet.prepareMessage(data);
8057
8053
  const peer = promises[0].peer;
8058
8054
  latest = { ...message.decoded, hash };
8059
- if (peer.connected && peer.readyState === 'open' && peer.peerId !== this.id) {
8055
+ if (peer.connected && peer.version === this.version) {
8060
8056
  let message = await peer.request(node);
8061
8057
  message = await new globalThis.peernet.protos['peernet-response'](message);
8062
8058
  this.#knownBlocks = message.decoded.response;
@@ -8068,6 +8064,18 @@ class Chain extends Contract {
8068
8064
  await globalThis.transactionPoolStore.clear();
8069
8065
  }
8070
8066
  async #init() {
8067
+ try {
8068
+ const version = await globalThis.chainStore.get('version');
8069
+ this.version = version;
8070
+ // if (version)
8071
+ }
8072
+ catch {
8073
+ this.version = '1.0.0';
8074
+ await globalThis.chainStore.clear();
8075
+ await globalThis.blockStore.clear();
8076
+ await globalThis.transactionPoolStore.clear();
8077
+ await globalThis.chainStore.put('version', this.version);
8078
+ }
8071
8079
  await this.#clearPool();
8072
8080
  // this.node = await new Node()
8073
8081
  this.#participants = [];
@@ -8085,6 +8093,7 @@ class Chain extends Contract {
8085
8093
  // globalThis.peernet.protos['peernet-response']({response: node.encoded})
8086
8094
  // })
8087
8095
  await globalThis.peernet.addRequestHandler('transactionPool', this.#transactionPoolHandler.bind(this));
8096
+ await globalThis.peernet.addRequestHandler('version', this.#versionHandler.bind(this));
8088
8097
  await globalThis.peernet.addRequestHandler('lastBlock', this.#lastBlockHandler.bind(this));
8089
8098
  await globalThis.peernet.addRequestHandler('knownBlocks', this.#knownBlocksHandler.bind(this));
8090
8099
  globalThis.peernet.subscribe('add-block', this.#addBlock.bind(this));
@@ -8194,6 +8203,8 @@ class Chain extends Contract {
8194
8203
  return response.decoded.response;
8195
8204
  }
8196
8205
  async #peerConnected(peer) {
8206
+ if (!peer.version || peer.version !== this.version)
8207
+ return;
8197
8208
  const lastBlock = await this.#makeRequest(peer, 'lastBlock');
8198
8209
  this.#knownBlocks = await this.#makeRequest(peer, 'knownBlocks');
8199
8210
  let pool = await this.#makeRequest(peer, 'transactionPool');
@@ -8218,6 +8229,9 @@ class Chain extends Contract {
8218
8229
  const pool = await globalThis.transactionPoolStore.keys();
8219
8230
  return new globalThis.peernet.protos['peernet-response']({ response: pool });
8220
8231
  }
8232
+ async #versionHandler() {
8233
+ return new globalThis.peernet.protos['peernet-response']({ response: { version: this.version } });
8234
+ }
8221
8235
  async #lastBlockHandler() {
8222
8236
  return new globalThis.peernet.protos['peernet-response']({ response: { hash: this.#lastBlock?.hash, index: this.#lastBlock?.index } });
8223
8237
  }
@@ -8469,7 +8483,7 @@ class Chain extends Contract {
8469
8483
  for (const validator of Object.keys(validators)) {
8470
8484
  if (validators[validator].active) {
8471
8485
  const peer = peers[validator];
8472
- if (peer && peer.connected) {
8486
+ if (peer && peer.connected && peer.version === this.version) {
8473
8487
  let data = await new BWRequestMessage();
8474
8488
  const node = await globalThis.peernet.prepareMessage(validator, data.encoded);
8475
8489
  try {
@@ -1,4 +1,4 @@
1
- import { c as commonjsGlobal, g as getDefaultExportFromCjs } from './node-browser-b64e2ed2.js';
1
+ import { c as commonjsGlobal, g as getDefaultExportFromCjs } from './node-browser-8791470c.js';
2
2
  import './contract-f76383c3.js';
3
3
 
4
4
  function commonjsRequire(path) {
@@ -1,4 +1,4 @@
1
- import { M as MultiWallet, e as encrypt, b as base58$1 } from './node-browser-b64e2ed2.js';
1
+ import { M as MultiWallet, e as encrypt, b as base58$1 } from './node-browser-8791470c.js';
2
2
  import './contract-f76383c3.js';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { F as FormatInterface } from './node-browser-b64e2ed2.js';
1
+ import { F as FormatInterface } from './node-browser-8791470c.js';
2
2
  import './contract-f76383c3.js';
3
3
 
4
4
  var proto$b = {
@@ -20267,7 +20267,7 @@ class Identity {
20267
20267
  globalThis.peernet.selectedAccount = new TextDecoder().decode(selected);
20268
20268
  }
20269
20269
  else {
20270
- const importee = await import(/* webpackChunkName: "generate-account" */ './index-116df6d1-d144f080.js');
20270
+ const importee = await import(/* webpackChunkName: "generate-account" */ './index-5ed49438-539fe0fa.js');
20271
20271
  const { identity, accounts } = await importee.default(password, this.network);
20272
20272
  await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
20273
20273
  await globalThis.walletStore.put('version', String(1));
@@ -20332,6 +20332,7 @@ class Peernet {
20332
20332
  #starting = false;
20333
20333
  #started = false;
20334
20334
  #connections = {};
20335
+ requestProtos = {};
20335
20336
  /**
20336
20337
  * @access public
20337
20338
  * @param {Object} options
@@ -20433,12 +20434,11 @@ class Peernet {
20433
20434
  * @return {Promise} instance of Peernet
20434
20435
  */
20435
20436
  async _init(options, password) {
20436
- this.requestProtos = {};
20437
20437
  this.storePrefix = options.storePrefix;
20438
20438
  this.root = options.root;
20439
20439
  const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
20440
20440
  // FolderMessageResponse
20441
- } = await import(/* webpackChunkName: "messages" */ './messages-fab7583b-10480899.js');
20441
+ } = await import(/* webpackChunkName: "messages" */ './messages-c26f8e97-a3403983.js');
20442
20442
  /**
20443
20443
  * proto Object containing protos
20444
20444
  * @type {Object}
@@ -20477,6 +20477,13 @@ class Peernet {
20477
20477
  });
20478
20478
  pubsub.subscribe('peer:discovered', async (peer) => {
20479
20479
  // console.log(peer);
20480
+ if (this.requestProtos['version']) {
20481
+ let data = await new globalThis.peernet.protos['peernet-request']({ request: 'version' });
20482
+ let node = await globalThis.peernet.prepareMessage(data);
20483
+ let response = await peer.request(node.encoded);
20484
+ response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)));
20485
+ peer.version = response.decoded.response.version;
20486
+ }
20480
20487
  let data = await new globalThis.peernet.protos['peernet-request']({ request: 'handshake' });
20481
20488
  let node = await globalThis.peernet.prepareMessage(data);
20482
20489
  let response = await peer.request(node.encoded);
@@ -20510,7 +20517,7 @@ class Peernet {
20510
20517
  if (this.#starting || this.#started)
20511
20518
  return;
20512
20519
  this.#starting = true;
20513
- const importee = await import('./client-bdab491d-5e9615c3.js');
20520
+ const importee = await import('./client-345f1d43-a7ba559a.js');
20514
20521
  /**
20515
20522
  * @access public
20516
20523
  * @type {PeernetClient}
@@ -20695,7 +20702,7 @@ class Peernet {
20695
20702
  throw nothingFoundError(hash);
20696
20703
  debug(`found ${providers.size} provider(s) for ${hash}`);
20697
20704
  // get closest peer on earth
20698
- const closestPeer = await this.dht.closestPeer(providers);
20705
+ const closestPeer = Array.from(providers)[0];
20699
20706
  // get peer instance by id
20700
20707
  if (!closestPeer || !closestPeer.id)
20701
20708
  return this.requestData(hash, store?.name || store);
@@ -1,2 +1,2 @@
1
- export { N as default } from './node-browser-b64e2ed2.js';
1
+ export { N as default } from './node-browser-8791470c.js';
2
2
  import './contract-f76383c3.js';
package/exports/chain.js CHANGED
@@ -455,6 +455,7 @@ class Contract extends Transaction {
455
455
  globalThis.BigNumber = BigNumber;
456
456
  // check if browser or local
457
457
  class Chain extends Contract {
458
+ version;
458
459
  #state;
459
460
  #lastResolved;
460
461
  #slotTime = 10000;
@@ -619,7 +620,7 @@ class Chain extends Contract {
619
620
  let data = await new globalThis.peernet.protos['peernet-request']({ request: 'lastBlock' });
620
621
  let node = await globalThis.peernet.prepareMessage(data);
621
622
  for (const peer of globalThis.peernet?.connections) {
622
- if (peer.connected) {
623
+ if (peer.connected && peer.version === this.version) {
623
624
  promises.push(async () => {
624
625
  try {
625
626
  const result = await peer.request(node.encoded);
@@ -630,11 +631,6 @@ class Chain extends Contract {
630
631
  }
631
632
  });
632
633
  }
633
- else if (!peer.connected) {
634
- globalThis.peernet.removePeer(peer);
635
- // todo: remove peer
636
- // reinitiate channel?
637
- }
638
634
  }
639
635
  promises = await this.promiseRequests(promises);
640
636
  let latest = { index: 0, hash: '0x0', previousHash: '0x0' };
@@ -651,7 +647,7 @@ class Chain extends Contract {
651
647
  let node = await globalThis.peernet.prepareMessage(data);
652
648
  const peer = promises[0].peer;
653
649
  latest = { ...message.decoded, hash };
654
- if (peer.connected && peer.readyState === 'open' && peer.peerId !== this.id) {
650
+ if (peer.connected && peer.version === this.version) {
655
651
  let message = await peer.request(node);
656
652
  message = await new globalThis.peernet.protos['peernet-response'](message);
657
653
  this.#knownBlocks = message.decoded.response;
@@ -663,6 +659,18 @@ class Chain extends Contract {
663
659
  await globalThis.transactionPoolStore.clear();
664
660
  }
665
661
  async #init() {
662
+ try {
663
+ const version = await globalThis.chainStore.get('version');
664
+ this.version = version;
665
+ // if (version)
666
+ }
667
+ catch {
668
+ this.version = '1.0.0';
669
+ await globalThis.chainStore.clear();
670
+ await globalThis.blockStore.clear();
671
+ await globalThis.transactionPoolStore.clear();
672
+ await globalThis.chainStore.put('version', this.version);
673
+ }
666
674
  await this.#clearPool();
667
675
  // this.node = await new Node()
668
676
  this.#participants = [];
@@ -680,6 +688,7 @@ class Chain extends Contract {
680
688
  // globalThis.peernet.protos['peernet-response']({response: node.encoded})
681
689
  // })
682
690
  await globalThis.peernet.addRequestHandler('transactionPool', this.#transactionPoolHandler.bind(this));
691
+ await globalThis.peernet.addRequestHandler('version', this.#versionHandler.bind(this));
683
692
  await globalThis.peernet.addRequestHandler('lastBlock', this.#lastBlockHandler.bind(this));
684
693
  await globalThis.peernet.addRequestHandler('knownBlocks', this.#knownBlocksHandler.bind(this));
685
694
  globalThis.peernet.subscribe('add-block', this.#addBlock.bind(this));
@@ -789,6 +798,8 @@ class Chain extends Contract {
789
798
  return response.decoded.response;
790
799
  }
791
800
  async #peerConnected(peer) {
801
+ if (!peer.version || peer.version !== this.version)
802
+ return;
792
803
  const lastBlock = await this.#makeRequest(peer, 'lastBlock');
793
804
  this.#knownBlocks = await this.#makeRequest(peer, 'knownBlocks');
794
805
  let pool = await this.#makeRequest(peer, 'transactionPool');
@@ -813,6 +824,9 @@ class Chain extends Contract {
813
824
  const pool = await globalThis.transactionPoolStore.keys();
814
825
  return new globalThis.peernet.protos['peernet-response']({ response: pool });
815
826
  }
827
+ async #versionHandler() {
828
+ return new globalThis.peernet.protos['peernet-response']({ response: { version: this.version } });
829
+ }
816
830
  async #lastBlockHandler() {
817
831
  return new globalThis.peernet.protos['peernet-response']({ response: { hash: this.#lastBlock?.hash, index: this.#lastBlock?.index } });
818
832
  }
@@ -1064,7 +1078,7 @@ class Chain extends Contract {
1064
1078
  for (const validator of Object.keys(validators)) {
1065
1079
  if (validators[validator].active) {
1066
1080
  const peer = peers[validator];
1067
- if (peer && peer.connected) {
1081
+ if (peer && peer.connected && peer.version === this.version) {
1068
1082
  let data = await new BWRequestMessage();
1069
1083
  const node = await globalThis.peernet.prepareMessage(validator, data.encoded);
1070
1084
  try {
@@ -3,6 +3,7 @@ import Contract from './contract.js';
3
3
  import { BigNumberish } from '@ethersproject/bignumber';
4
4
  export default class Chain extends Contract {
5
5
  #private;
6
+ version: String;
6
7
  id: string;
7
8
  utils: {};
8
9
  constructor();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/chain",
3
- "version": "1.4.47",
3
+ "version": "1.4.48",
4
4
  "description": "Official javascript implementation",
5
5
  "exports": {
6
6
  "./node": "./exports/node.js",