@leofcoin/chain 1.8.7 → 1.8.9

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.
@@ -1,4 +1,4 @@
1
- import { t as toBase58, T as TransactionMessage, C as ContractMessage, R as RawTransactionMessage, B as BlockMessage, a as BWMessage, b as BWRequestMessage } from './index-DUfUgiQY.js';
1
+ import { t as toBase58, T as TransactionMessage, C as ContractMessage, R as RawTransactionMessage, B as BlockMessage, P as PROTOCOL_VERSION, a as REACHED_ONE_ZERO_ZERO, b as BWMessage, c as BWRequestMessage } from './constants-ByuwyBVy.js';
2
2
  import { log } from 'console';
3
3
  import { log as log$1 } from 'node:console';
4
4
 
@@ -1201,8 +1201,8 @@ function requireRe () {
1201
1201
 
1202
1202
  // ## Pre-release Version Identifier
1203
1203
  // A numeric identifier, or a non-numeric identifier.
1204
- // Non-numberic identifiers include numberic identifiers but can be longer.
1205
- // Therefore non-numberic identifiers must go first.
1204
+ // Non-numeric identifiers include numeric identifiers but can be longer.
1205
+ // Therefore non-numeric identifiers must go first.
1206
1206
 
1207
1207
  createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]
1208
1208
  }|${src[t.NUMERICIDENTIFIER]})`);
@@ -1898,7 +1898,7 @@ function requireDiff () {
1898
1898
  return prefix + 'patch'
1899
1899
  }
1900
1900
 
1901
- // high and low are preleases
1901
+ // high and low are prereleases
1902
1902
  return 'prerelease'
1903
1903
  };
1904
1904
 
@@ -3457,7 +3457,7 @@ function requireSubset () {
3457
3457
  // - If LT
3458
3458
  // - If LT.semver is greater than any < or <= comp in C, return false
3459
3459
  // - If LT is <=, and LT.semver does not satisfy every C, return false
3460
- // - If GT.semver has a prerelease, and not in prerelease mode
3460
+ // - If LT.semver has a prerelease, and not in prerelease mode
3461
3461
  // - If no C has a prerelease and the LT.semver tuple, return false
3462
3462
  // - Else return true
3463
3463
 
@@ -5270,14 +5270,20 @@ class State extends Contract {
5270
5270
  }
5271
5271
  try {
5272
5272
  const block = await this.getAndPutBlock(hash);
5273
- await Promise.all(block.decoded.transactions.map(async (hash) => {
5273
+ await Promise.all(block.decoded.transactions
5274
+ .filter((hash) => Boolean(hash))
5275
+ .map(async (hash) => {
5274
5276
  // should be in a transaction store already
5275
- if (!(await transactionStore.has(hash))) {
5277
+ const exists = await transactionStore.has(hash);
5278
+ if (!exists) {
5276
5279
  const data = await peernet.get(hash, 'transaction');
5280
+ if (!data)
5281
+ throw new Error(`missing transaction data for ${hash}`);
5277
5282
  await transactionStore.put(hash, data);
5278
5283
  }
5279
- ;
5280
- (await transactionPoolStore.has(hash)) && (await transactionPoolStore.delete(hash));
5284
+ const inPool = await transactionPoolStore.has(hash);
5285
+ if (inPool)
5286
+ await transactionPoolStore.delete(hash);
5281
5287
  }));
5282
5288
  index = block.decoded.index;
5283
5289
  const size = block.encoded.length > 0 ? block.encoded.length : block.encoded.byteLength;
@@ -5693,14 +5699,12 @@ class State extends Contract {
5693
5699
  }
5694
5700
  }
5695
5701
 
5696
- const currentVersion = '0.1.1';
5697
-
5698
5702
  class VersionControl extends State {
5699
5703
  constructor(config) {
5700
5704
  super(config);
5701
5705
  }
5702
- #currentVersion = currentVersion;
5703
- #reachedOneZeroZero = false;
5706
+ #currentVersion = PROTOCOL_VERSION;
5707
+ #reachedOneZeroZero = REACHED_ONE_ZERO_ZERO;
5704
5708
  async #setCurrentVersion() {
5705
5709
  this.version = this.#currentVersion;
5706
5710
  await globalThis.chainStore.put('version', this.version);
@@ -5709,8 +5713,10 @@ class VersionControl extends State {
5709
5713
  super.init && (await super.init());
5710
5714
  try {
5711
5715
  const version = await globalThis.chainStore.get('version');
5712
- this.version = new TextDecoder().decode(version);
5713
- console.log(this.version, this.#currentVersion);
5716
+ const storedVersion = new TextDecoder().decode(version);
5717
+ console.log(storedVersion, this.#currentVersion);
5718
+ // Always use current version, update store if different
5719
+ this.version = this.#currentVersion;
5714
5720
  /**
5715
5721
  * protocol version control!
5716
5722
  * Note that before v1.2.2 everything gets deleted because of big changes,
@@ -5726,12 +5732,13 @@ class VersionControl extends State {
5726
5732
  // if so, clear all data
5727
5733
  // once v1.0.0 is reached this will not run and we can remove this check once every node is above v1.0.0
5728
5734
  console.warn('the reachedZeroZero flag is set to false, this will clear all data on every start if above v1.0.0');
5729
- if (semver.compare(this.version, '1.0.0') === 1 && !this.#reachedOneZeroZero) {
5735
+ if (semver.compare(storedVersion, '1.0.0') === 1 && !this.#reachedOneZeroZero) {
5730
5736
  console.warn('clearing all data because we are below v1.0.0');
5731
5737
  await this.clearAll();
5732
5738
  }
5733
- if (semver.compare(this.#currentVersion, this.version) === 1) {
5734
- await this.#setCurrentVersion();
5739
+ if (storedVersion !== this.#currentVersion) {
5740
+ console.log(`Version mismatch: stored=${storedVersion}, current=${this.#currentVersion}. Updating...`);
5741
+ await globalThis.chainStore.put('version', this.version);
5735
5742
  }
