agentwallet-sdk 3.3.0 → 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 -136
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -59
- 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 +1 -4
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +2 -16
- 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/spend-guard/index.d.ts +0 -125
- package/dist/spend-guard/index.d.ts.map +0 -1
- package/dist/spend-guard/index.js +0 -150
- package/dist/spend-guard/index.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/yield/types.d.ts
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Yield Vault Module — Types
|
|
3
|
-
*
|
|
4
|
-
* ⚠️ PRODUCTION NOTICE:
|
|
5
|
-
* buildDepositTx / buildWithdrawTx generate calldata ONLY.
|
|
6
|
-
* The agent signs and sends the transaction — no private keys are held server-side.
|
|
7
|
-
*
|
|
8
|
-
* The Yield Vault puts idle agent capital to work across two categories:
|
|
9
|
-
* 1. DeFi Vaults — Aave V3, Compound V3, Morpho Blue (higher APY, smart contract risk)
|
|
10
|
-
* 2. RWA Tokens — Tokenized T-bills: BUIDL, OUSG, USDY, USYC, wUSTB
|
|
11
|
-
*
|
|
12
|
-
* ⚠️ BUIDL WARNING: BlackRock BUIDL requires a $1,000,000 minimum deposit AND KYC.
|
|
13
|
-
* Do not use BUIDL for general agent capital deployment. Use USDY or USYC instead
|
|
14
|
-
* (no KYC, accessible minimums, ~5% APY).
|
|
15
|
-
*
|
|
16
|
-
* KYC requirements by protocol:
|
|
17
|
-
* - BUIDL (BlackRock): KYC required, $1M minimum — institutional only
|
|
18
|
-
* - OUSG (Ondo): KYC required, lower minimum
|
|
19
|
-
* - USDY (Ondo): NO KYC, most accessible RWA token
|
|
20
|
-
* - USYC (Hashnote): NO KYC, competitive APY
|
|
21
|
-
* - wUSTB (Superstate): NO KYC, Ethereum-native
|
|
22
|
-
*/
|
|
23
|
-
/** Supported yield protocols */
|
|
24
|
-
export type YieldProtocol = 'aave-v3' | 'compound-v3' | 'morpho-blue' | 'buidl' | 'ousg' | 'usdy' | 'usyc' | 'wustb';
|
|
25
|
-
export type YieldCategory = 'defi' | 'rwa';
|
|
26
|
-
/** An active yield position held by the agent */
|
|
27
|
-
export interface YieldPosition {
|
|
28
|
-
protocol: YieldProtocol;
|
|
29
|
-
category: YieldCategory;
|
|
30
|
-
/** Underlying deposited token (USDC, USDT, DAI, etc.) */
|
|
31
|
-
token: string;
|
|
32
|
-
chain: string;
|
|
33
|
-
/** Current deposited amount in underlying token units */
|
|
34
|
-
depositedAmount: bigint;
|
|
35
|
-
/** Deposit timestamp (unix ms) */
|
|
36
|
-
depositedAt: number;
|
|
37
|
-
/** Current APY as a decimal (e.g., 0.051 = 5.1%) */
|
|
38
|
-
currentApy: number;
|
|
39
|
-
/** Accrued yield since deposit (estimated) */
|
|
40
|
-
accruedYield: bigint;
|
|
41
|
-
/** Protocol-specific position ID or address */
|
|
42
|
-
positionId?: string;
|
|
43
|
-
}
|
|
44
|
-
/** Current rate data for a yield protocol on a specific chain */
|
|
45
|
-
export interface YieldRate {
|
|
46
|
-
protocol: YieldProtocol;
|
|
47
|
-
category: YieldCategory;
|
|
48
|
-
chain: string;
|
|
49
|
-
token: string;
|
|
50
|
-
/** Current APY as a decimal (e.g., 0.051 = 5.1%) */
|
|
51
|
-
apy: number;
|
|
52
|
-
/** Total value locked — signals liquidity depth */
|
|
53
|
-
tvlUsd: number;
|
|
54
|
-
/** Risk score 0–100 (lower = safer) */
|
|
55
|
-
riskScore: number;
|
|
56
|
-
/**
|
|
57
|
-
* Minimum deposit in USD.
|
|
58
|
-
* ⚠️ BUIDL: $1,000,000 minimum — institutional only.
|
|
59
|
-
* USDY/USYC: much lower minimums, agent-friendly.
|
|
60
|
-
*/
|
|
61
|
-
minDepositUsd?: number;
|
|
62
|
-
/**
|
|
63
|
-
* KYC required to access this protocol?
|
|
64
|
-
* BUIDL + OUSG = true (skip for autonomous agents).
|
|
65
|
-
* USDY + USYC + wUSTB = false (use these instead).
|
|
66
|
-
*/
|
|
67
|
-
kycRequired?: boolean;
|
|
68
|
-
/** How long withdrawal takes (ms). 0 = instant. */
|
|
69
|
-
withdrawalDelayMs?: number;
|
|
70
|
-
/** Unix ms when this rate was fetched */
|
|
71
|
-
fetchedAt: number;
|
|
72
|
-
}
|
|
73
|
-
/** A yield rotation opportunity (current position vs best available rate) */
|
|
74
|
-
export interface YieldOpportunity {
|
|
75
|
-
/** Current position (null if no capital deployed) */
|
|
76
|
-
current: YieldPosition | null;
|
|
77
|
-
/** Best available rate found in the scan */
|
|
78
|
-
best: YieldRate;
|
|
79
|
-
/** APY improvement if rotating (basis points; e.g., 30 = 0.30%) */
|
|
80
|
-
apyImprovementBps: number;
|
|
81
|
-
/** Estimated annual gain in USD on the given amount */
|
|
82
|
-
estimatedAnnualGainUsd: number;
|
|
83
|
-
/** Cost to rotate (gas + bridge fees if cross-chain) */
|
|
84
|
-
rotationCostUsd: number;
|
|
85
|
-
/** Net annual gain after rotation costs */
|
|
86
|
-
netAnnualGainUsd: number;
|
|
87
|
-
/** Worth rotating? true when improvement >= threshold AND net gain > 0 */
|
|
88
|
-
viable: boolean;
|
|
89
|
-
}
|
|
90
|
-
/** Configuration for the Yield Vault */
|
|
91
|
-
export interface YieldVaultConfig {
|
|
92
|
-
enabled: boolean;
|
|
93
|
-
/** Chains to scan (default: ['ethereum', 'base', 'arbitrum']) */
|
|
94
|
-
chains?: string[];
|
|
95
|
-
/** Tokens to include (default: ['USDC', 'USDT']) */
|
|
96
|
-
tokens?: string[];
|
|
97
|
-
/** Include RWA protocols in scan (default: true) */
|
|
98
|
-
includeRWA?: boolean;
|
|
99
|
-
/** Minimum APY improvement to trigger rotation in bps (default: 25 = 0.25%) */
|
|
100
|
-
minRotationImprovementBps?: number;
|
|
101
|
-
/** Minimum idle time before auto-deposit in ms (default: 86400000 = 24h) */
|
|
102
|
-
minIdleMs?: number;
|
|
103
|
-
/** Maximum single deposit in USD */
|
|
104
|
-
maxDepositUsd?: number;
|
|
105
|
-
/**
|
|
106
|
-
* Skip KYC-required protocols (default: true).
|
|
107
|
-
* When true: BUIDL and OUSG are excluded. USDY, USYC, wUSTB remain.
|
|
108
|
-
* Recommended for autonomous agents — KYC requires human verification.
|
|
109
|
-
*/
|
|
110
|
-
skipKYCRequired?: boolean;
|
|
111
|
-
}
|
|
112
|
-
/** Result of a deposit operation */
|
|
113
|
-
export interface DepositResult {
|
|
114
|
-
success: boolean;
|
|
115
|
-
protocol: YieldProtocol;
|
|
116
|
-
chain: string;
|
|
117
|
-
token: string;
|
|
118
|
-
amountDeposited: bigint;
|
|
119
|
-
txHash?: string;
|
|
120
|
-
estimatedApy: number;
|
|
121
|
-
error?: string;
|
|
122
|
-
}
|
|
123
|
-
/** Result of a withdrawal operation */
|
|
124
|
-
export interface WithdrawResult {
|
|
125
|
-
success: boolean;
|
|
126
|
-
protocol: YieldProtocol;
|
|
127
|
-
chain: string;
|
|
128
|
-
token: string;
|
|
129
|
-
amountWithdrawn: bigint;
|
|
130
|
-
yieldEarned: bigint;
|
|
131
|
-
txHash?: string;
|
|
132
|
-
error?: string;
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/yield/types.ts"],"names":[],"mappings":"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"}
|
package/dist/yield/types.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Yield Vault Module — Types
|
|
3
|
-
*
|
|
4
|
-
* ⚠️ PRODUCTION NOTICE:
|
|
5
|
-
* buildDepositTx / buildWithdrawTx generate calldata ONLY.
|
|
6
|
-
* The agent signs and sends the transaction — no private keys are held server-side.
|
|
7
|
-
*
|
|
8
|
-
* The Yield Vault puts idle agent capital to work across two categories:
|
|
9
|
-
* 1. DeFi Vaults — Aave V3, Compound V3, Morpho Blue (higher APY, smart contract risk)
|
|
10
|
-
* 2. RWA Tokens — Tokenized T-bills: BUIDL, OUSG, USDY, USYC, wUSTB
|
|
11
|
-
*
|
|
12
|
-
* ⚠️ BUIDL WARNING: BlackRock BUIDL requires a $1,000,000 minimum deposit AND KYC.
|
|
13
|
-
* Do not use BUIDL for general agent capital deployment. Use USDY or USYC instead
|
|
14
|
-
* (no KYC, accessible minimums, ~5% APY).
|
|
15
|
-
*
|
|
16
|
-
* KYC requirements by protocol:
|
|
17
|
-
* - BUIDL (BlackRock): KYC required, $1M minimum — institutional only
|
|
18
|
-
* - OUSG (Ondo): KYC required, lower minimum
|
|
19
|
-
* - USDY (Ondo): NO KYC, most accessible RWA token
|
|
20
|
-
* - USYC (Hashnote): NO KYC, competitive APY
|
|
21
|
-
* - wUSTB (Superstate): NO KYC, Ethereum-native
|
|
22
|
-
*/
|
|
23
|
-
export {};
|
|
24
|
-
//# sourceMappingURL=types.js.map
|
package/dist/yield/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/yield/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
package/dist/yield/vault.d.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Yield Vault Engine
|
|
3
|
-
*
|
|
4
|
-
* Manages agent capital deployment across DeFi vaults and RWA tokens.
|
|
5
|
-
* Scans for the best available yield, tracks positions, and generates
|
|
6
|
-
* calldata for deposit/withdrawal transactions.
|
|
7
|
-
*
|
|
8
|
-
* ⚠️ CALLDATA ONLY: buildDepositTx / buildWithdrawTx return unsigned calldata.
|
|
9
|
-
* The agent signs and sends — no private keys are held by this module.
|
|
10
|
-
*
|
|
11
|
-
* Supported protocols for on-chain tx building:
|
|
12
|
-
* ✅ Aave V3 — supply() / withdraw()
|
|
13
|
-
* ✅ Compound V3 — supply() / withdraw()
|
|
14
|
-
* ❌ RWA tokens — use their native interfaces (BUIDL/OUSG/USDY/USYC/wUSTB)
|
|
15
|
-
*
|
|
16
|
-
* ⚠️ BUIDL: $1,000,000 minimum deposit. Do not use for general agent capital.
|
|
17
|
-
*/
|
|
18
|
-
import type { YieldProtocol, YieldPosition, YieldOpportunity, YieldVaultConfig } from './types.js';
|
|
19
|
-
export declare class YieldVault {
|
|
20
|
-
private rateFetcher;
|
|
21
|
-
private positions;
|
|
22
|
-
readonly config: Required<YieldVaultConfig>;
|
|
23
|
-
constructor(config: YieldVaultConfig);
|
|
24
|
-
/**
|
|
25
|
-
* Scan all protocols and chains for the best available yield.
|
|
26
|
-
*
|
|
27
|
-
* Returns opportunities sorted by netAnnualGainUsd descending.
|
|
28
|
-
* Only includes rates with positive APY improvement vs current position.
|
|
29
|
-
*
|
|
30
|
-
* @param params.token - Underlying token to scan for (e.g. 'USDC')
|
|
31
|
-
* @param params.amountUsd - Amount in USD to use for gain calculations
|
|
32
|
-
* @param params.currentPosition - Active position (if any) to compare against
|
|
33
|
-
*/
|
|
34
|
-
scan(params: {
|
|
35
|
-
token: string;
|
|
36
|
-
amountUsd: number;
|
|
37
|
-
currentPosition?: YieldPosition;
|
|
38
|
-
}): Promise<YieldOpportunity[]>;
|
|
39
|
-
/**
|
|
40
|
-
* Build a deposit transaction for a supported protocol.
|
|
41
|
-
*
|
|
42
|
-
* Returns unsigned calldata — the agent signs and broadcasts.
|
|
43
|
-
* ERC20 deposits: value is always 0n (approve first, then supply).
|
|
44
|
-
*
|
|
45
|
-
* Supported: aave-v3, compound-v3
|
|
46
|
-
* Unsupported (use native interface): buidl, ousg, usdy, usyc, wustb
|
|
47
|
-
*
|
|
48
|
-
* @throws Error for unsupported protocols
|
|
49
|
-
*/
|
|
50
|
-
buildDepositTx(params: {
|
|
51
|
-
protocol: YieldProtocol;
|
|
52
|
-
token: string;
|
|
53
|
-
amount: bigint;
|
|
54
|
-
chain: string;
|
|
55
|
-
walletAddress: string;
|
|
56
|
-
}): {
|
|
57
|
-
to: string;
|
|
58
|
-
data: string;
|
|
59
|
-
value: bigint;
|
|
60
|
-
gasEstimate: bigint;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Build a withdrawal transaction for a supported protocol.
|
|
64
|
-
*
|
|
65
|
-
* Returns unsigned calldata — the agent signs and broadcasts.
|
|
66
|
-
* Pass ethers.MaxUint256 (2^256-1) to withdraw the full position.
|
|
67
|
-
*
|
|
68
|
-
* Supported: aave-v3, compound-v3
|
|
69
|
-
*
|
|
70
|
-
* @throws Error for unsupported protocols
|
|
71
|
-
*/
|
|
72
|
-
buildWithdrawTx(params: {
|
|
73
|
-
protocol: YieldProtocol;
|
|
74
|
-
token: string;
|
|
75
|
-
amount: bigint;
|
|
76
|
-
chain: string;
|
|
77
|
-
walletAddress: string;
|
|
78
|
-
}): {
|
|
79
|
-
to: string;
|
|
80
|
-
data: string;
|
|
81
|
-
value: bigint;
|
|
82
|
-
gasEstimate: bigint;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* Estimate USD cost to rotate capital from one position to another.
|
|
86
|
-
*
|
|
87
|
-
* Same-chain rotation: ~$3 gas (single approve + supply tx)
|
|
88
|
-
* Cross-chain rotation: CCTP bridge fee (0.1% of amount) + gas both sides (~$5)
|
|
89
|
-
*
|
|
90
|
-
* Note: For small amounts, cross-chain rotation may not be worth it.
|
|
91
|
-
*/
|
|
92
|
-
estimateRotationCost(fromChain: string | undefined, toChain: string, amountUsd: number): number;
|
|
93
|
-
/**
|
|
94
|
-
* Track a position for yield accrual estimation.
|
|
95
|
-
* Keyed by protocol:chain:token — one position per slot.
|
|
96
|
-
*/
|
|
97
|
-
trackPosition(position: YieldPosition): void;
|
|
98
|
-
/** Get all tracked positions */
|
|
99
|
-
getPositions(): YieldPosition[];
|
|
100
|
-
/**
|
|
101
|
-
* Estimate yield accrued since deposit.
|
|
102
|
-
*
|
|
103
|
-
* Uses simple linear approximation (accurate for short periods).
|
|
104
|
-
* For compound interest over long periods, use protocol's native accrual.
|
|
105
|
-
*/
|
|
106
|
-
estimateAccruedYield(position: YieldPosition): bigint;
|
|
107
|
-
private buildAaveDepositTx;
|
|
108
|
-
private buildAaveWithdrawTx;
|
|
109
|
-
private buildCompoundDepositTx;
|
|
110
|
-
private buildCompoundWithdrawTx;
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/yield/vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA6DpB,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,SAAS,CAAyC;IAC1D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAEhC,MAAM,EAAE,gBAAgB;IAKpC;;;;;;;;;OASG;IACG,IAAI,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,aAAa,CAAC;KACjC,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgC/B;;;;;;;;;;OAUG;IACH,cAAc,CAAC,MAAM,EAAE;QACrB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAepE;;;;;;;;;OASG;IACH,eAAe,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAapE;;;;;;;OAOG;IACH,oBAAoB,CAClB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM;IAST;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK5C,gCAAgC;IAChC,YAAY,IAAI,aAAa,EAAE;IAI/B;;;;;OAKG;IACH,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM;IASrD,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,uBAAuB;CAsBhC"}
|
package/dist/yield/vault.js
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Yield Vault Engine
|
|
3
|
-
*
|
|
4
|
-
* Manages agent capital deployment across DeFi vaults and RWA tokens.
|
|
5
|
-
* Scans for the best available yield, tracks positions, and generates
|
|
6
|
-
* calldata for deposit/withdrawal transactions.
|
|
7
|
-
*
|
|
8
|
-
* ⚠️ CALLDATA ONLY: buildDepositTx / buildWithdrawTx return unsigned calldata.
|
|
9
|
-
* The agent signs and sends — no private keys are held by this module.
|
|
10
|
-
*
|
|
11
|
-
* Supported protocols for on-chain tx building:
|
|
12
|
-
* ✅ Aave V3 — supply() / withdraw()
|
|
13
|
-
* ✅ Compound V3 — supply() / withdraw()
|
|
14
|
-
* ❌ RWA tokens — use their native interfaces (BUIDL/OUSG/USDY/USYC/wUSTB)
|
|
15
|
-
*
|
|
16
|
-
* ⚠️ BUIDL: $1,000,000 minimum deposit. Do not use for general agent capital.
|
|
17
|
-
*/
|
|
18
|
-
import { ethers } from 'ethers';
|
|
19
|
-
import { YieldRateFetcher } from './rates.js';
|
|
20
|
-
// ─── ABI Fragments ───────────────────────────────────────────────────────────
|
|
21
|
-
const AAVE_POOL_ABI = [
|
|
22
|
-
'function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external',
|
|
23
|
-
'function withdraw(address asset, uint256 amount, address to) external returns (uint256)',
|
|
24
|
-
];
|
|
25
|
-
const COMPOUND_COMET_ABI = [
|
|
26
|
-
'function supply(address asset, uint256 amount) external',
|
|
27
|
-
'function withdraw(address asset, uint256 amount) external',
|
|
28
|
-
];
|
|
29
|
-
// Protocol pool addresses (same as rates.ts)
|
|
30
|
-
const AAVE_POOL_ADDRESSES = {
|
|
31
|
-
ethereum: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
|
|
32
|
-
base: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
|
|
33
|
-
arbitrum: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
|
|
34
|
-
};
|
|
35
|
-
const COMPOUND_COMET_ADDRESSES = {
|
|
36
|
-
ethereum: '0xc3d688B66703497DAA19211EEdff47f25384cdc3',
|
|
37
|
-
base: '0xb125E6687d4313864e53df431d5425969c15Eb2',
|
|
38
|
-
arbitrum: '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf',
|
|
39
|
-
};
|
|
40
|
-
// Token addresses
|
|
41
|
-
const USDC_ADDRESSES = {
|
|
42
|
-
ethereum: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
43
|
-
base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
44
|
-
arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
45
|
-
};
|
|
46
|
-
const USDT_ADDRESSES = {
|
|
47
|
-
ethereum: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
48
|
-
arbitrum: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',
|
|
49
|
-
};
|
|
50
|
-
function getTokenAddress(token, chain) {
|
|
51
|
-
const upper = token.toUpperCase();
|
|
52
|
-
if (upper === 'USDC')
|
|
53
|
-
return USDC_ADDRESSES[chain] ?? '0x';
|
|
54
|
-
if (upper === 'USDT')
|
|
55
|
-
return USDT_ADDRESSES[chain] ?? '0x';
|
|
56
|
-
return '0x';
|
|
57
|
-
}
|
|
58
|
-
// ─── Default Config ───────────────────────────────────────────────────────────
|
|
59
|
-
const DEFAULT_CONFIG = {
|
|
60
|
-
enabled: true,
|
|
61
|
-
chains: ['ethereum', 'base', 'arbitrum'],
|
|
62
|
-
tokens: ['USDC', 'USDT'],
|
|
63
|
-
includeRWA: true,
|
|
64
|
-
minRotationImprovementBps: 25,
|
|
65
|
-
minIdleMs: 24 * 60 * 60 * 1000, // 24 hours
|
|
66
|
-
maxDepositUsd: Infinity,
|
|
67
|
-
skipKYCRequired: true,
|
|
68
|
-
};
|
|
69
|
-
// ─── Yield Vault ─────────────────────────────────────────────────────────────
|
|
70
|
-
export class YieldVault {
|
|
71
|
-
constructor(config) {
|
|
72
|
-
this.positions = new Map();
|
|
73
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
74
|
-
this.rateFetcher = new YieldRateFetcher();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Scan all protocols and chains for the best available yield.
|
|
78
|
-
*
|
|
79
|
-
* Returns opportunities sorted by netAnnualGainUsd descending.
|
|
80
|
-
* Only includes rates with positive APY improvement vs current position.
|
|
81
|
-
*
|
|
82
|
-
* @param params.token - Underlying token to scan for (e.g. 'USDC')
|
|
83
|
-
* @param params.amountUsd - Amount in USD to use for gain calculations
|
|
84
|
-
* @param params.currentPosition - Active position (if any) to compare against
|
|
85
|
-
*/
|
|
86
|
-
async scan(params) {
|
|
87
|
-
const rates = await this.rateFetcher.fetchAllRates(this.config);
|
|
88
|
-
const currentApy = params.currentPosition?.currentApy ?? 0;
|
|
89
|
-
return rates
|
|
90
|
-
.map((rate) => {
|
|
91
|
-
const apyImprovementBps = Math.round((rate.apy - currentApy) * 10000);
|
|
92
|
-
const estimatedAnnualGainUsd = params.amountUsd * (rate.apy - currentApy);
|
|
93
|
-
const rotationCostUsd = this.estimateRotationCost(params.currentPosition?.chain, rate.chain, params.amountUsd);
|
|
94
|
-
const netAnnualGainUsd = estimatedAnnualGainUsd - rotationCostUsd;
|
|
95
|
-
const viable = apyImprovementBps >= this.config.minRotationImprovementBps &&
|
|
96
|
-
netAnnualGainUsd > 0;
|
|
97
|
-
return {
|
|
98
|
-
current: params.currentPosition ?? null,
|
|
99
|
-
best: rate,
|
|
100
|
-
apyImprovementBps,
|
|
101
|
-
estimatedAnnualGainUsd,
|
|
102
|
-
rotationCostUsd,
|
|
103
|
-
netAnnualGainUsd,
|
|
104
|
-
viable,
|
|
105
|
-
};
|
|
106
|
-
})
|
|
107
|
-
.filter(o => o.apyImprovementBps > 0)
|
|
108
|
-
.sort((a, b) => b.netAnnualGainUsd - a.netAnnualGainUsd);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Build a deposit transaction for a supported protocol.
|
|
112
|
-
*
|
|
113
|
-
* Returns unsigned calldata — the agent signs and broadcasts.
|
|
114
|
-
* ERC20 deposits: value is always 0n (approve first, then supply).
|
|
115
|
-
*
|
|
116
|
-
* Supported: aave-v3, compound-v3
|
|
117
|
-
* Unsupported (use native interface): buidl, ousg, usdy, usyc, wustb
|
|
118
|
-
*
|
|
119
|
-
* @throws Error for unsupported protocols
|
|
120
|
-
*/
|
|
121
|
-
buildDepositTx(params) {
|
|
122
|
-
switch (params.protocol) {
|
|
123
|
-
case 'aave-v3':
|
|
124
|
-
return this.buildAaveDepositTx(params);
|
|
125
|
-
case 'compound-v3':
|
|
126
|
-
return this.buildCompoundDepositTx(params);
|
|
127
|
-
default:
|
|
128
|
-
throw new Error(`Deposit not supported for '${params.protocol}' via SDK — use their native interface. ` +
|
|
129
|
-
`For RWA tokens (buidl, ousg, usdy, usyc, wustb), interact with the token's ` +
|
|
130
|
-
`native contract or portal directly.`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Build a withdrawal transaction for a supported protocol.
|
|
135
|
-
*
|
|
136
|
-
* Returns unsigned calldata — the agent signs and broadcasts.
|
|
137
|
-
* Pass ethers.MaxUint256 (2^256-1) to withdraw the full position.
|
|
138
|
-
*
|
|
139
|
-
* Supported: aave-v3, compound-v3
|
|
140
|
-
*
|
|
141
|
-
* @throws Error for unsupported protocols
|
|
142
|
-
*/
|
|
143
|
-
buildWithdrawTx(params) {
|
|
144
|
-
switch (params.protocol) {
|
|
145
|
-
case 'aave-v3':
|
|
146
|
-
return this.buildAaveWithdrawTx(params);
|
|
147
|
-
case 'compound-v3':
|
|
148
|
-
return this.buildCompoundWithdrawTx(params);
|
|
149
|
-
default:
|
|
150
|
-
throw new Error(`Withdrawal not supported for '${params.protocol}' via SDK — use their native interface.`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Estimate USD cost to rotate capital from one position to another.
|
|
155
|
-
*
|
|
156
|
-
* Same-chain rotation: ~$3 gas (single approve + supply tx)
|
|
157
|
-
* Cross-chain rotation: CCTP bridge fee (0.1% of amount) + gas both sides (~$5)
|
|
158
|
-
*
|
|
159
|
-
* Note: For small amounts, cross-chain rotation may not be worth it.
|
|
160
|
-
*/
|
|
161
|
-
estimateRotationCost(fromChain, toChain, amountUsd) {
|
|
162
|
-
if (!fromChain || fromChain === toChain) {
|
|
163
|
-
// Same chain: ~$2-5 gas (approve + supply)
|
|
164
|
-
return 3.0;
|
|
165
|
-
}
|
|
166
|
-
// Cross-chain: CCTP bridge fee (0.1% platform) + gas both sides (~$5 total)
|
|
167
|
-
return amountUsd * 0.001 + 5.0;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Track a position for yield accrual estimation.
|
|
171
|
-
* Keyed by protocol:chain:token — one position per slot.
|
|
172
|
-
*/
|
|
173
|
-
trackPosition(position) {
|
|
174
|
-
const key = `${position.protocol}:${position.chain}:${position.token}`;
|
|
175
|
-
this.positions.set(key, position);
|
|
176
|
-
}
|
|
177
|
-
/** Get all tracked positions */
|
|
178
|
-
getPositions() {
|
|
179
|
-
return Array.from(this.positions.values());
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Estimate yield accrued since deposit.
|
|
183
|
-
*
|
|
184
|
-
* Uses simple linear approximation (accurate for short periods).
|
|
185
|
-
* For compound interest over long periods, use protocol's native accrual.
|
|
186
|
-
*/
|
|
187
|
-
estimateAccruedYield(position) {
|
|
188
|
-
const elapsedMs = Date.now() - position.depositedAt;
|
|
189
|
-
const elapsedYears = elapsedMs / (365.25 * 24 * 60 * 60 * 1000);
|
|
190
|
-
const yieldFraction = position.currentApy * elapsedYears;
|
|
191
|
-
return BigInt(Math.round(Number(position.depositedAmount) * yieldFraction));
|
|
192
|
-
}
|
|
193
|
-
// ─── Private TX Builders ──────────────────────────────────────────────────
|
|
194
|
-
buildAaveDepositTx(params) {
|
|
195
|
-
const poolAddress = AAVE_POOL_ADDRESSES[params.chain];
|
|
196
|
-
if (!poolAddress)
|
|
197
|
-
throw new Error(`Aave V3 not supported on chain: ${params.chain}`);
|
|
198
|
-
const tokenAddress = getTokenAddress(params.token, params.chain);
|
|
199
|
-
const iface = new ethers.Interface(AAVE_POOL_ABI);
|
|
200
|
-
// supply(asset, amount, onBehalfOf, referralCode=0)
|
|
201
|
-
const data = iface.encodeFunctionData('supply', [
|
|
202
|
-
tokenAddress,
|
|
203
|
-
params.amount,
|
|
204
|
-
params.walletAddress,
|
|
205
|
-
0,
|
|
206
|
-
]);
|
|
207
|
-
return {
|
|
208
|
-
to: poolAddress,
|
|
209
|
-
data,
|
|
210
|
-
value: 0n, // ERC20 deposit — no native token required
|
|
211
|
-
gasEstimate: 250000n,
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
buildAaveWithdrawTx(params) {
|
|
215
|
-
const poolAddress = AAVE_POOL_ADDRESSES[params.chain];
|
|
216
|
-
if (!poolAddress)
|
|
217
|
-
throw new Error(`Aave V3 not supported on chain: ${params.chain}`);
|
|
218
|
-
const tokenAddress = getTokenAddress(params.token, params.chain);
|
|
219
|
-
const iface = new ethers.Interface(AAVE_POOL_ABI);
|
|
220
|
-
// withdraw(asset, amount, to) — pass MaxUint256 to withdraw all
|
|
221
|
-
const data = iface.encodeFunctionData('withdraw', [
|
|
222
|
-
tokenAddress,
|
|
223
|
-
params.amount,
|
|
224
|
-
params.walletAddress,
|
|
225
|
-
]);
|
|
226
|
-
return {
|
|
227
|
-
to: poolAddress,
|
|
228
|
-
data,
|
|
229
|
-
value: 0n,
|
|
230
|
-
gasEstimate: 200000n,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
buildCompoundDepositTx(params) {
|
|
234
|
-
const cometAddress = COMPOUND_COMET_ADDRESSES[params.chain];
|
|
235
|
-
if (!cometAddress)
|
|
236
|
-
throw new Error(`Compound V3 not supported on chain: ${params.chain}`);
|
|
237
|
-
const tokenAddress = getTokenAddress(params.token, params.chain);
|
|
238
|
-
const iface = new ethers.Interface(COMPOUND_COMET_ABI);
|
|
239
|
-
// supply(asset, amount)
|
|
240
|
-
const data = iface.encodeFunctionData('supply', [tokenAddress, params.amount]);
|
|
241
|
-
return {
|
|
242
|
-
to: cometAddress,
|
|
243
|
-
data,
|
|
244
|
-
value: 0n,
|
|
245
|
-
gasEstimate: 180000n,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
buildCompoundWithdrawTx(params) {
|
|
249
|
-
const cometAddress = COMPOUND_COMET_ADDRESSES[params.chain];
|
|
250
|
-
if (!cometAddress)
|
|
251
|
-
throw new Error(`Compound V3 not supported on chain: ${params.chain}`);
|
|
252
|
-
const tokenAddress = getTokenAddress(params.token, params.chain);
|
|
253
|
-
const iface = new ethers.Interface(COMPOUND_COMET_ABI);
|
|
254
|
-
// withdraw(asset, amount)
|
|
255
|
-
const data = iface.encodeFunctionData('withdraw', [tokenAddress, params.amount]);
|
|
256
|
-
return {
|
|
257
|
-
to: cometAddress,
|
|
258
|
-
data,
|
|
259
|
-
value: 0n,
|
|
260
|
-
gasEstimate: 150000n,
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=vault.js.map
|
package/dist/yield/vault.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/yield/vault.ts"],"names":[],"mappings":"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"}
|