UNPKG

pulsar-contracts

Version:

65 lines 2.19 kB
export { getTotalTimeRequired }; export var TransactionCost; (function (TransactionCost) { TransactionCost.PROOF_COST = 10.26; TransactionCost.SIGNED_PAIR_COST = 10.08; TransactionCost.SIGNED_SINGLE_COST = 9.14; TransactionCost.COST_LIMIT = 69.45; })(TransactionCost || (TransactionCost = {})); function getTotalTimeRequired(accountUpdates) { let eventElements = { events: 0, actions: 0 }; let authKinds = accountUpdates.map((update) => { let { isSigned, isProved, verificationKeyHash } = update.body.authorizationKind; return { isSigned: isSigned.toBoolean(), isProved: isProved.toBoolean(), verificationKeyHash: verificationKeyHash.toString(), }; }); // insert entry for the fee payer authKinds.unshift({ isSigned: true, isProved: false, verificationKeyHash: '', }); let authTypes = filterGroups(authKinds); /* 10.26 * proof + 10.08 * signedPair + 9.14 * signedSingle < 69.45 */ let totalTimeRequired = TransactionCost.PROOF_COST * authTypes.proof + TransactionCost.SIGNED_PAIR_COST * authTypes.signedPair + TransactionCost.SIGNED_SINGLE_COST * authTypes.signedSingle; // returns totalTimeRequired and additional data used by verifyTransactionLimits return { totalTimeRequired, eventElements, authTypes }; } function filterGroups(xs) { let pairs = filterPairs(xs); xs = pairs.xs; let singleCount = 0; let proofCount = 0; xs.forEach((t) => { if (t.isProved) proofCount++; else singleCount++; }); return { signedPair: pairs.pairs, signedSingle: singleCount, proof: proofCount, }; } const isPair = (a, b) => !a.isProved && !b.isProved; function filterPairs(xs) { if (xs.length <= 1) return { xs, pairs: 0 }; if (isPair(xs[0], xs[1])) { let rec = filterPairs(xs.slice(2)); return { xs: rec.xs, pairs: rec.pairs + 1 }; } else { let rec = filterPairs(xs.slice(1)); return { xs: [xs[0]].concat(rec.xs), pairs: rec.pairs }; } } //# sourceMappingURL=getTotalTime.js.map