agentwallet-sdk 3.2.1 → 3.4.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 +2 -536
- package/dist/bridge/abis.d.ts +48 -171
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +2 -41
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +35 -168
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -4
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -8
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +15 -134
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -170
- package/dist/bridge/types.js.map +1 -1
- package/dist/identity/erc8004.d.ts +2 -240
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +58 -334
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.d.ts +313 -134
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -56
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +6 -50
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +25 -153
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts +47 -165
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +2 -3
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -4
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +6 -36
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +0 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/chains/abstract/index.d.ts +135 -0
- package/dist/x402/chains/abstract/index.d.ts.map +1 -0
- package/dist/x402/chains/abstract/index.js +190 -0
- package/dist/x402/chains/abstract/index.js.map +1 -0
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +1 -2
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +3 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -1
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/types.d.ts +3 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +2 -17
- package/dist/x402/types.js.map +1 -1
- package/package.json +12 -32
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -25
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -4
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -138
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -89
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -21
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -116
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -8
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -25
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/dist/solana/bridge.js
DELETED
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] SolanaCCTPBridge — CCTP V2 cross-chain USDC bridge for Solana
|
|
2
|
-
// Handles Solana ↔ EVM USDC transfers via Circle's CCTP V2 protocol.
|
|
3
|
-
//
|
|
4
|
-
// Solana uses Anchor programs instead of EVM smart contracts:
|
|
5
|
-
// TokenMessengerMinterV2: CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe
|
|
6
|
-
// MessageTransmitterV2: CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC
|
|
7
|
-
//
|
|
8
|
-
// Flow (Solana → EVM):
|
|
9
|
-
// 1. depositForBurn on Solana program → burns USDC, emits MessageSent
|
|
10
|
-
// 2. Poll Circle IRIS API for attestation (same API as EVM)
|
|
11
|
-
// 3. receiveMessage on destination EVM chain
|
|
12
|
-
//
|
|
13
|
-
// Flow (EVM → Solana):
|
|
14
|
-
// 1. depositForBurn on EVM chain (via BridgeModule)
|
|
15
|
-
// 2. Poll Circle IRIS API for attestation
|
|
16
|
-
// 3. receiveMessage on Solana MessageTransmitterV2 program
|
|
17
|
-
//
|
|
18
|
-
// Source: https://developers.circle.com/cctp/references/solana-programs
|
|
19
|
-
// Source: https://github.com/circlefin/solana-cctp-contracts
|
|
20
|
-
import { PublicKey, Transaction, TransactionInstruction, SystemProgram, Keypair, } from '@solana/web3.js';
|
|
21
|
-
import { getAssociatedTokenAddress, createAssociatedTokenAccountInstruction, TOKEN_PROGRAM_ID, } from '@solana/spl-token';
|
|
22
|
-
import { SOLANA_CCTP_PROGRAMS, SOLANA_USDC_MINT, SOLANA_CCTP_DOMAIN, CCTP_DOMAIN_IDS, FINALITY_THRESHOLD, CIRCLE_ATTESTATION_API, MAX_ATTESTATION_POLLS, ATTESTATION_POLL_INTERVAL_MS, } from '../bridge/types.js';
|
|
23
|
-
// ─── Minimal EVM Receiver (for Solana→EVM minting) ───
|
|
24
|
-
/** Minimal ABI for MessageTransmitterV2.receiveMessage */
|
|
25
|
-
const RECEIVE_MESSAGE_ABI = [{
|
|
26
|
-
name: 'receiveMessage',
|
|
27
|
-
type: 'function',
|
|
28
|
-
inputs: [
|
|
29
|
-
{ name: 'message', type: 'bytes' },
|
|
30
|
-
{ name: 'attestation', type: 'bytes' },
|
|
31
|
-
],
|
|
32
|
-
outputs: [{ name: 'success', type: 'bool' }],
|
|
33
|
-
stateMutability: 'nonpayable',
|
|
34
|
-
}];
|
|
35
|
-
// ─── SolanaCCTPBridge ───
|
|
36
|
-
/**
|
|
37
|
-
* SolanaCCTPBridge — Handles CCTP V2 burns and receives on Solana.
|
|
38
|
-
*
|
|
39
|
-
* For the full Solana→EVM or EVM→Solana flow, use UnifiedBridge which
|
|
40
|
-
* orchestrates both sides together.
|
|
41
|
-
*
|
|
42
|
-
* ```ts
|
|
43
|
-
* const bridge = new SolanaCCTPBridge({
|
|
44
|
-
* connection: new Connection('https://api.mainnet-beta.solana.com'),
|
|
45
|
-
* payer: keypair,
|
|
46
|
-
* });
|
|
47
|
-
*
|
|
48
|
-
* // Burn USDC on Solana → receive on Base
|
|
49
|
-
* const result = await bridge.bridgeToEvm({
|
|
50
|
-
* amount: 1_000_000n,
|
|
51
|
-
* destinationChain: 'base',
|
|
52
|
-
* destinationAddress: '0x...',
|
|
53
|
-
* });
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
export class SolanaCCTPBridge {
|
|
57
|
-
constructor(config) {
|
|
58
|
-
this.connection = config.connection;
|
|
59
|
-
this.payer = config.payer;
|
|
60
|
-
this.tokenMessengerMinterProgram = new PublicKey(SOLANA_CCTP_PROGRAMS.TOKEN_MESSENGER_MINTER_V2);
|
|
61
|
-
this.messageTransmitterProgram = new PublicKey(SOLANA_CCTP_PROGRAMS.MESSAGE_TRANSMITTER_V2);
|
|
62
|
-
this.usdcMint = new PublicKey(config.usdcMint ?? SOLANA_USDC_MINT);
|
|
63
|
-
}
|
|
64
|
-
// ─── Public API ───
|
|
65
|
-
/**
|
|
66
|
-
* Burn USDC on Solana and return burn result for attestation polling.
|
|
67
|
-
* Part 1 of the Solana→EVM bridge flow.
|
|
68
|
-
*
|
|
69
|
-
* @note The Solana burn instruction calls `depositForBurn` on the
|
|
70
|
-
* TokenMessengerMinterV2 program. The message is stored in a PDA
|
|
71
|
-
* (MessageSent account) rather than emitted as an EVM log event.
|
|
72
|
-
* Circle's IRIS API indexes these events by transaction signature.
|
|
73
|
-
*/
|
|
74
|
-
async depositForBurn(params) {
|
|
75
|
-
const { amount, destinationChain, destinationAddress, minFinalityThreshold = FINALITY_THRESHOLD.FAST, maxFee = 0n, } = params;
|
|
76
|
-
const destinationDomain = CCTP_DOMAIN_IDS[destinationChain];
|
|
77
|
-
if (destinationDomain === undefined) {
|
|
78
|
-
throw new SolanaBridgeError('UNSUPPORTED_CHAIN', `Unsupported destination chain: ${destinationChain}`);
|
|
79
|
-
}
|
|
80
|
-
// Derive payer's USDC Associated Token Account
|
|
81
|
-
const payerUsdcAta = await getAssociatedTokenAddress(this.usdcMint, this.payer.publicKey);
|
|
82
|
-
// Derive PDAs for the CCTP program
|
|
83
|
-
const [tokenMessengerPda] = PublicKey.findProgramAddressSync([Buffer.from('token_messenger')], this.tokenMessengerMinterProgram);
|
|
84
|
-
const [tokenMinterPda] = PublicKey.findProgramAddressSync([Buffer.from('token_minter')], this.tokenMessengerMinterProgram);
|
|
85
|
-
const [localTokenPda] = PublicKey.findProgramAddressSync([Buffer.from('local_token'), this.usdcMint.toBuffer()], this.tokenMessengerMinterProgram);
|
|
86
|
-
const [remoteTokenMessengerPda] = PublicKey.findProgramAddressSync([
|
|
87
|
-
Buffer.from('remote_token_messenger'),
|
|
88
|
-
Buffer.from(new Uint32Array([destinationDomain]).buffer).reverse(),
|
|
89
|
-
], this.tokenMessengerMinterProgram);
|
|
90
|
-
// MessageSent event account — generated client-side per Circle spec
|
|
91
|
-
const messageSentKeypair = Keypair.generate();
|
|
92
|
-
// MessageTransmitter state PDA
|
|
93
|
-
const [messageTransmitterStatePda] = PublicKey.findProgramAddressSync([Buffer.from('message_transmitter')], this.messageTransmitterProgram);
|
|
94
|
-
// Encode destinationCaller as 32-byte zero (anyone can receive)
|
|
95
|
-
const destinationCallerBytes = Buffer.alloc(32);
|
|
96
|
-
// Encode EVM destination address as 32-byte mintRecipient
|
|
97
|
-
const mintRecipientBytes = this.evmAddressToBytes32(destinationAddress);
|
|
98
|
-
// Build depositForBurn instruction data
|
|
99
|
-
// Layout: [discriminator(8)] [amount(8)] [destinationDomain(4)] [mintRecipient(32)]
|
|
100
|
-
// [destinationCaller(32)] [maxFee(8)] [minFinalityThreshold(4)]
|
|
101
|
-
const discriminator = Buffer.from([134, 197, 116, 77, 208, 100, 37, 185]); // Anchor discriminator
|
|
102
|
-
const amountBuf = Buffer.alloc(8);
|
|
103
|
-
amountBuf.writeBigUInt64LE(amount, 0);
|
|
104
|
-
const domainBuf = Buffer.alloc(4);
|
|
105
|
-
domainBuf.writeUInt32LE(destinationDomain, 0);
|
|
106
|
-
const maxFeeBuf = Buffer.alloc(8);
|
|
107
|
-
maxFeeBuf.writeBigUInt64LE(maxFee, 0);
|
|
108
|
-
const finalityBuf = Buffer.alloc(4);
|
|
109
|
-
finalityBuf.writeUInt32LE(minFinalityThreshold, 0);
|
|
110
|
-
const instructionData = Buffer.concat([
|
|
111
|
-
discriminator,
|
|
112
|
-
amountBuf,
|
|
113
|
-
domainBuf,
|
|
114
|
-
mintRecipientBytes,
|
|
115
|
-
destinationCallerBytes,
|
|
116
|
-
maxFeeBuf,
|
|
117
|
-
finalityBuf,
|
|
118
|
-
]);
|
|
119
|
-
const depositInstruction = new TransactionInstruction({
|
|
120
|
-
programId: this.tokenMessengerMinterProgram,
|
|
121
|
-
keys: [
|
|
122
|
-
{ pubkey: this.payer.publicKey, isSigner: true, isWritable: true },
|
|
123
|
-
{ pubkey: payerUsdcAta, isSigner: false, isWritable: true },
|
|
124
|
-
{ pubkey: tokenMessengerPda, isSigner: false, isWritable: false },
|
|
125
|
-
{ pubkey: remoteTokenMessengerPda, isSigner: false, isWritable: false },
|
|
126
|
-
{ pubkey: tokenMinterPda, isSigner: false, isWritable: true },
|
|
127
|
-
{ pubkey: localTokenPda, isSigner: false, isWritable: true },
|
|
128
|
-
{ pubkey: this.usdcMint, isSigner: false, isWritable: true },
|
|
129
|
-
{ pubkey: messageSentKeypair.publicKey, isSigner: true, isWritable: true },
|
|
130
|
-
{ pubkey: messageTransmitterStatePda, isSigner: false, isWritable: true },
|
|
131
|
-
{ pubkey: this.messageTransmitterProgram, isSigner: false, isWritable: false },
|
|
132
|
-
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
133
|
-
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
134
|
-
],
|
|
135
|
-
data: instructionData,
|
|
136
|
-
});
|
|
137
|
-
const tx = new Transaction().add(depositInstruction);
|
|
138
|
-
const { blockhash } = await this.connection.getLatestBlockhash();
|
|
139
|
-
tx.recentBlockhash = blockhash;
|
|
140
|
-
tx.feePayer = this.payer.publicKey;
|
|
141
|
-
let signature;
|
|
142
|
-
try {
|
|
143
|
-
signature = await this.connection.sendTransaction(tx, [
|
|
144
|
-
this.payer,
|
|
145
|
-
messageSentKeypair,
|
|
146
|
-
]);
|
|
147
|
-
await this.connection.confirmTransaction(signature, 'confirmed');
|
|
148
|
-
}
|
|
149
|
-
catch (err) {
|
|
150
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
151
|
-
throw new SolanaBridgeError('BURN_FAILED', `Solana CCTP depositForBurn failed: ${msg}. ` +
|
|
152
|
-
`Ensure wallet has sufficient USDC and SOL for rent + fees.`);
|
|
153
|
-
}
|
|
154
|
-
// Fetch message bytes from the MessageSent account
|
|
155
|
-
const { messageBytes, messageHash, nonce } = await this.fetchMessageSent(messageSentKeypair.publicKey);
|
|
156
|
-
return {
|
|
157
|
-
signature,
|
|
158
|
-
messageHash,
|
|
159
|
-
messageBytes,
|
|
160
|
-
sourceDomain: SOLANA_CCTP_DOMAIN,
|
|
161
|
-
destinationDomain,
|
|
162
|
-
nonce,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Poll Circle IRIS API for attestation after a Solana burn.
|
|
167
|
-
* Same API as EVM — IRIS indexes Solana transactions by message hash.
|
|
168
|
-
*/
|
|
169
|
-
async waitForAttestation(messageHash, apiUrl = CIRCLE_ATTESTATION_API) {
|
|
170
|
-
// Solana uses domain 5
|
|
171
|
-
const url = `${apiUrl}/v2/messages/${SOLANA_CCTP_DOMAIN}/${messageHash}`;
|
|
172
|
-
for (let attempt = 0; attempt < MAX_ATTESTATION_POLLS; attempt++) {
|
|
173
|
-
let response;
|
|
174
|
-
try {
|
|
175
|
-
const res = await fetch(url, { headers: { 'Accept': 'application/json' } });
|
|
176
|
-
if (!res.ok) {
|
|
177
|
-
if (res.status === 404) {
|
|
178
|
-
await this.sleep(ATTESTATION_POLL_INTERVAL_MS);
|
|
179
|
-
continue;
|
|
180
|
-
}
|
|
181
|
-
const body = await res.text().catch(() => '');
|
|
182
|
-
throw new SolanaBridgeError('ATTESTATION_ERROR', `Circle API HTTP ${res.status}: ${body}`);
|
|
183
|
-
}
|
|
184
|
-
response = await res.json();
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
if (err instanceof SolanaBridgeError)
|
|
188
|
-
throw err;
|
|
189
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
190
|
-
throw new SolanaBridgeError('ATTESTATION_ERROR', `IRIS API unreachable: ${msg}`);
|
|
191
|
-
}
|
|
192
|
-
if (response.status === 'complete' && response.attestation) {
|
|
193
|
-
return response.attestation;
|
|
194
|
-
}
|
|
195
|
-
if (response.status === 'error') {
|
|
196
|
-
throw new SolanaBridgeError('ATTESTATION_ERROR', `Attestation failed: ${response.error ?? 'unknown'}. Hash: ${messageHash}`);
|
|
197
|
-
}
|
|
198
|
-
await this.sleep(ATTESTATION_POLL_INTERVAL_MS);
|
|
199
|
-
}
|
|
200
|
-
throw new SolanaBridgeError('ATTESTATION_TIMEOUT', `Attestation timeout after ${MAX_ATTESTATION_POLLS} polls. Hash: ${messageHash}`);
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Receive a CCTP message on Solana (EVM→Solana destination).
|
|
204
|
-
* Calls receiveMessage on the Solana MessageTransmitterV2 program.
|
|
205
|
-
*
|
|
206
|
-
* @param message - CCTP message bytes from EVM burn tx
|
|
207
|
-
* @param attestation - Circle attestation bytes
|
|
208
|
-
* @param recipientUsdcAccount - Solana USDC ATA for recipient (must exist)
|
|
209
|
-
*/
|
|
210
|
-
async receiveMessage(params) {
|
|
211
|
-
const { message, attestation, recipientUsdcAccount } = params;
|
|
212
|
-
const messageBytes = typeof message === 'string'
|
|
213
|
-
? Buffer.from(message.startsWith('0x') ? message.slice(2) : message, 'hex')
|
|
214
|
-
: Buffer.from(message);
|
|
215
|
-
const attestationBytes = Buffer.from(attestation.startsWith('0x') ? attestation.slice(2) : attestation, 'hex');
|
|
216
|
-
const recipientAta = recipientUsdcAccount
|
|
217
|
-
? new PublicKey(recipientUsdcAccount)
|
|
218
|
-
: await getAssociatedTokenAddress(this.usdcMint, this.payer.publicKey);
|
|
219
|
-
// Derive PDAs needed for receiveMessage
|
|
220
|
-
const [messageTransmitterStatePda] = PublicKey.findProgramAddressSync([Buffer.from('message_transmitter')], this.messageTransmitterProgram);
|
|
221
|
-
const [usedNoncesPda] = PublicKey.findProgramAddressSync([Buffer.from('used_nonces'), messageBytes.slice(0, 32)], this.messageTransmitterProgram);
|
|
222
|
-
const [tokenMessengerPda] = PublicKey.findProgramAddressSync([Buffer.from('token_messenger')], this.tokenMessengerMinterProgram);
|
|
223
|
-
// Parse source domain from message (bytes 4-7)
|
|
224
|
-
const sourceDomain = messageBytes.readUInt32BE(4);
|
|
225
|
-
const [remoteTokenMessengerPda] = PublicKey.findProgramAddressSync([
|
|
226
|
-
Buffer.from('remote_token_messenger'),
|
|
227
|
-
Buffer.from(new Uint32Array([sourceDomain]).buffer).reverse(),
|
|
228
|
-
], this.tokenMessengerMinterProgram);
|
|
229
|
-
const [tokenMinterPda] = PublicKey.findProgramAddressSync([Buffer.from('token_minter')], this.tokenMessengerMinterProgram);
|
|
230
|
-
const [localTokenPda] = PublicKey.findProgramAddressSync([Buffer.from('local_token'), this.usdcMint.toBuffer()], this.tokenMessengerMinterProgram);
|
|
231
|
-
// Encode receiveMessage instruction
|
|
232
|
-
// Anchor discriminator for receiveMessage
|
|
233
|
-
const discriminator = Buffer.from([102, 251, 20, 187, 65, 75, 37, 57]);
|
|
234
|
-
const msgLenBuf = Buffer.alloc(4);
|
|
235
|
-
msgLenBuf.writeUInt32LE(messageBytes.length, 0);
|
|
236
|
-
const attLenBuf = Buffer.alloc(4);
|
|
237
|
-
attLenBuf.writeUInt32LE(attestationBytes.length, 0);
|
|
238
|
-
const instructionData = Buffer.concat([
|
|
239
|
-
discriminator,
|
|
240
|
-
msgLenBuf,
|
|
241
|
-
messageBytes,
|
|
242
|
-
attLenBuf,
|
|
243
|
-
attestationBytes,
|
|
244
|
-
]);
|
|
245
|
-
const receiveInstruction = new TransactionInstruction({
|
|
246
|
-
programId: this.messageTransmitterProgram,
|
|
247
|
-
keys: [
|
|
248
|
-
{ pubkey: this.payer.publicKey, isSigner: true, isWritable: true },
|
|
249
|
-
{ pubkey: messageTransmitterStatePda, isSigner: false, isWritable: true },
|
|
250
|
-
{ pubkey: usedNoncesPda, isSigner: false, isWritable: true },
|
|
251
|
-
{ pubkey: this.tokenMessengerMinterProgram, isSigner: false, isWritable: false },
|
|
252
|
-
// Remaining accounts for TokenMessengerMinterV2 CPI:
|
|
253
|
-
{ pubkey: tokenMessengerPda, isSigner: false, isWritable: false },
|
|
254
|
-
{ pubkey: remoteTokenMessengerPda, isSigner: false, isWritable: false },
|
|
255
|
-
{ pubkey: tokenMinterPda, isSigner: false, isWritable: true },
|
|
256
|
-
{ pubkey: localTokenPda, isSigner: false, isWritable: true },
|
|
257
|
-
{ pubkey: recipientAta, isSigner: false, isWritable: true },
|
|
258
|
-
{ pubkey: this.usdcMint, isSigner: false, isWritable: true },
|
|
259
|
-
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
260
|
-
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
261
|
-
],
|
|
262
|
-
data: instructionData,
|
|
263
|
-
});
|
|
264
|
-
const tx = new Transaction().add(receiveInstruction);
|
|
265
|
-
const { blockhash } = await this.connection.getLatestBlockhash();
|
|
266
|
-
tx.recentBlockhash = blockhash;
|
|
267
|
-
tx.feePayer = this.payer.publicKey;
|
|
268
|
-
let signature;
|
|
269
|
-
try {
|
|
270
|
-
signature = await this.connection.sendTransaction(tx, [this.payer]);
|
|
271
|
-
await this.connection.confirmTransaction(signature, 'confirmed');
|
|
272
|
-
}
|
|
273
|
-
catch (err) {
|
|
274
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
275
|
-
throw new SolanaBridgeError('MINT_FAILED', `Solana receiveMessage failed: ${msg}. ` +
|
|
276
|
-
`Ensure recipient USDC ATA exists and wallet has SOL for fees.`);
|
|
277
|
-
}
|
|
278
|
-
return signature;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Ensure the payer's USDC ATA exists (create it if not).
|
|
282
|
-
*/
|
|
283
|
-
async ensureUsdcAta(owner) {
|
|
284
|
-
const ownerKey = owner ?? this.payer.publicKey;
|
|
285
|
-
const ata = await getAssociatedTokenAddress(this.usdcMint, ownerKey);
|
|
286
|
-
const accountInfo = await this.connection.getAccountInfo(ata);
|
|
287
|
-
if (!accountInfo) {
|
|
288
|
-
const createAtaIx = createAssociatedTokenAccountInstruction(this.payer.publicKey, ata, ownerKey, this.usdcMint);
|
|
289
|
-
const tx = new Transaction().add(createAtaIx);
|
|
290
|
-
const { blockhash } = await this.connection.getLatestBlockhash();
|
|
291
|
-
tx.recentBlockhash = blockhash;
|
|
292
|
-
tx.feePayer = this.payer.publicKey;
|
|
293
|
-
const sig = await this.connection.sendTransaction(tx, [this.payer]);
|
|
294
|
-
await this.connection.confirmTransaction(sig, 'confirmed');
|
|
295
|
-
}
|
|
296
|
-
return ata;
|
|
297
|
-
}
|
|
298
|
-
// ─── Internal Helpers ───
|
|
299
|
-
/**
|
|
300
|
-
* Fetch the MessageSent account data and extract message bytes.
|
|
301
|
-
* On Solana, CCTP messages are stored in PDA accounts (not events).
|
|
302
|
-
*/
|
|
303
|
-
async fetchMessageSent(messageSentAccount) {
|
|
304
|
-
// Give the transaction time to finalize before fetching
|
|
305
|
-
await this.sleep(2000);
|
|
306
|
-
const accountInfo = await this.connection.getAccountInfo(messageSentAccount, 'confirmed');
|
|
307
|
-
if (!accountInfo) {
|
|
308
|
-
throw new SolanaBridgeError('BURN_FAILED', `MessageSent account not found: ${messageSentAccount.toString()}. ` +
|
|
309
|
-
`Transaction may not have been confirmed.`);
|
|
310
|
-
}
|
|
311
|
-
// MessageSent account layout: [discriminator(8)] [message_len(4)] [message_bytes(N)]
|
|
312
|
-
const data = accountInfo.data;
|
|
313
|
-
if (data.length < 12) {
|
|
314
|
-
throw new SolanaBridgeError('BURN_FAILED', `MessageSent account data too short: ${data.length} bytes`);
|
|
315
|
-
}
|
|
316
|
-
const messageLength = data.readUInt32LE(8);
|
|
317
|
-
const messageBytes = data.slice(12, 12 + messageLength);
|
|
318
|
-
const messageBytesHex = '0x' + Buffer.from(messageBytes).toString('hex');
|
|
319
|
-
// Compute keccak256 of message bytes for IRIS API lookup
|
|
320
|
-
// Use a simple implementation since we can't import viem here easily
|
|
321
|
-
const { keccak256 } = await import('viem');
|
|
322
|
-
const messageHash = keccak256(messageBytesHex);
|
|
323
|
-
// Extract nonce (bytes 12-19 of message, after version[4] + srcDomain[4] + dstDomain[4])
|
|
324
|
-
const nonceBytesHex = Buffer.from(messageBytes).toString('hex').slice(24, 40);
|
|
325
|
-
const nonce = BigInt('0x' + nonceBytesHex);
|
|
326
|
-
return { messageBytes: messageBytesHex, messageHash, nonce };
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Convert an EVM hex address to a 32-byte Buffer for Solana mintRecipient.
|
|
330
|
-
* Per Circle spec: pad the EVM address on the left with 12 zero bytes.
|
|
331
|
-
*/
|
|
332
|
-
evmAddressToBytes32(evmAddress) {
|
|
333
|
-
const clean = evmAddress.startsWith('0x') ? evmAddress.slice(2) : evmAddress;
|
|
334
|
-
const buf = Buffer.alloc(32, 0);
|
|
335
|
-
Buffer.from(clean, 'hex').copy(buf, 12); // 12 zero bytes + 20 address bytes
|
|
336
|
-
return buf;
|
|
337
|
-
}
|
|
338
|
-
sleep(ms) {
|
|
339
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
// ─── SolanaBridgeError ───
|
|
343
|
-
export class SolanaBridgeError extends Error {
|
|
344
|
-
constructor(code, message) {
|
|
345
|
-
super(`[SolanaCCTPBridge:${code}] ${message}`);
|
|
346
|
-
this.code = code;
|
|
347
|
-
this.name = 'SolanaBridgeError';
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
// Re-export constants for convenience
|
|
351
|
-
export { SOLANA_CCTP_PROGRAMS, SOLANA_USDC_MINT, SOLANA_CCTP_DOMAIN, };
|
|
352
|
-
//# sourceMappingURL=bridge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/solana/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/solana/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { SolanaWallet } from './wallet.js';
|
|
2
|
-
export { JupiterSwapClient, attachJupiterSwap, JUPITER_PLATFORM_FEE_BPS, JUPITER_DEFAULT_SLIPPAGE_BPS } from './swap.js';
|
|
3
|
-
export { SolanaX402Client, createSolanaX402Client, SOLANA_NETWORK_USDC } from './x402.js';
|
|
4
|
-
export type { SolanaX402Network } from './x402.js';
|
|
5
|
-
export { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT, SOL_NATIVE_MINT, } from './types.js';
|
|
6
|
-
export type { SolanaWalletConfig, SolanaTransferParams, SolanaCommitment, JupiterQuote, JupiterRoutePlan, JupiterSwapParams, JupiterSwapResult, SolanaX402PaymentProof, SolanaX402Requirements, } from './types.js';
|
|
7
|
-
export type { JupiterSwapConfig } from './swap.js';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/solana/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC1F,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/solana/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] Solana module barrel — export all Solana types and classes.
|
|
2
|
-
export { SolanaWallet } from './wallet.js';
|
|
3
|
-
export { JupiterSwapClient, attachJupiterSwap, JUPITER_PLATFORM_FEE_BPS, JUPITER_DEFAULT_SLIPPAGE_BPS } from './swap.js';
|
|
4
|
-
export { SolanaX402Client, createSolanaX402Client, SOLANA_NETWORK_USDC } from './x402.js';
|
|
5
|
-
export { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT, SOL_NATIVE_MINT, } from './types.js';
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
package/dist/solana/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/solana/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAG1F,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/solana/swap.d.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { JupiterQuote, JupiterSwapParams, JupiterSwapResult } from './types.js';
|
|
2
|
-
import { SOLANA_USDC_MINT, SOL_NATIVE_MINT } from './types.js';
|
|
3
|
-
import { SolanaWallet } from './wallet.js';
|
|
4
|
-
/** Platform fee: 0.875% (same as EVM SwapModule) in basis points */
|
|
5
|
-
export declare const JUPITER_PLATFORM_FEE_BPS = 88;
|
|
6
|
-
/** Default slippage: 50 bps = 0.5% */
|
|
7
|
-
export declare const JUPITER_DEFAULT_SLIPPAGE_BPS = 50;
|
|
8
|
-
/**
|
|
9
|
-
* Configuration for JupiterSwapClient.
|
|
10
|
-
*/
|
|
11
|
-
export interface JupiterSwapConfig {
|
|
12
|
-
/** SolanaWallet to use for signing and broadcasting swaps */
|
|
13
|
-
wallet: SolanaWallet;
|
|
14
|
-
/** Platform fee wallet address (receives 0.875% fee). Optional. */
|
|
15
|
-
feeWallet?: string;
|
|
16
|
-
/** Override Jupiter API base URL (useful for testing/self-hosted) */
|
|
17
|
-
apiBase?: string;
|
|
18
|
-
/** Default slippage in bps (default: 50) */
|
|
19
|
-
defaultSlippageBps?: number;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* JupiterSwapClient — wraps Jupiter Aggregator V6 for best-route token swaps on Solana.
|
|
23
|
-
*
|
|
24
|
-
* Features:
|
|
25
|
-
* - Best-route quote from Jupiter
|
|
26
|
-
* - 0.875% platform fee (matches EVM SwapModule)
|
|
27
|
-
* - SOL ↔ USDC default routes
|
|
28
|
-
* - Full slippage control
|
|
29
|
-
* - No real RPC calls in mocked tests
|
|
30
|
-
*/
|
|
31
|
-
export declare class JupiterSwapClient {
|
|
32
|
-
private wallet;
|
|
33
|
-
private feeWallet;
|
|
34
|
-
private apiBase;
|
|
35
|
-
private defaultSlippageBps;
|
|
36
|
-
constructor(config: JupiterSwapConfig);
|
|
37
|
-
/**
|
|
38
|
-
* Get the best-route quote from Jupiter.
|
|
39
|
-
*
|
|
40
|
-
* @param inputMint - Input token mint (use SOL_NATIVE_MINT for native SOL)
|
|
41
|
-
* @param outputMint - Output token mint
|
|
42
|
-
* @param amount - Input amount in token base units
|
|
43
|
-
* @param slippageBps - Slippage tolerance in bps (default: 50)
|
|
44
|
-
* @returns JupiterQuote with route and output amount
|
|
45
|
-
*/
|
|
46
|
-
getQuote(inputMint: string, outputMint: string, amount: bigint, slippageBps?: number): Promise<JupiterQuote>;
|
|
47
|
-
/**
|
|
48
|
-
* Execute a swap via Jupiter.
|
|
49
|
-
*
|
|
50
|
-
* Flow:
|
|
51
|
-
* 1. Get best-route quote from Jupiter
|
|
52
|
-
* 2. Request swap transaction from Jupiter
|
|
53
|
-
* 3. Deserialize + sign + broadcast via SolanaWallet
|
|
54
|
-
*
|
|
55
|
-
* @returns JupiterSwapResult with signature and amounts
|
|
56
|
-
*/
|
|
57
|
-
swap(params: JupiterSwapParams): Promise<JupiterSwapResult>;
|
|
58
|
-
/**
|
|
59
|
-
* Convenience: Swap SOL → USDC.
|
|
60
|
-
*/
|
|
61
|
-
swapSolToUsdc(lamports: bigint, slippageBps?: number): Promise<JupiterSwapResult>;
|
|
62
|
-
/**
|
|
63
|
-
* Convenience: Swap USDC → SOL.
|
|
64
|
-
*/
|
|
65
|
-
swapUsdcToSol(microUsdc: bigint, slippageBps?: number): Promise<JupiterSwapResult>;
|
|
66
|
-
/**
|
|
67
|
-
* Calculate the platform fee for a given input amount.
|
|
68
|
-
* Mirrors EVM SwapModule's calcProtocolFee() for consistency.
|
|
69
|
-
*
|
|
70
|
-
* @param amount - Input amount in token base units
|
|
71
|
-
* @returns Fee amount in token base units (floored)
|
|
72
|
-
*/
|
|
73
|
-
calcPlatformFee(amount: bigint): bigint;
|
|
74
|
-
/**
|
|
75
|
-
* Sign a versioned transaction (Jupiter uses VersionedTransaction internally).
|
|
76
|
-
* Routes through the wallet's keypair via a controlled interface.
|
|
77
|
-
*/
|
|
78
|
-
private _signVersionedTx;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Factory: create a JupiterSwapClient attached to an existing SolanaWallet.
|
|
82
|
-
*/
|
|
83
|
-
export declare function attachJupiterSwap(wallet: SolanaWallet, options?: Omit<JupiterSwapConfig, 'wallet'>): JupiterSwapClient;
|
|
84
|
-
export { SOLANA_USDC_MINT, SOL_NATIVE_MINT };
|
|
85
|
-
//# sourceMappingURL=swap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/solana/swap.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,sCAAsC;AACtC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,EAAE,iBAAiB;IAOrC;;;;;;;;OAQG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC;IA2BxB;;;;;;;;;OASG;IACG,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiEjE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IASvF;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IASxF;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIvC;;;OAGG;YACW,gBAAgB;CAW/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAM,GAC9C,iBAAiB,CAEnB;AAGD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
|