@typeberry/jam 0.3.1-27dfdd9 → 0.4.0-13b653d

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.
@@ -3609,8 +3609,8 @@ class compatibility_Compatibility {
3609
3609
  /**
3610
3610
  * Allows selecting different values for different Gray Paper versions from one record.
3611
3611
  *
3612
- * @param fallback The default value to return if no value is found for the current.
3613
- * @param record A record mapping versions to values, checking if the version is greater or equal to the current version.
3612
+ * fallback The default value to return if no value is found for the current.
3613
+ * versions A record mapping versions to values, checking if the version is greater or equal to the current version.
3614
3614
  * @returns The value for the current version, or the default value.
3615
3615
  */
3616
3616
  static selectIfGreaterOrEqual({ fallback, versions, }) {
@@ -3773,7 +3773,7 @@ const workspacePathFix = dev_env.NODE_ENV === "development"
3773
3773
 
3774
3774
  ;// CONCATENATED MODULE: ./packages/core/utils/opaque.ts
3775
3775
  /**
3776
- * @fileoverview `Opaque<Type, Token>` constructs a unique type which is a subset of Type with a
3776
+ * `Opaque<Type, Token>` constructs a unique type which is a subset of Type with a
3777
3777
  * specified unique token Token. It means that base type cannot be assigned to unique type by accident.
3778
3778
  * Good examples of opaque types include:
3779
3779
  * - JWTs or other tokens - these are special kinds of string used for authorization purposes.
@@ -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
  }
@@ -13212,7 +13210,6 @@ class LeafNode {
13212
13210
  /**
13213
13211
  * Get the byte length of embedded value.
13214
13212
  *
13215
- * @remark
13216
13213
  * Note in case this node only contains hash this is going to be 0.
13217
13214
  */
13218
13215
  getValueLength() {
@@ -13223,7 +13220,6 @@ class LeafNode {
13223
13220
  /**
13224
13221
  * Returns the embedded value.
13225
13222
  *
13226
- * @remark
13227
13223
  * Note that this is going to be empty for a regular leaf node (i.e. containing a hash).
13228
13224
  */
13229
13225
  getValue() {
@@ -13233,7 +13229,6 @@ class LeafNode {
13233
13229
  /**
13234
13230
  * Returns contained value hash.
13235
13231
  *
13236
- * @remark
13237
13232
  * Note that for embedded value this is going to be full 0-padded 32 bytes.
13238
13233
  */
13239
13234
  getValueHash() {
@@ -20816,13 +20811,11 @@ class AccumulateDataItem {
20816
20811
  * - gas cost and reports length for each service (statistics)
20817
20812
  */
20818
20813
  class AccumulateData {
20819
- autoAccumulateServicesByServiceId;
20820
20814
  reportsDataByServiceId;
20821
20815
  transfersByServiceId;
20822
20816
  serviceIds;
20823
20817
  gasLimitByServiceId;
20824
20818
  constructor(reports, transfers, autoAccumulateServicesByServiceId) {
20825
- this.autoAccumulateServicesByServiceId = autoAccumulateServicesByServiceId;
20826
20819
  const serviceIdsFromAutoAccumulate = new Set(autoAccumulateServicesByServiceId.keys());
20827
20820
  const { reportsDataByServiceId, serviceIds: serviceIdsFromReports, gasLimitByServiceId: reportsGasLimitByServiceId, } = this.transformReports(reports);
20828
20821
  this.reportsDataByServiceId = reportsDataByServiceId;
@@ -21142,12 +21135,12 @@ function createMergeContext(chainSpec, state, inputState, results) {
21142
21135
  }
21143
21136
  function updatePrivilegedService(currentServiceId, serviceIdUpdatedByManager, selfUpdatedServiceId) {
21144
21137
  if (currentServiceId === serviceIdUpdatedByManager) {
21145
- return serviceIdUpdatedByManager;
21138
+ return selfUpdatedServiceId;
21146
21139
  }
21147
- return selfUpdatedServiceId;
21140
+ return serviceIdUpdatedByManager;
21148
21141
  }
21149
21142
  function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
21150
- const { outputState, currentPrivilegedServices, chainSpec } = mergeContext;
21143
+ const { outputState, currentPrivilegedServices, chainSpec, privilegedServicesUpdatedByManager } = mergeContext;
21151
21144
  const currentManager = currentPrivilegedServices.manager;
21152
21145
  const currentRegistrar = currentPrivilegedServices.registrar;
21153
21146
  const currentDelegator = currentPrivilegedServices.delegator;
@@ -21165,28 +21158,35 @@ function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
21165
21158
  });
21166
21159
  }
21167
21160
  if (serviceId === currentRegistrar) {
21168
- const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, outputState.privilegedServices.registrar, privilegedServices.registrar);
21161
+ const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, privilegedServicesUpdatedByManager.registrar, privilegedServices.registrar);
21169
21162
  outputState.privilegedServices = PrivilegedServices.create({
21170
21163
  ...outputState.privilegedServices,
21171
21164
  registrar: newRegistrar,
21172
21165
  });
21173
21166
  }
21174
21167
  if (serviceId === currentDelegator) {
21175
- const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, outputState.privilegedServices.delegator, privilegedServices.delegator);
21168
+ const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, privilegedServicesUpdatedByManager.delegator, privilegedServices.delegator);
21176
21169
  outputState.privilegedServices = PrivilegedServices.create({
21177
21170
  ...outputState.privilegedServices,
21178
21171
  delegator: newDelegator,
21179
21172
  });
21180
21173
  }
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,
21174
+ let shouldUpdateAssigners = false;
21175
+ const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => {
21176
+ if (serviceId === currentAssigner) {
21177
+ const newAssigner = updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], privilegedServicesUpdatedByManager.assigners[coreIndex], privilegedServices.assigners[coreIndex]);
21178
+ shouldUpdateAssigners = shouldUpdateAssigners || newAssigner !== currentAssigner;
21179
+ return newAssigner;
21180
+ }
21181
+ return currentAssigner;
21189
21182
  });
