@wireio/stake 2.2.2 → 2.3.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/README.md +185 -243
- package/lib/stake.browser.js +302 -202
- package/lib/stake.browser.js.map +1 -1
- package/lib/stake.d.ts +93 -24
- package/lib/stake.js +364 -250
- package/lib/stake.js.map +1 -1
- package/lib/stake.m.js +302 -202
- package/lib/stake.m.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -2
- package/src/networks/ethereum/clients/receipt.client.ts +54 -69
- package/src/networks/ethereum/ethereum.ts +1 -1
- package/src/networks/ethereum/types.ts +14 -17
- package/src/networks/solana/clients/convert.client.ts +339 -0
- package/src/networks/solana/solana.ts +35 -6
- package/src/networks/solana/types.ts +22 -0
- package/src/networks/solana/utils.ts +8 -1
- package/src/types.ts +39 -3
- package/src/networks/solana/clients/deposit.client.ts +0 -291
package/README.md
CHANGED
|
@@ -1,275 +1,217 @@
|
|
|
1
|
-
# @wireio/stake — LIQ Staking SDK
|
|
2
|
-
|
|
3
|
-
TypeScript SDK for
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
# @wireio/stake — Outpost & LIQ Staking SDK
|
|
2
|
+
|
|
3
|
+
TypeScript / JavaScript SDK for the **Outpost** and **Liquidity Staking (LIQ)** protocol on the **Wire Network**.
|
|
4
|
+
It gives dApps a single façade (`Staker`) over Solana and EVM implementations, while still exposing
|
|
5
|
+
chain‑specific power features (Outpost, pretokens, SquadsX, validator tools, etc.).
|
|
6
|
+
|
|
7
|
+
## What this SDK does
|
|
8
|
+
- One `Staker` that selects the right chain client by `chainId`.
|
|
9
|
+
- Deposit / withdraw native → LIQ tokens (SOL→liqSOL, ETH→liqETH).
|
|
10
|
+
- Stake / unstake LIQ into yield pools (Solana Outpost; Ethereum staking manager).
|
|
11
|
+
- Pre-launch WIRE pretokens purchase helpers.
|
|
12
|
+
- Rich `getPortfolio` view (native, liq, staked, $WIRE, yield, extras).
|
|
13
|
+
- Gas / fee helpers (`getDepositFee`, `getDepositBuffer`, `getSystemAPY`).
|
|
14
|
+
- Solana extras: balance correction + registration, Outpost state, multisig (SquadsX) flows.
|
|
15
|
+
- Ethereum extras: withdrawal receipts, validator deposit/lock, tranche snapshots.
|
|
16
|
+
|
|
17
|
+
## SquadsX (Solana multisig) at a glance
|
|
18
|
+
- Pass `extras.squadsX` when constructing a Solana `StakerConfig`:
|
|
19
|
+
```ts
|
|
20
|
+
const cfg: StakerConfig = {
|
|
21
|
+
provider: solAdapter,
|
|
22
|
+
network: solNetwork,
|
|
23
|
+
pubKey: new WirePubKey(KeyType.ED, solAdapter.publicKey!.toBytes()),
|
|
24
|
+
extras: { squadsX: { multisigPDA: '<base58>', vaultIndex: 0 } },
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
- When present, every write call (`deposit`, `withdraw`, `stake`, `unstake`, `buy`) is wrapped as a Squads vault transaction via `sendSquadsIxs`, producing a proposal that you approve/execute in Squads.
|
|
28
|
+
- The Hub staking service persists the PDAs in `localStorage` (`hub_squadsx_multisigpda`, `hub_squadsx_vaultindex`) and reinitializes the `Staker` with Squads enabled; copy that pattern for multisig-first apps.
|
|
29
|
+
|
|
30
|
+
## Mental model
|
|
31
|
+
- **Facade first:** Use `Staker` everywhere; it routes to the right chain client and keeps the API identical.
|
|
32
|
+
- **Base units only:** All amounts are lamports/wei (no floats internally).
|
|
33
|
+
- **Read-only vs write:** If you omit `provider`/`pubKey`, clients spin up in **read-only** mode—perfect for tranche snapshots, APY, and portfolio lookups against public RPCs. Add a signer (`provider` + `pubKey`) to unlock writes (deposit/withdraw/stake/unstake/buy/register). The Hub service uses read-only configs to prefill dashboards before wallets connect, then re-initializes with signer configs once a wallet is present.
|
|
34
|
+
- **State views:** `getPortfolio()` is the fastest way to know “native, liq, staked, $WIRE, yield” plus handy PDAs/addresses.
|
|
35
|
+
- **Snapshots:** `getTrancheSnapshot(chainId)` powers price ladders, liquidity/utilization charts, and native USD hints.
|
|
36
|
+
|
|
37
|
+
## Supported networks (today)
|
|
38
|
+
- **Solana**: `SolChainID.Mainnet`, `SolChainID.Devnet`.
|
|
39
|
+
- **EVM**: `EvmChainID.Ethereum`, `EvmChainID.Hoodi` (testnet).
|
|
40
|
+
|
|
41
|
+
The unified interface is chain-id driven: `new Staker(configs, selectedChainId)` builds per-chain clients behind the scenes, and `staker.setChain(chainId)` swaps the active client. Adding future chains (e.g., Sui) only requires implementing `IStakingClient` and wiring its `chainId` into the router—no API changes for consuming apps.
|
|
24
42
|
|
|
25
43
|
## Installation
|
|
26
|
-
|
|
27
|
-
The package is published on npm.
|
|
28
|
-
|
|
29
44
|
```bash
|
|
30
45
|
npm install @wireio/stake
|
|
31
46
|
```
|
|
47
|
+
Peer requirement: `@wireio/core >=0.1.0 <0.4.0`.
|
|
32
48
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## Getting Started
|
|
36
|
-
|
|
37
|
-
### 1) Construct a `Staker`
|
|
38
|
-
|
|
39
|
-
Create the staker with one or more chain configs (only Solana client is active today):
|
|
49
|
+
## Quick start: pick a chain, then call through `client`
|
|
40
50
|
|
|
41
51
|
```ts
|
|
42
|
-
import { Staker, StakerConfig } from '@wireio/stake';
|
|
52
|
+
import { Staker, StakerConfig, SolChainID, EvmChainID } from '@wireio/stake';
|
|
43
53
|
import { PublicKey as WirePubKey, KeyType } from '@wireio/core';
|
|
44
54
|
import { BaseSignerWalletAdapter } from '@solana/wallet-adapter-base';
|
|
55
|
+
import { ethers } from 'ethers';
|
|
45
56
|
|
|
46
|
-
//
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
// ---- Solana example (wallet adapter) ----
|
|
58
|
+
const solAdapter: BaseSignerWalletAdapter = /* connected wallet */;
|
|
59
|
+
const solCfg: StakerConfig = {
|
|
60
|
+
provider: solAdapter,
|
|
61
|
+
network: {
|
|
62
|
+
chainId: SolChainID.Devnet,
|
|
63
|
+
name: 'Wire Solana Devnet',
|
|
64
|
+
rpcUrls: ['https://...', 'wss://...'],
|
|
65
|
+
nativeCurrency: { symbol: 'SOL', decimals: 9 },
|
|
66
|
+
},
|
|
67
|
+
pubKey: new WirePubKey(KeyType.ED, solAdapter.publicKey!.toBytes()),
|
|
68
|
+
extras: { squadsX: { multisigPDA: '<base58>', vaultIndex: 0 } }, // optional
|
|
53
69
|
};
|
|
54
70
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
// ---- Ethereum example (browser provider) ----
|
|
72
|
+
const ethProvider = new ethers.providers.Web3Provider(window.ethereum);
|
|
73
|
+
const ethCfg: StakerConfig = {
|
|
74
|
+
provider: ethProvider,
|
|
75
|
+
network: {
|
|
76
|
+
chainId: EvmChainID.Ethereum,
|
|
77
|
+
name: 'Ethereum',
|
|
78
|
+
rpcUrls: ['https://...'],
|
|
79
|
+
nativeCurrency: { symbol: 'ETH', decimals: 18 },
|
|
80
|
+
},
|
|
59
81
|
};
|
|
60
82
|
|
|
61
|
-
const staker = new Staker(
|
|
83
|
+
const staker = new Staker([solCfg, ethCfg], SolChainID.Devnet); // default active chain
|
|
84
|
+
const client = staker.client; // typed staking client for the selected chain
|
|
62
85
|
```
|
|
63
86
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
### 2) Get the active client & portfolio
|
|
67
|
-
|
|
87
|
+
### Common calls
|
|
88
|
+
Amounts are always **base units** (lamports / wei).
|
|
68
89
|
```ts
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
* portfolio.actual.amount // liqSOL in ATA
|
|
76
|
-
* portfolio.tracked.amount // tracked on distribution program
|
|
77
|
-
*/
|
|
90
|
+
await client?.deposit(1_000_000_000n); // stake 1 SOL -> liqSOL (or 1e9 wei -> liqETH)
|
|
91
|
+
await client?.withdraw(500_000_000n); // liq -> native withdraw request
|
|
92
|
+
await client?.stake(200_000_000n); // stake liq into yield pool (Sol Outpost / ETH manager)
|
|
93
|
+
await client?.unstake(100_000_000n); // reverse stake (where supported)
|
|
94
|
+
await client?.buy(50_000_000n); // purchase WIRE pretokens with liq
|
|
95
|
+
const portfolio = await client?.getPortfolio(); // unified balance snapshot
|
|
78
96
|
```
|
|
79
97
|
|
|
80
|
-
###
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
98
|
+
### Solana flow (what happens)
|
|
99
|
+
- `deposit(lamports)`: builds ix via `DepositClient`, optionally wraps in SquadsX vault tx, sends and confirms.
|
|
100
|
+
- `withdraw(lamports)`: burns liqSOL and mints a withdrawal NFT receipt (payout later via operators).
|
|
101
|
+
- `stake/unstake`: interacts with Outpost (`synd`/`desynd`) to move liqSOL into/out of yield pool.
|
|
102
|
+
- `buy(lamports)`: purchase $WIRE pretokens using liqSOL (Token-2022).
|
|
103
|
+
- Multisig: if `extras.squadsX` is set, write calls become Squads proposals (`sendSquadsIxs`).
|
|
104
|
+
- Portfolio extras include key PDAs (vault, reserve pool, user ATA) plus Outpost index/shares math.
|
|
105
|
+
|
|
106
|
+
### Ethereum flow (what happens)
|
|
107
|
+
- `deposit(amountWei)`: via `ConvertClient.performDeposit`; returns tx hash.
|
|
108
|
+
- `withdraw(amountWei)`: burns liqETH and enqueues withdrawal; receipts are NFTs.
|
|
109
|
+
- `getPendingWithdraws()` / `claimWithdraw(tokenId)`: manage withdrawal queue.
|
|
110
|
+
- `stake(amountWei)`: stakes liqETH; `unstakePrelaunch(tokenId, recipient)` handles prelaunch path.
|
|
111
|
+
- `buy(amountWei)`: pretokens via `PretokenClient.purchasePretokensWithLiqETH`.
|
|
112
|
+
- `validatorDeposit()`: validator bond/lock helper.
|
|
113
|
+
- Portfolio includes native/liq/staked/$WIRE and yield (index/shares) when contracts expose them.
|
|
114
|
+
|
|
115
|
+
## Solana specifics
|
|
116
|
+
- **Clients composed under the hood**: `DepositClient`, `DistributionClient`, `OutpostClient`,
|
|
117
|
+
`TokenClient`, `ValidatorLeaderboardClient`, `SolanaProgramService`.
|
|
118
|
+
- **SquadsX multisig**: provide `extras.squadsX` to have deposits / stakes wrapped as vault
|
|
119
|
+
transactions (`sendSquadsIxs`).
|
|
120
|
+
- **Outpost / Yield**: `getPortfolio()` returns `yield` (index-scale math) and `staked` amounts; `wire`
|
|
121
|
+
reports pretokens (1e8 scale).
|
|
122
|
+
- **Helpers**: `getDepositBuffer`, `getDepositFee`, `getSystemAPY`, tranche snapshots via
|
|
123
|
+
`getTrancheSnapshot(chainId)`.
|
|
124
|
+
|
|
125
|
+
## Ethereum specifics
|
|
126
|
+
- Uses `ethers` provider/signer; falls back to JSON RPC for read-only.
|
|
127
|
+
- Modules used: `ConvertClient` (deposit/withdraw), `StakeClient`, `PretokenClient`, `OPPClient`,
|
|
128
|
+
`ReceiptClient` (withdrawal NFTs), `ValidatorClient`.
|
|
129
|
+
- Additional endpoints:
|
|
130
|
+
- `getPendingWithdraws()` → pending withdrawal receipts.
|
|
131
|
+
- `claimWithdraw(tokenId)` → claim queued withdrawal by NFT id.
|
|
132
|
+
- `unstakePrelaunch(tokenId, recipient)` → prelaunch unstake path.
|
|
133
|
+
- `validatorDeposit()` → validator bond/lock flow.
|
|
134
|
+
- `getTrancheSnapshot(chainId)` → pretoken ladder view with price/supply growth.
|
|
135
|
+
- `getOPPMessages(address?)` and `getEthStats()` for operator/pay-rate data.
|
|
136
|
+
|
|
137
|
+
## Portfolio shape (all chains)
|
|
84
138
|
```ts
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
Registers any **untracked** liqSOL (if your actual token balance > tracked) and, if necessary,
|
|
96
|
-
first corrects other users with positive tracked deltas to free available balance.
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
const sig = await client.register();
|
|
100
|
-
console.log('Register tx:', sig);
|
|
139
|
+
type Portfolio = {
|
|
140
|
+
native: { amount: bigint; symbol: string; decimals: number };
|
|
141
|
+
liq: { amount: bigint; symbol: string; decimals: number; ata?: PublicKey };
|
|
142
|
+
staked: { amount: bigint; symbol: string; decimals: number };
|
|
143
|
+
wire: { amount: bigint; symbol: string; decimals: number };
|
|
144
|
+
yield?: { currentIndex: bigint; indexScale: bigint; totalShares: bigint;
|
|
145
|
+
userShares: bigint; estimatedClaim?: bigint; estimatedYield?: bigint };
|
|
146
|
+
extras?: Record<string, any>;
|
|
147
|
+
chainID: number;
|
|
148
|
+
};
|
|
101
149
|
```
|
|
102
150
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
You typically don’t need these directly if you use `Staker`, but they’re available.
|
|
108
|
-
|
|
109
|
-
### `DepositClient`
|
|
110
|
-
|
|
111
|
-
- `buildDepositTx(user: PublicKey, amount: number)` → `{ transaction, ephemeralStakePubkey }`
|
|
112
|
-
- `deposit(user: PublicKey, amount: number)` → confirmed signature
|
|
113
|
-
|
|
114
|
-
### `DistributionClient`
|
|
115
|
-
|
|
116
|
-
- `getDistributionState()`, `getUserRecord(user)`
|
|
117
|
-
- `getActualBalance(user)`, `getTrackedBalance(user)`
|
|
118
|
-
- `updateUser(targetUser)` – register/correct a user
|
|
119
|
-
- `buildCorrectRegisterTx({ amount?, preloadCandidates? })` – build a tx that:
|
|
120
|
-
- if your mismatch < 0 → just **correct self**
|
|
121
|
-
- else → **free available** by updating top candidates, then **register self**
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Core Types
|
|
151
|
+
## Error handling
|
|
152
|
+
- All write methods throw on failure; wrap with `try/catch`.
|
|
153
|
+
- Solana transaction failures include logs; Ethereum methods surface tx hashes for inspection.
|
|
154
|
+
- Passing `provider` is required for writes; read-only is supported for many getters.
|
|
126
155
|
|
|
156
|
+
## Using from a service (pattern)
|
|
157
|
+
Your `staking.service.ts` can simply forward to the selected `client`. The Wire Hub webapp
|
|
158
|
+
(`wire-hub-webapp/src/app/_services/staking.service.ts`) does this and adds read-only Outpost
|
|
159
|
+
clients, tranche/APY polling, SquadsX, and retryable portfolio refresh. Typical shape:
|
|
127
160
|
```ts
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
/** Amount is in the chain's smallest unit (lamports/wei, etc.) */
|
|
138
|
-
deposit(amount: number): Promise<string>;
|
|
139
|
-
|
|
140
|
-
/** Register any untracked LIQ staked tokens */
|
|
141
|
-
register(): Promise<string>;
|
|
142
|
-
|
|
143
|
-
/** Fetch the portfolio for the LIQ stake user */
|
|
144
|
-
getPortfolio(): Promise<Portfolio>;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export type StakerConfig = {
|
|
148
|
-
network: ExternalNetwork;
|
|
149
|
-
provider: BaseSignerWalletAdapter | ethers.providers.Web3Provider;
|
|
150
|
-
pubKey: PublicKey;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export interface Portfolio {
|
|
154
|
-
/** Native SOL balance on chain */
|
|
155
|
-
native: BalanceView;
|
|
156
|
-
/** Actual liquid SOL balance from ATA */
|
|
157
|
-
actual: BalanceView;
|
|
158
|
-
/** Tracked liquid SOL balance from distribution program */
|
|
159
|
-
tracked: BalanceView;
|
|
160
|
-
/** Extra PDAs and account addresses */
|
|
161
|
-
extras?: Record<string, any>;
|
|
161
|
+
export class StakingService {
|
|
162
|
+
constructor(private staker: Staker) {}
|
|
163
|
+
deposit(amount: bigint) { return this.staker.client?.deposit(amount); }
|
|
164
|
+
withdraw(amount: bigint) { return this.staker.client?.withdraw(amount); }
|
|
165
|
+
stake(amount: bigint) { return this.staker.client?.stake(amount); }
|
|
166
|
+
unstake(amount: bigint) { return this.staker.client?.unstake(amount); }
|
|
167
|
+
buy(amount: bigint) { return this.staker.client?.buy(amount); }
|
|
168
|
+
portfolio() { return this.staker.client?.getPortfolio(); }
|
|
169
|
+
stats(chainId: number) { return this.staker.client?.getTrancheSnapshot(chainId); }
|
|
162
170
|
}
|
|
163
|
-
|
|
164
|
-
export type BalanceView = {
|
|
165
|
-
amount: bigint; // raw on-chain integer value
|
|
166
|
-
decimals: number; // number of decimal places
|
|
167
|
-
symbol?: string; // optional token symbol identifier
|
|
168
|
-
ata?: SolPubKey; // associated token account address
|
|
169
|
-
};
|
|
170
171
|
```
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
Common tasks:
|
|
198
|
-
|
|
172
|
+
Switch chains at runtime with `staker.setChain(chainId)`.
|
|
173
|
+
|
|
174
|
+
Hub-specific extras you can reuse:
|
|
175
|
+
- Read-only bootstrap: configs with only `network` to fetch tranche snapshots/APY before a wallet connects.
|
|
176
|
+
- APY helpers: `getSystemAPY()` per chain; normalize number/string/bigint shapes.
|
|
177
|
+
- Deposit buffer: `getDepositBuffer({ balanceOverrideLamports })` to compute max-spendable.
|
|
178
|
+
- SquadsX multisig: store `multisigPDA` + `vaultIndex` (localStorage keys `hub_squadsx_multisigpda`, `hub_squadsx_vaultindex`) and pass via `extras.squadsX` so write calls become Squads proposals.
|
|
179
|
+
- ETH prelaunch/receipts: `getPendingWithdraws`, `claimWithdraw(tokenId)`, `unstakePrelaunch(tokenId, recipient)`, `fetchPrelaunchReceipts`.
|
|
180
|
+
- Tranche ladders: cache `getTrancheSnapshot(chainId)` per chain for dashboards (liquidity/utilization/arb spread).
|
|
181
|
+
|
|
182
|
+
## Portfolio fields (returned by `getPortfolio`)
|
|
183
|
+
- `native`: wallet balance in base units; symbol/decimals from network.
|
|
184
|
+
- `liq`: liquid staking token balance (Token-2022 ATA on Sol; ERC-20 on EVM).
|
|
185
|
+
- `staked`: liq staked into Outpost (Sol) or staking manager (ETH).
|
|
186
|
+
- `wire`: pretoken balance (1e8 scale).
|
|
187
|
+
- `yield`: `currentIndex`, `indexScale`, `totalShares`, `userShares`, `estimatedClaim`, `estimatedYield`.
|
|
188
|
+
- `extras`: PDAs, price/index hints useful for UIs and debugging.
|
|
189
|
+
- `chainID`: the chain the snapshot came from.
|
|
190
|
+
|
|
191
|
+
## Tranche snapshot fields (via `getTrancheSnapshot`)
|
|
192
|
+
- `currentTranche`, `currentPriceUsd` (1e8), `currentTrancheSupply`, `initialTrancheSupply`.
|
|
193
|
+
- `ladder`: nearby rows `{ id, capacity, sold, remaining, priceUsd }` (1e8 scale).
|
|
194
|
+
- `currentIndex`, `totalShares`, `totalPretokensSold`, `supplyGrowthBps`, `priceGrowthCents`.
|
|
195
|
+
- `nativePriceUsd` if available (SDK backfills from market data when the chain doesn’t provide it).
|
|
196
|
+
|
|
197
|
+
## Building, testing, docs
|
|
199
198
|
```bash
|
|
200
|
-
#
|
|
201
|
-
npm
|
|
202
|
-
|
|
203
|
-
#
|
|
204
|
-
npm run prepare
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Testnet Deployment 11/19/25
|
|
210
|
-
```
|
|
211
|
-
RPC URL: https://sol.gitgo.app/
|
|
212
|
-
Deploying cluster: http://solana-genesis:8899
|
|
213
|
-
Upgrade authority: ./wallets/deploymentWallet/universalDeploymentWallet.json
|
|
214
|
-
Deploying program "liq_sol_token"...
|
|
215
|
-
Program path: /app/program/target/deploy/liq_sol_token.so...
|
|
216
|
-
Program Id: FsRiJLqerifBSpZjzdWxSyJ3sQmJ3ScFwHv4VRi9ghVT
|
|
217
|
-
|
|
218
|
-
Signature: 26JPXjiNXBzPk7p8PQx8y1bQog1baWCjyRqWYyQKNxEpK9reAHpeNwcw9Sh7dAyaAhyuosQueE4XrnTZibXdwx99
|
|
219
|
-
|
|
220
|
-
Deploying program "validator_leaderboard"...
|
|
221
|
-
Program path: /app/program/target/deploy/validator_leaderboard.so...
|
|
222
|
-
Program Id: 9SW7GqRTzEc5KjSnXXTqvojcyCvzHjn8J4xdBeS91Gbq
|
|
223
|
-
|
|
224
|
-
Signature: 5nobXLXnnMD9MmPjcJ5xbmawV4wDXxCYEBR2CwoBkvEQ4iLAVQCpzZWw7Pgb7eGwk6bu88VvpC2occCJh2EYajfJ
|
|
225
|
-
|
|
226
|
-
Deploying program "liqsol_core"...
|
|
227
|
-
Program path: /app/program/target/deploy/liqsol_core.so...
|
|
228
|
-
Program Id: 8zBGapo9WvnGskgXyKmgNgLACimELqJzAPEHyShWg5Dj
|
|
229
|
-
|
|
230
|
-
Signature: 2wakzKzaxkRLC4nMw3t8pCSL4PfG32EoSKZXo6og8mAgVq54twWUhqG5JLAQejvsqGgEBaZ7zwWj9tvsijt8vwbi
|
|
231
|
-
|
|
232
|
-
Deploy success
|
|
233
|
-
🪙 Initializing token mint...
|
|
234
|
-
🚀 Initializing Liquid SOL Token...
|
|
235
|
-
|
|
236
|
-
📍 Mint Authority PDA: 3XwUD4Sy6Aua1ceC8yEHTWk16vMmmWAdFMfJpzwvwveD
|
|
237
|
-
🪙 Deterministic Mint Address: Empuao5KEK7zq3rFz8Q8fVSmNwhbkrqkNctdfZKdY9b2
|
|
238
|
-
🔗 Network: http://solana-genesis:8899
|
|
239
|
-
👤 Payer: Ebar1nLiEpHEFH4DmYasqJHMm3fn6g1jJY3WBfwc6GsD
|
|
240
|
-
📝 Token Name: Liquid Staked SOL
|
|
241
|
-
🏷️ Token Symbol: liqSOL
|
|
242
|
-
|
|
243
|
-
🏦 Receiver ATA: 3B9dtsRGYvB1aVQYR8yHfzbbECgohHkH7U67v6gPJ1HQ
|
|
244
|
-
🔄 Sending mint creation transaction...
|
|
245
|
-
✅ Liquid SOL Token mint created! Transaction: 5fgNuuNorhBcvjp28AQhHK1jkSG6fRCPBbxsHbEnB3CyuRYPRTGybH2gjLhGdb7kD8CUohibUzd1wnPLUDUauret
|
|
246
|
-
|
|
247
|
-
📊 Created Mint Information:
|
|
248
|
-
Mint Address: Empuao5KEK7zq3rFz8Q8fVSmNwhbkrqkNctdfZKdY9b2
|
|
249
|
-
Mint Authority: 3XwUD4Sy6Aua1ceC8yEHTWk16vMmmWAdFMfJpzwvwveD
|
|
250
|
-
Token Name: Liquid Staked SOL
|
|
251
|
-
Token Symbol: liqSOL
|
|
252
|
-
Decimals: 9
|
|
253
|
-
Receiver ATA: 3B9dtsRGYvB1aVQYR8yHfzbbECgohHkH7U67v6gPJ1HQ
|
|
254
|
-
|
|
255
|
-
🎉 Liquid SOL Token is ready to use!
|
|
256
|
-
Mint Address: Empuao5KEK7zq3rFz8Q8fVSmNwhbkrqkNctdfZKdY9b2
|
|
257
|
-
Program ID: FsRiJLqerifBSpZjzdWxSyJ3sQmJ3ScFwHv4VRi9ghVT
|
|
258
|
-
Mint Authority PDA: 3XwUD4Sy6Aua1ceC8yEHTWk16vMmmWAdFMfJpzwvwveD
|
|
259
|
-
▶ Initializing Distribution Program...
|
|
260
|
-
Distribution Program: 8zBGapo9WvnGskgXyKmgNgLACimELqJzAPEHyShWg5Dj
|
|
261
|
-
Wallet: Ebar1nLiEpHEFH4DmYasqJHMm3fn6g1jJY3WBfwc6GsD
|
|
262
|
-
LiqSOL Mint: Empuao5KEK7zq3rFz8Q8fVSmNwhbkrqkNctdfZKdY9b2
|
|
263
|
-
Distribution State PDA: BHMC9S1J8jy7nitVt4CHGeRHVK8kh9jpm4xKhf4cJWgn
|
|
199
|
+
npm ci # install
|
|
200
|
+
npm run prepare # build to lib/ via rollup
|
|
201
|
+
npm test # full test suite (make targets exist for sol/eth split)
|
|
202
|
+
npm run docs # generate typedoc to docs/ (gh-pages ready)
|
|
264
203
|
```
|
|
265
204
|
|
|
266
|
-
##
|
|
267
|
-
|
|
268
|
-
-
|
|
269
|
-
-
|
|
270
|
-
|
|
271
|
-
|
|
205
|
+
## Project structure (src/)
|
|
206
|
+
- `staker.ts` – chain router / façade.
|
|
207
|
+
- `types.ts` – shared interfaces (IStakingClient, Portfolio, tranche snapshots).
|
|
208
|
+
- `networks/solana/*` – clients, IDL wiring, constants, utils.
|
|
209
|
+
- `networks/ethereum/*` – contract service, clients, tranche math.
|
|
210
|
+
- `assets/` – IDLs, ABIs, artifacts.
|
|
272
211
|
|
|
273
|
-
##
|
|
212
|
+
## Versioning & license
|
|
213
|
+
- License: **FSL-1.1-Apache-2.0** (see `LICENSE.md`).
|
|
274
214
|
|
|
275
|
-
|
|
215
|
+
## Links
|
|
216
|
+
- API reference: <https://Wire-Network.github.io/sdk-stake/>
|
|
217
|
+
- Source: <https://github.com/Wire-Network/sdk-stake>
|