@vultisig/core-chain 2.17.11 → 2.19.0
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 +35 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcGovParams.d.ts +8 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcGovParams.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcGovParams.js +31 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcGovParams.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcMyVote.d.ts +12 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcMyVote.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcMyVote.js +32 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcMyVote.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposalTally.d.ts +4 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposalTally.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposalTally.js +8 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposalTally.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposals.d.ts +7 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposals.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposals.js +13 -0
- package/dist/chains/cosmos/qbtc/governance/getQbtcProposals.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/parseGov.d.ts +26 -0
- package/dist/chains/cosmos/qbtc/governance/parseGov.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/parseGov.js +46 -0
- package/dist/chains/cosmos/qbtc/governance/parseGov.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/proposal.d.ts +64 -0
- package/dist/chains/cosmos/qbtc/governance/proposal.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/proposal.js +39 -0
- package/dist/chains/cosmos/qbtc/governance/proposal.js.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/voteOption.d.ts +17 -0
- package/dist/chains/cosmos/qbtc/governance/voteOption.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/governance/voteOption.js +38 -0
- package/dist/chains/cosmos/qbtc/governance/voteOption.js.map +1 -0
- package/dist/chains/ton/address.d.ts +9 -0
- package/dist/chains/ton/address.d.ts.map +1 -1
- package/dist/chains/ton/address.js +13 -0
- package/dist/chains/ton/address.js.map +1 -1
- package/dist/chains/ton/staking.d.ts +104 -0
- package/dist/chains/ton/staking.d.ts.map +1 -0
- package/dist/chains/ton/staking.js +137 -0
- package/dist/chains/ton/staking.js.map +1 -0
- package/dist/coin/balance/getEvmChainBalances.d.ts +11 -0
- package/dist/coin/balance/getEvmChainBalances.d.ts.map +1 -0
- package/dist/coin/balance/getEvmChainBalances.js +57 -0
- package/dist/coin/balance/getEvmChainBalances.js.map +1 -0
- package/dist/swap/general/GeneralSwapProvider.d.ts +1 -1
- package/dist/swap/general/GeneralSwapProvider.d.ts.map +1 -1
- package/dist/swap/general/GeneralSwapProvider.js +2 -1
- package/dist/swap/general/GeneralSwapProvider.js.map +1 -1
- package/dist/swap/general/jupiter/JupiterSwapEnabledChains.d.ts +9 -0
- package/dist/swap/general/jupiter/JupiterSwapEnabledChains.d.ts.map +1 -0
- package/dist/swap/general/jupiter/JupiterSwapEnabledChains.js +9 -0
- package/dist/swap/general/jupiter/JupiterSwapEnabledChains.js.map +1 -0
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts +25 -0
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts.map +1 -0
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js +112 -0
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js.map +1 -0
- package/dist/swap/general/jupiter/api/jupiterFeeAta.d.ts +48 -0
- package/dist/swap/general/jupiter/api/jupiterFeeAta.d.ts.map +1 -0
- package/dist/swap/general/jupiter/api/jupiterFeeAta.js +115 -0
- package/dist/swap/general/jupiter/api/jupiterFeeAta.js.map +1 -0
- package/dist/swap/general/jupiter/config.d.ts +13 -0
- package/dist/swap/general/jupiter/config.d.ts.map +1 -0
- package/dist/swap/general/jupiter/config.js +52 -0
- package/dist/swap/general/jupiter/config.js.map +1 -0
- package/dist/swap/quote/findSwapQuote.d.ts +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +33 -1
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/swap/utils/getSwapExplorerUrl/index.d.ts +2 -2
- package/dist/swap/utils/getSwapExplorerUrl/index.d.ts.map +1 -1
- package/dist/swap/utils/getSwapExplorerUrl/index.js +11 -2
- package/dist/swap/utils/getSwapExplorerUrl/index.js.map +1 -1
- package/package.json +66 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 2.19.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#894](https://github.com/vultisig/vultisig-sdk/pull/894) [`605fbba`](https://github.com/vultisig/vultisig-sdk/commit/605fbbaf107c553898f11f4f7eb6b56a59c01b9e) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - feat(swap): add Jupiter as a Solana same-chain swap provider with a VULT-scaled affiliate fee
|
|
8
|
+
|
|
9
|
+
`findSwapQuote` now offers Jupiter for on-Solana token pairs (SOL↔SPL, SPL↔SPL),
|
|
10
|
+
preferred over SwapKit/LiFi on a near-tie. Jupiter is Solana-only and same-chain
|
|
11
|
+
— it is never offered for any cross-chain route, and native SOL cross-chain swaps
|
|
12
|
+
stay on THORChain.
|
|
13
|
+
|
|
14
|
+
The Jupiter quote sends `platformFeeBps` = `max(0, 50 − vultTierDiscountBps)`
|
|
15
|
+
(the existing `getSwapAffiliateBps` value, shared with every other provider), and
|
|
16
|
+
the swap request sends `feeAccount` = the Associated Token Account of
|
|
17
|
+
`(owner = Vultisig fee wallet, mint = output mint)`. An idempotent
|
|
18
|
+
`createAssociatedTokenAccount` instruction for that fee ATA is prepended to the
|
|
19
|
+
returned transaction (Jupiter does not auto-create it). When the affiliate bps
|
|
20
|
+
floors to 0 (Ultimate-tier VULT holder), no platform fee or fee account is used.
|
|
21
|
+
|
|
22
|
+
New public surface: `swap/general/jupiter/*` (`getJupiterSwapQuote`,
|
|
23
|
+
`configureJupiter`, `jupiterSwapEnabledChains`) and `jupiter` added to
|
|
24
|
+
`generalSwapProviders` and the swap explorer providers.
|
|
25
|
+
|
|
26
|
+
- [#893](https://github.com/vultisig/vultisig-sdk/pull/893) [`552064c`](https://github.com/vultisig/vultisig-sdk/commit/552064cbfb7307867f9897734c010e856f8a08f9) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add TON nominator-pool staking support. `@vultisig/core-chain` gains a tonapi staking client (`chains/ton/staking`) — pool list, computed pool info, and account nominator positions — plus per-implementation deposit/withdraw comment resolution (`whales` → `Deposit`/`Withdraw`, `tf` → `d`/`w`), pool eligibility/capacity filters, and a `tonAddressToBounceable` helper that normalizes raw `0:` pool addresses to the bounceable `EQ…` form. `@vultisig/core-mpc` now forces TON transfers bounceable for any staking comment (via `isTonStakingComment`), so a rejected pool deposit/withdraw bounces back instead of being absorbed.
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- [#886](https://github.com/vultisig/vultisig-sdk/pull/886) [`baedd96`](https://github.com/vultisig/vultisig-sdk/commit/baedd96e9d75a9d73880a59503f95b527d692428) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add an EVM chain balance batching helper backed by Multicall3.
|
|
31
|
+
|
|
32
|
+
## 2.18.0
|
|
33
|
+
|
|
34
|
+
### Minor Changes
|
|
35
|
+
|
|
36
|
+
- [#888](https://github.com/vultisig/vultisig-sdk/pull/888) [`b61410e`](https://github.com/vultisig/vultisig-sdk/commit/b61410ef8b1d0b1baa7d249440176df23bfa471c) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add QBTC governance support under `chains/cosmos/qbtc/governance/`: REST clients for the Cosmos `x/gov v1` proposals, tally, votes and params endpoints, plus the domain types and wire parsers. Mirrors the existing `qbtc/claim` split and is consumed by the wallet's QBTC governance UI.
|
|
37
|
+
|
|
3
38
|
## 2.17.11
|
|
4
39
|
|
|
5
40
|
### Patch Changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QbtcGovParams } from './proposal.js';
|
|
2
|
+
/**
|
|
3
|
+
* Governance params used for the detail screen's quorum hint and as a fallback
|
|
4
|
+
* voting-window length. Voting and tallying params live at different endpoints
|
|
5
|
+
* across SDK versions, so both are fetched and merged; failures are tolerated.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getQbtcGovParams: () => Promise<QbtcGovParams>;
|
|
8
|
+
//# sourceMappingURL=getQbtcGovParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcGovParams.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcGovParams.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAwB1C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,aAAa,CAkB9D,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
2
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
3
|
+
import { govToFraction, qbtcGovBase } from './parseGov.js';
|
|
4
|
+
const parseVotingPeriodSeconds = (raw) => {
|
|
5
|
+
if (typeof raw !== 'string')
|
|
6
|
+
return undefined;
|
|
7
|
+
// Cosmos durations arrive as e.g. `"172800s"`.
|
|
8
|
+
const seconds = Number(raw.replace(/s$/, ''));
|
|
9
|
+
return Number.isFinite(seconds) ? seconds : undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Governance params used for the detail screen's quorum hint and as a fallback
|
|
13
|
+
* voting-window length. Voting and tallying params live at different endpoints
|
|
14
|
+
* across SDK versions, so both are fetched and merged; failures are tolerated.
|
|
15
|
+
*/
|
|
16
|
+
export const getQbtcGovParams = async () => {
|
|
17
|
+
const [votingResult, tallyingResult] = await Promise.all([
|
|
18
|
+
attempt(() => queryUrl(`${qbtcGovBase}/params/voting`)),
|
|
19
|
+
attempt(() => queryUrl(`${qbtcGovBase}/params/tallying`)),
|
|
20
|
+
]);
|
|
21
|
+
const voting = 'data' in votingResult ? votingResult.data : undefined;
|
|
22
|
+
const tallying = 'data' in tallyingResult ? tallyingResult.data : undefined;
|
|
23
|
+
const tallyParams = tallying?.tally_params ?? tallying?.params ?? voting?.params;
|
|
24
|
+
return {
|
|
25
|
+
votingPeriodSeconds: parseVotingPeriodSeconds(voting?.voting_params?.voting_period ?? voting?.params?.voting_period),
|
|
26
|
+
quorum: govToFraction(tallyParams?.quorum),
|
|
27
|
+
threshold: govToFraction(tallyParams?.threshold),
|
|
28
|
+
vetoThreshold: govToFraction(tallyParams?.veto_threshold),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=getQbtcGovParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcGovParams.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcGovParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAkBvD,MAAM,wBAAwB,GAAG,CAAC,GAAY,EAAsB,EAAE;IACpE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC7C,+CAA+C;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IAC7C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AACvD,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAA4B,EAAE;IACjE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAiB,GAAG,WAAW,gBAAgB,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAiB,GAAG,WAAW,kBAAkB,CAAC,CAAC;KAC1E,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAE3E,MAAM,WAAW,GAAG,QAAQ,EAAE,YAAY,IAAI,QAAQ,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,CAAA;IAChF,OAAO;QACL,mBAAmB,EAAE,wBAAwB,CAC3C,MAAM,EAAE,aAAa,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,EAAE,aAAa,CACtE;QACD,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC;QAC1C,SAAS,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC;QAChD,aAAa,EAAE,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC;KAC1D,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { QbtcGovVote } from './proposal.js';
|
|
2
|
+
type GetQbtcMyVoteInput = {
|
|
3
|
+
proposalId: string;
|
|
4
|
+
voter: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* The voter's recorded vote on a proposal. A 404 means "no vote yet" and
|
|
8
|
+
* resolves to `null` rather than throwing.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getQbtcMyVote: ({ proposalId, voter }: GetQbtcMyVoteInput) => Promise<QbtcGovVote | null>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=getQbtcMyVote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcMyVote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcMyVote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAcxC,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,uBAAuB,kBAAkB,KAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAsBzG,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { qbtcGovBase } from './parseGov.js';
|
|
2
|
+
import { parseQbtcVoteOption } from './voteOption.js';
|
|
3
|
+
/**
|
|
4
|
+
* The voter's recorded vote on a proposal. A 404 means "no vote yet" and
|
|
5
|
+
* resolves to `null` rather than throwing.
|
|
6
|
+
*/
|
|
7
|
+
export const getQbtcMyVote = async ({ proposalId, voter }) => {
|
|
8
|
+
const response = await fetch(`${qbtcGovBase}/proposals/${proposalId}/votes/${voter}`);
|
|
9
|
+
if (response.status === 404)
|
|
10
|
+
return null;
|
|
11
|
+
if (!response.ok) {
|
|
12
|
+
throw new Error(`Failed to fetch QBTC vote (${response.status}): ${response.statusText}`);
|
|
13
|
+
}
|
|
14
|
+
const data = await response.json();
|
|
15
|
+
const options = (data.vote?.options ?? [])
|
|
16
|
+
.map(({ option, weight }) => {
|
|
17
|
+
const parsed = parseQbtcVoteOption(option ?? '');
|
|
18
|
+
if (!parsed)
|
|
19
|
+
return undefined;
|
|
20
|
+
// Drop entries whose weight isn't a valid 0..1 fraction rather than
|
|
21
|
+
// coercing to 0, which would make a malformed LCD payload look like a
|
|
22
|
+
// valid vote.
|
|
23
|
+
const weightFraction = Number(weight);
|
|
24
|
+
if (!Number.isFinite(weightFraction) || weightFraction < 0 || weightFraction > 1) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return { option: parsed, weight: weightFraction };
|
|
28
|
+
})
|
|
29
|
+
.filter((entry) => entry !== undefined);
|
|
30
|
+
return { options };
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=getQbtcMyVote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcMyVote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcMyVote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAA;AAkBrE;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAsB,EAA+B,EAAE;IAC5G,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,cAAc,UAAU,UAAU,KAAK,EAAE,CAAC,CAAA;IACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,IAAI,GAAiB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACvC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QAC7B,oEAAoE;QACpE,sEAAsE;QACtE,cAAc;QACd,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACjF,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACnD,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAA0D,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IACjG,OAAO,EAAE,OAAO,EAAE,CAAA;AACpB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcProposalTally.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcProposalTally.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAMzC,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,YAAY,CAGnF,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { parseQbtcGovTally, qbtcGovBase } from './parseGov.js';
|
|
3
|
+
/** Live tally for an in-voting proposal. */
|
|
4
|
+
export const getQbtcProposalTally = async (proposalId) => {
|
|
5
|
+
const data = await queryUrl(`${qbtcGovBase}/proposals/${proposalId}/tally`);
|
|
6
|
+
return parseQbtcGovTally(data.tally);
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=getQbtcProposalTally.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcProposalTally.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcProposalTally.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAY,MAAM,YAAY,CAAA;AAOrE,4CAA4C;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAkB,EAAyB,EAAE;IACtF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAgB,GAAG,WAAW,cAAc,UAAU,QAAQ,CAAC,CAAA;IAC1F,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { QbtcGovProposal } from './proposal.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetches QBTC governance proposals (newest first). A single page of 100 covers
|
|
4
|
+
* the active set plus recent history without pagination, matching iOS.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getQbtcProposals: () => Promise<QbtcGovProposal[]>;
|
|
7
|
+
//# sourceMappingURL=getQbtcProposals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcProposals.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcProposals.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAM5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,eAAe,EAAE,CAOlE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { parseQbtcGovProposal, qbtcGovBase } from './parseGov.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fetches QBTC governance proposals (newest first). A single page of 100 covers
|
|
5
|
+
* the active set plus recent history without pagination, matching iOS.
|
|
6
|
+
*/
|
|
7
|
+
export const getQbtcProposals = async () => {
|
|
8
|
+
const data = await queryUrl(`${qbtcGovBase}/proposals?pagination.limit=100&pagination.reverse=true`);
|
|
9
|
+
return (data.proposals ?? [])
|
|
10
|
+
.map(parseQbtcGovProposal)
|
|
11
|
+
.filter((proposal) => proposal !== undefined);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=getQbtcProposals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQbtcProposals.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/getQbtcProposals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAe,MAAM,YAAY,CAAA;AAO3E;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAgC,EAAE;IACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,GAAG,WAAW,yDAAyD,CACxE,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SAC1B,GAAG,CAAC,oBAAoB,CAAC;SACzB,MAAM,CAAC,CAAC,QAAQ,EAA+B,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { QbtcGovProposal, QbtcGovTally } from './proposal.js';
|
|
2
|
+
/** Base path for the Cosmos `x/gov v1` REST endpoints on the QBTC node. */
|
|
3
|
+
export declare const qbtcGovBase = "https://api.vultisig.com/qbtc-rpc/cosmos/gov/v1";
|
|
4
|
+
export declare const govToBigInt: (value: unknown) => bigint;
|
|
5
|
+
export declare const govToFraction: (value: unknown) => number | undefined;
|
|
6
|
+
export type RawTally = {
|
|
7
|
+
yes_count?: string;
|
|
8
|
+
abstain_count?: string;
|
|
9
|
+
no_count?: string;
|
|
10
|
+
no_with_veto_count?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const parseQbtcGovTally: (raw: RawTally | undefined) => QbtcGovTally;
|
|
13
|
+
export type RawProposal = {
|
|
14
|
+
id?: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
summary?: string;
|
|
17
|
+
status?: string;
|
|
18
|
+
final_tally_result?: RawTally;
|
|
19
|
+
voting_start_time?: string;
|
|
20
|
+
voting_end_time?: string;
|
|
21
|
+
messages?: {
|
|
22
|
+
'@type'?: string;
|
|
23
|
+
}[];
|
|
24
|
+
};
|
|
25
|
+
export declare const parseQbtcGovProposal: (raw: RawProposal) => QbtcGovProposal | undefined;
|
|
26
|
+
//# sourceMappingURL=parseGov.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseGov.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/parseGov.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8C,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtG,2EAA2E;AAC3E,eAAO,MAAM,WAAW,oDAAiC,CAAA;AAEzD,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAK5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAIvD,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,KAAK,QAAQ,GAAG,SAAS,KAAG,YAQ7D,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,QAAQ,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,KAAK,WAAW,KAAG,eAAe,GAAG,SAczE,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
|
|
2
|
+
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
3
|
+
import { emptyQbtcGovTally, parseQbtcProposalStatus } from './proposal.js';
|
|
4
|
+
/** Base path for the Cosmos `x/gov v1` REST endpoints on the QBTC node. */
|
|
5
|
+
export const qbtcGovBase = `${qbtcRestUrl}/cosmos/gov/v1`;
|
|
6
|
+
export const govToBigInt = (value) => {
|
|
7
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
8
|
+
return 0n;
|
|
9
|
+
const parsed = attempt(() => BigInt(value));
|
|
10
|
+
if ('error' in parsed)
|
|
11
|
+
return 0n;
|
|
12
|
+
return parsed.data >= 0n ? parsed.data : 0n;
|
|
13
|
+
};
|
|
14
|
+
export const govToFraction = (value) => {
|
|
15
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
16
|
+
return undefined;
|
|
17
|
+
const parsed = Number(value);
|
|
18
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
19
|
+
};
|
|
20
|
+
export const parseQbtcGovTally = (raw) => {
|
|
21
|
+
if (!raw)
|
|
22
|
+
return emptyQbtcGovTally;
|
|
23
|
+
return {
|
|
24
|
+
yes: govToBigInt(raw.yes_count),
|
|
25
|
+
abstain: govToBigInt(raw.abstain_count),
|
|
26
|
+
no: govToBigInt(raw.no_count),
|
|
27
|
+
noWithVeto: govToBigInt(raw.no_with_veto_count),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export const parseQbtcGovProposal = (raw) => {
|
|
31
|
+
if (typeof raw.id !== 'string' || raw.id.length === 0)
|
|
32
|
+
return undefined;
|
|
33
|
+
return {
|
|
34
|
+
id: raw.id,
|
|
35
|
+
title: raw.title ?? '',
|
|
36
|
+
summary: raw.summary ?? '',
|
|
37
|
+
status: parseQbtcProposalStatus(raw.status ?? ''),
|
|
38
|
+
finalTally: parseQbtcGovTally(raw.final_tally_result),
|
|
39
|
+
votingStartTime: raw.voting_start_time,
|
|
40
|
+
votingEndTime: raw.voting_end_time,
|
|
41
|
+
messageTypes: (raw.messages ?? [])
|
|
42
|
+
.map(message => message['@type'])
|
|
43
|
+
.filter((type) => typeof type === 'string'),
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=parseGov.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseGov.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/parseGov.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAiC,MAAM,YAAY,CAAA;AAEtG,2EAA2E;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,WAAW,gBAAgB,CAAA;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAU,EAAE;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3C,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAsB,EAAE;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC,CAAA;AASD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAyB,EAAgB,EAAE;IAC3E,IAAI,CAAC,GAAG;QAAE,OAAO,iBAAiB,CAAA;IAClC,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;QACvC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7B,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC;KAChD,CAAA;AACH,CAAC,CAAA;AAaD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAgB,EAA+B,EAAE;IACpF,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACvE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;QAC1B,MAAM,EAAE,uBAAuB,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QACjD,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACrD,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,aAAa,EAAE,GAAG,CAAC,eAAe;QAClC,YAAY,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;aAC/B,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;KAC9D,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { QbtcVoteOptionKey } from './voteOption.js';
|
|
2
|
+
/**
|
|
3
|
+
* Subset of Cosmos `x/gov` proposal statuses surfaced by the QBTC governance
|
|
4
|
+
* UI. `votingPeriod` is the only votable state.
|
|
5
|
+
*/
|
|
6
|
+
export declare const qbtcProposalStatuses: readonly ["depositPeriod", "votingPeriod", "passed", "rejected", "failed", "unspecified"];
|
|
7
|
+
export type QbtcProposalStatus = (typeof qbtcProposalStatuses)[number];
|
|
8
|
+
/** Maps the LCD wire status (`PROPOSAL_STATUS_*`) onto our union. */
|
|
9
|
+
export declare const parseQbtcProposalStatus: (wire: string) => QbtcProposalStatus;
|
|
10
|
+
/** A proposal is votable only while in its voting period. */
|
|
11
|
+
export declare const isActiveQbtcProposal: (status: QbtcProposalStatus) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Tally counts in the staking base unit, keyed by option. Stored as `bigint`
|
|
14
|
+
* because validator-weighted totals routinely exceed `Number.MAX_SAFE_INTEGER`;
|
|
15
|
+
* the UI only ever needs their ratios.
|
|
16
|
+
*/
|
|
17
|
+
export type QbtcGovTally = Record<QbtcVoteOptionKey, bigint>;
|
|
18
|
+
export declare const emptyQbtcGovTally: QbtcGovTally;
|
|
19
|
+
export declare const qbtcGovTallyTotal: (tally: QbtcGovTally) => bigint;
|
|
20
|
+
export type QbtcGovProposal = {
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
summary: string;
|
|
24
|
+
status: QbtcProposalStatus;
|
|
25
|
+
/** Embedded tally — all-zero for active proposals until the live `/tally`
|
|
26
|
+
* endpoint is queried. */
|
|
27
|
+
finalTally: QbtcGovTally;
|
|
28
|
+
/** RFC3339 timestamps as returned by the chain; `undefined` if absent. */
|
|
29
|
+
votingStartTime?: string;
|
|
30
|
+
votingEndTime?: string;
|
|
31
|
+
/** Wrapped message type URLs (e.g. `/cosmos.gov.v1.MsgExecLegacyContent`). */
|
|
32
|
+
messageTypes: string[];
|
|
33
|
+
};
|
|
34
|
+
/** A weighted option from the voter's recorded vote (`weight` as a fraction). */
|
|
35
|
+
export type QbtcGovVoteOption = {
|
|
36
|
+
option: QbtcVoteOptionKey;
|
|
37
|
+
weight: number;
|
|
38
|
+
};
|
|
39
|
+
/** The voter's recorded vote on a proposal, or `null` if they haven't voted. */
|
|
40
|
+
export type QbtcGovVote = {
|
|
41
|
+
options: QbtcGovVoteOption[];
|
|
42
|
+
};
|
|
43
|
+
export type QbtcGovParams = {
|
|
44
|
+
votingPeriodSeconds?: number;
|
|
45
|
+
quorum?: number;
|
|
46
|
+
threshold?: number;
|
|
47
|
+
vetoThreshold?: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* A user's pending vote selection, threaded through navigation to the verify
|
|
51
|
+
* screen. `weightPercent` is an integer 0–100; it is normalised to an
|
|
52
|
+
* 18-decimal `cosmos.Dec` string only when the `MsgVoteWeighted` is built.
|
|
53
|
+
*/
|
|
54
|
+
export type QbtcVoteSelection = {
|
|
55
|
+
kind: 'single';
|
|
56
|
+
option: QbtcVoteOptionKey;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'weighted';
|
|
59
|
+
options: {
|
|
60
|
+
option: QbtcVoteOptionKey;
|
|
61
|
+
weightPercent: number;
|
|
62
|
+
}[];
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=proposal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,2FAOvB,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtE,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,kBAetD,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,GAAI,QAAQ,kBAAkB,KAAG,OAAoC,CAAA;AAEtG;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;AAE5D,eAAO,MAAM,iBAAiB,EAAE,YAK/B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,YAAY,KAAG,MACC,CAAA;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,kBAAkB,CAAA;IAC1B;8BAC0B;IAC1B,UAAU,EAAE,YAAY,CAAA;IACxB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAC7C;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAChE,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subset of Cosmos `x/gov` proposal statuses surfaced by the QBTC governance
|
|
3
|
+
* UI. `votingPeriod` is the only votable state.
|
|
4
|
+
*/
|
|
5
|
+
export const qbtcProposalStatuses = [
|
|
6
|
+
'depositPeriod',
|
|
7
|
+
'votingPeriod',
|
|
8
|
+
'passed',
|
|
9
|
+
'rejected',
|
|
10
|
+
'failed',
|
|
11
|
+
'unspecified',
|
|
12
|
+
];
|
|
13
|
+
/** Maps the LCD wire status (`PROPOSAL_STATUS_*`) onto our union. */
|
|
14
|
+
export const parseQbtcProposalStatus = (wire) => {
|
|
15
|
+
switch (wire) {
|
|
16
|
+
case 'PROPOSAL_STATUS_DEPOSIT_PERIOD':
|
|
17
|
+
return 'depositPeriod';
|
|
18
|
+
case 'PROPOSAL_STATUS_VOTING_PERIOD':
|
|
19
|
+
return 'votingPeriod';
|
|
20
|
+
case 'PROPOSAL_STATUS_PASSED':
|
|
21
|
+
return 'passed';
|
|
22
|
+
case 'PROPOSAL_STATUS_REJECTED':
|
|
23
|
+
return 'rejected';
|
|
24
|
+
case 'PROPOSAL_STATUS_FAILED':
|
|
25
|
+
return 'failed';
|
|
26
|
+
default:
|
|
27
|
+
return 'unspecified';
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/** A proposal is votable only while in its voting period. */
|
|
31
|
+
export const isActiveQbtcProposal = (status) => status === 'votingPeriod';
|
|
32
|
+
export const emptyQbtcGovTally = {
|
|
33
|
+
yes: 0n,
|
|
34
|
+
abstain: 0n,
|
|
35
|
+
no: 0n,
|
|
36
|
+
noWithVeto: 0n,
|
|
37
|
+
};
|
|
38
|
+
export const qbtcGovTallyTotal = (tally) => tally.yes + tally.abstain + tally.no + tally.noWithVeto;
|
|
39
|
+
//# sourceMappingURL=proposal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/proposal.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,eAAe;IACf,cAAc;IACd,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,aAAa;CACL,CAAA;AAIV,qEAAqE;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC1E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gCAAgC;YACnC,OAAO,eAAe,CAAA;QACxB,KAAK,+BAA+B;YAClC,OAAO,cAAc,CAAA;QACvB,KAAK,wBAAwB;YAC3B,OAAO,QAAQ,CAAA;QACjB,KAAK,0BAA0B;YAC7B,OAAO,UAAU,CAAA;QACnB,KAAK,wBAAwB;YAC3B,OAAO,QAAQ,CAAA;QACjB;YACE,OAAO,aAAa,CAAA;IACxB,CAAC;AACH,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAA0B,EAAW,EAAE,CAAC,MAAM,KAAK,cAAc,CAAA;AAStG,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,UAAU,EAAE,EAAE;CACf,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAU,EAAE,CAC/D,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QBTC governance vote options, in canonical Cosmos `x/gov` order. The QBTC
|
|
3
|
+
* chain reuses the standard Cosmos `VoteOption` enum, so these map 1:1 onto the
|
|
4
|
+
* proto values (1=YES … 4=NO_WITH_VETO) used when building `MsgVote` /
|
|
5
|
+
* `MsgVoteWeighted`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const qbtcVoteOptionKeys: readonly ["yes", "abstain", "no", "noWithVeto"];
|
|
8
|
+
export type QbtcVoteOptionKey = (typeof qbtcVoteOptionKeys)[number];
|
|
9
|
+
/** Cosmos `VoteOption` proto enum value for each option. */
|
|
10
|
+
export declare const qbtcVoteOptionProtoValue: Record<QbtcVoteOptionKey, number>;
|
|
11
|
+
/**
|
|
12
|
+
* Decodes the option field returned by the gov LCD (`/votes/{voter}`), which
|
|
13
|
+
* may be the proto enum name (`VOTE_OPTION_YES`) or its numeric string (`"1"`).
|
|
14
|
+
* Returns `undefined` for unknown/unspecified values so callers can skip them.
|
|
15
|
+
*/
|
|
16
|
+
export declare const parseQbtcVoteOption: (wire: string) => QbtcVoteOptionKey | undefined;
|
|
17
|
+
//# sourceMappingURL=voteOption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voteOption.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/voteOption.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,iDAAkD,CAAA;AAEjF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAKtE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,iBAAiB,GAAG,SAiBtE,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QBTC governance vote options, in canonical Cosmos `x/gov` order. The QBTC
|
|
3
|
+
* chain reuses the standard Cosmos `VoteOption` enum, so these map 1:1 onto the
|
|
4
|
+
* proto values (1=YES … 4=NO_WITH_VETO) used when building `MsgVote` /
|
|
5
|
+
* `MsgVoteWeighted`.
|
|
6
|
+
*/
|
|
7
|
+
export const qbtcVoteOptionKeys = ['yes', 'abstain', 'no', 'noWithVeto'];
|
|
8
|
+
/** Cosmos `VoteOption` proto enum value for each option. */
|
|
9
|
+
export const qbtcVoteOptionProtoValue = {
|
|
10
|
+
yes: 1,
|
|
11
|
+
abstain: 2,
|
|
12
|
+
no: 3,
|
|
13
|
+
noWithVeto: 4,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Decodes the option field returned by the gov LCD (`/votes/{voter}`), which
|
|
17
|
+
* may be the proto enum name (`VOTE_OPTION_YES`) or its numeric string (`"1"`).
|
|
18
|
+
* Returns `undefined` for unknown/unspecified values so callers can skip them.
|
|
19
|
+
*/
|
|
20
|
+
export const parseQbtcVoteOption = (wire) => {
|
|
21
|
+
switch (wire) {
|
|
22
|
+
case 'VOTE_OPTION_YES':
|
|
23
|
+
case '1':
|
|
24
|
+
return 'yes';
|
|
25
|
+
case 'VOTE_OPTION_ABSTAIN':
|
|
26
|
+
case '2':
|
|
27
|
+
return 'abstain';
|
|
28
|
+
case 'VOTE_OPTION_NO':
|
|
29
|
+
case '3':
|
|
30
|
+
return 'no';
|
|
31
|
+
case 'VOTE_OPTION_NO_WITH_VETO':
|
|
32
|
+
case '4':
|
|
33
|
+
return 'noWithVeto';
|
|
34
|
+
default:
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=voteOption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voteOption.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/governance/voteOption.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAU,CAAA;AAIjF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAsC;IACzE,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,CAAC;IACL,UAAU,EAAE,CAAC;CACd,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAiC,EAAE;IACjF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC;QACvB,KAAK,GAAG;YACN,OAAO,KAAK,CAAA;QACd,KAAK,qBAAqB,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,SAAS,CAAA;QAClB,KAAK,gBAAgB,CAAC;QACtB,KAAK,GAAG;YACN,OAAO,IAAI,CAAA;QACb,KAAK,0BAA0B,CAAC;QAChC,KAAK,GAAG;YACN,OAAO,YAAY,CAAA;QACrB;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -3,4 +3,13 @@
|
|
|
3
3
|
* The toncenter v3 API requires raw addresses.
|
|
4
4
|
*/
|
|
5
5
|
export declare const tonAddressToRaw: (userFriendlyAddress: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* Converts a raw TON address (`workchain:hex`) to the bounceable user-friendly
|
|
8
|
+
* form (`EQ…`). Staking-API pool addresses arrive in raw `0:` form, which the
|
|
9
|
+
* signer treats as non-bounceable — sending a deposit non-bounceable risks the
|
|
10
|
+
* pool absorbing (losing) a rejected transfer instead of bouncing it back, so
|
|
11
|
+
* pool destinations MUST be normalized to the bounceable form first. Inputs
|
|
12
|
+
* already in user-friendly form are returned re-encoded as bounceable.
|
|
13
|
+
*/
|
|
14
|
+
export declare const tonAddressToBounceable: (address: string) => string;
|
|
6
15
|
//# sourceMappingURL=address.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,qBAAqB,MAAM,KAAG,MAM7D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAIxD,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Address } from '@ton/core';
|
|
1
2
|
import { fromBase64 } from '@vultisig/lib-utils/fromBase64';
|
|
2
3
|
/** Converts base64url encoding to standard base64 so `Buffer.from` can decode it. */
|
|
3
4
|
const fromBase64Url = (value) => {
|
|
@@ -14,4 +15,16 @@ export const tonAddressToRaw = (userFriendlyAddress) => {
|
|
|
14
15
|
const hash = decoded.subarray(2, 34).toString('hex');
|
|
15
16
|
return `${workchain}:${hash}`;
|
|
16
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Converts a raw TON address (`workchain:hex`) to the bounceable user-friendly
|
|
20
|
+
* form (`EQ…`). Staking-API pool addresses arrive in raw `0:` form, which the
|
|
21
|
+
* signer treats as non-bounceable — sending a deposit non-bounceable risks the
|
|
22
|
+
* pool absorbing (losing) a rejected transfer instead of bouncing it back, so
|
|
23
|
+
* pool destinations MUST be normalized to the bounceable form first. Inputs
|
|
24
|
+
* already in user-friendly form are returned re-encoded as bounceable.
|
|
25
|
+
*/
|
|
26
|
+
export const tonAddressToBounceable = (address) => {
|
|
27
|
+
const parsed = address.includes(':') ? Address.parseRaw(address) : Address.parse(address);
|
|
28
|
+
return parsed.toString({ bounceable: true, testOnly: false, urlSafe: true });
|
|
29
|
+
};
|
|
17
30
|
//# sourceMappingURL=address.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAE3D,qFAAqF;AACrF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAClE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,mBAA2B,EAAU,EAAE;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpD,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;AAC/B,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAE3D,qFAAqF;AACrF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAClE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,mBAA2B,EAAU,EAAE;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpD,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;AAC/B,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAU,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEzF,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tonapi `implementation` values that are genuine **nominator pools** — the
|
|
3
|
+
* only ones the text-comment deposit/withdraw mechanism can stake into.
|
|
4
|
+
* `liquidTF` (Tonstakers) mints a jetton instead and is excluded; unknown
|
|
5
|
+
* implementations are treated as non-nominator (excluded).
|
|
6
|
+
*/
|
|
7
|
+
export declare const tonNominatorImplementations: readonly ["whales", "tf"];
|
|
8
|
+
export type TonNominatorImplementation = (typeof tonNominatorImplementations)[number];
|
|
9
|
+
export declare const isTonNominatorImplementation: (implementation: string | undefined) => implementation is TonNominatorImplementation;
|
|
10
|
+
/** Deposit comment for a pool implementation, or `undefined` if unsupported (block the action). */
|
|
11
|
+
export declare const tonStakingDepositComment: (implementation: string | undefined) => string | undefined;
|
|
12
|
+
/** Withdraw comment for a pool implementation, or `undefined` if unsupported (block the action). */
|
|
13
|
+
export declare const tonStakingWithdrawComment: (implementation: string | undefined) => string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a memo is a nominator-pool deposit/withdraw comment (`d`/`w`/`Deposit`
|
|
16
|
+
* /`Withdraw`). The signer uses this to force the transfer bounceable: a pool
|
|
17
|
+
* deposit/withdraw sent non-bounceable can be absorbed (lost) by the pool
|
|
18
|
+
* instead of bounced back if rejected.
|
|
19
|
+
*/
|
|
20
|
+
export declare const isTonStakingComment: (memo: string | undefined) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Processing-commission buffer (nanotons) added on top of a pool's `min_stake`
|
|
23
|
+
* for the minimum acceptable deposit. Depositing exactly the minimum is
|
|
24
|
+
* rejected; the pool needs ~1 TON headroom for its processing commission.
|
|
25
|
+
*/
|
|
26
|
+
export declare const tonStakingDepositBuffer = 1000000000n;
|
|
27
|
+
/**
|
|
28
|
+
* Amount (nanotons) accompanying a withdraw message — the pool's 0.2 TON
|
|
29
|
+
* withdraw fee. The pool returns the full staked balance separately; sending
|
|
30
|
+
* more (e.g. 1 TON) fails.
|
|
31
|
+
*/
|
|
32
|
+
export declare const tonStakingWithdrawFee = 200000000n;
|
|
33
|
+
/**
|
|
34
|
+
* Conservative network-fee reserve (nanotons ≈ 0.05 TON) held back from the
|
|
35
|
+
* spendable balance when sizing a stake deposit or checking the unstake fee is
|
|
36
|
+
* affordable. Larger than the bare base fee because the text-comment cell adds
|
|
37
|
+
* compute; matches the iOS reserve.
|
|
38
|
+
*/
|
|
39
|
+
export declare const tonStakingFeeReserve = 50000000n;
|
|
40
|
+
/**
|
|
41
|
+
* A staking-pool list entry. `address` is the bounceable user-friendly (`EQ…`)
|
|
42
|
+
* pool contract address (normalized from the raw `0:` API form), `apy` is a
|
|
43
|
+
* percentage (e.g. `13.27` = 13.27%), and `minStake` is in nanotons.
|
|
44
|
+
*/
|
|
45
|
+
export type TonStakingPool = {
|
|
46
|
+
address: string;
|
|
47
|
+
name: string;
|
|
48
|
+
apy: number;
|
|
49
|
+
minStake: bigint;
|
|
50
|
+
verified: boolean;
|
|
51
|
+
currentNominators?: number;
|
|
52
|
+
maxNominators?: number;
|
|
53
|
+
implementation?: string;
|
|
54
|
+
cycleEnd?: number;
|
|
55
|
+
};
|
|
56
|
+
/** Whether a pool has room for another nominator (pools at capacity reject new stakes). */
|
|
57
|
+
export declare const tonPoolHasCapacity: (pool: TonStakingPool) => boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Whether a pool is a verified nominator pool with capacity — i.e. one the
|
|
60
|
+
* picker should surface and a stake can succeed into.
|
|
61
|
+
*/
|
|
62
|
+
export declare const isStakeableTonPool: (pool: TonStakingPool) => boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Fetches all verified TON staking pools from tonapi (`/v2/staking/pools`).
|
|
65
|
+
* Includes every implementation; callers filter to stakeable nominator pools
|
|
66
|
+
* via `isStakeableTonPool`.
|
|
67
|
+
*/
|
|
68
|
+
export declare const getTonStakingPools: () => Promise<TonStakingPool[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Computed info for a single pool (`/v2/staking/pool/{address}`). All fields
|
|
71
|
+
* are optional so a partial/changed response degrades gracefully. `apy` is a
|
|
72
|
+
* percentage; `cycleEnd` is the Unix second the current validation cycle ends.
|
|
73
|
+
*/
|
|
74
|
+
export type TonStakingPoolInfo = {
|
|
75
|
+
address?: string;
|
|
76
|
+
name?: string;
|
|
77
|
+
apy?: number;
|
|
78
|
+
minStake?: bigint;
|
|
79
|
+
implementation?: string;
|
|
80
|
+
cycleEnd?: number;
|
|
81
|
+
};
|
|
82
|
+
/** Fetches computed pool metadata (name, APY, implementation, cycle end). */
|
|
83
|
+
export declare const getTonStakingPoolInfo: (poolAddress: string) => Promise<TonStakingPoolInfo | undefined>;
|
|
84
|
+
/**
|
|
85
|
+
* An account's position in a nominator pool. All amounts are nanotons. `amount`
|
|
86
|
+
* is the active stake; `pendingDeposit` is a just-placed stake awaiting the
|
|
87
|
+
* next validation cycle; `pendingWithdraw`/`readyWithdraw` indicate an
|
|
88
|
+
* in-progress withdrawal (funds locked until the cycle ends). `pool` is the
|
|
89
|
+
* bounceable user-friendly (`EQ…`) pool address (normalized from raw `0:`).
|
|
90
|
+
*/
|
|
91
|
+
export type TonNominatorPosition = {
|
|
92
|
+
pool: string;
|
|
93
|
+
amount: bigint;
|
|
94
|
+
pendingDeposit: bigint;
|
|
95
|
+
pendingWithdraw: bigint;
|
|
96
|
+
readyWithdraw: bigint;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Fetches an account's nominator-pool positions
|
|
100
|
+
* (`/v2/staking/nominator/{accountId}/pools`) — the authoritative source for
|
|
101
|
+
* staked positions. `accountId` accepts the user-friendly wallet address.
|
|
102
|
+
*/
|
|
103
|
+
export declare const getTonNominatorPools: (accountId: string) => Promise<TonNominatorPosition[]>;
|
|
104
|
+
//# sourceMappingURL=staking.d.ts.map
|