UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

82 lines (80 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); class CommonStorageHelper extends Helper_1.Helper { constructor() { super(...arguments); this.needsGlobal = true; this.needsGlobalOut = true; } emitGlobal(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.emitPushInt(node, constants_1.GlobalProperty.CommonStorageSerialized); sb.emitOp(node, 'OVER'); sb.emitPushInt(node, constants_1.GlobalProperty.CommonStorage); sb.emitPushBuffer(node, Buffer.alloc(0, 0)); sb.emitHelper(node, options, sb.helpers.getStorageBase); sb.emitHelper(node, options, sb.helpers.handleUndefinedStorage({ handleUndefined: () => { sb.emitOp(node, 'NEWMAP'); sb.emitOp(node, 'DUP'); sb.emitSysCall(node, 'Neo.Runtime.Serialize'); }, handleDefined: () => { sb.emitOp(node, 'DUP'); sb.emitSysCall(node, 'Neo.Runtime.Deserialize'); sb.emitOp(node, 'SWAP'); }, })); sb.emitPushInt(node, 4); sb.emitOp(node, 'XTUCK'); sb.emitOp(node, 'DROP'); sb.emitOp(node, 'SETITEM'); sb.emitOp(node, 'SETITEM'); } emitGlobalOut(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.emitOp(node, 'DUP'); sb.emitPushInt(node, constants_1.GlobalProperty.CommonStorageSerialized); sb.emitOp(node, 'PICKITEM'); sb.emitOp(node, 'SWAP'); sb.emitPushInt(node, constants_1.GlobalProperty.CommonStorage); sb.emitOp(node, 'PICKITEM'); sb.emitSysCall(node, 'Neo.Runtime.Serialize'); sb.emitOp(node, 'TUCK'); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'EQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); }, whenFalse: () => { sb.emitSysCall(node, 'Neo.Runtime.GetTrigger'); sb.emitPushInt(node, 0x10); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'NUMEQUAL'); }, whenTrue: () => { sb.emitPushBuffer(node, Buffer.alloc(0, 0)); sb.emitSysCall(node, 'Neo.Storage.GetContext'); sb.emitSysCall(node, 'Neo.Storage.Put'); }, whenFalse: () => { sb.emitOp(node, 'DROP'); }, })); }, })); } emit(sb, node, options) { if (!options.pushValue) { return; } sb.emitHelper(node, options, sb.helpers.getGlobalProperty({ property: constants_1.GlobalProperty.CommonStorage })); } } exports.CommonStorageHelper = CommonStorageHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUMxQyxDQUFDO29CQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7d0JBQ2QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFCLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBRXRCLE9BQU87U0FDUjtRQUVELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLDBCQUFjLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7Q0FDRjtBQXhIRCxrREF3SEMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvc3RvcmFnZS9Db21tb25TdG9yYWdlSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgR2xvYmFsUHJvcGVydHkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5cbi8vIElucHV0OiBba2V5QnVmZmVyLCB2YWxCdWZmZXJdXG4vLyBPdXRwdXQ6IFt2YWx1ZV1cbmV4cG9ydCBjbGFzcyBDb21tb25TdG9yYWdlSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG5lZWRzR2xvYmFsOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHJlYWRvbmx5IG5lZWRzR2xvYmFsT3V0ID0gdHJ1ZTtcblxuICBwdWJsaWMgZW1pdEdsb2JhbChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIC8vIFtudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0UHVzaEludChub2RlLCBHbG9iYWxQcm9wZXJ0eS5Db21tb25TdG9yYWdlU2VyaWFsaXplZCk7XG4gICAgLy8gW2dsb2JhbE9iamVjdCwgbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgLy8gW251bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0UHVzaEludChub2RlLCBHbG9iYWxQcm9wZXJ0eS5Db21tb25TdG9yYWdlKTtcbiAgICAvLyBbYnVmZmVyLCBudW1iZXIsIGdsb2JhbE9iamVjdCwgbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgc2IuZW1pdFB1c2hCdWZmZXIobm9kZSwgQnVmZmVyLmFsbG9jKDAsIDApKTtcbiAgICAvLyBbdmFsdWUsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0U3RvcmFnZUJhc2UpO1xuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuaGFuZGxlVW5kZWZpbmVkU3RvcmFnZSh7XG4gICAgICAgIGhhbmRsZVVuZGVmaW5lZDogKCkgPT4ge1xuICAgICAgICAgIC8vIFttYXAsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05FV01BUCcpO1xuICAgICAgICAgIC8vIFttYXAsIG1hcCwgbnVtYmVyLCBnbG9iYWxPYmplY3QsIG51bWJlciwgZ2xvYmFsT2JqZWN0XVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgLy8gW2J1ZmZlciwgbWFwLCBudW1iZXIsIGdsb2JhbE9iamVjdCwgbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5SdW50aW1lLlNlcmlhbGl6ZScpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVEZWZpbmVkOiAoKSA9PiB7XG4gICAgICAgICAgLy8gW2J1ZmZlciwgYnVmZmVyLCBudW1iZXIsIGdsb2JhbE9iamVjdCwgbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAvLyBbbWFwLCBidWZmZXIsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICAgICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLlJ1bnRpbWUuRGVzZXJpYWxpemUnKTtcbiAgICAgICAgICAvLyBbYnVmZmVyLCBtYXAsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW251bWJlciwgYnVmZmVyLCBtYXAsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0UHVzaEludChub2RlLCA0KTtcbiAgICAvLyBbYnVmZmVyLCBtYXAsIG51bWJlciwgZ2xvYmFsT2JqZWN0LCBidWZmZXIsIG51bWJlciwgZ2xvYmFsT2JqZWN0XVxuICAgIHNiLmVtaXRPcChub2RlLCAnWFRVQ0snKTtcbiAgICAvLyBbbWFwLCBudW1iZXIsIGdsb2JhbE9iamVjdCwgYnVmZmVyLCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAvLyBbYnVmZmVyLCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NFVElURU0nKTtcbiAgICAvLyBbXVxuICAgIHNiLmVtaXRPcChub2RlLCAnU0VUSVRFTScpO1xuICB9XG5cbiAgcHVibGljIGVtaXRHbG9iYWxPdXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcblxuICAgIC8vIFtnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgIC8vIFtudW1iZXIsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0XVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIEdsb2JhbFByb3BlcnR5LkNvbW1vblN0b3JhZ2VTZXJpYWxpemVkKTtcbiAgICAvLyBbYnVmZmVyT3JpZ2luYWwsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgLy8gW2dsb2JhbE9iamVjdCwgYnVmZmVyT3JpZ2luYWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgLy8gW251bWJlciwgZ2xvYmFsT2JqZWN0LCBidWZmZXJPcmlnaW5hbF1cbiAgICBzYi5lbWl0UHVzaEludChub2RlLCBHbG9iYWxQcm9wZXJ0eS5Db21tb25TdG9yYWdlKTtcbiAgICAvLyBbbWFwLCBidWZmZXJPcmlnaW5hbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgLy8gW2J1ZmZlciwgYnVmZmVyT3JpZ2luYWxdXG4gICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5SdW50aW1lLlNlcmlhbGl6ZScpO1xuICAgIC8vIFtidWZmZXIsIGJ1ZmZlck9yaWdpbmFsLCBidWZmZXJdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIFtib29sZWFuLCBidWZmZXJdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgICAgICB9LFxuICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgIC8vIFtudW1iZXIsIHZhbHVlQnVmZmVyXVxuICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uUnVudGltZS5HZXRUcmlnZ2VyJyk7XG4gICAgICAgICAgLy8gW251bWJlciwgbnVtYmVyLCB2YWx1ZUJ1ZmZlcl1cbiAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAweDEwKTtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIHZhbHVlQnVmZmVyXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTlVNRVFVQUwnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBba2V5QnVmZmVyLCB2YWx1ZUJ1ZmZlcl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJ1ZmZlcihub2RlLCBCdWZmZXIuYWxsb2MoMCwgMCkpO1xuICAgICAgICAgICAgICAgIC8vIFtjb250ZXh0LCBrZXlCdWZmZXIsIHZhbEJ1ZmZlcl1cbiAgICAgICAgICAgICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLlN0b3JhZ2UuR2V0Q29udGV4dCcpO1xuICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5TdG9yYWdlLlB1dCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFttYXBdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmdldEdsb2JhbFByb3BlcnR5KHsgcHJvcGVydHk6IEdsb2JhbFByb3BlcnR5LkNvbW1vblN0b3JhZ2UgfSkpO1xuICB9XG59XG4iXX0=