PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/test/integration_local_rpc

Просмотр файла: compare.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeParsedTransaction = normalizeParsedTransaction;
exports.normalizeRpcTransaction = normalizeRpcTransaction;
const address = require("../../src/address");
const networks_1 = require("../../src/networks");
const testutil_1 = require("../testutil");
function toRegtestAddress(script, network) {
    switch (network) {
        case networks_1.networks.testnet:
            network = { ...network, bech32: 'bcrt' };
            break;
        case networks_1.networks.litecoinTest:
            network = { ...network, bech32: 'rltc' };
            break;
        case networks_1.networks.bitcoingoldTestnet:
            network = { ...network, bech32: 'btgrt' };
            break;
    }
    return address.fromOutputScript(script, network);
}
function normalizeParsedTransaction(tx, network = tx.network) {
    const normalizedTx = {
        txid: tx.getId(),
        version: tx.version,
        hex: tx.toBuffer().toString('hex'),
        locktime: tx.locktime,
        size: tx.byteLength(),
        vin: tx.ins.map((i) => {
            const normalizedInput = {
                scriptSig: {
                    hex: i.script.toString('hex'),
                },
                sequence: i.sequence,
                txid: Buffer.from(i.hash).reverse().toString('hex'),
                vout: i.index,
            };
            if (i.witness && i.witness.length) {
                normalizedInput.txinwitness = i.witness.map((w) => w.toString('hex'));
            }
            return normalizedInput;
        }),
        vout: tx.outs.map((o, n) => {
            let address;
            try {
                address = toRegtestAddress(o.script, network);
            }
            catch (e) {
                // ignore
            }
            return {
                n,
                scriptPubKey: {
                    hex: o.script.toString('hex'),
                    ...(address && { address }),
                },
                value: o.value.toString(),
            };
        }),
    };
    switch ((0, networks_1.getMainnet)(network)) {
        case networks_1.networks.bitcoin:
        case networks_1.networks.bitcoingold:
        case networks_1.networks.litecoin:
            normalizedTx.vsize = tx.virtualSize();
            normalizedTx.weight = tx.weight();
            break;
        case networks_1.networks.dash:
            const dashTx = tx;
            normalizedTx.type = dashTx.type;
            if (dashTx.extraPayload && dashTx.extraPayload.length) {
                normalizedTx.extraPayload = dashTx.extraPayload.toString('hex');
                normalizedTx.extraPayloadSize = dashTx.extraPayload.length;
            }
            break;
        case networks_1.networks.dogecoin:
            normalizedTx.vsize = tx.virtualSize();
            break;
        case networks_1.networks.zcash:
            const zcashTx = tx;
            normalizedTx.overwintered = !!zcashTx.overwintered;
            normalizedTx.versiongroupid = zcashTx.versionGroupId.toString(16);
            normalizedTx.expiryheight = zcashTx.expiryHeight;
            normalizedTx.vjoinsplit = [];
            normalizedTx.vShieldedOutput = [];
            normalizedTx.vShieldedSpend = [];
            normalizedTx.valueBalance = 0;
    }
    return normalizedTx;
}
function normalizeRpcTransaction(tx, network) {
    const normalizedTx = {
        ...tx,
        vin: tx.vin.map((v) => {
            delete v.scriptSig.asm;
            return v;
        }),
        vout: tx.vout.map((v) => {
            if (v.scriptPubKey.addresses?.length === 1) {
                v.scriptPubKey.address = v.scriptPubKey.addresses[0];
            }
            delete v.type;
            delete v.scriptPubKey.asm;
            delete v.scriptPubKey.addresses;
            delete v.scriptPubKey.reqSigs;
            delete v.scriptPubKey.type;
            delete v.valueSat;
            if ((0, networks_1.isZcash)(network)) {
                delete v.valueZat;
            }
            v.value = (0, testutil_1.decimalCoinsToSats)(v.value, 'bigint').toString();
            return v;
        }),
    };
    switch ((0, networks_1.getMainnet)(network)) {
        case networks_1.networks.bitcoin:
        case networks_1.networks.bitcoincash:
        case networks_1.networks.bitcoinsv:
        case networks_1.networks.bitcoingold:
        case networks_1.networks.dogecoin:
        case networks_1.networks.ecash:
        case networks_1.networks.litecoin:
            // this is the normalized hash which is not implemented in utxolib
            delete normalizedTx.hash;
            break;
        case networks_1.networks.dash:
            // these flags are not supported in utxolib
            delete normalizedTx.chainlock;
            delete normalizedTx.instantlock;
            delete normalizedTx.instantlock_internal;
            delete normalizedTx.proRegTx;
            delete normalizedTx.proUpServTx;
            delete normalizedTx.proUpRevTx;
            delete normalizedTx.proUpRegTx;
            break;
        case networks_1.networks.zcash:
            delete normalizedTx.authdigest;
            delete normalizedTx.valueBalanceZat;
    }
    return normalizedTx;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvaW50ZWdyYXRpb25fbG9jYWxfcnBjL2NvbXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3QkEsZ0VBMEVDO0FBRUQsMERBb0RDO0FBeEpELDZDQUE2QztBQUM3QyxpREFBNEU7QUFFNUUsMENBQWlEO0FBTWpELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLE9BQTRCO0lBQ3BFLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxtQkFBUSxDQUFDLE9BQU87WUFDbkIsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pDLE1BQU07UUFDUixLQUFLLG1CQUFRLENBQUMsWUFBWTtZQUN4QixPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTTtRQUNSLEtBQUssbUJBQVEsQ0FBQyxrQkFBa0I7WUFDOUIsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU07SUFDVixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQWtCLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQ3hDLEVBQTRCLEVBQzVCLFVBQW1CLEVBQUUsQ0FBQyxPQUFPO0lBRTdCLE1BQU0sWUFBWSxHQUFxQjtRQUNyQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNoQixPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87UUFDbkIsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2xDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUTtRQUNyQixJQUFJLEVBQUUsRUFBRSxD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Qy9CLE1BQU07UUFDUixLQUFLLG1CQUFRLENBQUMsS0FBSztZQUNqQixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDL0IsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWRkcmVzcyBmcm9tICcuLi8uLi9zcmMvYWRkcmVzcyc7XG5pbXBvcnQgeyBOZXR3b3JrLCBnZXRNYWlubmV0LCBuZXR3b3JrcywgaXNaY2FzaCB9IGZyb20gJy4uLy4uL3NyYy9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBEYXNoVHJhbnNhY3Rpb24sIFV0eG9UcmFuc2FjdGlvbiwgWmNhc2hUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9iaXRnbyc7XG5pbXBvcnQgeyBkZWNpbWFsQ29pbnNUb1NhdHMgfSBmcm9tICcuLi90ZXN0dXRpbCc7XG5cbmltcG9ydCB7IFJwY1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9nZW5lcmF0ZS9ScGNUeXBlcyc7XG5cbnR5cGUgTm9ybWFsaXplZE9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5mdW5jdGlvbiB0b1JlZ3Rlc3RBZGRyZXNzKHNjcmlwdDogQnVmZmVyLCBuZXR3b3JrOiB7IGJlY2gzMj86IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgc3dpdGNoIChuZXR3b3JrKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy50ZXN0bmV0OlxuICAgICAgbmV0d29yayA9IHsgLi4ubmV0d29yaywgYmVjaDMyOiAnYmNydCcgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbmV0d29ya3MubGl0ZWNvaW5UZXN0OlxuICAgICAgbmV0d29yayA9IHsgLi4ubmV0d29yaywgYmVjaDMyOiAncmx0YycgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGRUZXN0bmV0OlxuICAgICAgbmV0d29yayA9IHsgLi4ubmV0d29yaywgYmVjaDMyOiAnYnRncnQnIH07XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdCwgbmV0d29yayBhcyBOZXR3b3JrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBuZXR3b3JrOiBOZXR3b3JrID0gdHgubmV0d29ya1xuKTogTm9ybWFsaXplZE9iamVjdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUeDogTm9ybWFsaXplZE9iamVjdCA9IHtcbiAgICB0eGlkOiB0eC5nZXRJZCgpLFxuICAgIHZlcnNpb246IHR4LnZlcnNpb24sXG4gICAgaGV4OiB0eC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBsb2NrdGltZTogdHgubG9ja3RpbWUsXG4gICAgc2l6ZTogdHguYnl0ZUxlbmd0aCgpLFxuICAgIHZpbjogdHguaW5zLm1hcCgoaSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZElucHV0OiBOb3JtYWxpemVkT2JqZWN0ID0ge1xuICAgICAgICBzY3JpcHRTaWc6IHtcbiAgICAgICAgICBoZXg6IGkuc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VxdWVuY2U6IGkuc2VxdWVuY2UsXG4gICAgICAgIHR4aWQ6IEJ1ZmZlci5mcm9tKGkuaGFzaCkucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdm91dDogaS5pbmRleCxcbiAgICAgIH07XG5cbiAgICAgIGlmIChpLndpdG5lc3MgJiYgaS53aXRuZXNzLmxlbmd0aCkge1xuICAgICAgICBub3JtYWxpemVkSW5wdXQudHhpbndpdG5lc3MgPSBpLndpdG5lc3MubWFwKCh3KSA9PiB3LnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfSksXG4gICAgdm91dDogdHgub3V0cy5tYXAoKG8sIG4pID0+IHtcbiAgICAgIGxldCBhZGRyZXNzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWRkcmVzcyA9IHRvUmVndGVzdEFkZHJlc3Moby5zY3JpcHQsIG5ldHdvcmsgYXMgeyBiZWNoMzI/OiBzdHJpbmcgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbixcbiAgICAgICAgc2NyaXB0UHViS2V5OiB7XG4gICAgICAgICAgaGV4OiBvLnNjcmlwdC50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgLi4uKGFkZHJlc3MgJiYgeyBhZGRyZXNzIH0pLFxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogby52YWx1ZS50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9KSxcbiAgfTtcblxuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW46XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmxpdGVjb2luOlxuICAgICAgbm9ybWFsaXplZFR4LnZzaXplID0gdHgudmlydHVhbFNpemUoKTtcbiAgICAgIG5vcm1hbGl6ZWRUeC53ZWlnaHQgPSB0eC53ZWlnaHQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbmV0d29ya3MuZGFzaDpcbiAgICAgIGNvbnN0IGRhc2hUeCA9IHR4IGFzIHVua25vd24gYXMgRGFzaFRyYW5zYWN0aW9uO1xuICAgICAgbm9ybWFsaXplZFR4LnR5cGUgPSBkYXNoVHgudHlwZTtcbiAgICAgIGlmIChkYXNoVHguZXh0cmFQYXlsb2FkICYmIGRhc2hUeC5leHRyYVBheWxvYWQubGVuZ3RoKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRUeC5leHRyYVBheWxvYWQgPSBkYXNoVHguZXh0cmFQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgbm9ybWFsaXplZFR4LmV4dHJhUGF5bG9hZFNpemUgPSBkYXNoVHguZXh0cmFQYXlsb2FkLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbmV0d29ya3MuZG9nZWNvaW46XG4gICAgICBub3JtYWxpemVkVHgudnNpemUgPSB0eC52aXJ0dWFsU2l6ZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuZXR3b3Jrcy56Y2FzaDpcbiAgICAgIGNvbnN0IHpjYXNoVHggPSB0eCBhcyB1bmtub3duIGFzIFpjYXNoVHJhbnNhY3Rpb247XG4gICAgICBub3JtYWxpemVkVHgub3ZlcndpbnRlcmVkID0gISF6Y2FzaFR4Lm92ZXJ3aW50ZXJlZDtcbiAgICAgIG5vcm1hbGl6ZWRUeC52ZXJzaW9uZ3JvdXBpZCA9IHpjYXNoVHgudmVyc2lvbkdyb3VwSWQudG9TdHJpbmcoMTYpO1xuICAgICAgbm9ybWFsaXplZFR4LmV4cGlyeWhlaWdodCA9IHpjYXNoVHguZXhwaXJ5SGVpZ2h0O1xuICAgICAgbm9ybWFsaXplZFR4LnZqb2luc3BsaXQgPSBbXTtcbiAgICAgIG5vcm1hbGl6ZWRUeC52U2hpZWxkZWRPdXRwdXQgPSBbXTtcbiAgICAgIG5vcm1hbGl6ZWRUeC52U2hpZWxkZWRTcGVuZCA9IFtdO1xuICAgICAgbm9ybWFsaXplZFR4LnZhbHVlQmFsYW5jZSA9IDA7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFR4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUnBjVHJhbnNhY3Rpb24odHg6IFJwY1RyYW5zYWN0aW9uLCBuZXR3b3JrOiBOZXR3b3JrKTogTm9ybWFsaXplZE9iamVjdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUeDogTm9ybWFsaXplZE9iamVjdCA9IHtcbiAgICAuLi50eCxcbiAgICB2aW46IHR4LnZpbi5tYXAoKHY6IGFueSkgPT4ge1xuICAgICAgZGVsZXRlIHYuc2NyaXB0U2lnLmFzbTtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pLFxuICAgIHZvdXQ6IHR4LnZvdXQubWFwKCh2OiBhbnkpID0+IHtcbiAgICAgIGlmICh2LnNjcmlwdFB1YktleS5hZGRyZXNzZXM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2LnNjcmlwdFB1YktleS5hZGRyZXNzID0gdi5zY3JpcHRQdWJLZXkuYWRkcmVzc2VzWzBdO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHYudHlwZTtcbiAgICAgIGRlbGV0ZSB2LnNjcmlwdFB1YktleS5hc207XG4gICAgICBkZWxldGUgdi5zY3JpcHRQdWJLZXkuYWRkcmVzc2VzO1xuICAgICAgZGVsZXRlIHYuc2NyaXB0UHViS2V5LnJlcVNpZ3M7XG4gICAgICBkZWxldGUgdi5zY3JpcHRQdWJLZXkudHlwZTtcbiAgICAgIGRlbGV0ZSB2LnZhbHVlU2F0O1xuICAgICAgaWYgKGlzWmNhc2gobmV0d29yaykpIHtcbiAgICAgICAgZGVsZXRlIHYudmFsdWVaYXQ7XG4gICAgICB9XG4gICAgICB2LnZhbHVlID0gZGVjaW1hbENvaW5zVG9TYXRzPGJpZ2ludD4odi52YWx1ZSwgJ2JpZ2ludCcpLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9KSxcbiAgfTtcblxuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW46XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5nb2xkOlxuICAgIGNhc2UgbmV0d29ya3MuZG9nZWNvaW46XG4gICAgY2FzZSBuZXR3b3Jrcy5lY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmxpdGVjb2luOlxuICAgICAgLy8gdGhpcyBpcyB0aGUgbm9ybWFsaXplZCBoYXNoIHdoaWNoIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB1dHhvbGliXG4gICAgICBkZWxldGUgbm9ybWFsaXplZFR4Lmhhc2g7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5ldHdvcmtzLmRhc2g6XG4gICAgICAvLyB0aGVzZSBmbGFncyBhcmUgbm90IHN1cHBvcnRlZCBpbiB1dHhvbGliXG4gICAgICBkZWxldGUgbm9ybWFsaXplZFR4LmNoYWlubG9jaztcbiAgICAgIGRlbGV0ZSBub3JtYWxpemVkVHguaW5zdGFudGxvY2s7XG4gICAgICBkZWxldGUgbm9ybWFsaXplZFR4Lmluc3RhbnRsb2NrX2ludGVybmFsO1xuICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRUeC5wcm9SZWdUeDtcbiAgICAgIGRlbGV0ZSBub3JtYWxpemVkVHgucHJvVXBTZXJ2VHg7XG4gICAgICBkZWxldGUgbm9ybWFsaXplZFR4LnByb1VwUmV2VHg7XG4gICAgICBkZWxldGUgbm9ybWFsaXplZFR4LnByb1VwUmVnVHg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOlxuICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRUeC5hdXRoZGlnZXN0O1xuICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRUeC52YWx1ZUJhbGFuY2VaYXQ7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFR4O1xufVxuIl19

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


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