@typeberry/jam 0.4.0-4809f38 → 0.4.0-d185014

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.
package/index.js CHANGED
@@ -31185,7 +31185,7 @@ function jip_chain_spec_parseBootnode(v) {
31185
31185
  if (name === "" || ip === "" || port === "") {
31186
31186
  throw new Error(`Invalid bootnode format, expected: <name>@<ip>:<port>, got: "${v}"`);
31187
31187
  }
31188
- const portNumber = Number.parseInt(port);
31188
+ const portNumber = Number.parseInt(port, 10);
31189
31189
  if (!isU16(portNumber)) {
31190
31190
  throw new Error(`Invalid port number: "${port}"`);
31191
31191
  }
@@ -37588,11 +37588,9 @@ class JamConfig {
37588
37588
 
37589
37589
  /** Helper function to create most used hashes in the block */
37590
37590
  class hasher_TransitionHasher {
37591
- context;
37592
37591
  keccakHasher;
37593
37592
  blake2b;
37594
- constructor(context, keccakHasher, blake2b) {
37595
- this.context = context;
37593
+ constructor(keccakHasher, blake2b) {
37596
37594
  this.keccakHasher = keccakHasher;
37597
37595
  this.blake2b = blake2b;
37598
37596
  }
@@ -45578,13 +45576,11 @@ class AccumulateDataItem {
45578
45576
  * - gas cost and reports length for each service (statistics)
45579
45577
  */
45580
45578
  class AccumulateData {
45581
- autoAccumulateServicesByServiceId;
45582
45579
  reportsDataByServiceId;
45583
45580
  transfersByServiceId;
45584
45581
  serviceIds;
45585
45582
  gasLimitByServiceId;
45586
45583
  constructor(reports, transfers, autoAccumulateServicesByServiceId) {
45587
- this.autoAccumulateServicesByServiceId = autoAccumulateServicesByServiceId;
45588
45584
  const serviceIdsFromAutoAccumulate = new Set(autoAccumulateServicesByServiceId.keys());
45589
45585
  const { reportsDataByServiceId, serviceIds: serviceIdsFromReports, gasLimitByServiceId: reportsGasLimitByServiceId, } = this.transformReports(reports);
45590
45586
  this.reportsDataByServiceId = reportsDataByServiceId;
@@ -45904,12 +45900,12 @@ function createMergeContext(chainSpec, state, inputState, results) {
45904
45900
  }
45905
45901
  function updatePrivilegedService(currentServiceId, serviceIdUpdatedByManager, selfUpdatedServiceId) {
45906
45902
  if (currentServiceId === serviceIdUpdatedByManager) {
45907
- return serviceIdUpdatedByManager;
45903
+ return selfUpdatedServiceId;
45908
45904
  }
45909
- return selfUpdatedServiceId;
45905
+ return serviceIdUpdatedByManager;
45910
45906
  }
45911
45907
  function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
45912
- const { outputState, currentPrivilegedServices, chainSpec } = mergeContext;
45908
+ const { outputState, currentPrivilegedServices, chainSpec, privilegedServicesUpdatedByManager } = mergeContext;
45913
45909
  const currentManager = currentPrivilegedServices.manager;
45914
45910
  const currentRegistrar = currentPrivilegedServices.registrar;
45915
45911
  const currentDelegator = currentPrivilegedServices.delegator;
@@ -45927,28 +45923,35 @@ function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
45927
45923
  });
45928
45924
  }
45929
45925
  if (serviceId === currentRegistrar) {
45930
- const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, outputState.privilegedServices.registrar, privilegedServices.registrar);
45926
+ const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, privilegedServicesUpdatedByManager.registrar, privilegedServices.registrar);
45931
45927
  outputState.privilegedServices = PrivilegedServices.create({
45932
45928
  ...outputState.privilegedServices,
45933
45929
  registrar: newRegistrar,
45934
45930
  });
45935
45931
  }
45936
45932
  if (serviceId === currentDelegator) {
45937
- const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, outputState.privilegedServices.delegator, privilegedServices.delegator);
45933
+ const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, privilegedServicesUpdatedByManager.delegator, privilegedServices.delegator);
45938
45934
  outputState.privilegedServices = PrivilegedServices.create({
45939
45935
  ...outputState.privilegedServices,
45940
45936
  delegator: newDelegator,
45941
45937
  });
45942
45938
  }
