@1inch/fusion-sdk 1.0.1-rc.2 → 1.0.1-rc.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/auction-calculator/auction-calculator.d.ts +11 -5
- package/dist/auction-calculator/auction-calculator.js +27 -11
- package/dist/auction-calculator/auction-calculator.js.map +1 -1
- package/dist/auction-calculator/auction-calculator.spec.js +29 -3
- package/dist/auction-calculator/auction-calculator.spec.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { SettlementPostInteractionData } from '../fusion-order
|
|
2
|
-
import { AuctionDetails, AuctionPoint } from '../fusion-order/auction-details';
|
|
1
|
+
import { SettlementPostInteractionData, AuctionDetails, AuctionPoint } from '../fusion-order';
|
|
3
2
|
export declare class AuctionCalculator {
|
|
4
3
|
private readonly startTime;
|
|
5
4
|
private readonly duration;
|
|
6
5
|
private readonly initialRateBump;
|
|
7
6
|
private readonly points;
|
|
8
7
|
private readonly takerFeeRatio;
|
|
9
|
-
|
|
8
|
+
private readonly gasCost;
|
|
9
|
+
private static GAS_PRICE_BASE;
|
|
10
|
+
constructor(startTime: bigint, duration: bigint, initialRateBump: bigint, points: AuctionPoint[], takerFeeRatio: bigint, gasCost?: {
|
|
11
|
+
gasBumpEstimate: bigint;
|
|
12
|
+
gasPriceEstimate: bigint;
|
|
13
|
+
});
|
|
10
14
|
static fromAuctionData(data: SettlementPostInteractionData, details: AuctionDetails): AuctionCalculator;
|
|
11
|
-
calcAuctionTakingAmount(takingAmount:
|
|
12
|
-
calcRateBump(time:
|
|
15
|
+
calcAuctionTakingAmount(takingAmount: bigint, rate: number): bigint;
|
|
16
|
+
calcRateBump(time: bigint, blockBaseFee?: bigint): number;
|
|
17
|
+
private getGasPriceBump;
|
|
18
|
+
private getAuctionBump;
|
|
13
19
|
}
|
|
@@ -5,34 +5,51 @@ const calc_1 = require("./calc");
|
|
|
5
5
|
const constants_1 = require("./constants");
|
|
6
6
|
const sdk_1 = require("../sdk");
|
|
7
7
|
class AuctionCalculator {
|
|
8
|
-
constructor(startTime, duration, initialRateBump, points, takerFeeRatio) {
|
|
8
|
+
constructor(startTime, duration, initialRateBump, points, takerFeeRatio, gasCost = { gasBumpEstimate: 0n, gasPriceEstimate: 0n }) {
|
|
9
9
|
this.startTime = startTime;
|
|
10
10
|
this.duration = duration;
|
|
11
11
|
this.initialRateBump = initialRateBump;
|
|
12
12
|
this.points = points;
|
|
13
13
|
this.takerFeeRatio = takerFeeRatio;
|
|
14
|
+
this.gasCost = gasCost;
|
|
14
15
|
}
|
|
15
16
|
static fromAuctionData(data, details) {
|
|
16
|
-
return new AuctionCalculator(data.auctionStartTime, details.duration, details.initialRateBump, details.points, data.integratorFee?.ratio || 0n);
|
|
17
|
+
return new AuctionCalculator(data.auctionStartTime, details.duration, details.initialRateBump, details.points, data.integratorFee?.ratio || 0n, details.gasCost);
|
|
17
18
|
}
|
|
18
19
|
calcAuctionTakingAmount(takingAmount, rate) {
|
|
19
20
|
const auctionTakingAmount = (BigInt(takingAmount) * (BigInt(rate) + constants_1.RATE_BUMP_DENOMINATOR)) /
|
|
20
21
|
constants_1.RATE_BUMP_DENOMINATOR;
|
|
21
22
|
if (this.takerFeeRatio === 0n) {
|
|
22
|
-
return auctionTakingAmount
|
|
23
|
+
return auctionTakingAmount;
|
|
23
24
|
}
|
|
24
|
-
return (0, sdk_1.addRatioToAmount)(auctionTakingAmount, this.takerFeeRatio)
|
|
25
|
+
return (0, sdk_1.addRatioToAmount)(auctionTakingAmount, this.takerFeeRatio);
|
|
25
26
|
}
|
|
26
|
-
calcRateBump(time) {
|
|
27
|
+
calcRateBump(time, blockBaseFee = 0n) {
|
|
28
|
+
const gasBump = this.getGasPriceBump(blockBaseFee);
|
|
29
|
+
const auctionBump = this.getAuctionBump(time);
|
|
30
|
+
const final = auctionBump > gasBump ? auctionBump - gasBump : 0n;
|
|
31
|
+
return Number(final);
|
|
32
|
+
}
|
|
33
|
+
getGasPriceBump(blockBaseFee) {
|
|
34
|
+
if (this.gasCost.gasBumpEstimate === 0n ||
|
|
35
|
+
this.gasCost.gasPriceEstimate === 0n ||
|
|
36
|
+
blockBaseFee === 0n) {
|
|
37
|
+
return 0n;
|
|
38
|
+
}
|
|
39
|
+
return ((this.gasCost.gasBumpEstimate * blockBaseFee) /
|
|
40
|
+
this.gasCost.gasPriceEstimate /
|
|
41
|
+
AuctionCalculator.GAS_PRICE_BASE);
|
|
42
|
+
}
|
|
43
|
+
getAuctionBump(time) {
|
|
27
44
|
let cumulativeTime = BigInt(this.startTime);
|
|
28
45
|
const lastTime = BigInt(this.duration) + cumulativeTime;
|
|
29
46
|
const startBump = BigInt(this.initialRateBump);
|
|
30
47
|
const currentTime = BigInt(time);
|
|
31
48
|
if (currentTime <= cumulativeTime) {
|
|
32
|
-
return
|
|
49
|
+
return this.initialRateBump;
|
|
33
50
|
}
|
|
34
51
|
else if (currentTime >= lastTime) {
|
|
35
|
-
return
|
|
52
|
+
return 0n;
|
|
36
53
|
}
|
|
37
54
|
let prevCoefficient = startBump;
|
|
38
55
|
let prevCumulativeTime = cumulativeTime;
|
|
@@ -41,15 +58,14 @@ class AuctionCalculator {
|
|
|
41
58
|
cumulativeTime = cumulativeTime + BigInt(delay);
|
|
42
59
|
const coefficientBN = BigInt(coefficient);
|
|
43
60
|
if (cumulativeTime >= currentTime) {
|
|
44
|
-
|
|
45
|
-
return Number(rate);
|
|
61
|
+
return (0, calc_1.linearInterpolation)(prevCumulativeTime, cumulativeTime, prevCoefficient, coefficientBN, currentTime);
|
|
46
62
|
}
|
|
47
63
|
prevCumulativeTime = cumulativeTime;
|
|
48
64
|
prevCoefficient = coefficientBN;
|
|
49
65
|
}
|
|
50
|
-
|
|
51
|
-
return Number(rate);
|
|
66
|
+
return (0, calc_1.linearInterpolation)(prevCumulativeTime, lastTime, prevCoefficient, 0n, currentTime);
|
|
52
67
|
}
|
|
53
68
|
}
|
|
54
69
|
exports.AuctionCalculator = AuctionCalculator;
|
|
70
|
+
AuctionCalculator.GAS_PRICE_BASE = 1000000n;
|
|
55
71
|
//# sourceMappingURL=auction-calculator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auction-calculator.js","sourceRoot":"","sources":["../../src/auction-calculator/auction-calculator.ts"],"names":[],"mappings":";;;AAAA,iCAA0C;AAC1C,2CAAiD;
|
|
1
|
+
{"version":3,"file":"auction-calculator.js","sourceRoot":"","sources":["../../src/auction-calculator/auction-calculator.ts"],"names":[],"mappings":";;;AAAA,iCAA0C;AAC1C,2CAAiD;AAMjD,gCAAuC;AAEvC,MAAa,iBAAiB;IAG1B,YACqB,SAAiB,EACjB,QAAgB,EAChB,eAAuB,EACvB,MAAsB,EACtB,aAAqB,EACrB,UASb,EAAC,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAC;QAd9B,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,oBAAe,GAAf,eAAe,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAQ;QACrB,YAAO,GAAP,OAAO,CASuB;IAChD,CAAC;IAEJ,MAAM,CAAC,eAAe,CAClB,IAAmC,EACnC,OAAuB;QAEvB,OAAO,IAAI,iBAAiB,CACxB,IAAI,CAAC,gBAAgB,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,EAC/B,OAAO,CAAC,OAAO,CAClB,CAAA;IACL,CAAC;IAKD,uBAAuB,CAAC,YAAoB,EAAE,IAAY;QACtD,MAAM,mBAAmB,GACrB,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,iCAAqB,CAAC,CAAC;YAC/D,iCAAqB,CAAA;QAEzB,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE;YAC3B,OAAO,mBAAmB,CAAA;SAC7B;QAED,OAAO,IAAA,sBAAgB,EAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACpE,CAAC;IAOD,YAAY,CAAC,IAAY,EAAE,YAAY,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE7C,MAAM,KAAK,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEO,eAAe,CAAC,YAAoB;QACxC,IACI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK,EAAE;YACpC,YAAY,KAAK,EAAE,EACrB;YACE,OAAO,EAAE,CAAA;SACZ;QAED,OAAO,CACH,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC7B,iBAAiB,CAAC,cAAc,CACnC,CAAA;IACL,CAAC;IAEO,cAAc,CAAC,IAAY;QAC/B,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAA;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAE9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,WAAW,IAAI,cAAc,EAAE;YAC/B,OAAO,IAAI,CAAC,eAAe,CAAA;SAC9B;aAAM,IAAI,WAAW,IAAI,QAAQ,EAAE;YAChC,OAAO,EAAE,CAAA;SACZ;QAED,IAAI,eAAe,GAAG,SAAS,CAAA;QAC/B,IAAI,kBAAkB,GAAG,cAAc,CAAA;QAEvC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,EAAC,WAAW,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAE3C,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;YAEzC,IAAI,cAAc,IAAI,WAAW,EAAE;gBAC/B,OAAO,IAAA,0BAAmB,EACtB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,CACd,CAAA;aACJ;YAED,kBAAkB,GAAG,cAAc,CAAA;YACnC,eAAe,GAAG,aAAa,CAAA;SAClC;QAED,OAAO,IAAA,0BAAmB,EACtB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,EAAE,EACF,WAAW,CACd,CAAA;IACL,CAAC;;AA3HL,8CA4HC;AA3HkB,gCAAc,GAAG,QAAU,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const limit_order_sdk_1 = require("@1inch/limit-order-sdk");
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
4
5
|
const auction_calculator_1 = require("./auction-calculator");
|
|
5
6
|
const fusion_order_1 = require("../fusion-order");
|
|
6
7
|
const sdk_1 = require("../sdk");
|
|
@@ -23,10 +24,35 @@ describe('Auction Calculator', () => {
|
|
|
23
24
|
points: []
|
|
24
25
|
});
|
|
25
26
|
const calculator = auction_calculator_1.AuctionCalculator.fromAuctionData(postInteraction, auctionDetails);
|
|
26
|
-
const rate = calculator.calcRateBump(
|
|
27
|
-
const auctionTakingAmount = calculator.calcAuctionTakingAmount(
|
|
27
|
+
const rate = calculator.calcRateBump(auctionStartTime + 60n);
|
|
28
|
+
const auctionTakingAmount = calculator.calcAuctionTakingAmount(1420000000n, rate);
|
|
28
29
|
expect(rate).toBe(25000);
|
|
29
|
-
expect(auctionTakingAmount).toBe(
|
|
30
|
+
expect(auctionTakingAmount).toBe(1423692355n);
|
|
31
|
+
});
|
|
32
|
+
describe('Gas bump', () => {
|
|
33
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
34
|
+
const duration = 1800n;
|
|
35
|
+
const takingAmount = (0, ethers_1.parseEther)('1');
|
|
36
|
+
const calculator = new auction_calculator_1.AuctionCalculator(now - 60n, duration, 1000000n, [{ delay: 60, coefficient: 500000 }], 0n, {
|
|
37
|
+
gasBumpEstimate: 10000n,
|
|
38
|
+
gasPriceEstimate: 1000n
|
|
39
|
+
});
|
|
40
|
+
it('0 gwei = no gas fee', () => {
|
|
41
|
+
const bump = calculator.calcRateBump(now);
|
|
42
|
+
expect(calculator.calcAuctionTakingAmount(takingAmount, bump)).toBe((0, ethers_1.parseEther)('1.05'));
|
|
43
|
+
});
|
|
44
|
+
it('0.1 gwei = 0.01% gas fee', () => {
|
|
45
|
+
const bump = calculator.calcRateBump(now, (0, ethers_1.parseUnits)('1', 8));
|
|
46
|
+
expect(calculator.calcAuctionTakingAmount(takingAmount, bump)).toBe((0, ethers_1.parseEther)('1.0499'));
|
|
47
|
+
});
|
|
48
|
+
it('15 gwei = 1.5% gas fee', () => {
|
|
49
|
+
const bump = calculator.calcRateBump(now, (0, ethers_1.parseUnits)('15', 9));
|
|
50
|
+
expect(calculator.calcAuctionTakingAmount(takingAmount, bump)).toBe((0, ethers_1.parseEther)('1.035'));
|
|
51
|
+
});
|
|
52
|
+
it('100 gwei = 10% gas fee, should be capped with takingAmount', () => {
|
|
53
|
+
const bump = calculator.calcRateBump(now, (0, ethers_1.parseUnits)('100', 9));
|
|
54
|
+
expect(calculator.calcAuctionTakingAmount(takingAmount, bump)).toBe((0, ethers_1.parseEther)('1'));
|
|
55
|
+
});
|
|
30
56
|
});
|
|
31
57
|
});
|
|
32
58
|
//# sourceMappingURL=auction-calculator.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auction-calculator.spec.js","sourceRoot":"","sources":["../../src/auction-calculator/auction-calculator.spec.ts"],"names":[],"mappings":";;AAAA,4DAA8C;AAC9C,6DAAsD;AACtD,kDAA6E;AAC7E,gCAAuC;AAEvC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,gBAAgB,GAAG,WAAW,CAAA;QAEpC,MAAM,eAAe,GAAG,4CAA6B,CAAC,GAAG,CAAC;YACtD,aAAa,EAAE;gBACX,KAAK,EAAE,IAAA,sBAAgB,EAAC,CAAC,CAAC;gBAC1B,QAAQ,EAAE,yBAAO,CAAC,UAAU,CAAC,EAAE,CAAC;aACnC;YACD,OAAO,EAAE,EAAE;YACX,gBAAgB;YAChB,SAAS,EAAE,EAAE;SAChB,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,IAAI,6BAAc,CAAC;YACtC,SAAS,EAAE,gBAAgB;YAC3B,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE;SACb,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,sCAAiB,CAAC,eAAe,CAChD,eAAe,EACf,cAAc,CACjB,CAAA;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"auction-calculator.spec.js","sourceRoot":"","sources":["../../src/auction-calculator/auction-calculator.spec.ts"],"names":[],"mappings":"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"}
|