@harmoniclabs/plu-ts-offchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
122 lines (121 loc) • 7.57 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
Object.defineProperty(exports, "__esModule", { value: true });
exports.completeTxBuilderProtocolParams = exports.isValidatedTxBuilderProtocolParams = exports.defaultTxBuilderProtocolParameters = void 0;
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
var ints_1 = require("../utils/ints.js");
var cbor_1 = require("@harmoniclabs/cbor");
var plutus_machine_1 = require("@harmoniclabs/plutus-machine");
var Rational_1 = require("../utils/Rational.js");
var cardano_costmodels_ts_1 = require("@harmoniclabs/cardano-costmodels-ts");
var obj_utils_1 = require("@harmoniclabs/obj-utils");
exports.defaultTxBuilderProtocolParameters = Object.freeze({
txFeePerByte: BigInt((_a = cardano_ledger_ts_1.defaultProtocolParameters.txFeePerByte) !== null && _a !== void 0 ? _a : 0),
txFeeFixed: BigInt((_b = cardano_ledger_ts_1.defaultProtocolParameters.txFeeFixed) !== null && _b !== void 0 ? _b : 0),
utxoCostPerByte: BigInt((_c = cardano_ledger_ts_1.defaultProtocolParameters.utxoCostPerByte) !== null && _c !== void 0 ? _c : 0),
maxTxSize: BigInt((_d = cardano_ledger_ts_1.defaultProtocolParameters.maxTxSize) !== null && _d !== void 0 ? _d : 0),
maxTxExecutionUnits: forceExBudget((_e = cardano_ledger_ts_1.defaultProtocolParameters.maxTxExecutionUnits) !== null && _e !== void 0 ? _e : { steps: 0, memory: 0 }),
maxCollateralInputs: BigInt((_f = cardano_ledger_ts_1.defaultProtocolParameters.maxCollateralInputs) !== null && _f !== void 0 ? _f : 0),
collateralPercentage: BigInt((_g = cardano_ledger_ts_1.defaultProtocolParameters.collateralPercentage) !== null && _g !== void 0 ? _g : 0),
minfeeRefScriptCostPerByte: (0, Rational_1.cborFromRational)((_h = cardano_ledger_ts_1.defaultProtocolParameters.minfeeRefScriptCostPerByte) !== null && _h !== void 0 ? _h : 0),
executionUnitPrices: forceExecUnitPricesArray((_j = cardano_ledger_ts_1.defaultProtocolParameters.executionUnitPrices) !== null && _j !== void 0 ? _j : [0, 0]),
costModels: (_k = cardano_ledger_ts_1.defaultProtocolParameters.costModels) !== null && _k !== void 0 ? _k : {
PlutusScriptV1: cardano_costmodels_ts_1.defaultV1Costs,
PlutusScriptV2: cardano_costmodels_ts_1.defaultV2Costs,
PlutusScriptV3: cardano_costmodels_ts_1.defaultV3Costs
}
});
function forceExBudget(ex) {
return ex instanceof plutus_machine_1.ExBudget ? ex.clone() : plutus_machine_1.ExBudget.fromJson(ex);
}
function forceExecUnitPricesArray(ex) {
return Array.isArray(ex) ? ex.slice() : [
cbor_1.CborPositiveRational.fromNumber(ex.priceMemory),
cbor_1.CborPositiveRational.fromNumber(ex.priceSteps),
];
}
var keysOfTxBuilderProtocolParameters = Object.freeze(Object.keys(exports.defaultTxBuilderProtocolParameters));
function isValidatedTxBuilderProtocolParams(stuff) {
if (!(0, obj_utils_1.isObject)(stuff))
return false;
var keys = Object.keys(stuff);
// all keys must be present
if (!keysOfTxBuilderProtocolParameters.every(function (key) { return keys.includes(key); }))
return false;
var ppexecCosts = stuff.executionUnitPrices;
if (!((Array.isArray(ppexecCosts) &&
ppexecCosts.length >= 2 &&
ppexecCosts[0] instanceof cbor_1.CborPositiveRational &&
ppexecCosts[1] instanceof cbor_1.CborPositiveRational) ||
((0, obj_utils_1.isObject)(ppexecCosts) &&
typeof ppexecCosts.priceSteps === "number" &&
typeof ppexecCosts.priceMemory === "number")))
return false;
return ((0, ints_1.canBeUInteger)(stuff.txFeePerByte) &&
(0, ints_1.canBeUInteger)(stuff.txFeeFixed) &&
(0, ints_1.canBeUInteger)(stuff.utxoCostPerByte) &&
(0, ints_1.canBeUInteger)(stuff.maxTxSize) &&
(stuff.maxTxExecutionUnits instanceof plutus_machine_1.ExBudget || plutus_machine_1.ExBudget.isJson(stuff.maxTxExecutionUnits)) &&
(0, ints_1.canBeUInteger)(stuff.maxCollateralInputs) &&
(0, ints_1.canBeUInteger)(stuff.collateralPercentage) &&
(0, Rational_1.isRational)(stuff.minfeeRefScriptCostPerByte) &&
(0, cardano_costmodels_ts_1.isCostModels)(stuff.costModels));
}
exports.isValidatedTxBuilderProtocolParams = isValidatedTxBuilderProtocolParams;
function completeTxBuilderProtocolParams(partial) {
if (partial === undefined)
return __assign({}, exports.defaultTxBuilderProtocolParameters);
var result = {};
result.executionUnitPrices = (partial.executionUnitPrices ?
forceExecUnitPricesArray(partial.executionUnitPrices) :
undefined);
var ppexecCosts = result.executionUnitPrices;
if (!(Array.isArray(ppexecCosts) &&
ppexecCosts.length >= 2 &&
ppexecCosts[0] instanceof cbor_1.CborPositiveRational &&
ppexecCosts[1] instanceof cbor_1.CborPositiveRational))
result.executionUnitPrices = exports.defaultTxBuilderProtocolParameters.executionUnitPrices.slice();
result.txFeePerByte = ((0, ints_1.canBeUInteger)(partial.txFeePerByte) ?
BigInt(partial.txFeePerByte) :
exports.defaultTxBuilderProtocolParameters.txFeePerByte);
result.txFeeFixed = ((0, ints_1.canBeUInteger)(partial.txFeeFixed) ?
BigInt(partial.txFeeFixed) :
exports.defaultTxBuilderProtocolParameters.txFeeFixed);
result.utxoCostPerByte = ((0, ints_1.canBeUInteger)(partial.utxoCostPerByte) ?
BigInt(partial.utxoCostPerByte) :
exports.defaultTxBuilderProtocolParameters.utxoCostPerByte);
result.maxTxSize = ((0, ints_1.canBeUInteger)(partial.maxTxSize) ?
BigInt(partial.maxTxSize) :
exports.defaultTxBuilderProtocolParameters.maxTxSize);
result.maxTxExecutionUnits = ((partial.maxTxExecutionUnits instanceof plutus_machine_1.ExBudget || plutus_machine_1.ExBudget.isJson(partial.maxTxExecutionUnits)) ?
forceExBudget(partial.maxTxExecutionUnits) :
exports.defaultTxBuilderProtocolParameters.maxTxExecutionUnits.clone());
result.maxCollateralInputs = ((0, ints_1.canBeUInteger)(partial.maxCollateralInputs) ?
BigInt(partial.maxCollateralInputs) :
exports.defaultTxBuilderProtocolParameters.maxCollateralInputs);
result.collateralPercentage = ((0, ints_1.canBeUInteger)(partial.collateralPercentage) ?
BigInt(partial.collateralPercentage) :
exports.defaultTxBuilderProtocolParameters.collateralPercentage);
result.collateralPercentage = ((0, ints_1.canBeUInteger)(partial.collateralPercentage) ?
BigInt(partial.collateralPercentage) :
exports.defaultTxBuilderProtocolParameters.collateralPercentage);
result.minfeeRefScriptCostPerByte = ((0, Rational_1.isRational)(partial.minfeeRefScriptCostPerByte) ?
(0, Rational_1.cborFromRational)(partial.minfeeRefScriptCostPerByte) :
exports.defaultTxBuilderProtocolParameters.minfeeRefScriptCostPerByte);
result.costModels = ((0, cardano_costmodels_ts_1.isCostModels)(partial.costModels) ?
partial.costModels :
exports.defaultTxBuilderProtocolParameters.costModels);
return result;
}
exports.completeTxBuilderProtocolParams = completeTxBuilderProtocolParams;