@typeberry/jam 0.3.1 → 0.4.0-203a18d

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.
@@ -7100,11 +7100,9 @@ function sequenceViewFixLen(type, { fixedLength }) {
7100
7100
 
7101
7101
  /** Helper function to create most used hashes in the block */
7102
7102
  class TransitionHasher {
7103
- context;
7104
7103
  keccakHasher;
7105
7104
  blake2b;
7106
- constructor(context, keccakHasher, blake2b) {
7107
- this.context = context;
7105
+ constructor(keccakHasher, blake2b) {
7108
7106
  this.keccakHasher = keccakHasher;
7109
7107
  this.blake2b = blake2b;
7110
7108
  }
@@ -20816,13 +20814,11 @@ class AccumulateDataItem {
20816
20814
  * - gas cost and reports length for each service (statistics)
20817
20815
  */
20818
20816
  class AccumulateData {
20819
- autoAccumulateServicesByServiceId;
20820
20817
  reportsDataByServiceId;
20821
20818
  transfersByServiceId;
20822
20819
  serviceIds;
20823
20820
  gasLimitByServiceId;
20824
20821
  constructor(reports, transfers, autoAccumulateServicesByServiceId) {
20825
- this.autoAccumulateServicesByServiceId = autoAccumulateServicesByServiceId;
20826
20822
  const serviceIdsFromAutoAccumulate = new Set(autoAccumulateServicesByServiceId.keys());
20827
20823
  const { reportsDataByServiceId, serviceIds: serviceIdsFromReports, gasLimitByServiceId: reportsGasLimitByServiceId, } = this.transformReports(reports);
20828
20824
  this.reportsDataByServiceId = reportsDataByServiceId;
@@ -21142,12 +21138,12 @@ function createMergeContext(chainSpec, state, inputState, results) {
21142
21138
  }
21143
21139
  function updatePrivilegedService(currentServiceId, serviceIdUpdatedByManager, selfUpdatedServiceId) {
21144
21140
  if (currentServiceId === serviceIdUpdatedByManager) {
21145
- return serviceIdUpdatedByManager;
21141
+ return selfUpdatedServiceId;
21146
21142
  }
21147
- return selfUpdatedServiceId;
21143
+ return serviceIdUpdatedByManager;
21148
21144
  }
21149
21145
  function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
21150
- const { outputState, currentPrivilegedServices, chainSpec } = mergeContext;
21146
+ const { outputState, currentPrivilegedServices, chainSpec, privilegedServicesUpdatedByManager } = mergeContext;
21151
21147
  const currentManager = currentPrivilegedServices.manager;
21152
21148
  const currentRegistrar = currentPrivilegedServices.registrar;
21153
21149
  const currentDelegator = currentPrivilegedServices.delegator;
@@ -21165,28 +21161,35 @@ function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
21165
21161
  });
21166
21162
  }
21167
21163
  if (serviceId === currentRegistrar) {
21168
- const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, outputState.privilegedServices.registrar, privilegedServices.registrar);
21164
+ const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, privilegedServicesUpdatedByManager.registrar, privilegedServices.registrar);
21169
21165
  outputState.privilegedServices = PrivilegedServices.create({
21170
21166
  ...outputState.privilegedServices,
21171
21167
  registrar: newRegistrar,
21172
21168
  });
21173
21169
  }
21174
21170
  if (serviceId === currentDelegator) {
21175
- const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, outputState.privilegedServices.delegator, privilegedServices.delegator);
21171
+ const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, privilegedServicesUpdatedByManager.delegator, privilegedServices.delegator);
21176
21172
  outputState.privilegedServices = PrivilegedServices.create({
21177
21173
  ...outputState.privilegedServices,
21178
21174
  delegator: newDelegator,
21179
21175
  });
21180
21176
  }