45943
- const assignersFromOutputState = outputState.privilegedServices;
45944
- const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => serviceId === currentAssigner
45945
- ? updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], assignersFromOutputState.assigners[coreIndex], privilegedServices.assigners[coreIndex])
45946
- : currentAssigner);
45947
- const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
45948
- outputState.privilegedServices = PrivilegedServices.create({
45949
- ...outputState.privilegedServices,
45950
- assigners: newAssignersPerCore,
45939
+ let shouldUpdateAssigners = false;
45940
+ const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => {
45941
+ if (serviceId === currentAssigner) {
45942
+ const newAssigner = updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], privilegedServicesUpdatedByManager.assigners[coreIndex], privilegedServices.assigners[coreIndex]);
45943
+ shouldUpdateAssigners = shouldUpdateAssigners || newAssigner !== currentAssigner;
45944
+ return newAssigner;
45945
+ }
45946
+ return currentAssigner;
45951
45947
  });
45948
+ if (shouldUpdateAssigners) {
45949
+ const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
45950
+ outputState.privilegedServices = PrivilegedServices.create({
45951
+ ...outputState.privilegedServices,
45952
+ assigners: newAssignersPerCore,
45953
+ });
45954
+ }
45952
45955
  }
45953
45956
  }
45954
45957
  function mergeValidatorsData(mergeContext, [serviceId, { stateUpdate }]) {
@@ -47730,19 +47733,19 @@ class Accumulate {
47730
47733
  for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
47731
47734
  const serviceId = serviceIds[serviceIndex];
47732
47735
  const checkpoint = AccumulationStateUpdate.copyFrom(inputStateUpdate);
47733
- const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => ({
47734
- consumedGas,
47735
- stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
47736
- }));
47736
+ const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => {
47737
+ const resultEntry = [
47738
+ serviceId,
47739
+ {
47740
+ consumedGas,
47741
+ stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
47742
+ },
47743
+ ];
47744
+ return resultEntry;
47745
+ });
47737
47746
  resultPromises[serviceIndex] = promise;
47738
47747
  }
47739
- return Promise.all(resultPromises).then((results) => {
47740
- const map = new Map();
47741
- for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
47742
- map.set(serviceIds[serviceIndex], results[serviceIndex]);
47743
- }
47744
- return map;
47745
- });
47748
+ return Promise.all(resultPromises).then((results) => new Map(results));
47746
47749
  }
47747
47750
  /**
47748
47751
  * A method that updates `recentlyAccumulated`, `accumulationQueue` and `timeslot` in state
@@ -47831,9 +47834,10 @@ class Accumulate {
47831
47834
  const _gasCost = gasCost;
47832
47835
  assertEmpty(rest);
47833
47836
  const accumulated = accumulatableReports.subview(0, accumulatedReports);
47834
- const { yieldedRoot, services, transfers: _transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
47837
+ const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
47835
47838
  assertEmpty(stateUpdateRest);
47836
- // yielded root is retrieved after each pvm invocation so we can ignore it here
47839
+ // transfers and yielded root are retrieved after each pvm invocation so we can ignore it here
47840
+ const _transfers = transfers;
47837
47841
  const _yieldedRoot = yieldedRoot;
47838
47842
  if (this.hasDuplicatedServiceIdCreated(services.created)) {
47839
47843
  accumulate_logger.trace `Duplicated Service creation detected. Block is invalid.`;
@@ -49764,7 +49768,7 @@ async function createImporter(config) {
49764
49768
  const interpreter = config.workerParams.pvm;
49765
49769
  const blocks = db.getBlocksDb();
49766
49770
  const states = db.getStatesDb();
49767
- const hasher = new hasher_TransitionHasher(chainSpec, await keccakHasher, await blake2b);
49771
+ const hasher = new hasher_TransitionHasher(await keccakHasher, await blake2b);
49768
49772
  const importer = new Importer(chainSpec, interpreter, hasher, main_logger, blocks, states);
49769
49773
  return {
49770
49774
  importer,
@@ -52488,7 +52492,7 @@ class generator_Generator {
52488
52492
  // select validator for block
52489
52493
  const validatorId = tryAsValidatorIndex(newTimeSlot % 6);
52490
52494
  // retriev data from previous block
52491
- const hasher = new TransitionHasher(this.chainSpec, this.keccakHasher, this.blake2b);
52495
+ const hasher = new TransitionHasher(this.keccakHasher, this.blake2b);
52492
52496
  const parentHeaderHash = this.lastHeaderHash;
52493
52497
  const stateRoot = this.states.getStateRoot(this.lastState);
52494
52498
  // create extrinsic