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