21183
+ if (shouldUpdateAssigners) {
21184
+ const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
21185
+ outputState.privilegedServices = PrivilegedServices.create({
21186
+ ...outputState.privilegedServices,
21187
+ assigners: newAssignersPerCore,
21188
+ });
21189
+ }
21190
21190
  }
21191
21191
  }
21192
21192
  function mergeValidatorsData(mergeContext, [serviceId, { stateUpdate }]) {
@@ -22968,19 +22968,19 @@ class Accumulate {
22968
22968
  for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
22969
22969
  const serviceId = serviceIds[serviceIndex];
22970
22970
  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
- }));
22971
+ const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => {
22972
+ const resultEntry = [
22973
+ serviceId,
22974
+ {
22975
+ consumedGas,
22976
+ stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
22977
+ },
22978
+ ];
22979
+ return resultEntry;
22980
+ });
22975
22981
  resultPromises[serviceIndex] = promise;
22976
22982
  }
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
- });
22983
+ return Promise.all(resultPromises).then((results) => new Map(results));
22984
22984
  }
22985
22985
  /**
22986
22986
  * A method that updates `recentlyAccumulated`, `accumulationQueue` and `timeslot` in state
@@ -23069,9 +23069,10 @@ class Accumulate {
23069
23069
  const _gasCost = gasCost;
23070
23070
  assertEmpty(rest);
23071
23071
  const accumulated = accumulatableReports.subview(0, accumulatedReports);
23072
- const { yieldedRoot, services, transfers: _transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
23072
+ const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
23073
23073
  assertEmpty(stateUpdateRest);
23074
- // yielded root is retrieved after each pvm invocation so we can ignore it here
23074
+ // transfers and yielded root are retrieved after each pvm invocation so we can ignore it here
23075
+ const _transfers = transfers;
23075
23076
  const _yieldedRoot = yieldedRoot;
23076
23077
  if (this.hasDuplicatedServiceIdCreated(services.created)) {
23077
23078
  accumulate_logger.trace `Duplicated Service creation detected. Block is invalid.`;
@@ -25002,7 +25003,7 @@ async function createImporter(config) {
25002
25003
  const interpreter = config.workerParams.pvm;
25003
25004
  const blocks = db.getBlocksDb();
25004
25005
  const states = db.getStatesDb();
25005
- const hasher = new TransitionHasher(chainSpec, await keccakHasher, await blake2b);
25006
+ const hasher = new TransitionHasher(await keccakHasher, await blake2b);
25006
25007
  const importer = new Importer(chainSpec, interpreter, hasher, main_logger, blocks, states);
25007
25008
  return {
25008
25009
  importer,