UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

81 lines (79 loc) 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const constants_1 = require("../../constants"); const BuiltinInterface_1 = require("../BuiltinInterface"); const BuiltinMemberCall_1 = require("../BuiltinMemberCall"); const BuiltinValueObject_1 = require("../BuiltinValueObject"); class CryptoInterface extends BuiltinInterface_1.BuiltinInterface { } class CryptoValue extends BuiltinValueObject_1.BuiltinValueObject { constructor() { super(...arguments); this.type = 'CryptoConstructor'; } } class HashOp extends BuiltinMemberCall_1.BuiltinMemberCall { constructor(op) { super(); this.op = op; } emitCall(sb, _func, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const args = ts_utils_1.tsUtils.argumented.getArguments(node); if (args.length === 0) { return; } const arg = args[0]; const throwTypeError = (innerOptions) => { sb.emitOp(arg, 'DROP'); sb.emitHelper(arg, innerOptions, sb.helpers.throwTypeError); }; const unwrap = (type) => (innerOptions) => { sb.emitHelper(arg, innerOptions, sb.helpers.unwrapVal({ type })); }; sb.visit(arg, options); sb.emitHelper(node, options, sb.helpers.forBuiltinType({ type: sb.context.analysis.getType(arg), array: throwTypeError, map: throwTypeError, set: throwTypeError, boolean: unwrap(constants_1.Types.Boolean), buffer: unwrap(constants_1.Types.Buffer), null: throwTypeError, number: unwrap(constants_1.Types.Number), object: throwTypeError, string: unwrap(constants_1.Types.String), symbol: throwTypeError, undefined: throwTypeError, arrayStorage: throwTypeError, mapStorage: throwTypeError, setStorage: throwTypeError, error: throwTypeError, forwardValue: throwTypeError, iteratorResult: throwTypeError, iterable: throwTypeError, iterableIterator: throwTypeError, transaction: throwTypeError, output: throwTypeError, attribute: throwTypeError, input: throwTypeError, account: throwTypeError, asset: throwTypeError, contract: throwTypeError, header: throwTypeError, block: throwTypeError, })); sb.emitOp(node, this.op); sb.emitHelper(node, optionsIn, sb.helpers.wrapBuffer); } } exports.add = (builtins) => { builtins.addContractInterface('CryptoConstructor', new CryptoInterface()); builtins.addContractMember('CryptoConstructor', 'sha1', new HashOp('SHA1')); builtins.addContractMember('CryptoConstructor', 'sha256', new HashOp('SHA256')); builtins.addContractMember('CryptoConstructor', 'hash160', new HashOp('HASH160')); builtins.addContractMember('CryptoConstructor', 'hash256', new HashOp('HASH256')); builtins.addContractValue('crypto', new CryptoValue()); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyeXB0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUE0QztBQUU1QywrQ0FBdUQ7QUFHdkQsMERBQXVEO0FBQ3ZELDREQUF5RDtBQUV6RCw4REFBMkQ7QUFHM0QsTUFBTSxlQUFnQixTQUFRLG1DQUFnQjtDQUFHO0FBQ2pELE1BQU0sV0FBWSxTQUFRLHVDQUFrQjtJQUE1Qzs7UUFDa0IsU0FBSSxHQUFHLG1CQUFtQixDQUFDO0lBQzdDLENBQUM7Q0FBQTtBQUVELE1BQU0sTUFBTyxTQUFRLHFDQUFpQjtJQUNwQyxZQUFvQyxFQUE2QztRQUMvRSxLQUFLLEVBQUUsQ0FBQztRQUQwQixPQUFFLEdBQUYsRUFBRSxDQUEyQztJQUVqRixDQUFDO0lBQ00sUUFBUSxDQUNiLEVBQWlCLEVBQ2pCLEtBQTJCLEVBQzNCLElBQXVCLEVBQ3ZCLFNBQXVCO1FBRXZCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxZQUEwQixFQUFFLEVBQUU7WUFDcEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtZQUVyRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDO1FBRUYsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ3hCLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3RDLEtBQUssRUFBRSxjQUFjO1lBQ3JCLEdBQUcsRUFBRSxjQUFjO1lBQ25CLEdBQUcsRUFBRSxjQUFjO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsaUJBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxpQkFBSyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEVBQUUsY0FBYztZQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFLLENBQUMsTUFBTSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsaUJBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsTUFBTSxFQUFFLGNBQWM7WUFDdEIsU0FBUyxFQUFFLGNBQWM7WUFDekIsWUFBWSxFQUFFLGNBQWM7WUFDNUIsVUFBVSxFQUFFLGNBQWM7WUFDMUIsVUFBVSxFQUFFLGNBQWM7WUFDMUIsS0FBSyxFQUFFLGNBQWM7WUFDckIsWUFBWSxFQUFFLGNBQWM7WUFDNUIsY0FBYyxFQUFFLGNBQWM7WUFDOUIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsZ0JBQWdCLEVBQUUsY0FBYztZQUNoQyxXQUFXLEVBQUUsY0FBYztZQUMzQixNQUFNLEVBQUUsY0FBYztZQUN0QixTQUFTLEVBQUUsY0FBYztZQUN6QixLQUFLLEVBQUUsY0FBYztZQUNyQixPQUFPLEVBQUUsY0FBYztZQUN2QixLQUFLLEVBQUUsY0FBYztZQUNyQixRQUFRLEVBQUUsY0FBYztZQUN4QixNQUFNLEVBQUUsY0FBYztZQUN0QixLQUFLLEVBQUUsY0FBYztTQUN0QixDQUFDLENBQ0gsQ0FBQztRQUVGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUFHWSxRQUFBLEdBQUcsR0FBRyxDQUFDLFFBQWtCLEVBQVEsRUFBRTtJQUM5QyxRQUFRLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM1RSxRQUFRLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEYsUUFBUSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9jb250cmFjdC9jcnlwdG8uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgVHlwZXMsIFdyYXBwYWJsZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1aWx0aW5JbnRlcmZhY2UgfSBmcm9tICcuLi9CdWlsdGluSW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1aWx0aW5NZW1iZXJDYWxsIH0gZnJvbSAnLi4vQnVpbHRpbk1lbWJlckNhbGwnO1xuaW1wb3J0IHsgQnVpbHRpbnMgfSBmcm9tICcuLi9CdWlsdGlucyc7XG5pbXBvcnQgeyBCdWlsdGluVmFsdWVPYmplY3QgfSBmcm9tICcuLi9CdWlsdGluVmFsdWVPYmplY3QnO1xuaW1wb3J0IHsgTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIENyeXB0b0ludGVyZmFjZSBleHRlbmRzIEJ1aWx0aW5JbnRlcmZhY2Uge31cbmNsYXNzIENyeXB0b1ZhbHVlIGV4dGVuZHMgQnVpbHRpblZhbHVlT2JqZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ3J5cHRvQ29uc3RydWN0b3InO1xufVxuXG5jbGFzcyBIYXNoT3AgZXh0ZW5kcyBCdWlsdGluTWVtYmVyQ2FsbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wOiAnU0hBMScgfCAnU0hBMjU2JyB8ICdIQVNIMTYwJyB8ICdIQVNIMjU2Jykge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGVtaXRDYWxsKFxuICAgIHNiOiBTY3JpcHRCdWlsZGVyLFxuICAgIF9mdW5jOiBNZW1iZXJMaWtlRXhwcmVzc2lvbixcbiAgICBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgICBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICBjb25zdCBhcmdzID0gdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmcgPSBhcmdzWzBdO1xuXG4gICAgY29uc3QgdGhyb3dUeXBlRXJyb3IgPSAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRPcChhcmcsICdEUk9QJyk7XG4gICAgICBzYi5lbWl0SGVscGVyKGFyZywgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW53cmFwID0gKHR5cGU6IFdyYXBwYWJsZVR5cGUpID0+IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW3ZhbHVlXVxuICAgICAgc2IuZW1pdEhlbHBlcihhcmcsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBWYWwoeyB0eXBlIH0pKTtcbiAgICB9O1xuICAgIC8vIFt2YWxdXG4gICAgc2IudmlzaXQoYXJnLCBvcHRpb25zKTtcbiAgICAvLyBbdmFsdWVdXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShhcmcpLFxuICAgICAgICBhcnJheTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG1hcDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHNldDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGJvb2xlYW46IHVud3JhcChUeXBlcy5Cb29sZWFuKSxcbiAgICAgICAgYnVmZmVyOiB1bndyYXAoVHlwZXMuQnVmZmVyKSxcbiAgICAgICAgbnVsbDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG51bWJlcjogdW53cmFwKFR5cGVzLk51bWJlciksXG4gICAgICAgIG9iamVjdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHN0cmluZzogdW53cmFwKFR5cGVzLlN0cmluZyksXG4gICAgICAgIHN5bWJvbDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHVuZGVmaW5lZDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGFycmF5U3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG1hcFN0b3JhZ2U6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBzZXRTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgZXJyb3I6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBmb3J3YXJkVmFsdWU6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBpdGVyYXRvclJlc3VsdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGl0ZXJhYmxlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHRyYW5zYWN0aW9uOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgb3V0cHV0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgYXR0cmlidXRlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgaW5wdXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBhY2NvdW50OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgYXNzZXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBjb250cmFjdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGhlYWRlcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGJsb2NrOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW2J1ZmZlcl1cbiAgICBzYi5lbWl0T3Aobm9kZSwgdGhpcy5vcCk7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnNJbiwgc2IuaGVscGVycy53cmFwQnVmZmVyKTtcbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0SW50ZXJmYWNlKCdDcnlwdG9Db25zdHJ1Y3RvcicsIG5ldyBDcnlwdG9JbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0TWVtYmVyKCdDcnlwdG9Db25zdHJ1Y3RvcicsICdzaGExJywgbmV3IEhhc2hPcCgnU0hBMScpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoJ0NyeXB0b0NvbnN0cnVjdG9yJywgJ3NoYTI1NicsIG5ldyBIYXNoT3AoJ1NIQTI1NicpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoJ0NyeXB0b0NvbnN0cnVjdG9yJywgJ2hhc2gxNjAnLCBuZXcgSGFzaE9wKCdIQVNIMTYwJykpO1xuICBidWlsdGlucy5hZGRDb250cmFjdE1lbWJlcignQ3J5cHRvQ29uc3RydWN0b3InLCAnaGFzaDI1NicsIG5ldyBIYXNoT3AoJ0hBU0gyNTYnKSk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0VmFsdWUoJ2NyeXB0bycsIG5ldyBDcnlwdG9WYWx1ZSgpKTtcbn07XG4iXX0=