agentwallet-sdk 3.0.0 → 3.1.1
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 +226 -10
- package/dist/fiat/index.d.ts +10 -0
- package/dist/fiat/index.d.ts.map +1 -0
- package/dist/fiat/index.js +9 -0
- package/dist/fiat/index.js.map +1 -0
- package/dist/fiat/onramp.d.ts +101 -0
- package/dist/fiat/onramp.d.ts.map +1 -0
- package/dist/fiat/onramp.js +155 -0
- package/dist/fiat/onramp.js.map +1 -0
- package/dist/fiat/providers/index.d.ts +16 -0
- package/dist/fiat/providers/index.d.ts.map +1 -0
- package/dist/fiat/providers/index.js +30 -0
- package/dist/fiat/providers/index.js.map +1 -0
- package/dist/fiat/providers/moonpay.d.ts +22 -0
- package/dist/fiat/providers/moonpay.d.ts.map +1 -0
- package/dist/fiat/providers/moonpay.js +107 -0
- package/dist/fiat/providers/moonpay.js.map +1 -0
- package/dist/fiat/providers/stripe.d.ts +26 -0
- package/dist/fiat/providers/stripe.d.ts.map +1 -0
- package/dist/fiat/providers/stripe.js +135 -0
- package/dist/fiat/providers/stripe.js.map +1 -0
- package/dist/fiat/providers/transak.d.ts +26 -0
- package/dist/fiat/providers/transak.d.ts.map +1 -0
- package/dist/fiat/providers/transak.js +119 -0
- package/dist/fiat/providers/transak.js.map +1 -0
- package/dist/fiat/types.d.ts +106 -0
- package/dist/fiat/types.d.ts.map +1 -0
- package/dist/fiat/types.js +13 -0
- package/dist/fiat/types.js.map +1 -0
- package/dist/flash/executor.d.ts +119 -0
- package/dist/flash/executor.d.ts.map +1 -0
- package/dist/flash/executor.js +195 -0
- package/dist/flash/executor.js.map +1 -0
- package/dist/flash/index.d.ts +28 -0
- package/dist/flash/index.d.ts.map +1 -0
- package/dist/flash/index.js +25 -0
- package/dist/flash/index.js.map +1 -0
- package/dist/flash/scanner.d.ts +133 -0
- package/dist/flash/scanner.d.ts.map +1 -0
- package/dist/flash/scanner.js +212 -0
- package/dist/flash/scanner.js.map +1 -0
- package/dist/flash/types.d.ts +136 -0
- package/dist/flash/types.d.ts.map +1 -0
- package/dist/flash/types.js +23 -0
- package/dist/flash/types.js.map +1 -0
- package/dist/gas/index.d.ts +4 -0
- package/dist/gas/index.d.ts.map +1 -0
- package/dist/gas/index.js +3 -0
- package/dist/gas/index.js.map +1 -0
- package/dist/gas/sponsor.d.ts +70 -0
- package/dist/gas/sponsor.d.ts.map +1 -0
- package/dist/gas/sponsor.js +193 -0
- package/dist/gas/sponsor.js.map +1 -0
- package/dist/gas/types.d.ts +76 -0
- package/dist/gas/types.d.ts.map +1 -0
- package/dist/gas/types.js +21 -0
- package/dist/gas/types.js.map +1 -0
- package/dist/index.d.ts +84 -62
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/mev/index.d.ts +4 -0
- package/dist/mev/index.d.ts.map +1 -0
- package/dist/mev/index.js +4 -0
- package/dist/mev/index.js.map +1 -0
- package/dist/mev/protection.d.ts +54 -0
- package/dist/mev/protection.d.ts.map +1 -0
- package/dist/mev/protection.js +185 -0
- package/dist/mev/protection.js.map +1 -0
- package/dist/mev/risk.d.ts +19 -0
- package/dist/mev/risk.d.ts.map +1 -0
- package/dist/mev/risk.js +95 -0
- package/dist/mev/risk.js.map +1 -0
- package/dist/mev/types.d.ts +49 -0
- package/dist/mev/types.d.ts.map +1 -0
- package/dist/mev/types.js +2 -0
- package/dist/mev/types.js.map +1 -0
- package/dist/settlement/index.d.ts +4 -0
- package/dist/settlement/index.d.ts.map +1 -0
- package/dist/settlement/index.js +3 -0
- package/dist/settlement/index.js.map +1 -0
- package/dist/settlement/types.d.ts +66 -0
- package/dist/settlement/types.d.ts.map +1 -0
- package/dist/settlement/types.js +37 -0
- package/dist/settlement/types.js.map +1 -0
- package/dist/settlement/verifier.d.ts +75 -0
- package/dist/settlement/verifier.d.ts.map +1 -0
- package/dist/settlement/verifier.js +354 -0
- package/dist/settlement/verifier.js.map +1 -0
- package/dist/solver/adapter.d.ts +47 -0
- package/dist/solver/adapter.d.ts.map +1 -0
- package/dist/solver/adapter.js +138 -0
- package/dist/solver/adapter.js.map +1 -0
- package/dist/solver/analyzer.d.ts +48 -0
- package/dist/solver/analyzer.d.ts.map +1 -0
- package/dist/solver/analyzer.js +89 -0
- package/dist/solver/analyzer.js.map +1 -0
- package/dist/solver/builder.d.ts +31 -0
- package/dist/solver/builder.d.ts.map +1 -0
- package/dist/solver/builder.js +60 -0
- package/dist/solver/builder.js.map +1 -0
- package/dist/solver/index.d.ts +22 -0
- package/dist/solver/index.d.ts.map +1 -0
- package/dist/solver/index.js +21 -0
- package/dist/solver/index.js.map +1 -0
- package/dist/solver/types.d.ts +115 -0
- package/dist/solver/types.d.ts.map +1 -0
- package/dist/solver/types.js +10 -0
- package/dist/solver/types.js.map +1 -0
- package/dist/swap/index.d.ts +1 -0
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +2 -0
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/router/cache.d.ts +13 -0
- package/dist/swap/router/cache.d.ts.map +1 -0
- package/dist/swap/router/cache.js +30 -0
- package/dist/swap/router/cache.js.map +1 -0
- package/dist/swap/router/flashbots.d.ts +10 -0
- package/dist/swap/router/flashbots.d.ts.map +1 -0
- package/dist/swap/router/flashbots.js +43 -0
- package/dist/swap/router/flashbots.js.map +1 -0
- package/dist/swap/router/health.d.ts +17 -0
- package/dist/swap/router/health.d.ts.map +1 -0
- package/dist/swap/router/health.js +38 -0
- package/dist/swap/router/health.js.map +1 -0
- package/dist/swap/router/index.d.ts +10 -0
- package/dist/swap/router/index.d.ts.map +1 -0
- package/dist/swap/router/index.js +10 -0
- package/dist/swap/router/index.js.map +1 -0
- package/dist/swap/router/providers/cowswap.d.ts +11 -0
- package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
- package/dist/swap/router/providers/cowswap.js +79 -0
- package/dist/swap/router/providers/cowswap.js.map +1 -0
- package/dist/swap/router/providers/index.d.ts +20 -0
- package/dist/swap/router/providers/index.d.ts.map +1 -0
- package/dist/swap/router/providers/index.js +32 -0
- package/dist/swap/router/providers/index.js.map +1 -0
- package/dist/swap/router/providers/jupiter.d.ts +12 -0
- package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
- package/dist/swap/router/providers/jupiter.js +73 -0
- package/dist/swap/router/providers/jupiter.js.map +1 -0
- package/dist/swap/router/providers/lifi.d.ts +11 -0
- package/dist/swap/router/providers/lifi.d.ts.map +1 -0
- package/dist/swap/router/providers/lifi.js +123 -0
- package/dist/swap/router/providers/lifi.js.map +1 -0
- package/dist/swap/router/providers/oneinch.d.ts +13 -0
- package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
- package/dist/swap/router/providers/oneinch.js +71 -0
- package/dist/swap/router/providers/oneinch.js.map +1 -0
- package/dist/swap/router/providers/paraswap.d.ts +11 -0
- package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
- package/dist/swap/router/providers/paraswap.js +73 -0
- package/dist/swap/router/providers/paraswap.js.map +1 -0
- package/dist/swap/router/providers/uniswap.d.ts +31 -0
- package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
- package/dist/swap/router/providers/uniswap.js +116 -0
- package/dist/swap/router/providers/uniswap.js.map +1 -0
- package/dist/swap/router/providers/zerox.d.ts +13 -0
- package/dist/swap/router/providers/zerox.d.ts.map +1 -0
- package/dist/swap/router/providers/zerox.js +94 -0
- package/dist/swap/router/providers/zerox.js.map +1 -0
- package/dist/swap/router/router.d.ts +86 -0
- package/dist/swap/router/router.d.ts.map +1 -0
- package/dist/swap/router/router.js +224 -0
- package/dist/swap/router/router.js.map +1 -0
- package/dist/swap/router/rsi/engine.d.ts +60 -0
- package/dist/swap/router/rsi/engine.d.ts.map +1 -0
- package/dist/swap/router/rsi/engine.js +483 -0
- package/dist/swap/router/rsi/engine.js.map +1 -0
- package/dist/swap/router/rsi/index.d.ts +3 -0
- package/dist/swap/router/rsi/index.d.ts.map +1 -0
- package/dist/swap/router/rsi/index.js +3 -0
- package/dist/swap/router/rsi/index.js.map +1 -0
- package/dist/swap/router/rsi/types.d.ts +106 -0
- package/dist/swap/router/rsi/types.d.ts.map +1 -0
- package/dist/swap/router/rsi/types.js +3 -0
- package/dist/swap/router/rsi/types.js.map +1 -0
- package/dist/swap/router/types.d.ts +120 -0
- package/dist/swap/router/types.d.ts.map +1 -0
- package/dist/swap/router/types.js +16 -0
- package/dist/swap/router/types.js.map +1 -0
- package/dist/tax/engine.d.ts +131 -0
- package/dist/tax/engine.d.ts.map +1 -0
- package/dist/tax/engine.js +307 -0
- package/dist/tax/engine.js.map +1 -0
- package/dist/tax/index.d.ts +9 -0
- package/dist/tax/index.d.ts.map +1 -0
- package/dist/tax/index.js +8 -0
- package/dist/tax/index.js.map +1 -0
- package/dist/tax/lots.d.ts +60 -0
- package/dist/tax/lots.d.ts.map +1 -0
- package/dist/tax/lots.js +129 -0
- package/dist/tax/lots.js.map +1 -0
- package/dist/tax/types.d.ts +113 -0
- package/dist/tax/types.d.ts.map +1 -0
- package/dist/tax/types.js +18 -0
- package/dist/tax/types.js.map +1 -0
- package/dist/yield/index.d.ts +26 -0
- package/dist/yield/index.d.ts.map +1 -0
- package/dist/yield/index.js +25 -0
- package/dist/yield/index.js.map +1 -0
- package/dist/yield/rates.d.ts +114 -0
- package/dist/yield/rates.d.ts.map +1 -0
- package/dist/yield/rates.js +351 -0
- package/dist/yield/rates.js.map +1 -0
- package/dist/yield/types.d.ts +134 -0
- package/dist/yield/types.d.ts.map +1 -0
- package/dist/yield/types.js +24 -0
- package/dist/yield/types.js.map +1 -0
- package/dist/yield/vault.d.ts +112 -0
- package/dist/yield/vault.d.ts.map +1 -0
- package/dist/yield/vault.js +264 -0
- package/dist/yield/vault.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tax/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,SAAS,GACT,YAAY,GACZ,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,cAAc,CAAC;AAEnB,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAElD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,kCAAkC;IAClC,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;IAC5C,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tax / P&L Engine — Types
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ DISCLAIMER: This module is for informational purposes only.
|
|
5
|
+
* Tax laws vary by jurisdiction and change frequently. Always consult
|
|
6
|
+
* a qualified tax professional before filing. This is NOT tax advice.
|
|
7
|
+
*
|
|
8
|
+
* Models IRS rules for crypto (US-centric, adaptable):
|
|
9
|
+
* - FIFO / LIFO / Specific Identification cost basis methods
|
|
10
|
+
* - Short-term capital gains: held < 365 days (taxed as ordinary income)
|
|
11
|
+
* - Long-term capital gains: held ≥ 365 days (preferential rates)
|
|
12
|
+
* - Wash sale rule: NOT currently applicable to crypto (as of 2024) — noted here
|
|
13
|
+
* for awareness. If legislation changes, this engine will need updating.
|
|
14
|
+
* - Yield / interest received = ordinary income (taxed at full rate)
|
|
15
|
+
* - Gas fees = deductible as part of cost basis / selling expenses
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tax/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Vault Module
|
|
3
|
+
*
|
|
4
|
+
* Puts idle agent capital to work across DeFi vaults and RWA tokens.
|
|
5
|
+
*
|
|
6
|
+
* Quick start:
|
|
7
|
+
* import { YieldVault, YieldRateFetcher } from './yield/index.js';
|
|
8
|
+
*
|
|
9
|
+
* const vault = new YieldVault({ enabled: true });
|
|
10
|
+
* const opportunities = await vault.scan({ token: 'USDC', amountUsd: 10_000 });
|
|
11
|
+
* const best = opportunities.find(o => o.viable);
|
|
12
|
+
* if (best) {
|
|
13
|
+
* const tx = vault.buildDepositTx({
|
|
14
|
+
* protocol: best.best.protocol,
|
|
15
|
+
* token: 'USDC',
|
|
16
|
+
* amount: 10_000_000_000n, // 10k USDC (6 decimals)
|
|
17
|
+
* chain: best.best.chain,
|
|
18
|
+
* walletAddress: '0xYourAgentWallet',
|
|
19
|
+
* });
|
|
20
|
+
* // agent signs + sends tx
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export { YieldVault } from './vault.js';
|
|
24
|
+
export { YieldRateFetcher, PROTOCOL_ADDRESSES } from './rates.js';
|
|
25
|
+
export type { YieldProtocol, YieldCategory, YieldPosition, YieldRate, YieldOpportunity, YieldVaultConfig, DepositResult, WithdrawResult, } from './types.js';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yield/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,YAAY,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Vault Module
|
|
3
|
+
*
|
|
4
|
+
* Puts idle agent capital to work across DeFi vaults and RWA tokens.
|
|
5
|
+
*
|
|
6
|
+
* Quick start:
|
|
7
|
+
* import { YieldVault, YieldRateFetcher } from './yield/index.js';
|
|
8
|
+
*
|
|
9
|
+
* const vault = new YieldVault({ enabled: true });
|
|
10
|
+
* const opportunities = await vault.scan({ token: 'USDC', amountUsd: 10_000 });
|
|
11
|
+
* const best = opportunities.find(o => o.viable);
|
|
12
|
+
* if (best) {
|
|
13
|
+
* const tx = vault.buildDepositTx({
|
|
14
|
+
* protocol: best.best.protocol,
|
|
15
|
+
* token: 'USDC',
|
|
16
|
+
* amount: 10_000_000_000n, // 10k USDC (6 decimals)
|
|
17
|
+
* chain: best.best.chain,
|
|
18
|
+
* walletAddress: '0xYourAgentWallet',
|
|
19
|
+
* });
|
|
20
|
+
* // agent signs + sends tx
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export { YieldVault } from './vault.js';
|
|
24
|
+
export { YieldRateFetcher, PROTOCOL_ADDRESSES } from './rates.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/yield/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Rate Fetcher
|
|
3
|
+
*
|
|
4
|
+
* Fetches current APY rates from DeFi protocols and RWA token sources.
|
|
5
|
+
* When a provider is not supplied (tests, offline, no RPC), returns accurate
|
|
6
|
+
* mock rates based on current market conditions (~Q1 2026).
|
|
7
|
+
*
|
|
8
|
+
* DeFi risk scores (0-100, lower = safer):
|
|
9
|
+
* Aave V3: 15 — battle-tested, billions TVL, audited
|
|
10
|
+
* Compound V3: 20 — mature, lower TVL than Aave
|
|
11
|
+
* Morpho Blue: 25 — newer architecture, peer-to-peer matching
|
|
12
|
+
*
|
|
13
|
+
* RWA risk scores:
|
|
14
|
+
* USDC-collateralized RWA: 10–20 (T-bill backed, regulated issuers)
|
|
15
|
+
*/
|
|
16
|
+
import { ethers } from 'ethers';
|
|
17
|
+
import type { YieldRate, YieldVaultConfig } from './types.js';
|
|
18
|
+
export declare const PROTOCOL_ADDRESSES: {
|
|
19
|
+
readonly 'aave-v3': {
|
|
20
|
+
readonly ethereum: {
|
|
21
|
+
readonly pool: "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2";
|
|
22
|
+
readonly dataProvider: "0x7B4EB56E7CD4b454BA8ff71E4518426369a138a3";
|
|
23
|
+
};
|
|
24
|
+
readonly base: {
|
|
25
|
+
readonly pool: "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5";
|
|
26
|
+
readonly dataProvider: "0x2d8A3C5677189723C4cB8873CfC9C8976ddf54D8";
|
|
27
|
+
};
|
|
28
|
+
readonly arbitrum: {
|
|
29
|
+
readonly pool: "0x794a61358D6845594F94dc1DB02A252b5b4814aD";
|
|
30
|
+
readonly dataProvider: "0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654";
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
readonly 'compound-v3': {
|
|
34
|
+
readonly ethereum: {
|
|
35
|
+
readonly comet: "0xc3d688B66703497DAA19211EEdff47f25384cdc3";
|
|
36
|
+
};
|
|
37
|
+
readonly base: {
|
|
38
|
+
readonly comet: "0xb125E6687d4313864e53df431d5425969c15Eb2";
|
|
39
|
+
};
|
|
40
|
+
readonly arbitrum: {
|
|
41
|
+
readonly comet: "0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf";
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
readonly usdy: {
|
|
45
|
+
readonly ethereum: {
|
|
46
|
+
readonly token: "0x96F6eF951840721AdBF7B6A2Ce4A795F61F8f60a";
|
|
47
|
+
};
|
|
48
|
+
readonly arbitrum: {
|
|
49
|
+
readonly token: "0x7fAb54cb9d83BDAF0e94b1C2bA96F64Fb7D86b7A";
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export declare class YieldRateFetcher {
|
|
54
|
+
/**
|
|
55
|
+
* Fetch current supply APY for Aave V3.
|
|
56
|
+
*
|
|
57
|
+
* On-chain: queries getReserveData() on the Aave Data Provider.
|
|
58
|
+
* currentLiquidityRate is in ray format (1e27 = 100% APY).
|
|
59
|
+
* APY = (1 + rate / 1e27 / SECONDS_PER_YEAR)^SECONDS_PER_YEAR - 1
|
|
60
|
+
*
|
|
61
|
+
* Falls back to accurate mock rates when provider is not available.
|
|
62
|
+
*
|
|
63
|
+
* Risk score: 15 (battle-tested, billions TVL, multiple audits)
|
|
64
|
+
*/
|
|
65
|
+
fetchAaveRate(token: string, chain: string, provider?: ethers.JsonRpcProvider): Promise<YieldRate>;
|
|
66
|
+
/**
|
|
67
|
+
* Fetch current supply APY for Compound V3.
|
|
68
|
+
*
|
|
69
|
+
* On-chain: calls getSupplyRate(utilization) on the Comet contract.
|
|
70
|
+
* supplyRate is per-second (18 decimals).
|
|
71
|
+
* APY = (1 + supplyRate / 1e18)^SECONDS_PER_YEAR - 1
|
|
72
|
+
*
|
|
73
|
+
* Risk score: 20 (mature protocol, lower TVL than Aave)
|
|
74
|
+
*/
|
|
75
|
+
fetchCompoundRate(token: string, chain: string, provider?: ethers.JsonRpcProvider): Promise<YieldRate>;
|
|
76
|
+
/**
|
|
77
|
+
* Fetch APY for Morpho Blue.
|
|
78
|
+
*
|
|
79
|
+
* Morpho Blue uses peer-to-peer rate matching — on-chain query is complex
|
|
80
|
+
* (varies per market). We use well-calibrated estimates based on current
|
|
81
|
+
* market conditions. Real implementation would query Morpho's API or
|
|
82
|
+
* aggregate across market IDs.
|
|
83
|
+
*
|
|
84
|
+
* Risk score: 25 (newer architecture, audited, growing TVL)
|
|
85
|
+
*/
|
|
86
|
+
fetchMorphoRate(token: string, chain: string, _provider?: ethers.JsonRpcProvider): Promise<YieldRate>;
|
|
87
|
+
/**
|
|
88
|
+
* Get current RWA token rates.
|
|
89
|
+
*
|
|
90
|
+
* RWA tokens are backed by tokenized T-bills and short-duration government bonds.
|
|
91
|
+
* Rates (~4.8–5.2% APY as of Q1 2026) track the Fed Funds rate.
|
|
92
|
+
*
|
|
93
|
+
* Agent-friendliness matrix:
|
|
94
|
+
* ┌──────────┬──────────────┬───────────┬───────────────────────────────────┐
|
|
95
|
+
* │ Protocol │ KYC Required │ Min Dep. │ Chains │
|
|
96
|
+
* ├──────────┼──────────────┼───────────┼───────────────────────────────────┤
|
|
97
|
+
* │ BUIDL │ ✅ YES │ $1,000,000│ Ethereum only │
|
|
98
|
+
* │ OUSG │ ✅ YES │ ~$5,000 │ Ethereum, Base │
|
|
99
|
+
* │ USDY │ ❌ NO │ ~$500 │ Ethereum, Arbitrum (best for bots)│
|
|
100
|
+
* │ USYC │ ❌ NO │ ~$1,000 │ Ethereum, Base │
|
|
101
|
+
* │ wUSTB │ ❌ NO │ ~$100 │ Ethereum │
|
|
102
|
+
* └──────────┴──────────────┴───────────┴───────────────────────────────────┘
|
|
103
|
+
*
|
|
104
|
+
* ⚠️ BUIDL: $1M minimum is a HARD requirement. Do not recommend to retail agents.
|
|
105
|
+
*/
|
|
106
|
+
fetchRWARates(chains: string[]): Promise<YieldRate[]>;
|
|
107
|
+
/**
|
|
108
|
+
* Fetch all rates across DeFi protocols and RWA tokens.
|
|
109
|
+
* Applies config filters (KYC, chains, tokens).
|
|
110
|
+
* Returns sorted by APY descending.
|
|
111
|
+
*/
|
|
112
|
+
fetchAllRates(config: YieldVaultConfig): Promise<YieldRate[]>;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=rates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rates.d.ts","sourceRoot":"","sources":["../../src/yield/rates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBrB,CAAC;AAsDX,qBAAa,gBAAgB;IAC3B;;;;;;;;;;OAUG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC;IAuCrB;;;;;;;;OAQG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC;IAoCrB;;;;;;;;;OASG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,GACjC,OAAO,CAAC,SAAS,CAAC;IAmBrB;;;;;;;;;;;;;;;;;;OAkBG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAgG3D;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAsCpE"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Rate Fetcher
|
|
3
|
+
*
|
|
4
|
+
* Fetches current APY rates from DeFi protocols and RWA token sources.
|
|
5
|
+
* When a provider is not supplied (tests, offline, no RPC), returns accurate
|
|
6
|
+
* mock rates based on current market conditions (~Q1 2026).
|
|
7
|
+
*
|
|
8
|
+
* DeFi risk scores (0-100, lower = safer):
|
|
9
|
+
* Aave V3: 15 — battle-tested, billions TVL, audited
|
|
10
|
+
* Compound V3: 20 — mature, lower TVL than Aave
|
|
11
|
+
* Morpho Blue: 25 — newer architecture, peer-to-peer matching
|
|
12
|
+
*
|
|
13
|
+
* RWA risk scores:
|
|
14
|
+
* USDC-collateralized RWA: 10–20 (T-bill backed, regulated issuers)
|
|
15
|
+
*/
|
|
16
|
+
import { ethers } from 'ethers';
|
|
17
|
+
// ─── Protocol Contract Addresses ─────────────────────────────────────────────
|
|
18
|
+
export const PROTOCOL_ADDRESSES = {
|
|
19
|
+
'aave-v3': {
|
|
20
|
+
ethereum: {
|
|
21
|
+
pool: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
|
|
22
|
+
dataProvider: '0x7B4EB56E7CD4b454BA8ff71E4518426369a138a3',
|
|
23
|
+
},
|
|
24
|
+
base: {
|
|
25
|
+
pool: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
|
|
26
|
+
dataProvider: '0x2d8A3C5677189723C4cB8873CfC9C8976ddf54D8',
|
|
27
|
+
},
|
|
28
|
+
arbitrum: {
|
|
29
|
+
pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
|
|
30
|
+
dataProvider: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
'compound-v3': {
|
|
34
|
+
ethereum: { comet: '0xc3d688B66703497DAA19211EEdff47f25384cdc3' }, // USDC market
|
|
35
|
+
base: { comet: '0xb125E6687d4313864e53df431d5425969c15Eb2' },
|
|
36
|
+
arbitrum: { comet: '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf' },
|
|
37
|
+
},
|
|
38
|
+
usdy: {
|
|
39
|
+
ethereum: { token: '0x96F6eF951840721AdBF7B6A2Ce4A795F61F8f60a' },
|
|
40
|
+
arbitrum: { token: '0x7fAb54cb9d83BDAF0e94b1C2bA96F64Fb7D86b7A' },
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
// ─── ABI Fragments ───────────────────────────────────────────────────────────
|
|
44
|
+
const AAVE_DATA_PROVIDER_ABI = [
|
|
45
|
+
'function getReserveData(address asset) external view returns (uint256 unbacked, uint256 accruedToTreasuryScaled, uint256 totalAToken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)',
|
|
46
|
+
];
|
|
47
|
+
const COMET_ABI = [
|
|
48
|
+
'function getSupplyRate(uint256 utilization) external view returns (uint64)',
|
|
49
|
+
'function getUtilization() external view returns (uint256)',
|
|
50
|
+
];
|
|
51
|
+
// Token addresses (USDC on each chain)
|
|
52
|
+
const USDC_ADDRESSES = {
|
|
53
|
+
ethereum: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
54
|
+
base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
55
|
+
arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
56
|
+
};
|
|
57
|
+
const USDT_ADDRESSES = {
|
|
58
|
+
ethereum: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
59
|
+
arbitrum: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',
|
|
60
|
+
};
|
|
61
|
+
const SECONDS_PER_YEAR = 365.25 * 24 * 60 * 60;
|
|
62
|
+
const RAY = BigInt('1000000000000000000000000000'); // 1e27
|
|
63
|
+
/** Resolve token address for a chain */
|
|
64
|
+
function getTokenAddress(token, chain) {
|
|
65
|
+
const upper = token.toUpperCase();
|
|
66
|
+
if (upper === 'USDC')
|
|
67
|
+
return USDC_ADDRESSES[chain];
|
|
68
|
+
if (upper === 'USDT')
|
|
69
|
+
return USDT_ADDRESSES[chain];
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
// ─── Mock rates (market conditions ~Q1 2026) ─────────────────────────────────
|
|
73
|
+
const MOCK_DEFI_RATES = {
|
|
74
|
+
'aave-v3:ethereum:USDC': { apy: 0.038, tvlUsd: 4200000000 },
|
|
75
|
+
'aave-v3:base:USDC': { apy: 0.042, tvlUsd: 850000000 },
|
|
76
|
+
'aave-v3:arbitrum:USDC': { apy: 0.040, tvlUsd: 1100000000 },
|
|
77
|
+
'aave-v3:ethereum:USDT': { apy: 0.036, tvlUsd: 2800000000 },
|
|
78
|
+
'aave-v3:base:USDT': { apy: 0.038, tvlUsd: 300000000 },
|
|
79
|
+
'aave-v3:arbitrum:USDT': { apy: 0.037, tvlUsd: 500000000 },
|
|
80
|
+
'compound-v3:ethereum:USDC': { apy: 0.041, tvlUsd: 1800000000 },
|
|
81
|
+
'compound-v3:base:USDC': { apy: 0.045, tvlUsd: 400000000 },
|
|
82
|
+
'compound-v3:arbitrum:USDC': { apy: 0.043, tvlUsd: 600000000 },
|
|
83
|
+
'compound-v3:ethereum:USDT': { apy: 0.039, tvlUsd: 900000000 },
|
|
84
|
+
'morpho-blue:ethereum:USDC': { apy: 0.046, tvlUsd: 700000000 },
|
|
85
|
+
'morpho-blue:base:USDC': { apy: 0.048, tvlUsd: 150000000 },
|
|
86
|
+
'morpho-blue:arbitrum:USDC': { apy: 0.047, tvlUsd: 200000000 },
|
|
87
|
+
};
|
|
88
|
+
export class YieldRateFetcher {
|
|
89
|
+
/**
|
|
90
|
+
* Fetch current supply APY for Aave V3.
|
|
91
|
+
*
|
|
92
|
+
* On-chain: queries getReserveData() on the Aave Data Provider.
|
|
93
|
+
* currentLiquidityRate is in ray format (1e27 = 100% APY).
|
|
94
|
+
* APY = (1 + rate / 1e27 / SECONDS_PER_YEAR)^SECONDS_PER_YEAR - 1
|
|
95
|
+
*
|
|
96
|
+
* Falls back to accurate mock rates when provider is not available.
|
|
97
|
+
*
|
|
98
|
+
* Risk score: 15 (battle-tested, billions TVL, multiple audits)
|
|
99
|
+
*/
|
|
100
|
+
async fetchAaveRate(token, chain, provider) {
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const mockKey = `aave-v3:${chain}:${token}`;
|
|
103
|
+
const mock = MOCK_DEFI_RATES[mockKey] ?? { apy: 0.038, tvlUsd: 500000000 };
|
|
104
|
+
let apy = mock.apy;
|
|
105
|
+
if (provider) {
|
|
106
|
+
try {
|
|
107
|
+
const addresses = PROTOCOL_ADDRESSES['aave-v3'][chain];
|
|
108
|
+
if (addresses) {
|
|
109
|
+
const tokenAddr = getTokenAddress(token, chain);
|
|
110
|
+
if (tokenAddr) {
|
|
111
|
+
const dp = new ethers.Contract(addresses.dataProvider, AAVE_DATA_PROVIDER_ABI, provider);
|
|
112
|
+
const data = await dp.getReserveData(tokenAddr);
|
|
113
|
+
const liquidityRate = data[5]; // currentLiquidityRate in ray
|
|
114
|
+
const ratePerSecond = Number(liquidityRate) / Number(RAY);
|
|
115
|
+
apy = Math.pow(1 + ratePerSecond / SECONDS_PER_YEAR, SECONDS_PER_YEAR) - 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// fall back to mock
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
protocol: 'aave-v3',
|
|
125
|
+
category: 'defi',
|
|
126
|
+
chain,
|
|
127
|
+
token,
|
|
128
|
+
apy,
|
|
129
|
+
tvlUsd: mock.tvlUsd,
|
|
130
|
+
riskScore: 15,
|
|
131
|
+
kycRequired: false,
|
|
132
|
+
withdrawalDelayMs: 0,
|
|
133
|
+
fetchedAt: now,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Fetch current supply APY for Compound V3.
|
|
138
|
+
*
|
|
139
|
+
* On-chain: calls getSupplyRate(utilization) on the Comet contract.
|
|
140
|
+
* supplyRate is per-second (18 decimals).
|
|
141
|
+
* APY = (1 + supplyRate / 1e18)^SECONDS_PER_YEAR - 1
|
|
142
|
+
*
|
|
143
|
+
* Risk score: 20 (mature protocol, lower TVL than Aave)
|
|
144
|
+
*/
|
|
145
|
+
async fetchCompoundRate(token, chain, provider) {
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
const mockKey = `compound-v3:${chain}:${token}`;
|
|
148
|
+
const mock = MOCK_DEFI_RATES[mockKey] ?? { apy: 0.041, tvlUsd: 400000000 };
|
|
149
|
+
let apy = mock.apy;
|
|
150
|
+
if (provider) {
|
|
151
|
+
try {
|
|
152
|
+
const addresses = PROTOCOL_ADDRESSES['compound-v3'][chain];
|
|
153
|
+
if (addresses) {
|
|
154
|
+
const comet = new ethers.Contract(addresses.comet, COMET_ABI, provider);
|
|
155
|
+
const utilization = await comet.getUtilization();
|
|
156
|
+
const supplyRate = await comet.getSupplyRate(utilization);
|
|
157
|
+
const ratePerSecond = Number(supplyRate) / 1e18;
|
|
158
|
+
apy = Math.pow(1 + ratePerSecond, SECONDS_PER_YEAR) - 1;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// fall back to mock
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
protocol: 'compound-v3',
|
|
167
|
+
category: 'defi',
|
|
168
|
+
chain,
|
|
169
|
+
token,
|
|
170
|
+
apy,
|
|
171
|
+
tvlUsd: mock.tvlUsd,
|
|
172
|
+
riskScore: 20,
|
|
173
|
+
kycRequired: false,
|
|
174
|
+
withdrawalDelayMs: 0,
|
|
175
|
+
fetchedAt: now,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Fetch APY for Morpho Blue.
|
|
180
|
+
*
|
|
181
|
+
* Morpho Blue uses peer-to-peer rate matching — on-chain query is complex
|
|
182
|
+
* (varies per market). We use well-calibrated estimates based on current
|
|
183
|
+
* market conditions. Real implementation would query Morpho's API or
|
|
184
|
+
* aggregate across market IDs.
|
|
185
|
+
*
|
|
186
|
+
* Risk score: 25 (newer architecture, audited, growing TVL)
|
|
187
|
+
*/
|
|
188
|
+
async fetchMorphoRate(token, chain, _provider) {
|
|
189
|
+
const now = Date.now();
|
|
190
|
+
const mockKey = `morpho-blue:${chain}:${token}`;
|
|
191
|
+
const mock = MOCK_DEFI_RATES[mockKey] ?? { apy: 0.046, tvlUsd: 200000000 };
|
|
192
|
+
return {
|
|
193
|
+
protocol: 'morpho-blue',
|
|
194
|
+
category: 'defi',
|
|
195
|
+
chain,
|
|
196
|
+
token,
|
|
197
|
+
apy: mock.apy,
|
|
198
|
+
tvlUsd: mock.tvlUsd,
|
|
199
|
+
riskScore: 25,
|
|
200
|
+
kycRequired: false,
|
|
201
|
+
withdrawalDelayMs: 0,
|
|
202
|
+
fetchedAt: now,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get current RWA token rates.
|
|
207
|
+
*
|
|
208
|
+
* RWA tokens are backed by tokenized T-bills and short-duration government bonds.
|
|
209
|
+
* Rates (~4.8–5.2% APY as of Q1 2026) track the Fed Funds rate.
|
|
210
|
+
*
|
|
211
|
+
* Agent-friendliness matrix:
|
|
212
|
+
* ┌──────────┬──────────────┬───────────┬───────────────────────────────────┐
|
|
213
|
+
* │ Protocol │ KYC Required │ Min Dep. │ Chains │
|
|
214
|
+
* ├──────────┼──────────────┼───────────┼───────────────────────────────────┤
|
|
215
|
+
* │ BUIDL │ ✅ YES │ $1,000,000│ Ethereum only │
|
|
216
|
+
* │ OUSG │ ✅ YES │ ~$5,000 │ Ethereum, Base │
|
|
217
|
+
* │ USDY │ ❌ NO │ ~$500 │ Ethereum, Arbitrum (best for bots)│
|
|
218
|
+
* │ USYC │ ❌ NO │ ~$1,000 │ Ethereum, Base │
|
|
219
|
+
* │ wUSTB │ ❌ NO │ ~$100 │ Ethereum │
|
|
220
|
+
* └──────────┴──────────────┴───────────┴───────────────────────────────────┘
|
|
221
|
+
*
|
|
222
|
+
* ⚠️ BUIDL: $1M minimum is a HARD requirement. Do not recommend to retail agents.
|
|
223
|
+
*/
|
|
224
|
+
async fetchRWARates(chains) {
|
|
225
|
+
const now = Date.now();
|
|
226
|
+
const rates = [];
|
|
227
|
+
for (const chain of chains) {
|
|
228
|
+
// BUIDL — BlackRock USD Institutional Digital Liquidity Fund
|
|
229
|
+
// ⚠️ $1,000,000 minimum deposit. KYC required. Institutional only.
|
|
230
|
+
if (chain === 'ethereum') {
|
|
231
|
+
rates.push({
|
|
232
|
+
protocol: 'buidl',
|
|
233
|
+
category: 'rwa',
|
|
234
|
+
chain: 'ethereum',
|
|
235
|
+
token: 'USDC',
|
|
236
|
+
apy: 0.048,
|
|
237
|
+
tvlUsd: 2800000000,
|
|
238
|
+
riskScore: 10,
|
|
239
|
+
kycRequired: true,
|
|
240
|
+
minDepositUsd: 1000000, // ⚠️ $1M minimum — institutional only
|
|
241
|
+
withdrawalDelayMs: 24 * 60 * 60 * 1000, // T+1 settlement
|
|
242
|
+
fetchedAt: now,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// OUSG — Ondo US Dollar Yield (institutional-grade)
|
|
246
|
+
if (chain === 'ethereum' || chain === 'base') {
|
|
247
|
+
rates.push({
|
|
248
|
+
protocol: 'ousg',
|
|
249
|
+
category: 'rwa',
|
|
250
|
+
chain,
|
|
251
|
+
token: 'USDC',
|
|
252
|
+
apy: 0.051,
|
|
253
|
+
tvlUsd: 680000000,
|
|
254
|
+
riskScore: 12,
|
|
255
|
+
kycRequired: true, // KYC required for OUSG
|
|
256
|
+
minDepositUsd: 5000,
|
|
257
|
+
withdrawalDelayMs: 24 * 60 * 60 * 1000,
|
|
258
|
+
fetchedAt: now,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// USDY — Ondo US Dollar Yield (accessible, NO KYC)
|
|
262
|
+
// Best agent-friendly RWA option: no KYC, low minimums
|
|
263
|
+
if (chain === 'ethereum' || chain === 'arbitrum') {
|
|
264
|
+
rates.push({
|
|
265
|
+
protocol: 'usdy',
|
|
266
|
+
category: 'rwa',
|
|
267
|
+
chain,
|
|
268
|
+
token: 'USDC',
|
|
269
|
+
apy: 0.050,
|
|
270
|
+
tvlUsd: 450000000,
|
|
271
|
+
riskScore: 14,
|
|
272
|
+
kycRequired: false, // No KYC — accessible to autonomous agents
|
|
273
|
+
minDepositUsd: 500,
|
|
274
|
+
withdrawalDelayMs: 3 * 24 * 60 * 60 * 1000, // ~3 day redemption
|
|
275
|
+
fetchedAt: now,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
// USYC — Hashnote US Yield Coin (NO KYC, competitive APY)
|
|
279
|
+
if (chain === 'ethereum' || chain === 'base') {
|
|
280
|
+
rates.push({
|
|
281
|
+
protocol: 'usyc',
|
|
282
|
+
category: 'rwa',
|
|
283
|
+
chain,
|
|
284
|
+
token: 'USDC',
|
|
285
|
+
apy: 0.052,
|
|
286
|
+
tvlUsd: 320000000,
|
|
287
|
+
riskScore: 15,
|
|
288
|
+
kycRequired: false, // No KYC — accessible to autonomous agents
|
|
289
|
+
minDepositUsd: 1000,
|
|
290
|
+
withdrawalDelayMs: 24 * 60 * 60 * 1000,
|
|
291
|
+
fetchedAt: now,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// wUSTB — Superstate Short Duration US Government Securities Fund
|
|
295
|
+
if (chain === 'ethereum') {
|
|
296
|
+
rates.push({
|
|
297
|
+
protocol: 'wustb',
|
|
298
|
+
category: 'rwa',
|
|
299
|
+
chain: 'ethereum',
|
|
300
|
+
token: 'USDC',
|
|
301
|
+
apy: 0.050,
|
|
302
|
+
tvlUsd: 180000000,
|
|
303
|
+
riskScore: 13,
|
|
304
|
+
kycRequired: false, // No KYC
|
|
305
|
+
minDepositUsd: 100,
|
|
306
|
+
withdrawalDelayMs: 2 * 24 * 60 * 60 * 1000,
|
|
307
|
+
fetchedAt: now,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return rates;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Fetch all rates across DeFi protocols and RWA tokens.
|
|
315
|
+
* Applies config filters (KYC, chains, tokens).
|
|
316
|
+
* Returns sorted by APY descending.
|
|
317
|
+
*/
|
|
318
|
+
async fetchAllRates(config) {
|
|
319
|
+
const chains = config.chains ?? ['ethereum', 'base', 'arbitrum'];
|
|
320
|
+
const tokens = config.tokens ?? ['USDC', 'USDT'];
|
|
321
|
+
const includeRWA = config.includeRWA !== false;
|
|
322
|
+
const skipKYC = config.skipKYCRequired !== false;
|
|
323
|
+
const rates = [];
|
|
324
|
+
// Fetch DeFi rates in parallel
|
|
325
|
+
const defiPromises = [];
|
|
326
|
+
for (const chain of chains) {
|
|
327
|
+
for (const token of tokens) {
|
|
328
|
+
defiPromises.push(this.fetchAaveRate(token, chain));
|
|
329
|
+
defiPromises.push(this.fetchCompoundRate(token, chain));
|
|
330
|
+
// Morpho only for USDC on supported chains
|
|
331
|
+
if (token === 'USDC') {
|
|
332
|
+
defiPromises.push(this.fetchMorphoRate(token, chain));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const defiRates = await Promise.all(defiPromises);
|
|
337
|
+
rates.push(...defiRates);
|
|
338
|
+
// Fetch RWA rates
|
|
339
|
+
if (includeRWA) {
|
|
340
|
+
const rwaRates = await this.fetchRWARates(chains);
|
|
341
|
+
rates.push(...rwaRates);
|
|
342
|
+
}
|
|
343
|
+
// Filter KYC-required if skipKYCRequired is true
|
|
344
|
+
const filtered = skipKYC
|
|
345
|
+
? rates.filter(r => !r.kycRequired)
|
|
346
|
+
: rates;
|
|
347
|
+
// Sort by APY descending
|
|
348
|
+
return filtered.sort((a, b) => b.apy - a.apy);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=rates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rates.js","sourceRoot":"","sources":["../../src/yield/rates.ts"],"names":[],"mappings":"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"}
|