@polymarket/clob-client-v2 1.0.3-canary.0 → 1.0.3
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/dist/index.cjs +61 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -2
- package/dist/index.d.ts +14 -2
- package/dist/index.js +61 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -141,6 +141,28 @@ var ApiError = class extends Error {
|
|
|
141
141
|
}
|
|
142
142
|
};
|
|
143
143
|
|
|
144
|
+
// src/fees/index.ts
|
|
145
|
+
var MIN_FEE_SLIPPAGE_PERCENTAGE = 1;
|
|
146
|
+
var MAX_FEE_SLIPPAGE_PERCENTAGE = 100;
|
|
147
|
+
function validateFeeSlippage(feeSlippage) {
|
|
148
|
+
if (!Number.isFinite(feeSlippage) || feeSlippage < 0 || feeSlippage > MAX_FEE_SLIPPAGE_PERCENTAGE || feeSlippage > 0 && feeSlippage < MIN_FEE_SLIPPAGE_PERCENTAGE) {
|
|
149
|
+
throw new Error("feeSlippage must be 0 or a percentage between 1 and 100");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function adjustBuyAmountForFees(amount, price, userUSDCBalance, feeRate, feeExponent, builderTakerFeeRate, feeSlippage = 0) {
|
|
153
|
+
validateFeeSlippage(feeSlippage);
|
|
154
|
+
const platformFeeRate = feeRate * (price * (1 - price)) ** feeExponent;
|
|
155
|
+
const effectivePlatformFeeRate = platformFeeRate * (1 + feeSlippage / 100);
|
|
156
|
+
const feeBaseAmount = Math.min(amount, userUSDCBalance);
|
|
157
|
+
const platformFee = feeBaseAmount / price * effectivePlatformFeeRate;
|
|
158
|
+
const builderFee = feeBaseAmount * builderTakerFeeRate;
|
|
159
|
+
const totalCost = amount + platformFee + builderFee;
|
|
160
|
+
if (userUSDCBalance <= totalCost) {
|
|
161
|
+
return Math.max(userUSDCBalance - platformFee - builderFee, 0);
|
|
162
|
+
}
|
|
163
|
+
return amount;
|
|
164
|
+
}
|
|
165
|
+
|
|
144
166
|
// src/signing/constants.ts
|
|
145
167
|
var MSG_TO_SIGN = "This message attests that I control the given wallet";
|
|
146
168
|
|
|
@@ -1372,15 +1394,6 @@ var OrderBuilder = class {
|
|
|
1372
1394
|
};
|
|
1373
1395
|
|
|
1374
1396
|
// src/client.ts
|
|
1375
|
-
function adjustBuyAmountForFees(amount, price, userUSDCBalance, feeRate, feeExponent, builderTakerFeeRate) {
|
|
1376
|
-
const platformFeeRate = feeRate * (price * (1 - price)) ** feeExponent;
|
|
1377
|
-
const platformFee = amount / price * platformFeeRate;
|
|
1378
|
-
const totalCost = amount + platformFee + amount * builderTakerFeeRate;
|
|
1379
|
-
if (userUSDCBalance <= totalCost) {
|
|
1380
|
-
return userUSDCBalance / (1 + platformFeeRate / price + builderTakerFeeRate);
|
|
1381
|
-
}
|
|
1382
|
-
return amount;
|
|
1383
|
-
}
|
|
1384
1397
|
var ClobClient = class {
|
|
1385
1398
|
host;
|
|
1386
1399
|
chainId;
|
|
@@ -1403,6 +1416,7 @@ var ClobClient = class {
|
|
|
1403
1416
|
cachedVersion;
|
|
1404
1417
|
retryOnError;
|
|
1405
1418
|
throwOnError;
|
|
1419
|
+
feeSlippage;
|
|
1406
1420
|
constructor({
|
|
1407
1421
|
host,
|
|
1408
1422
|
chain,
|
|
@@ -1414,7 +1428,8 @@ var ClobClient = class {
|
|
|
1414
1428
|
builderConfig,
|
|
1415
1429
|
getSigner,
|
|
1416
1430
|
retryOnError,
|
|
1417
|
-
throwOnError
|
|
1431
|
+
throwOnError,
|
|
1432
|
+
feeSlippage
|
|
1418
1433
|
}) {
|
|
1419
1434
|
this.host = host.endsWith("/") ? host.slice(0, -1) : host;
|
|
1420
1435
|
this.chainId = chain;
|
|
@@ -1441,6 +1456,8 @@ var ClobClient = class {
|
|
|
1441
1456
|
this.tokenConditionMap = {};
|
|
1442
1457
|
this.retryOnError = retryOnError;
|
|
1443
1458
|
this.throwOnError = throwOnError;
|
|
1459
|
+
this.feeSlippage = feeSlippage ?? 0;
|
|
1460
|
+
validateFeeSlippage(this.feeSlippage);
|
|
1444
1461
|
this.useServerTime = useServerTime;
|
|
1445
1462
|
if (builderConfig !== void 0) {
|
|
1446
1463
|
this.builderConfig = builderConfig;
|
|
@@ -1938,8 +1955,19 @@ var ClobClient = class {
|
|
|
1938
1955
|
`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${1 - parseFloat(tickSize)}`
|
|
1939
1956
|
);
|
|
1940
1957
|
}
|
|
1941
|
-
|
|
1958
|
+
orderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);
|
|
1942
1959
|
const version = await this.resolveVersion();
|
|
1960
|
+
if (version === 2 && orderToSign.side === "BUY" /* BUY */ && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) {
|
|
1961
|
+
const adjustedAmount = await this.adjustBuyAmountForBalance(
|
|
1962
|
+
tokenID,
|
|
1963
|
+
orderToSign.size * orderToSign.price,
|
|
1964
|
+
orderToSign.price,
|
|
1965
|
+
orderToSign.userUSDCBalance,
|
|
1966
|
+
orderToSign.builderCode
|
|
1967
|
+
);
|
|
1968
|
+
orderToSign.size = adjustedAmount / orderToSign.price;
|
|
1969
|
+
}
|
|
1970
|
+
const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
|
|
1943
1971
|
if (version === 1) {
|
|
1944
1972
|
const userFeeRateBps = "feeRateBps" in orderToSign ? orderToSign.feeRateBps : void 0;
|
|
1945
1973
|
const feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);
|
|
@@ -1979,15 +2007,12 @@ var ClobClient = class {
|
|
|
1979
2007
|
await this.ensureBuilderFeeRateCached(orderToSign.builderCode);
|
|
1980
2008
|
if (orderToSign.side === "BUY" /* BUY */ && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) {
|
|
1981
2009
|
const price = orderToSign.price;
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
orderToSign.amount = adjustBuyAmountForFees(
|
|
2010
|
+
orderToSign.amount = await this.adjustBuyAmountForBalance(
|
|
2011
|
+
tokenID,
|
|
1985
2012
|
orderToSign.amount,
|
|
1986
2013
|
price,
|
|
1987
|
-
userUSDCBalance,
|
|
1988
|
-
|
|
1989
|
-
this.feeInfos[tokenID].exponent,
|
|
1990
|
-
builderTakerFeeRate
|
|
2014
|
+
orderToSign.userUSDCBalance,
|
|
2015
|
+
orderToSign.builderCode
|
|
1991
2016
|
);
|
|
1992
2017
|
}
|
|
1993
2018
|
const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
|
|
@@ -2447,6 +2472,24 @@ var ClobClient = class {
|
|
|
2447
2472
|
isBuilderOrder(builderCode) {
|
|
2448
2473
|
return builderCode !== void 0 && builderCode !== bytes32Zero;
|
|
2449
2474
|
}
|
|
2475
|
+
async getBuilderTakerFeeRate(builderCode) {
|
|
2476
|
+
if (!this.isBuilderOrder(builderCode)) return 0;
|
|
2477
|
+
await this.ensureBuilderFeeRateCached(builderCode);
|
|
2478
|
+
return this.builderFeeRates[builderCode ?? ""]?.taker ?? 0;
|
|
2479
|
+
}
|
|
2480
|
+
async adjustBuyAmountForBalance(tokenID, amount, price, userUSDCBalance, builderCode) {
|
|
2481
|
+
await this._ensureMarketInfoCached(tokenID);
|
|
2482
|
+
const builderTakerFeeRate = await this.getBuilderTakerFeeRate(builderCode);
|
|
2483
|
+
return adjustBuyAmountForFees(
|
|
2484
|
+
amount,
|
|
2485
|
+
price,
|
|
2486
|
+
userUSDCBalance,
|
|
2487
|
+
this.feeInfos[tokenID].rate,
|
|
2488
|
+
this.feeInfos[tokenID].exponent,
|
|
2489
|
+
builderTakerFeeRate,
|
|
2490
|
+
this.feeSlippage
|
|
2491
|
+
);
|
|
2492
|
+
}
|
|
2450
2493
|
async _ensureMarketInfoCached(tokenID) {
|
|
2451
2494
|
if (tokenID in this.feeInfos) return;
|
|
2452
2495
|
if (!(tokenID in this.tokenConditionMap)) {
|