UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

48 lines (46 loc) 8.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const BuiltinInterface_1 = require("../BuiltinInterface"); const BuiltinMemberValue_1 = require("../BuiltinMemberValue"); const BuiltinValueObject_1 = require("../BuiltinValueObject"); const SysCallMemberValue_1 = require("./SysCallMemberValue"); class BlockchainValue extends BuiltinValueObject_1.BuiltinValueObject { constructor() { super(...arguments); this.type = 'BlockchainConstructor'; } } class BlockchainConstructorInterface extends BuiltinInterface_1.BuiltinInterface { } class BlockchainCurrentCallerContract extends BuiltinMemberValue_1.BuiltinMemberValue { emit(sb, node, options) { if (options.pushValue) { sb.emitHelper(node, options, sb.helpers.getGlobalProperty({ property: constants_1.GlobalProperty.CallingScriptHash })); sb.emitOp(node, 'DUP'); sb.emitSysCall(node, 'Neo.Blockchain.GetContract'); sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitPushBuffer(node, Buffer.from([])); sb.emitOp(node, 'EQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, options, sb.helpers.wrapUndefined); }, whenFalse: () => { sb.emitHelper(node, options, sb.helpers.wrapBuffer); }, })); } } } exports.add = (builtins) => { builtins.addContractValue('Blockchain', new BlockchainValue()); builtins.addContractInterface('BlockchainConstructor', new BlockchainConstructorInterface()); builtins.addContractMember('BlockchainConstructor', 'currentBlockTime', new SysCallMemberValue_1.SysCallMemberValue('Neo.Runtime.GetTime', constants_1.Types.Number)); builtins.addContractMember('BlockchainConstructor', 'currentHeight', new SysCallMemberValue_1.SysCallMemberValue('Neo.Blockchain.GetHeight', constants_1.Types.Number)); builtins.addContractMember('BlockchainConstructor', 'currentTransaction', new SysCallMemberValue_1.SysCallMemberValue('System.ExecutionEngine.GetScriptContainer', constants_1.Types.Transaction)); builtins.addContractMember('BlockchainConstructor', 'currentCallerContract', new BlockchainCurrentCallerContract()); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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aWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9jb250cmFjdC9ibG9ja2NoYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2xvYmFsUHJvcGVydHksIFR5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW50ZXJmYWNlIH0gZnJvbSAnLi4vQnVpbHRpbkludGVyZmFjZSc7XG5pbXBvcnQgeyBCdWlsdGluTWVtYmVyVmFsdWUgfSBmcm9tICcuLi9CdWlsdGluTWVtYmVyVmFsdWUnO1xuaW1wb3J0IHsgQnVpbHRpbnMgfSBmcm9tICcuLi9CdWlsdGlucyc7XG5pbXBvcnQgeyBCdWlsdGluVmFsdWVPYmplY3QgfSBmcm9tICcuLi9CdWlsdGluVmFsdWVPYmplY3QnO1xuaW1wb3J0IHsgTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBTeXNDYWxsTWVtYmVyVmFsdWUgfSBmcm9tICcuL1N5c0NhbGxNZW1iZXJWYWx1ZSc7XG5cbmNsYXNzIEJsb2NrY2hhaW5WYWx1ZSBleHRlbmRzIEJ1aWx0aW5WYWx1ZU9iamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ0Jsb2NrY2hhaW5Db25zdHJ1Y3Rvcic7XG59XG5jbGFzcyBCbG9ja2NoYWluQ29uc3RydWN0b3JJbnRlcmZhY2UgZXh0ZW5kcyBCdWlsdGluSW50ZXJmYWNlIHt9XG5cbmNsYXNzIEJsb2NrY2hhaW5DdXJyZW50Q2FsbGVyQ29udHJhY3QgZXh0ZW5kcyBCdWlsdGluTWVtYmVyVmFsdWUge1xuICBwcm90ZWN0ZWQgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogTWVtYmVyTGlrZUV4cHJlc3Npb24sIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW2J1ZmZlcl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRHbG9iYWxQcm9wZXJ0eSh7IHByb3BlcnR5OiBHbG9iYWxQcm9wZXJ0eS5DYWxsaW5nU2NyaXB0SGFzaCB9KSk7XG4gICAgICAvLyBbYnVmZmVyLCBidWZmZXJdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gW2NvbnRyYWN0LCBidWZmZXJdXG4gICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLkJsb2NrY2hhaW4uR2V0Q29udHJhY3QnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2J1ZmZlciwgY29udHJhY3QsIGJ1ZmZlcl1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoQnVmZmVyKG5vZGUsIEJ1ZmZlci5mcm9tKFtdKSk7XG4gICAgICAgICAgICAvLyBbYm9vbGVhbiwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEJ1ZmZlcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0VmFsdWUoJ0Jsb2NrY2hhaW4nLCBuZXcgQmxvY2tjaGFpblZhbHVlKCkpO1xuICBidWlsdGlucy5hZGRDb250cmFjdEludGVyZmFjZSgnQmxvY2tjaGFpbkNvbnN0cnVjdG9yJywgbmV3IEJsb2NrY2hhaW5Db25zdHJ1Y3RvckludGVyZmFjZSgpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoXG4gICAgJ0Jsb2NrY2hhaW5Db25zdHJ1Y3RvcicsXG4gICAgJ2N1cnJlbnRCbG9ja1RpbWUnLFxuICAgIG5ldyBTeXNDYWxsTWVtYmVyVmFsdWUoJ05lby5SdW50aW1lLkdldFRpbWUnLCBUeXBlcy5OdW1iZXIpLFxuICApO1xuICBidWlsdGlucy5hZGRDb250cmFjdE1lbWJlcihcbiAgICAnQmxvY2tjaGFpbkNvbnN0cnVjdG9yJyxcbiAgICAnY3VycmVudEhlaWdodCcsXG4gICAgbmV3IFN5c0NhbGxNZW1iZXJWYWx1ZSgnTmVvLkJsb2NrY2hhaW4uR2V0SGVpZ2h0JywgVHlwZXMuTnVtYmVyKSxcbiAgKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoXG4gICAgJ0Jsb2NrY2hhaW5Db25zdHJ1Y3RvcicsXG4gICAgJ2N1cnJlbnRUcmFuc2FjdGlvbicsXG4gICAgbmV3IFN5c0NhbGxNZW1iZXJWYWx1ZSgnU3lzdGVtLkV4ZWN1dGlvbkVuZ2luZS5HZXRTY3JpcHRDb250YWluZXInLCBUeXBlcy5UcmFuc2FjdGlvbiksXG4gICk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0TWVtYmVyKCdCbG9ja2NoYWluQ29uc3RydWN0b3InLCAnY3VycmVudENhbGxlckNvbnRyYWN0JywgbmV3IEJsb2NrY2hhaW5DdXJyZW50Q2FsbGVyQ29udHJhY3QoKSk7XG59O1xuIl19