agentwallet-sdk 3.2.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -536
- package/dist/bridge/abis.d.ts +48 -171
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +2 -41
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +35 -168
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -4
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -8
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +15 -134
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -170
- package/dist/bridge/types.js.map +1 -1
- package/dist/identity/erc8004.d.ts +2 -240
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +58 -334
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.d.ts +313 -134
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -56
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +6 -50
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +25 -153
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts +47 -165
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +2 -3
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -4
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +6 -36
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +0 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/chains/abstract/index.d.ts +135 -0
- package/dist/x402/chains/abstract/index.d.ts.map +1 -0
- package/dist/x402/chains/abstract/index.js +190 -0
- package/dist/x402/chains/abstract/index.js.map +1 -0
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +1 -2
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +3 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -1
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/types.d.ts +3 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +2 -17
- package/dist/x402/types.js.map +1 -1
- package/package.json +12 -32
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -25
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -4
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -138
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -89
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -21
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -116
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -8
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -25
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/dist/solana/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,138 +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
|
-
this.config = {
|
|
12
|
-
environment: 'shadow',
|
|
13
|
-
solverName: 'AgentWallet',
|
|
14
|
-
maxGasGwei: 50,
|
|
15
|
-
minSurplusUsd: 0.5,
|
|
16
|
-
responseTimeoutMs: 20000,
|
|
17
|
-
submissionUrl: '',
|
|
18
|
-
...config,
|
|
19
|
-
};
|
|
20
|
-
this.analyzer = new AuctionAnalyzer(router);
|
|
21
|
-
this.builder = new SolutionBuilder();
|
|
22
|
-
this.stats = {
|
|
23
|
-
auctionsProcessed: 0,
|
|
24
|
-
auctionsWon: 0,
|
|
25
|
-
auctionsLost: 0,
|
|
26
|
-
totalSurplusGenerated: '0',
|
|
27
|
-
winRate: 0,
|
|
28
|
-
avgResponseTimeMs: 0,
|
|
29
|
-
lastAuctionAt: undefined,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Process an auction batch and return our best settlement solution.
|
|
34
|
-
*
|
|
35
|
-
* Called when CowSwap sends us an auction. Must respond within 30 seconds.
|
|
36
|
-
* Returns null if we have nothing viable to submit.
|
|
37
|
-
*/
|
|
38
|
-
async processAuction(batch) {
|
|
39
|
-
const startTime = Date.now();
|
|
40
|
-
this.stats.auctionsProcessed++;
|
|
41
|
-
this.stats.lastAuctionAt = startTime;
|
|
42
|
-
const orders = Object.values(batch.instance.orders);
|
|
43
|
-
if (orders.length === 0)
|
|
44
|
-
return null;
|
|
45
|
-
// Step 1: Find Coincidence of Wants — best outcome for users, no DEX fees
|
|
46
|
-
const cowMatches = this.analyzer.findCoincidenceOfWants(orders);
|
|
47
|
-
// Step 2: Route remaining orders through SmartSwapRouter
|
|
48
|
-
const matchedOrderIds = new Set(cowMatches.flatMap((m) => [m.orderA.uid, m.orderB.uid]));
|
|
49
|
-
const remainingOrders = orders.filter((o) => !matchedOrderIds.has(o.uid));
|
|
50
|
-
const analysisPromises = remainingOrders.map((order) => this.analyzer
|
|
51
|
-
.analyzeOrder(order, this.getChainId())
|
|
52
|
-
.then((result) => result ? { order, route: result.bestRoute } : { order, route: null }));
|
|
53
|
-
const routes = await Promise.all(analysisPromises);
|
|
54
|
-
// Step 3: Only keep orders we can actually fill
|
|
55
|
-
const viableRoutes = routes.filter((r) => r.route !== null);
|
|
56
|
-
// Step 4: Nothing to submit?
|
|
57
|
-
if (viableRoutes.length === 0 && cowMatches.length === 0)
|
|
58
|
-
return null;
|
|
59
|
-
// Step 5: Assemble the solution
|
|
60
|
-
const solution = this.builder.buildSolution({
|
|
61
|
-
auctionId: batch.id,
|
|
62
|
-
orders,
|
|
63
|
-
routes: viableRoutes,
|
|
64
|
-
cowMatches,
|
|
65
|
-
});
|
|
66
|
-
// Step 6: Update timing stats
|
|
67
|
-
const elapsed = Date.now() - startTime;
|
|
68
|
-
this.stats.avgResponseTimeMs =
|
|
69
|
-
(this.stats.avgResponseTimeMs * (this.stats.auctionsProcessed - 1) +
|
|
70
|
-
elapsed) /
|
|
71
|
-
this.stats.auctionsProcessed;
|
|
72
|
-
return solution;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Submit a solution to CowSwap.
|
|
76
|
-
*
|
|
77
|
-
* In shadow mode, the solution is evaluated but never executed on-chain —
|
|
78
|
-
* useful for measuring competitiveness before applying for the production
|
|
79
|
-
* bonding pool.
|
|
80
|
-
*/
|
|
81
|
-
async submitSolution(solution) {
|
|
82
|
-
const endpoint = this.config.submissionUrl ||
|
|
83
|
-
this.ENDPOINTS[this.config.environment];
|
|
84
|
-
try {
|
|
85
|
-
const response = await fetch(`${endpoint}/solutions`, {
|
|
86
|
-
method: 'POST',
|
|
87
|
-
headers: { 'Content-Type': 'application/json' },
|
|
88
|
-
body: JSON.stringify({
|
|
89
|
-
auctionId: solution.auctionId,
|
|
90
|
-
trades: solution.trades,
|
|
91
|
-
interactions: solution.interactions,
|
|
92
|
-
prices: solution.prices,
|
|
93
|
-
}),
|
|
94
|
-
});
|
|
95
|
-
if (!response.ok) {
|
|
96
|
-
const text = await response.text();
|
|
97
|
-
return {
|
|
98
|
-
success: false,
|
|
99
|
-
auctionId: solution.auctionId,
|
|
100
|
-
error: text,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
const result = (await response.json());
|
|
104
|
-
return {
|
|
105
|
-
success: true,
|
|
106
|
-
auctionId: solution.auctionId,
|
|
107
|
-
solutionId: result.id,
|
|
108
|
-
won: result.winner === this.config.solverName,
|
|
109
|
-
surplus: result.surplus,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
return {
|
|
114
|
-
success: false,
|
|
115
|
-
auctionId: solution.auctionId,
|
|
116
|
-
error: err instanceof Error ? err.message : 'Unknown error',
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/** Get current solver performance statistics */
|
|
121
|
-
getStats() {
|
|
122
|
-
return { ...this.stats };
|
|
123
|
-
}
|
|
124
|
-
/** Get the CowSwap API base URL for the configured environment */
|
|
125
|
-
getApiUrl() {
|
|
126
|
-
return this.ENDPOINTS[this.config.environment];
|
|
127
|
-
}
|
|
128
|
-
getChainId() {
|
|
129
|
-
const map = {
|
|
130
|
-
ethereum: 1,
|
|
131
|
-
base: 8453,
|
|
132
|
-
arbitrum: 42161,
|
|
133
|
-
gnosis: 100,
|
|
134
|
-
};
|
|
135
|
-
return map[this.config.chain] ?? 1;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
//# 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,89 +0,0 @@
|
|
|
1
|
-
export class AuctionAnalyzer {
|
|
2
|
-
constructor(router) {
|
|
3
|
-
this.router = router;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Analyse a single order — find the best execution route.
|
|
7
|
-
* Returns null if no router is configured or no viable quotes exist.
|
|
8
|
-
*
|
|
9
|
-
* NOTE: analyzeOrder is intentionally graceful — it never throws.
|
|
10
|
-
* A missing router or empty quote list simply returns null.
|
|
11
|
-
*/
|
|
12
|
-
async analyzeOrder(order, chainId) {
|
|
13
|
-
if (!this.router)
|
|
14
|
-
return null;
|
|
15
|
-
try {
|
|
16
|
-
const quotes = await this.router.getQuotes({
|
|
17
|
-
fromToken: order.sellToken,
|
|
18
|
-
toToken: order.buyToken,
|
|
19
|
-
// getQuotes expects a human-readable amount string; we pass the raw
|
|
20
|
-
// uint256 string which is fine for comparisons in test/shadow mode.
|
|
21
|
-
amount: order.sellAmount,
|
|
22
|
-
chain: this.chainIdToName(chainId),
|
|
23
|
-
});
|
|
24
|
-
if (quotes.length === 0)
|
|
25
|
-
return null;
|
|
26
|
-
const best = quotes[0];
|
|
27
|
-
const limitPrice = BigInt(order.buyAmount);
|
|
28
|
-
// Surplus = what we can deliver ABOVE the user's limit price
|
|
29
|
-
const surplusBuyToken = best.toAmount > limitPrice ? best.toAmount - limitPrice : 0n;
|
|
30
|
-
// Simplified USD estimate (assumes 6-decimal stablecoin output)
|
|
31
|
-
const surplusUsd = Number(surplusBuyToken) / 1e6;
|
|
32
|
-
return {
|
|
33
|
-
order,
|
|
34
|
-
bestRoute: best,
|
|
35
|
-
surplusBuyToken,
|
|
36
|
-
surplusUsd,
|
|
37
|
-
viable: surplusBuyToken > 0n,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Find Coincidence of Wants (CoW) — orders that can trade directly.
|
|
46
|
-
*
|
|
47
|
-
* If user A wants to sell ETH for USDC and user B wants to sell USDC for
|
|
48
|
-
* ETH, they can settle directly with ZERO DEX fees. This is CowSwap's core
|
|
49
|
-
* innovation and is the primary edge for any competitive solver.
|
|
50
|
-
*/
|
|
51
|
-
findCoincidenceOfWants(orders) {
|
|
52
|
-
const matches = [];
|
|
53
|
-
for (let i = 0; i < orders.length; i++) {
|
|
54
|
-
for (let j = i + 1; j < orders.length; j++) {
|
|
55
|
-
const a = orders[i];
|
|
56
|
-
const b = orders[j];
|
|
57
|
-
// Complementary: A sells what B buys, and B sells what A buys
|
|
58
|
-
if (a.sellToken === b.buyToken && a.buyToken === b.sellToken) {
|
|
59
|
-
const matchedAmount = this.calculateCoWMatch(a, b);
|
|
60
|
-
if (matchedAmount > 0n) {
|
|
61
|
-
matches.push({
|
|
62
|
-
orderA: a,
|
|
63
|
-
orderB: b,
|
|
64
|
-
matchedAmount,
|
|
65
|
-
estimatedGasSaved: 50000n, // ~50K gas saved per matched pair
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return matches;
|
|
72
|
-
}
|
|
73
|
-
calculateCoWMatch(orderA, orderB) {
|
|
74
|
-
const aCanSell = BigInt(orderA.sellAmount);
|
|
75
|
-
const bWantsToBuy = BigInt(orderB.buyAmount); // minimum they accept
|
|
76
|
-
// Return the smaller of the two amounts (limited by both constraints)
|
|
77
|
-
return aCanSell < bWantsToBuy ? aCanSell : bWantsToBuy;
|
|
78
|
-
}
|
|
79
|
-
chainIdToName(chainId) {
|
|
80
|
-
const map = {
|
|
81
|
-
1: 'ethereum',
|
|
82
|
-
8453: 'base',
|
|
83
|
-
42161: 'arbitrum',
|
|
84
|
-
100: 'gnosis',
|
|
85
|
-
};
|
|
86
|
-
return map[chainId] ?? 'ethereum';
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
//# 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"}
|
package/dist/solver/builder.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export class SolutionBuilder {
|
|
2
|
-
/**
|
|
3
|
-
* Build a settlement solution from analysed orders.
|
|
4
|
-
*
|
|
5
|
-
* CoW-matched orders are processed first (zero DEX fees, best for users).
|
|
6
|
-
* DEX-routed orders are processed second, with swap calldata inserted as
|
|
7
|
-
* intra-transaction interactions.
|
|
8
|
-
*/
|
|
9
|
-
buildSolution(params) {
|
|
10
|
-
const trades = [];
|
|
11
|
-
const interactions = {
|
|
12
|
-
pre: [],
|
|
13
|
-
intra: [],
|
|
14
|
-
post: [],
|
|
15
|
-
};
|
|
16
|
-
const prices = {};
|
|
17
|
-
// 1. Process CoW matches first — no DEX fees, pure surplus for users
|
|
18
|
-
for (const match of params.cowMatches ?? []) {
|
|
19
|
-
trades.push({
|
|
20
|
-
kind: 'fulfillment',
|
|
21
|
-
order: match.orderA.uid,
|
|
22
|
-
executedAmount: match.matchedAmount.toString(),
|
|
23
|
-
});
|
|
24
|
-
trades.push({
|
|
25
|
-
kind: 'fulfillment',
|
|
26
|
-
order: match.orderB.uid,
|
|
27
|
-
executedAmount: match.matchedAmount.toString(),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// 2. Process DEX-routed orders
|
|
31
|
-
for (const { order, route } of params.routes) {
|
|
32
|
-
if (!route)
|
|
33
|
-
continue;
|
|
34
|
-
trades.push({
|
|
35
|
-
kind: 'fulfillment',
|
|
36
|
-
order: order.uid,
|
|
37
|
-
executedAmount: route.toAmount.toString(),
|
|
38
|
-
});
|
|
39
|
-
// Insert swap calldata as an intra-settlement interaction
|
|
40
|
-
if (route.txData) {
|
|
41
|
-
const interaction = {
|
|
42
|
-
target: route.txData.to,
|
|
43
|
-
value: route.txData.value?.toString() ?? '0',
|
|
44
|
-
callData: route.txData.data ?? '0x',
|
|
45
|
-
};
|
|
46
|
-
interactions.intra.push(interaction);
|
|
47
|
-
}
|
|
48
|
-
// Set clearing prices for this token pair
|
|
49
|
-
prices[order.sellToken] = order.sellAmount;
|
|
50
|
-
prices[order.buyToken] = route.toAmount.toString();
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
auctionId: params.auctionId,
|
|
54
|
-
trades,
|
|
55
|
-
interactions,
|
|
56
|
-
prices,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/solver/builder.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,eAAe;IAC1B;;;;;;OAMG;IACH,aAAa,CAAC,MASb;QACC,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAmC;YACnD,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;SACT,CAAC;QACF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,qEAAqE;QACrE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG;gBACvB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG;gBACvB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK,CAAC,GAAG;gBAChB,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;aAC1C,CAAC,CAAC;YAEH,0DAA0D;YAC1D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAqB;oBACpC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;oBACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG;oBAC5C,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI;iBACpC,CAAC;gBACF,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,0CAA0C;YAC1C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC;QAED,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM;YACN,YAAY;YACZ,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
|
package/dist/solver/index.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CowSwap Solver Module
|
|
3
|
-
*
|
|
4
|
-
* Flips the CowSwap relationship: instead of submitting orders as a user,
|
|
5
|
-
* we receive auction batches and compete to fill them as a solver.
|
|
6
|
-
*
|
|
7
|
-
* ⚠️ Shadow competition is FREE — no registration, no KYC required.
|
|
8
|
-
* Production solver requires CowSwap DAO bonding pool approval and KYC.
|
|
9
|
-
*
|
|
10
|
-
* Quick start (shadow mode):
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { CowSolverAdapter } from '@agentwallet/sdk';
|
|
13
|
-
* const solver = new CowSolverAdapter({ chain: 'ethereum' }, router);
|
|
14
|
-
* const solution = await solver.processAuction(batch);
|
|
15
|
-
* if (solution) await solver.submitSolution(solution);
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export { CowSolverAdapter } from './adapter.js';
|
|
19
|
-
export { AuctionAnalyzer } from './analyzer.js';
|
|
20
|
-
export { SolutionBuilder } from './builder.js';
|
|
21
|
-
export type { OrderKind, SigningScheme, TokenBalance, CowOrder, CowAuctionBatch, TokenInteraction, SolverSolution, SolutionSubmissionResult, SolverStats, SolverConfig, } from './types.js';
|
|
22
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/solver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/solver/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CowSwap Solver Module
|
|
3
|
-
*
|
|
4
|
-
* Flips the CowSwap relationship: instead of submitting orders as a user,
|
|
5
|
-
* we receive auction batches and compete to fill them as a solver.
|
|
6
|
-
*
|
|
7
|
-
* ⚠️ Shadow competition is FREE — no registration, no KYC required.
|
|
8
|
-
* Production solver requires CowSwap DAO bonding pool approval and KYC.
|
|
9
|
-
*
|
|
10
|
-
* Quick start (shadow mode):
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { CowSolverAdapter } from '@agentwallet/sdk';
|
|
13
|
-
* const solver = new CowSolverAdapter({ chain: 'ethereum' }, router);
|
|
14
|
-
* const solution = await solver.processAuction(batch);
|
|
15
|
-
* if (solution) await solver.submitSolution(solution);
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export { CowSolverAdapter } from './adapter.js';
|
|
19
|
-
export { AuctionAnalyzer } from './analyzer.js';
|
|
20
|
-
export { SolutionBuilder } from './builder.js';
|
|
21
|
-
//# sourceMappingURL=index.js.map
|