@harmoniclabs/buildooor
Version:
Cardano transaction builder in typescript
127 lines (126 loc) • 6.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTxInfos = void 0;
var getTxIntervalData_1 = require("./getTxIntervalData.js");
var plutus_data_1 = require("@harmoniclabs/plutus-data");
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
var getSpendingPurposeData_1 = require("./getSpendingPurposeData.js");
var uint8array_utils_1 = require("@harmoniclabs/uint8array-utils");
function sortUTxO(a, b) {
var ord = (0, uint8array_utils_1.lexCompare)(a.utxoRef.id.toBuffer(), b.utxoRef.id.toBuffer());
// if equal tx id order based on tx output index
if (ord === 0)
return a.utxoRef.index - b.utxoRef.index;
// else order by tx id
return ord;
}
function getTxInfos(transaction, genesisInfos) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
var tx = transaction.body, witnesses = transaction.witnesses;
function redeemerToDataPair(rdmr, version) {
return new plutus_data_1.DataPair((0, getSpendingPurposeData_1.getSpendingPurposeData)(rdmr, tx, version), rdmr.data.clone());
}
var sortedInputs = tx.inputs.slice().sort(sortUTxO);
var sortedRefInputs = (_a = tx.refInputs) === null || _a === void 0 ? void 0 : _a.slice().sort(sortUTxO);
var feeData = cardano_ledger_ts_1.Value.lovelaces(tx.fee).toData();
var mintData = ((_b = tx.mint) !== null && _b !== void 0 ? _b : cardano_ledger_ts_1.Value.lovelaces(0)).toData();
var mintDataNoLovelaces = new plutus_data_1.DataMap(mintData.map.slice(1));
var intervalData = (0, getTxIntervalData_1.getTxIntervalData)(tx.validityIntervalStart, tx.ttl, genesisInfos);
var sigsData = new plutus_data_1.DataList((_d = (_c = tx.requiredSigners) === null || _c === void 0 ? void 0 : _c.map(function (sig) { return sig.toData(); })) !== null && _d !== void 0 ? _d : []);
var datumsData = new plutus_data_1.DataMap((_f = (_e = witnesses.datums) === null || _e === void 0 ? void 0 : _e.map(function (dat) {
return new plutus_data_1.DataPair(new plutus_data_1.DataB((0, plutus_data_1.hashData)(dat)), dat);
})) !== null && _f !== void 0 ? _f : []);
var txIdData = new plutus_data_1.DataB(tx.hash.toBuffer());
var v1 = undefined;
try { // input and output to data might fail if only v2
v1 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
[
// inputs
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v1"); })),
// outputs
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v1"); })),
// fee
feeData.clone(),
// mint
mintData.clone(),
// dCertificates
new plutus_data_1.DataList((_h = (_g = tx.certs) === null || _g === void 0 ? void 0 : _g.map(function (cert) { return cert.toData("v1"); })) !== null && _h !== void 0 ? _h : []),
// withderawals
(_k = (_j = tx.withdrawals) === null || _j === void 0 ? void 0 : _j.toData("v1")) !== null && _k !== void 0 ? _k : new plutus_data_1.DataMap([]),
// interval
intervalData.clone(),
// signatories
sigsData.clone(),
// datums
datumsData.clone(),
// id
new plutus_data_1.DataConstr(0, [txIdData.clone()])
]);
}
catch ( // input or output can't be v1 (inline datums etc...)
_0) { // input or output can't be v1 (inline datums etc...)
v1 = undefined;
}
var v2 = undefined;
try {
v2 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
[
// inputs
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v2"); })),
// refInputs
new plutus_data_1.DataList((_l = sortedRefInputs === null || sortedRefInputs === void 0 ? void 0 : sortedRefInputs.map(function (refIn) { return refIn.toData("v2"); })) !== null && _l !== void 0 ? _l : []),
// outputs
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v2"); })),
// fee
feeData,
// mint
mintData,
// dCertificates
new plutus_data_1.DataList((_o = (_m = tx.certs) === null || _m === void 0 ? void 0 : _m.map(function (cert) { return cert.toData("v2"); })) !== null && _o !== void 0 ? _o : []),
// withderawals
(_q = (_p = tx.withdrawals) === null || _p === void 0 ? void 0 : _p.toData("v2")) !== null && _q !== void 0 ? _q : new plutus_data_1.DataMap([]),
// interval
intervalData,
// signatories
sigsData,
// redeemers
new plutus_data_1.DataMap((_s = (_r = witnesses.redeemers) === null || _r === void 0 ? void 0 : _r.map(function (rdmr) { return redeemerToDataPair(rdmr, "v2"); })) !== null && _s !== void 0 ? _s : []),
// datums
datumsData,
// id
new plutus_data_1.DataConstr(0, [txIdData.clone()])
]);
}
catch (_1) {
v2 = undefined;
}
var v3 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
[
// inputs
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v3"); })),
// refInputs
new plutus_data_1.DataList((_t = sortedRefInputs === null || sortedRefInputs === void 0 ? void 0 : sortedRefInputs.map(function (refIn) { return refIn.toData("v3"); })) !== null && _t !== void 0 ? _t : []),
// outputs
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v3"); })),
// fee (only lovelaces)
new plutus_data_1.DataI(tx.fee),
// mint
mintDataNoLovelaces,
// certificates
new plutus_data_1.DataList((_v = (_u = tx.certs) === null || _u === void 0 ? void 0 : _u.map(function (cert) { return cert.toData("v3"); })) !== null && _v !== void 0 ? _v : []),
// withderawals
(_x = (_w = tx.withdrawals) === null || _w === void 0 ? void 0 : _w.toData("v3")) !== null && _x !== void 0 ? _x : new plutus_data_1.DataMap([]),
// interval
intervalData,
// signatories
sigsData,
// redeemers
new plutus_data_1.DataMap((_z = (_y = witnesses.redeemers) === null || _y === void 0 ? void 0 : _y.map(function (rdmr) { return redeemerToDataPair(rdmr, "v3"); })) !== null && _z !== void 0 ? _z : []),
// datums
datumsData,
// id
txIdData
]);
return { v1: v1, v2: v2, v3: v3 };
}
exports.getTxInfos = getTxInfos;