1 | import { CallReceiptJSON } from '@neo-one/client-core';
|
2 | import { Monitor } from '@neo-one/monitor';
|
3 | import { Blockchain } from '@neo-one/node-blockchain';
|
4 | import { test as testNet } from '@neo-one/node-neo-settings';
|
5 | import { storage } from '@neo-one/node-storage-levelup';
|
6 | import { vm } from '@neo-one/node-vm';
|
7 | import LevelUp from 'levelup';
|
8 | import MemDown from 'memdown';
|
9 | import { RawSourceMap } from 'source-map';
|
10 | import ts from 'typescript';
|
11 | import { compile } from './compile';
|
12 | import { Context } from './Context';
|
13 | import { throwOnDiagnosticErrorOrWarning } from './utils';
|
14 |
|
15 | export interface ExecuteOptions {
|
16 | readonly prelude?: Buffer;
|
17 | readonly ignoreWarnings?: boolean;
|
18 | }
|
19 |
|
20 | export const EXECUTE_OPTIONS_DEFAULT = {
|
21 | prelude: Buffer.alloc(0, 0),
|
22 | ignoreWarnings: false,
|
23 | };
|
24 |
|
25 | export 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 | };
|