UNPKG

1.79 kBPlain TextView Raw
1import { CallReceiptJSON } from '@neo-one/client-core';
2import { Monitor } from '@neo-one/monitor';
3import { Blockchain } from '@neo-one/node-blockchain';
4import { test as testNet } from '@neo-one/node-neo-settings';
5import { storage } from '@neo-one/node-storage-levelup';
6import { vm } from '@neo-one/node-vm';
7import LevelUp from 'levelup';
8import MemDown from 'memdown';
9import { RawSourceMap } from 'source-map';
10import ts from 'typescript';
11import { compile } from './compile';
12import { Context } from './Context';
13import { throwOnDiagnosticErrorOrWarning } from './utils';
14
15export interface ExecuteOptions {
16 readonly prelude?: Buffer;
17 readonly ignoreWarnings?: boolean;
18}
19
20export const EXECUTE_OPTIONS_DEFAULT = {
21 prelude: Buffer.alloc(0, 0),
22 ignoreWarnings: false,
23};
24
25export const executeScript = async (
26 monitor: Monitor,
27 context: Context,
28 sourceFile: ts.SourceFile,
29 { prelude = Buffer.alloc(0, 0), ignoreWarnings = false }: ExecuteOptions = EXECUTE_OPTIONS_DEFAULT,
30): Promise<{ readonly receipt: CallReceiptJSON; readonly sourceMap: RawSourceMap }> => {
31 const blockchain = await Blockchain.create({
32 settings: testNet(),
33 storage: storage({
34 context: { messageMagic: testNet().messageMagic },
35 db: LevelUp(MemDown()),
36 }),
37 vm,
38 monitor,
39 });
40 const { code: compiledCode, sourceMap } = await compile({ context, sourceFile });
41
42 throwOnDiagnosticErrorOrWarning(context.diagnostics, ignoreWarnings);
43
44 const receipt = await blockchain.invokeScript(Buffer.concat([prelude, compiledCode]), monitor);
45
46 return {
47 receipt: {
48 result: receipt.result.serializeJSON(blockchain.serializeJSONContext),
49 actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)),
50 },
51 sourceMap,
52 };
53};