PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/abstract-eth/dist/test/unit/transactionBuilder
Просмотр файла: addressInitialization.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.testAddressInitializationWithoutContractAddress = testAddressInitializationWithoutContractAddress;
exports.testFailsWithInvalidForwarderVersion = testFailsWithInvalidForwarderVersion;
exports.testAddressInitializationBuildsCorrectlyAndReturnsAddress = testAddressInitializationBuildsCorrectlyAndReturnsAddress;
exports.testAddressInitializationBuildsFromSerializedData = testAddressInitializationBuildsFromSerializedData;
exports.testAddressInitializationBuildsFromSignedSerializedData = testAddressInitializationBuildsFromSignedSerializedData;
exports.testContractCallForCreateForwarder = testContractCallForCreateForwarder;
const should_1 = __importDefault(require("should"));
const sdk_core_1 = require("@bitgo/sdk-core");
async function testAddressInitializationWithoutContractAddress(txBuilder) {
it('should fail if there is no contract address', async () => {
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
txBuilder.fee({
fee: '10',
gasLimit: '1000',
});
txBuilder.counter(1);
await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
});
}
async function testFailsWithInvalidForwarderVersion(txBuilder, testData) {
it('should fail if forwarder version is invalid', async () => {
try {
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
txBuilder.fee({
fee: '10',
gasLimit: '1000',
});
txBuilder.contract(testData.FORWARDER_FACTORY_ADDRESS);
txBuilder.forwarderVersion(3);
}
catch (e) {
should_1.default.equal(e.message, 'Invalid forwarder version: 3');
}
});
}
async function testAddressInitializationBuildsCorrectlyAndReturnsAddress(txBuilder, testData) {
it('should build properly and return a correct address', async () => {
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
txBuilder.fee({
fee: '10',
gasLimit: '1000',
});
txBuilder.counter(1);
txBuilder.contract(testData.FORWARDER_FACTORY_ADDRESS);
txBuilder.baseAddress(testData.BASE_ADDRESS);
txBuilder.feeAddress(testData.FEE_ADDRESS);
txBuilder.forwarderVersion(4);
txBuilder.salt('0x1');
txBuilder.initCode(testData.FORWARDER_IMPLEMENTATION_ADDRESS);
txBuilder.sign({ key: testData.KEYPAIR_PRV.getKeys().prv });
const tx = await txBuilder.build();
const txJson = tx.toJson();
should_1.default.equal(txJson.deployedAddress, testData.DEPLOYED_ADDRESS);
should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
});
}
async function testAddressInitializationBuildsFromSerializedData(txBuilder, testData) {
it('should build properly from serialized', async () => {
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
txBuilder.from(testData.UNSIGNED_ADDRESS_INIT);
const tx = await txBuilder.build();
const txJson = tx.toJson();
should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
});
}
async function testAddressInitializationBuildsFromSignedSerializedData(txBuilder, testData) {
it('should build properly from signed serialized', async () => {
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
txBuilder.from(testData.SIGNED_ADDRESS_INIT);
const tx = await txBuilder.build();
const txJson = tx.toJson();
should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
should_1.default.equal(txJson.from, testData.ACCOUNT_1);
});
}
async function testContractCallForCreateForwarder(txBuilder, testData) {
it('should build properly createForwarder call for recovery', async () => {
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
txBuilder.contract(testData.BASE_ADDRESS);
txBuilder.data(testData.CREATE_FORWARDER_METHOD);
txBuilder.fee({
fee: '10',
gasLimit: '1000',
});
const tx = await txBuilder.build();
const txJson = tx.toJson();
should_1.default.equal(txJson.to, testData.BASE_ADDRESS);
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9hZGRyZXNzSW5pdGlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSwwR0FVQztBQUVELG9GQWNDO0FBRUQsOEhBd0JDO0FBRUQsOEdBUUM7QUFFRCwwSEFZQztBQUVELGdGQWFDO0FBL0ZELG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFHM0MsS0FBSyxVQUFVLCtDQUErQyxDQUFDLFNBQTZCO0lBQ2pHLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLElBQUk7WUFDVCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRU0sS0FBSyxVQUFVLG9DQUFvQyxDQUFDLFNBQTZCLEVBQUUsUUFBYTtJQUNyRyxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0QsSUFBSSxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQztnQkFDWixHQUFHLEVBQUUsSUFBSTtnQkFDVCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEs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QUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsa0NBQWtDLENBQUMsU0FBNkIsRUFBRSxRQUFhO0lBQ25HLEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLElBQUk7WUFDVCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0QWRkcmVzc0luaXRpYWxpemF0aW9uV2l0aG91dENvbnRyYWN0QWRkcmVzcyh0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcikge1xuICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgbm8gY29udHJhY3QgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEZhaWxzV2l0aEludmFsaWRGb3J3YXJkZXJWZXJzaW9uKHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyLCB0ZXN0RGF0YTogYW55KSB7XG4gIGl0KCdzaG91bGQgZmFpbCBpZiBmb3J3YXJkZXIgdmVyc2lvbiBpcyBpbnZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdCh0ZXN0RGF0YS5GT1JXQVJERVJfRkFDVE9SWV9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNob3VsZC5lcXVhbChlLm1lc3NhZ2UsICdJbnZhbGlkIGZvcndhcmRlciB2ZXJzaW9uOiAzJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZHNDb3JyZWN0bHlBbmRSZXR1cm5zQWRkcmVzcyhcbiAgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIHRlc3REYXRhOiBhbnlcbikge1xuICBpdCgnc2hvdWxkIGJ1aWxkIHByb3Blcmx5IGFuZCByZXR1cm4gYSBjb3JyZWN0IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMCcsXG4gICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdCh0ZXN0RGF0YS5GT1JXQVJERVJfRkFDVE9SWV9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuYmFzZUFkZHJlc3ModGVzdERhdGEuQkFTRV9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZmVlQWRkcmVzcyh0ZXN0RGF0YS5GRUVfQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG4gICAgdHhCdWlsZGVyLnNhbHQoJzB4MScpO1xuICAgIHR4QnVpbGRlci5pbml0Q29kZSh0ZXN0RGF0YS5GT1JXQVJERVJfSU1QTEVNRU5UQVRJT05fQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLktFWVBBSVJfUFJWLmdldEtleXMoKS5wcnYgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZGVwbG95ZWRBZGRyZXNzLCB0ZXN0RGF0YS5ERVBMT1lFRF9BRERSRVNTKTtcbiAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCB0ZXN0RGF0YS5GT1JXQVJERVJfRkFDVE9SWV9BRERSRVNTKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRzRnJvbVNlcmlhbGl6ZWREYXRhKHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyLCB0ZXN0RGF0YTogYW55KSB7XG4gIGl0KCdzaG91bGQgYnVpbGQgcHJvcGVybHkgZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pO1xuICAgIHR4QnVpbGRlci5mcm9tKHRlc3REYXRhLlVOU0lHTkVEX0FERFJFU1NfSU5JVCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCB0ZXN0RGF0YS5GT1JXQVJERVJfRkFDVE9SWV9BRERSRVNTKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRzRnJvbVNpZ25lZFNlcmlhbGl6ZWREYXRhKFxuICB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcixcbiAgdGVzdERhdGE6IGFueVxuKSB7XG4gIGl0KCdzaG91bGQgYnVpbGQgcHJvcGVybHkgZnJvbSBzaWduZWQgc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5TSUdORURfQUREUkVTU19JTklUKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVF8xKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q29udHJhY3RDYWxsRm9yQ3JlYXRlRm9yd2FyZGVyKHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyLCB0ZXN0RGF0YTogYW55KSB7XG4gIGl0KCdzaG91bGQgYnVpbGQgcHJvcGVybHkgY3JlYXRlRm9yd2FyZGVyIGNhbGwgZm9yIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdCh0ZXN0RGF0YS5CQVNFX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKHRlc3REYXRhLkNSRUFURV9GT1JXQVJERVJfTUVUSE9EKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCB0ZXN0RGF0YS5CQVNFX0FERFJFU1MpO1xuICB9KTtcbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!