PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-opeth/dist/test/unit/transactionBuilder
Просмотр файла: walletInitialization.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const should_1 = __importDefault(require("should"));
const sdk_core_1 = require("@bitgo/sdk-core");
const src_1 = require("../../../src");
const testData = __importStar(require("../../resources"));
const statics_1 = require("@bitgo/statics");
describe('Opeth wallet initialization', function () {
let txBuilder;
const initTxBuilder = () => {
txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('topeth'));
txBuilder.fee({
fee: '10000000000',
gasLimit: '6800000',
});
txBuilder.counter(1);
txBuilder.type(sdk_core_1.TransactionType.WalletInitialization);
txBuilder.walletVersion(4);
txBuilder.contract(testData.WALLET_FACTORY_ADDRESS);
txBuilder.salt('0x0');
};
describe('should build', () => {
it('an init transaction', async () => {
initTxBuilder();
txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
const tx = await txBuilder.build();
tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
const txJson = tx.toJson();
txJson.gasLimit.should.equal('6800000');
txJson.gasPrice.should.equal('10000000000');
should_1.default.equal(txJson.nonce, 1);
should_1.default.equal(txJson.chainId, '0xaa37dc');
should_1.default.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST);
});
it('a signed init transaction from serialized', async () => {
const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('topeth'));
newTxBuilder.from(testData.TX_BROADCAST);
const newTx = await newTxBuilder.build();
should_1.default.equal(newTx.toBroadcastFormat(), testData.TX_BROADCAST);
should_1.default.equal(newTx.id, '0x4f9ac32512aeef15e2b3e4bd79643c6f77f93b462f20f1f3d3e48d5905d12add');
const txJson = newTx.toJson();
should_1.default.exist(txJson.v);
should_1.default.exist(txJson.r);
should_1.default.exist(txJson.s);
should_1.default.exist(txJson.from);
});
it('a wallet initialization transaction with nonce 0', async () => {
initTxBuilder();
txBuilder.counter(0);
txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
const tx = await txBuilder.build();
tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
const txJson = tx.toJson();
txJson.gasLimit.should.equal('6800000');
txJson.gasPrice.should.equal('10000000000');
should_1.default.equal(txJson.nonce, 0);
should_1.default.equal(txJson.chainId, '0xaa37dc');
});
it('an unsigned init transaction from serialized with 0-prefixed address', async () => {
initTxBuilder();
txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
const tx = await txBuilder.build();
const serialized = tx.toBroadcastFormat();
const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('topeth'));
newTxBuilder.from(serialized);
const newTx = await newTxBuilder.build();
should_1.default.equal(newTx.toBroadcastFormat(), serialized);
});
it('an unsigned init transaction from serialized', async () => {
initTxBuilder();
txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
const tx = await txBuilder.build();
const serialized = tx.toBroadcastFormat();
const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('topeth'));
newTxBuilder.from(serialized);
const newTx = await newTxBuilder.build();
should_1.default.equal(newTx.toBroadcastFormat(), serialized);
});
it('an unsigned transaction with final v check', async () => {
initTxBuilder();
txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
const tx = await txBuilder.build();
should_1.default.equal(tx.toJson().v, '0x01546fdb');
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3dhbGxldEluaXRpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhDQUFrRDtBQUNsRCxzQ0FBa0Q7QUFDbEQsMERBQTRDO0FBQzVDLDRDQUF1QztBQUV2QyxRQUFRLENBQUMsNkJBQTZCLEVBQUU7SUFDdEMsSUFBSSxTQUE2QixDQUFDO0lBQ2xDLE1BQU0sYUFBYSxHQUFHLEdBQVMsRUFBRTtRQUMvQixTQUFTLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEQsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNaLEdBQUcsRUFBRSxhQUFhO1lBQ2xCLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25DLGFBQWEsRUFBRSxDQUFDO1lBRWhCLFNBQVMsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM5RCxTQUFT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QUM7WUFDOUQsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzlELFNBQVMsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM5RCxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFELGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFNBQVMsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM5RCxTQUFTLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDOUQsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmRlc2NyaWJlKCdPcGV0aCB3YWxsZXQgaW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgY29uc3QgaW5pdFR4QnVpbGRlciA9ICgpOiB2b2lkID0+IHtcbiAgICB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndG9wZXRoJykpO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICc2ODAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgIHR4QnVpbGRlci53YWxsZXRWZXJzaW9uKDQpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdCh0ZXN0RGF0YS5XQUxMRVRfRkFDVE9SWV9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuc2FsdCgnMHgwJyk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsICgpID0+IHtcbiAgICBpdCgnYW4gaW5pdCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGluaXRUeEJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGU2YzQzNjI2ZjExMzEyZGUyOWIwMDExZmE5ZGE3MWVhM2JiYTBlOWYnKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHg3OGNhZWI0NTI3MTcwZTUyZjU0ZDkzNmU0ZWVmNmY4MzI1MGUwMWJiJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4YjE5MzgyMTU5Njc0MDhmZmY3YzU5Yzc3YWU1ZTUyODNiNTVjOGUyNicpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZXzEgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzY4MDAwMDAnKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZS5zaG91bGQuZXF1YWwoJzEwMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uY2hhaW5JZCwgJzB4YWEzN2RjJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVFhfQlJPQURDQVNUKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNpZ25lZCBpbml0IHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0b3BldGgnKSk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5UWF9CUk9BRENBU1QpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5UWF9CUk9BRENBU1QpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LmlkLCAnMHg0ZjlhYzMyNTEyYWVlZjE1ZTJiM2U0YmQ3OTY0M2M2Zjc3ZjkzYjQ2MmYyMGYxZjNkM2U0OGQ1OTA1ZDEyYWRkJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSBuZXdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24udik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnIpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5zKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZnJvbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gd2l0aCBub25jZSAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVlfMSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzY4MDAwMDAnKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZS5zaG91bGQuZXF1YWwoJzEwMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uY2hhaW5JZCwgJzB4YWEzN2RjJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgaW5pdCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQgd2l0aCAwLXByZWZpeGVkIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0b3BldGgnKSk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgaW5pdCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0b3BldGgnKSk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBmaW5hbCB2IGNoZWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGU2YzQzNjI2ZjExMzEyZGUyOWIwMDExZmE5ZGE3MWVhM2JiYTBlOWYnKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHg3OGNhZWI0NTI3MTcwZTUyZjU0ZDkzNmU0ZWVmNmY4MzI1MGUwMWJiJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4YjE5MzgyMTU5Njc0MDhmZmY3YzU5Yzc3YWU1ZTUyODNiNTVjOGUyNicpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS52LCAnMHgwMTU0NmZkYicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!