@pax2pay/model-banking 0.1.377 → 0.1.379
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/Counterbalance.ts +2 -11
- package/Counterbalances.ts +0 -7
- package/Treasury/Snapshot/Fragment.ts +83 -27
- package/dist/Counterbalance.d.ts +1 -2
- package/dist/Counterbalance.js +1 -12
- package/dist/Counterbalance.js.map +1 -1
- package/dist/Counterbalances.d.ts +0 -1
- package/dist/Counterbalances.js +0 -8
- package/dist/Counterbalances.js.map +1 -1
- package/dist/Treasury/Snapshot/Fragment.d.ts +28 -20
- package/dist/Treasury/Snapshot/Fragment.js +72 -26
- package/dist/Treasury/Snapshot/Fragment.js.map +1 -1
- package/package.json +1 -1
package/Counterbalance.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { isoly } from "isoly"
|
|
2
1
|
import { isly } from "isly"
|
|
3
2
|
|
|
4
3
|
export type Counterbalance = {
|
|
5
4
|
minted: Partial<Record<Counterbalance.Source, number>>
|
|
6
5
|
burned: Partial<Record<Counterbalance.Sink, number>>
|
|
7
6
|
internal?: Partial<Record<string, number>>
|
|
7
|
+
charge?: number
|
|
8
8
|
}
|
|
9
9
|
export namespace Counterbalance {
|
|
10
10
|
export type Source = string
|
|
@@ -15,17 +15,8 @@ export namespace Counterbalance {
|
|
|
15
15
|
minted: isly.record<Counterbalance["minted"]>(Source, isly.number()),
|
|
16
16
|
burned: isly.record<Counterbalance["burned"]>(Sink, isly.number()),
|
|
17
17
|
internal: isly.record<Required<Counterbalance>["internal"]>(isly.string(), isly.number()).optional(),
|
|
18
|
+
charge: isly.number().optional(),
|
|
18
19
|
})
|
|
19
20
|
export type Link = Source | Sink
|
|
20
21
|
export const Link = isly.string()
|
|
21
|
-
export function add(currency: isoly.Currency, addendee: Counterbalance, addend: Counterbalance): Counterbalance {
|
|
22
|
-
const result: Counterbalance = { minted: { ...addend.minted }, burned: { ...addend.burned } }
|
|
23
|
-
for (const [source, value] of Object.entries(addendee["minted"]) as [Source, number][]) {
|
|
24
|
-
result["minted"][source] = isoly.Currency.add(currency, value ?? 0, addend["minted"][source] ?? 0)
|
|
25
|
-
}
|
|
26
|
-
for (const [sink, value] of Object.entries(addendee["burned"]) as [Sink, number][]) {
|
|
27
|
-
result["burned"][sink] = isoly.Currency.add(currency, value ?? 0, addend["burned"][sink] ?? 0)
|
|
28
|
-
}
|
|
29
|
-
return result
|
|
30
|
-
}
|
|
31
22
|
}
|
package/Counterbalances.ts
CHANGED
|
@@ -5,13 +5,6 @@ import { Counterbalance } from "./Counterbalance"
|
|
|
5
5
|
export type Counterbalances = Partial<Record<isoly.Currency, Counterbalance>>
|
|
6
6
|
|
|
7
7
|
export namespace Counterbalances {
|
|
8
|
-
export function add(addendee: Counterbalances, addend: Counterbalances): Counterbalances {
|
|
9
|
-
const result: Counterbalances = {}
|
|
10
|
-
for (const [currency, counterbalance] of Object.entries(addendee) as [isoly.Currency, Counterbalance][]) {
|
|
11
|
-
result[currency] = Counterbalance.add(currency, counterbalance, addend[currency] ?? { minted: {}, burned: {} })
|
|
12
|
-
}
|
|
13
|
-
return result
|
|
14
|
-
}
|
|
15
8
|
export const type = isly.record<Counterbalances>(
|
|
16
9
|
isly.fromIs("isoly.Currency", isoly.Currency.is),
|
|
17
10
|
Counterbalance.type
|
|
@@ -7,8 +7,7 @@ import { Warning } from "./Warning"
|
|
|
7
7
|
export interface Fragment {
|
|
8
8
|
warnings: Warning[]
|
|
9
9
|
emoney: Balance.Extended
|
|
10
|
-
|
|
11
|
-
burned: Fragment.Coinage.Burned
|
|
10
|
+
counterbalance: Fragment.Counterbalance
|
|
12
11
|
fiat: {
|
|
13
12
|
safe: number
|
|
14
13
|
unsafe: number
|
|
@@ -19,32 +18,41 @@ export interface Fragment {
|
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
export namespace Fragment {
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
export type
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
21
|
+
export type Counterbalance = Record<string, { total: number; account: Record<string, { amount: number }> }>
|
|
22
|
+
export namespace Counterbalance {
|
|
23
|
+
export const type = isly.record<Counterbalance>(
|
|
24
|
+
isly.string(),
|
|
25
|
+
isly.object<Counterbalance[string]>({
|
|
26
|
+
total: isly.number(),
|
|
27
|
+
account: isly.record<Counterbalance[string]["account"]>(
|
|
28
|
+
isly.string(),
|
|
29
|
+
isly.object<Counterbalance[string]["account"][string]>({ amount: isly.number() })
|
|
30
|
+
),
|
|
31
|
+
})
|
|
32
|
+
)
|
|
33
|
+
export function sum(currency: isoly.Currency, accounts: Record<string, { amount: number }>): number {
|
|
34
|
+
return Object.values(accounts).reduce(
|
|
35
|
+
(result, account) => isoly.Currency.add(currency, result, account.amount),
|
|
36
|
+
0
|
|
37
|
+
)
|
|
38
38
|
}
|
|
39
|
-
export function
|
|
40
|
-
|
|
39
|
+
export function validate(currency: isoly.Currency, counterbalances: Counterbalance): boolean {
|
|
40
|
+
for (const counterbalance of Object.values(counterbalances))
|
|
41
|
+
if (isoly.Currency.subtract(currency, counterbalance.total, sum(currency, counterbalance.account)))
|
|
42
|
+
return false
|
|
43
|
+
return true
|
|
41
44
|
}
|
|
42
45
|
}
|
|
46
|
+
export function validate(currency: isoly.Currency, fragment: Fragment): boolean {
|
|
47
|
+
const validCounterbalance = Counterbalance.validate(currency, fragment.counterbalance)
|
|
48
|
+
const issuable = fragment.fiat.total
|
|
49
|
+
const actual = fragment.emoney.actual ?? 0
|
|
50
|
+
return validCounterbalance && issuable == actual
|
|
51
|
+
}
|
|
43
52
|
export const type = isly.object<Fragment>({
|
|
44
53
|
warnings: Warning.type.array(),
|
|
45
|
-
emoney: Balance.
|
|
46
|
-
|
|
47
|
-
burned: Fragment.Coinage.Burned.type,
|
|
54
|
+
emoney: Balance.Extended,
|
|
55
|
+
counterbalance: Counterbalance.type,
|
|
48
56
|
fiat: isly.object({
|
|
49
57
|
safe: isly.number(),
|
|
50
58
|
unsafe: isly.number(),
|
|
@@ -54,9 +62,57 @@ export namespace Fragment {
|
|
|
54
62
|
accounts: Account.type.array(),
|
|
55
63
|
}),
|
|
56
64
|
})
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
export type Legacy = Omit<Fragment, "counterbalance"> & { minted: Legacy.Coinage; burned: Legacy.Coinage }
|
|
66
|
+
export namespace Legacy {
|
|
67
|
+
export type LedgerAccount = string
|
|
68
|
+
export type Change = { account: Record<LedgerAccount, number>; amount: number }
|
|
69
|
+
export const change = isly.object<Change>({
|
|
70
|
+
account: isly.record(isly.string(), isly.number()),
|
|
71
|
+
amount: isly.number(),
|
|
72
|
+
})
|
|
73
|
+
export type Coinage = Record<string, Change>
|
|
74
|
+
export const type = isly.record<Coinage>(isly.string(), change)
|
|
75
|
+
function mergeAccounts(
|
|
76
|
+
currency: isoly.Currency,
|
|
77
|
+
burned: Record<string, { amount: number }>,
|
|
78
|
+
minted?: Record<string, { amount: number }>
|
|
79
|
+
): Record<string, { amount: number }> {
|
|
80
|
+
const result: Record<string, { amount: number }> = { ...(minted ?? {}) }
|
|
81
|
+
for (const [id, account] of Object.entries(burned)) {
|
|
82
|
+
result[id] = { amount: isoly.Currency.subtract(currency, result[id]?.amount ?? 0, account.amount) }
|
|
83
|
+
}
|
|
84
|
+
return result
|
|
85
|
+
}
|
|
86
|
+
function accountToNew(account: Record<LedgerAccount, number>): Record<string, { amount: number }> {
|
|
87
|
+
return Object.fromEntries(
|
|
88
|
+
Object.entries(account).map<[string, { amount: number }]>(([id, amount]) => [id, { amount }])
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
export function toCounterbalance(currency: isoly.Currency, minted: Coinage, burned: Coinage): Counterbalance {
|
|
92
|
+
const result: Counterbalance = {}
|
|
93
|
+
for (const [code, change] of Object.entries(minted)) {
|
|
94
|
+
result[code] = { total: change.amount, account: accountToNew(change.account) }
|
|
95
|
+
}
|
|
96
|
+
for (const [code, change] of Object.entries(burned)) {
|
|
97
|
+
result[code] = {
|
|
98
|
+
total: isoly.Currency.subtract(currency, result[code]?.total ?? 0, change.amount),
|
|
99
|
+
account: mergeAccounts(currency, accountToNew(change.account), result[code]?.account),
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return result
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export function fromLegacy(currency: isoly.Currency, fragment: Fragment | Legacy): Fragment {
|
|
106
|
+
let result: Fragment
|
|
107
|
+
if ("counterbalance" in fragment) {
|
|
108
|
+
result = fragment
|
|
109
|
+
} else {
|
|
110
|
+
const counterbalance = Legacy.toCounterbalance(currency, fragment.minted, fragment.burned)
|
|
111
|
+
const result: Fragment = { ...fragment, counterbalance }
|
|
112
|
+
"burned" in result && delete result.burned
|
|
113
|
+
"minted" in result && delete result.minted
|
|
114
|
+
return result
|
|
115
|
+
}
|
|
116
|
+
return result
|
|
61
117
|
}
|
|
62
118
|
}
|
package/dist/Counterbalance.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { isoly } from "isoly";
|
|
2
1
|
import { isly } from "isly";
|
|
3
2
|
export type Counterbalance = {
|
|
4
3
|
minted: Partial<Record<Counterbalance.Source, number>>;
|
|
5
4
|
burned: Partial<Record<Counterbalance.Sink, number>>;
|
|
6
5
|
internal?: Partial<Record<string, number>>;
|
|
6
|
+
charge?: number;
|
|
7
7
|
};
|
|
8
8
|
export declare namespace Counterbalance {
|
|
9
9
|
type Source = string;
|
|
@@ -13,5 +13,4 @@ export declare namespace Counterbalance {
|
|
|
13
13
|
const type: isly.object.ExtendableType<Counterbalance>;
|
|
14
14
|
type Link = Source | Sink;
|
|
15
15
|
const Link: isly.Type<string>;
|
|
16
|
-
function add(currency: isoly.Currency, addendee: Counterbalance, addend: Counterbalance): Counterbalance;
|
|
17
16
|
}
|
package/dist/Counterbalance.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isoly } from "isoly";
|
|
2
1
|
import { isly } from "isly";
|
|
3
2
|
export var Counterbalance;
|
|
4
3
|
(function (Counterbalance) {
|
|
@@ -8,18 +7,8 @@ export var Counterbalance;
|
|
|
8
7
|
minted: isly.record(Counterbalance.Source, isly.number()),
|
|
9
8
|
burned: isly.record(Counterbalance.Sink, isly.number()),
|
|
10
9
|
internal: isly.record(isly.string(), isly.number()).optional(),
|
|
10
|
+
charge: isly.number().optional(),
|
|
11
11
|
});
|
|
12
12
|
Counterbalance.Link = isly.string();
|
|
13
|
-
function add(currency, addendee, addend) {
|
|
14
|
-
const result = { minted: { ...addend.minted }, burned: { ...addend.burned } };
|
|
15
|
-
for (const [source, value] of Object.entries(addendee["minted"])) {
|
|
16
|
-
result["minted"][source] = isoly.Currency.add(currency, value ?? 0, addend["minted"][source] ?? 0);
|
|
17
|
-
}
|
|
18
|
-
for (const [sink, value] of Object.entries(addendee["burned"])) {
|
|
19
|
-
result["burned"][sink] = isoly.Currency.add(currency, value ?? 0, addend["burned"][sink] ?? 0);
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
Counterbalance.add = add;
|
|
24
13
|
})(Counterbalance || (Counterbalance = {}));
|
|
25
14
|
//# sourceMappingURL=Counterbalance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Counterbalance.js","sourceRoot":"../","sources":["Counterbalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Counterbalance.js","sourceRoot":"../","sources":["Counterbalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAQ3B,MAAM,KAAW,cAAc,CAa9B;AAbD,WAAiB,cAAc;IAEjB,qBAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAEtB,mBAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IACpB,mBAAI,GAAG,IAAI,CAAC,MAAM,CAAiB;QAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,CAA2B,eAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM,EAAE,IAAI,CAAC,MAAM,CAA2B,eAAA,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAuC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpG,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC,CAAA;IAEW,mBAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;AAClC,CAAC,EAbgB,cAAc,KAAd,cAAc,QAa9B"}
|
|
@@ -3,6 +3,5 @@ import { isly } from "isly";
|
|
|
3
3
|
import { Counterbalance } from "./Counterbalance";
|
|
4
4
|
export type Counterbalances = Partial<Record<isoly.Currency, Counterbalance>>;
|
|
5
5
|
export declare namespace Counterbalances {
|
|
6
|
-
function add(addendee: Counterbalances, addend: Counterbalances): Counterbalances;
|
|
7
6
|
const type: isly.Type<Partial<Record<"BTN" | "CHE" | "MKD" | "AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BOV" | "BRL" | "BSD" | "BWP" | "BYN" | "BZD" | "CAD" | "CDF" | "CHF" | "CHW" | "CLF" | "CLP" | "CNY" | "COP" | "COU" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "INR" | "IQD" | "IRR" | "ISK" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LYD" | "MAD" | "MDL" | "MGA" | "MMK" | "MNT" | "MOP" | "MRU" | "MUR" | "MVR" | "MWK" | "MXN" | "MXV" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLL" | "SOS" | "SRD" | "SSP" | "STN" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "USN" | "UYI" | "UYU" | "UYW" | "UZS" | "VES" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XBA" | "XBB" | "XBC" | "XBD" | "XCD" | "XDR" | "XOF" | "XPD" | "XPF" | "XPT" | "XSU" | "XTS" | "XUA" | "XXX" | "YER" | "ZAR" | "ZMW" | "ZWL", Counterbalance>>>;
|
|
8
7
|
}
|
package/dist/Counterbalances.js
CHANGED
|
@@ -3,14 +3,6 @@ import { isly } from "isly";
|
|
|
3
3
|
import { Counterbalance } from "./Counterbalance";
|
|
4
4
|
export var Counterbalances;
|
|
5
5
|
(function (Counterbalances) {
|
|
6
|
-
function add(addendee, addend) {
|
|
7
|
-
const result = {};
|
|
8
|
-
for (const [currency, counterbalance] of Object.entries(addendee)) {
|
|
9
|
-
result[currency] = Counterbalance.add(currency, counterbalance, addend[currency] ?? { minted: {}, burned: {} });
|
|
10
|
-
}
|
|
11
|
-
return result;
|
|
12
|
-
}
|
|
13
|
-
Counterbalances.add = add;
|
|
14
6
|
Counterbalances.type = isly.record(isly.fromIs("isoly.Currency", isoly.Currency.is), Counterbalance.type);
|
|
15
7
|
})(Counterbalances || (Counterbalances = {}));
|
|
16
8
|
//# sourceMappingURL=Counterbalances.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Counterbalances.js","sourceRoot":"../","sources":["Counterbalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD,MAAM,KAAW,eAAe,
|
|
1
|
+
{"version":3,"file":"Counterbalances.js","sourceRoot":"../","sources":["Counterbalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD,MAAM,KAAW,eAAe,CAK/B;AALD,WAAiB,eAAe;IAClB,oBAAI,GAAG,IAAI,CAAC,MAAM,CAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAChD,cAAc,CAAC,IAAI,CACnB,CAAA;AACF,CAAC,EALgB,eAAe,KAAf,eAAe,QAK/B"}
|
|
@@ -6,8 +6,7 @@ import { Warning } from "./Warning";
|
|
|
6
6
|
export interface Fragment {
|
|
7
7
|
warnings: Warning[];
|
|
8
8
|
emoney: Balance.Extended;
|
|
9
|
-
|
|
10
|
-
burned: Fragment.Coinage.Burned;
|
|
9
|
+
counterbalance: Fragment.Counterbalance;
|
|
11
10
|
fiat: {
|
|
12
11
|
safe: number;
|
|
13
12
|
unsafe: number;
|
|
@@ -18,26 +17,35 @@ export interface Fragment {
|
|
|
18
17
|
};
|
|
19
18
|
}
|
|
20
19
|
export declare namespace Fragment {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
type Counterbalance = Record<string, {
|
|
21
|
+
total: number;
|
|
22
|
+
account: Record<string, {
|
|
23
|
+
amount: number;
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
namespace Counterbalance {
|
|
27
|
+
const type: isly.Type<Counterbalance>;
|
|
28
|
+
function sum(currency: isoly.Currency, accounts: Record<string, {
|
|
29
|
+
amount: number;
|
|
30
|
+
}>): number;
|
|
31
|
+
function validate(currency: isoly.Currency, counterbalances: Counterbalance): boolean;
|
|
32
|
+
}
|
|
33
|
+
function validate(currency: isoly.Currency, fragment: Fragment): boolean;
|
|
34
|
+
const type: isly.object.ExtendableType<Fragment>;
|
|
35
|
+
type Legacy = Omit<Fragment, "counterbalance"> & {
|
|
36
|
+
minted: Legacy.Coinage;
|
|
37
|
+
burned: Legacy.Coinage;
|
|
38
|
+
};
|
|
39
|
+
namespace Legacy {
|
|
40
|
+
type LedgerAccount = string;
|
|
41
|
+
type Change = {
|
|
24
42
|
account: Record<LedgerAccount, number>;
|
|
25
43
|
amount: number;
|
|
26
44
|
};
|
|
27
|
-
|
|
28
|
-
type
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const type: isly.Type<Minted>;
|
|
32
|
-
}
|
|
33
|
-
type Sink = string;
|
|
34
|
-
export type Burned = Record<Sink, Change>;
|
|
35
|
-
export namespace Burned {
|
|
36
|
-
const type: isly.Type<Burned>;
|
|
37
|
-
}
|
|
38
|
-
export function sum(currency: isoly.Currency, coinage: Burned | Minted): number;
|
|
39
|
-
export {};
|
|
45
|
+
const change: isly.object.ExtendableType<Change>;
|
|
46
|
+
type Coinage = Record<string, Change>;
|
|
47
|
+
const type: isly.Type<Coinage>;
|
|
48
|
+
function toCounterbalance(currency: isoly.Currency, minted: Coinage, burned: Coinage): Counterbalance;
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
function validate(currency: isoly.Currency, fragment: Fragment): boolean;
|
|
50
|
+
function fromLegacy(currency: isoly.Currency, fragment: Fragment | Legacy): Fragment;
|
|
43
51
|
}
|
|
@@ -5,30 +5,35 @@ import { Account } from "../Account";
|
|
|
5
5
|
import { Warning } from "./Warning";
|
|
6
6
|
export var Fragment;
|
|
7
7
|
(function (Fragment) {
|
|
8
|
-
let
|
|
9
|
-
(function (
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
amount: isly.number(),
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return Object.values(coinage).reduce((result, change) => isoly.Currency.add(currency, result, change.amount), 0);
|
|
8
|
+
let Counterbalance;
|
|
9
|
+
(function (Counterbalance) {
|
|
10
|
+
Counterbalance.type = isly.record(isly.string(), isly.object({
|
|
11
|
+
total: isly.number(),
|
|
12
|
+
account: isly.record(isly.string(), isly.object({ amount: isly.number() })),
|
|
13
|
+
}));
|
|
14
|
+
function sum(currency, accounts) {
|
|
15
|
+
return Object.values(accounts).reduce((result, account) => isoly.Currency.add(currency, result, account.amount), 0);
|
|
16
|
+
}
|
|
17
|
+
Counterbalance.sum = sum;
|
|
18
|
+
function validate(currency, counterbalances) {
|
|
19
|
+
for (const counterbalance of Object.values(counterbalances))
|
|
20
|
+
if (isoly.Currency.subtract(currency, counterbalance.total, sum(currency, counterbalance.account)))
|
|
21
|
+
return false;
|
|
22
|
+
return true;
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
})(
|
|
24
|
+
Counterbalance.validate = validate;
|
|
25
|
+
})(Counterbalance = Fragment.Counterbalance || (Fragment.Counterbalance = {}));
|
|
26
|
+
function validate(currency, fragment) {
|
|
27
|
+
const validCounterbalance = Counterbalance.validate(currency, fragment.counterbalance);
|
|
28
|
+
const issuable = fragment.fiat.total;
|
|
29
|
+
const actual = fragment.emoney.actual ?? 0;
|
|
30
|
+
return validCounterbalance && issuable == actual;
|
|
31
|
+
}
|
|
32
|
+
Fragment.validate = validate;
|
|
27
33
|
Fragment.type = isly.object({
|
|
28
34
|
warnings: Warning.type.array(),
|
|
29
|
-
emoney: Balance.
|
|
30
|
-
|
|
31
|
-
burned: Fragment.Coinage.Burned.type,
|
|
35
|
+
emoney: Balance.Extended,
|
|
36
|
+
counterbalance: Counterbalance.type,
|
|
32
37
|
fiat: isly.object({
|
|
33
38
|
safe: isly.number(),
|
|
34
39
|
unsafe: isly.number(),
|
|
@@ -38,11 +43,52 @@ export var Fragment;
|
|
|
38
43
|
accounts: Account.type.array(),
|
|
39
44
|
}),
|
|
40
45
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
let Legacy;
|
|
47
|
+
(function (Legacy) {
|
|
48
|
+
Legacy.change = isly.object({
|
|
49
|
+
account: isly.record(isly.string(), isly.number()),
|
|
50
|
+
amount: isly.number(),
|
|
51
|
+
});
|
|
52
|
+
Legacy.type = isly.record(isly.string(), Legacy.change);
|
|
53
|
+
function mergeAccounts(currency, burned, minted) {
|
|
54
|
+
const result = { ...(minted ?? {}) };
|
|
55
|
+
for (const [id, account] of Object.entries(burned)) {
|
|
56
|
+
result[id] = { amount: isoly.Currency.subtract(currency, result[id]?.amount ?? 0, account.amount) };
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
function accountToNew(account) {
|
|
61
|
+
return Object.fromEntries(Object.entries(account).map(([id, amount]) => [id, { amount }]));
|
|
62
|
+
}
|
|
63
|
+
function toCounterbalance(currency, minted, burned) {
|
|
64
|
+
const result = {};
|
|
65
|
+
for (const [code, change] of Object.entries(minted)) {
|
|
66
|
+
result[code] = { total: change.amount, account: accountToNew(change.account) };
|
|
67
|
+
}
|
|
68
|
+
for (const [code, change] of Object.entries(burned)) {
|
|
69
|
+
result[code] = {
|
|
70
|
+
total: isoly.Currency.subtract(currency, result[code]?.total ?? 0, change.amount),
|
|
71
|
+
account: mergeAccounts(currency, accountToNew(change.account), result[code]?.account),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
Legacy.toCounterbalance = toCounterbalance;
|
|
77
|
+
})(Legacy = Fragment.Legacy || (Fragment.Legacy = {}));
|
|
78
|
+
function fromLegacy(currency, fragment) {
|
|
79
|
+
let result;
|
|
80
|
+
if ("counterbalance" in fragment) {
|
|
81
|
+
result = fragment;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const counterbalance = Legacy.toCounterbalance(currency, fragment.minted, fragment.burned);
|
|
85
|
+
const result = { ...fragment, counterbalance };
|
|
86
|
+
"burned" in result && delete result.burned;
|
|
87
|
+
"minted" in result && delete result.minted;
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
45
91
|
}
|
|
46
|
-
Fragment.
|
|
92
|
+
Fragment.fromLegacy = fromLegacy;
|
|
47
93
|
})(Fragment || (Fragment = {}));
|
|
48
94
|
//# sourceMappingURL=Fragment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fragment.js","sourceRoot":"../","sources":["Treasury/Snapshot/Fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Fragment.js","sourceRoot":"../","sources":["Treasury/Snapshot/Fragment.ts"],"names":[],"mappings":"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"}
|