feat: isolated-vm as a plugin

This commit is contained in:
ppe
2022-11-21 21:40:53 +01:00
committed by just_ppe
parent 46a6886d46
commit 3993cd2932
8 changed files with 61 additions and 109 deletions

View File

@@ -4,6 +4,7 @@ import { WarpCache } from '../cache/WarpCache';
import { ContractDefinition } from '../core/ContractDefinition';
import { ExecutorFactory } from '../core/modules/ExecutorFactory';
import { EvaluationOptions } from '../core/modules/StateEvaluator';
import { Warp } from '../core/Warp';
/**
* An implementation of ExecutorFactory that adds caching capabilities
@@ -19,9 +20,10 @@ export class CacheableExecutorFactory<Api> implements ExecutorFactory<Api> {
async create<State>(
contractDefinition: ContractDefinition<State>,
evaluationOptions: EvaluationOptions
evaluationOptions: EvaluationOptions,
warp: Warp
): Promise<Api> {
return await this.baseImplementation.create(contractDefinition, evaluationOptions);
return await this.baseImplementation.create(contractDefinition, evaluationOptions, warp);
// warn: do not cache on the contractDefinition.srcTxId. This might look like a good optimisation
// (as many contracts share the same source code), but unfortunately this is causing issues

View File

@@ -1,6 +1,7 @@
import { ContractDefinition } from '../core/ContractDefinition';
import { ExecutorFactory } from '../core/modules/ExecutorFactory';
import { EvaluationOptions } from '../core/modules/StateEvaluator';
import { Warp } from '../core/Warp';
/**
* An ExecutorFactory that allows to substitute original contract's source code.
@@ -18,7 +19,8 @@ export class DebuggableExecutorFactory<Api> implements ExecutorFactory<Api> {
async create<State>(
contractDefinition: ContractDefinition<State>,
evaluationOptions: EvaluationOptions
evaluationOptions: EvaluationOptions,
warp: Warp
): Promise<Api> {
if (Object.prototype.hasOwnProperty.call(this.sourceCode, contractDefinition.txId)) {
contractDefinition = {
@@ -27,6 +29,6 @@ export class DebuggableExecutorFactory<Api> implements ExecutorFactory<Api> {
};
}
return await this.baseImplementation.create(contractDefinition, evaluationOptions);
return await this.baseImplementation.create(contractDefinition, evaluationOptions, warp);
}
}

View File

@@ -45,7 +45,8 @@ export class Evolve implements ExecutionContextModifier {
const newContractDefinition = await definitionLoader.load<State>(contractTxId, evolvedSrcTxId);
const newHandler = (await executorFactory.create<State>(
newContractDefinition,
executionContext.evaluationOptions
executionContext.evaluationOptions,
executionContext.warp
)) as HandlerApi<State>;
//FIXME: side-effect...