@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/README.md +5 -0
- package/bootstrap-generator.mjs +10 -8
- package/bootstrap-generator.mjs.map +1 -1
- package/bootstrap-importer.mjs +44 -39
- package/bootstrap-importer.mjs.map +1 -1
- package/bootstrap-network.mjs +9 -8
- package/bootstrap-network.mjs.map +1 -1
- package/index.js +46 -41
- package/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
*
|
|
24377
|
-
*
|
|
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
|
-
*
|
|
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(
|
|
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
|
|
45904
|
+
return selfUpdatedServiceId;
|
|
45908
45905
|
}
|
|
45909
|
-
return
|
|
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,
|
|
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,
|
|
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
|
-
|
|
45944
|
-
const newAssigners = currentAssigners.map((currentAssigner, coreIndex) =>
|
|
45945
|
-
|
|
45946
|
-
|
|
45947
|
-
|
|
45948
|
-
|
|
45949
|
-
|
|
45950
|
-
|
|
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
|
-
|
|
47735
|
-
|
|
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
|
|
47838
|
+
const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
|
|
47835
47839
|
assertEmpty(stateUpdateRest);
|
|
47836
|
-
// yielded root
|
|
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(
|
|
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.
|
|
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
|