@harmoniclabs/buildooor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +22 -0
- package/dist/TxBuilder/CanResolveToUTxO/CanResolveToUTxO.d.ts +5 -0
- package/dist/TxBuilder/CanResolveToUTxO/CanResolveToUTxO.js +62 -0
- package/dist/TxBuilder/CanResolveToUTxO/index.d.ts +1 -0
- package/dist/TxBuilder/CanResolveToUTxO/index.js +17 -0
- package/dist/TxBuilder/GenesisInfos.d.ts +54 -0
- package/dist/TxBuilder/GenesisInfos.js +56 -0
- package/dist/TxBuilder/IProvider/IProvider.d.ts +42 -0
- package/dist/TxBuilder/IProvider/IProvider.js +2 -0
- package/dist/TxBuilder/IProvider/index.d.ts +1 -0
- package/dist/TxBuilder/IProvider/index.js +17 -0
- package/dist/TxBuilder/TxBuilder.d.ts +106 -0
- package/dist/TxBuilder/TxBuilder.js +1251 -0
- package/dist/TxBuilder/TxBuilderProtocolParams.d.ts +42 -0
- package/dist/TxBuilder/TxBuilderProtocolParams.js +121 -0
- package/dist/TxBuilder/TxBuilderRunner/CanBePoolKeyHash.d.ts +3 -0
- package/dist/TxBuilder/TxBuilderRunner/CanBePoolKeyHash.js +33 -0
- package/dist/TxBuilder/TxBuilderRunner/CanBeStakeCreds.d.ts +3 -0
- package/dist/TxBuilder/TxBuilderRunner/CanBeStakeCreds.js +25 -0
- package/dist/TxBuilder/TxBuilderRunner/TxBuilderRunner.d.ts +280 -0
- package/dist/TxBuilder/TxBuilderRunner/TxBuilderRunner.js +1366 -0
- package/dist/TxBuilder/TxBuilderRunner/forceAddr.d.ts +2 -0
- package/dist/TxBuilder/TxBuilderRunner/forceAddr.js +8 -0
- package/dist/TxBuilder/TxBuilderRunner/index.d.ts +2 -0
- package/dist/TxBuilder/TxBuilderRunner/index.js +18 -0
- package/dist/TxBuilder/TxBuilderRunner/jsonToMetadata.d.ts +2 -0
- package/dist/TxBuilder/TxBuilderRunner/jsonToMetadata.js +35 -0
- package/dist/TxBuilder/index.d.ts +5 -0
- package/dist/TxBuilder/index.js +21 -0
- package/dist/TxBuilder/keepRelevant.d.ts +4 -0
- package/dist/TxBuilder/keepRelevant.js +79 -0
- package/dist/TxBuilder/utils.d.ts +4 -0
- package/dist/TxBuilder/utils.js +66 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +31 -0
- package/dist/toOnChain/getSpendingPurposeData.d.ts +5 -0
- package/dist/toOnChain/getSpendingPurposeData.js +98 -0
- package/dist/toOnChain/getTxInfos.d.ts +8 -0
- package/dist/toOnChain/getTxInfos.js +126 -0
- package/dist/toOnChain/getTxIntervalData.d.ts +19 -0
- package/dist/toOnChain/getTxIntervalData.js +85 -0
- package/dist/toOnChain/index.d.ts +2 -0
- package/dist/toOnChain/index.js +18 -0
- package/dist/txBuild/ChangeInfos/ChangeInfos.d.ts +15 -0
- package/dist/txBuild/ChangeInfos/ChangeInfos.js +27 -0
- package/dist/txBuild/ITxBuildArgs.d.ts +74 -0
- package/dist/txBuild/ITxBuildArgs.js +71 -0
- package/dist/txBuild/ITxBuildCert.d.ts +13 -0
- package/dist/txBuild/ITxBuildCert.js +37 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInput.d.ts +25 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInput.js +70 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInputInlineScript.d.ts +14 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInputInlineScript.js +14 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInputRefScript.d.ts +14 -0
- package/dist/txBuild/ITxBuildInput/ITxBuildInputRefScript.js +15 -0
- package/dist/txBuild/ITxBuildMint.d.ts +30 -0
- package/dist/txBuild/ITxBuildMint.js +54 -0
- package/dist/txBuild/ITxBuildOptions.d.ts +11 -0
- package/dist/txBuild/ITxBuildOptions.js +2 -0
- package/dist/txBuild/ITxBuildOutput.d.ts +10 -0
- package/dist/txBuild/ITxBuildOutput.js +27 -0
- package/dist/txBuild/ITxBuildProposalProcedure.d.ts +11 -0
- package/dist/txBuild/ITxBuildProposalProcedure.js +13 -0
- package/dist/txBuild/ITxBuildVotingProcedure.d.ts +13 -0
- package/dist/txBuild/ITxBuildVotingProcedure.js +40 -0
- package/dist/txBuild/ITxBuildWithdrawal.d.ts +29 -0
- package/dist/txBuild/ITxBuildWithdrawal.js +34 -0
- package/dist/txBuild/ScriptWithRedeemer.d.ts +18 -0
- package/dist/txBuild/ScriptWithRedeemer.js +16 -0
- package/dist/txBuild/index.d.ts +7 -0
- package/dist/txBuild/index.js +23 -0
- package/dist/utils/CanBeData.d.ts +7 -0
- package/dist/utils/CanBeData.js +68 -0
- package/dist/utils/Rational.d.ts +8 -0
- package/dist/utils/Rational.js +34 -0
- package/dist/utils/assert.d.ts +1 -0
- package/dist/utils/assert.js +44 -0
- package/dist/utils/ints.d.ts +4 -0
- package/dist/utils/ints.js +25 -0
- package/dist/utils/stringify.d.ts +2 -0
- package/dist/utils/stringify.js +38 -0
- package/package.json +72 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.forceAddr = void 0;
|
|
4
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
5
|
+
function forceAddr(addr) {
|
|
6
|
+
return addr instanceof cardano_ledger_ts_1.Address ? addr : cardano_ledger_ts_1.Address.fromString(addr);
|
|
7
|
+
}
|
|
8
|
+
exports.forceAddr = forceAddr;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./TxBuilderRunner.js"), exports);
|
|
18
|
+
__exportStar(require("./jsonToMetadata.js"), exports);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonToMetadata = void 0;
|
|
4
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
5
|
+
var obj_utils_1 = require("@harmoniclabs/obj-utils");
|
|
6
|
+
var uint8array_utils_1 = require("@harmoniclabs/uint8array-utils");
|
|
7
|
+
function jsonToMetadata(json, withConversion) {
|
|
8
|
+
if (withConversion === void 0) { withConversion = false; }
|
|
9
|
+
if (typeof json === "number" || typeof json === "bigint")
|
|
10
|
+
return new cardano_ledger_ts_1.TxMetadatumInt(json);
|
|
11
|
+
if (typeof json === "string") {
|
|
12
|
+
if (withConversion && json.startsWith("0x")) {
|
|
13
|
+
return new cardano_ledger_ts_1.TxMetadatumBytes((0, uint8array_utils_1.fromHex)(json.slice(2)));
|
|
14
|
+
}
|
|
15
|
+
return new cardano_ledger_ts_1.TxMetadatumText(json);
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(json)) {
|
|
18
|
+
return new cardano_ledger_ts_1.TxMetadatumList(json.map(function (el) { return jsonToMetadata(el, withConversion); }));
|
|
19
|
+
}
|
|
20
|
+
if ((0, obj_utils_1.isObject)(json)) {
|
|
21
|
+
var keys = Object.keys(json);
|
|
22
|
+
var len = keys.length;
|
|
23
|
+
var entries = new Array(len);
|
|
24
|
+
for (var i = 0; i < len; i++) {
|
|
25
|
+
var ki = keys[i];
|
|
26
|
+
entries[i] = {
|
|
27
|
+
k: jsonToMetadata(ki, withConversion),
|
|
28
|
+
v: jsonToMetadata(json[ki], withConversion)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return new cardano_ledger_ts_1.TxMetadatumMap(entries);
|
|
32
|
+
}
|
|
33
|
+
throw new Error("unexpected tx metatada json");
|
|
34
|
+
}
|
|
35
|
+
exports.jsonToMetadata = jsonToMetadata;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./TxBuilder.js"), exports);
|
|
18
|
+
__exportStar(require("./TxBuilderRunner/index.js"), exports);
|
|
19
|
+
__exportStar(require("./GenesisInfos.js"), exports);
|
|
20
|
+
__exportStar(require("./IProvider/index.js"), exports);
|
|
21
|
+
__exportStar(require("./CanResolveToUTxO/index.js"), exports);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ValueUnits, Value } from "@harmoniclabs/cardano-ledger-ts";
|
|
2
|
+
import { ITxBuildInput } from "../txBuild/index.js";
|
|
3
|
+
import { CanBeUInteger } from "../utils/ints.js";
|
|
4
|
+
export declare function keepRelevant(requestedOutputSet: ValueUnits | Value, initialUTxOSet: ITxBuildInput[], minimumLovelaceRequired?: CanBeUInteger): ITxBuildInput[];
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keepRelevant = void 0;
|
|
4
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
5
|
+
var txBuild_1 = require("../txBuild/index.js");
|
|
6
|
+
var ints_1 = require("../utils/ints.js");
|
|
7
|
+
function keepRelevant(requestedOutputSet, initialUTxOSet, minimumLovelaceRequired) {
|
|
8
|
+
if (minimumLovelaceRequired === void 0) { minimumLovelaceRequired = 5000000; }
|
|
9
|
+
if (requestedOutputSet instanceof cardano_ledger_ts_1.Value) {
|
|
10
|
+
requestedOutputSet = requestedOutputSet.toUnits();
|
|
11
|
+
}
|
|
12
|
+
var reqOutputKeys = Object.keys(requestedOutputSet);
|
|
13
|
+
var requestedLovelace = reqOutputKeys.includes("lovelace")
|
|
14
|
+
? (0, ints_1.forceBigUInt)(BigInt(requestedOutputSet["lovelace"])) + (0, ints_1.forceBigUInt)(minimumLovelaceRequired)
|
|
15
|
+
: (0, ints_1.forceBigUInt)(minimumLovelaceRequired);
|
|
16
|
+
var multiAssetIns = initialUTxOSet.filter(function (input) {
|
|
17
|
+
return new cardano_ledger_ts_1.UTxO(input.utxo).resolved.value.toUnits()
|
|
18
|
+
// .filter(( asset ) => asset.unit !== "lovelace")
|
|
19
|
+
.some(function (asset) { return reqOutputKeys.includes(asset.unit); });
|
|
20
|
+
});
|
|
21
|
+
var totLovelaces = getTotLovelaces(multiAssetIns);
|
|
22
|
+
var lovelaceIns = totLovelaces < requestedLovelace ?
|
|
23
|
+
remainingLovelace(requestedLovelace - totLovelaces,
|
|
24
|
+
// filter out initial utxos already included trough multi asset selection
|
|
25
|
+
initialUTxOSet.filter(function (initialUtxo) {
|
|
26
|
+
var idStr = initialUtxo.utxo.utxoRef.id.toString();
|
|
27
|
+
return !multiAssetIns.some(function (selectedUtxo) {
|
|
28
|
+
return selectedUtxo.utxo.utxoRef.id.toString() === idStr;
|
|
29
|
+
});
|
|
30
|
+
}))
|
|
31
|
+
: [];
|
|
32
|
+
return lovelaceIns.concat(multiAssetIns)
|
|
33
|
+
.map(txBuild_1.cloneITxBuildInput);
|
|
34
|
+
}
|
|
35
|
+
exports.keepRelevant = keepRelevant;
|
|
36
|
+
function getTotLovelaces(multiAsset) {
|
|
37
|
+
return multiAsset.reduce(function (sum, input) { return sum + new cardano_ledger_ts_1.UTxO(input.utxo).resolved.value.lovelaces; }, BigInt(0));
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
function remainingLovelace(quantity, initialUTxOSet) {
|
|
41
|
+
var sortedUTxOs = initialUTxOSet.sort(function (a, b) { return parseInt(BigInt(new cardano_ledger_ts_1.UTxO(a.utxo).resolved.value.lovelaces - new cardano_ledger_ts_1.UTxO(b.utxo).resolved.value.lovelaces).toString()); });
|
|
42
|
+
var requestedOutputSet = {
|
|
43
|
+
lovelace: quantity
|
|
44
|
+
};
|
|
45
|
+
var selection = selectValue(sortedUTxOs, requestedOutputSet);
|
|
46
|
+
return selection;
|
|
47
|
+
}
|
|
48
|
+
function enoughValueHasBeenSelected(selection, assets) {
|
|
49
|
+
return Object.keys(assets)
|
|
50
|
+
.every(function (unit) {
|
|
51
|
+
return selection
|
|
52
|
+
.filter(function (input) {
|
|
53
|
+
return new cardano_ledger_ts_1.UTxO(input.utxo).resolved.value.toUnits()
|
|
54
|
+
.some(function (a) { return a.unit === unit; });
|
|
55
|
+
})
|
|
56
|
+
.reduce(function (selectedQuantity, input) {
|
|
57
|
+
var utxoQuantity = new cardano_ledger_ts_1.UTxO(input.utxo).resolved.value.toUnits()
|
|
58
|
+
.reduce(function (quantity, a) { return quantity + unit === a.unit ? BigInt(a.quantity) : BigInt(0); }, BigInt(0));
|
|
59
|
+
return selectedQuantity + utxoQuantity;
|
|
60
|
+
}, BigInt(0)) < BigInt(assets[unit]) === false;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function selectValue(inputUTxO, outputSet, selection) {
|
|
64
|
+
if (selection === void 0) { selection = []; }
|
|
65
|
+
if (inputUTxO.length === 0 ||
|
|
66
|
+
enoughValueHasBeenSelected(selection, outputSet)) {
|
|
67
|
+
return selection;
|
|
68
|
+
}
|
|
69
|
+
if (canValueBeSelected(inputUTxO[0], outputSet)) {
|
|
70
|
+
return selectValue(inputUTxO.slice(1), outputSet, selection.concat(inputUTxO[0]));
|
|
71
|
+
}
|
|
72
|
+
return selectValue(inputUTxO.slice(1), outputSet, selection);
|
|
73
|
+
}
|
|
74
|
+
function canValueBeSelected(input, assets) {
|
|
75
|
+
return Object.keys(assets).some(function (unit) {
|
|
76
|
+
return new cardano_ledger_ts_1.UTxO(input.utxo).resolved.value.toUnits()
|
|
77
|
+
.some(function (asset) { return asset.unit === unit; });
|
|
78
|
+
});
|
|
79
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ScriptType, Tx } from "@harmoniclabs/cardano-ledger-ts";
|
|
2
|
+
import type { ToDataVersion } from "@harmoniclabs/cardano-ledger-ts/dist/toData/defaultToDataVersion";
|
|
3
|
+
export declare function scriptTypeToDataVersion(scriptType: ScriptType): ToDataVersion | undefined;
|
|
4
|
+
export declare function estimateMaxSignersNeeded(tx: Tx): number;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.estimateMaxSignersNeeded = exports.scriptTypeToDataVersion = void 0;
|
|
29
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
30
|
+
function scriptTypeToDataVersion(scriptType) {
|
|
31
|
+
// if( scriptType === ScriptType.NativeScript ) return undefined;
|
|
32
|
+
if (scriptType === cardano_ledger_ts_1.ScriptType.PlutusV1)
|
|
33
|
+
return "v1";
|
|
34
|
+
if (scriptType === cardano_ledger_ts_1.ScriptType.PlutusV2)
|
|
35
|
+
return "v2";
|
|
36
|
+
if (scriptType === cardano_ledger_ts_1.ScriptType.PlutusV3)
|
|
37
|
+
return "v3";
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
exports.scriptTypeToDataVersion = scriptTypeToDataVersion;
|
|
41
|
+
function estimateMaxSignersNeeded(tx) {
|
|
42
|
+
var _a;
|
|
43
|
+
var bodySigners = (0, cardano_ledger_ts_1.getAllRequiredSigners)(tx.body)
|
|
44
|
+
.map(function (hash) { return hash.toString(); })
|
|
45
|
+
.filter(function (elem, i, thisArr) { return thisArr.indexOf(elem) === i; });
|
|
46
|
+
var allSigners = getAllNativeScriptSigners(((_a = tx.witnesses.nativeScripts) !== null && _a !== void 0 ? _a : [])
|
|
47
|
+
.map(function (script) { return script.toJson(); }))
|
|
48
|
+
.filter(function (native) { return native.type === "sig"; })
|
|
49
|
+
.map(function (native) { return native.keyHash.toString(); })
|
|
50
|
+
.concat(bodySigners)
|
|
51
|
+
.filter(function (elem, i, thisArr) { return thisArr.indexOf(elem) === i; });
|
|
52
|
+
return allSigners.length <= 0 ? 1 : allSigners.length;
|
|
53
|
+
}
|
|
54
|
+
exports.estimateMaxSignersNeeded = estimateMaxSignersNeeded;
|
|
55
|
+
function getAllNativeScriptSigners(natives) {
|
|
56
|
+
return natives
|
|
57
|
+
.reduce(function (accum, native) {
|
|
58
|
+
if (native.type === "sig")
|
|
59
|
+
accum.push(native);
|
|
60
|
+
if (native.type === "all" ||
|
|
61
|
+
native.type === "any" ||
|
|
62
|
+
native.type === "atLeast")
|
|
63
|
+
accum.push.apply(accum, __spreadArray([], __read(getAllNativeScriptSigners(native.scripts)), false));
|
|
64
|
+
return accum;
|
|
65
|
+
}, []);
|
|
66
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from "@harmoniclabs/crypto";
|
|
2
|
+
export * from "@harmoniclabs/uint8array-utils";
|
|
3
|
+
export * from "@harmoniclabs/bip32_ed25519";
|
|
4
|
+
export * from "@harmoniclabs/bytestring";
|
|
5
|
+
export * from "@harmoniclabs/cardano-costmodels-ts";
|
|
6
|
+
export * from "@harmoniclabs/cardano-ledger-ts";
|
|
7
|
+
export * from "@harmoniclabs/cbor";
|
|
8
|
+
export * from "@harmoniclabs/plutus-data";
|
|
9
|
+
export * from "@harmoniclabs/plutus-machine";
|
|
10
|
+
export * from "@harmoniclabs/uplc";
|
|
11
|
+
export * from "./TxBuilder/index.js";
|
|
12
|
+
export * from "./toOnChain/index.js";
|
|
13
|
+
export * from "./txBuild/index.js";
|
|
14
|
+
export * from "./utils/CanBeData.js";
|
|
15
|
+
export * from "./utils/ints.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("@harmoniclabs/crypto"), exports);
|
|
18
|
+
__exportStar(require("@harmoniclabs/uint8array-utils"), exports);
|
|
19
|
+
__exportStar(require("@harmoniclabs/bip32_ed25519"), exports);
|
|
20
|
+
__exportStar(require("@harmoniclabs/bytestring"), exports);
|
|
21
|
+
__exportStar(require("@harmoniclabs/cardano-costmodels-ts"), exports);
|
|
22
|
+
__exportStar(require("@harmoniclabs/cardano-ledger-ts"), exports);
|
|
23
|
+
__exportStar(require("@harmoniclabs/cbor"), exports);
|
|
24
|
+
__exportStar(require("@harmoniclabs/plutus-data"), exports);
|
|
25
|
+
__exportStar(require("@harmoniclabs/plutus-machine"), exports);
|
|
26
|
+
__exportStar(require("@harmoniclabs/uplc"), exports);
|
|
27
|
+
__exportStar(require("./TxBuilder/index.js"), exports);
|
|
28
|
+
__exportStar(require("./toOnChain/index.js"), exports);
|
|
29
|
+
__exportStar(require("./txBuild/index.js"), exports);
|
|
30
|
+
__exportStar(require("./utils/CanBeData.js"), exports);
|
|
31
|
+
__exportStar(require("./utils/ints.js"), exports);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TxBody, TxRedeemer } from "@harmoniclabs/cardano-ledger-ts";
|
|
2
|
+
import type { ToDataVersion } from "@harmoniclabs/cardano-ledger-ts/dist/toData/defaultToDataVersion";
|
|
3
|
+
import { Data, DataConstr } from "@harmoniclabs/plutus-data";
|
|
4
|
+
export declare function getSpendingPurposeData(rdmr: TxRedeemer, tx: TxBody, version?: ToDataVersion): DataConstr;
|
|
5
|
+
export declare function getScriptInfoData(rdmr: TxRedeemer, tx: TxBody, version: ToDataVersion, datum?: Data | undefined): DataConstr;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getScriptInfoData = exports.getSpendingPurposeData = void 0;
|
|
4
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
5
|
+
var plutus_data_1 = require("@harmoniclabs/plutus-data");
|
|
6
|
+
var uint8array_utils_1 = require("@harmoniclabs/uint8array-utils");
|
|
7
|
+
function getSpendingPurposeData(rdmr, tx, version) {
|
|
8
|
+
if (version === void 0) { version = "v3"; }
|
|
9
|
+
var scriptInfos = getScriptInfoData(rdmr, tx, version);
|
|
10
|
+
// for all versions, purpose has never the datum,
|
|
11
|
+
// only script info has the datum
|
|
12
|
+
if (rdmr.tag === cardano_ledger_ts_1.TxRedeemerTag.Spend)
|
|
13
|
+
return new plutus_data_1.DataConstr(scriptInfos.constr, [scriptInfos.fields[0]]);
|
|
14
|
+
return scriptInfos;
|
|
15
|
+
}
|
|
16
|
+
exports.getSpendingPurposeData = getSpendingPurposeData;
|
|
17
|
+
function getScriptInfoData(rdmr, tx, version, datum) {
|
|
18
|
+
var _a, _b, _c, _d, _e, _f;
|
|
19
|
+
version = version !== null && version !== void 0 ? version : "v3";
|
|
20
|
+
var tag = rdmr.tag;
|
|
21
|
+
var ctorIdx;
|
|
22
|
+
var purposeArgs;
|
|
23
|
+
if (tag === cardano_ledger_ts_1.TxRedeemerTag.Mint) {
|
|
24
|
+
ctorIdx = 0;
|
|
25
|
+
var policy = (_a = tx.mint) === null || _a === void 0 ? void 0 : _a.map[rdmr.index + 1].policy;
|
|
26
|
+
if (!(policy instanceof cardano_ledger_ts_1.Hash28))
|
|
27
|
+
throw new Error("invalid minting policy for minting redeemer " + rdmr.index.toString());
|
|
28
|
+
purposeArgs = [new plutus_data_1.DataB(policy.toBuffer())];
|
|
29
|
+
}
|
|
30
|
+
else if (tag === cardano_ledger_ts_1.TxRedeemerTag.Spend) {
|
|
31
|
+
ctorIdx = 1;
|
|
32
|
+
var sortedIns = tx.inputs.slice().sort(function (a, b) {
|
|
33
|
+
var ord = (0, uint8array_utils_1.lexCompare)(a.utxoRef.id.toBuffer(), b.utxoRef.id.toBuffer());
|
|
34
|
+
// if equal tx id order based on tx output index
|
|
35
|
+
if (ord === 0)
|
|
36
|
+
return a.utxoRef.index - b.utxoRef.index;
|
|
37
|
+
// else order by tx id
|
|
38
|
+
return ord;
|
|
39
|
+
});
|
|
40
|
+
var utxoRef = (_b = sortedIns[rdmr.index]) === null || _b === void 0 ? void 0 : _b.utxoRef;
|
|
41
|
+
if (utxoRef === undefined)
|
|
42
|
+
throw new Error("invalid 'Spend' redeemer index: " + rdmr.index.toString() +
|
|
43
|
+
"; tx.inputs.length is: " + tx.inputs.length.toString());
|
|
44
|
+
purposeArgs = [utxoRef.toData(version)];
|
|
45
|
+
if (version === "v3")
|
|
46
|
+
purposeArgs.push((0, plutus_data_1.isData)(datum) ?
|
|
47
|
+
new plutus_data_1.DataConstr(0, [datum]) : // just datum
|
|
48
|
+
new plutus_data_1.DataConstr(1, []) // nothing
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
else if (tag === cardano_ledger_ts_1.TxRedeemerTag.Withdraw) {
|
|
52
|
+
ctorIdx = 2;
|
|
53
|
+
var stakeAddr = (_d = (_c = tx.withdrawals) === null || _c === void 0 ? void 0 : _c.map[rdmr.index]) === null || _d === void 0 ? void 0 : _d.rewardAccount;
|
|
54
|
+
if (stakeAddr === undefined)
|
|
55
|
+
throw new Error("invalid stake credentials for rewarding redeemer " + rdmr.index.toString());
|
|
56
|
+
purposeArgs = [
|
|
57
|
+
new cardano_ledger_ts_1.StakeCredentials(cardano_ledger_ts_1.StakeCredentialsType.Script, new cardano_ledger_ts_1.StakeValidatorHash(stakeAddr.credentials))
|
|
58
|
+
.toData(version)
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
else if (tag === cardano_ledger_ts_1.TxRedeemerTag.Cert) {
|
|
62
|
+
ctorIdx = 3;
|
|
63
|
+
var cert = (_e = tx.certs) === null || _e === void 0 ? void 0 : _e.at(rdmr.index);
|
|
64
|
+
if (cert === undefined)
|
|
65
|
+
throw new Error("invalid certificate for certifyng redeemer " + rdmr.index.toString());
|
|
66
|
+
var tmp = void 0;
|
|
67
|
+
tmp = cert.toData(version);
|
|
68
|
+
while (tmp instanceof plutus_data_1.DataList) {
|
|
69
|
+
tmp = tmp.list[0];
|
|
70
|
+
}
|
|
71
|
+
purposeArgs = [tmp];
|
|
72
|
+
if (version === "v3") {
|
|
73
|
+
purposeArgs.unshift(new plutus_data_1.DataI(rdmr.index));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (version !== "v3") {
|
|
77
|
+
throw new Error("voting and proposing script purpose only introduced in plutus v3");
|
|
78
|
+
}
|
|
79
|
+
else if (tag === cardano_ledger_ts_1.TxRedeemerTag.Voting) {
|
|
80
|
+
ctorIdx = 4;
|
|
81
|
+
var votingProcedure = (_f = tx.votingProcedures) === null || _f === void 0 ? void 0 : _f.procedures[rdmr.index];
|
|
82
|
+
if (!votingProcedure) {
|
|
83
|
+
throw new Error("mismatching voting redeemer, couldn't find voting procedure at index " +
|
|
84
|
+
rdmr.index.toString());
|
|
85
|
+
}
|
|
86
|
+
purposeArgs = [
|
|
87
|
+
votingProcedure.voter.toData(version)
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
else if (tag === cardano_ledger_ts_1.TxRedeemerTag.Proposing) {
|
|
91
|
+
ctorIdx = 5;
|
|
92
|
+
purposeArgs = [];
|
|
93
|
+
}
|
|
94
|
+
else
|
|
95
|
+
throw new Error("invalid redeemer tag");
|
|
96
|
+
return new plutus_data_1.DataConstr(ctorIdx, purposeArgs);
|
|
97
|
+
}
|
|
98
|
+
exports.getScriptInfoData = getScriptInfoData;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GenesisInfos } from "../TxBuilder/GenesisInfos.js";
|
|
2
|
+
import { Data } from "@harmoniclabs/plutus-data";
|
|
3
|
+
import { Tx } from "@harmoniclabs/cardano-ledger-ts";
|
|
4
|
+
export declare function getTxInfos(transaction: Tx, genesisInfos: GenesisInfos | undefined): {
|
|
5
|
+
v1: Data | undefined;
|
|
6
|
+
v2: Data | undefined;
|
|
7
|
+
v3: Data;
|
|
8
|
+
};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTxInfos = void 0;
|
|
4
|
+
var getTxIntervalData_1 = require("./getTxIntervalData.js");
|
|
5
|
+
var plutus_data_1 = require("@harmoniclabs/plutus-data");
|
|
6
|
+
var cardano_ledger_ts_1 = require("@harmoniclabs/cardano-ledger-ts");
|
|
7
|
+
var getSpendingPurposeData_1 = require("./getSpendingPurposeData.js");
|
|
8
|
+
var uint8array_utils_1 = require("@harmoniclabs/uint8array-utils");
|
|
9
|
+
function sortUTxO(a, b) {
|
|
10
|
+
var ord = (0, uint8array_utils_1.lexCompare)(a.utxoRef.id.toBuffer(), b.utxoRef.id.toBuffer());
|
|
11
|
+
// if equal tx id order based on tx output index
|
|
12
|
+
if (ord === 0)
|
|
13
|
+
return a.utxoRef.index - b.utxoRef.index;
|
|
14
|
+
// else order by tx id
|
|
15
|
+
return ord;
|
|
16
|
+
}
|
|
17
|
+
function getTxInfos(transaction, genesisInfos) {
|
|
18
|
+
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;
|
|
19
|
+
var tx = transaction.body, witnesses = transaction.witnesses;
|
|
20
|
+
function redeemerToDataPair(rdmr, version) {
|
|
21
|
+
return new plutus_data_1.DataPair((0, getSpendingPurposeData_1.getSpendingPurposeData)(rdmr, tx, version), rdmr.data.clone());
|
|
22
|
+
}
|
|
23
|
+
var sortedInputs = tx.inputs.slice().sort(sortUTxO);
|
|
24
|
+
var sortedRefInputs = (_a = tx.refInputs) === null || _a === void 0 ? void 0 : _a.slice().sort(sortUTxO);
|
|
25
|
+
var feeData = cardano_ledger_ts_1.Value.lovelaces(tx.fee).toData();
|
|
26
|
+
var mintData = ((_b = tx.mint) !== null && _b !== void 0 ? _b : cardano_ledger_ts_1.Value.lovelaces(0)).toData();
|
|
27
|
+
var mintDataNoLovelaces = new plutus_data_1.DataMap(mintData.map.slice(1));
|
|
28
|
+
var intervalData = (0, getTxIntervalData_1.getTxIntervalData)(tx.validityIntervalStart, tx.ttl, genesisInfos);
|
|
29
|
+
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 : []);
|
|
30
|
+
var datumsData = new plutus_data_1.DataMap((_f = (_e = witnesses.datums) === null || _e === void 0 ? void 0 : _e.map(function (dat) {
|
|
31
|
+
return new plutus_data_1.DataPair(new plutus_data_1.DataB((0, plutus_data_1.hashData)(dat)), dat);
|
|
32
|
+
})) !== null && _f !== void 0 ? _f : []);
|
|
33
|
+
var txIdData = new plutus_data_1.DataB(tx.hash.toBuffer());
|
|
34
|
+
var v1 = undefined;
|
|
35
|
+
try { // input and output to data might fail if only v2
|
|
36
|
+
v1 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
|
|
37
|
+
[
|
|
38
|
+
// inputs
|
|
39
|
+
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v1"); })),
|
|
40
|
+
// outputs
|
|
41
|
+
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v1"); })),
|
|
42
|
+
// fee
|
|
43
|
+
feeData.clone(),
|
|
44
|
+
// mint
|
|
45
|
+
mintData.clone(),
|
|
46
|
+
// dCertificates
|
|
47
|
+
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 : []),
|
|
48
|
+
// withderawals
|
|
49
|
+
(_k = (_j = tx.withdrawals) === null || _j === void 0 ? void 0 : _j.toData("v1")) !== null && _k !== void 0 ? _k : new plutus_data_1.DataMap([]),
|
|
50
|
+
// interval
|
|
51
|
+
intervalData.clone(),
|
|
52
|
+
// signatories
|
|
53
|
+
sigsData.clone(),
|
|
54
|
+
// datums
|
|
55
|
+
datumsData.clone(),
|
|
56
|
+
// id
|
|
57
|
+
new plutus_data_1.DataConstr(0, [txIdData.clone()])
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
catch ( // input or output can't be v1 (inline datums etc...)
|
|
61
|
+
_0) { // input or output can't be v1 (inline datums etc...)
|
|
62
|
+
v1 = undefined;
|
|
63
|
+
}
|
|
64
|
+
var v2 = undefined;
|
|
65
|
+
try {
|
|
66
|
+
v2 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
|
|
67
|
+
[
|
|
68
|
+
// inputs
|
|
69
|
+
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v2"); })),
|
|
70
|
+
// refInputs
|
|
71
|
+
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 : []),
|
|
72
|
+
// outputs
|
|
73
|
+
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v2"); })),
|
|
74
|
+
// fee
|
|
75
|
+
feeData,
|
|
76
|
+
// mint
|
|
77
|
+
mintData,
|
|
78
|
+
// dCertificates
|
|
79
|
+
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 : []),
|
|
80
|
+
// withderawals
|
|
81
|
+
(_q = (_p = tx.withdrawals) === null || _p === void 0 ? void 0 : _p.toData("v2")) !== null && _q !== void 0 ? _q : new plutus_data_1.DataMap([]),
|
|
82
|
+
// interval
|
|
83
|
+
intervalData,
|
|
84
|
+
// signatories
|
|
85
|
+
sigsData,
|
|
86
|
+
// redeemers
|
|
87
|
+
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 : []),
|
|
88
|
+
// datums
|
|
89
|
+
datumsData,
|
|
90
|
+
// id
|
|
91
|
+
new plutus_data_1.DataConstr(0, [txIdData.clone()])
|
|
92
|
+
]);
|
|
93
|
+
}
|
|
94
|
+
catch (_1) {
|
|
95
|
+
v2 = undefined;
|
|
96
|
+
}
|
|
97
|
+
var v3 = new plutus_data_1.DataConstr(0, // PTxInfo; only costructor
|
|
98
|
+
[
|
|
99
|
+
// inputs
|
|
100
|
+
new plutus_data_1.DataList(sortedInputs.map(function (input) { return input.toData("v3"); })),
|
|
101
|
+
// refInputs
|
|
102
|
+
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 : []),
|
|
103
|
+
// outputs
|
|
104
|
+
new plutus_data_1.DataList(tx.outputs.map(function (out) { return out.toData("v3"); })),
|
|
105
|
+
// fee (only lovelaces)
|
|
106
|
+
new plutus_data_1.DataI(tx.fee),
|
|
107
|
+
// mint
|
|
108
|
+
mintDataNoLovelaces,
|
|
109
|
+
// certificates
|
|
110
|
+
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 : []),
|
|
111
|
+
// withderawals
|
|
112
|
+
(_x = (_w = tx.withdrawals) === null || _w === void 0 ? void 0 : _w.toData("v3")) !== null && _x !== void 0 ? _x : new plutus_data_1.DataMap([]),
|
|
113
|
+
// interval
|
|
114
|
+
intervalData,
|
|
115
|
+
// signatories
|
|
116
|
+
sigsData,
|
|
117
|
+
// redeemers
|
|
118
|
+
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 : []),
|
|
119
|
+
// datums
|
|
120
|
+
datumsData,
|
|
121
|
+
// id
|
|
122
|
+
txIdData
|
|
123
|
+
]);
|
|
124
|
+
return { v1: v1, v2: v2, v3: v3 };
|
|
125
|
+
}
|
|
126
|
+
exports.getTxInfos = getTxInfos;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DataConstr } from "@harmoniclabs/plutus-data";
|
|
2
|
+
import { GenesisInfos, NormalizedGenesisInfos } from "../TxBuilder/GenesisInfos.js";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param POSIX POSIX time in milliseconds
|
|
6
|
+
* @param sysStartPOSIX blockchain start POSIX time in milliseconds
|
|
7
|
+
* @param slotLenMs milliseconds per slot
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function POSIXToSlot(unixTime: number, gInfos: NormalizedGenesisInfos): number;
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param slotN number of the slot
|
|
14
|
+
* @param sysStartPOSIX blockchain start POSIX time in milliseconds
|
|
15
|
+
* @param slotLenMs milliseconds per slot
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export declare function slotToPOSIX(slot: number, gInfos: NormalizedGenesisInfos): number;
|
|
19
|
+
export declare function getTxIntervalData(startSlot: bigint | undefined, ttlSlot: bigint | undefined, geneisInfos: GenesisInfos | undefined): DataConstr;
|