genius-intents 0.24.3-develop.0 → 0.25.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/CHANGELOG.md +27 -0
- package/dist/lib/transfer-taxes/erc20-tokenIn-taxes.d.ts +3 -1
- package/dist/lib/transfer-taxes/erc20-tokenIn-taxes.d.ts.map +1 -1
- package/dist/lib/transfer-taxes/erc20-tokenIn-taxes.js +222 -75
- package/dist/lib/transfer-taxes/erc20-tokenIn-taxes.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
## [0.25.0] - 2025-12-01 (Beta)
|
|
2
|
+
|
|
3
|
+
🧪 **This is a beta release for testing purposes.**
|
|
4
|
+
|
|
5
|
+
## [0.25.0](https://github.com/Genius-Foundation/genius-intents/compare/v0.24.2...v0.25.0) (2025-12-01)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* improve erc20 transfer tax detection ([#189](https://github.com/Genius-Foundation/genius-intents/issues/189)) ([2175b02](https://github.com/Genius-Foundation/genius-intents/commit/2175b020b93e632c3d74032143a960421c67a345))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Documentation
|
|
14
|
+
|
|
15
|
+
* update CHANGELOG.md for v0.24.3-develop.0 (beta) ([0facab6](https://github.com/Genius-Foundation/genius-intents/commit/0facab68520577c7f9c25692dfa2aa8387a5d674))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
⚠️ **Beta Release Notes:**
|
|
20
|
+
- This version is intended for testing and development
|
|
21
|
+
- May contain experimental features
|
|
22
|
+
- Not recommended for production use
|
|
23
|
+
- Feedback and bug reports are welcome
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
|
|
1
28
|
## [0.24.3-develop.0] - 2025-11-28 (Beta)
|
|
2
29
|
|
|
3
30
|
🧪 **This is a beta release for testing purposes.**
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { DetermineERC20TransferTax, ERC20TransferTaxResult } from './erc20-taxes.types';
|
|
2
|
-
export declare function determineTokenInTransferTax(params: DetermineERC20TransferTax
|
|
2
|
+
export declare function determineTokenInTransferTax(params: DetermineERC20TransferTax & {
|
|
3
|
+
enableDebugLogging?: boolean;
|
|
4
|
+
}): Promise<ERC20TransferTaxResult>;
|
|
3
5
|
//# sourceMappingURL=erc20-tokenIn-taxes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20-tokenIn-taxes.d.ts","sourceRoot":"","sources":["../../../src/lib/transfer-taxes/erc20-tokenIn-taxes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"erc20-tokenIn-taxes.d.ts","sourceRoot":"","sources":["../../../src/lib/transfer-taxes/erc20-tokenIn-taxes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA2SxF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,yBAAyB,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GACnE,OAAO,CAAC,sBAAsB,CAAC,CAsGjC"}
|
|
@@ -7,7 +7,6 @@ const is_native_1 = require("../../utils/is-native");
|
|
|
7
7
|
const wrapped_native_1 = require("../../utils/wrapped-native");
|
|
8
8
|
/* ----------------- constants & helpers ----------------- */
|
|
9
9
|
const TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
10
|
-
const SWAP_TOPIC = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822';
|
|
11
10
|
const KNOWN_SINKS = new Set([
|
|
12
11
|
constants_1.ZERO_ADDRESS.toLowerCase(),
|
|
13
12
|
'0x000000000000000000000000000000000000dead',
|
|
@@ -20,6 +19,9 @@ function toBps(n, d) {
|
|
|
20
19
|
return 0;
|
|
21
20
|
return Number((n * 10000n) / d);
|
|
22
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse all Transfer events for a specific token from the transaction receipt
|
|
24
|
+
*/
|
|
23
25
|
function parseTokenTransfersFor(receipt, token) {
|
|
24
26
|
const tokenLc = token.toLowerCase();
|
|
25
27
|
const out = [];
|
|
@@ -34,9 +36,7 @@ function parseTokenTransfersFor(receipt, token) {
|
|
|
34
36
|
continue;
|
|
35
37
|
if (log.topics.length < 3)
|
|
36
38
|
continue;
|
|
37
|
-
if (!log.topics[1])
|
|
38
|
-
continue;
|
|
39
|
-
if (!log.topics[2])
|
|
39
|
+
if (!log.topics[1] || !log.topics[2])
|
|
40
40
|
continue;
|
|
41
41
|
const from = `0x${log.topics[1].slice(26)}`.toLowerCase();
|
|
42
42
|
const to = `0x${log.topics[2].slice(26)}`.toLowerCase();
|
|
@@ -47,80 +47,198 @@ function parseTokenTransfersFor(receipt, token) {
|
|
|
47
47
|
}
|
|
48
48
|
return out;
|
|
49
49
|
}
|
|
50
|
-
const pairAbi = [
|
|
51
|
-
'function token0() view returns (address)',
|
|
52
|
-
'function token1() view returns (address)',
|
|
53
|
-
'event Swap(address indexed sender,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out,address indexed to)',
|
|
54
|
-
];
|
|
55
50
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
51
|
+
* Analyze token flow through the transaction, focusing ONLY on the maker's flow path.
|
|
52
|
+
* This prevents counting unrelated transfers to the pair.
|
|
53
|
+
*
|
|
54
|
+
* @param transfers - Array of parsed transfer events
|
|
55
|
+
* @param maker - Address of the user initiating the transaction
|
|
56
|
+
* @param pair - Address of the DEX pair
|
|
57
|
+
* @param tokenAddr - Address of the token being analyzed
|
|
58
|
+
* @returns TokenFlowAnalysis object containing flow metrics and intermediaries
|
|
58
59
|
*/
|
|
59
|
-
function
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
function analyzeTokenFlow(transfers, maker, pair, tokenAddr) {
|
|
61
|
+
const makerLc = maker.toLowerCase();
|
|
62
|
+
const pairLc = pair.toLowerCase();
|
|
63
|
+
const tokenLc = tokenAddr.toLowerCase();
|
|
64
|
+
let totalFromMaker = 0n;
|
|
65
|
+
let makerDirectToPair = 0n;
|
|
66
|
+
let makerDirectToSinks = 0n;
|
|
67
|
+
// Track which addresses are part of the maker's flow
|
|
68
|
+
const partOfMakerFlow = new Set();
|
|
69
|
+
partOfMakerFlow.add(makerLc);
|
|
70
|
+
// First pass: Track all outflows from maker
|
|
71
|
+
for (const t of transfers) {
|
|
72
|
+
if (t.from === makerLc) {
|
|
73
|
+
totalFromMaker += t.value;
|
|
74
|
+
const isSink = KNOWN_SINKS.has(t.to) || t.to === tokenLc;
|
|
75
|
+
if (t.to === pairLc) {
|
|
76
|
+
makerDirectToPair += t.value;
|
|
77
|
+
}
|
|
78
|
+
else if (isSink) {
|
|
79
|
+
makerDirectToSinks += t.value;
|
|
80
|
+
}
|
|
81
|
+
else if (t.to) {
|
|
82
|
+
// Mark receiver as part of maker's flow (potential intermediary)
|
|
83
|
+
// Guard: only add non-empty addresses
|
|
84
|
+
partOfMakerFlow.add(t.to);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Second pass: Identify intermediaries and extend flow set
|
|
89
|
+
// FIX: Use array-based queue to handle items added during iteration
|
|
90
|
+
// JavaScript Set iteration doesn't include newly added items!
|
|
91
|
+
const intermediaries = new Set();
|
|
92
|
+
// Pre-compute which addresses send to pair for O(n) instead of O(n*m)
|
|
93
|
+
const addressesToPair = new Set();
|
|
94
|
+
for (const t of transfers) {
|
|
95
|
+
if (t.to === pairLc && t.from) {
|
|
96
|
+
addressesToPair.add(t.from);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Use queue-based BFS to traverse all reachable addresses from maker
|
|
100
|
+
const queue = Array.from(partOfMakerFlow);
|
|
101
|
+
for (let i = 0; i < queue.length; i++) {
|
|
102
|
+
const addr = queue[i];
|
|
103
|
+
// Guard against undefined or empty addresses
|
|
104
|
+
if (!addr || addr === makerLc)
|
|
67
105
|
continue;
|
|
68
|
-
|
|
69
|
-
|
|
106
|
+
// Check if this address sends to pair
|
|
107
|
+
const sendsToPair = addressesToPair.has(addr);
|
|
108
|
+
if (sendsToPair) {
|
|
109
|
+
intermediaries.add(addr);
|
|
110
|
+
}
|
|
111
|
+
// Mark all recipients of this address as part of flow
|
|
112
|
+
for (const t of transfers) {
|
|
113
|
+
if (t.from === addr && t.to && !partOfMakerFlow.has(t.to)) {
|
|
114
|
+
partOfMakerFlow.add(t.to);
|
|
115
|
+
queue.push(t.to);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Third pass: Calculate flows ONLY from maker's flow path
|
|
120
|
+
let totalToPairFromMakerFlow = 0n;
|
|
121
|
+
let totalToSinksFromMakerFlow = 0n;
|
|
122
|
+
let totalToOtherFromMakerFlow = 0n;
|
|
123
|
+
for (const t of transfers) {
|
|
124
|
+
// Only count transfers that are part of maker's flow
|
|
125
|
+
// Guard: ensure t.from exists and is in the flow
|
|
126
|
+
if (!t.from || !partOfMakerFlow.has(t.from))
|
|
70
127
|
continue;
|
|
71
|
-
|
|
128
|
+
const isSink = KNOWN_SINKS.has(t.to) || t.to === tokenLc;
|
|
129
|
+
if (t.to === pairLc) {
|
|
130
|
+
totalToPairFromMakerFlow += t.value;
|
|
131
|
+
}
|
|
132
|
+
else if (isSink) {
|
|
133
|
+
totalToSinksFromMakerFlow += t.value;
|
|
134
|
+
}
|
|
135
|
+
else if (t.to && !partOfMakerFlow.has(t.to)) {
|
|
136
|
+
// Going to an address outside the flow (potential tax recipient)
|
|
137
|
+
totalToOtherFromMakerFlow += t.value;
|
|
138
|
+
}
|
|
72
139
|
}
|
|
73
|
-
return
|
|
140
|
+
return {
|
|
141
|
+
totalFromMaker,
|
|
142
|
+
totalToPairFromMakerFlow,
|
|
143
|
+
totalToSinksFromMakerFlow,
|
|
144
|
+
totalToOtherFromMakerFlow,
|
|
145
|
+
intermediaries,
|
|
146
|
+
makerDirectToPair,
|
|
147
|
+
makerDirectToSinks,
|
|
148
|
+
};
|
|
74
149
|
}
|
|
75
150
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
151
|
+
* Calculate sell tax based on token flow analysis.
|
|
152
|
+
*
|
|
153
|
+
* Tax is calculated as the difference between what maker sent and what reached the pair.
|
|
154
|
+
* This captures:
|
|
155
|
+
* 1. Tokens burned/sent to sinks
|
|
156
|
+
* 2. Tokens sent to treasury/fee addresses
|
|
157
|
+
* 3. Any other tokens that "disappeared" from the flow
|
|
158
|
+
*
|
|
159
|
+
* @param analysis - The token flow analysis results
|
|
160
|
+
* @param enableDebugLogging - Whether to output debug information
|
|
161
|
+
* @returns Tax rate in basis points (bps)
|
|
78
162
|
*/
|
|
79
|
-
function
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (t.from !== userEoaLc)
|
|
94
|
-
continue; // only transfers from the user
|
|
95
|
-
const isPairReceiving = t.to === pairLc;
|
|
96
|
-
const isSink = KNOWN_SINKS.has(t.to) || t.to === tokenLc;
|
|
97
|
-
// console.log(
|
|
98
|
-
// `User transfer: from=${t.from} to=${t.to} value=${t.value} index=${t.index} isPair=${isPairReceiving} isSink=${isSink}`,
|
|
99
|
-
// );
|
|
100
|
-
if (isPairReceiving) {
|
|
101
|
-
userSentToPair += t.value;
|
|
163
|
+
function computeSellTaxFromFlow(analysis, enableDebugLogging = false) {
|
|
164
|
+
const { totalFromMaker, totalToPairFromMakerFlow, totalToSinksFromMakerFlow, totalToOtherFromMakerFlow, } = analysis;
|
|
165
|
+
if (enableDebugLogging) {
|
|
166
|
+
const { intermediaries, makerDirectToPair, makerDirectToSinks } = analysis;
|
|
167
|
+
console.log(`\n=== TOKEN FLOW ANALYSIS (REVISED) ===`);
|
|
168
|
+
console.log(`Total from maker: ${totalFromMaker}`);
|
|
169
|
+
console.log(`Maker direct to pair: ${makerDirectToPair}`);
|
|
170
|
+
console.log(`Maker direct to sinks: ${makerDirectToSinks}`);
|
|
171
|
+
console.log(`Total to pair (from maker flow): ${totalToPairFromMakerFlow}`);
|
|
172
|
+
console.log(`Total to sinks (from maker flow): ${totalToSinksFromMakerFlow}`);
|
|
173
|
+
console.log(`Total to other addresses (from maker flow): ${totalToOtherFromMakerFlow}`);
|
|
174
|
+
console.log(`Intermediaries found: ${intermediaries.size}`);
|
|
175
|
+
if (intermediaries.size > 0) {
|
|
176
|
+
console.log(`Intermediary addresses: ${Array.from(intermediaries).join(', ')}`);
|
|
102
177
|
}
|
|
103
|
-
|
|
104
|
-
|
|
178
|
+
}
|
|
179
|
+
if (totalFromMaker === 0n) {
|
|
180
|
+
if (enableDebugLogging) {
|
|
181
|
+
console.log(`No tokens from maker - cannot calculate tax`);
|
|
105
182
|
}
|
|
106
|
-
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
// Calculate what was "lost" in the flow (the tax)
|
|
186
|
+
// Tax = what left maker - what reached pair
|
|
187
|
+
const taxAmount = totalFromMaker - totalToPairFromMakerFlow;
|
|
188
|
+
if (enableDebugLogging) {
|
|
189
|
+
console.log(`\nTax calculation:`);
|
|
190
|
+
console.log(` Sent by maker: ${totalFromMaker}`);
|
|
191
|
+
console.log(` Reached pair: ${totalToPairFromMakerFlow}`);
|
|
192
|
+
console.log(` Tax amount: ${taxAmount}`);
|
|
193
|
+
console.log(` Breakdown:`);
|
|
194
|
+
console.log(` - To sinks: ${totalToSinksFromMakerFlow}`);
|
|
195
|
+
console.log(` - To other addresses: ${totalToOtherFromMakerFlow}`);
|
|
196
|
+
console.log(` - Unaccounted: ${taxAmount - totalToSinksFromMakerFlow - totalToOtherFromMakerFlow}`);
|
|
107
197
|
}
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
198
|
+
// Validation: tax should not be negative
|
|
199
|
+
if (taxAmount < 0n) {
|
|
200
|
+
if (enableDebugLogging) {
|
|
201
|
+
console.log(`⚠️ Warning: Negative tax detected (more reached pair than left maker)`);
|
|
202
|
+
console.log(`This suggests counting unrelated transfers. Returning 0% tax.`);
|
|
203
|
+
}
|
|
113
204
|
return 0;
|
|
114
|
-
|
|
115
|
-
const taxBps = toBps(
|
|
116
|
-
|
|
205
|
+
}
|
|
206
|
+
const taxBps = toBps(taxAmount, totalFromMaker);
|
|
207
|
+
if (enableDebugLogging) {
|
|
208
|
+
console.log(`\nCalculated sell tax: ${taxBps} bps (${taxBps / 100}%)`);
|
|
209
|
+
}
|
|
117
210
|
return taxBps;
|
|
118
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Validate that the tax calculation has sufficient data to be trusted.
|
|
214
|
+
*
|
|
215
|
+
* @param analysis - The token flow analysis to validate
|
|
216
|
+
* @param enableDebugLogging - Whether to output debug information
|
|
217
|
+
* @returns Object with isValid boolean and optional reason string
|
|
218
|
+
*/
|
|
219
|
+
function validateTaxCalculation(analysis, enableDebugLogging = false) {
|
|
220
|
+
const { totalFromMaker, totalToPairFromMakerFlow, totalToSinksFromMakerFlow, totalToOtherFromMakerFlow, } = analysis;
|
|
221
|
+
// Must have some outflow from maker
|
|
222
|
+
if (totalFromMaker === 0n) {
|
|
223
|
+
return { isValid: false, reason: 'No transfers from maker found' };
|
|
224
|
+
}
|
|
225
|
+
// Calculate total accounted for
|
|
226
|
+
const totalAccountedFor = totalToPairFromMakerFlow + totalToSinksFromMakerFlow + totalToOtherFromMakerFlow;
|
|
227
|
+
// Should not have significantly more accounted for than sent
|
|
228
|
+
// Allow 5% variance for rounding/precision issues
|
|
229
|
+
const flowRatio = totalFromMaker > 0n ? Number((totalAccountedFor * 1000n) / totalFromMaker) : 0;
|
|
230
|
+
if (flowRatio > 1050) {
|
|
231
|
+
if (enableDebugLogging) {
|
|
232
|
+
console.log(`⚠️ Flow validation failed: ${flowRatio / 10}% accounted (expected <= 105%)`);
|
|
233
|
+
}
|
|
234
|
+
return { isValid: false, reason: `Too much accounted: ${flowRatio / 10}%` };
|
|
235
|
+
}
|
|
236
|
+
return { isValid: true };
|
|
237
|
+
}
|
|
119
238
|
/* ----------------- public entry ----------------- */
|
|
120
239
|
async function determineTokenInTransferTax(params) {
|
|
121
|
-
const { tokenIn,
|
|
240
|
+
const { tokenIn, network, client, sellTxHash, pairAddress, sellTxEoa, enableDebugLogging = false, } = params;
|
|
122
241
|
const tokenInIsNative = (0, is_native_1.isNative)(tokenIn);
|
|
123
|
-
const tokenOutIsNative = (0, is_native_1.isNative)(tokenOut);
|
|
124
242
|
const wNative = wrapped_native_1.wrappedNativeTokens[network];
|
|
125
243
|
try {
|
|
126
244
|
// If tokenIn is native, no sell tax applies - return 0 immediately
|
|
@@ -135,24 +253,53 @@ async function determineTokenInTransferTax(params) {
|
|
|
135
253
|
if (!pairAddress) {
|
|
136
254
|
throw new Error('pairAddress is required for EVM transfer-tax detection');
|
|
137
255
|
}
|
|
138
|
-
if (tokenInIsNative && tokenOutIsNative)
|
|
139
|
-
throw new Error('Both tokenIn and tokenOut cannot be native tokens');
|
|
140
256
|
const pair = toChecksum(pairAddress);
|
|
141
|
-
|
|
142
|
-
|
|
257
|
+
const tokenInAddr = toChecksum(tokenIn);
|
|
258
|
+
if (enableDebugLogging) {
|
|
259
|
+
console.log(`\n=== TRANSFER TAX DETECTION ===`);
|
|
260
|
+
console.log(`Token: ${tokenInAddr}`);
|
|
261
|
+
console.log(`Pair: ${pair}`);
|
|
262
|
+
console.log(`Maker: ${sellTxEoa}`);
|
|
263
|
+
console.log(`TX Hash: ${sellTxHash}`);
|
|
264
|
+
}
|
|
265
|
+
// Fetch transaction receipt
|
|
143
266
|
const receipt = await client.getTransactionReceipt(sellTxHash);
|
|
144
|
-
if (!receipt)
|
|
145
|
-
throw new Error(`
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
267
|
+
if (!receipt) {
|
|
268
|
+
throw new Error(`Transaction ${sellTxHash} not found`);
|
|
269
|
+
}
|
|
270
|
+
// Parse all Transfer events for tokenIn
|
|
271
|
+
const transfers = parseTokenTransfersFor(receipt, tokenInAddr);
|
|
272
|
+
if (enableDebugLogging) {
|
|
273
|
+
console.log(`Total Transfer events found: ${transfers.length}`);
|
|
274
|
+
}
|
|
275
|
+
if (transfers.length === 0) {
|
|
276
|
+
if (enableDebugLogging) {
|
|
277
|
+
console.log(`No transfers found - assuming 0% tax`);
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
address: tokenInAddr,
|
|
281
|
+
sellTaxBps: 0,
|
|
282
|
+
};
|
|
152
283
|
}
|
|
284
|
+
// Analyze token flow
|
|
285
|
+
const flowAnalysis = analyzeTokenFlow(transfers, sellTxEoa, pair.toLowerCase(), tokenInAddr.toLowerCase());
|
|
286
|
+
// Validate the analysis
|
|
287
|
+
const validation = validateTaxCalculation(flowAnalysis, enableDebugLogging);
|
|
288
|
+
if (!validation.isValid) {
|
|
289
|
+
if (enableDebugLogging) {
|
|
290
|
+
console.log(`Validation failed: ${validation.reason}`);
|
|
291
|
+
}
|
|
292
|
+
// Return 0 tax if we can't reliably calculate
|
|
293
|
+
return {
|
|
294
|
+
address: tokenInAddr,
|
|
295
|
+
sellTaxBps: 0,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
// Calculate tax from flow
|
|
299
|
+
const sellTaxBps = computeSellTaxFromFlow(flowAnalysis, enableDebugLogging);
|
|
153
300
|
return {
|
|
154
|
-
address:
|
|
155
|
-
sellTaxBps
|
|
301
|
+
address: tokenInAddr,
|
|
302
|
+
sellTaxBps,
|
|
156
303
|
};
|
|
157
304
|
}
|
|
158
305
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20-tokenIn-taxes.js","sourceRoot":"","sources":["../../../src/lib/transfer-taxes/erc20-tokenIn-taxes.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"erc20-tokenIn-taxes.js","sourceRoot":"","sources":["../../../src/lib/transfer-taxes/erc20-tokenIn-taxes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genius-intents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "A unified SDK for interacting with intents-based protocols across multiple blockchains including Solana, Ethereum, and Sui",
|
|
5
5
|
"license": "GNU",
|
|
6
6
|
"author": "Samuel Videau <samuel@videau.io>, AltLoot <@altloot>, Satyam Kumar <skdbsp123@gmail.com>",
|