agentwallet-sdk 5.0.5 → 5.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 +65 -30
- package/dist/ap2/index.d.ts +185 -0
- package/dist/ap2/index.d.ts.map +1 -0
- package/dist/ap2/index.js +255 -0
- package/dist/ap2/index.js.map +1 -0
- package/dist/bridge/unified.d.ts +101 -0
- package/dist/bridge/unified.d.ts.map +1 -0
- package/dist/bridge/unified.js +284 -0
- package/dist/bridge/unified.js.map +1 -0
- package/dist/chains.d.ts +62 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +108 -0
- package/dist/chains.js.map +1 -0
- 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 +29 -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/identity/agent-identity.d.ts +276 -0
- package/dist/identity/agent-identity.d.ts.map +1 -0
- package/dist/identity/agent-identity.js +300 -0
- package/dist/identity/agent-identity.js.map +1 -0
- package/dist/identity/email-resolver.d.ts +235 -0
- package/dist/identity/email-resolver.js +283 -0
- package/dist/identity/erc6551.d.ts +441 -0
- package/dist/identity/erc6551.d.ts.map +1 -0
- package/dist/identity/erc6551.js +517 -0
- package/dist/identity/erc6551.js.map +1 -0
- package/dist/index.d.ts +286 -213
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- 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 +8 -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/plugins/elizaos.d.ts +52 -0
- package/dist/plugins/elizaos.d.ts.map +1 -0
- package/dist/plugins/elizaos.js +89 -0
- package/dist/plugins/elizaos.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/solana/bridge.d.ts +144 -0
- package/dist/solana/bridge.d.ts.map +1 -0
- package/dist/solana/bridge.js +352 -0
- package/dist/solana/bridge.js.map +1 -0
- package/dist/solana/index.d.ts +8 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +6 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/swap.d.ts +85 -0
- package/dist/solana/swap.d.ts.map +1 -0
- package/dist/solana/swap.js +173 -0
- package/dist/solana/swap.js.map +1 -0
- package/dist/solana/types.d.ts +126 -0
- package/dist/solana/types.d.ts.map +1 -0
- package/dist/solana/types.js +10 -0
- package/dist/solana/types.js.map +1 -0
- package/dist/solana/wallet.d.ts +83 -0
- package/dist/solana/wallet.d.ts.map +1 -0
- package/dist/solana/wallet.js +164 -0
- package/dist/solana/wallet.js.map +1 -0
- package/dist/solana/x402.d.ts +69 -0
- package/dist/solana/x402.d.ts.map +1 -0
- package/dist/solana/x402.js +154 -0
- package/dist/solana/x402.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 +146 -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 +171 -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 +25 -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/spend-guard/index.d.ts +125 -0
- package/dist/spend-guard/index.d.ts.map +1 -0
- package/dist/spend-guard/index.js +150 -0
- package/dist/spend-guard/index.js.map +1 -0
- 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 +237 -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 +12 -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/verifiable-intent/index.d.ts +84 -0
- package/dist/verifiable-intent/index.js +385 -0
- package/dist/yield/index.d.ts +26 -0
- package/dist/yield/index.d.ts.map +1 -0
- package/dist/yield/index.js +29 -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 +3 -3
- package/LICENSE +0 -21
- package/dist/x402/chains/stellar/index.d.ts +0 -136
- package/dist/x402/chains/stellar/index.d.ts.map +0 -1
- package/dist/x402/chains/stellar/index.js +0 -190
- package/dist/x402/chains/stellar/index.js.map +0 -1
package/dist/mev/risk.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Popular tokens that are heavily watched by MEV bots */
|
|
2
|
+
const POPULAR_TOKENS = new Set([
|
|
3
|
+
'ETH', 'WETH', 'USDC', 'USDT', 'DAI', 'WBTC', 'SOL', 'WSOL',
|
|
4
|
+
]);
|
|
5
|
+
/** Deterministic MEV risk scorer — no external calls required */
|
|
6
|
+
export class MEVRiskAssessor {
|
|
7
|
+
/**
|
|
8
|
+
* Assess MEV risk for a proposed swap.
|
|
9
|
+
* Scoring model produces a 0-100 risk score mapped to a risk level.
|
|
10
|
+
*/
|
|
11
|
+
assess(params) {
|
|
12
|
+
const { fromToken, toToken, amountUsd, slippageBps, gasPriceGwei, chain } = params;
|
|
13
|
+
let score = 0;
|
|
14
|
+
// 1. Size risk
|
|
15
|
+
if (amountUsd >= 10000)
|
|
16
|
+
score += 40;
|
|
17
|
+
else if (amountUsd >= 1000)
|
|
18
|
+
score += 20;
|
|
19
|
+
else if (amountUsd >= 100)
|
|
20
|
+
score += 10;
|
|
21
|
+
// < $100 = 0 pts
|
|
22
|
+
// 2. Slippage risk (high slippage = easy sandwich)
|
|
23
|
+
if (slippageBps > 200)
|
|
24
|
+
score += 20;
|
|
25
|
+
else if (slippageBps >= 50)
|
|
26
|
+
score += 10;
|
|
27
|
+
// 3. Popular pair risk (heavily watched by bots)
|
|
28
|
+
if (this.isPopularPair(fromToken, toToken))
|
|
29
|
+
score += 15;
|
|
30
|
+
// 4. Gas spike risk (high gas = bots are active)
|
|
31
|
+
if (gasPriceGwei > 100)
|
|
32
|
+
score += 25;
|
|
33
|
+
else if (gasPriceGwei > 50)
|
|
34
|
+
score += 15;
|
|
35
|
+
// 5. Chain risk
|
|
36
|
+
const chainLower = chain.toLowerCase();
|
|
37
|
+
if (chainLower === 'ethereum' || chainLower === 'mainnet')
|
|
38
|
+
score += 10;
|
|
39
|
+
else if (chainLower === 'arbitrum')
|
|
40
|
+
score += 5;
|
|
41
|
+
else if (chainLower === 'base')
|
|
42
|
+
score += 3;
|
|
43
|
+
// Cap at 100
|
|
44
|
+
score = Math.min(100, score);
|
|
45
|
+
// Map score to risk level
|
|
46
|
+
let riskLevel;
|
|
47
|
+
if (score >= 76)
|
|
48
|
+
riskLevel = 'critical';
|
|
49
|
+
else if (score >= 51)
|
|
50
|
+
riskLevel = 'high';
|
|
51
|
+
else if (score >= 26)
|
|
52
|
+
riskLevel = 'medium';
|
|
53
|
+
else
|
|
54
|
+
riskLevel = 'low';
|
|
55
|
+
// Recommended method by risk level
|
|
56
|
+
let recommendedMethod;
|
|
57
|
+
if (riskLevel === 'critical')
|
|
58
|
+
recommendedMethod = 'flashbots-bundle';
|
|
59
|
+
else if (riskLevel === 'high')
|
|
60
|
+
recommendedMethod = 'flashbots-protect';
|
|
61
|
+
else if (riskLevel === 'medium')
|
|
62
|
+
recommendedMethod = 'private-rpc';
|
|
63
|
+
else
|
|
64
|
+
recommendedMethod = 'none';
|
|
65
|
+
// Estimated savings: risk-weighted sandwich loss model
|
|
66
|
+
// ~0.5-2% of swap size; simplified: amountUsd * riskScore/100 * 0.01
|
|
67
|
+
const estimatedSavingsUsd = amountUsd * (score / 100) * 0.01;
|
|
68
|
+
// Derive factor labels
|
|
69
|
+
const gasPrice = gasPriceGwei > 100 ? 'spike' :
|
|
70
|
+
gasPriceGwei > 50 ? 'high' :
|
|
71
|
+
gasPriceGwei > 20 ? 'normal' : 'low';
|
|
72
|
+
const tokenPairLiquidity = this.isPopularPair(fromToken, toToken) ? 'high' : 'low';
|
|
73
|
+
const marketVolatility = gasPriceGwei > 100 ? 'extreme' :
|
|
74
|
+
gasPriceGwei > 50 ? 'volatile' : 'stable';
|
|
75
|
+
return {
|
|
76
|
+
riskLevel,
|
|
77
|
+
riskScore: score,
|
|
78
|
+
factors: {
|
|
79
|
+
swapSizeUsd: amountUsd,
|
|
80
|
+
slippageBps,
|
|
81
|
+
tokenPairLiquidity,
|
|
82
|
+
marketVolatility,
|
|
83
|
+
gasPrice,
|
|
84
|
+
isPopularPair: this.isPopularPair(fromToken, toToken),
|
|
85
|
+
},
|
|
86
|
+
recommendedMethod,
|
|
87
|
+
estimatedSavingsUsd,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Check if a token pair is "popular" (highly watched by MEV bots) */
|
|
91
|
+
isPopularPair(fromToken, toToken) {
|
|
92
|
+
return POPULAR_TOKENS.has(fromToken.toUpperCase()) && POPULAR_TOKENS.has(toToken.toUpperCase());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=risk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/mev/risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type MEVRiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
2
|
+
export type ProtectionMethod = 'flashbots-protect' | 'flashbots-bundle' | 'cowswap-order' | 'private-rpc' | 'none';
|
|
3
|
+
export interface MEVRiskAssessment {
|
|
4
|
+
riskLevel: MEVRiskLevel;
|
|
5
|
+
riskScore: number;
|
|
6
|
+
factors: {
|
|
7
|
+
swapSizeUsd: number;
|
|
8
|
+
slippageBps: number;
|
|
9
|
+
tokenPairLiquidity: 'high' | 'medium' | 'low';
|
|
10
|
+
marketVolatility: 'stable' | 'volatile' | 'extreme';
|
|
11
|
+
gasPrice: 'low' | 'normal' | 'high' | 'spike';
|
|
12
|
+
isPopularPair: boolean;
|
|
13
|
+
};
|
|
14
|
+
recommendedMethod: ProtectionMethod;
|
|
15
|
+
estimatedSavingsUsd: number;
|
|
16
|
+
}
|
|
17
|
+
export interface MEVProtectionConfig {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
/** Risk threshold above which protection is auto-applied */
|
|
20
|
+
autoProtectAboveRisk?: MEVRiskLevel;
|
|
21
|
+
/** Flashbots RPC endpoint */
|
|
22
|
+
flashbotsRpcUrl?: string;
|
|
23
|
+
/** MEV Blocker RPC (alternative) */
|
|
24
|
+
mevBlockerRpcUrl?: string;
|
|
25
|
+
/** Max extra latency accepted for protection (ms) */
|
|
26
|
+
maxProtectionLatencyMs?: number;
|
|
27
|
+
/** Minimum swap USD value to trigger protection */
|
|
28
|
+
minSwapUsdForProtection?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ProtectedSwapResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
txHash?: string;
|
|
33
|
+
protectionMethod: ProtectionMethod;
|
|
34
|
+
bundleHash?: string;
|
|
35
|
+
riskAssessment: MEVRiskAssessment;
|
|
36
|
+
/** Gas saved vs public mempool (estimated) */
|
|
37
|
+
gasSavedGwei?: number;
|
|
38
|
+
/** MEV loss avoided (estimated USD) */
|
|
39
|
+
mevSavedUsd?: number;
|
|
40
|
+
blockNumber?: number;
|
|
41
|
+
latencyMs: number;
|
|
42
|
+
}
|
|
43
|
+
export interface FlashbotsBundle {
|
|
44
|
+
transactions: string[];
|
|
45
|
+
blockNumber: string;
|
|
46
|
+
minTimestamp?: number;
|
|
47
|
+
maxTimestamp?: number;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mev/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,kBAAkB,GAClB,eAAe,GACf,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAC9C,gBAAgB,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;QACpD,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAC9C,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,YAAY,CAAC;IACpC,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,iBAAiB,CAAC;IAClC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mev/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @elizaos/plugin-agentwallet
|
|
3
|
+
*
|
|
4
|
+
* ElizaOS plugin for agentwallet-sdk — non-custodial AI agent wallet with
|
|
5
|
+
* x402 payment support, CCTP V2 cross-chain transfers, and on-chain spend limits.
|
|
6
|
+
*
|
|
7
|
+
* Your agent holds its own private key. No custodian. No KYC.
|
|
8
|
+
*/
|
|
9
|
+
import type { Plugin } from '@elizaos/core';
|
|
10
|
+
import { createWallet } from '../index.js';
|
|
11
|
+
type AgentWallet = ReturnType<typeof createWallet>;
|
|
12
|
+
export interface AgentWalletPluginConfig {
|
|
13
|
+
/** Agent private key — stays in your environment, never transmitted */
|
|
14
|
+
privateKey: `0x${string}`;
|
|
15
|
+
/** Deployed AgentAccountV2 contract address */
|
|
16
|
+
accountAddress: `0x${string}`;
|
|
17
|
+
/** Chain to connect to (default: 'base') */
|
|
18
|
+
chain?: 'base' | 'base-sepolia' | 'ethereum' | 'arbitrum' | 'polygon' | 'etherlink';
|
|
19
|
+
/** Optional custom RPC URL */
|
|
20
|
+
rpcUrl?: string;
|
|
21
|
+
/** Optional daily x402 spend limit in USDC base units (default: 50 USDC = 50_000_000n) */
|
|
22
|
+
x402DailyLimit?: bigint;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get or create the agent wallet singleton.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAgentWallet(config: AgentWalletPluginConfig): AgentWallet;
|
|
28
|
+
/**
|
|
29
|
+
* Create an x402-enabled fetch function for the agent to pay APIs automatically.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createAgentFetch(config: AgentWalletPluginConfig): typeof fetch;
|
|
32
|
+
/**
|
|
33
|
+
* ElizaOS Plugin definition for agentwallet-sdk.
|
|
34
|
+
*
|
|
35
|
+
* Usage in your Eliza character config:
|
|
36
|
+
*
|
|
37
|
+
* ```json
|
|
38
|
+
* {
|
|
39
|
+
* "plugins": ["@elizaos/plugin-agentwallet"],
|
|
40
|
+
* "settings": {
|
|
41
|
+
* "AGENT_PRIVATE_KEY": "0x...",
|
|
42
|
+
* "AGENT_ACCOUNT_ADDRESS": "0x...",
|
|
43
|
+
* "AGENT_CHAIN": "base",
|
|
44
|
+
* "X402_DAILY_LIMIT": "50000000"
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
declare const AgentWalletPlugin: Plugin;
|
|
50
|
+
export default AgentWalletPlugin;
|
|
51
|
+
export { AgentWalletPlugin };
|
|
52
|
+
//# sourceMappingURL=elizaos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elizaos.d.ts","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,YAAY,EAGb,MAAM,aAAa,CAAC;AAGrB,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAInD,MAAM,WAAW,uBAAuB;IACtC,uEAAuE;IACvE,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IACpF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,CAuB3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,gBAK/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,iBAAiB,EAAE,MAiCxB,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createWallet, createX402Fetch, } from '../index.js';
|
|
2
|
+
import { createWalletClient, http } from 'viem';
|
|
3
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
|
4
|
+
let walletInstance = null;
|
|
5
|
+
/**
|
|
6
|
+
* Get or create the agent wallet singleton.
|
|
7
|
+
*/
|
|
8
|
+
export function getAgentWallet(config) {
|
|
9
|
+
if (!walletInstance) {
|
|
10
|
+
const account = privateKeyToAccount(config.privateKey);
|
|
11
|
+
const rpcUrls = {
|
|
12
|
+
base: 'https://mainnet.base.org',
|
|
13
|
+
'base-sepolia': 'https://sepolia.base.org',
|
|
14
|
+
ethereum: 'https://eth.llamarpc.com',
|
|
15
|
+
arbitrum: 'https://arb1.arbitrum.io/rpc',
|
|
16
|
+
polygon: 'https://polygon-rpc.com',
|
|
17
|
+
etherlink: 'https://node.mainnet.etherlink.com',
|
|
18
|
+
};
|
|
19
|
+
const chain = config.chain ?? 'base';
|
|
20
|
+
const walletClient = createWalletClient({
|
|
21
|
+
account,
|
|
22
|
+
transport: http(config.rpcUrl ?? rpcUrls[chain] ?? rpcUrls.base),
|
|
23
|
+
});
|
|
24
|
+
walletInstance = createWallet({
|
|
25
|
+
accountAddress: config.accountAddress,
|
|
26
|
+
chain,
|
|
27
|
+
walletClient,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return walletInstance;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create an x402-enabled fetch function for the agent to pay APIs automatically.
|
|
34
|
+
*/
|
|
35
|
+
export function createAgentFetch(config) {
|
|
36
|
+
const wallet = getAgentWallet(config);
|
|
37
|
+
return createX402Fetch(wallet, {
|
|
38
|
+
globalDailyLimit: config.x402DailyLimit ?? 50000000n, // 50 USDC default
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* ElizaOS Plugin definition for agentwallet-sdk.
|
|
43
|
+
*
|
|
44
|
+
* Usage in your Eliza character config:
|
|
45
|
+
*
|
|
46
|
+
* ```json
|
|
47
|
+
* {
|
|
48
|
+
* "plugins": ["@elizaos/plugin-agentwallet"],
|
|
49
|
+
* "settings": {
|
|
50
|
+
* "AGENT_PRIVATE_KEY": "0x...",
|
|
51
|
+
* "AGENT_ACCOUNT_ADDRESS": "0x...",
|
|
52
|
+
* "AGENT_CHAIN": "base",
|
|
53
|
+
* "X402_DAILY_LIMIT": "50000000"
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
const AgentWalletPlugin = {
|
|
59
|
+
name: '@elizaos/plugin-agentwallet',
|
|
60
|
+
description: 'Non-custodial agent wallet for ElizaOS — x402 payments, CCTP cross-chain, on-chain spend limits. Agent holds its own keys.',
|
|
61
|
+
actions: [],
|
|
62
|
+
providers: [
|
|
63
|
+
{
|
|
64
|
+
name: 'agentWallet',
|
|
65
|
+
description: 'Provides agent wallet and x402 fetch capability to the runtime',
|
|
66
|
+
async get(runtime) {
|
|
67
|
+
const privateKey = runtime.getSetting('AGENT_PRIVATE_KEY');
|
|
68
|
+
const accountAddress = runtime.getSetting('AGENT_ACCOUNT_ADDRESS');
|
|
69
|
+
const chain = (runtime.getSetting('AGENT_CHAIN') ?? 'base');
|
|
70
|
+
const dailyLimitStr = runtime.getSetting('X402_DAILY_LIMIT');
|
|
71
|
+
const x402DailyLimit = dailyLimitStr ? BigInt(dailyLimitStr) : 50000000n;
|
|
72
|
+
if (!privateKey || !accountAddress) {
|
|
73
|
+
return 'AgentWallet not configured: AGENT_PRIVATE_KEY and AGENT_ACCOUNT_ADDRESS required.';
|
|
74
|
+
}
|
|
75
|
+
const config = { privateKey, accountAddress, chain, x402DailyLimit };
|
|
76
|
+
const wallet = getAgentWallet(config);
|
|
77
|
+
const x402Fetch = createAgentFetch(config);
|
|
78
|
+
// Expose on runtime for actions to use
|
|
79
|
+
runtime.agentWallet = wallet;
|
|
80
|
+
runtime.x402Fetch = x402Fetch;
|
|
81
|
+
return `AgentWallet ready — non-custodial, keys stay local. Chain: ${chain}. x402 daily limit: ${x402DailyLimit / 1000000n} USDC.`;
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
evaluators: [],
|
|
86
|
+
};
|
|
87
|
+
export default AgentWalletPlugin;
|
|
88
|
+
export { AgentWalletPlugin };
|
|
89
|
+
//# sourceMappingURL=elizaos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elizaos.js","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { SettlementVerifier } from './verifier.js';
|
|
2
|
+
export type { SettlementVerifierConfig, SettlementStatus, SettlementResult, BridgeSettlementResult, BridgeSettlementStatus, PaymentSettlementResult, } from './types.js';
|
|
3
|
+
export { SETTLEMENT_ALCHEMY_NETWORKS, SETTLEMENT_PUBLIC_RPCS, CIRCLE_ATTESTATION_API, ERC20_TRANSFER_TOPIC, SOLANA_RPC_URL, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settlement/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EACV,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settlement/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AASnD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface SettlementVerifierConfig {
|
|
2
|
+
/** Alchemy API key (optional — falls back to public RPC if not provided) */
|
|
3
|
+
alchemyApiKey?: string;
|
|
4
|
+
}
|
|
5
|
+
/** Status of an on-chain settlement */
|
|
6
|
+
export type SettlementStatus = 'confirmed' | 'pending' | 'failed' | 'not_found';
|
|
7
|
+
/** Result of verifying a single transaction */
|
|
8
|
+
export interface SettlementResult {
|
|
9
|
+
status: SettlementStatus;
|
|
10
|
+
txHash: string;
|
|
11
|
+
/** Block number where the tx was included (0 if pending/not found) */
|
|
12
|
+
blockNumber: bigint;
|
|
13
|
+
/** Number of confirmations at query time */
|
|
14
|
+
confirmations: number;
|
|
15
|
+
/** Gas used by the transaction */
|
|
16
|
+
gasUsed?: bigint;
|
|
17
|
+
/** Whether the tx succeeded (status=1) or reverted (status=0) */
|
|
18
|
+
success?: boolean;
|
|
19
|
+
/** Any error message if verification failed */
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Result of verifying a CCTP bridge transfer end-to-end */
|
|
23
|
+
export interface BridgeSettlementResult {
|
|
24
|
+
/** Overall bridge status */
|
|
25
|
+
status: BridgeSettlementStatus;
|
|
26
|
+
/** Source chain burn transaction */
|
|
27
|
+
sourceTx: SettlementResult;
|
|
28
|
+
/** Destination chain mint transaction (if found) */
|
|
29
|
+
destinationTx?: SettlementResult;
|
|
30
|
+
/** Circle attestation status */
|
|
31
|
+
attestationStatus?: 'pending_confirmations' | 'complete' | 'error';
|
|
32
|
+
/** Amount that was bridged (from source tx logs) */
|
|
33
|
+
amount?: bigint;
|
|
34
|
+
/** Destination address that received funds */
|
|
35
|
+
recipient?: string;
|
|
36
|
+
/** Any error or warning messages */
|
|
37
|
+
error?: string;
|
|
38
|
+
}
|
|
39
|
+
export type BridgeSettlementStatus = 'source_confirmed_awaiting_attestation' | 'attestation_complete_awaiting_mint' | 'complete' | 'source_failed' | 'source_pending' | 'not_found' | 'error';
|
|
40
|
+
/** Result of verifying an x402 payment */
|
|
41
|
+
export interface PaymentSettlementResult {
|
|
42
|
+
status: SettlementStatus;
|
|
43
|
+
txHash: string;
|
|
44
|
+
/** Whether the payment went to the expected payee */
|
|
45
|
+
payeeVerified: boolean;
|
|
46
|
+
/** Whether the amount matches */
|
|
47
|
+
amountVerified: boolean;
|
|
48
|
+
/** Actual amount transferred (from event logs) */
|
|
49
|
+
actualAmount?: bigint;
|
|
50
|
+
/** Actual payee address (from event logs) */
|
|
51
|
+
actualPayee?: string;
|
|
52
|
+
/** Token contract address */
|
|
53
|
+
tokenAddress?: string;
|
|
54
|
+
error?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Alchemy network slugs for settlement verification (subset: EVM chains with Alchemy support) */
|
|
57
|
+
export declare const SETTLEMENT_ALCHEMY_NETWORKS: Record<string, string>;
|
|
58
|
+
/** Public RPC fallbacks for chains without Alchemy Gas Manager support */
|
|
59
|
+
export declare const SETTLEMENT_PUBLIC_RPCS: Record<string, string>;
|
|
60
|
+
/** Circle CCTP attestation API base URL */
|
|
61
|
+
export declare const CIRCLE_ATTESTATION_API = "https://iris-api.circle.com/attestations";
|
|
62
|
+
/** ERC20 Transfer event topic: keccak256("Transfer(address,address,uint256)") */
|
|
63
|
+
export declare const ERC20_TRANSFER_TOPIC = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
|
|
64
|
+
/** Solana RPC endpoint */
|
|
65
|
+
export declare const SOLANA_RPC_URL = "https://api.mainnet-beta.solana.com";
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/settlement/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uCAAuC;AACvC,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEhF,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,uBAAuB,GAAG,UAAU,GAAG,OAAO,CAAC;IACnE,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,sBAAsB,GAC9B,uCAAuC,GACvC,oCAAoC,GACpC,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,WAAW,GACX,OAAO,CAAC;AAEZ,0CAA0C;AAC1C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,aAAa,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kGAAkG;AAClG,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO9D,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiBzD,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,uEACqC,CAAC;AAEvE,0BAA0B;AAC1B,eAAO,MAAM,cAAc,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Settlement Verification — Types
|
|
2
|
+
// Verify that transactions, bridge transfers, and x402 payments actually settled on-chain.
|
|
3
|
+
/** Alchemy network slugs for settlement verification (subset: EVM chains with Alchemy support) */
|
|
4
|
+
export const SETTLEMENT_ALCHEMY_NETWORKS = {
|
|
5
|
+
ethereum: 'eth-mainnet',
|
|
6
|
+
base: 'base-mainnet',
|
|
7
|
+
arbitrum: 'arb-mainnet',
|
|
8
|
+
optimism: 'opt-mainnet',
|
|
9
|
+
polygon: 'polygon-mainnet',
|
|
10
|
+
worldchain: 'worldchain-mainnet',
|
|
11
|
+
};
|
|
12
|
+
/** Public RPC fallbacks for chains without Alchemy Gas Manager support */
|
|
13
|
+
export const SETTLEMENT_PUBLIC_RPCS = {
|
|
14
|
+
ethereum: 'https://eth.llamarpc.com',
|
|
15
|
+
base: 'https://mainnet.base.org',
|
|
16
|
+
arbitrum: 'https://arb1.arbitrum.io/rpc',
|
|
17
|
+
optimism: 'https://mainnet.optimism.io',
|
|
18
|
+
polygon: 'https://polygon-rpc.com',
|
|
19
|
+
worldchain: 'https://worldchain-mainnet.g.alchemy.com/public',
|
|
20
|
+
avalanche: 'https://api.avax.network/ext/bc/C/rpc',
|
|
21
|
+
unichain: 'https://mainnet.unichain.org',
|
|
22
|
+
linea: 'https://rpc.linea.build',
|
|
23
|
+
sonic: 'https://rpc.soniclabs.com',
|
|
24
|
+
sei: 'https://evm-rpc.sei-apis.com',
|
|
25
|
+
ink: 'https://rpc-gel.inkonchain.com',
|
|
26
|
+
hyperevm: 'https://rpc.hyperliquid.xyz/evm',
|
|
27
|
+
plume: 'https://rpc.plumenetwork.xyz',
|
|
28
|
+
xdc: 'https://rpc.xinfin.network',
|
|
29
|
+
codex: 'https://rpc.codex.storage',
|
|
30
|
+
};
|
|
31
|
+
/** Circle CCTP attestation API base URL */
|
|
32
|
+
export const CIRCLE_ATTESTATION_API = 'https://iris-api.circle.com/attestations';
|
|
33
|
+
/** ERC20 Transfer event topic: keccak256("Transfer(address,address,uint256)") */
|
|
34
|
+
export const ERC20_TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
35
|
+
/** Solana RPC endpoint */
|
|
36
|
+
export const SOLANA_RPC_URL = 'https://api.mainnet-beta.solana.com';
|
|
37
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/settlement/types.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,2FAA2F;AAsE3F,kGAAkG;AAClG,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,oBAAoB;CACjC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,QAAQ,EAAE,0BAA0B;IACpC,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,8BAA8B;IACxC,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,yBAAyB;IAClC,UAAU,EAAE,iDAAiD;IAC7D,SAAS,EAAE,uCAAuC;IAClD,QAAQ,EAAE,8BAA8B;IACxC,KAAK,EAAE,yBAAyB;IAChC,KAAK,EAAE,2BAA2B;IAClC,GAAG,EAAE,8BAA8B;IACnC,GAAG,EAAE,gCAAgC;IACrC,QAAQ,EAAE,iCAAiC;IAC3C,KAAK,EAAE,8BAA8B;IACrC,GAAG,EAAE,4BAA4B;IACjC,KAAK,EAAE,2BAA2B;CACnC,CAAC;AAEF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,0CAA0C,CAAC;AAEjF,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,oEAAoE,CAAC;AAEvE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { SettlementVerifierConfig, SettlementResult, BridgeSettlementResult, PaymentSettlementResult } from './types.js';
|
|
2
|
+
export declare class SettlementVerifier {
|
|
3
|
+
private readonly alchemyApiKey;
|
|
4
|
+
constructor(config?: SettlementVerifierConfig);
|
|
5
|
+
/**
|
|
6
|
+
* Verify that an EVM transaction settled on-chain.
|
|
7
|
+
*
|
|
8
|
+
* Uses Alchemy RPC if apiKey is configured and chain is supported,
|
|
9
|
+
* otherwise falls back to public RPCs.
|
|
10
|
+
*
|
|
11
|
+
* @param params.chain - SDK chain name (e.g. 'base', 'arbitrum')
|
|
12
|
+
* @param params.txHash - Transaction hash to verify
|
|
13
|
+
* @param params.confirmations - Minimum confirmations required (default: 1)
|
|
14
|
+
*/
|
|
15
|
+
verifyEvmTransaction(params: {
|
|
16
|
+
chain: string;
|
|
17
|
+
txHash: string;
|
|
18
|
+
confirmations?: number;
|
|
19
|
+
}): Promise<SettlementResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Verify that a Solana transaction settled on-chain.
|
|
22
|
+
*
|
|
23
|
+
* @param params.signature - Solana transaction signature (base58)
|
|
24
|
+
* @param params.commitment - Commitment level: 'confirmed' or 'finalized' (default: 'confirmed')
|
|
25
|
+
*/
|
|
26
|
+
verifySolanaTransaction(params: {
|
|
27
|
+
signature: string;
|
|
28
|
+
commitment?: 'confirmed' | 'finalized';
|
|
29
|
+
}): Promise<SettlementResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Verify a CCTP bridge transfer settled end-to-end:
|
|
32
|
+
* 1. Verifies source chain burn tx succeeded
|
|
33
|
+
* 2. Checks Circle attestation API for the message hash
|
|
34
|
+
* 3. Attempts to find destination mint tx (if attestation is complete)
|
|
35
|
+
*
|
|
36
|
+
* @param params.sourceTxHash - Burn tx hash on source chain
|
|
37
|
+
* @param params.sourceChain - Source chain name (e.g. 'solana', 'base')
|
|
38
|
+
* @param params.destinationChain - Destination chain name
|
|
39
|
+
* @param params.expectedAmount - Expected USDC amount in base units (6 decimals)
|
|
40
|
+
*/
|
|
41
|
+
verifyBridgeSettlement(params: {
|
|
42
|
+
sourceTxHash: string;
|
|
43
|
+
sourceChain: string;
|
|
44
|
+
destinationChain: string;
|
|
45
|
+
expectedAmount: bigint;
|
|
46
|
+
}): Promise<BridgeSettlementResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Verify an x402 payment settled on-chain by inspecting ERC20 Transfer event logs.
|
|
49
|
+
*
|
|
50
|
+
* Checks that the tx:
|
|
51
|
+
* - Succeeded (status=1)
|
|
52
|
+
* - Emitted an ERC20 Transfer event to expectedPayee
|
|
53
|
+
* - The transferred amount matches expectedAmount
|
|
54
|
+
*
|
|
55
|
+
* @param params.chain - EVM chain name
|
|
56
|
+
* @param params.txHash - Transaction hash
|
|
57
|
+
* @param params.expectedPayee - Address that should have received the payment
|
|
58
|
+
* @param params.expectedAmount - Amount in USDC base units (6 decimals)
|
|
59
|
+
*/
|
|
60
|
+
verifyX402Payment(params: {
|
|
61
|
+
chain: string;
|
|
62
|
+
txHash: string;
|
|
63
|
+
expectedPayee: string;
|
|
64
|
+
expectedAmount: bigint;
|
|
65
|
+
}): Promise<PaymentSettlementResult>;
|
|
66
|
+
/** Get the RPC URL for a chain, preferring Alchemy over public RPCs */
|
|
67
|
+
private _getRpcUrl;
|
|
68
|
+
/** Make an EVM JSON-RPC call */
|
|
69
|
+
private _evmRpc;
|
|
70
|
+
/** Make a Solana JSON-RPC call */
|
|
71
|
+
private _solanaRpc;
|
|
72
|
+
/** Check Circle attestation API for a CCTP burn message */
|
|
73
|
+
private _checkCircleAttestation;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/settlement/verifier.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AASpB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;gBAEvC,MAAM,GAAE,wBAA6B;IAMjD;;;;;;;;;OASG;IACG,oBAAoB,CAAC,MAAM,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2E7B;;;;;OAKG;IACG,uBAAuB,CAAC,MAAM,EAAE;QACpC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;KACxC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqD7B;;;;;;;;;;OAUG;IACG,sBAAsB,CAAC,MAAM,EAAE;QACnC,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkEnC;;;;;;;;;;;;OAYG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqFpC,uEAAuE;IACvE,OAAO,CAAC,UAAU;IAYlB,gCAAgC;YAClB,OAAO;IAoBrB,kCAAkC;YACpB,UAAU;IAmBxB,2DAA2D;YAC7C,uBAAuB;CA0BtC"}
|