UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

60 lines (58 loc) 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const Helper_1 = require("../Helper"); const utils_1 = require("./utils"); class HandleSendUnsafeReceiveHelperBase extends Helper_1.Helper { constructor({ method, returnType, opposite }) { super(); this.method = method; this.returnType = returnType; this.opposite = opposite; } emit(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.emitSysCall(node, 'System.ExecutionEngine.GetScriptContainer'); sb.emitSysCall(node, 'Neo.Transaction.GetHash'); sb.emitHelper(node, options, sb.helpers.isProcessedTransaction); if (!this.opposite) { sb.emitSysCall(node, 'System.ExecutionEngine.GetScriptContainer'); sb.emitSysCall(node, 'Neo.Transaction.GetOutputs'); sb.emitHelper(node, options, sb.helpers.getOutputAssetValueMap); sb.emitSysCall(node, 'System.ExecutionEngine.GetScriptContainer'); sb.emitSysCall(node, 'Neo.Transaction.GetReferences'); sb.emitHelper(node, options, sb.helpers.mergeAssetValueMaps({ add: false })); sb.emitHelper(node, optionsIn, sb.helpers.mapEvery({ each: () => { sb.emitOp(node, 'DROP'); sb.emitPushInt(node, 0); sb.emitOp(node, this.lessThan ? 'LT' : 'GT'); }, })); sb.emitOp(node, 'NOT'); sb.emitOp(node, 'BOOLOR'); } sb.emitHelper(node, options, sb.helpers.if({ condition: () => { }, whenTrue: () => { sb.emitPushBoolean(node, false); }, whenFalse: () => { sb.emitPushInt(node, 1); sb.emitHelper(node, options, sb.helpers.getArgument); sb.withScope(node, options, (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.parameters({ params: ts_utils_1.tsUtils.parametered.getParameters(this.method), mapParam: utils_1.createWrapParam(sb), })); sb.emitHelper(node, innerOptions, sb.helpers.invokeSmartContractMethod({ method: this.method })); sb.emitHelper(node, innerOptions, sb.helpers.unwrapValRecursive({ type: this.returnType })); sb.emitHelper(node, innerOptions, sb.helpers.setProcessedTransaction); }); }, })); } } exports.HandleSendUnsafeReceiveHelperBase = HandleSendUnsafeReceiveHelperBase; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhhbmRsZVNlbmRVbnNhZmVSZWNlaXZlSGVscGVyQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUE0QztBQUk1QyxzQ0FBbUM7QUFDbkMsbUNBQTBDO0FBVTFDLE1BQXNCLGlDQUFrQyxTQUFRLGVBQU07SUFNcEUsWUFBbUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBNEM7UUFDM0YsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLFNBQXVCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUkvQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO1FBRWxFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFaEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUdoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUVsQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO1lBRWxFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFFbkQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUVoRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO1lBRWxFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLCtCQUErQixDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdFLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVCxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFFVCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFFeEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7YUFDRixDQUFDLENBQ0gsQ0FBQztZQUVGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzNCO1FBRUQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUVoQixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFFYixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFFZCxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JELEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO29CQUUzQyxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixZQUFZLEVBQ1osRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7d0JBQ3BCLE1BQU0sRUFBRSxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDdEQsUUFBUSxFQUFFLHVCQUFlLENBQUMsRUFBRSxDQUFDO3FCQUM5QixDQUFDLENBQ0gsQ0FBQztvQkFHRixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUVqRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUU1RixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpHRCw4RUFpR0MiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvY29udHJhY3QvSGFuZGxlU2VuZFVuc2FmZVJlY2VpdmVIZWxwZXJCYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JhcFBhcmFtIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlU2VuZFVuc2FmZVJlY2VpdmVIZWxwZXJCYXNlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1ldGhvZDogdHMuTWV0aG9kRGVjbGFyYXRpb247XG4gIHJlYWRvbmx5IHJldHVyblR5cGU6IHRzLlR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9wcG9zaXRlOiBib29sZWFuO1xufVxuXG4vLyBJbnB1dDogW11cbi8vIE91dHB1dDogW2Jvb2xlYW5dXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSGFuZGxlU2VuZFVuc2FmZVJlY2VpdmVIZWxwZXJCYXNlIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxlc3NUaGFuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogdHMuTWV0aG9kRGVjbGFyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0dXJuVHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHBvc2l0ZTogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyBtZXRob2QsIHJldHVyblR5cGUsIG9wcG9zaXRlIH06IEhhbmRsZVNlbmRVbnNhZmVSZWNlaXZlSGVscGVyQmFzZU9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMucmV0dXJuVHlwZSA9IHJldHVyblR5cGU7XG4gICAgdGhpcy5vcHBvc2l0ZSA9IG9wcG9zaXRlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcblxuICAgIC8vIGlzUHJvY2Vzc2VkKEJsb2NrY2hhaW4uY3VycmVudFRyYW5zYWN0aW9uLmhhc2gpXG4gICAgLy8gW3RyYW5zYWN0aW9uXVxuICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdTeXN0ZW0uRXhlY3V0aW9uRW5naW5lLkdldFNjcmlwdENvbnRhaW5lcicpO1xuICAgIC8vIFtoYXNoXVxuICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uVHJhbnNhY3Rpb24uR2V0SGFzaCcpO1xuICAgIC8vIFtib29sZWFuXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pc1Byb2Nlc3NlZFRyYW5zYWN0aW9uKTtcblxuICAgIC8vICFpc1JlY2VpdmVNZXRob2QoKSAmJiAhb25seVNlbnRBc3NldHMoKVxuICAgIGlmICghdGhpcy5vcHBvc2l0ZSkge1xuICAgICAgLy8gW3RyYW5zYWN0aW9uLCBib29sZWFuXVxuICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ1N5c3RlbS5FeGVjdXRpb25FbmdpbmUuR2V0U2NyaXB0Q29udGFpbmVyJyk7XG4gICAgICAvLyBbb3V0cHV0cywgYm9vbGVhbl1cbiAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uVHJhbnNhY3Rpb24uR2V0T3V0cHV0cycpO1xuICAgICAgLy8gW21hcCwgYm9vbGVhbl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRPdXRwdXRBc3NldFZhbHVlTWFwKTtcbiAgICAgIC8vIFt0cmFuc2FjdGlvbiwgbWFwLCBib29sZWFuXVxuICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ1N5c3RlbS5FeGVjdXRpb25FbmdpbmUuR2V0U2NyaXB0Q29udGFpbmVyJyk7XG4gICAgICAvLyBbb3V0cHV0cywgbWFwLCBib29sZWFuXVxuICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5UcmFuc2FjdGlvbi5HZXRSZWZlcmVuY2VzJyk7XG4gICAgICAvLyBbbWFwLCBib29sZWFuXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLm1lcmdlQXNzZXRWYWx1ZU1hcHMoeyBhZGQ6IGZhbHNlIH0pKTtcbiAgICAgIC8vIFtib29sZWFuLCBib29sZWFuXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9uc0luLFxuICAgICAgICBzYi5oZWxwZXJzLm1hcEV2ZXJ5KHtcbiAgICAgICAgICBlYWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBbdmFsdWVdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgIC8vIFswLCB2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgICAgICAgICAgLy8gW3ZhbHVlID4gMF1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCB0aGlzLmxlc3NUaGFuID8gJ0xUJyA6ICdHVCcpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFtib29sZWFuLCBib29sZWFuXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdOT1QnKTtcbiAgICAgIC8vIFtib29sZWFuXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdCT09MT1InKTtcbiAgICB9XG5cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9LFxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtib29sZWFuXVxuICAgICAgICAgIHNiLmVtaXRQdXNoQm9vbGVhbihub2RlLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtudW1iZXJdXG4gICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMSk7XG4gICAgICAgICAgLy8gW2FyZ11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0QXJndW1lbnQpO1xuICAgICAgICAgIHNiLndpdGhTY29wZShub2RlLCBvcHRpb25zLCAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgICAgICBzYi5oZWxwZXJzLnBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgICAgIHBhcmFtczogdHNVdGlscy5wYXJhbWV0ZXJlZC5nZXRQYXJhbWV0ZXJzKHRoaXMubWV0aG9kKSxcbiAgICAgICAgICAgICAgICBtYXBQYXJhbTogY3JlYXRlV3JhcFBhcmFtKHNiKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBbdmFsXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaW52b2tlU21hcnRDb250cmFjdE1ldGhvZCh7IG1ldGhvZDogdGhpcy5tZXRob2QgfSkpO1xuICAgICAgICAgICAgLy8gW3ZhbHVlXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsUmVjdXJzaXZlKHsgdHlwZTogdGhpcy5yZXR1cm5UeXBlIH0pKTtcbiAgICAgICAgICAgIC8vIFt2YWx1ZV1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnNldFByb2Nlc3NlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==