@mutants/cardano-tx-builder
Version:
A package that provides utility functions to build and destructure a cardano transaction
291 lines (290 loc) • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const selectUtxosByValue_1 = require("../selectUtxosByValue");
describe("selectUtxosByValue", () => {
test("should work for simple lovelace values", () => {
const utxo = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 49963577n,
},
},
coin: 1500000n,
},
};
expect((0, selectUtxosByValue_1.selectUtxosByValue)([utxo], {
coin: 1000000n,
})).toEqual({
fulfilled: true,
selectedUtxos: [utxo],
totalValueSelected: utxo.value,
});
});
test("should work for simple asset values", () => {
const utxo = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 1500000n,
},
};
expect((0, selectUtxosByValue_1.selectUtxosByValue)([utxo], {
coin: 1000000n,
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
})).toEqual({
fulfilled: true,
missing: undefined,
selectedUtxos: [utxo],
totalValueSelected: utxo.value,
});
});
test("should work for composed lovelace values", () => {
const utxo1 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 49963577n,
},
},
coin: 1500000n,
},
};
const utxo2 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 1,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 49963577n,
},
},
coin: 5500000n,
},
};
const utxo3 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 2,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 49963577n,
},
},
coin: 1500000n,
},
};
const result = (0, selectUtxosByValue_1.selectUtxosByValue)([utxo1, utxo2, utxo3], {
coin: 7000000n,
}, "4310");
expect(result).toEqual({
fulfilled: true,
missing: undefined,
selectedUtxos: [utxo2, utxo1, utxo3],
totalValueSelected: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 149890731n,
},
},
coin: 8500000n,
},
});
});
test("should work for composed values with lovelace and assets", () => {
const utxo1 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 1500000n,
},
};
const utxo2 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 1,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 5500000n,
},
};
const utxo3 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 2,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 1500000n,
},
};
const result = (0, selectUtxosByValue_1.selectUtxosByValue)([utxo1, utxo2, utxo3], {
coin: 5000000n,
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 2n,
},
},
});
expect(result).toEqual({
fulfilled: true,
missing: undefined,
selectedUtxos: [utxo1, utxo2],
totalValueSelected: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 2n,
},
},
coin: 7000000n,
},
});
});
test("should prioritize large coin inputs", () => {
const utxo1 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 1500000n,
},
};
const utxo2 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 1,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 5500000n,
},
};
const utxo3 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 2,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 100000000n,
},
};
const result = (0, selectUtxosByValue_1.selectUtxosByValue)([utxo1, utxo2, utxo3], {
coin: 5000000n,
});
expect(result).toEqual({
fulfilled: true,
missing: undefined,
selectedUtxos: [utxo3],
totalValueSelected: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 100000000n,
},
});
});
test("should work correctly when there are missing values", () => {
const utxo1 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 0,
value: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 1500000n,
},
};
const utxo2 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 1,
value: {
coin: 5500000n,
},
};
const utxo3 = {
address: "addr1q8ew6zde7g6nke27dad7drpqnam4zvy0d66vatvnr9l47vu85wjp4jxccnf3kuk7n46w83vtkjef2kfm5ecrsascrddqvscrlx",
txHash: "aab914f4b36f15b85bc2cd94309bd88b367dc27a1e5b5744773213f527f36eef",
txIndex: 2,
value: {
coin: 1500000n,
},
};
const result = (0, selectUtxosByValue_1.selectUtxosByValue)([utxo2, utxo1, utxo3], {
coin: 7000000n,
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 2n,
},
},
});
expect(result).toEqual({
fulfilled: false,
missing: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 0n,
},
selectedUtxos: [utxo1, utxo2, utxo3],
totalValueSelected: {
assets: {
"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6": {
"4d494e": 1n,
},
},
coin: 8500000n,
},
});
});
});