@heliofi/launchpad-common 1.1.7 → 1.2.0-alpha.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.
Files changed (46) hide show
  1. package/dist/src/domain/constants/ProtocolVersion.d.ts +1 -2
  2. package/dist/src/domain/constants/ProtocolVersion.js +0 -1
  3. package/dist/src/domain/constants/ProtocolVersion.js.map +1 -1
  4. package/dist/src/domain/constants/blockchain.d.ts +2 -1
  5. package/dist/src/domain/constants/blockchain.js +2 -0
  6. package/dist/src/domain/constants/blockchain.js.map +1 -1
  7. package/dist/src/domain/constants/chainId.d.ts +3 -1
  8. package/dist/src/domain/constants/chainId.js +2 -0
  9. package/dist/src/domain/constants/chainId.js.map +1 -1
  10. package/dist/src/domain/constants/curveType.d.ts +1 -3
  11. package/dist/src/domain/constants/curveType.js +1 -3
  12. package/dist/src/domain/constants/curveType.js.map +1 -1
  13. package/dist/src/domain/curves/AbstractCurve.d.ts +1 -2
  14. package/dist/src/domain/curves/AbstractCurve.js.map +1 -1
  15. package/dist/src/domain/curves/BaseConstantProductCurveV1.d.ts +18 -4
  16. package/dist/src/domain/curves/BaseConstantProductCurveV1.js +101 -12
  17. package/dist/src/domain/curves/BaseConstantProductCurveV1.js.map +1 -1
  18. package/dist/src/domain/curves/ConstantProductCurveV1.d.ts +20 -3
  19. package/dist/src/domain/curves/ConstantProductCurveV1.js +122 -11
  20. package/dist/src/domain/curves/ConstantProductCurveV1.js.map +1 -1
  21. package/dist/src/domain/curves/EvmConstantProductCurveV1.d.ts +23 -0
  22. package/dist/src/domain/curves/EvmConstantProductCurveV1.js +141 -0
  23. package/dist/src/domain/curves/EvmConstantProductCurveV1.js.map +1 -0
  24. package/dist/src/domain/curves/getCurve.js +3 -3
  25. package/dist/src/domain/curves/getCurve.js.map +1 -1
  26. package/dist/src/domain/curves/index.d.ts +1 -6
  27. package/dist/src/domain/curves/index.js +1 -6
  28. package/dist/src/domain/curves/index.js.map +1 -1
  29. package/dist/src/domain/curves/tests/BaseConstantProductCurveV1.spec.js +2 -31
  30. package/dist/src/domain/curves/tests/BaseConstantProductCurveV1.spec.js.map +1 -1
  31. package/dist/src/domain/curves/tests/EvmConstantProductCurveV1.spec.d.ts +1 -0
  32. package/dist/src/domain/curves/tests/EvmConstantProductCurveV1.spec.js +56 -0
  33. package/dist/src/domain/curves/tests/EvmConstantProductCurveV1.spec.js.map +1 -0
  34. package/dist/src/domain/curves/types.d.ts +1 -3
  35. package/dist/src/domain/curves/types.js +0 -6
  36. package/dist/src/domain/curves/types.js.map +1 -1
  37. package/dist/src/domain/model/curve/dtos/CreateCurve.dto.d.ts +0 -2
  38. package/dist/src/domain/model/curve/dtos/CreateCurve.dto.js +0 -9
  39. package/dist/src/domain/model/curve/dtos/CreateCurve.dto.js.map +1 -1
  40. package/dist/src/domain/model/curve/entities/Curve.entity.d.ts +0 -2
  41. package/dist/src/domain/model/curve/entities/Curve.entity.js.map +1 -1
  42. package/dist/src/domain/model/mint/create/dtos/CreateMint.dto.d.ts +1 -4
  43. package/dist/src/domain/model/mint/create/dtos/CreateMint.dto.js +0 -15
  44. package/dist/src/domain/model/mint/create/dtos/CreateMint.dto.js.map +1 -1
  45. package/dist/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +2 -2
@@ -1,6 +1,5 @@
1
1
  export declare enum ProtocolVersion {
2
2
  V1 = "V1",
3
3
  V2 = "V2",
4
- V3 = "V3",
5
- V4 = "V4"
4
+ V3 = "V3"
6
5
  }
@@ -6,6 +6,5 @@ var ProtocolVersion;
6
6
  ProtocolVersion["V1"] = "V1";
7
7
  ProtocolVersion["V2"] = "V2";
8
8
  ProtocolVersion["V3"] = "V3";
9
- ProtocolVersion["V4"] = "V4";
10
9
  })(ProtocolVersion = exports.ProtocolVersion || (exports.ProtocolVersion = {}));
