PHP WebShell
Текущая директория: /opt/BitGoJS/modules/unspents/dist/test
Просмотр файла: zcash.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("should");
const src_1 = require("../src");
const zcash_1 = require("../src/zcash");
describe('ZCash', function () {
function getDims(nP2shInputs, nOutputs) {
return new src_1.Dimensions()
.plus(src_1.Dimensions.SingleInput.p2sh.times(nP2shInputs))
.plus(src_1.Dimensions.SingleOutput.p2sh.times(nOutputs));
}
it('implements ZIP-0317', function () {
(0, zcash_1.getConventionalFeeForDimensions)(getDims(1, 1)).should.equal(10000);
(0, zcash_1.getConventionalFeeForDimensions)(getDims(1, 2)).should.equal(10000);
(0, zcash_1.getConventionalFeeForDimensions)(getDims(2, 1)).should.equal(20000);
(0, zcash_1.getConventionalFeeForDimensions)(getDims(2, 2)).should.equal(20000);
(0, zcash_1.getConventionalFeeForDimensions)(getDims(10, 1)).should.equal(100000);
});
function getFeeForZatPerKB(d, zatPerKB) {
return Math.ceil((d.getVSize() * zatPerKB) / 1000);
}
function testFeeDifference(zatPerKilobyte, zatPerAction, expectedDiffs, expectedEffectiveFeePerAction) {
it(`difference between feePerByte and feePerAction (zatPerKb=${zatPerKilobyte}, zatPerAction=${zatPerAction})`, function () {
const dims = [
getDims(1, 1),
getDims(2, 1),
getDims(2, 2),
getDims(10, 1),
getDims(10, 10),
getDims(100, 1),
getDims(100, 100),
getDims(1, 100),
getDims(1, 200),
getDims(1, 1000),
];
const diffs = dims.map((d) => {
const feePerSize = getFeeForZatPerKB(d, zatPerKilobyte);
const feePerAction = (0, zcash_1.getConventionalFeeForDimensions)(d, {
marginalFeeZatPerAction: zatPerAction,
});
return feePerSize - feePerAction;
});
diffs.should.eql(expectedDiffs);
if (expectedEffectiveFeePerAction) {
const effectiveFeePerAction = dims.map((d) => Math.ceil(getFeeForZatPerKB(d, zatPerKilobyte) / (0, zcash_1.getLogicalActions)(d)));
effectiveFeePerAction.should.eql(expectedEffectiveFeePerAction);
}
});
}
// with a feeRate of 40_000 zat/kB, we are underpaying for fanouts larger than 1:100
testFeeDifference(40000, 5000, [3600, 5520, 6800, 20880, 32400, 198680, 325400, -334680, -676680, -3417680]);
// with a fee of 140_000 zat/kB, we are still not paying for fanouts larger than 1:200
testFeeDifference(140000, 5000, [37600, 69320, 73800, 323080, 363400, 3182880, 3626400, 16120, -5880, -186880]);
// with a fee of 150_000 zat/kB, we are paying for a 1:200 fanout
testFeeDifference(150000, 5000, [41000, 75700, 80500, 353300, 396500, 3481300, 3956500, 51200, 61200, 136200],
// the effective per-action fee-rate is 25_000 zat/action for smaller transactions and
// for fanouts we asymptotically approach 5_000 zat/action
[25500, 23925, 25125, 22665, 24825, 22494, 24882, 5539, 5324, 5145]);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNhc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3pjYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLGdDQUFvQztBQUNwQyx3Q0FBa0Y7QUFFbEYsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixTQUFTLE9BQU8sQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ3BELE9BQU8sSUFBSSxnQkFBVSxFQUFFO2FBQ3BCLElBQUksQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FBQyxnQkFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEVBQUUsQ0FBQyxxQkFBcUIsRUFBRTtRQUN4QixJQUFBLHVDQUErQixFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUEsdUNBQStCLEVBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDLENBQUM7UUFDcEUsSUFBQSx1Q0FBK0IsRUFBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSxJQUFBLHVDQUErQixFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUEsdUNBQStCLEVBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFB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QUM3RSxzRkFBc0Y7SUFDdEYsMERBQTBEO0lBQzFELENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3BFLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuLi9zcmMnO1xuaW1wb3J0IHsgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucywgZ2V0TG9naWNhbEFjdGlvbnMgfSBmcm9tICcuLi9zcmMvemNhc2gnO1xuXG5kZXNjcmliZSgnWkNhc2gnLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGdldERpbXMoblAyc2hJbnB1dHM6IG51bWJlciwgbk91dHB1dHM6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9ucygpXG4gICAgICAucGx1cyhEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2gudGltZXMoblAyc2hJbnB1dHMpKVxuICAgICAgLnBsdXMoRGltZW5zaW9ucy5TaW5nbGVPdXRwdXQucDJzaC50aW1lcyhuT3V0cHV0cykpO1xuICB9XG5cbiAgaXQoJ2ltcGxlbWVudHMgWklQLTAzMTcnLCBmdW5jdGlvbiAoKSB7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDEsIDEpKS5zaG91bGQuZXF1YWwoMTBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMSwgMikpLnNob3VsZC5lcXVhbCgxMF8wMDApO1xuICAgIGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZ2V0RGltcygyLCAxKSkuc2hvdWxkLmVxdWFsKDIwXzAwMCk7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDIsIDIpKS5zaG91bGQuZXF1YWwoMjBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMTAsIDEpKS5zaG91bGQuZXF1YWwoMTAwXzAwMCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEZlZUZvclphdFBlcktCKGQ6IERpbWVuc2lvbnMsIHphdFBlcktCOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGQuZ2V0VlNpemUoKSAqIHphdFBlcktCKSAvIDEwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdEZlZURpZmZlcmVuY2UoXG4gICAgemF0UGVyS2lsb2J5dGU6IG51bWJlcixcbiAgICB6YXRQZXJBY3Rpb246IG51bWJlcixcbiAgICBleHBlY3RlZERpZmZzOiBudW1iZXJbXSxcbiAgICBleHBlY3RlZEVmZmVjdGl2ZUZlZVBlckFjdGlvbj86IG51bWJlcltdXG4gICkge1xuICAgIGl0KGBkaWZmZXJlbmNlIGJldHdlZW4gZmVlUGVyQnl0ZSBhbmQgZmVlUGVyQWN0aW9uICh6YXRQZXJLYj0ke3phdFBlcktpbG9ieXRlfSwgemF0UGVyQWN0aW9uPSR7emF0UGVyQWN0aW9ufSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkaW1zID0gW1xuICAgICAgICBnZXREaW1zKDEsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDIpLFxuICAgICAgICBnZXREaW1zKDEwLCAxKSxcbiAgICAgICAgZ2V0RGltcygxMCwgMTApLFxuICAgICAgICBnZXREaW1zKDEwMCwgMSksXG4gICAgICAgIGdldERpbXMoMTAwLCAxMDApLFxuICAgICAgICBnZXREaW1zKDEsIDEwMCksXG4gICAgICAgIGdldERpbXMoMSwgMjAwKSxcbiAgICAgICAgZ2V0RGltcygxLCAxMDAwKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBkaWZmcyA9IGRpbXMubWFwKChkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZlZVBlclNpemUgPSBnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSk7XG4gICAgICAgIGNvbnN0IGZlZVBlckFjdGlvbiA9IGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZCwge1xuICAgICAgICAgIG1hcmdpbmFsRmVlWmF0UGVyQWN0aW9uOiB6YXRQZXJBY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmVlUGVyU2l6ZSAtIGZlZVBlckFjdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICBkaWZmcy5zaG91bGQuZXFsKGV4cGVjdGVkRGlmZnMpO1xuICAgICAgaWYgKGV4cGVjdGVkRWZmZWN0aXZlRmVlUGVyQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUZlZVBlckFjdGlvbiA9IGRpbXMubWFwKChkKSA9PlxuICAgICAgICAgIE1hdGguY2VpbChnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSkgLyBnZXRMb2dpY2FsQWN0aW9ucyhkKSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlRmVlUGVyQWN0aW9uLnNob3VsZC5lcWwoZXhwZWN0ZWRFZmZlY3RpdmVGZWVQZXJBY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8vIHdpdGggYSBmZWVSYXRlIG9mIDQwXzAwMCB6YXQva0IsIHdlIGFyZSB1bmRlcnBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjEwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSg0MF8wMDAsIDVfMDAwLCBbMzYwMCwgNTUyMCwgNjgwMCwgMjA4ODAsIDMyNDAwLCAxOTg2ODAsIDMyNTQwMCwgLTMzNDY4MCwgLTY3NjY4MCwgLTM0MTc2ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE0MF8wMDAgemF0L2tCLCB3ZSBhcmUgc3RpbGwgbm90IHBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjIwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSgxNDBfMDAwLCA1XzAwMCwgWzM3NjAwLCA2OTMyMCwgNzM4MDAsIDMyMzA4MCwgMzYzNDAwLCAzMTgyODgwLCAzNjI2NDAwLCAxNjEyMCwgLTU4ODAsIC0xODY4ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE1MF8wMDAgemF0L2tCLCB3ZSBhcmUgcGF5aW5nIGZvciBhIDE6MjAwIGZhbm91dFxuICB0ZXN0RmVlRGlmZmVyZW5jZShcbiAgICAxNTBfMDAwLFxuICAgIDVfMDAwLFxuICAgIFs0MTAwMCwgNzU3MDAsIDgwNTAwLCAzNTMzMDAsIDM5NjUwMCwgMzQ4MTMwMCwgMzk1NjUwMCwgNTEyMDAsIDYxMjAwLCAxMzYyMDBdLFxuICAgIC8vIHRoZSBlZmZlY3RpdmUgcGVyLWFjdGlvbiBmZWUtcmF0ZSBpcyAyNV8wMDAgemF0L2FjdGlvbiBmb3Igc21hbGxlciB0cmFuc2FjdGlvbnMgYW5kXG4gICAgLy8gZm9yIGZhbm91dHMgd2UgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggNV8wMDAgemF0L2FjdGlvblxuICAgIFsyNTUwMCwgMjM5MjUsIDI1MTI1LCAyMjY2NSwgMjQ4MjUsIDIyNDk0LCAyNDg4MiwgNTUzOSwgNTMyNCwgNTE0NV1cbiAgKTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!