@ritbit/v4-client-js 2.2.4 → 2.2.5
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/build/cjs/src/clients/composite-client.js +2 -2
- package/build/cjs/src/clients/modules/get.js +35 -36
- package/build/cjs/src/clients/modules/post.js +8 -4
- package/build/cjs/src/clients/validator-client.js +3 -2
- package/build/cjs/src/index.js +2 -5
- package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/build/esm/src/clients/composite-client.d.ts +3 -1
- package/build/esm/src/clients/composite-client.d.ts.map +1 -1
- package/build/esm/src/clients/composite-client.js +2 -2
- package/build/esm/src/clients/modules/get.d.ts +18 -18
- package/build/esm/src/clients/modules/get.d.ts.map +1 -1
- package/build/esm/src/clients/modules/get.js +35 -36
- package/build/esm/src/clients/modules/post.d.ts +4 -1
- package/build/esm/src/clients/modules/post.d.ts.map +1 -1
- package/build/esm/src/clients/modules/post.js +8 -4
- package/build/esm/src/clients/validator-client.d.ts +4 -1
- package/build/esm/src/clients/validator-client.d.ts.map +1 -1
- package/build/esm/src/clients/validator-client.js +3 -2
- package/build/esm/src/index.d.ts +0 -1
- package/build/esm/src/index.d.ts.map +1 -1
- package/build/esm/src/index.js +1 -2
- package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/ritbit-v4-client-js-2.2.5.tgz +0 -0
- package/scripts/publish-if-not-exists.sh +4 -4
- package/src/clients/composite-client.ts +4 -2
- package/src/clients/modules/get.ts +49 -43
- package/src/clients/modules/post.ts +10 -4
- package/src/clients/validator-client.ts +5 -2
- package/src/index.ts +0 -6
- package/tsconfig.json +6 -0
- package/build/cjs/src/lib/vesting.js +0 -170
- package/build/esm/src/lib/vesting.d.ts +0 -42
- package/build/esm/src/lib/vesting.d.ts.map +0 -1
- package/build/esm/src/lib/vesting.js +0 -133
- package/src/lib/vesting.ts +0 -153
package/src/lib/vesting.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Any } from 'cosmjs-types/google/protobuf/any';
|
|
2
|
-
import * as Vesting from 'cosmjs-types/cosmos/vesting/v1beta1/vesting';
|
|
3
|
-
|
|
4
|
-
/** Один период вестинга (для PeriodicVestingAccount). */
|
|
5
|
-
export interface VestingPeriod {
|
|
6
|
-
/** Длительность периода в секундах. */
|
|
7
|
-
lengthSec: number;
|
|
8
|
-
/** Монеты, разблокируемые в конце периода. */
|
|
9
|
-
amount: Array<{ denom: string; amount: string }>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Нормализованная информация о вестинг-аккаунте, достаточная для расчёта
|
|
14
|
-
* разблокированной суммы. Типы Continuous/Delayed/Periodic/Base сводятся к этому виду.
|
|
15
|
-
*/
|
|
16
|
-
export interface VestingInfo {
|
|
17
|
-
/** Монеты original_vesting (деном + количество в base units). */
|
|
18
|
-
originalVesting: Array<{ denom: string; amount: string }>;
|
|
19
|
-
/** Начало вестинга (Unix секунды). */
|
|
20
|
-
startTimeSec: number;
|
|
21
|
-
/** Конец вестинга (Unix секунды). */
|
|
22
|
-
endTimeSec: number;
|
|
23
|
-
/** Периоды (только для PeriodicVestingAccount). */
|
|
24
|
-
vestingPeriods?: VestingPeriod[];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const VESTING_TYPE_URLS = [
|
|
28
|
-
'/cosmos.vesting.v1beta1.ContinuousVestingAccount',
|
|
29
|
-
'/cosmos.vesting.v1beta1.DelayedVestingAccount',
|
|
30
|
-
'/cosmos.vesting.v1beta1.PeriodicVestingAccount',
|
|
31
|
-
'/cosmos.vesting.v1beta1.BaseVestingAccount',
|
|
32
|
-
] as const;
|
|
33
|
-
|
|
34
|
-
function bigintToNumber(value: bigint | undefined): number {
|
|
35
|
-
if (value == null || value === undefined) return 0;
|
|
36
|
-
return Number(value);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Декодирует сырой аккаунт (Any из getAccountRaw) в VestingInfo.
|
|
41
|
-
* Возвращает null, если тип аккаунта не vesting или нет original_vesting.
|
|
42
|
-
*/
|
|
43
|
-
export function decodeVestingFromAny(raw: Any): VestingInfo | null {
|
|
44
|
-
const { typeUrl, value } = raw;
|
|
45
|
-
if (!VESTING_TYPE_URLS.some((u) => typeUrl === u)) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
try {
|
|
49
|
-
switch (typeUrl) {
|
|
50
|
-
case '/cosmos.vesting.v1beta1.ContinuousVestingAccount': {
|
|
51
|
-
const acc = Vesting.ContinuousVestingAccount.decode(value);
|
|
52
|
-
const base = acc.baseVestingAccount;
|
|
53
|
-
if (!base?.originalVesting?.length) return null;
|
|
54
|
-
return {
|
|
55
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
56
|
-
denom: c.denom,
|
|
57
|
-
amount: c.amount,
|
|
58
|
-
})),
|
|
59
|
-
startTimeSec: bigintToNumber(acc.startTime),
|
|
60
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
case '/cosmos.vesting.v1beta1.DelayedVestingAccount': {
|
|
64
|
-
const acc = Vesting.DelayedVestingAccount.decode(value);
|
|
65
|
-
const base = acc.baseVestingAccount;
|
|
66
|
-
if (!base?.originalVesting?.length) return null;
|
|
67
|
-
return {
|
|
68
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
69
|
-
denom: c.denom,
|
|
70
|
-
amount: c.amount,
|
|
71
|
-
})),
|
|
72
|
-
startTimeSec: 0,
|
|
73
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
case '/cosmos.vesting.v1beta1.PeriodicVestingAccount': {
|
|
77
|
-
const acc = Vesting.PeriodicVestingAccount.decode(value);
|
|
78
|
-
const base = acc.baseVestingAccount;
|
|
79
|
-
if (!base?.originalVesting?.length) return null;
|
|
80
|
-
return {
|
|
81
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
82
|
-
denom: c.denom,
|
|
83
|
-
amount: c.amount,
|
|
84
|
-
})),
|
|
85
|
-
startTimeSec: bigintToNumber(acc.startTime),
|
|
86
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
87
|
-
vestingPeriods: acc.vestingPeriods.map((p) => ({
|
|
88
|
-
lengthSec: bigintToNumber(p.length),
|
|
89
|
-
amount: p.amount.map((c) => ({ denom: c.denom, amount: c.amount })),
|
|
90
|
-
})),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
case '/cosmos.vesting.v1beta1.BaseVestingAccount': {
|
|
94
|
-
const base = Vesting.BaseVestingAccount.decode(value);
|
|
95
|
-
if (!base?.originalVesting?.length) return null;
|
|
96
|
-
return {
|
|
97
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
98
|
-
denom: c.denom,
|
|
99
|
-
amount: c.amount,
|
|
100
|
-
})),
|
|
101
|
-
startTimeSec: 0,
|
|
102
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
default:
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
} catch {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Считает разблокированную сумму в base units для денома по VestingInfo.
|
|
115
|
-
*
|
|
116
|
-
* - Continuous / Delayed / Base: линейная разблокировка от startTimeSec до endTimeSec.
|
|
117
|
-
* - Periodic: каждый период — клифф; сумма периода разблокируется целиком
|
|
118
|
-
* по истечении его длительности (start + Σ lengths предыдущих + length текущего).
|
|
119
|
-
*/
|
|
120
|
-
export function computeUnlockedAmount(
|
|
121
|
-
info: VestingInfo,
|
|
122
|
-
denom: string
|
|
123
|
-
): string | undefined {
|
|
124
|
-
const entry = info.originalVesting.find((c) => c.denom === denom);
|
|
125
|
-
if (!entry) return undefined;
|
|
126
|
-
const total = BigInt(entry.amount);
|
|
127
|
-
const { startTimeSec, endTimeSec } = info;
|
|
128
|
-
if (startTimeSec === 0 && endTimeSec === 0) return entry.amount;
|
|
129
|
-
const nowSec = Math.floor(Date.now() / 1000);
|
|
130
|
-
if (nowSec <= startTimeSec) return '0';
|
|
131
|
-
if (nowSec >= endTimeSec) return entry.amount;
|
|
132
|
-
|
|
133
|
-
// Periodic: считаем по периодам (клиффы)
|
|
134
|
-
if (info.vestingPeriods?.length) {
|
|
135
|
-
let unlocked = BigInt(0);
|
|
136
|
-
let periodStartSec = startTimeSec;
|
|
137
|
-
for (const p of info.vestingPeriods) {
|
|
138
|
-
const periodEndSec = periodStartSec + p.lengthSec;
|
|
139
|
-
if (nowSec >= periodEndSec) {
|
|
140
|
-
const periodAmount = p.amount.find((c) => c.denom === denom)?.amount ?? '0';
|
|
141
|
-
unlocked += BigInt(periodAmount);
|
|
142
|
-
}
|
|
143
|
-
periodStartSec = periodEndSec;
|
|
144
|
-
}
|
|
145
|
-
return String(unlocked);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Linear (Continuous / Delayed / Base)
|
|
149
|
-
const period = endTimeSec - startTimeSec;
|
|
150
|
-
const elapsed = nowSec - startTimeSec;
|
|
151
|
-
const unlocked = (total * BigInt(elapsed)) / BigInt(period);
|
|
152
|
-
return String(unlocked);
|
|
153
|
-
}
|