@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.
- package/README.md +5 -0
- package/bootstrap-generator.mjs +5 -7
- package/bootstrap-generator.mjs.map +1 -1
- package/bootstrap-importer.mjs +39 -38
- package/bootstrap-importer.mjs.map +1 -1
- package/bootstrap-network.mjs +4 -7
- package/bootstrap-network.mjs.map +1 -1
- package/index.js +43 -42
- package/index.js.map +1 -1
- package/package.json +1 -1
package/bootstrap-importer.mjs
CHANGED
|
@@ -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
|
-
*
|
|
3613
|
-
*
|
|
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
|
-
*
|
|
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(
|
|
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
|
|
21138
|
+
return selfUpdatedServiceId;
|
|
21146
21139
|
}
|
|
21147
|
-
return
|
|
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,
|
|
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,
|
|
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
|
-
|
|
21182
|
-
const newAssigners = currentAssigners.map((currentAssigner, coreIndex) =>
|
|
21183
|
-
|
|
21184
|
-
|
|
21185
|
-
|
|
21186
|
-
|
|
21187
|
-
|
|
21188
|
-
|
|
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
|
-
|
|
22973
|
-
|
|
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
|
|
23072
|
+
const { yieldedRoot, services, transfers, validatorsData, privilegedServices, authorizationQueues, ...stateUpdateRest } = state;
|
|
23073
23073
|
assertEmpty(stateUpdateRest);
|
|
23074
|
-
// yielded root
|
|
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(
|
|
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,
|