11
10
  //# sourceMappingURL=ProtocolVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProtocolVersion.js","sourceRoot":"","sources":["../../../../src/domain/constants/ProtocolVersion.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,4BAAS,CAAA;AACX,CAAC,EALW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAK1B"}
1
+ {"version":3,"file":"ProtocolVersion.js","sourceRoot":"","sources":["../../../../src/domain/constants/ProtocolVersion.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,4BAAS,CAAA;AACX,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B"}
@@ -3,7 +3,8 @@ export declare enum BlockchainSymbol {
3
3
  ETH = "ETH",
4
4
  POLYGON = "POLYGON",
5
5
  BITCOIN = "BITCOIN",
6
- BASE = "BASE"
6
+ BASE = "BASE",
7
+ UNICHAIN = "UNICHAIN"
7
8
  }
8
9
  export declare enum BlockchainEngineType {
9
10
  EVM = "EVM",
@@ -8,6 +8,7 @@ var BlockchainSymbol;
8
8
  BlockchainSymbol["POLYGON"] = "POLYGON";
9
9
  BlockchainSymbol["BITCOIN"] = "BITCOIN";
10
10
  BlockchainSymbol["BASE"] = "BASE";
11
+ BlockchainSymbol["UNICHAIN"] = "UNICHAIN";
11
12
  })(BlockchainSymbol = exports.BlockchainSymbol || (exports.BlockchainSymbol = {}));
12
13
  var BlockchainEngineType;
