@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
81 lines (79 loc) • 11.4 kB
JavaScript
"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,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QUUsY0FBYztZQUN2QixLQUFLLEVBQUUsY0FBYztZQUNyQixRQUFRLEVBQUUsY0FBYztZQUN4QixNQUFNLEVBQUUsY0FBYztZQUN0QixLQUFLLEVBQUUsY0FBYztTQUN0QixDQUFDLENBQ0gsQ0FBQztRQUVGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUFHWSxRQUFBLEdBQUcsR0FBRyxDQUFDLFFBQWtCLEVBQVEsRUFBRTtJQUM5QyxRQUFRLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM1RSxRQUFRLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEYsUUFBUSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9jb250cmFjdC9jcnlwdG8uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgVHlwZXMsIFdyYXBwYWJsZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1aWx0aW5JbnRlcmZhY2UgfSBmcm9tICcuLi9CdWlsdGluSW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1aWx0aW5NZW1iZXJDYWxsIH0gZnJvbSAnLi4vQnVpbHRpbk1lbWJlckNhbGwnO1xuaW1wb3J0IHsgQnVpbHRpbnMgfSBmcm9tICcuLi9CdWlsdGlucyc7XG5pbXBvcnQgeyBCdWlsdGluVmFsdWVPYmplY3QgfSBmcm9tICcuLi9CdWlsdGluVmFsdWVPYmplY3QnO1xuaW1wb3J0IHsgTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIENyeXB0b0ludGVyZmFjZSBleHRlbmRzIEJ1aWx0aW5JbnRlcmZhY2Uge31cbmNsYXNzIENyeXB0b1ZhbHVlIGV4dGVuZHMgQnVpbHRpblZhbHVlT2JqZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ3J5cHRvQ29uc3RydWN0b3InO1xufVxuXG5jbGFzcyBIYXNoT3AgZXh0ZW5kcyBCdWlsdGluTWVtYmVyQ2FsbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wOiAnU0hBMScgfCAnU0hBMjU2JyB8ICdIQVNIMTYwJyB8ICdIQVNIMjU2Jykge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGVtaXRDYWxsKFxuICAgIHNiOiBTY3JpcHRCdWlsZGVyLFxuICAgIF9mdW5jOiBNZW1iZXJMaWtlRXhwcmVzc2lvbixcbiAgICBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgICBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICBjb25zdCBhcmdzID0gdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmcgPSBhcmdzWzBdO1xuXG4gICAgY29uc3QgdGhyb3dUeXBlRXJyb3IgPSAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRPcChhcmcsICdEUk9QJyk7XG4gICAgICBzYi5lbWl0SGVscGVyKGFyZywgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdW53cmFwID0gKHR5cGU6IFdyYXBwYWJsZVR5cGUpID0+IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW3ZhbHVlXVxuICAgICAgc2IuZW1pdEhlbHBlcihhcmcsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBWYWwoeyB0eXBlIH0pKTtcbiAgICB9O1xuICAgIC8vIFt2YWxdXG4gICAgc2IudmlzaXQoYXJnLCBvcHRpb25zKTtcbiAgICAvLyBbdmFsdWVdXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShhcmcpLFxuICAgICAgICBhcnJheTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG1hcDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHNldDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGJvb2xlYW46IHVud3JhcChUeXBlcy5Cb29sZWFuKSxcbiAgICAgICAgYnVmZmVyOiB1bndyYXAoVHlwZXMuQnVmZmVyKSxcbiAgICAgICAgbnVsbDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG51bWJlcjogdW53cmFwKFR5cGVzLk51bWJlciksXG4gICAgICAgIG9iamVjdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHN0cmluZzogdW53cmFwKFR5cGVzLlN0cmluZyksXG4gICAgICAgIHN5bWJvbDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHVuZGVmaW5lZDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGFycmF5U3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG1hcFN0b3JhZ2U6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBzZXRTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgZXJyb3I6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBmb3J3YXJkVmFsdWU6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBpdGVyYXRvclJlc3VsdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGl0ZXJhYmxlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIHRyYW5zYWN0aW9uOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgb3V0cHV0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgYXR0cmlidXRlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgaW5wdXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBhY2NvdW50OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgYXNzZXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBjb250cmFjdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGhlYWRlcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIGJsb2NrOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW2J1ZmZlcl1cbiAgICBzYi5lbWl0T3Aobm9kZSwgdGhpcy5vcCk7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnNJbiwgc2IuaGVscGVycy53cmFwQnVmZmVyKTtcbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0SW50ZXJmYWNlKCdDcnlwdG9Db25zdHJ1Y3RvcicsIG5ldyBDcnlwdG9JbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0TWVtYmVyKCdDcnlwdG9Db25zdHJ1Y3RvcicsICdzaGExJywgbmV3IEhhc2hPcCgnU0hBMScpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoJ0NyeXB0b0NvbnN0cnVjdG9yJywgJ3NoYTI1NicsIG5ldyBIYXNoT3AoJ1NIQTI1NicpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoJ0NyeXB0b0NvbnN0cnVjdG9yJywgJ2hhc2gxNjAnLCBuZXcgSGFzaE9wKCdIQVNIMTYwJykpO1xuICBidWlsdGlucy5hZGRDb250cmFjdE1lbWJlcignQ3J5cHRvQ29uc3RydWN0b3InLCAnaGFzaDI1NicsIG5ldyBIYXNoT3AoJ0hBU0gyNTYnKSk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0VmFsdWUoJ2NyeXB0bycsIG5ldyBDcnlwdG9WYWx1ZSgpKTtcbn07XG4iXX0=