PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-rbtc/dist/test/unit/transactionBuilder

Просмотр файла: send.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('Rbtc send transaction', function () {
    let txBuilder;
    const contractAddress = '0xab52bc0aff1b4851a60c1e5e628b1da995445651';
    const initTxBuilder = () => {
        txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('trbtc'));
        txBuilder.fee({
            fee: '1000000000',
            gasLimit: '12100000',
        });
        txBuilder.counter(2);
        txBuilder.type(sdk_core_1.TransactionType.Send);
        txBuilder.contract(contractAddress);
    };
    const key = testData.KEYPAIR_PRV.getKeys().prv;
    it('a send funds transaction', async () => {
        initTxBuilder();
        const recipient = testData.ACCOUNT_2;
        const amount = '1000000000';
        txBuilder.transfer().amount(amount).to(recipient).expirationTime(1590066728).contractSequenceId(5).key(key);
        txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
        const tx = await txBuilder.build();
        should_1.default.equal(tx.toJson().chainId, 31);
        should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TX_BROADCAST);
        should_1.default.equal(tx.signature.length, 2);
        should_1.default.equal(tx.inputs.length, 1);
        should_1.default.equal(tx.inputs[0].address, contractAddress);
        should_1.default.equal(tx.inputs[0].value, amount);
        should_1.default.equal(tx.outputs.length, 1);
        should_1.default.equal(tx.outputs[0].address, recipient);
        should_1.default.equal(tx.outputs[0].value, amount);
    });
    it('a send funds unsigned transaction with final v', async () => {
        initTxBuilder();
        const recipient = testData.ACCOUNT_2;
        const amount = '1000000000';
        txBuilder.transfer().amount(amount).to(recipient).expirationTime(1590066728).contractSequenceId(5).key(key);
        const tx = await txBuilder.build();
        should_1.default.equal(tx.toJson().v, '0x61');
    });
    it('a send funds with amount 0 transaction', async () => {
        initTxBuilder();
        txBuilder.transfer().amount('0').to(testData.ACCOUNT_2).expirationTime(1590066728).contractSequenceId(5).key(key);
        txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
        const tx = await txBuilder.build();
        should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
    });
});
describe('should sign and build from serialized', () => {
    it('a send funds transaction from serialized', async () => {
        const txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('trbtc'));
        txBuilder.from(testData.SEND_TX_BROADCAST);
        const signedTx = await txBuilder.build();
        should_1.default.equal(signedTx.toBroadcastFormat(), testData.SEND_TX_BROADCAST);
    });
    it('a send funds transaction with amount 0 from serialized', async () => {
        const txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('trbtc'));
        txBuilder.from(testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
        const signedTx = await txBuilder.build();
        should_1.default.equal(signedTx.toBroadcastFormat(), testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFFbEQsc0NBQWtEO0FBQ2xELDBEQUE0QztBQUM1Qyw0Q0FBdUM7QUFFdkMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLElBQUksU0FBNkIsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLGFBQWEsR0FBRyxHQUFTLEVBQUU7UUFDL0IsU0FBUyxHQUFHLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDWixHQUFHLEVBQUUsWUFBWTtZQUNqQixRQUFRLEVBQUUsVUFBVTtTQUNyQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBYSxDQUFDO0lBRXpELEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4QyxhQUFhLEVBQUUsQ0FBQztRQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUM1QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0s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QUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtJQUNyRCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLHdCQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5kZXNjcmliZSgnUmJ0YyBzZW5kIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9ICcweGFiNTJiYzBhZmYxYjQ4NTFhNjBjMWU1ZTYyOGIxZGE5OTU0NDU2NTEnO1xuICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0cmJ0YycpKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICB9O1xuXG4gIGNvbnN0IGtleSA9IHRlc3REYXRhLktFWVBBSVJfUFJWLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuXG4gIGl0KCdhIHNlbmQgZnVuZHMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgaW5pdFR4QnVpbGRlcigpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHRlc3REYXRhLkFDQ09VTlRfMjtcbiAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMCc7XG4gICAgdHhCdWlsZGVyLnRyYW5zZmVyKCkuYW1vdW50KGFtb3VudCkudG8ocmVjaXBpZW50KS5leHBpcmF0aW9uVGltZSgxNTkwMDY2NzI4KS5jb250cmFjdFNlcXVlbmNlSWQoNSkua2V5KGtleSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZXzEgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuY2hhaW5JZCwgMzEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUKTtcbiAgICBzaG91bGQuZXF1YWwodHguc2lnbmF0dXJlLmxlbmd0aCwgMik7XG4gICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgY29udHJhY3RBZGRyZXNzKTtcbiAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLnZhbHVlLCBhbW91bnQpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgcmVjaXBpZW50KTtcbiAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgYW1vdW50KTtcbiAgfSk7XG5cbiAgaXQoJ2Egc2VuZCBmdW5kcyB1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIGZpbmFsIHYnLCBhc3luYyAoKSA9PiB7XG4gICAgaW5pdFR4QnVpbGRlcigpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHRlc3REYXRhLkFDQ09VTlRfMjtcbiAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMCc7XG4gICAgdHhCdWlsZGVyLnRyYW5zZmVyKCkuYW1vdW50KGFtb3VudCkudG8ocmVjaXBpZW50KS5leHBpcmF0aW9uVGltZSgxNTkwMDY2NzI4KS5jb250cmFjdFNlcXVlbmNlSWQoNSkua2V5KGtleSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkudiwgJzB4NjEnKTtcbiAgfSk7XG5cbiAgaXQoJ2Egc2VuZCBmdW5kcyB3aXRoIGFtb3VudCAwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGluaXRUeEJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIudHJhbnNmZXIoKS5hbW91bnQoJzAnKS50byh0ZXN0RGF0YS5BQ0NPVU5UXzIpLmV4cGlyYXRpb25UaW1lKDE1OTAwNjY3MjgpLmNvbnRyYWN0U2VxdWVuY2VJZCg1KS5rZXkoa2V5KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVlfMSB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TRU5EX1RYX0FNT1VOVF9aRVJPX0JST0FEQ0FTVCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgZnJvbSBzZXJpYWxpemVkJywgKCkgPT4ge1xuICBpdCgnYSBzZW5kIGZ1bmRzIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHJidGMnKSk7XG4gICAgdHhCdWlsZGVyLmZyb20odGVzdERhdGEuU0VORF9UWF9CUk9BRENBU1QpO1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUKTtcbiAgfSk7XG5cbiAgaXQoJ2Egc2VuZCBmdW5kcyB0cmFuc2FjdGlvbiB3aXRoIGFtb3VudCAwIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHJidGMnKSk7XG4gICAgdHhCdWlsZGVyLmZyb20odGVzdERhdGEuU0VORF9UWF9BTU9VTlRfWkVST19CUk9BRENBU1QpO1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVFhfQU1PVU5UX1pFUk9fQlJPQURDQVNUKTtcbiAgfSk7XG59KTtcbiJdfQ==

Выполнить команду


Для локальной разработки. Не используйте в интернете!