13
14
  (function (BlockchainEngineType) {
@@ -22,6 +23,7 @@ exports.blockchainEngineMap = new Map([
22
23
  [BlockchainSymbol.BASE, BlockchainEngineType.EVM],
23
24
  [BlockchainSymbol.BITCOIN, BlockchainEngineType.BTC],
24
25
  [BlockchainSymbol.BASE, BlockchainEngineType.EVM],
26
+ [BlockchainSymbol.UNICHAIN, BlockchainEngineType.EVM],
25
27
  ]);
26
28
  function getDefaultBlockChainName() {
27
29
  return BlockchainSymbol.SOL;
@@ -1 +1 @@
1
- {"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../../../src/domain/constants/blockchain.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,iCAAa,CAAA;AACf,CAAC,EANW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAM3B;AAED,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,mCAAW,CAAA;IACX,mCAAW,CAAA;IACX,mCAAW,CAAA;AACb,CAAC,EAJW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAI/B;AAEY,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAGxC;IACA,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAChD,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAChD,CAAC,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACpD,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACjD,CAAC,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACpD,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC;CAClD,CAAC,CAAC;AAEH,SAAgB,wBAAwB;IACtC,OAAO,gBAAgB,CAAC,GAAG,CAAC;AAC9B,CAAC;AAFD,4DAEC"}
1
+ {"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../../../src/domain/constants/blockchain.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,yCAAqB,CAAA;AACvB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B;AAED,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,mCAAW,CAAA;IACX,mCAAW,CAAA;IACX,mCAAW,CAAA;AACb,CAAC,EAJW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAI/B;AAEY,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAGxC;IACA,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAChD,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAChD,CAAC,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACpD,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACjD,CAAC,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACpD,CAAC,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC;IACjD,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC;CACtD,CAAC,CAAC;AAEH,SAAgB,wBAAwB;IACtC,OAAO,gBAAgB,CAAC,GAAG,CAAC;AAC9B,CAAC;AAFD,4DAEC"}
@@ -1,4 +1,6 @@
1
1
  export declare enum ChainId {
2
2
  BASE_SEPOLIA = 84532,
3
- BASE = 8453
3
+ BASE = 8453,
4
+ UNICHAIN_SEPOLIA = 1301,
5
+ UNICHAIN = 10000
4
6
  }
@@ -5,5 +5,7 @@ var ChainId;
5
5
  (function (ChainId) {
6
6
  ChainId[ChainId["BASE_SEPOLIA"] = 84532] = "BASE_SEPOLIA";
7
7
  ChainId[ChainId["BASE"] = 8453] = "BASE";
8
+ ChainId[ChainId["UNICHAIN_SEPOLIA"] = 1301] = "UNICHAIN_SEPOLIA";
9
+ ChainId[ChainId["UNICHAIN"] = 10000] = "UNICHAIN";
8
10
  })(ChainId = exports.ChainId || (exports.ChainId = {}));
9
11
  //# sourceMappingURL=chainId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chainId.js","sourceRoot":"","sources":["../../../../src/domain/constants/chainId.ts"],"names":[],"mappings":";;;AAAA,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,yDAAoB,CAAA;IACpB,wCAAW,CAAA;AACb,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB"}
1
+ {"version":3,"file":"chainId.js","sourceRoot":"","sources":["../../../../src/domain/constants/chainId.ts"],"names":[],"mappings":";;;AAAA,IAAY,OAKX;AALD,WAAY,OAAO;IACjB,yDAAoB,CAAA;IACpB,wCAAW,CAAA;IACX,gEAAuB,CAAA;IACvB,iDAAgB,CAAA;AAClB,CAAC,EALW,OAAO,GAAP,eAAO,KAAP,eAAO,QAKlB"}
@@ -1,7 +1,5 @@
1
1
  export declare enum CurveType {
2
2
  LINEAR_V1 = "LINEAR_V1",
3
3
  CONSTANT_PRODUCT_V1 = "CONSTANT_PRODUCT_V1",
4
- BASE_CONSTANT_PRODUCT_V1 = "BASE_CONSTANT_PRODUCT_V1",
5
- CONSTANT_PRODUCT_V2 = "CONSTANT_PRODUCT_V2",
6
- FLAT_V1 = "FLAT_V1"
4
+ EVM_CONSTANT_PRODUCT_V1 = "EVM_CONSTANT_PRODUCT_V1"
7
5
  }
@@ -5,8 +5,6 @@ var CurveType;
5
5
  (function (CurveType) {
6
6
  CurveType["LINEAR_V1"] = "LINEAR_V1";
7
7
  CurveType["CONSTANT_PRODUCT_V1"] = "CONSTANT_PRODUCT_V1";
8
- CurveType["BASE_CONSTANT_PRODUCT_V1"] = "BASE_CONSTANT_PRODUCT_V1";
9
- CurveType["CONSTANT_PRODUCT_V2"] = "CONSTANT_PRODUCT_V2";
10
- CurveType["FLAT_V1"] = "FLAT_V1";
8
+ CurveType["EVM_CONSTANT_PRODUCT_V1"] = "EVM_CONSTANT_PRODUCT_V1";
11
9
  })(CurveType = exports.CurveType || (exports.CurveType = {}));
12
10
  //# sourceMappingURL=curveType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curveType.js","sourceRoot":"","sources":["../../../../src/domain/constants/curveType.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,wDAA2C,CAAA;IAC3C,kEAAqD,CAAA;IACrD,wDAA2C,CAAA;IAC3C,gCAAmB,CAAA;AACrB,CAAC,EANW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAMpB"}
1
+ {"version":3,"file":"curveType.js","sourceRoot":"","sources":["../../../../src/domain/constants/curveType.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,wDAA2C,CAAA;IAC3C,gEAAmD,CAAA;AACrD,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB"}
@@ -1,7 +1,6 @@
1
1
  import BigNumber from 'bignumber.js';
2
- import { CalculationOptions, CurveDefaults, GetMarketCapOptions, GetPriceOptions } from './types';
2
+ import { CalculationOptions, GetMarketCapOptions, GetPriceOptions } from './types';
3
3
  export declare abstract class AbstractCurve {
4
- curveDefaults: CurveDefaults;
5
4
  abstract getTokensAmountFromCollateral(options: CalculationOptions): bigint;
6
5
  abstract getCollateralAmountFromTokens(options: CalculationOptions): bigint;
7
6
  abstract getCollateralPrice(options: GetPriceOptions): BigNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractCurve.js","sourceRoot":"","sources":["../../../../src/domain/curves/AbstractCurve.ts"],"names":[],"mappings":";;;AAQA,MAAsB,aAAa;CAUlC;AAVD,sCAUC"}
1
+ {"version":3,"file":"AbstractCurve.js","sourceRoot":"","sources":["../../../../src/domain/curves/AbstractCurve.ts"],"names":[],"mappings":";;;AAOA,MAAsB,aAAa;CAQlC;AARD,sCAQC"}
@@ -1,9 +1,23 @@
1
- import { ConstantProductCurve } from './ConstantProductCurve';
2
- import { GetMarketCapOptions } from './types';
3
- export declare class BaseConstantProductCurveV1 extends ConstantProductCurve {
1
+ import BigNumber from '../../config/bigNumber';
2
+ import { AbstractCurve } from './AbstractCurve';
3
+ import { CalculationOptions, CurveDefaults, GetMarketCapOptions, GetPriceOptions } from './types';
4
+ export declare class BaseConstantProductCurveV1 extends AbstractCurve {
5
+ initialVirtualTokenReserves: bigint;
6
+ initialVirtualCollateralReserves: bigint;
7
+ collateralDecimals: number;
8
+ constantProduct: bigint;
4
9
  dynamicThreshold: number;
5
10
  maxThreshold: number;
6
11
  marketCapToMinimalTokens: Map<bigint, bigint>;
7
- constructor();
12
+ readonly curveDefaults: CurveDefaults;
13
+ getTokensAmountFromCollateral(options: CalculationOptions): bigint;
14
+ getCollateralAmountFromTokens(options: CalculationOptions): bigint;
15
+ getCollateralPrice(options: GetPriceOptions): BigNumber;
8
16
  getMarketCap(options: GetMarketCapOptions): bigint;
17
+ getDynamicThresholdFromMarketCap(marketCapThreshold: bigint): bigint;
18
+ private buyInToken;
19
+ private buyInCollateral;
20
+ private sellInToken;
21
+ private sellInCollateral;
22
+ private getCurrentReserves;
9
23
  }
@@ -5,22 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BaseConstantProductCurveV1 = void 0;
7
7
  const bigNumber_1 = __importDefault(require("../../config/bigNumber"));
8
+ const AbstractCurve_1 = require("./AbstractCurve");
8
9
  const constants_1 = require("../constants");
9
- const ConstantProductCurve_1 = require("./ConstantProductCurve");
10
- class BaseConstantProductCurveV1 extends ConstantProductCurve_1.ConstantProductCurve {
10
+ const services_1 = require("../services");
11
+ class BaseConstantProductCurveV1 extends AbstractCurve_1.AbstractCurve {
11
12
  constructor() {
12
- super();
13
+ super(...arguments);
14
+ this.initialVirtualTokenReserves = BigInt(1.06 * 1e27);
15
+ this.initialVirtualCollateralReserves = BigInt(1.6 * 1e18);
16
+ this.collateralDecimals = 18;
17
+ this.constantProduct = this.initialVirtualTokenReserves * this.initialVirtualCollateralReserves;
13
18
  this.dynamicThreshold = 80;
14
19
  this.maxThreshold = 82;
15
20
  this.marketCapToMinimalTokens = new Map([
16
- [BigInt(2.5 * 1e18), 236349588721039974800000000n],
17
- [BigInt(25 * 1e18), 799538870462404697804703491n],
21
+ [BigInt(30 * 1e18), BigInt(80 * 1e18)],
18
22
  ]);
19
- this.initialVirtualTokenReserves = BigInt(1.06 * 1e27);
20
- this.initialVirtualCollateralReserves = BigInt(1.6 * 1e18);
21
- this.collateralDecimals = 18;
22
- this.constantProduct =
23
- this.initialVirtualTokenReserves * this.initialVirtualCollateralReserves;
24
23
  this.curveDefaults = {
25
24
  type: constants_1.CurveType.BASE_CONSTANT_PRODUCT_V1,
26
25
  totalSupply: BigInt(1e27),
@@ -30,23 +29,113 @@ class BaseConstantProductCurveV1 extends ConstantProductCurve_1.ConstantProductC
30
29
  address: '0x0000000000000000000000000000000000000000',
31
30
  };
32
31
  }
32
+ getTokensAmountFromCollateral(options) {
33
+ const { amount, curvePosition, tradeDirection, platformFeeBps } = options;
34
+ if (tradeDirection === 'BUY') {
35
+ const collateralAmount = amount - (amount * BigInt(platformFeeBps)) / 10000n;
36
+ return this.buyInCollateral(collateralAmount, curvePosition);
37
+ }
38
+ const collateralAmount = amount + (amount * BigInt(platformFeeBps)) / 10000n;
39
+ return this.sellInCollateral(collateralAmount, curvePosition);
40
+ }
41
+ getCollateralAmountFromTokens(options) {
42
+ const { amount, curvePosition, tradeDirection, platformFeeBps } = options;
43
+ if (tradeDirection === 'BUY') {
44
+ const collateralAmount = this.buyInToken(amount, curvePosition);
45
+ return (collateralAmount + (collateralAmount * BigInt(platformFeeBps)) / 10000n);
46
+ }
47
+ const collateralAmount = this.sellInToken(amount, curvePosition);
48
+ return (collateralAmount - (collateralAmount * BigInt(platformFeeBps)) / 10000n);
49
+ }
50
+ getCollateralPrice(options) {
51
+ const { curvePosition, collateralDecimals } = options;
52
+ const finalCollateralDecimals = collateralDecimals ?? this.collateralDecimals;
53
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
54
+ const baseCollateral = BigInt(10 ** finalCollateralDecimals);
55
+ const price = new bigNumber_1.default(currentVirtualCollateralReserves.toString()).div(new bigNumber_1.default(currentVirtualTokenReserves.toString()));
56
+ const inBaseUnits = price.multipliedBy(new bigNumber_1.default(baseCollateral.toString()));
57
+ return inBaseUnits;
58
+ }
33
59
  getMarketCap(options) {
34
60
  try {
35
61
  const { curvePosition, tokenDecimals, collateralDecimals } = options;
36
62
  const base = new bigNumber_1.default(10);
37
63
  const baseTokens = base.pow(tokenDecimals ?? this.curveDefaults.tokenDecimals);
64
+ const curvePositionDecimal = new bigNumber_1.default(curvePosition.toString());
38
65
  const price = this.getCollateralPrice({
39
66
  curvePosition,
40
67
  collateralDecimals,
41
68
  });
42
- const totalSupplyDecimal = new bigNumber_1.default(this.curveDefaults.totalSupply.toString());
43
- const cap = price.multipliedBy(totalSupplyDecimal).dividedBy(baseTokens);
69
+ const cap = price
70
+ .multipliedBy(curvePositionDecimal)
71
+ .dividedBy(baseTokens);
44
72
  return BigInt(cap.integerValue(bigNumber_1.default.ROUND_FLOOR).toString());
45
73
  }
46
74
  catch (error) {
47
75
  throw new Error(`Calculation error: ${error}`);
48
76
  }
49
77
  }
78
+ getDynamicThresholdFromMarketCap(marketCapThreshold) {
79
+ const baseTokens = BigInt(10 ** this.curveDefaults.tokenDecimals);
80
+ let low = 300000000n * baseTokens;
81
+ let high = 1000000000n * baseTokens;
82
+ let mid;
83
+ while (low < high) {
84
+ mid = (low + high + 1n) / 2n;
85
+ const marketCap = this.getMarketCap({ curvePosition: mid });
86
+ if (marketCap === marketCapThreshold) {
87
+ low = mid;
88
+ break;
89
+ }
90
+ else if (marketCap < marketCapThreshold) {
91
+ low = mid;
92
+ }
93
+ else {
94
+ high = mid - 1n;
95
+ }
96
+ }
97
+ while (this.getMarketCap({ curvePosition: low }) >= marketCapThreshold &&
98
+ low > 0n) {
99
+ low -= 1n;
100
+ }
101
+ return low + 1n;
102
+ }
103
+ buyInToken(tokenAmount, curvePosition) {
104
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
105
+ const newTokenReserves = currentVirtualTokenReserves - tokenAmount;
106
+ const ratio = this.constantProduct / newTokenReserves;
107
+ const lamportsToSpend = ratio - currentVirtualCollateralReserves;
108
+ return lamportsToSpend;
109
+ }
110
+ buyInCollateral(collateralAmount, curvePosition) {
111
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
112
+ const newCollateralReserves = currentVirtualCollateralReserves + collateralAmount;
113
+ const ratio = this.constantProduct / newCollateralReserves;
114
+ const tokensToBuy = currentVirtualTokenReserves - ratio;
115
+ return tokensToBuy;
116
+ }
117
+ sellInToken(tokenAmount, curvePosition) {
118
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
119
+ const newTokenReserves = currentVirtualTokenReserves + tokenAmount;
120
+ const ratio = this.constantProduct / newTokenReserves;
121
+ const lamportsToReceive = currentVirtualCollateralReserves - ratio;
122
+ return lamportsToReceive;
123
+ }
124
+ sellInCollateral(collateralAmount, curvePosition) {
125
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
126
+ const newCollateralReserves = currentVirtualCollateralReserves - collateralAmount;
127
+ const ratio = this.constantProduct / newCollateralReserves;
128
+ const tokensToSell = ratio - currentVirtualTokenReserves;
129
+ return tokensToSell;
130
+ }
131
+ getCurrentReserves(curvePosition) {
132
+ const currentVirtualTokenReserves = this.initialVirtualTokenReserves - curvePosition;
133
+ const currentVirtualCollateralReserves = (0, bigNumber_1.default)(this.constantProduct.toString()).div((0, bigNumber_1.default)(currentVirtualTokenReserves.toString()));
134
+ return [
135
+ currentVirtualTokenReserves,
136
+ services_1.AmountService.decimalToBigInt(currentVirtualCollateralReserves),
137
+ ];
138
+ }
50
139
  }
51
140
  exports.BaseConstantProductCurveV1 = BaseConstantProductCurveV1;
52
141
  //# sourceMappingURL=BaseConstantProductCurveV1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseConstantProductCurveV1.js","sourceRoot":"","sources":["../../../../src/domain/curves/BaseConstantProductCurveV1.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA+C;AAC/C,4CAAyC;AACzC,iEAA8D;AAG9D,MAAa,0BAA2B,SAAQ,2CAAoB;IAUlE;QACE,KAAK,EAAE,CAAC;QAVV,qBAAgB,GAAG,EAAE,CAAC;QAEtB,iBAAY,GAAG,EAAE,CAAC;QAElB,6BAAwB,GAAwB,IAAI,GAAG,CAAC;YACtD,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,4BAAoC,CAAC;YAC1D,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,4BAAoC,CAAC;SAC1D,CAAC,CAAC;QAKD,IAAI,CAAC,2BAA2B,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,gCAAgC,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe;YAClB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,gCAAgC,CAAC;QAE3E,IAAI,CAAC,aAAa,GAAG;YACnB,IAAI,EAAE,qBAAS,CAAC,wBAAwB;YACxC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC;YACzB,aAAa,EAAE,EAAE;YACjB,wBAAwB,EACtB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI;YACvD,wBAAwB,EACtB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI;YACnD,OAAO,EAAE,4CAA4C;SAC7C,CAAC;IACb,CAAC;IAED,YAAY,CAAC,OAA4B;QACvC,IAAI;YACF,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;YACrE,MAAM,IAAI,GAAG,IAAI,mBAAS,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAClD,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,aAAa;gBACb,kBAAkB;aACnB,CAAC,CAAC;YAEH,MAAM,kBAAkB,GAAG,IAAI,mBAAS,CACtC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,CAC1C,CAAC;YACF,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEzE,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,mBAAS,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACnE;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;SAChD;IACH,CAAC;CACF;AAtDD,gEAsDC"}
1
+ {"version":3,"file":"BaseConstantProductCurveV1.js","sourceRoot":"","sources":["../../../../src/domain/curves/BaseConstantProductCurveV1.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,23 @@
1
- import { ConstantProductCurve } from './ConstantProductCurve';
2
- export declare class ConstantProductCurveV1 extends ConstantProductCurve {
1
+ import BigNumber from '../../config/bigNumber';
2
+ import { AbstractCurve } from './AbstractCurve';
3
+ import { CalculationOptions, CurveDefaults, GetMarketCapOptions, GetPriceOptions } from './types';
4
+ export declare class ConstantProductCurveV1 extends AbstractCurve {
5
+ initialVirtualTokenReserves: bigint;
6
+ initialVirtualCollateralReserves: bigint;
7
+ collateralDecimals: number;
8
+ constantProduct: bigint;
3
9
  dynamicThreshold: number;
4
10
  maxThreshold: number;
5
- constructor();
11
+ marketCapToMinimalTokens: Map<bigint, bigint>;
12
+ readonly curveDefaults: CurveDefaults;
13
+ getTokensAmountFromCollateral(options: CalculationOptions): bigint;
14
+ getCollateralAmountFromTokens(options: CalculationOptions): bigint;
15
+ getCollateralPrice(options: GetPriceOptions): BigNumber;
16
+ getMarketCap(options: GetMarketCapOptions): bigint;
17
+ getDynamicThresholdFromMarketCap(marketCapThreshold: bigint): bigint;
18
+ private buyInToken;
19
+ private buyInCollateral;
20
+ private sellInToken;
21
+ private sellInCollateral;
22
+ private getCurrentReserves;
6
23
  }
@@ -1,18 +1,26 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.ConstantProductCurveV1 = void 0;
7
+ const bigNumber_1 = __importDefault(require("../../config/bigNumber"));
8
+ const AbstractCurve_1 = require("./AbstractCurve");
4
9
  const constants_1 = require("../constants");
5
- const ConstantProductCurve_1 = require("./ConstantProductCurve");
6
- class ConstantProductCurveV1 extends ConstantProductCurve_1.ConstantProductCurve {
10
+ const services_1 = require("../services");
11
+ class ConstantProductCurveV1 extends AbstractCurve_1.AbstractCurve {
7
12
  constructor() {
8
- super();
9
- this.dynamicThreshold = 80;
10
- this.maxThreshold = 82;
13
+ super(...arguments);
11
14
  this.initialVirtualTokenReserves = 1073000000000000000n;
12
15
  this.initialVirtualCollateralReserves = 30000000000n;
13
16
  this.collateralDecimals = 9;
14
- this.constantProduct =
15
- this.initialVirtualTokenReserves * this.initialVirtualCollateralReserves;
17
+ this.constantProduct = this.initialVirtualTokenReserves * this.initialVirtualCollateralReserves;
18
+ this.dynamicThreshold = 80;
19
+ this.maxThreshold = 82;
20
+ this.marketCapToMinimalTokens = new Map([
21
+ [345000000000n, 799820983207404442n],
22
+ [20000000000n, 336771070069821177n],
23
+ ]);
16
24
  this.curveDefaults = {
17
25
  type: constants_1.CurveType.CONSTANT_PRODUCT_V1,
18
26
  totalSupply: BigInt(1e18),
@@ -21,10 +29,113 @@ class ConstantProductCurveV1 extends ConstantProductCurve_1.ConstantProductCurve
21
29
  maxAllocationTokenAmount: (BigInt(1e18) * BigInt(this.maxThreshold)) / 100n,
22
30
  address: '11111111111111111111111111111111',
23
31
  };
24
- this.marketCapToMinimalTokens = new Map([
25
- [345000000000n, 799820983207404442n],
26
- [20000000000n, 336771070069821177n],
27
- ]);
32
+ }
33
+ getTokensAmountFromCollateral(options) {
34
+ const { amount, curvePosition, tradeDirection, platformFeeBps } = options;
35
+ if (tradeDirection === 'BUY') {
36
+ const collateralAmount = amount - (amount * BigInt(platformFeeBps)) / 10000n;
37
+ return this.buyInCollateral(collateralAmount, curvePosition);
38
+ }
39
+ const collateralAmount = amount + (amount * BigInt(platformFeeBps)) / 10000n;
40
+ return this.sellInCollateral(collateralAmount, curvePosition);
41
+ }
42
+ getCollateralAmountFromTokens(options) {
43
+ const { amount, curvePosition, tradeDirection, platformFeeBps } = options;
44
+ if (tradeDirection === 'BUY') {
45
+ const collateralAmount = this.buyInToken(amount, curvePosition);
46
+ return (collateralAmount + (collateralAmount * BigInt(platformFeeBps)) / 10000n);
47
+ }
48
+ const collateralAmount = this.sellInToken(amount, curvePosition);
49
+ return (collateralAmount - (collateralAmount * BigInt(platformFeeBps)) / 10000n);
50
+ }
51
+ getCollateralPrice(options) {
52
+ const { curvePosition, collateralDecimals } = options;
53
+ const finalCollateralDecimals = collateralDecimals ?? this.collateralDecimals;
54
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
55
+ const baseCollateral = BigInt(10 ** finalCollateralDecimals);
56
+ const price = new bigNumber_1.default(currentVirtualCollateralReserves.toString()).div(new bigNumber_1.default(currentVirtualTokenReserves.toString()));
57
+ const inBaseUnits = price.multipliedBy(new bigNumber_1.default(baseCollateral.toString()));
58
+ return inBaseUnits;
59
+ }
60
+ getMarketCap(options) {
61
+ try {
62
+ const { curvePosition, tokenDecimals, collateralDecimals } = options;
63
+ const base = new bigNumber_1.default(10);
64
+ const baseTokens = base.pow(tokenDecimals ?? this.curveDefaults.tokenDecimals);
65
+ const curvePositionDecimal = new bigNumber_1.default(curvePosition.toString());
66
+ const price = this.getCollateralPrice({
67
+ curvePosition,
68
+ collateralDecimals,
69
+ });
70
+ const cap = price
71
+ .multipliedBy(curvePositionDecimal)
72
+ .dividedBy(baseTokens);
73
+ return BigInt(cap.integerValue(bigNumber_1.default.ROUND_FLOOR).toString());
74
+ }
75
+ catch (error) {
76
+ throw new Error(`Calculation error: ${error}`);
77
+ }
78
+ }
79
+ getDynamicThresholdFromMarketCap(marketCapThreshold) {
80
+ const baseTokens = BigInt(10 ** this.curveDefaults.tokenDecimals);
81
+ let low = 300000000n * baseTokens;
82
+ let high = 1000000000n * baseTokens;
83
+ let mid;
84
+ while (low < high) {
85
+ mid = (low + high + 1n) / 2n;
86
+ const marketCap = this.getMarketCap({ curvePosition: mid });
87
+ if (marketCap === marketCapThreshold) {
88
+ low = mid;
89
+ break;
90
+ }
91
+ else if (marketCap < marketCapThreshold) {
92
+ low = mid;
93
+ }
94
+ else {
95
+ high = mid - 1n;
96
+ }
97
+ }
98
+ while (this.getMarketCap({ curvePosition: low }) >= marketCapThreshold &&
99
+ low > 0n) {
100
+ low -= 1n;
101
+ }
102
+ return low + 1n;
103
+ }
104
+ buyInToken(tokenAmount, curvePosition) {
105
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
106
+ const newTokenReserves = currentVirtualTokenReserves - tokenAmount;
107
+ const ratio = this.constantProduct / newTokenReserves;
108
+ const lamportsToSpend = ratio - currentVirtualCollateralReserves;
109
+ return lamportsToSpend;
110
+ }
111
+ buyInCollateral(collateralAmount, curvePosition) {
112
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
113
+ const newCollateralReserves = currentVirtualCollateralReserves + collateralAmount;
114
+ const ratio = this.constantProduct / newCollateralReserves;
115
+ const tokensToBuy = currentVirtualTokenReserves - ratio;
116
+ return tokensToBuy;
117
+ }
118
+ sellInToken(tokenAmount, curvePosition) {
119
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
120
+ const newTokenReserves = currentVirtualTokenReserves + tokenAmount;
121
+ const ratio = this.constantProduct / newTokenReserves;
122
+ const lamportsToReceive = currentVirtualCollateralReserves - ratio;
123
+ return lamportsToReceive;
124
+ }
125
+ sellInCollateral(collateralAmount, curvePosition) {
126
+ const [currentVirtualTokenReserves, currentVirtualCollateralReserves] = this.getCurrentReserves(curvePosition);
127
+ const newCollateralReserves = currentVirtualCollateralReserves - collateralAmount;
128
+ const ratio = this.constantProduct / newCollateralReserves;
129
+ const tokensToSell = ratio - currentVirtualTokenReserves;
130
+ return tokensToSell;
131
+ }
132
+ getCurrentReserves(curvePosition) {
133
+ const currentVirtualTokenReserves = this.initialVirtualTokenReserves - curvePosition;
134
+ const currentVirtualCollateralReserves = (0, bigNumber_1.default)(this.constantProduct.toString()).div((0, bigNumber_1.default)(currentVirtualTokenReserves.toString()));
135
+ return [
136
+ currentVirtualTokenReserves,
137
+ services_1.AmountService.decimalToBigInt(currentVirtualCollateralReserves),
138
+ ];
28
139
  }
29
140
  }
30
141
  exports.ConstantProductCurveV1 = ConstantProductCurveV1;
@@ -1 +1 @@
1
- {"version":3,"file":"ConstantProductCurveV1.js","sourceRoot":"","sources":["../../../../src/domain/curves/ConstantProductCurveV1.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AACzC,iEAA8D;AAE9D,MAAa,sBAAuB,SAAQ,2CAAoB;IAK9D;QACE,KAAK,EAAE,CAAC;QALV,qBAAgB,GAAG,EAAE,CAAC;QAEtB,iBAAY,GAAG,EAAE,CAAC;QAKhB,IAAI,CAAC,2BAA2B,GAAG,oBAA0B,CAAC;QAC9D,IAAI,CAAC,gCAAgC,GAAG,YAAe,CAAC;QACxD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe;YAClB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,gCAAgC,CAAC;QAE3E,IAAI,CAAC,aAAa,GAAG;YACnB,IAAI,EAAE,qBAAS,CAAC,mBAAmB;YACnC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC;YACzB,aAAa,EAAE,CAAC;YAChB,wBAAwB,EACtB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI;YACvD,wBAAwB,EACtB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI;YACnD,OAAO,EAAE,kCAAkC;SACnC,CAAC;QAEX,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,CAAC;YACtC,CAAC,aAAgB,EAAE,mBAAwB,CAAC;YAC5C,CAAC,YAAe,EAAE,mBAAwB,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;CACF;AA9BD,wDA8BC"}
1
+ {"version":3,"file":"ConstantProductCurveV1.js","sourceRoot":"","sources":["../../../../src/domain/curves/ConstantProductCurveV1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import BigNumber from '../../config/bigNumber';
2
+ import { AbstractCurve } from './AbstractCurve';
3
+ import { CalculationOptions, CurveDefaults, GetMarketCapOptions, GetPriceOptions } from './types';
4
+ export declare class EvmConstantProductCurveV1 extends AbstractCurve {
5
+ initialVirtualTokenReserves: bigint;
6
+ initialVirtualCollateralReserves: bigint;
7
+ collateralDecimals: number;
8
+ constantProduct: bigint;
9
+ dynamicThreshold: number;
10
+ maxThreshold: number;
11
+ marketCapToMinimalTokens: Map<bigint, bigint>;
12
+ readonly curveDefaults: CurveDefaults;
13
+ getTokensAmountFromCollateral(options: CalculationOptions): bigint;
14
+ getCollateralAmountFromTokens(options: CalculationOptions): bigint;
15
+ getCollateralPrice(options: GetPriceOptions): BigNumber;
16
+ getMarketCap(options: GetMarketCapOptions): bigint;
17
+ getDynamicThresholdFromMarketCap(marketCapThreshold: bigint): bigint;
18
+ private buyInToken;
19
+ private buyInCollateral;
20
+ private sellInToken;
21
+ private sellInCollateral;
22
+ private getCurrentReserves;
23
+ }