@clawnch/clawncher-sdk 0.1.3 → 0.3.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 +190 -0
- package/dist/analytics.d.ts +157 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +468 -0
- package/dist/analytics.js.map +1 -0
- package/dist/api-deployer.d.ts.map +1 -1
- package/dist/api-deployer.js +38 -35
- package/dist/api-deployer.js.map +1 -1
- package/dist/claimer.d.ts.map +1 -1
- package/dist/claimer.js +9 -7
- package/dist/claimer.js.map +1 -1
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/liquidity.d.ts +13 -7
- package/dist/liquidity.d.ts.map +1 -1
- package/dist/liquidity.js +143 -46
- package/dist/liquidity.js.map +1 -1
- package/dist/orders.d.ts +338 -0
- package/dist/orders.d.ts.map +1 -0
- package/dist/orders.js +611 -0
- package/dist/orders.js.map +1 -0
- package/dist/permit2.d.ts +258 -0
- package/dist/permit2.d.ts.map +1 -0
- package/dist/permit2.js +520 -0
- package/dist/permit2.js.map +1 -0
- package/dist/price.d.ts +95 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +207 -0
- package/dist/price.js.map +1 -0
- package/dist/swap.d.ts.map +1 -1
- package/dist/swap.js +21 -19
- package/dist/swap.js.map +1 -1
- package/dist/trader.d.ts +188 -0
- package/dist/trader.d.ts.map +1 -0
- package/dist/trader.js +277 -0
- package/dist/trader.js.map +1 -0
- package/dist/uniswap-abis.d.ts +525 -0
- package/dist/uniswap-abis.d.ts.map +1 -1
- package/dist/uniswap-abis.js +432 -1
- package/dist/uniswap-abis.js.map +1 -1
- package/dist/uniswap-chains.d.ts +77 -0
- package/dist/uniswap-chains.d.ts.map +1 -0
- package/dist/uniswap-chains.js +362 -0
- package/dist/uniswap-chains.js.map +1 -0
- package/dist/uniswap-quoter.d.ts +178 -0
- package/dist/uniswap-quoter.d.ts.map +1 -0
- package/dist/uniswap-quoter.js +432 -0
- package/dist/uniswap-quoter.js.map +1 -0
- package/dist/uniswap-trading.d.ts +203 -0
- package/dist/uniswap-trading.d.ts.map +1 -0
- package/dist/uniswap-trading.js +380 -0
- package/dist/uniswap-trading.js.map +1 -0
- package/dist/watcher.d.ts +117 -2
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +147 -2
- package/dist/watcher.js.map +1 -1
- package/package.json +3 -1
package/dist/price.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawnchPrice — On-chain price reading for Clawncher tokens.
|
|
3
|
+
*
|
|
4
|
+
* Reads sqrtPriceX96 from the Uniswap V4 pool via StateView and converts
|
|
5
|
+
* to human-readable prices. Supports ETH-denominated and USD-denominated
|
|
6
|
+
* pricing (USD via CoinGecko ETH price).
|
|
7
|
+
*
|
|
8
|
+
* Price math:
|
|
9
|
+
* sqrtPriceX96 = sqrt(token1/token0) * 2^96
|
|
10
|
+
* price(token1/token0) = (sqrtPriceX96 / 2^96)^2
|
|
11
|
+
*
|
|
12
|
+
* For a Clawnch token paired with WETH:
|
|
13
|
+
* - If WETH is currency0 and token is currency1: price = token/WETH → invert for WETH/token
|
|
14
|
+
* - If token is currency0 and WETH is currency1: price = WETH/token → that's what we want
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const price = new ClawnchPrice({ publicClient, network: 'mainnet' });
|
|
19
|
+
*
|
|
20
|
+
* const info = await price.getTokenPrice('0xYourToken...');
|
|
21
|
+
* console.log(`Price: ${info.priceInEth} ETH per token`);
|
|
22
|
+
* console.log(`Price: $${info.priceInUsd} per token`);
|
|
23
|
+
* console.log(`Market cap: $${info.marketCapUsd}`);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { ClawnchReader } from './reader.js';
|
|
27
|
+
import { getUniswapV4Addresses, getCommonAddresses } from './uniswap-addresses.js';
|
|
28
|
+
import { StateViewABI } from './uniswap-abis.js';
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Constants
|
|
31
|
+
// ============================================================================
|
|
32
|
+
const Q96 = 2n ** 96n;
|
|
33
|
+
const Q192 = Q96 * Q96;
|
|
34
|
+
/** CoinGecko free API — no key needed, 30 req/min */
|
|
35
|
+
const COINGECKO_ETH_URL = 'https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd';
|
|
36
|
+
/** Cache ETH/USD for 60 seconds */
|
|
37
|
+
const ETH_USD_CACHE_MS = 60_000;
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// ClawnchPrice
|
|
40
|
+
// ============================================================================
|
|
41
|
+
export class ClawnchPrice {
|
|
42
|
+
publicClient;
|
|
43
|
+
network;
|
|
44
|
+
reader;
|
|
45
|
+
/** Cached ETH/USD price */
|
|
46
|
+
ethUsdCache = null;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
this.publicClient = config.publicClient;
|
|
49
|
+
this.network = config.network ?? 'mainnet';
|
|
50
|
+
this.reader = new ClawnchReader({
|
|
51
|
+
publicClient: config.publicClient,
|
|
52
|
+
network: this.network,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get full price info for a Clawncher token.
|
|
57
|
+
*
|
|
58
|
+
* Reads the V4 pool state on-chain, computes price from sqrtPriceX96,
|
|
59
|
+
* and optionally enriches with USD pricing from CoinGecko.
|
|
60
|
+
*/
|
|
61
|
+
async getTokenPrice(token) {
|
|
62
|
+
const common = getCommonAddresses(this.network);
|
|
63
|
+
const weth = common.weth.toLowerCase();
|
|
64
|
+
// Get pool key from LP locker rewards (tells us currency0, currency1, etc.)
|
|
65
|
+
const rewards = await this.reader.getTokenRewards(token);
|
|
66
|
+
if (!rewards) {
|
|
67
|
+
throw new Error(`No pool found for token ${token}. Is it a Clawncher token?`);
|
|
68
|
+
}
|
|
69
|
+
const { currency0, currency1, fee, tickSpacing, hooks } = rewards.poolKey;
|
|
70
|
+
// Determine which side is WETH
|
|
71
|
+
const wethSide = currency0.toLowerCase() === weth ? 0 : 1;
|
|
72
|
+
// Get pool state from StateView
|
|
73
|
+
const v4 = getUniswapV4Addresses(this.network);
|
|
74
|
+
const { keccak256, encodeAbiParameters } = await import('viem');
|
|
75
|
+
const poolId = keccak256(encodeAbiParameters([
|
|
76
|
+
{ type: 'address' },
|
|
77
|
+
{ type: 'address' },
|
|
78
|
+
{ type: 'uint24' },
|
|
79
|
+
{ type: 'int24' },
|
|
80
|
+
{ type: 'address' },
|
|
81
|
+
], [currency0, currency1, fee, tickSpacing, hooks]));
|
|
82
|
+
const [slot0Result, liquidityResult] = await Promise.all([
|
|
83
|
+
this.publicClient.readContract({
|
|
84
|
+
address: v4.stateView,
|
|
85
|
+
abi: StateViewABI,
|
|
86
|
+
functionName: 'getSlot0',
|
|
87
|
+
args: [poolId],
|
|
88
|
+
}),
|
|
89
|
+
this.publicClient.readContract({
|
|
90
|
+
address: v4.stateView,
|
|
91
|
+
abi: StateViewABI,
|
|
92
|
+
functionName: 'getLiquidity',
|
|
93
|
+
args: [poolId],
|
|
94
|
+
}),
|
|
95
|
+
]);
|
|
96
|
+
const sqrtPriceX96 = slot0Result[0];
|
|
97
|
+
const tick = Number(slot0Result[1]);
|
|
98
|
+
const liquidity = liquidityResult;
|
|
99
|
+
// Compute price
|
|
100
|
+
// sqrtPriceX96 = sqrt(currency1/currency0) * 2^96
|
|
101
|
+
// price(currency1/currency0) = (sqrtPriceX96)^2 / 2^192
|
|
102
|
+
const priceRatio = this.sqrtPriceX96ToPrice(sqrtPriceX96);
|
|
103
|
+
// Get token info for decimals + total supply
|
|
104
|
+
const tokenInfo = await this.reader.getTokenInfo(token);
|
|
105
|
+
const tokenDecimals = tokenInfo.decimals;
|
|
106
|
+
const wethDecimals = 18;
|
|
107
|
+
// Adjust for decimal difference
|
|
108
|
+
// priceRatio is currency1/currency0 in raw units
|
|
109
|
+
// We need to adjust: price * 10^(decimals0 - decimals1) to get real price
|
|
110
|
+
let priceInEth;
|
|
111
|
+
if (wethSide === 0) {
|
|
112
|
+
// WETH is currency0, token is currency1
|
|
113
|
+
// priceRatio = token_raw / weth_raw
|
|
114
|
+
// priceInEth (WETH per token) = 1 / (priceRatio * 10^(wethDecimals - tokenDecimals))
|
|
115
|
+
const decimalAdjust = 10 ** (wethDecimals - tokenDecimals);
|
|
116
|
+
priceInEth = 1 / (priceRatio * decimalAdjust);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Token is currency0, WETH is currency1
|
|
120
|
+
// priceRatio = weth_raw / token_raw
|
|
121
|
+
// priceInEth (WETH per token) = priceRatio * 10^(tokenDecimals - wethDecimals)
|
|
122
|
+
const decimalAdjust = 10 ** (tokenDecimals - wethDecimals);
|
|
123
|
+
priceInEth = priceRatio * decimalAdjust;
|
|
124
|
+
}
|
|
125
|
+
// Total supply in human-readable
|
|
126
|
+
const totalSupplyFormatted = Number(tokenInfo.totalSupply) / (10 ** tokenDecimals);
|
|
127
|
+
const marketCapEth = priceInEth * totalSupplyFormatted;
|
|
128
|
+
// Fetch ETH/USD
|
|
129
|
+
const ethUsdRate = await this.getEthUsdPrice();
|
|
130
|
+
const priceInUsd = ethUsdRate !== null ? priceInEth * ethUsdRate : null;
|
|
131
|
+
const marketCapUsd = ethUsdRate !== null ? marketCapEth * ethUsdRate : null;
|
|
132
|
+
return {
|
|
133
|
+
token,
|
|
134
|
+
priceInEth,
|
|
135
|
+
priceInUsd,
|
|
136
|
+
ethUsdRate,
|
|
137
|
+
marketCapEth,
|
|
138
|
+
marketCapUsd,
|
|
139
|
+
totalSupply: tokenInfo.totalSupply,
|
|
140
|
+
totalSupplyFormatted,
|
|
141
|
+
liquidity,
|
|
142
|
+
tick,
|
|
143
|
+
wethSide,
|
|
144
|
+
timestamp: Date.now(),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Quick price check — just ETH and USD price, no market cap.
|
|
149
|
+
*/
|
|
150
|
+
async getQuickPrice(token) {
|
|
151
|
+
const info = await this.getTokenPrice(token);
|
|
152
|
+
return {
|
|
153
|
+
priceInEth: info.priceInEth,
|
|
154
|
+
priceInUsd: info.priceInUsd,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get the current ETH/USD price from CoinGecko (cached for 60s).
|
|
159
|
+
* Returns null on failure — never throws.
|
|
160
|
+
*/
|
|
161
|
+
async getEthUsdPrice() {
|
|
162
|
+
// Check cache
|
|
163
|
+
if (this.ethUsdCache && Date.now() - this.ethUsdCache.fetchedAt < ETH_USD_CACHE_MS) {
|
|
164
|
+
return this.ethUsdCache.rate;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const controller = new AbortController();
|
|
168
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
169
|
+
const res = await fetch(COINGECKO_ETH_URL, {
|
|
170
|
+
signal: controller.signal,
|
|
171
|
+
headers: { Accept: 'application/json' },
|
|
172
|
+
});
|
|
173
|
+
clearTimeout(timeout);
|
|
174
|
+
if (!res.ok)
|
|
175
|
+
return this.ethUsdCache?.rate ?? null;
|
|
176
|
+
const data = (await res.json());
|
|
177
|
+
const rate = data.ethereum?.usd ?? null;
|
|
178
|
+
if (rate !== null) {
|
|
179
|
+
this.ethUsdCache = { rate, fetchedAt: Date.now() };
|
|
180
|
+
}
|
|
181
|
+
return rate;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Return stale cache if available, else null
|
|
185
|
+
return this.ethUsdCache?.rate ?? null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// --------------------------------------------------------------------------
|
|
189
|
+
// Internal math
|
|
190
|
+
// --------------------------------------------------------------------------
|
|
191
|
+
/**
|
|
192
|
+
* Convert sqrtPriceX96 to a floating-point price ratio (currency1/currency0).
|
|
193
|
+
*
|
|
194
|
+
* For precision with very large/small numbers, we use a hybrid approach:
|
|
195
|
+
* compute with bigint where possible, then convert to float at the end.
|
|
196
|
+
*/
|
|
197
|
+
sqrtPriceX96ToPrice(sqrtPriceX96) {
|
|
198
|
+
if (sqrtPriceX96 === 0n)
|
|
199
|
+
return 0;
|
|
200
|
+
// price = (sqrtPriceX96)^2 / 2^192
|
|
201
|
+
// To avoid overflow in JS Number, we'll split the computation:
|
|
202
|
+
// Convert sqrtPriceX96 to float, divide by 2^96, then square
|
|
203
|
+
const sqrtPrice = Number(sqrtPriceX96) / Number(Q96);
|
|
204
|
+
return sqrtPrice * sqrtPrice;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=price.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../src/price.ts"],"names":[],"mappings":"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"}
|
package/dist/swap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,IAAI,EAKV,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,UAAU,EAEX,MAAM,iBAAiB,CAAC;AASzB,YAAY,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAwBzB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,aAAa;IAejC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
|
package/dist/swap.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import { erc20Abi, maxUint256, formatUnits, } from 'viem';
|
|
33
33
|
import { base, baseSepolia } from 'viem/chains';
|
|
34
|
-
import { ClawnchErrorCode, ClawnchDeployError } from './errors.js';
|
|
34
|
+
import { ClawnchErrorCode, ClawnchDeployError, withRetry } from './errors.js';
|
|
35
35
|
import { NATIVE_TOKEN_ADDRESS, BASE_CHAIN_ID, BASE_SEPOLIA_CHAIN_ID, } from './swap-types.js';
|
|
36
36
|
export { NATIVE_TOKEN_ADDRESS, ZEROX_API_BASE, BASE_CHAIN_ID, BASE_SEPOLIA_CHAIN_ID, BASE_WETH, BASE_SEPOLIA_WETH, } from './swap-types.js';
|
|
37
37
|
// ============================================================================
|
|
@@ -90,25 +90,27 @@ export class ClawnchSwapper {
|
|
|
90
90
|
* 'https://clawn.ch/api/swap/price?...'
|
|
91
91
|
*/
|
|
92
92
|
async apiRequest(path) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
93
|
+
return withRetry(async () => {
|
|
94
|
+
const url = `${this.apiBaseUrl}/api/swap${path}`;
|
|
95
|
+
const response = await fetch(url, {
|
|
96
|
+
method: 'GET',
|
|
97
|
+
headers: {
|
|
98
|
+
'Accept': 'application/json',
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
let errorMsg;
|
|
103
|
+
try {
|
|
104
|
+
const body = await response.json();
|
|
105
|
+
errorMsg = body.error || body.reason || JSON.stringify(body);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
errorMsg = `HTTP ${response.status}: ${response.statusText}`;
|
|
109
|
+
}
|
|
110
|
+
throw new ClawnchDeployError(ClawnchErrorCode.RPC_ERROR, `Swap API error: ${errorMsg}`);
|
|
108
111
|
}
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
return response.json();
|
|
112
|
+
return response.json();
|
|
113
|
+
});
|
|
112
114
|
}
|
|
113
115
|
/**
|
|
114
116
|
* Build query params from SwapParams
|
package/dist/swap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAIL,QAAQ,EACR,UAAU,EAEV,WAAW,GACZ,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
|
package/dist/trader.d.ts
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawnchTrader — Trade-level portfolio tracking with cost basis, P&L, and snapshots.
|
|
3
|
+
*
|
|
4
|
+
* Complements ClawnchPortfolio (which tracks on-chain fee balances) by adding:
|
|
5
|
+
* - Per-token cost basis tracking (average entry price)
|
|
6
|
+
* - Unrealized P&L (current value vs cost basis)
|
|
7
|
+
* - Realized P&L (from sells, computed against avg cost)
|
|
8
|
+
* - Portfolio allocation / concentration monitoring
|
|
9
|
+
* - Historical portfolio value snapshots for performance analysis
|
|
10
|
+
* - Trade history ledger
|
|
11
|
+
*
|
|
12
|
+
* Storage is pluggable — same pattern as ClawnchOrders.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const trader = new ClawnchTrader(storage);
|
|
17
|
+
*
|
|
18
|
+
* // Record a buy
|
|
19
|
+
* trader.recordTrade({
|
|
20
|
+
* token: '0xABC...',
|
|
21
|
+
* symbol: 'FOO',
|
|
22
|
+
* side: 'buy',
|
|
23
|
+
* amount: '1000',
|
|
24
|
+
* priceEth: 0.000005,
|
|
25
|
+
* txHash: '0x...',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Get portfolio summary with live pricing
|
|
29
|
+
* const summary = await trader.getSummary(priceFetcher);
|
|
30
|
+
* console.log(summary.totalValueEth, summary.unrealizedPnlPct);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export interface TraderPosition {
|
|
34
|
+
/** Token address */
|
|
35
|
+
token: string;
|
|
36
|
+
/** Token symbol (cached) */
|
|
37
|
+
symbol: string;
|
|
38
|
+
/** Total amount held (human-readable) */
|
|
39
|
+
amount: string;
|
|
40
|
+
/** Average cost basis in ETH per token */
|
|
41
|
+
avgCostEth: number;
|
|
42
|
+
/** Total ETH spent acquiring this position */
|
|
43
|
+
totalCostEth: number;
|
|
44
|
+
/** Total tokens bought across all trades */
|
|
45
|
+
totalBought: string;
|
|
46
|
+
/** Total tokens sold across all trades */
|
|
47
|
+
totalSold: string;
|
|
48
|
+
/** Realized P&L in ETH (from sells) */
|
|
49
|
+
realizedPnlEth: number;
|
|
50
|
+
/** First acquisition timestamp */
|
|
51
|
+
firstBuyAt: number;
|
|
52
|
+
/** Last trade timestamp */
|
|
53
|
+
lastTradeAt: number;
|
|
54
|
+
/** Number of trades */
|
|
55
|
+
tradeCount: number;
|
|
56
|
+
}
|
|
57
|
+
export interface TraderTrade {
|
|
58
|
+
/** Trade ID */
|
|
59
|
+
id: string;
|
|
60
|
+
/** Token address */
|
|
61
|
+
token: string;
|
|
62
|
+
/** Token symbol */
|
|
63
|
+
symbol: string;
|
|
64
|
+
/** Buy or sell */
|
|
65
|
+
side: 'buy' | 'sell';
|
|
66
|
+
/** Amount traded (human-readable) */
|
|
67
|
+
amount: string;
|
|
68
|
+
/** Price per token in ETH at time of trade */
|
|
69
|
+
priceEth: number;
|
|
70
|
+
/** Total value of trade in ETH */
|
|
71
|
+
valueEth: number;
|
|
72
|
+
/** Transaction hash */
|
|
73
|
+
txHash: string;
|
|
74
|
+
/** Timestamp */
|
|
75
|
+
timestamp: number;
|
|
76
|
+
/** Optional tag for grouping (e.g. order ID, strategy name) */
|
|
77
|
+
tag?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface TraderSnapshot {
|
|
80
|
+
/** Timestamp of snapshot */
|
|
81
|
+
timestamp: number;
|
|
82
|
+
/** Total portfolio value in ETH (tokens only, not ETH balance) */
|
|
83
|
+
totalValueEth: number;
|
|
84
|
+
/** Total portfolio value in USD */
|
|
85
|
+
totalValueUsd: number | null;
|
|
86
|
+
/** ETH balance at snapshot time */
|
|
87
|
+
ethBalance: number;
|
|
88
|
+
/** Number of positions with non-zero holdings */
|
|
89
|
+
positionCount: number;
|
|
90
|
+
}
|
|
91
|
+
export interface TraderSummary {
|
|
92
|
+
/** All current positions with live pricing */
|
|
93
|
+
positions: PositionWithPricing[];
|
|
94
|
+
/** Total portfolio value in ETH (tokens only, not ETH balance) */
|
|
95
|
+
totalValueEth: number;
|
|
96
|
+
/** Total portfolio value in USD */
|
|
97
|
+
totalValueUsd: number | null;
|
|
98
|
+
/** ETH balance */
|
|
99
|
+
ethBalanceEth: number;
|
|
100
|
+
/** Combined value (tokens + ETH) */
|
|
101
|
+
grandTotalEth: number;
|
|
102
|
+
/** Total unrealized P&L in ETH across all positions */
|
|
103
|
+
unrealizedPnlEth: number;
|
|
104
|
+
/** Total unrealized P&L as percentage of cost basis */
|
|
105
|
+
unrealizedPnlPct: number;
|
|
106
|
+
/** Total realized P&L in ETH */
|
|
107
|
+
realizedPnlEth: number;
|
|
108
|
+
/** Concentration: highest single-token allocation % */
|
|
109
|
+
maxConcentrationPct: number;
|
|
110
|
+
/** Token with highest concentration */
|
|
111
|
+
maxConcentrationToken: string;
|
|
112
|
+
/** Timestamp */
|
|
113
|
+
timestamp: number;
|
|
114
|
+
}
|
|
115
|
+
export interface PositionWithPricing extends TraderPosition {
|
|
116
|
+
/** Current price in ETH per token */
|
|
117
|
+
currentPriceEth: number;
|
|
118
|
+
/** Current value of holdings in ETH */
|
|
119
|
+
currentValueEth: number;
|
|
120
|
+
/** Current value in USD */
|
|
121
|
+
currentValueUsd: number | null;
|
|
122
|
+
/** Unrealized P&L in ETH */
|
|
123
|
+
unrealizedPnlEth: number;
|
|
124
|
+
/** Unrealized P&L as percentage of cost basis */
|
|
125
|
+
unrealizedPnlPct: number;
|
|
126
|
+
/** Portfolio allocation percentage (of total token value) */
|
|
127
|
+
allocationPct: number;
|
|
128
|
+
}
|
|
129
|
+
/** Price fetcher function — the caller provides this */
|
|
130
|
+
export type TraderPriceFetcher = (token: string) => Promise<{
|
|
131
|
+
priceEth: number;
|
|
132
|
+
priceUsd: number | null;
|
|
133
|
+
} | null>;
|
|
134
|
+
/** Storage interface for trader persistence */
|
|
135
|
+
export interface TraderStorage {
|
|
136
|
+
getPositions(): TraderPosition[];
|
|
137
|
+
savePositions(positions: TraderPosition[]): void;
|
|
138
|
+
getTrades(): TraderTrade[];
|
|
139
|
+
saveTrades(trades: TraderTrade[]): void;
|
|
140
|
+
getSnapshots(): TraderSnapshot[];
|
|
141
|
+
saveSnapshots(snapshots: TraderSnapshot[]): void;
|
|
142
|
+
}
|
|
143
|
+
export declare class ClawnchTrader {
|
|
144
|
+
private storage;
|
|
145
|
+
constructor(storage: TraderStorage);
|
|
146
|
+
/**
|
|
147
|
+
* Record a trade. Updates position cost basis and P&L.
|
|
148
|
+
*
|
|
149
|
+
* For buys: increases position size, adjusts average cost basis.
|
|
150
|
+
* For sells: decreases position size, realizes P&L against cost basis.
|
|
151
|
+
*/
|
|
152
|
+
recordTrade(params: {
|
|
153
|
+
token: string;
|
|
154
|
+
symbol?: string;
|
|
155
|
+
side: 'buy' | 'sell';
|
|
156
|
+
amount: string;
|
|
157
|
+
priceEth: number;
|
|
158
|
+
txHash: string;
|
|
159
|
+
tag?: string;
|
|
160
|
+
}): TraderTrade;
|
|
161
|
+
/**
|
|
162
|
+
* Get full portfolio summary with live pricing.
|
|
163
|
+
*/
|
|
164
|
+
getSummary(priceFetcher: TraderPriceFetcher, ethBalanceEth?: number): Promise<TraderSummary>;
|
|
165
|
+
/** Get positions list (raw, no pricing). */
|
|
166
|
+
getPositions(): TraderPosition[];
|
|
167
|
+
/** Get trade history, optionally filtered by token. */
|
|
168
|
+
getTrades(token?: string): TraderTrade[];
|
|
169
|
+
/** Get position for a specific token. */
|
|
170
|
+
getPosition(token: string): TraderPosition | null;
|
|
171
|
+
/** Take a snapshot of current portfolio value. Call once per heartbeat. */
|
|
172
|
+
recordSnapshot(totalValueEth: number, totalValueUsd: number | null, ethBalance: number): void;
|
|
173
|
+
/** Get portfolio value history for charting / analysis. */
|
|
174
|
+
getHistory(limit?: number): TraderSnapshot[];
|
|
175
|
+
/**
|
|
176
|
+
* Compute portfolio performance over a time window.
|
|
177
|
+
*/
|
|
178
|
+
getPerformance(windowMs: number): {
|
|
179
|
+
startValue: number;
|
|
180
|
+
endValue: number;
|
|
181
|
+
changePct: number;
|
|
182
|
+
changeEth: number;
|
|
183
|
+
period: string;
|
|
184
|
+
} | null;
|
|
185
|
+
/** Format portfolio summary for the agent's system prompt. */
|
|
186
|
+
static formatSummary(summary: TraderSummary): string;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=trader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trader.d.ts","sourceRoot":"","sources":["../src/trader.ts"],"names":[],"mappings":"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"}
|