@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
49 lines (47 loc) • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.add = void 0;
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=blockchain.js.map