mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-20 06:08:34 +02:00
64 lines
2.1 KiB
Markdown
64 lines
2.1 KiB
Markdown
## cw_solana
|
|
|
|
Solana wallet module for Cake Wallet. Provides native SOL and SPL token support built on `on_chain/solana` with high-throughput RPC usage and safe transaction parsing.
|
|
|
|
### Features
|
|
|
|
- Connect to Solana RPC (Ankr/Chainstack/custom) via `SolanaRPC` over HTTP.
|
|
- Fetch SOL balances and aggregate SPL token balances across accounts.
|
|
- Parse and stream native and SPL token transactions (filters ATA-only and spam-like micro txs).
|
|
- Estimate fees per compiled message and enforce rent-exemption checks.
|
|
- Create/sign/broadcast SOL and SPL transfers; auto-create recipient ATA when necessary.
|
|
- Manage SPL tokens; fetch on-chain metadata (symbol/name) for unknown mints.
|
|
- Sign and verify messages.
|
|
- Node health checks for SOL and a known SPL token (USDC).
|
|
|
|
### Getting started
|
|
|
|
If you use hosted RPC providers, add a secrets file for keys (optional unless using those hosts):
|
|
|
|
```dart
|
|
// cw_solana/lib/.secrets.g.dart (DO NOT COMMIT)
|
|
const String ankrApiKey = 'YOUR_ANKR_KEY';
|
|
const String chainStackApiKey = 'YOUR_CHAINSTACK_KEY';
|
|
```
|
|
|
|
Connect and sync:
|
|
|
|
```dart
|
|
final service = SolanaWalletService(walletInfoBox, true);
|
|
final wallet = await service.create(SolanaNewWalletCredentials(name: 'My SOL', password: 'secret'));
|
|
await wallet.connectToNode(node: Node(uriRaw: 'api.mainnet-beta.solana.com', isSSL: true));
|
|
await wallet.startSync();
|
|
final sol = wallet.balance[CryptoCurrency.sol]?.balance;
|
|
```
|
|
|
|
### Usage
|
|
|
|
Send SOL:
|
|
|
|
```dart
|
|
final pending = await wallet.createTransaction(
|
|
SolanaTransactionCredentials.single(
|
|
address: 'SoL...',
|
|
cryptoAmount: '0.05',
|
|
currency: CryptoCurrency.sol,
|
|
),
|
|
);
|
|
final sig = await pending.commit();
|
|
```
|
|
|
|
Add an SPL token by mint:
|
|
|
|
```dart
|
|
final token = await wallet.getSPLToken('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'); // USDC
|
|
if (token != null) {
|
|
await wallet.addSPLToken(token);
|
|
}
|
|
```
|
|
|
|
### Additional information
|
|
|
|
- When using `rpc.ankr.com` or `solana-mainnet.core.chainstack.com`, the client reads API keys from `.secrets.g.dart`.
|
|
- See `lib/` for APIs: `SolanaWalletClient`, `SolanaWallet`, `SolanaWalletService`, and credential types.
|