@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
60 lines (58 loc) • 11.4 kB
JavaScript
;
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==