@typeberry/jam 0.4.0-5a35a0a → 0.4.0-da92f56

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
@@ -24314,7 +24314,11 @@ var TestSuite;
24314
24314
  })(TestSuite || (TestSuite = {}));
24315
24315
  const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
24316
24316
  const DEFAULT_SUITE = TestSuite.W3F_DAVXY;
24317
- const DEFAULT_VERSION = GpVersion.V0_7_2;
24317
+ /**
24318
+ * Current version is set to track the jam-conformance testing.
24319
+ * Since we are currently at 0.7.1 not 0.7.2, we set our default version accordingly.
24320
+ */
24321
+ const DEFAULT_VERSION = GpVersion.V0_7_1;
24318
24322
  const env = typeof process === "undefined" ? {} : process.env;
24319
24323
  let CURRENT_VERSION = parseCurrentVersion(env.GP_VERSION) ?? DEFAULT_VERSION;
24320
24324
  let CURRENT_SUITE = parseCurrentSuite(env.TEST_SUITE) ?? DEFAULT_SUITE;
@@ -24373,8 +24377,8 @@ class Compatibility {
24373
24377
  /**
24374
24378
  * Allows selecting different values for different Gray Paper versions from one record.
24375
24379
  *
24376
- * @param fallback The default value to return if no value is found for the current.
24377
- * @param record A record mapping versions to values, checking if the version is greater or equal to the current version.
24380
+ * fallback The default value to return if no value is found for the current.
24381
+ * versions A record mapping versions to values, checking if the version is greater or equal to the current version.
24378
24382
  * @returns The value for the current version, or the default value.
24379
24383
  */
24380
24384
  static selectIfGreaterOrEqual({ fallback, versions, }) {
@@ -24537,7 +24541,7 @@ const workspacePathFix = dev_env.NODE_ENV === "development"
24537
24541
 
24538
24542
  ;// CONCATENATED MODULE: ./packages/core/utils/opaque.ts
24539
24543
  /**
24540
- * @fileoverview `Opaque<Type, Token>` constructs a unique type which is a subset of Type with a
24544
+ * `Opaque<Type, Token>` constructs a unique type which is a subset of Type with a
24541
24545
  * specified unique token Token. It means that base type cannot be assigned to unique type by accident.
24542
24546
  * Good examples of opaque types include:
24543
24547
  * - JWTs or other tokens - these are special kinds of string used for authorization purposes.
@@ -31185,7 +31189,7 @@ function jip_chain_spec_parseBootnode(v) {
31185
31189
  if (name === "" || ip === "" || port === "") {
31186
31190
  throw new Error(`Invalid bootnode format, expected: <name>@<ip>:<port>, got: "${v}"`);
31187
31191
  }
31188
- const portNumber = Number.parseInt(port);
31192
+ const portNumber = Number.parseInt(port, 10);
31189
31193
  if (!isU16(portNumber)) {
31190
31194
  throw new Error(`Invalid port number: "${port}"`);
31191
31195
  }
@@ -35445,7 +35449,6 @@ class LeafNode {
35445
35449
  /**
35446
35450
  * Get the byte length of embedded value.
35447
35451
  *
35448
- * @remark
35449
35452
  * Note in case this node only contains hash this is going to be 0.
35450
35453
  */
35451
35454
  getValueLength() {
@@ -35456,7 +35459,6 @@ class LeafNode {
35456
35459
  /**
35457
35460
  * Returns the embedded value.
35458
35461
  *
35459
- * @remark
35460
35462
  * Note that this is going to be empty for a regular leaf node (i.e. containing a hash).
35461
35463
  */
35462
35464
  getValue() {
@@ -35466,7 +35468,6 @@ class LeafNode {
35466
35468
  /**
35467
35469
  * Returns contained value hash.
35468
35470
  *
35469
- * @remark
35470
35471
  * Note that for embedded value this is going to be full 0-padded 32 bytes.
35471
35472
  */
35472
35473
  getValueHash() {
@@ -37588,11 +37589,9 @@ class JamConfig {
37588
37589
 
37589
37590
  /** Helper function to create most used hashes in the block */
37590
37591
  class hasher_TransitionHasher {
37591
- context;
37592
37592
  keccakHasher;
37593
37593
  blake2b;
37594
- constructor(context, keccakHasher, blake2b) {
37595
- this.context = context;
37594
+ constructor(keccakHasher, blake2b) {
37596
37595
  this.keccakHasher = keccakHasher;
37597
37596
  this.blake2b = blake2b;
37598
37597
  }
@@ -45578,13 +45577,11 @@ class AccumulateDataItem {
45578
45577
  * - gas cost and reports length for each service (statistics)
45579
45578
  */
45580
45579
  class AccumulateData {
45581
- autoAccumulateServicesByServiceId;
45582
45580
  reportsDataByServiceId;
45583
45581
  transfersByServiceId;
45584
45582
  serviceIds;
45585
45583
  gasLimitByServiceId;
45586
45584
  constructor(reports, transfers, autoAccumulateServicesByServiceId) {
45587
- this.autoAccumulateServicesByServiceId = autoAccumulateServicesByServiceId;
45588
45585
  const serviceIdsFromAutoAccumulate = new Set(autoAccumulateServicesByServiceId.keys());
45589
45586
  const { reportsDataByServiceId, serviceIds: serviceIdsFromReports, gasLimitByServiceId: reportsGasLimitByServiceId, } = this.transformReports(reports);
45590
45587
  this.reportsDataByServiceId = reportsDataByServiceId;
@@ -45904,12 +45901,12 @@ function createMergeContext(chainSpec, state, inputState, results) {
45904
45901
  }
45905
45902
  function updatePrivilegedService(currentServiceId, serviceIdUpdatedByManager, selfUpdatedServiceId) {
45906
45903
  if (currentServiceId === serviceIdUpdatedByManager) {
45907
- return serviceIdUpdatedByManager;
45904
+ return selfUpdatedServiceId;
45908
45905
  }
45909
- return selfUpdatedServiceId;
45906
+ return serviceIdUpdatedByManager;
45910
45907
  }
45911
45908
  function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
45912
- const { outputState, currentPrivilegedServices, chainSpec } = mergeContext;
45909
+ const { outputState, currentPrivilegedServices, chainSpec, privilegedServicesUpdatedByManager } = mergeContext;
45913
45910
  const currentManager = currentPrivilegedServices.manager;
45914
45911
  const currentRegistrar = currentPrivilegedServices.registrar;
45915
45912
  const currentDelegator = currentPrivilegedServices.delegator;
@@ -45927,28 +45924,35 @@ function mergePrivilegedServices(mergeContext, [serviceId, { stateUpdate }]) {
45927
45924
  });
45928
45925
  }
45929
45926
  if (serviceId === currentRegistrar) {
45930
- const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, outputState.privilegedServices.registrar, privilegedServices.registrar);
45927
+ const newRegistrar = updatePrivilegedService(currentPrivilegedServices.registrar, privilegedServicesUpdatedByManager.registrar, privilegedServices.registrar);
45931
45928
  outputState.privilegedServices = PrivilegedServices.create({
45932
45929
  ...outputState.privilegedServices,
45933
45930
  registrar: newRegistrar,
45934
45931
  });
45935
45932
  }
45936
45933
  if (serviceId === currentDelegator) {
45937
- const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, outputState.privilegedServices.delegator, privilegedServices.delegator);
45934
+ const newDelegator = updatePrivilegedService(currentPrivilegedServices.delegator, privilegedServicesUpdatedByManager.delegator, privilegedServices.delegator);
45938
45935
  outputState.privilegedServices = PrivilegedServices.create({
45939
45936
  ...outputState.privilegedServices,
45940
45937
  delegator: newDelegator,
45941
45938
  });
45942
45939
  }
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,
45940
+ let shouldUpdateAssigners = false;
45941
+ const newAssigners = currentAssigners.map((currentAssigner, coreIndex) => {
45942
+ if (serviceId === currentAssigner) {
45943
+ const newAssigner = updatePrivilegedService(currentPrivilegedServices.assigners[coreIndex], privilegedServicesUpdatedByManager.assigners[coreIndex], privilegedServices.assigners[coreIndex]);
45944
+ shouldUpdateAssigners = shouldUpdateAssigners || newAssigner !== currentAssigner;
45945
+ return newAssigner;
45946
+ }
45947
+ return currentAssigner;
45951
45948
  });
45949
+ if (shouldUpdateAssigners) {
45950
+ const newAssignersPerCore = tryAsPerCore(newAssigners, chainSpec);
45951
+ outputState.privilegedServices = PrivilegedServices.create({
45952
+ ...outputState.privilegedServices,
45953
+ assigners: newAssignersPerCore,
45954
+ });
45955
+ }
45952
45956
  }
45953
45957
  }
45954
45958
  function mergeValidatorsData(mergeContext, [serviceId, { stateUpdate }]) {
@@ -47730,19 +47734,19 @@ class Accumulate {
47730
47734
  for (let serviceIndex = 0; serviceIndex < serviceIdsLength; serviceIndex += 1) {
47731
47735
  const serviceId = serviceIds[serviceIndex];
47732
47736
  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
- }));
47737
+ const promise = this.accumulateSingleService(serviceId, accumulateData.getTransfers(serviceId), accumulateData.getOperands(serviceId), accumulateData.getGasLimit(serviceId), slot, entropy, AccumulationStateUpdate.copyFrom(inputStateUpdate)).then(({ consumedGas, stateUpdate }) => {
47738
+ const resultEntry = [
47739
+ serviceId,
47740
+ {
47741
+ consumedGas,
47742
+ stateUpdate: stateUpdate === null ? checkpoint : stateUpdate,
47743
+ },
47744
+ ];
47745
+ return resultEntry;
47746
+ });
47737
47747
  resultPromises[serviceIndex] = promise;
47738
47748
  }
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
- });
47749
+ return Promise.all(resultPromises).then((results) => new Map(results));
47746
47750
  }
47747
47751
  /**
47748
47752
  * A method that updates `recentlyAccumulated`, `accumulationQueue` and `timeslot` in state
@@ -47831,9 +47835,10 @@ class Accumulate {
47831
47835
  const _gasCost = gasCost;
47832
47836
  assertEmpty(rest);
47833
47837
  const accumulated = accumulatableReports.subview(0, accumulatedReports);
47834
- const { yieldedRoot, services, transfers: _transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
47838
+ const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
47835
47839
  assertEmpty(stateUpdateRest);
47836
- // yielded root is retrieved after each pvm invocation so we can ignore it here
47840
+ // transfers and yielded root are retrieved after each pvm invocation so we can ignore it here
47841
+ const _transfers = transfers;
47837
47842
  const _yieldedRoot = yieldedRoot;
47838
47843
  if (this.hasDuplicatedServiceIdCreated(services.created)) {
47839
47844
  accumulate_logger.trace `Duplicated Service creation detected. Block is invalid.`;
@@ -49764,7 +49769,7 @@ async function createImporter(config) {
49764
49769
  const interpreter = config.workerParams.pvm;
49765
49770
  const blocks = db.getBlocksDb();
49766
49771
  const states = db.getStatesDb();
49767
- const hasher = new hasher_TransitionHasher(chainSpec, await keccakHasher, await blake2b);
49772
+ const hasher = new hasher_TransitionHasher(await keccakHasher, await blake2b);
49768
49773
  const importer = new Importer(chainSpec, interpreter, hasher, main_logger, blocks, states);
49769
49774
  return {
49770
49775
  importer,
@@ -52488,7 +52493,7 @@ class generator_Generator {
52488
52493
  // select validator for block
52489
52494
  const validatorId = tryAsValidatorIndex(newTimeSlot % 6);
52490
52495
  // retriev data from previous block
52491
- const hasher = new TransitionHasher(this.chainSpec, this.keccakHasher, this.blake2b);
52496
+ const hasher = new TransitionHasher(this.keccakHasher, this.blake2b);
52492
52497
  const parentHeaderHash = this.lastHeaderHash;
52493
52498
  const stateRoot = this.states.getStateRoot(this.lastState);
52494
52499
  // create extrinsic