@ritbit/v4-client-js 2.2.3 → 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/__tests__/helpers/constants.ts +2 -1
- package/__tests__/lib/validation.test.ts +2 -2
- package/build/cjs/__tests__/helpers/constants.js +1 -1
- package/build/cjs/__tests__/lib/validation.test.js +1 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event.js +89 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event_info.js +45 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/genesis.js +12 -11
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/params.js +12 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.js +164 -30
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.lcd.js +65 -18
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.rpc.Query.js +13 -4
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +259 -8
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.rpc.msg.js +13 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/withdrawal.js +81 -37
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/bridge/bridge.js +84 -4
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/signer/signer.js +19 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/indexer/events/events.js +47 -7
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/transfer.js +72 -4
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +4 -4
- package/build/cjs/src/clients/composite-client.js +4 -4
- package/build/cjs/src/clients/modules/composer.js +1 -1
- package/build/cjs/src/clients/modules/get.js +45 -36
- package/build/cjs/src/clients/modules/markets.js +5 -1
- package/build/cjs/src/clients/modules/post.js +30 -10
- package/build/cjs/src/clients/validator-client.js +3 -2
- package/build/cjs/src/index.js +2 -5
- package/build/cjs/src/lib/validation.js +1 -1
- package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/build/esm/__tests__/helpers/constants.d.ts +2 -2
- package/build/esm/__tests__/helpers/constants.d.ts.map +1 -1
- package/build/esm/__tests__/helpers/constants.js +1 -1
- package/build/esm/__tests__/lib/validation.test.js +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event.d.ts +31 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event.js +88 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event_info.d.ts +17 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event_info.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/bridge_event_info.js +44 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/genesis.d.ts +7 -11
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/genesis.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/genesis.js +13 -12
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/params.d.ts +8 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/params.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/params.js +12 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.d.ts +70 -51
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.js +164 -30
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.lcd.d.ts +5 -4
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.lcd.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.lcd.js +65 -18
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.rpc.Query.d.ts +18 -22
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.rpc.Query.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/query.rpc.Query.js +14 -5
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts +93 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +260 -9
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.rpc.msg.d.ts +10 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.rpc.msg.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.rpc.msg.js +14 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/withdrawal.d.ts +33 -16
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/withdrawal.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/withdrawal.js +80 -36
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/bridge/bridge.d.ts +37 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/bridge/bridge.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/bridge/bridge.js +84 -4
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/signer/signer.d.ts +4 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/signer/signer.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/daemons/signer/signer.js +19 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/indexer/events/events.d.ts +23 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/indexer/events/events.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/indexer/events/events.js +47 -7
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts +4 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/transfer.d.ts +26 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/transfer.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/transfer.js +71 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts +3 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +5 -5
- package/build/esm/src/clients/composite-client.d.ts +5 -2
- package/build/esm/src/clients/composite-client.d.ts.map +1 -1
- package/build/esm/src/clients/composite-client.js +4 -4
- package/build/esm/src/clients/modules/composer.js +1 -1
- package/build/esm/src/clients/modules/get.d.ts +24 -18
- package/build/esm/src/clients/modules/get.d.ts.map +1 -1
- package/build/esm/src/clients/modules/get.js +45 -36
- package/build/esm/src/clients/modules/markets.d.ts +1 -0
- package/build/esm/src/clients/modules/markets.d.ts.map +1 -1
- package/build/esm/src/clients/modules/markets.js +5 -1
- package/build/esm/src/clients/modules/post.d.ts +6 -2
- package/build/esm/src/clients/modules/post.d.ts.map +1 -1
- package/build/esm/src/clients/modules/post.js +30 -10
- 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/src/lib/validation.d.ts +2 -2
- package/build/esm/src/lib/validation.d.ts.map +1 -1
- package/build/esm/src/lib/validation.js +1 -1
- package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/ritbit-v4-client-js-2.2.5.tgz +0 -0
- package/scripts/publish-if-not-exists.sh +2 -2
- package/src/clients/composite-client.ts +9 -3
- package/src/clients/modules/composer.ts +2 -2
- package/src/clients/modules/get.ts +66 -43
- package/src/clients/modules/markets.ts +5 -0
- package/src/clients/modules/post.ts +32 -5
- package/src/clients/validator-client.ts +5 -2
- package/src/index.ts +0 -6
- package/src/lib/validation.ts +2 -2
- 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/ritbit-v4-client-js-2.2.1.tgz +0 -0
- package/src/lib/vesting.ts +0 -153
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import * as Vesting from 'cosmjs-types/cosmos/vesting/v1beta1/vesting';
|
|
2
|
-
const VESTING_TYPE_URLS = [
|
|
3
|
-
'/cosmos.vesting.v1beta1.ContinuousVestingAccount',
|
|
4
|
-
'/cosmos.vesting.v1beta1.DelayedVestingAccount',
|
|
5
|
-
'/cosmos.vesting.v1beta1.PeriodicVestingAccount',
|
|
6
|
-
'/cosmos.vesting.v1beta1.BaseVestingAccount',
|
|
7
|
-
];
|
|
8
|
-
function bigintToNumber(value) {
|
|
9
|
-
if (value == null || value === undefined)
|
|
10
|
-
return 0;
|
|
11
|
-
return Number(value);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Декодирует сырой аккаунт (Any из getAccountRaw) в VestingInfo.
|
|
15
|
-
* Возвращает null, если тип аккаунта не vesting или нет original_vesting.
|
|
16
|
-
*/
|
|
17
|
-
export function decodeVestingFromAny(raw) {
|
|
18
|
-
var _a, _b, _c, _d;
|
|
19
|
-
const { typeUrl, value } = raw;
|
|
20
|
-
if (!VESTING_TYPE_URLS.some((u) => typeUrl === u)) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
switch (typeUrl) {
|
|
25
|
-
case '/cosmos.vesting.v1beta1.ContinuousVestingAccount': {
|
|
26
|
-
const acc = Vesting.ContinuousVestingAccount.decode(value);
|
|
27
|
-
const base = acc.baseVestingAccount;
|
|
28
|
-
if (!((_a = base === null || base === void 0 ? void 0 : base.originalVesting) === null || _a === void 0 ? void 0 : _a.length))
|
|
29
|
-
return null;
|
|
30
|
-
return {
|
|
31
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
32
|
-
denom: c.denom,
|
|
33
|
-
amount: c.amount,
|
|
34
|
-
})),
|
|
35
|
-
startTimeSec: bigintToNumber(acc.startTime),
|
|
36
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
case '/cosmos.vesting.v1beta1.DelayedVestingAccount': {
|
|
40
|
-
const acc = Vesting.DelayedVestingAccount.decode(value);
|
|
41
|
-
const base = acc.baseVestingAccount;
|
|
42
|
-
if (!((_b = base === null || base === void 0 ? void 0 : base.originalVesting) === null || _b === void 0 ? void 0 : _b.length))
|
|
43
|
-
return null;
|
|
44
|
-
return {
|
|
45
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
46
|
-
denom: c.denom,
|
|
47
|
-
amount: c.amount,
|
|
48
|
-
})),
|
|
49
|
-
startTimeSec: 0,
|
|
50
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
case '/cosmos.vesting.v1beta1.PeriodicVestingAccount': {
|
|
54
|
-
const acc = Vesting.PeriodicVestingAccount.decode(value);
|
|
55
|
-
const base = acc.baseVestingAccount;
|
|
56
|
-
if (!((_c = base === null || base === void 0 ? void 0 : base.originalVesting) === null || _c === void 0 ? void 0 : _c.length))
|
|
57
|
-
return null;
|
|
58
|
-
return {
|
|
59
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
60
|
-
denom: c.denom,
|
|
61
|
-
amount: c.amount,
|
|
62
|
-
})),
|
|
63
|
-
startTimeSec: bigintToNumber(acc.startTime),
|
|
64
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
65
|
-
vestingPeriods: acc.vestingPeriods.map((p) => ({
|
|
66
|
-
lengthSec: bigintToNumber(p.length),
|
|
67
|
-
amount: p.amount.map((c) => ({ denom: c.denom, amount: c.amount })),
|
|
68
|
-
})),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
case '/cosmos.vesting.v1beta1.BaseVestingAccount': {
|
|
72
|
-
const base = Vesting.BaseVestingAccount.decode(value);
|
|
73
|
-
if (!((_d = base === null || base === void 0 ? void 0 : base.originalVesting) === null || _d === void 0 ? void 0 : _d.length))
|
|
74
|
-
return null;
|
|
75
|
-
return {
|
|
76
|
-
originalVesting: base.originalVesting.map((c) => ({
|
|
77
|
-
denom: c.denom,
|
|
78
|
-
amount: c.amount,
|
|
79
|
-
})),
|
|
80
|
-
startTimeSec: 0,
|
|
81
|
-
endTimeSec: bigintToNumber(base.endTime),
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
default:
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Считает разблокированную сумму в base units для денома по VestingInfo.
|
|
94
|
-
*
|
|
95
|
-
* - Continuous / Delayed / Base: линейная разблокировка от startTimeSec до endTimeSec.
|
|
96
|
-
* - Periodic: каждый период — клифф; сумма периода разблокируется целиком
|
|
97
|
-
* по истечении его длительности (start + Σ lengths предыдущих + length текущего).
|
|
98
|
-
*/
|
|
99
|
-
export function computeUnlockedAmount(info, denom) {
|
|
100
|
-
var _a, _b, _c;
|
|
101
|
-
const entry = info.originalVesting.find((c) => c.denom === denom);
|
|
102
|
-
if (!entry)
|
|
103
|
-
return undefined;
|
|
104
|
-
const total = BigInt(entry.amount);
|
|
105
|
-
const { startTimeSec, endTimeSec } = info;
|
|
106
|
-
if (startTimeSec === 0 && endTimeSec === 0)
|
|
107
|
-
return entry.amount;
|
|
108
|
-
const nowSec = Math.floor(Date.now() / 1000);
|
|
109
|
-
if (nowSec <= startTimeSec)
|
|
110
|
-
return '0';
|
|
111
|
-
if (nowSec >= endTimeSec)
|
|
112
|
-
return entry.amount;
|
|
113
|
-
// Periodic: считаем по периодам (клиффы)
|
|
114
|
-
if ((_a = info.vestingPeriods) === null || _a === void 0 ? void 0 : _a.length) {
|
|
115
|
-
let unlocked = BigInt(0);
|
|
116
|
-
let periodStartSec = startTimeSec;
|
|
117
|
-
for (const p of info.vestingPeriods) {
|
|
118
|
-
const periodEndSec = periodStartSec + p.lengthSec;
|
|
119
|
-
if (nowSec >= periodEndSec) {
|
|
120
|
-
const periodAmount = (_c = (_b = p.amount.find((c) => c.denom === denom)) === null || _b === void 0 ? void 0 : _b.amount) !== null && _c !== void 0 ? _c : '0';
|
|
121
|
-
unlocked += BigInt(periodAmount);
|
|
122
|
-
}
|
|
123
|
-
periodStartSec = periodEndSec;
|
|
124
|
-
}
|
|
125
|
-
return String(unlocked);
|
|
126
|
-
}
|
|
127
|
-
// Linear (Continuous / Delayed / Base)
|
|
128
|
-
const period = endTimeSec - startTimeSec;
|
|
129
|
-
const elapsed = nowSec - startTimeSec;
|
|
130
|
-
const unlocked = (total * BigInt(elapsed)) / BigInt(period);
|
|
131
|
-
return String(unlocked);
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLDZDQUE2QyxDQUFDO0FBeUJ2RSxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLGtEQUFrRDtJQUNsRCwrQ0FBK0M7SUFDL0MsZ0RBQWdEO0lBQ2hELDRDQUE0QztDQUNwQyxDQUFDO0FBRVgsU0FBUyxjQUFjLENBQUMsS0FBeUI7SUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFROztJQUMzQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLEtBQUssa0RBQWtELENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGVBQWUsMENBQUUsTUFBTSxDQUFBO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUNoRCxPQUFPO29C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
|
|
Binary file
|
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
|
-
}
|