@leofcoin/chain 1.4.46 → 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;
@@ -8064,7 +8060,23 @@ class Chain extends Contract {
8064
8060
  }
8065
8061
  return latest;
8066
8062
  }
8063
+ async #clearPool() {
8064
+ await globalThis.transactionPoolStore.clear();
8065
+ }
8067
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
+ }
8079
+ await this.#clearPool();
8068
8080
  // this.node = await new Node()
8069
8081
  this.#participants = [];
8070
8082
  this.#participating = false;
@@ -8081,6 +8093,7 @@ class Chain extends Contract {
8081
8093
  // globalThis.peernet.protos['peernet-response']({response: node.encoded})
8082
8094
  // })
8083
8095
  await globalThis.peernet.addRequestHandler('transactionPool', this.#transactionPoolHandler.bind(this));
8096
+ await globalThis.peernet.addRequestHandler('version', this.#versionHandler.bind(this));
8084
8097
  await globalThis.peernet.addRequestHandler('lastBlock', this.#lastBlockHandler.bind(this));
8085
8098
  await globalThis.peernet.addRequestHandler('knownBlocks', this.#knownBlocksHandler.bind(this));
8086
8099
  globalThis.peernet.subscribe('add-block', this.#addBlock.bind(this));
@@ -8190,6 +8203,8 @@ class Chain extends Contract {
8190
8203
  return response.decoded.response;
8191
8204
  }
8192
8205
  async #peerConnected(peer) {
8206
+ if (!peer.version || peer.version !== this.version)
8207
+ return;
8193
8208
  const lastBlock = await this.#makeRequest(peer, 'lastBlock');
8194
8209
  this.#knownBlocks = await this.#makeRequest(peer, 'knownBlocks');
8195
8210
  let pool = await this.#makeRequest(peer, 'transactionPool');
@@ -8214,6 +8229,9 @@ class Chain extends Contract {
8214
8229
  const pool = await globalThis.transactionPoolStore.keys();
8215
8230
  return new globalThis.peernet.protos['peernet-response']({ response: pool });
8216
8231
  }
8232
+ async #versionHandler() {
8233
+ return new globalThis.peernet.protos['peernet-response']({ response: { version: this.version } });
8234
+ }
8217
8235
  async #lastBlockHandler() {
8218
8236
  return new globalThis.peernet.protos['peernet-response']({ response: { hash: this.#lastBlock?.hash, index: this.#lastBlock?.index } });
8219
8237
  }
@@ -8465,7 +8483,7 @@ class Chain extends Contract {
8465
8483
  for (const validator of Object.keys(validators)) {
8466
8484
  if (validators[validator].active) {
8467
8485
  const peer = peers[validator];
8468
- if (peer && peer.connected) {
8486
+ if (peer && peer.connected && peer.version === this.version) {
8469
8487
  let data = await new BWRequestMessage();
8470
8488
  const node = await globalThis.peernet.prepareMessage(validator, data.encoded);
8471
8489
  try {
@@ -1,4 +1,4 @@
1
- import { c as commonjsGlobal, g as getDefaultExportFromCjs } from './node-browser-5de1f022.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-5de1f022.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-5de1f022.js';
1
+ import { F as FormatInterface } from './node-browser-8791470c.js';
2
2
  import './contract-f76383c3.js';
3
3
 
4
4
  var proto$b = {
@@ -6286,8 +6286,7 @@ const lastFetched = {
6286
6286
  const fetchedCoordinates = {};
6287
6287
  const getAddress = async () => {
6288
6288
  const { address } = lastFetched;
6289
- const now = Math.round(new Date().getTime() / 1000);
6290
- if (now - address.timestamp > 1200000) {
6289
+ if (address) {
6291
6290
  address.value = await fetch('https://icanhazip.com/');
6292
6291
  address.value = await address.value.text();
6293
6292
  address.timestamp = Math.round(new Date().getTime() / 1000);
@@ -20268,7 +20267,7 @@ class Identity {
20268
20267
  globalThis.peernet.selectedAccount = new TextDecoder().decode(selected);
20269
20268
  }
20270
20269
  else {
20271
- const importee = await import(/* webpackChunkName: "generate-account" */ './index-e407f1a3-a07c9df0.js');
20270
+ const importee = await import(/* webpackChunkName: "generate-account" */ './index-5ed49438-539fe0fa.js');
20272
20271
  const { identity, accounts } = await importee.default(password, this.network);
20273
20272
  await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
20274
20273
  await globalThis.walletStore.put('version', String(1));
@@ -20333,6 +20332,7 @@ class Peernet {
20333
20332
  #starting = false;
20334
20333
  #started = false;
20335
20334
  #connections = {};
20335
+ requestProtos = {};
20336
20336
  /**
20337
20337
  * @access public
20338
20338
  * @param {Object} options
@@ -20434,12 +20434,11 @@ class Peernet {
20434
20434
  * @return {Promise} instance of Peernet
20435
20435
  */
20436
20436
  async _init(options, password) {
20437
- this.requestProtos = {};
20438
20437
  this.storePrefix = options.storePrefix;
20439
20438
  this.root = options.root;
20440
20439
  const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
20441
20440
  // FolderMessageResponse
20442
- } = await import(/* webpackChunkName: "messages" */ './messages-2465e07d-6cd91c3d.js');
20441
+ } = await import(/* webpackChunkName: "messages" */ './messages-c26f8e97-a3403983.js');
20443
20442
  /**
20444
20443
  * proto Object containing protos
20445
20444
  * @type {Object}
@@ -20478,6 +20477,13 @@ class Peernet {
20478
20477
  });
20479
20478
  pubsub.subscribe('peer:discovered', async (peer) => {
20480
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
+ }
20481
20487
  let data = await new globalThis.peernet.protos['peernet-request']({ request: 'handshake' });
20482
20488
  let node = await globalThis.peernet.prepareMessage(data);
20483
20489
  let response = await peer.request(node.encoded);
@@ -20511,7 +20517,7 @@ class Peernet {
20511
20517
  if (this.#starting || this.#started)
20512
20518
  return;
20513
20519
  this.#starting = true;
20514
- const importee = await import('./client-31b62450-447815f7.js');
20520
+ const importee = await import('./client-345f1d43-a7ba559a.js');
20515
20521
  /**
20516
20522
  * @access public
20517
20523
  * @type {PeernetClient}
@@ -20696,7 +20702,7 @@ class Peernet {
20696
20702
  throw nothingFoundError(hash);
20697
20703
  debug(`found ${providers.size} provider(s) for ${hash}`);
20698
20704
  // get closest peer on earth
20699
- const closestPeer = await this.dht.closestPeer(providers);
20705
+ const closestPeer = Array.from(providers)[0];
20700
20706
  // get peer instance by id
20701
20707
  if (!closestPeer || !closestPeer.id)
20702
20708
  return this.requestData(hash, store?.name || store);
@@ -1,2 +1,2 @@
1
- export { N as default } from './node-browser-5de1f022.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;
@@ -659,7 +655,23 @@ class Chain extends Contract {
659
655
  }
660
656
  return latest;
661
657
  }
658
+ async #clearPool() {
659
+ await globalThis.transactionPoolStore.clear();
660
+ }
662
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
+ }
674
+ await this.#clearPool();
663
675
  // this.node = await new Node()
664
676
  this.#participants = [];
665
677
  this.#participating = false;
@@ -676,6 +688,7 @@ class Chain extends Contract {
676
688
  // globalThis.peernet.protos['peernet-response']({response: node.encoded})
677
689
  // })
678
690
  await globalThis.peernet.addRequestHandler('transactionPool', this.#transactionPoolHandler.bind(this));
691
+ await globalThis.peernet.addRequestHandler('version', this.#versionHandler.bind(this));
679
692
  await globalThis.peernet.addRequestHandler('lastBlock', this.#lastBlockHandler.bind(this));
680
693
  await globalThis.peernet.addRequestHandler('knownBlocks', this.#knownBlocksHandler.bind(this));
681
694
  globalThis.peernet.subscribe('add-block', this.#addBlock.bind(this));
@@ -785,6 +798,8 @@ class Chain extends Contract {
785
798
  return response.decoded.response;
786
799
  }
787
800
  async #peerConnected(peer) {
801
+ if (!peer.version || peer.version !== this.version)
802
+ return;
788
803
  const lastBlock = await this.#makeRequest(peer, 'lastBlock');
789
804
  this.#knownBlocks = await this.#makeRequest(peer, 'knownBlocks');
790
805
  let pool = await this.#makeRequest(peer, 'transactionPool');
@@ -809,6 +824,9 @@ class Chain extends Contract {
809
824
  const pool = await globalThis.transactionPoolStore.keys();
810
825
  return new globalThis.peernet.protos['peernet-response']({ response: pool });
811
826
  }
827
+ async #versionHandler() {
828
+ return new globalThis.peernet.protos['peernet-response']({ response: { version: this.version } });
829
+ }
812
830
  async #lastBlockHandler() {
813
831
  return new globalThis.peernet.protos['peernet-response']({ response: { hash: this.#lastBlock?.hash, index: this.#lastBlock?.index } });
814
832
  }
@@ -1060,7 +1078,7 @@ class Chain extends Contract {
1060
1078
  for (const validator of Object.keys(validators)) {
1061
1079
  if (validators[validator].active) {
1062
1080
  const peer = peers[validator];
1063
- if (peer && peer.connected) {
1081
+ if (peer && peer.connected && peer.version === this.version) {
1064
1082
  let data = await new BWRequestMessage();
1065
1083
  const node = await globalThis.peernet.prepareMessage(validator, data.encoded);
1066
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.46",
3
+ "version": "1.4.48",
4
4
  "description": "Official javascript implementation",
5
5
  "exports": {
6
6
  "./node": "./exports/node.js",