@fleet-sdk/common 0.1.0-alpha.29 → 0.1.0-alpha.31
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/CHANGELOG.md +7 -0
- package/dist/cjs/types/boxes.d.ts +7 -6
- package/dist/cjs/types/common.js +2 -2
- package/dist/cjs/types/common.js.map +1 -1
- package/dist/cjs/utils/arrayUtils.d.ts +6 -2
- package/dist/cjs/utils/arrayUtils.js +23 -1
- package/dist/cjs/utils/arrayUtils.js.map +1 -1
- package/dist/cjs/utils/boxUtils.d.ts +12 -9
- package/dist/cjs/utils/boxUtils.js +61 -16
- package/dist/cjs/utils/boxUtils.js.map +1 -1
- package/dist/esm/types/boxes.d.ts +7 -6
- package/dist/esm/utils/arrayUtils.d.ts +6 -2
- package/dist/esm/utils/arrayUtils.js +20 -0
- package/dist/esm/utils/arrayUtils.js.map +1 -1
- package/dist/esm/utils/boxUtils.d.ts +12 -9
- package/dist/esm/utils/boxUtils.js +58 -14
- package/dist/esm/utils/boxUtils.js.map +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/types/boxes.ts +13 -6
- package/src/utils/arrayUtils.ts +36 -2
- package/src/utils/boxUtils.ts +90 -22
package/CHANGELOG.md
ADDED
@@ -3,17 +3,18 @@ import { NonMandatoryRegisters } from "./registers";
|
|
3
3
|
import { TokenAmount } from "./token";
|
4
4
|
import { TransactionId } from "./transactions";
|
5
5
|
export type BoxId = string;
|
6
|
-
type
|
6
|
+
export type AmountType = string | bigint;
|
7
|
+
type BoxBaseType<T extends AmountType, R extends NonMandatoryRegisters> = {
|
7
8
|
ergoTree: ErgoTree;
|
8
9
|
creationHeight: number;
|
9
|
-
value:
|
10
|
-
assets: TokenAmount<
|
11
|
-
additionalRegisters:
|
10
|
+
value: T;
|
11
|
+
assets: TokenAmount<T>[];
|
12
|
+
additionalRegisters: R;
|
12
13
|
};
|
13
|
-
export type BoxCandidate<AmountType> = BoxBaseType<
|
14
|
+
export type BoxCandidate<T extends AmountType, R extends NonMandatoryRegisters = NonMandatoryRegisters> = BoxBaseType<T, R> & {
|
14
15
|
boxId?: BoxId;
|
15
16
|
};
|
16
|
-
export type Box<AmountType> = BoxBaseType<
|
17
|
+
export type Box<T extends AmountType, R extends NonMandatoryRegisters = NonMandatoryRegisters> = BoxBaseType<T, R> & {
|
17
18
|
boxId: BoxId;
|
18
19
|
transactionId: TransactionId;
|
19
20
|
index: number;
|
package/dist/cjs/types/common.js
CHANGED
@@ -5,11 +5,11 @@ var Network;
|
|
5
5
|
(function (Network) {
|
6
6
|
Network[Network["Mainnet"] = 0] = "Mainnet";
|
7
7
|
Network[Network["Testnet"] = 16] = "Testnet";
|
8
|
-
})(Network
|
8
|
+
})(Network || (exports.Network = Network = {}));
|
9
9
|
var AddressType;
|
10
10
|
(function (AddressType) {
|
11
11
|
AddressType[AddressType["P2PK"] = 1] = "P2PK";
|
12
12
|
AddressType[AddressType["P2SH"] = 2] = "P2SH";
|
13
13
|
AddressType[AddressType["P2S"] = 3] = "P2S";
|
14
|
-
})(AddressType
|
14
|
+
})(AddressType || (exports.AddressType = AddressType = {}));
|
15
15
|
//# sourceMappingURL=common.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":";;;AAcA,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,2CAAgB,CAAA;IAChB,4CAAgB,CAAA;AAClB,CAAC,EAHW,OAAO,
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":";;;AAcA,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,2CAAgB,CAAA;IAChB,4CAAgB,CAAA;AAClB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,6CAAQ,CAAA;IACR,6CAAQ,CAAA;IACR,2CAAO,CAAA;AACT,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { SortingDirection, SortingSelector } from "../types";
|
2
|
+
type ObjectSelector<T> = (item: T) => T[keyof T];
|
2
3
|
export declare function isEmpty<T extends object>(obj?: T): obj is undefined;
|
3
4
|
export declare function isEmpty<T>(array?: T[]): array is undefined;
|
4
5
|
export declare function some<T extends object>(obj?: T): obj is T;
|
@@ -13,10 +14,13 @@ export declare function hasDuplicates<T>(array: T[]): boolean;
|
|
13
14
|
/**
|
14
15
|
* Check for duplicate keys in complex elements
|
15
16
|
*/
|
16
|
-
export declare function hasDuplicatesBy<T>(array: T[], selector:
|
17
|
+
export declare function hasDuplicatesBy<T>(array: T[], selector: ObjectSelector<T>): boolean;
|
17
18
|
export declare function chunk<T>(array: T[], size: number): T[][];
|
18
19
|
export declare function orderBy<T>(array: T[], iteratee: SortingSelector<T>, order?: SortingDirection): T[];
|
19
20
|
export declare function areEqual<T>(array1: ArrayLike<T>, array2: ArrayLike<T>): boolean;
|
20
|
-
export declare function areEqualBy<T>(array1: ArrayLike<T>, array2: ArrayLike<T>, selector:
|
21
|
+
export declare function areEqualBy<T>(array1: ArrayLike<T>, array2: ArrayLike<T>, selector: ObjectSelector<T>): boolean;
|
21
22
|
export declare function startsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>): boolean;
|
22
23
|
export declare function endsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>): boolean;
|
24
|
+
export declare function uniq<T>(array: Array<T>): Array<T>;
|
25
|
+
export declare function uniqBy<T>(array: Array<T>, selector: ObjectSelector<T>, selection?: "keep-first" | "keep-last"): Array<T>;
|
26
|
+
export {};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.endsWith = exports.startsWith = exports.areEqualBy = exports.areEqual = exports.orderBy = exports.chunk = exports.hasDuplicatesBy = exports.hasDuplicates = exports.first = exports.some = exports.isEmpty = void 0;
|
3
|
+
exports.uniqBy = exports.uniq = exports.endsWith = exports.startsWith = exports.areEqualBy = exports.areEqual = exports.orderBy = exports.chunk = exports.hasDuplicatesBy = exports.hasDuplicates = exports.first = exports.some = exports.isEmpty = void 0;
|
4
4
|
function isEmpty(obj) {
|
5
5
|
if (!obj) {
|
6
6
|
return true;
|
@@ -126,4 +126,26 @@ function endsWith(array, target) {
|
|
126
126
|
return true;
|
127
127
|
}
|
128
128
|
exports.endsWith = endsWith;
|
129
|
+
function uniq(array) {
|
130
|
+
if (isEmpty(array)) {
|
131
|
+
return array;
|
132
|
+
}
|
133
|
+
return Array.from(new Set(array));
|
134
|
+
}
|
135
|
+
exports.uniq = uniq;
|
136
|
+
function uniqBy(array, selector, selection = "keep-first") {
|
137
|
+
if (isEmpty(array)) {
|
138
|
+
return array;
|
139
|
+
}
|
140
|
+
return Array.from(array
|
141
|
+
.reduce((map, e) => {
|
142
|
+
const key = selector(e);
|
143
|
+
if (selection === "keep-first" && map.has(key)) {
|
144
|
+
return map;
|
145
|
+
}
|
146
|
+
return map.set(key, e);
|
147
|
+
}, new Map())
|
148
|
+
.values());
|
149
|
+
}
|
150
|
+
exports.uniqBy = uniqBy;
|
129
151
|
//# sourceMappingURL=arrayUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,18 +1,21 @@
|
|
1
|
-
import { Amount, NonMandatoryRegisters, TokenId } from "../types";
|
2
|
-
export declare function utxoSum(boxes: MinimalBoxAmounts):
|
1
|
+
import { Amount, AmountType, Box, NonMandatoryRegisters, TokenAmount, TokenId } from "../types";
|
2
|
+
export declare function utxoSum(boxes: MinimalBoxAmounts): BoxSummary;
|
3
3
|
export declare function utxoSum(boxes: MinimalBoxAmounts, tokenId: TokenId): bigint;
|
4
|
-
export declare function
|
4
|
+
export declare function utxoDiff(minuend: BoxSummary | Box<Amount>[], subtrahend: BoxSummary | Box<Amount>[]): BoxSummary;
|
5
5
|
export declare function areRegistersDenselyPacked(registers: NonMandatoryRegisters): boolean;
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
export declare function utxoFilter<T extends AmountType>(utxos: Box<T>[], filterParams: UTxOFilterParams<T>): Box<T>[];
|
7
|
+
export type UTxOFilterParams<T extends AmountType> = {
|
8
|
+
by?: (utxo: Box<T>) => boolean;
|
9
|
+
max?: {
|
10
|
+
count?: number;
|
11
|
+
aggregatedDistinctTokens?: number;
|
12
|
+
};
|
9
13
|
};
|
10
|
-
export type
|
14
|
+
export type BoxSummary = {
|
11
15
|
nanoErgs: bigint;
|
12
16
|
tokens: TokenAmount<bigint>[];
|
13
17
|
};
|
14
|
-
type MinimalBoxAmounts = readonly {
|
18
|
+
export type MinimalBoxAmounts = readonly {
|
15
19
|
value: Amount;
|
16
20
|
assets: TokenAmount<Amount>[];
|
17
21
|
}[];
|
18
|
-
export {};
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.areRegistersDenselyPacked = exports.
|
3
|
+
exports.utxoFilter = exports.areRegistersDenselyPacked = exports.utxoDiff = exports.utxoSum = void 0;
|
4
|
+
const arrayUtils_1 = require("./arrayUtils");
|
4
5
|
const bigIntLiterals_1 = require("./bigIntLiterals");
|
5
6
|
const bigIntUtils_1 = require("./bigIntUtils");
|
6
7
|
const objectUtils_1 = require("./objectUtils");
|
@@ -24,42 +25,86 @@ function utxoSum(boxes, tokenId) {
|
|
24
25
|
return balances[tokenId] || bigIntLiterals_1._0n;
|
25
26
|
}
|
26
27
|
return {
|
27
|
-
nanoErgs: balances[NANOERGS_TOKEN_ID],
|
28
|
+
nanoErgs: balances[NANOERGS_TOKEN_ID] || bigIntLiterals_1._0n,
|
28
29
|
tokens: Object.keys(balances)
|
29
30
|
.filter((x) => x !== NANOERGS_TOKEN_ID)
|
30
31
|
.map((tokenId) => ({ tokenId, amount: balances[tokenId] }))
|
31
32
|
};
|
32
33
|
}
|
33
34
|
exports.utxoSum = utxoSum;
|
34
|
-
function
|
35
|
+
function utxoDiff(minuend, subtrahend) {
|
36
|
+
if (Array.isArray(minuend)) {
|
37
|
+
minuend = utxoSum(minuend);
|
38
|
+
}
|
39
|
+
if (Array.isArray(subtrahend)) {
|
40
|
+
subtrahend = utxoSum(subtrahend);
|
41
|
+
}
|
35
42
|
const tokens = [];
|
36
|
-
const nanoErgs =
|
37
|
-
for (const token of
|
38
|
-
const balance = token.amount - (
|
43
|
+
const nanoErgs = minuend.nanoErgs - subtrahend.nanoErgs;
|
44
|
+
for (const token of minuend.tokens) {
|
45
|
+
const balance = token.amount - (subtrahend.tokens.find((t) => t.tokenId === token.tokenId)?.amount || bigIntLiterals_1._0n);
|
39
46
|
if (balance !== bigIntLiterals_1._0n) {
|
40
47
|
tokens.push({ tokenId: token.tokenId, amount: balance });
|
41
48
|
}
|
42
49
|
}
|
43
50
|
return { nanoErgs, tokens };
|
44
51
|
}
|
45
|
-
exports.
|
46
|
-
const
|
47
|
-
const
|
52
|
+
exports.utxoDiff = utxoDiff;
|
53
|
+
const MIN_NON_MANDATORY_REGISTER_INDEX = 4;
|
54
|
+
const MAX_NON_MANDATORY_REGISTER_INDEX = 9;
|
48
55
|
function areRegistersDenselyPacked(registers) {
|
49
|
-
let
|
50
|
-
for (let i =
|
51
|
-
|
52
|
-
|
53
|
-
|
56
|
+
let lastIndex = 0;
|
57
|
+
for (let i = MIN_NON_MANDATORY_REGISTER_INDEX; i <= MAX_NON_MANDATORY_REGISTER_INDEX; i++) {
|
58
|
+
const key = `R${i}`;
|
59
|
+
if (registers[key]) {
|
60
|
+
if (i === MIN_NON_MANDATORY_REGISTER_INDEX) {
|
61
|
+
lastIndex = i;
|
54
62
|
continue;
|
55
63
|
}
|
56
|
-
if (i -
|
64
|
+
if (i - lastIndex > 1) {
|
57
65
|
return false;
|
58
66
|
}
|
59
|
-
|
67
|
+
lastIndex = i;
|
60
68
|
}
|
61
69
|
}
|
62
70
|
return true;
|
63
71
|
}
|
64
72
|
exports.areRegistersDenselyPacked = areRegistersDenselyPacked;
|
73
|
+
function utxoFilter(utxos, filterParams) {
|
74
|
+
if ((0, arrayUtils_1.isEmpty)(filterParams) || (0, arrayUtils_1.isEmpty)(utxos)) {
|
75
|
+
return utxos;
|
76
|
+
}
|
77
|
+
const { by, max } = filterParams;
|
78
|
+
let filtered = utxos;
|
79
|
+
if (by) {
|
80
|
+
filtered = utxos.filter(by);
|
81
|
+
if ((0, arrayUtils_1.isEmpty)(filtered)) {
|
82
|
+
return filtered;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
if (!max) {
|
86
|
+
return filtered;
|
87
|
+
}
|
88
|
+
if ((0, objectUtils_1.isDefined)(max.aggregatedDistinctTokens)) {
|
89
|
+
const tokenIds = _getDistinctTokenIds(filtered, max.aggregatedDistinctTokens);
|
90
|
+
filtered = filtered.filter((utxo) => (0, arrayUtils_1.isEmpty)(utxo.assets) || utxo.assets.every((token) => tokenIds.has(token.tokenId)));
|
91
|
+
}
|
92
|
+
if ((0, objectUtils_1.isDefined)(max.count) && filtered.length > max.count) {
|
93
|
+
filtered = filtered.slice(0, max.count);
|
94
|
+
}
|
95
|
+
return filtered;
|
96
|
+
}
|
97
|
+
exports.utxoFilter = utxoFilter;
|
98
|
+
function _getDistinctTokenIds(utxos, max) {
|
99
|
+
const tokenIds = new Set();
|
100
|
+
for (let i = 0; i < utxos.length && tokenIds.size < max; i++) {
|
101
|
+
if ((0, arrayUtils_1.isEmpty)(utxos[i].assets) || utxos[i].assets.length > max) {
|
102
|
+
continue;
|
103
|
+
}
|
104
|
+
for (const token of utxos[i].assets) {
|
105
|
+
tokenIds.add(token.tokenId);
|
106
|
+
}
|
107
|
+
}
|
108
|
+
return tokenIds;
|
109
|
+
}
|
65
110
|
//# sourceMappingURL=boxUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"boxUtils.js","sourceRoot":"","sources":["../../../src/utils/boxUtils.ts"],"names":[],"mappings":";;;AACA,qDAAuC;AACvC,+CAA6C;AAC7C,+CAAuD;AAEvD,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAIrC,SAAgB,OAAO,CAAC,KAAwB,EAAE,OAAiB;IACjE,MAAM,QAAQ,GAAkC,EAAE,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,IAAA,yBAAW,EAAC,OAAO,CAAC,IAAI,OAAO,KAAK,iBAAiB,EAAE;YACzD,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,oBAAG,CAAC,GAAG,IAAA,0BAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC9F;QAED,IAAI,OAAO,KAAK,iBAAiB,EAAE;YACjC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC9B,IAAI,IAAA,uBAAS,EAAC,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE;oBACnD,SAAS;iBACV;gBAED,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,oBAAG,CAAC,GAAG,IAAA,0BAAY,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACzF;SACF;KACF;IAED,IAAI,IAAA,uBAAS,EAAC,OAAO,CAAC,EAAE;QACtB,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,oBAAG,CAAC;KACjC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"boxUtils.js","sourceRoot":"","sources":["../../../src/utils/boxUtils.ts"],"names":[],"mappings":"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"}
|
@@ -3,17 +3,18 @@ import { NonMandatoryRegisters } from "./registers";
|
|
3
3
|
import { TokenAmount } from "./token";
|
4
4
|
import { TransactionId } from "./transactions";
|
5
5
|
export type BoxId = string;
|
6
|
-
type
|
6
|
+
export type AmountType = string | bigint;
|
7
|
+
type BoxBaseType<T extends AmountType, R extends NonMandatoryRegisters> = {
|
7
8
|
ergoTree: ErgoTree;
|
8
9
|
creationHeight: number;
|
9
|
-
value:
|
10
|
-
assets: TokenAmount<
|
11
|
-
additionalRegisters:
|
10
|
+
value: T;
|
11
|
+
assets: TokenAmount<T>[];
|
12
|
+
additionalRegisters: R;
|
12
13
|
};
|
13
|
-
export type BoxCandidate<AmountType> = BoxBaseType<
|
14
|
+
export type BoxCandidate<T extends AmountType, R extends NonMandatoryRegisters = NonMandatoryRegisters> = BoxBaseType<T, R> & {
|
14
15
|
boxId?: BoxId;
|
15
16
|
};
|
16
|
-
export type Box<AmountType> = BoxBaseType<
|
17
|
+
export type Box<T extends AmountType, R extends NonMandatoryRegisters = NonMandatoryRegisters> = BoxBaseType<T, R> & {
|
17
18
|
boxId: BoxId;
|
18
19
|
transactionId: TransactionId;
|
19
20
|
index: number;
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { SortingDirection, SortingSelector } from "../types";
|
2
|
+
type ObjectSelector<T> = (item: T) => T[keyof T];
|
2
3
|
export declare function isEmpty<T extends object>(obj?: T): obj is undefined;
|
3
4
|
export declare function isEmpty<T>(array?: T[]): array is undefined;
|
4
5
|
export declare function some<T extends object>(obj?: T): obj is T;
|
@@ -13,10 +14,13 @@ export declare function hasDuplicates<T>(array: T[]): boolean;
|
|
13
14
|
/**
|
14
15
|
* Check for duplicate keys in complex elements
|
15
16
|
*/
|
16
|
-
export declare function hasDuplicatesBy<T>(array: T[], selector:
|
17
|
+
export declare function hasDuplicatesBy<T>(array: T[], selector: ObjectSelector<T>): boolean;
|
17
18
|
export declare function chunk<T>(array: T[], size: number): T[][];
|
18
19
|
export declare function orderBy<T>(array: T[], iteratee: SortingSelector<T>, order?: SortingDirection): T[];
|
19
20
|
export declare function areEqual<T>(array1: ArrayLike<T>, array2: ArrayLike<T>): boolean;
|
20
|
-
export declare function areEqualBy<T>(array1: ArrayLike<T>, array2: ArrayLike<T>, selector:
|
21
|
+
export declare function areEqualBy<T>(array1: ArrayLike<T>, array2: ArrayLike<T>, selector: ObjectSelector<T>): boolean;
|
21
22
|
export declare function startsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>): boolean;
|
22
23
|
export declare function endsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>): boolean;
|
24
|
+
export declare function uniq<T>(array: Array<T>): Array<T>;
|
25
|
+
export declare function uniqBy<T>(array: Array<T>, selector: ObjectSelector<T>, selection?: "keep-first" | "keep-last"): Array<T>;
|
26
|
+
export {};
|
@@ -112,4 +112,24 @@ export function endsWith(array, target) {
|
|
112
112
|
}
|
113
113
|
return true;
|
114
114
|
}
|
115
|
+
export function uniq(array) {
|
116
|
+
if (isEmpty(array)) {
|
117
|
+
return array;
|
118
|
+
}
|
119
|
+
return Array.from(new Set(array));
|
120
|
+
}
|
121
|
+
export function uniqBy(array, selector, selection = "keep-first") {
|
122
|
+
if (isEmpty(array)) {
|
123
|
+
return array;
|
124
|
+
}
|
125
|
+
return Array.from(array
|
126
|
+
.reduce((map, e) => {
|
127
|
+
const key = selector(e);
|
128
|
+
if (selection === "keep-first" && map.has(key)) {
|
129
|
+
return map;
|
130
|
+
}
|
131
|
+
return map.set(key, e);
|
132
|
+
}, new Map())
|
133
|
+
.values());
|
134
|
+
}
|
115
135
|
//# sourceMappingURL=arrayUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,18 +1,21 @@
|
|
1
|
-
import { Amount, NonMandatoryRegisters, TokenId } from "../types";
|
2
|
-
export declare function utxoSum(boxes: MinimalBoxAmounts):
|
1
|
+
import { Amount, AmountType, Box, NonMandatoryRegisters, TokenAmount, TokenId } from "../types";
|
2
|
+
export declare function utxoSum(boxes: MinimalBoxAmounts): BoxSummary;
|
3
3
|
export declare function utxoSum(boxes: MinimalBoxAmounts, tokenId: TokenId): bigint;
|
4
|
-
export declare function
|
4
|
+
export declare function utxoDiff(minuend: BoxSummary | Box<Amount>[], subtrahend: BoxSummary | Box<Amount>[]): BoxSummary;
|
5
5
|
export declare function areRegistersDenselyPacked(registers: NonMandatoryRegisters): boolean;
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
export declare function utxoFilter<T extends AmountType>(utxos: Box<T>[], filterParams: UTxOFilterParams<T>): Box<T>[];
|
7
|
+
export type UTxOFilterParams<T extends AmountType> = {
|
8
|
+
by?: (utxo: Box<T>) => boolean;
|
9
|
+
max?: {
|
10
|
+
count?: number;
|
11
|
+
aggregatedDistinctTokens?: number;
|
12
|
+
};
|
9
13
|
};
|
10
|
-
export type
|
14
|
+
export type BoxSummary = {
|
11
15
|
nanoErgs: bigint;
|
12
16
|
tokens: TokenAmount<bigint>[];
|
13
17
|
};
|
14
|
-
type MinimalBoxAmounts = readonly {
|
18
|
+
export type MinimalBoxAmounts = readonly {
|
15
19
|
value: Amount;
|
16
20
|
assets: TokenAmount<Amount>[];
|
17
21
|
}[];
|
18
|
-
export {};
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { isEmpty } from "./arrayUtils";
|
1
2
|
import { _0n } from "./bigIntLiterals";
|
2
3
|
import { ensureBigInt } from "./bigIntUtils";
|
3
4
|
import { isDefined, isUndefined } from "./objectUtils";
|
@@ -21,39 +22,82 @@ export function utxoSum(boxes, tokenId) {
|
|
21
22
|
return balances[tokenId] || _0n;
|
22
23
|
}
|
23
24
|
return {
|
24
|
-
nanoErgs: balances[NANOERGS_TOKEN_ID],
|
25
|
+
nanoErgs: balances[NANOERGS_TOKEN_ID] || _0n,
|
25
26
|
tokens: Object.keys(balances)
|
26
27
|
.filter((x) => x !== NANOERGS_TOKEN_ID)
|
27
28
|
.map((tokenId) => ({ tokenId, amount: balances[tokenId] }))
|
28
29
|
};
|
29
30
|
}
|
30
|
-
export function
|
31
|
+
export function utxoDiff(minuend, subtrahend) {
|
32
|
+
if (Array.isArray(minuend)) {
|
33
|
+
minuend = utxoSum(minuend);
|
34
|
+
}
|
35
|
+
if (Array.isArray(subtrahend)) {
|
36
|
+
subtrahend = utxoSum(subtrahend);
|
37
|
+
}
|
31
38
|
const tokens = [];
|
32
|
-
const nanoErgs =
|
33
|
-
for (const token of
|
34
|
-
const balance = token.amount - (
|
39
|
+
const nanoErgs = minuend.nanoErgs - subtrahend.nanoErgs;
|
40
|
+
for (const token of minuend.tokens) {
|
41
|
+
const balance = token.amount - (subtrahend.tokens.find((t) => t.tokenId === token.tokenId)?.amount || _0n);
|
35
42
|
if (balance !== _0n) {
|
36
43
|
tokens.push({ tokenId: token.tokenId, amount: balance });
|
37
44
|
}
|
38
45
|
}
|
39
46
|
return { nanoErgs, tokens };
|
40
47
|
}
|
41
|
-
const
|
42
|
-
const
|
48
|
+
const MIN_NON_MANDATORY_REGISTER_INDEX = 4;
|
49
|
+
const MAX_NON_MANDATORY_REGISTER_INDEX = 9;
|
43
50
|
export function areRegistersDenselyPacked(registers) {
|
44
|
-
let
|
45
|
-
for (let i =
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
let lastIndex = 0;
|
52
|
+
for (let i = MIN_NON_MANDATORY_REGISTER_INDEX; i <= MAX_NON_MANDATORY_REGISTER_INDEX; i++) {
|
53
|
+
const key = `R${i}`;
|
54
|
+
if (registers[key]) {
|
55
|
+
if (i === MIN_NON_MANDATORY_REGISTER_INDEX) {
|
56
|
+
lastIndex = i;
|
49
57
|
continue;
|
50
58
|
}
|
51
|
-
if (i -
|
59
|
+
if (i - lastIndex > 1) {
|
52
60
|
return false;
|
53
61
|
}
|
54
|
-
|
62
|
+
lastIndex = i;
|
55
63
|
}
|
56
64
|
}
|
57
65
|
return true;
|
58
66
|
}
|
67
|
+
export function utxoFilter(utxos, filterParams) {
|
68
|
+
if (isEmpty(filterParams) || isEmpty(utxos)) {
|
69
|
+
return utxos;
|
70
|
+
}
|
71
|
+
const { by, max } = filterParams;
|
72
|
+
let filtered = utxos;
|
73
|
+
if (by) {
|
74
|
+
filtered = utxos.filter(by);
|
75
|
+
if (isEmpty(filtered)) {
|
76
|
+
return filtered;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
if (!max) {
|
80
|
+
return filtered;
|
81
|
+
}
|
82
|
+
if (isDefined(max.aggregatedDistinctTokens)) {
|
83
|
+
const tokenIds = _getDistinctTokenIds(filtered, max.aggregatedDistinctTokens);
|
84
|
+
filtered = filtered.filter((utxo) => isEmpty(utxo.assets) || utxo.assets.every((token) => tokenIds.has(token.tokenId)));
|
85
|
+
}
|
86
|
+
if (isDefined(max.count) && filtered.length > max.count) {
|
87
|
+
filtered = filtered.slice(0, max.count);
|
88
|
+
}
|
89
|
+
return filtered;
|
90
|
+
}
|
91
|
+
function _getDistinctTokenIds(utxos, max) {
|
92
|
+
const tokenIds = new Set();
|
93
|
+
for (let i = 0; i < utxos.length && tokenIds.size < max; i++) {
|
94
|
+
if (isEmpty(utxos[i].assets) || utxos[i].assets.length > max) {
|
95
|
+
continue;
|
96
|
+
}
|
97
|
+
for (const token of utxos[i].assets) {
|
98
|
+
tokenIds.add(token.tokenId);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
return tokenIds;
|
102
|
+
}
|
59
103
|
//# sourceMappingURL=boxUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"boxUtils.js","sourceRoot":"","sources":["../../../src/utils/boxUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAIrC,MAAM,UAAU,OAAO,CAAC,KAAwB,EAAE,OAAiB;IACjE,MAAM,QAAQ,GAAkC,EAAE,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,iBAAiB,EAAE;YACzD,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC9F;QAED,IAAI,OAAO,KAAK,iBAAiB,EAAE;YACjC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC9B,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE;oBACnD,SAAS;iBACV;gBAED,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACzF;SACF;KACF;IAED,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;QACtB,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;KACjC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"boxUtils.js","sourceRoot":"","sources":["../../../src/utils/boxUtils.ts"],"names":[],"mappings":"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"}
|