@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
94 lines (92 loc) • 16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class RefundAssetsHelper extends Helper_1.Helper {
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const references = sb.scope.addUnique();
sb.emitSysCall(node, 'System.ExecutionEngine.GetScriptContainer');
sb.emitSysCall(node, 'Neo.Transaction.GetReferences');
sb.scope.set(sb, node, options, references);
sb.emitSysCall(node, 'System.ExecutionEngine.GetScriptContainer');
sb.emitSysCall(node, 'Neo.Transaction.GetInputs');
sb.emitOp(node, 'NEWMAP');
sb.emitHelper(node, options, sb.helpers.arrReduce({
withIndex: true,
each: (innerOptions) => {
sb.emitOp(node, 'ROT');
sb.scope.get(sb, node, innerOptions, references);
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'PICKITEM');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitSysCall(node, 'Neo.Output.GetScriptHash');
sb.emitSysCall(node, 'System.ExecutionEngine.GetExecutingScriptHash');
sb.emitOp(node, 'EQUAL');
},
whenTrue: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SWAP');
sb.emitSysCall(node, 'Neo.Input.GetHash');
sb.emitPushBoolean(node, true);
sb.emitOp(node, 'SETITEM');
},
whenFalse: () => {
sb.emitOp(node, 'NIP');
},
}));
},
}));
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitOp(node, 'ARRAYSIZE');
sb.emitPushInt(node, 1);
sb.emitOp(node, 'NUMEQUAL');
},
whenTrue: () => {
sb.emitOp(node, 'KEYS');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'PICKITEM');
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitHelper(node, options, sb.helpers.isProcessedTransaction);
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, false);
},
whenFalse: () => {
sb.emitSysCall(node, 'Neo.Blockchain.GetTransaction');
sb.emitSysCall(node, 'Neo.Transaction.GetReferences');
sb.emitHelper(node, options, sb.helpers.arrEvery({
map: () => {
sb.emitSysCall(node, 'Neo.Output.GetScriptHash');
sb.emitHelper(node, options, sb.helpers.isCaller);
},
}));
},
}));
},
whenFalse: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBoolean(node, false);
},
}));
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
},
whenFalse: () => {
sb.emitPushString(node, 'InvalidRefundAssetsError');
sb.emitHelper(node, options, sb.helpers.wrapString);
sb.emitHelper(node, options, sb.helpers.throw);
},
}));
if (optionsIn.pushValue) {
sb.emitHelper(node, options, sb.helpers.wrapUndefined);
}
}
}
exports.RefundAssetsHelper = RefundAssetsHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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UyxFQUFFO1lBQ3ZCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztDQUNGO0FBM0pELGdEQTJKQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9jb250cmFjdC9SZWZ1bmRBc3NldHNIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuLy8gSW5wdXQ6IFtdXG4vLyBPdXRwdXQ6IFtdXG5leHBvcnQgY2xhc3MgUmVmdW5kQXNzZXRzSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gc2Iuc2NvcGUuYWRkVW5pcXVlKCk7XG5cbiAgICAvLyBbdHJhbnNhY3Rpb25dXG4gICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ1N5c3RlbS5FeGVjdXRpb25FbmdpbmUuR2V0U2NyaXB0Q29udGFpbmVyJyk7XG4gICAgLy8gW3JlZmVyZW5jZXNdXG4gICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5UcmFuc2FjdGlvbi5HZXRSZWZlcmVuY2VzJyk7XG4gICAgLy8gW11cbiAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHJlZmVyZW5jZXMpO1xuICAgIC8vIFt0cmFuc2FjdGlvbl1cbiAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnU3lzdGVtLkV4ZWN1dGlvbkVuZ2luZS5HZXRTY3JpcHRDb250YWluZXInKTtcbiAgICAvLyBbaW5wdXRzXVxuICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uVHJhbnNhY3Rpb24uR2V0SW5wdXRzJyk7XG4gICAgLy8gW21hcCwgaW5wdXRzXVxuICAgIHNiLmVtaXRPcChub2RlLCAnTkVXTUFQJyk7XG4gICAgLy8gW21hcF1cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmFyclJlZHVjZSh7XG4gICAgICAgIHdpdGhJbmRleDogdHJ1ZSxcbiAgICAgICAgZWFjaDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIC8vIFtpZHgsIG1hcCwgaW5wdXRdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAvLyBbcmVmZXJlbmNlcywgaWR4LCBtYXAsIGlucHV0XVxuICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgaW5uZXJPcHRpb25zLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAvLyBbaWR4LCByZWZlcmVuY2VzLCBtYXAsIGlucHV0XVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgIC8vIFtyZWZlcmVuY2UsIG1hcCwgaW5wdXRdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLSVRFTScpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbYnVmZmVyLCBtYXAsIGlucHV0XVxuICAgICAgICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uT3V0cHV0LkdldFNjcmlwdEhhc2gnKTtcbiAgICAgICAgICAgICAgICAvLyBbYnVmZmVyLCBidWZmZXIsIG1hcCwgaW5wdXRdXG4gICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ1N5c3RlbS5FeGVjdXRpb25FbmdpbmUuR2V0RXhlY3V0aW5nU2NyaXB0SGFzaCcpO1xuICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBtYXAsIGlucHV0XVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRVFVQUwnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbbWFwLCBpbnB1dCwgbWFwXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgICAgICAgIC8vIFtpbnB1dCwgbWFwLCBtYXBdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICAgICAgLy8gW2hhc2gsIG1hcCwgbWFwXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uSW5wdXQuR2V0SGFzaCcpO1xuICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBoYXNoLCBtYXAsIG1hcF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gW21hcF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NFVElURU0nKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW21hcF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05JUCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFttYXAsIG1hcF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgIC8vIFtzaXplLCBtYXBdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdBUlJBWVNJWkUnKTtcbiAgICAgICAgICAvLyBbMSwgc2l6ZSwgbWFwXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDEpO1xuICAgICAgICAgIC8vIFtzaXplID09PSAxLCBtYXBdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFthcnJdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdLRVlTJyk7XG4gICAgICAgICAgLy8gWzAsIGFycl1cbiAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgICAgICAvLyBbYnVmZmVyXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcbiAgICAgICAgICAvLyBbYnVmZmVyLCBidWZmZXJdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW2lzUHJvY2Vzc2VkVHJhbnNhY3Rpb24sIGJ1ZmZlcl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuaXNQcm9jZXNzZWRUcmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbdHJhbnNhY3Rpb25dXG4gICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5CbG9ja2NoYWluLkdldFRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgLy8gW3JlZmVyZW5jZXNdXG4gICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5UcmFuc2FjdGlvbi5HZXRSZWZlcmVuY2VzJyk7XG4gICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgICAgc2IuaGVscGVycy5hcnJFdmVyeSh7XG4gICAgICAgICAgICAgICAgICAgIG1hcDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtidWZmZXJdXG4gICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5PdXRwdXQuR2V0U2NyaXB0SGFzaCcpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFtpc0NhbGxlcl1cbiAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuaXNDYWxsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9LFxuICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAvLyBbJ0ludmFsaWRSZWZ1bmRBc3NldHNFcnJvciddXG4gICAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJ0ludmFsaWRSZWZ1bmRBc3NldHNFcnJvcicpO1xuICAgICAgICAgIC8vIFt2YWx1ZV1cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFN0cmluZyk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3cpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG59XG4iXX0=