5736
5743
  // if (version)
5737
5744
  }
@@ -5765,7 +5772,13 @@ class ConnectionMonitor {
5765
5772
  return Object.values(globalThis.peernet?.connections || {}).filter((peer) => peer.connected);
5766
5773
  }
5767
5774
  get compatiblePeers() {
5768
- return this.connectedPeers.filter((peer) => peer.version === this.#version);
5775
+ return this.connectedPeers.filter((peer) => {
5776
+ if (!peer.version || !this.#version)
5777
+ return false;
5778
+ const [peerMajor, peerMinor] = peer.version.split('.');
5779
+ const [localMajor, localMinor] = this.#version.split('.');
5780
+ return peerMajor === localMajor && peerMinor === localMinor;
5781
+ });
5769
5782
  }
5770
5783
  get disconnectedPeers() {
5771
5784
  return Object.values(globalThis.peernet?.connections || {}).filter((peer) => !peer.connected);
@@ -5983,7 +5996,7 @@ class ConnectionMonitor {
5983
5996
  const networkName = globalThis.peernet?.network;
5984
5997
  if (networkName && typeof networkName === 'string') {
5985
5998
  // Try to import network config
5986
- const { default: networks } = await import('./networks-BdMfU1ag.js');
5999
+ const { default: networks } = await import('./constants-ByuwyBVy.js').then(function (n) { return n.n; });
5987
6000
  const [mainKey, subKey] = networkName.split(':');
5988
6001
  const networkConfig = networks?.[mainKey]?.[subKey];
5989
6002
  if (networkConfig?.stars && Array.isArray(networkConfig.stars)) {
@@ -6291,11 +6304,17 @@ class Chain extends VersionControl {
6291
6304
  // todo handle version changes
6292
6305
  // for now just do nothing if version doesn't match
6293
6306
  debug(`peer connected with version ${peer.version}`);
6294
- if (peer.version !== this.version) {
6307
+ const compatibleVersion = () => {
6308
+ if (!peer.version || !this.version)
6309
+ return false;
6310
+ const [peerMajor, peerMinor] = peer.version.split('.');
6311
+ const [localMajor, localMinor] = this.version.split('.');
6312
+ return peerMajor === localMajor && peerMinor === localMinor;
6313
+ };
6314
+ if (!compatibleVersion()) {
6295
6315
  debug(`versions don't match`);
6296
- }
6297
- if (!peer.version || peer.version !== this.version)
6298
6316
  return;
6317
+ }
6299
6318
  const lastBlock = await this.#makeRequest(peer, 'lastBlock');
6300
6319
  const localBlock = await this.lastBlock;
6301
6320
  if (lastBlock.hash === '0x0')