agentwallet-sdk 5.0.3 → 5.0.4
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 +11 -32
- package/dist/index.d.ts +213 -284
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- 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 -29
- 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 -8
- 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 -146
- 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 -171
- 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 -25
- 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 -237
- 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 -12
- 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/verifiable-intent/index.d.ts +0 -84
- package/dist/verifiable-intent/index.js +0 -385
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -29
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/dist/solana/x402.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] Solana x402 payment support — handles 'solana:mainnet' network in x402 offers.
|
|
2
|
-
// SPL token (USDC) payment signing + proof construction, compatible with x402 protocol spec.
|
|
3
|
-
import { PublicKey, Transaction, SystemProgram, } from '@solana/web3.js';
|
|
4
|
-
import { getAssociatedTokenAddress, createTransferInstruction, } from '@solana/spl-token';
|
|
5
|
-
import { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT, SOL_NATIVE_MINT } from './types.js';
|
|
6
|
-
/** x402 version this client implements */
|
|
7
|
-
const X402_VERSION = 1;
|
|
8
|
-
/** Default USDC mint per network */
|
|
9
|
-
export const SOLANA_NETWORK_USDC = {
|
|
10
|
-
'solana:mainnet': SOLANA_USDC_MINT,
|
|
11
|
-
'solana:devnet': SOLANA_USDC_DEVNET_MINT,
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* SolanaX402Client — handles x402 payment flows on Solana.
|
|
15
|
-
*
|
|
16
|
-
* Flow:
|
|
17
|
-
* 1. Receive x402 PaymentRequired with network='solana:mainnet'
|
|
18
|
-
* 2. Build an SPL token transfer transaction (USDC → payTo)
|
|
19
|
-
* 3. Sign with agent's Ed25519 keypair
|
|
20
|
-
* 4. Return base64-serialized signed tx as payment proof
|
|
21
|
-
* 5. Optionally broadcast and return tx signature
|
|
22
|
-
*
|
|
23
|
-
* Non-custodial: private key never leaves the SolanaWallet instance.
|
|
24
|
-
*/
|
|
25
|
-
export class SolanaX402Client {
|
|
26
|
-
constructor(wallet) {
|
|
27
|
-
this.wallet = wallet;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Determine if this client can handle a given x402 network string.
|
|
31
|
-
*/
|
|
32
|
-
canHandle(network) {
|
|
33
|
-
return network === 'solana:mainnet' || network === 'solana:devnet';
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Build and sign a USDC SPL token payment for x402.
|
|
37
|
-
*
|
|
38
|
-
* Does NOT broadcast — returns signed tx as base64 for the caller to submit.
|
|
39
|
-
* This matches the x402 pattern where the client returns a payment proof
|
|
40
|
-
* that the facilitator can verify and then settle.
|
|
41
|
-
*
|
|
42
|
-
* @param requirements - Payment requirements from the x402 402 response
|
|
43
|
-
* @returns SolanaX402PaymentProof with signed transaction
|
|
44
|
-
*/
|
|
45
|
-
async buildPaymentProof(requirements) {
|
|
46
|
-
if (!this.canHandle(requirements.network)) {
|
|
47
|
-
throw new Error(`SolanaX402Client cannot handle network: ${requirements.network}. ` +
|
|
48
|
-
`Supported: solana:mainnet, solana:devnet`);
|
|
49
|
-
}
|
|
50
|
-
const amount = BigInt(requirements.amount);
|
|
51
|
-
if (amount <= 0n) {
|
|
52
|
-
throw new Error(`Invalid x402 payment amount: ${requirements.amount}`);
|
|
53
|
-
}
|
|
54
|
-
const mint = requirements.asset;
|
|
55
|
-
const recipient = new PublicKey(requirements.payTo);
|
|
56
|
-
const sender = this.wallet.getPublicKey();
|
|
57
|
-
const connection = this.wallet.getConnection();
|
|
58
|
-
// Build the SPL transfer transaction
|
|
59
|
-
const tx = new Transaction();
|
|
60
|
-
if (mint === SOL_NATIVE_MINT) {
|
|
61
|
-
// Native SOL payment
|
|
62
|
-
tx.add(SystemProgram.transfer({
|
|
63
|
-
fromPubkey: sender,
|
|
64
|
-
toPubkey: recipient,
|
|
65
|
-
lamports: Number(amount),
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
// SPL token payment (USDC or other)
|
|
70
|
-
const mintPubkey = new PublicKey(mint);
|
|
71
|
-
const senderAta = await getAssociatedTokenAddress(mintPubkey, sender);
|
|
72
|
-
const recipientAta = await getAssociatedTokenAddress(mintPubkey, recipient);
|
|
73
|
-
tx.add(createTransferInstruction(senderAta, recipientAta, sender, Number(amount)));
|
|
74
|
-
}
|
|
75
|
-
// Sign the transaction (with blockhash for validity)
|
|
76
|
-
const signedTxBase64 = await this.wallet.signTransactionBase64(tx);
|
|
77
|
-
return {
|
|
78
|
-
x402Version: X402_VERSION,
|
|
79
|
-
network: requirements.network,
|
|
80
|
-
mint,
|
|
81
|
-
recipient: requirements.payTo,
|
|
82
|
-
amount: requirements.amount,
|
|
83
|
-
sender: this.wallet.getAddress(),
|
|
84
|
-
signedTransaction: signedTxBase64,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Build payment proof AND broadcast the transaction to Solana.
|
|
89
|
-
* Returns the proof enriched with the on-chain tx signature.
|
|
90
|
-
*
|
|
91
|
-
* @param requirements - Payment requirements from 402 response
|
|
92
|
-
* @returns SolanaX402PaymentProof with txSignature populated
|
|
93
|
-
*/
|
|
94
|
-
async pay(requirements) {
|
|
95
|
-
const proof = await this.buildPaymentProof(requirements);
|
|
96
|
-
// Broadcast
|
|
97
|
-
const txSignature = await this.wallet.transfer({
|
|
98
|
-
recipient: requirements.payTo,
|
|
99
|
-
amount: BigInt(requirements.amount),
|
|
100
|
-
mint: requirements.asset !== SOL_NATIVE_MINT ? requirements.asset : undefined,
|
|
101
|
-
});
|
|
102
|
-
return { ...proof, txSignature };
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Validate that payment requirements are acceptable before paying.
|
|
106
|
-
*
|
|
107
|
-
* Checks:
|
|
108
|
-
* - Network is Solana (mainnet or devnet)
|
|
109
|
-
* - Asset is USDC or native SOL
|
|
110
|
-
* - Amount > 0
|
|
111
|
-
* - maxTimeoutSeconds is reasonable
|
|
112
|
-
*/
|
|
113
|
-
validateRequirements(requirements, options = {}) {
|
|
114
|
-
if (!this.canHandle(requirements.network)) {
|
|
115
|
-
return { valid: false, reason: `Unsupported network: ${requirements.network}` };
|
|
116
|
-
}
|
|
117
|
-
const amount = BigInt(requirements.amount);
|
|
118
|
-
if (amount <= 0n) {
|
|
119
|
-
return { valid: false, reason: 'Amount must be > 0' };
|
|
120
|
-
}
|
|
121
|
-
if (options.maxAmount !== undefined && amount > options.maxAmount) {
|
|
122
|
-
return {
|
|
123
|
-
valid: false,
|
|
124
|
-
reason: `Amount ${amount} exceeds max allowed ${options.maxAmount}`,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
const expectedUsdc = SOLANA_NETWORK_USDC[requirements.network];
|
|
128
|
-
const allowedMints = options.allowedMints ?? [expectedUsdc, SOL_NATIVE_MINT];
|
|
129
|
-
if (!allowedMints.includes(requirements.asset)) {
|
|
130
|
-
return {
|
|
131
|
-
valid: false,
|
|
132
|
-
reason: `Asset ${requirements.asset} not in allowed mints: ${allowedMints.join(', ')}`,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
if (requirements.maxTimeoutSeconds <= 0) {
|
|
136
|
-
return { valid: false, reason: 'maxTimeoutSeconds must be > 0' };
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
new PublicKey(requirements.payTo);
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
return { valid: false, reason: `Invalid recipient public key: ${requirements.payTo}` };
|
|
143
|
-
}
|
|
144
|
-
return { valid: true };
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Factory: create a SolanaX402Client from a SolanaWallet.
|
|
149
|
-
*/
|
|
150
|
-
export function createSolanaX402Client(wallet) {
|
|
151
|
-
return new SolanaX402Client(wallet);
|
|
152
|
-
}
|
|
153
|
-
export { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT };
|
|
154
|
-
//# sourceMappingURL=x402.js.map
|
package/dist/solana/x402.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"x402.js","sourceRoot":"","sources":["../../src/solana/x402.ts"],"names":[],"mappings":"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"}
|
package/dist/solver/adapter.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CowSolverAdapter — Main entry point for the CowSwap solver integration.
|
|
3
|
-
*
|
|
4
|
-
* ⚠️ IMPORTANT: Shadow competition is FREE and requires no registration or KYC.
|
|
5
|
-
* Production solver requires CowSwap DAO bonding pool approval and KYC.
|
|
6
|
-
* This adapter defaults to 'shadow' mode — never assume production credentials.
|
|
7
|
-
*
|
|
8
|
-
* Flow:
|
|
9
|
-
* 1. CowSwap broadcasts an auction batch to all registered solvers.
|
|
10
|
-
* 2. We call processAuction() — must return within ~30 seconds.
|
|
11
|
-
* 3. We detect CoW (Coincidence of Wants) first — zero DEX fees.
|
|
12
|
-
* 4. Remaining orders are routed through SmartSwapRouter (7 DEXes in parallel).
|
|
13
|
-
* 5. We call submitSolution() with the best settlement we can construct.
|
|
14
|
-
* 6. If we win, we earn the surplus above user limit prices.
|
|
15
|
-
*/
|
|
16
|
-
import type { SmartSwapRouter } from '../swap/router/router.js';
|
|
17
|
-
import type { CowAuctionBatch, SolverConfig, SolverSolution, SolverStats, SolutionSubmissionResult } from './types.js';
|
|
18
|
-
export declare class CowSolverAdapter {
|
|
19
|
-
private config;
|
|
20
|
-
private analyzer;
|
|
21
|
-
private builder;
|
|
22
|
-
private stats;
|
|
23
|
-
/** CowSwap competition API endpoints */
|
|
24
|
-
private readonly ENDPOINTS;
|
|
25
|
-
constructor(config: SolverConfig, router?: SmartSwapRouter);
|
|
26
|
-
/**
|
|
27
|
-
* Process an auction batch and return our best settlement solution.
|
|
28
|
-
*
|
|
29
|
-
* Called when CowSwap sends us an auction. Must respond within 30 seconds.
|
|
30
|
-
* Returns null if we have nothing viable to submit.
|
|
31
|
-
*/
|
|
32
|
-
processAuction(batch: CowAuctionBatch): Promise<SolverSolution | null>;
|
|
33
|
-
/**
|
|
34
|
-
* Submit a solution to CowSwap.
|
|
35
|
-
*
|
|
36
|
-
* In shadow mode, the solution is evaluated but never executed on-chain —
|
|
37
|
-
* useful for measuring competitiveness before applying for the production
|
|
38
|
-
* bonding pool.
|
|
39
|
-
*/
|
|
40
|
-
submitSolution(solution: SolverSolution): Promise<SolutionSubmissionResult>;
|
|
41
|
-
/** Get current solver performance statistics */
|
|
42
|
-
getStats(): SolverStats;
|
|
43
|
-
/** Get the CowSwap API base URL for the configured environment */
|
|
44
|
-
getApiUrl(): string;
|
|
45
|
-
private getChainId;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/solver/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAIpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAc;IAE3B,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAIxB;gBAEU,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,eAAe;IAyB1D;;;;;OAKG;IACG,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAmD5E;;;;;;OAMG;IACG,cAAc,CAClB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,wBAAwB,CAAC;IAgDpC,gDAAgD;IAChD,QAAQ,IAAI,WAAW;IAIvB,kEAAkE;IAClE,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,UAAU;CASnB"}
|
package/dist/solver/adapter.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { AuctionAnalyzer } from './analyzer.js';
|
|
2
|
-
import { SolutionBuilder } from './builder.js';
|
|
3
|
-
export class CowSolverAdapter {
|
|
4
|
-
constructor(config, router) {
|
|
5
|
-
/** CowSwap competition API endpoints */
|
|
6
|
-
this.ENDPOINTS = {
|
|
7
|
-
shadow: 'https://api.cow.fi/mainnet/api/v1/solver_competition',
|
|
8
|
-
staging: 'https://barn.api.cow.fi/mainnet/api/v1/solver_competition',
|
|
9
|
-
mainnet: 'https://api.cow.fi/mainnet/api/v1/solver_competition',
|
|
10
|
-
};
|
|
11
|
-
// Optional custom fetch (e.g. SOCKS proxy-aware) — falls back to global fetch
|
|
12
|
-
this.fetchFn = config.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
13
|
-
this.config = {
|
|
14
|
-
environment: 'shadow',
|
|
15
|
-
solverName: 'AgentWallet',
|
|
16
|
-
maxGasGwei: 50,
|
|
17
|
-
minSurplusUsd: 0.5,
|
|
18
|
-
responseTimeoutMs: 20000,
|
|
19
|
-
submissionUrl: '',
|
|
20
|
-
...config,
|
|
21
|
-
};
|
|
22
|
-
this.analyzer = new AuctionAnalyzer(router);
|
|
23
|
-
this.builder = new SolutionBuilder();
|
|
24
|
-
this.stats = {
|
|
25
|
-
auctionsProcessed: 0,
|
|
26
|
-
auctionsWon: 0,
|
|
27
|
-
auctionsLost: 0,
|
|
28
|
-
totalSurplusGenerated: '0',
|
|
29
|
-
winRate: 0,
|
|
30
|
-
avgResponseTimeMs: 0,
|
|
31
|
-
lastAuctionAt: undefined,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Process an auction batch and return our best settlement solution.
|
|
36
|
-
*
|
|
37
|
-
* Called when CowSwap sends us an auction. Must respond within 30 seconds.
|
|
38
|
-
* Returns null if we have nothing viable to submit.
|
|
39
|
-
*/
|
|
40
|
-
async processAuction(batch) {
|
|
41
|
-
const startTime = Date.now();
|
|
42
|
-
this.stats.auctionsProcessed++;
|
|
43
|
-
this.stats.lastAuctionAt = startTime;
|
|
44
|
-
const orders = Object.values(batch.instance.orders);
|
|
45
|
-
if (orders.length === 0)
|
|
46
|
-
return null;
|
|
47
|
-
// Step 1: Find Coincidence of Wants — best outcome for users, no DEX fees
|
|
48
|
-
const cowMatches = this.analyzer.findCoincidenceOfWants(orders);
|
|
49
|
-
// Step 2: Route remaining orders through SmartSwapRouter (streaming batches)
|
|
50
|
-
const matchedOrderIds = new Set(cowMatches.flatMap((m) => [m.orderA.uid, m.orderB.uid]));
|
|
51
|
-
const remainingOrders = orders.filter((o) => !matchedOrderIds.has(o.uid));
|
|
52
|
-
// CYCLE 1 FIX: Stream orders in chunks of 20 for lower latency
|
|
53
|
-
const CHUNK_SIZE = 20;
|
|
54
|
-
const routes = [];
|
|
55
|
-
for (let i = 0; i < remainingOrders.length; i += CHUNK_SIZE) {
|
|
56
|
-
const chunk = remainingOrders.slice(i, i + CHUNK_SIZE);
|
|
57
|
-
const chunkResults = await Promise.all(chunk.map((order) => this.analyzer
|
|
58
|
-
.analyzeOrder(order, this.getChainId())
|
|
59
|
-
.then((result) => result ? { order, route: result.bestRoute } : { order, route: null })));
|
|
60
|
-
routes.push(...chunkResults);
|
|
61
|
-
}
|
|
62
|
-
// Step 3: Only keep orders we can actually fill
|
|
63
|
-
const viableRoutes = routes.filter((r) => r.route !== null);
|
|
64
|
-
// Step 4: Nothing to submit?
|
|
65
|
-
if (viableRoutes.length === 0 && cowMatches.length === 0)
|
|
66
|
-
return null;
|
|
67
|
-
// Step 5: Assemble the solution
|
|
68
|
-
const solution = this.builder.buildSolution({
|
|
69
|
-
auctionId: batch.id,
|
|
70
|
-
orders,
|
|
71
|
-
routes: viableRoutes,
|
|
72
|
-
cowMatches,
|
|
73
|
-
});
|
|
74
|
-
// Step 6: Update timing stats
|
|
75
|
-
const elapsed = Date.now() - startTime;
|
|
76
|
-
this.stats.avgResponseTimeMs =
|
|
77
|
-
(this.stats.avgResponseTimeMs * (this.stats.auctionsProcessed - 1) +
|
|
78
|
-
elapsed) /
|
|
79
|
-
this.stats.auctionsProcessed;
|
|
80
|
-
return solution;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Submit a solution to CowSwap.
|
|
84
|
-
*
|
|
85
|
-
* In shadow mode, the solution is evaluated but never executed on-chain —
|
|
86
|
-
* useful for measuring competitiveness before applying for the production
|
|
87
|
-
* bonding pool.
|
|
88
|
-
*/
|
|
89
|
-
async submitSolution(solution) {
|
|
90
|
-
const endpoint = this.config.submissionUrl ||
|
|
91
|
-
this.ENDPOINTS[this.config.environment];
|
|
92
|
-
try {
|
|
93
|
-
const response = await this.fetchFn(`${endpoint}/solutions`, {
|
|
94
|
-
method: 'POST',
|
|
95
|
-
headers: { 'Content-Type': 'application/json' },
|
|
96
|
-
body: JSON.stringify({
|
|
97
|
-
auctionId: solution.auctionId,
|
|
98
|
-
trades: solution.trades,
|
|
99
|
-
interactions: solution.interactions,
|
|
100
|
-
prices: solution.prices,
|
|
101
|
-
}),
|
|
102
|
-
});
|
|
103
|
-
if (!response.ok) {
|
|
104
|
-
const text = await response.text();
|
|
105
|
-
return {
|
|
106
|
-
success: false,
|
|
107
|
-
auctionId: solution.auctionId,
|
|
108
|
-
error: text,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
const result = (await response.json());
|
|
112
|
-
return {
|
|
113
|
-
success: true,
|
|
114
|
-
auctionId: solution.auctionId,
|
|
115
|
-
solutionId: result.id,
|
|
116
|
-
won: result.winner === this.config.solverName,
|
|
117
|
-
surplus: result.surplus,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
return {
|
|
122
|
-
success: false,
|
|
123
|
-
auctionId: solution.auctionId,
|
|
124
|
-
error: err instanceof Error ? err.message : 'Unknown error',
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/** Get current solver performance statistics */
|
|
129
|
-
getStats() {
|
|
130
|
-
return { ...this.stats };
|
|
131
|
-
}
|
|
132
|
-
/** Get the CowSwap API base URL for the configured environment */
|
|
133
|
-
getApiUrl() {
|
|
134
|
-
return this.ENDPOINTS[this.config.environment];
|
|
135
|
-
}
|
|
136
|
-
getChainId() {
|
|
137
|
-
const map = {
|
|
138
|
-
ethereum: 1,
|
|
139
|
-
base: 8453,
|
|
140
|
-
arbitrum: 42161,
|
|
141
|
-
gnosis: 100,
|
|
142
|
-
};
|
|
143
|
-
return map[this.config.chain] ?? 1;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/solver/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AuctionAnalyzer — Core intelligence for CowSwap solver.
|
|
3
|
-
*
|
|
4
|
-
* Given an auction batch, finds the best execution route for each order
|
|
5
|
-
* by leveraging SmartSwapRouter (7 DEX aggregators queried in parallel).
|
|
6
|
-
*
|
|
7
|
-
* Also detects Coincidence of Wants (CoW): orders that can settle directly
|
|
8
|
-
* without any DEX, saving gas and maximising user surplus.
|
|
9
|
-
*/
|
|
10
|
-
import type { SmartSwapRouter } from '../swap/router/router.js';
|
|
11
|
-
import type { AggregatorQuote } from '../swap/router/types.js';
|
|
12
|
-
import type { CowOrder } from './types.js';
|
|
13
|
-
export declare class AuctionAnalyzer {
|
|
14
|
-
private router?;
|
|
15
|
-
constructor(router?: SmartSwapRouter | undefined);
|
|
16
|
-
/**
|
|
17
|
-
* Analyse a single order — find the best execution route.
|
|
18
|
-
* Returns null if no router is configured or no viable quotes exist.
|
|
19
|
-
*
|
|
20
|
-
* NOTE: analyzeOrder is intentionally graceful — it never throws.
|
|
21
|
-
* A missing router or empty quote list simply returns null.
|
|
22
|
-
*/
|
|
23
|
-
analyzeOrder(order: CowOrder, chainId: number): Promise<{
|
|
24
|
-
order: CowOrder;
|
|
25
|
-
bestRoute: AggregatorQuote | null;
|
|
26
|
-
/** Surplus vs the order's limit price in buy-token units */
|
|
27
|
-
surplusBuyToken: bigint;
|
|
28
|
-
/** Surplus in USD (simplified) */
|
|
29
|
-
surplusUsd: number;
|
|
30
|
-
viable: boolean;
|
|
31
|
-
} | null>;
|
|
32
|
-
/**
|
|
33
|
-
* Find Coincidence of Wants (CoW) — orders that can trade directly.
|
|
34
|
-
*
|
|
35
|
-
* If user A wants to sell ETH for USDC and user B wants to sell USDC for
|
|
36
|
-
* ETH, they can settle directly with ZERO DEX fees. This is CowSwap's core
|
|
37
|
-
* innovation and is the primary edge for any competitive solver.
|
|
38
|
-
*/
|
|
39
|
-
findCoincidenceOfWants(orders: CowOrder[]): Array<{
|
|
40
|
-
orderA: CowOrder;
|
|
41
|
-
orderB: CowOrder;
|
|
42
|
-
matchedAmount: bigint;
|
|
43
|
-
estimatedGasSaved: bigint;
|
|
44
|
-
}>;
|
|
45
|
-
private calculateCoWMatch;
|
|
46
|
-
private chainIdToName;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/solver/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM,CAAC;gBAAP,MAAM,CAAC,6BAAiB;IAE5C;;;;;;OAMG;IACG,YAAY,CAChB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC;QAChB,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;QAClC,4DAA4D;QAC5D,eAAe,EAAE,MAAM,CAAC;QACxB,kCAAkC;QAClC,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,OAAO,CAAC;KACjB,GAAG,IAAI,CAAC;IAqCT;;;;;;OAMG;IACH,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAChD,MAAM,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,QAAQ,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IA+BF,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,aAAa;CAStB"}
|
package/dist/solver/analyzer.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
// ─── Known token decimals (mainnet + Arbitrum) ────────────────────────────────
|
|
2
|
-
const KNOWN_DECIMALS = {
|
|
3
|
-
'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2': 18, // WETH mainnet
|
|
4
|
-
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 6, // USDC mainnet
|
|
5
|
-
'0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': 8, // WBTC
|
|
6
|
-
'0x6b175474e89094c44da98b954eedeac495271d0f': 18, // DAI
|
|
7
|
-
'0xaf88d065e77c8cc2239327c5edb3a432268e5831': 6, // USDC Arbitrum
|
|
8
|
-
'0x82af49447d8a07e3bd95bd0d56f35241523fbab1': 18, // WETH Arbitrum
|
|
9
|
-
'0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9': 6, // USDT Arbitrum
|
|
10
|
-
'0xff970a61a04b1ca14834a43f5de4533ebddb5cc8': 6, // USDC.e Arbitrum
|
|
11
|
-
'0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f': 8, // WBTC Arbitrum
|
|
12
|
-
'0xda10009cbd5d07dd0cecc66161fc93d7c9000da1': 18, // DAI Arbitrum
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
function getTokenDecimals(tokenAddr) {
|
|
16
|
-
const lower = tokenAddr.toLowerCase();
|
|
17
|
-
return KNOWN_DECIMALS[lower] ?? 18; // default to 18 (ETH-like)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class AuctionAnalyzer {
|
|
21
|
-
constructor(router) {
|
|
22
|
-
this.router = router;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
toChecksumAddress(addr) {
|
|
26
|
-
// Ensure 0x prefix; Uniswap API accepts lowercase addresses
|
|
27
|
-
if (!addr) return addr;
|
|
28
|
-
const hex = addr.startsWith('0x') ? addr : '0x' + addr;
|
|
29
|
-
return hex.toLowerCase();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Analyse a single order — find the best execution route.
|
|
34
|
-
* Returns null if no router is configured or no viable quotes exist.
|
|
35
|
-
*
|
|
36
|
-
* NOTE: analyzeOrder is intentionally graceful — it never throws.
|
|
37
|
-
* A missing router or empty quote list simply returns null.
|
|
38
|
-
* Errors are logged (not swallowed silently) for debugging.
|
|
39
|
-
*/
|
|
40
|
-
async analyzeOrder(order, chainId) {
|
|
41
|
-
if (!this.router)
|
|
42
|
-
return null;
|
|
43
|
-
try {
|
|
44
|
-
// Normalize addresses (Uniswap API accepts lowercase)
|
|
45
|
-
const fromToken = this.toChecksumAddress(order.sellToken);
|
|
46
|
-
const toToken = this.toChecksumAddress(order.buyToken);
|
|
47
|
-
const quotes = await this.router.getQuotes({
|
|
48
|
-
fromToken,
|
|
49
|
-
toToken,
|
|
50
|
-
// Wei string — Uniswap API accepts raw uint256 as amount
|
|
51
|
-
amount: order.sellAmount,
|
|
52
|
-
chain: this.chainIdToName(chainId),
|
|
53
|
-
});
|
|
54
|
-
if (quotes.length === 0)
|
|
55
|
-
return null;
|
|
56
|
-
const best = quotes[0];
|
|
57
|
-
const limitPrice = BigInt(order.buyAmount);
|
|
58
|
-
// Surplus = what we can deliver ABOVE the user's limit price
|
|
59
|
-
const surplusBuyToken = best.toAmount > limitPrice ? best.toAmount - limitPrice : 0n;
|
|
60
|
-
// Correct USD estimate using token-specific decimals
|
|
61
|
-
// Use bigint-safe conversion: shift to 6-decimal precision first,
|
|
62
|
-
// then convert to Number — prevents overflow for 18-decimal tokens
|
|
63
|
-
const decimals = getTokenDecimals(order.buyToken);
|
|
64
|
-
const DISPLAY_PRECISION = 6;
|
|
65
|
-
let surplusUsd;
|
|
66
|
-
if (decimals <= DISPLAY_PRECISION) {
|
|
67
|
-
// 6-decimal tokens (USDC, USDT): safe to convert directly
|
|
68
|
-
surplusUsd = (Number(surplusBuyToken) / Math.pow(10, decimals)) * (best.toTokenPriceUsd ?? 1);
|
|
69
|
-
} else {
|
|
70
|
-
// 18-decimal tokens (ETH, DAI): downshift first to avoid Number overflow
|
|
71
|
-
const shift = BigInt(decimals - DISPLAY_PRECISION);
|
|
72
|
-
const reduced = surplusBuyToken / (10n ** shift);
|
|
73
|
-
surplusUsd = (Number(reduced) / Math.pow(10, DISPLAY_PRECISION)) * (best.toTokenPriceUsd ?? 1);
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
order,
|
|
77
|
-
bestRoute: best,
|
|
78
|
-
surplusBuyToken,
|
|
79
|
-
surplusUsd,
|
|
80
|
-
viable: surplusBuyToken > 0n,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
// Log the error so it doesn't disappear silently — critical for debugging
|
|
85
|
-
console.warn(`[AuctionAnalyzer] analyzeOrder failed for order ${order.uid}: ${err?.message ?? err}`);
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Find Coincidence of Wants (CoW) — orders that can trade directly.
|
|
91
|
-
*
|
|
92
|
-
* If user A wants to sell ETH for USDC and user B wants to sell USDC for
|
|
93
|
-
* ETH, they can settle directly with ZERO DEX fees. This is CowSwap's core
|
|
94
|
-
* innovation and is the primary edge for any competitive solver.
|
|
95
|
-
*/
|
|
96
|
-
findCoincidenceOfWants(orders) {
|
|
97
|
-
// CYCLE 1 FIX: Build token-pair index for O(n log n) matching
|
|
98
|
-
// CYCLE 3 FIX: Sort by best price first within each token pair
|
|
99
|
-
const index = new Map();
|
|
100
|
-
for (const order of orders) {
|
|
101
|
-
const key = `${order.sellToken.toLowerCase()}-${order.buyToken.toLowerCase()}`;
|
|
102
|
-
if (!index.has(key)) index.set(key, []);
|
|
103
|
-
index.get(key).push(order);
|
|
104
|
-
}
|
|
105
|
-
const matches = [];
|
|
106
|
-
const used = new Set();
|
|
107
|
-
for (const [key, sellOrders] of index) {
|
|
108
|
-
const [sellToken, buyToken] = key.split('-');
|
|
109
|
-
const reverseKey = `${buyToken}-${sellToken}`;
|
|
110
|
-
const buyOrders = index.get(reverseKey) || [];
|
|
111
|
-
if (buyOrders.length === 0) continue;
|
|
112
|
-
// Sort by price: best sell price first (highest buyAmount/sellAmount ratio)
|
|
113
|
-
const sortedSell = [...sellOrders].sort((a, b) => {
|
|
114
|
-
const ratioA = Number(BigInt(a.buyAmount) * 1000000n / BigInt(a.sellAmount));
|
|
115
|
-
const ratioB = Number(BigInt(b.buyAmount) * 1000000n / BigInt(b.sellAmount));
|
|
116
|
-
return ratioB - ratioA;
|
|
117
|
-
});
|
|
118
|
-
const sortedBuy = [...buyOrders].sort((a, b) => {
|
|
119
|
-
const ratioA = Number(BigInt(a.sellAmount) * 1000000n / BigInt(a.buyAmount));
|
|
120
|
-
const ratioB = Number(BigInt(b.sellAmount) * 1000000n / BigInt(b.buyAmount));
|
|
121
|
-
return ratioA - ratioB; // lowest sell price first
|
|
122
|
-
});
|
|
123
|
-
for (const sell of sortedSell) {
|
|
124
|
-
if (used.has(sell.uid)) continue;
|
|
125
|
-
for (const buy of sortedBuy) {
|
|
126
|
-
if (used.has(buy.uid)) continue;
|
|
127
|
-
// Complementary check with deduplication
|
|
128
|
-
if (sell.sellToken === buy.buyToken && buy.sellToken === sell.buyToken) {
|
|
129
|
-
const matchedAmount = this.calculateCoWMatch(sell, buy);
|
|
130
|
-
if (matchedAmount > 0n) {
|
|
131
|
-
matches.push({
|
|
132
|
-
orderA: sell,
|
|
133
|
-
orderB: buy,
|
|
134
|
-
matchedAmount,
|
|
135
|
-
estimatedGasSaved: 50000n,
|
|
136
|
-
});
|
|
137
|
-
used.add(sell.uid);
|
|
138
|
-
used.add(buy.uid);
|
|
139
|
-
break; // move to next sell order
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return matches;
|
|
146
|
-
}
|
|
147
|
-
calculateCoWMatch(orderA, orderB) {
|
|
148
|
-
const aSell = BigInt(orderA.sellAmount);
|
|
149
|
-
const aBuy = BigInt(orderA.buyAmount);
|
|
150
|
-
const bSell = BigInt(orderB.sellAmount);
|
|
151
|
-
const bBuy = BigInt(orderB.buyAmount);
|
|
152
|
-
// Price compatibility check: A's limit price must be satisfiable by B and vice versa
|
|
153
|
-
// A wants: aBuy / aSell (min buy per sell unit)
|
|
154
|
-
// B offers: bSell / bBuy (sell per buy unit, i.e., how much B sells per unit of what A wants)
|
|
155
|
-
// For match: A's ask <= B's offer in the same token direction
|
|
156
|
-
// i.e., aBuy * bBuy <= aSell * bSell (cross-multiply to avoid division)
|
|
157
|
-
if (aBuy * bBuy > aSell * bSell) return 0n;
|
|
158
|
-
// Return the smaller fill amount
|
|
159
|
-
return aSell < bBuy ? aSell : bBuy;
|
|
160
|
-
}
|
|
161
|
-
chainIdToName(chainId) {
|
|
162
|
-
const map = {
|
|
163
|
-
1: 'ethereum',
|
|
164
|
-
8453: 'base',
|
|
165
|
-
42161: 'arbitrum',
|
|
166
|
-
100: 'gnosis',
|
|
167
|
-
};
|
|
168
|
-
return map[chainId] ?? 'ethereum';
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/solver/analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/solver/builder.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SolutionBuilder — Constructs CowSwap settlement solutions.
|
|
3
|
-
*
|
|
4
|
-
* Takes analysed orders (CoW matches + DEX-routed orders) and assembles
|
|
5
|
-
* the SolverSolution payload that is submitted to the CowSwap API.
|
|
6
|
-
*/
|
|
7
|
-
import type { AggregatorQuote } from '../swap/router/types.js';
|
|
8
|
-
import type { CowOrder, SolverSolution } from './types.js';
|
|
9
|
-
export declare class SolutionBuilder {
|
|
10
|
-
/**
|
|
11
|
-
* Build a settlement solution from analysed orders.
|
|
12
|
-
*
|
|
13
|
-
* CoW-matched orders are processed first (zero DEX fees, best for users).
|
|
14
|
-
* DEX-routed orders are processed second, with swap calldata inserted as
|
|
15
|
-
* intra-transaction interactions.
|
|
16
|
-
*/
|
|
17
|
-
buildSolution(params: {
|
|
18
|
-
auctionId: number;
|
|
19
|
-
orders: CowOrder[];
|
|
20
|
-
routes: Array<{
|
|
21
|
-
order: CowOrder;
|
|
22
|
-
route: AggregatorQuote | null;
|
|
23
|
-
}>;
|
|
24
|
-
cowMatches?: Array<{
|
|
25
|
-
orderA: CowOrder;
|
|
26
|
-
orderB: CowOrder;
|
|
27
|
-
matchedAmount: bigint;
|
|
28
|
-
}>;
|
|
29
|
-
}): SolverSolution;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/solver/builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AAE7E,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnB,MAAM,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;SAAE,CAAC,CAAC;QAClE,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,MAAM,EAAE,QAAQ,CAAC;YACjB,MAAM,EAAE,QAAQ,CAAC;YACjB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,GAAG,cAAc;CAuDnB"}
|