@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
46 lines (44 loc) • 7.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
class IsCallerHelper extends Helper_1.Helper {
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.getGlobalProperty({ property: constants_1.GlobalProperty.CallingScriptHash }));
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'EQUAL');
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, true);
},
whenFalse: () => {
sb.emitOp(node, 'DUP');
sb.emitSysCall(node, 'Neo.Blockchain.GetContract');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitPushBuffer(node, Buffer.alloc(0, 0));
sb.emitOp(node, 'EQUAL');
},
whenTrue: () => {
sb.emitSysCall(node, 'Neo.Runtime.CheckWitness');
sb.emitHelper(node, options, sb.helpers.invocationIsCaller);
sb.emitOp(node, 'BOOLAND');
},
whenFalse: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, false);
},
}));
},
}));
if (!optionsIn.pushValue) {
sb.emitOp(node, 'DROP');
}
}
}
exports.IsCallerHelper = IsCallerHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklzQ2FsbGVySGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsK0NBQWlEO0FBR2pELHNDQUFtQztBQUluQyxNQUFhLGNBQWUsU0FBUSxlQUFNO0lBQ2pDLElBQUksQ0FBQyxFQUFpQixFQUFFLElBQWEsRUFBRSxTQUF1QjtRQUNuRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFHL0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsMEJBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUViLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFdkIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztnQkFDbkQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7d0JBRWQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFNUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzNCLENBQUM7b0JBSUQsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFFYixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO3dCQUVqRCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUU1RCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDN0IsQ0FBQztvQkFHRCxTQUFTLEVBQUUsR0FBRyxFQUFFO3dCQUVkLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUV4QixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbEMsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztDQUNGO0FBcEVELHdDQW9FQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9jb250cmFjdC9Jc0NhbGxlckhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IEdsb2JhbFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG4vLyBJbnB1dDogW2J1ZmZlcl1cbi8vIE91dHB1dDogW2Jvb2xlYW5dXG5leHBvcnQgY2xhc3MgSXNDYWxsZXJIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgLy8gW2FkZHJlc3NCdWZmZXIsIGFkZHJlc3NCdWZmZXJdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAvLyBbY2FsbGluZ1NjcmlwdEJ1ZmZlciwgYWRkcmVzc0J1ZmZlciwgYWRkcmVzc0J1ZmZlcl1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0R2xvYmFsUHJvcGVydHkoeyBwcm9wZXJ0eTogR2xvYmFsUHJvcGVydHkuQ2FsbGluZ1NjcmlwdEhhc2ggfSkpO1xuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAvLyBbYm9vbGVhbiwgYWRkcmVzc0J1ZmZlcl1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0VRVUFMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIENhbGxlciBpcyB0aGUgYWRkcmVzcy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGNhbGxlciBpcyBhIHNtYXJ0IGNvbnRyYWN0LlxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAvLyBbYWRkcmVzc0J1ZmZlciwgYWRkcmVzc0J1ZmZlcl1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgIC8vIFttYXliZUNvbnRyYWN0LCBhZGRyZXNzQnVmZmVyXVxuICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uQmxvY2tjaGFpbi5HZXRDb250cmFjdCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbYnVmZmVyLCBtYXliZUNvbnRyYWN0LCBhZGRyZXNzQnVmZmVyXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoQnVmZmVyKG5vZGUsIEJ1ZmZlci5hbGxvYygwLCAwKSk7XG4gICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIGFkZHJlc3NCdWZmZXJdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvLyBBZGRyZXNzIG11c3Qgbm90IGJlIGEgc21hcnQgY29udHJhY3QuXG4gICAgICAgICAgICAgIC8vIFRoZXkgYXJlIHRoZSBjYWxsZXIgSUZGIHRoZXkgc2lnbmVkIHRoZSB0cmFuc2FjdGlvbiBBTkRcbiAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgdGhlIGZpcnN0IGNvbnRyYWN0IGNhbGxlZCBPUiB3ZSBhcmUgaW4gdmVyaWZpY2F0aW9uIEJFQ0FVU0UgdmVyaWZpY2F0aW9uIGFscmVhZHkgY2hlY2tzIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgY29udHJhY3QgY2FsbGVkKS5cbiAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLlJ1bnRpbWUuQ2hlY2tXaXRuZXNzJyk7XG4gICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIGJvb2xlYW5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmludm9jYXRpb25Jc0NhbGxlcik7XG4gICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdCT09MQU5EJyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ2hlY2tXaXRuZXNzIG9uIGEgY29udHJhY3QgLT4gbGlrZWx5IHRvIGJlIGEgcmVjdXJzaXZlIGxvb3AuXG4gICAgICAgICAgICAgIC8vIFJlZ2FyZGxlc3MsIHZlcmlmeWluZyB0aGF0IG5hdGl2ZSBhc3NldCB0cmFuc2ZlcnMgYXJlIHZhbGlkIHNob3VsZCBub3QgYmUgY29uZmxhdGVkIHdpdGggc21hcnQgY29udHJhY3QgYWN0aW9ucy5cbiAgICAgICAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoIW9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==