21181
- const assignersFromOutputState = outputState.privilegedServices;
21182
- const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => serviceId === currentAssigner
21183
- ? updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], assignersFromOutputState.assigners[coreIndex], privilegedServices.assigners[coreIndex])
21184
- : currentAssigner);
21185
- const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
21186
- outputState.privilegedServices = PrivilegedServices.create({
21187
- ...outputState.privilegedServices,
21188
- assigners: newAssignersPerCore,
21177
+ let shouldUpdateAssigners = false;
21178
+ const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => {
21179
+ if (serviceId === currentAssigner) {
21180
+ const newAssigner = updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], privilegedServicesUpdatedByManager.assigners[coreIndex], privilegedServices.assigners[coreIndex]);
21181
+ shouldUpdateAssigners = shouldUpdateAssigners || newAssigner !== currentAssigner;
21182
+ return newAssigner;
21183
+ }
21184
+ return currentAssigner;
21189
21185
  });
21186
+ if (shouldUpdateAssigners) {
21187
+ const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
21188
+ outputState.privilegedServices = PrivilegedServices.create({
21189
+ ...outputState.privilegedServices,
21190
+ assigners: newAssignersPerCore,
21191
+ });
21192
+ }
21190
21193
  }
21191
21194
  }
21192
21195
  function mergeValidatorsData(mergeContext, [serviceId, { stateUpdate }]) {
@@ -22968,19 +22971,19 @@ class Accumulate {
22968
22971
  for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
22969
22972
  const serviceId = serviceIds[serviceIndex];
22970
22973
  const checkpoint = AccumulationStateUpdate.copyFrom(inputStateUpdate);
22971
- const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => ({
22972
- consumedGas,
22973
- stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
22974
- }));
22974
+ const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => {
22975
+ const resultEntry = [
22976
+ serviceId,
22977
+ {
22978
+ consumedGas,
22979
+ stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
22980
+ },
22981
+ ];
22982
+ return resultEntry;
22983
+ });
22975
22984
  resultPromises[serviceIndex] = promise;
22976
22985
  }
22977
- return Promise.all(resultPromises).then((results) => {
22978
- const map = new Map();
22979
- for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
22980
- map.set(serviceIds[serviceIndex], results[serviceIndex]);
22981
- }
22982
- return map;
22983
- });
22986
+ return Promise.all(resultPromises).then((results) => new Map(results));
22984
22987
  }
22985
22988
  /**
22986
22989
  * A method that updates `recentlyAccumulated`, `accumulationQueue` and `timeslot` in state
@@ -23069,9 +23072,10 @@ class Accumulate {
23069
23072
  const _gasCost = gasCost;
23070
23073
  assertEmpty(rest);
23071
23074
  const accumulated = accumulatableReports.subview(0, accumulatedReports);
23072
- const { yieldedRoot, services, transfers: _transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
23075
+ const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
23073
23076
  assertEmpty(stateUpdateRest);
23074
- // yielded root is retrieved after each pvm invocation so we can ignore it here
23077
+ // transfers and yielded root are retrieved after each pvm invocation so we can ignore it here
23078
+ const _transfers = transfers;
23075
23079
  const _yieldedRoot = yieldedRoot;
23076
23080
  if (this.hasDuplicatedServiceIdCreated(services.created)) {
23077
23081
  accumulate_logger.trace `Duplicated Service creation detected. Block is invalid.`;
@@ -25002,7 +25006,7 @@ async function createImporter(config) {
25002
25006
  const interpreter = config.workerParams.pvm;
25003
25007
  const blocks = db.getBlocksDb();
25004
25008
  const states = db.getStatesDb();
25005
- const hasher = new TransitionHasher(chainSpec, await keccakHasher, await blake2b);
25009
+ const hasher = new TransitionHasher(await keccakHasher, await blake2b);
25006
25010
  const importer = new Importer(chainSpec, interpreter, hasher, main_logger, blocks, states);
25007
25011
  return {
25008
25012
  importer,