@gala-chain/launchpad 1.0.12 → 1.0.14

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 (86) hide show
  1. package/lib/package.json +1 -1
  2. package/lib/src/api/types/LaunchpadDtos.d.ts +1 -0
  3. package/lib/src/api/types/LaunchpadDtos.d.ts.map +1 -1
  4. package/lib/src/api/types/LaunchpadDtos.js +5 -0
  5. package/lib/src/api/types/LaunchpadDtos.js.map +1 -1
  6. package/lib/src/api/types/LaunchpadSale.d.ts +2 -1
  7. package/lib/src/api/types/LaunchpadSale.d.ts.map +1 -1
  8. package/lib/src/api/types/LaunchpadSale.js +18 -6
  9. package/lib/src/api/types/LaunchpadSale.js.map +1 -1
  10. package/lib/src/chaincode/LaunchpadContract.js +6 -6
  11. package/lib/src/chaincode/LaunchpadContract.js.map +1 -1
  12. package/lib/src/chaincode/launchpad/buyExactToken.d.ts.map +1 -1
  13. package/lib/src/chaincode/launchpad/buyExactToken.js +18 -42
  14. package/lib/src/chaincode/launchpad/buyExactToken.js.map +1 -1
  15. package/lib/src/chaincode/launchpad/buyWithNative.d.ts.map +1 -1
  16. package/lib/src/chaincode/launchpad/buyWithNative.js +12 -43
  17. package/lib/src/chaincode/launchpad/buyWithNative.js.map +1 -1
  18. package/lib/src/chaincode/launchpad/callMemeTokenIn.d.ts +4 -10
  19. package/lib/src/chaincode/launchpad/callMemeTokenIn.d.ts.map +1 -1
  20. package/lib/src/chaincode/launchpad/callMemeTokenIn.js +13 -9
  21. package/lib/src/chaincode/launchpad/callMemeTokenIn.js.map +1 -1
  22. package/lib/src/chaincode/launchpad/callMemeTokenOut.d.ts +4 -10
  23. package/lib/src/chaincode/launchpad/callMemeTokenOut.d.ts.map +1 -1
  24. package/lib/src/chaincode/launchpad/callMemeTokenOut.js +46 -22
  25. package/lib/src/chaincode/launchpad/callMemeTokenOut.js.map +1 -1
  26. package/lib/src/chaincode/launchpad/callNativeTokenIn.d.ts +4 -10
  27. package/lib/src/chaincode/launchpad/callNativeTokenIn.d.ts.map +1 -1
  28. package/lib/src/chaincode/launchpad/callNativeTokenIn.js +35 -14
  29. package/lib/src/chaincode/launchpad/callNativeTokenIn.js.map +1 -1
  30. package/lib/src/chaincode/launchpad/callNativeTokenOut.d.ts +4 -10
  31. package/lib/src/chaincode/launchpad/callNativeTokenOut.d.ts.map +1 -1
  32. package/lib/src/chaincode/launchpad/callNativeTokenOut.js +17 -12
  33. package/lib/src/chaincode/launchpad/callNativeTokenOut.js.map +1 -1
  34. package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.js +1 -1
  35. package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.js.map +1 -1
  36. package/lib/src/chaincode/launchpad/createSale.js +1 -1
  37. package/lib/src/chaincode/launchpad/createSale.js.map +1 -1
  38. package/lib/src/chaincode/launchpad/fees.d.ts +11 -0
  39. package/lib/src/chaincode/launchpad/fees.d.ts.map +1 -1
  40. package/lib/src/chaincode/launchpad/fees.js +42 -3
  41. package/lib/src/chaincode/launchpad/fees.js.map +1 -1
  42. package/lib/src/chaincode/launchpad/finaliseSale.d.ts.map +1 -1
  43. package/lib/src/chaincode/launchpad/finaliseSale.js +9 -6
  44. package/lib/src/chaincode/launchpad/finaliseSale.js.map +1 -1
  45. package/lib/src/chaincode/launchpad/sellExactToken.d.ts.map +1 -1
  46. package/lib/src/chaincode/launchpad/sellExactToken.js +14 -23
  47. package/lib/src/chaincode/launchpad/sellExactToken.js.map +1 -1
  48. package/lib/src/chaincode/launchpad/sellWithNative.d.ts.map +1 -1
  49. package/lib/src/chaincode/launchpad/sellWithNative.js +10 -19
  50. package/lib/src/chaincode/launchpad/sellWithNative.js.map +1 -1
  51. package/lib/src/chaincode/test/launchpadgala.d.ts.map +1 -1
  52. package/lib/src/chaincode/test/launchpadgala.js +2 -1
  53. package/lib/src/chaincode/test/launchpadgala.js.map +1 -1
  54. package/lib/src/chaincode/utils/launchpadSaleUtils.d.ts +4 -0
  55. package/lib/src/chaincode/utils/launchpadSaleUtils.d.ts.map +1 -1
  56. package/lib/src/chaincode/utils/launchpadSaleUtils.js +10 -1
  57. package/lib/src/chaincode/utils/launchpadSaleUtils.js.map +1 -1
  58. package/lib/src/cli.js +3 -1
  59. package/lib/src/cli.js.map +1 -1
  60. package/lib/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +1 -1
  62. package/src/api/types/LaunchpadDtos.ts +4 -0
  63. package/src/api/types/LaunchpadSale.ts +14 -7
  64. package/src/chaincode/LaunchpadContract.ts +3 -3
  65. package/src/chaincode/launchpad/buyExactToken.spec.ts +2 -37
  66. package/src/chaincode/launchpad/buyExactToken.ts +22 -56
  67. package/src/chaincode/launchpad/buyWithNative.spec.ts +2 -37
  68. package/src/chaincode/launchpad/buyWithNative.ts +15 -65
  69. package/src/chaincode/launchpad/callMemeTokenIn.ts +36 -12
  70. package/src/chaincode/launchpad/callMemeTokenOut.spec.ts +1 -1
  71. package/src/chaincode/launchpad/callMemeTokenOut.ts +72 -26
  72. package/src/chaincode/launchpad/callNativeTokenIn.ts +62 -19
  73. package/src/chaincode/launchpad/callNativeTokenOut.ts +38 -15
  74. package/src/chaincode/launchpad/configureLaunchpadFeeConfig.spec.ts +0 -1
  75. package/src/chaincode/launchpad/configureLaunchpadFeeConfig.ts +1 -1
  76. package/src/chaincode/launchpad/createSale.ts +1 -1
  77. package/src/chaincode/launchpad/fees.ts +55 -3
  78. package/src/chaincode/launchpad/finaliseSale.ts +11 -8
  79. package/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.spec.ts +150 -68
  80. package/src/chaincode/launchpad/sellExactToken.spec.ts +4 -81
  81. package/src/chaincode/launchpad/sellExactToken.ts +16 -25
  82. package/src/chaincode/launchpad/sellWithNative.spec.ts +2 -42
  83. package/src/chaincode/launchpad/sellWithNative.ts +14 -23
  84. package/src/chaincode/test/launchpadgala.ts +3 -1
  85. package/src/chaincode/utils/launchpadSaleUtils.ts +13 -1
  86. package/src/cli.ts +3 -1
@@ -18,12 +18,13 @@ const tslib_1 = require("tslib");
18
18
  */
19
19
  const api_1 = require("@gala-chain/api");
20
20
  const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
21
+ const types_1 = require("../../api/types");
21
22
  const utils_1 = require("../utils");
22
23
  const fees_1 = require("./fees");
23
- function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity) {
24
+ function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity, nativeTokenDecimals, sellingTokenDecimals) {
24
25
  const totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold()); // current tokens sold / x
25
- let nativeTokens = new decimal_js_1.default(requestedNativeTokenQuantity.toString()); // native tokens used to buy / y
26
- const basePrice = new decimal_js_1.default(sale.fetchBasePrice()); // base price / a
26
+ let nativeTokens = new decimal_js_1.default(requestedNativeTokenQuantity.toString()).toDecimalPlaces(nativeTokenDecimals, decimal_js_1.default.ROUND_DOWN);
27
+ const basePrice = new decimal_js_1.default(types_1.LaunchpadSale.BASE_PRICE); // base price / a
27
28
  const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
28
29
  const nativeTokenInVault = new decimal_js_1.default(sale.nativeTokenQuantity);
29
30
  if (nativeTokens.greaterThan(nativeTokenInVault)) {
@@ -32,14 +33,14 @@ function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity) {
32
33
  const exponent = exponentFactor.mul(totalTokensSold).div(decimals);
33
34
  const exp1 = euler.pow(exponent);
34
35
  const constantFactor = nativeTokens.mul(exponentFactor).div(basePrice);
35
- if (exp1.lte(constantFactor)) {
36
+ if (exp1.lessThanOrEqualTo(constantFactor)) {
36
37
  throw new api_1.ValidationFailedError("Cannot sell more tokens than have been bought in this sale.");
37
38
  }
38
39
  const adjustedExp = exp1.minus(constantFactor);
39
40
  const lnAdjustedExp = adjustedExp.ln();
40
41
  const tokensSent = totalTokensSold.minus(lnAdjustedExp.mul(decimals).div(exponentFactor));
41
- const roundedTokenSent = tokensSent.toDecimalPlaces(18, decimal_js_1.default.ROUND_UP);
42
- return roundedTokenSent.toFixed();
42
+ const roundedTokenSent = tokensSent.toDecimalPlaces(sellingTokenDecimals, decimal_js_1.default.ROUND_UP);
43
+ return [nativeTokens.toFixed(), roundedTokenSent.toFixed()];
43
44
  }
44
45
  /**
45
46
  * Calculates the number of tokens that can be sold in exchange for a specified amount
@@ -54,16 +55,19 @@ function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity) {
54
55
  * - `nativeTokenAmount`: The amount of native tokens to be recieved from sale.
55
56
  * - `expectedToken` (optional): The expected amount of tokens to be sold.
56
57
  *
57
- * @returns A promise that resolves to a string representing the calculated amount of
58
- * tokens to be sent, rounded up to 18 decimal places.
58
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
59
+ * quantity of tokens to be sent, the original quantity of native tokens used, and extra fees.
59
60
  *
60
61
  * @throws Error if the calculation results in an invalid amount (e.g., `InvalidAmountError`).
61
62
  */
62
63
  async function callMemeTokenIn(ctx, sellTokenDTO) {
63
64
  const sale = await (0, utils_1.fetchAndValidateSale)(ctx, sellTokenDTO.vaultAddress);
64
65
  const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
66
+ const { nativeTokenDecimals, sellingTokenDecimals } = await (0, utils_1.fetchTokenDecimals)(ctx, sale);
67
+ const [originalQuantity, calculatedQuantity] = calculateMemeTokensRequired(sale, sellTokenDTO.nativeTokenQuantity, nativeTokenDecimals, sellingTokenDecimals);
65
68
  return {
66
- calculatedQuantity: calculateMemeTokensRequired(sale, sellTokenDTO.nativeTokenQuantity),
69
+ originalQuantity: originalQuantity,
70
+ calculatedQuantity: calculatedQuantity,
67
71
  extraFees: {
68
72
  reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, sellTokenDTO.nativeTokenQuantity).toString(),
69
73
  transactionFees: (0, fees_1.calculateTransactionFee)(sellTokenDTO.nativeTokenQuantity, launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
@@ -1 +1 @@
1
- {"version":3,"file":"callMemeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenIn.ts"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;GAaG;AACH,yCAAwD;AAGxD,oEAAiC;AAGjC,oCAA+F;AAC/F,iCAAkF;AAElF,SAAS,2BAA2B,CAAC,IAAmB,EAAE,4BAAuC;IAC/F,MAAM,eAAe,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,0BAA0B;IACvF,IAAI,YAAY,GAAG,IAAI,oBAAO,CAAC,4BAA4B,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,gCAAgC;IACzG,MAAM,SAAS,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAElE,MAAM,kBAAkB,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACjE,IAAI,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE;QAChD,YAAY,GAAG,kBAAkB,CAAC;KACnC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvE,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;QAC5B,MAAM,IAAI,2BAAqB,CAAC,6DAA6D,CAAC,CAAC;KAChG;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1F,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,oBAAO,CAAC,QAAQ,CAAC,CAAC;IAE1E,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,eAAe,CAAC,GAAqB,EAAE,YAAoC;IAC/F,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;IACxE,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAE7E,OAAO;QACL,kBAAkB,EAAE,2BAA2B,CAAC,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC;QACvF,SAAS,EAAE;YACT,mBAAmB,EAAE,IAAA,sCAA+B,EAAC,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;YACvG,eAAe,EAAE,IAAA,8BAAuB,EACtC,YAAY,CAAC,mBAAmB,EAChC,gCAAgC,aAAhC,gCAAgC,uBAAhC,gCAAgC,CAAE,SAAS,CAC5C;SACF;KACF,CAAC;AACJ,CAAC;AAdD,0CAcC"}
1
+ {"version":3,"file":"callMemeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenIn.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { GalaChainContext } from "@gala-chain/chaincode";
2
- import { NativeTokenQuantityDto } from "../../api/types";
2
+ import { NativeTokenQuantityDto, TradeCalculationResDto } from "../../api/types";
3
3
  /**
4
4
  * Calculates the number of tokens that can be purchased using a specified amount
5
5
  * of native tokens based on a bonding curve mechanism.
@@ -11,16 +11,10 @@ import { NativeTokenQuantityDto } from "../../api/types";
11
11
  * @param buyTokenDTO - The data transfer object containing the sale address
12
12
  * and the amount of native tokens to spend for the purchase.
13
13
  *
14
- * @returns A promise that resolves to a string representing the calculated amount of
15
- * tokens to be received, rounded down to 18 decimal places.
14
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
15
+ * quantity of tokens to be received, the original quantity of native tokens used, and extra fees.
16
16
  *
17
17
  * @throws Error if the calculation results in an invalid state.
18
18
  */
19
- export declare function callMemeTokenOut(ctx: GalaChainContext, buyTokenDTO: NativeTokenQuantityDto): Promise<{
20
- calculatedQuantity: string;
21
- extraFees: {
22
- reverseBondingCurve: string;
23
- transactionFees: string;
24
- };
25
- }>;
19
+ export declare function callMemeTokenOut(ctx: GalaChainContext, buyTokenDTO: NativeTokenQuantityDto): Promise<TradeCalculationResDto>;
26
20
  //# sourceMappingURL=callMemeTokenOut.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callMemeTokenOut.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenOut.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIxE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB;;;;;;GAsDhG"}
1
+ {"version":3,"file":"callMemeTokenOut.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenOut.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAiB,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AA+ChG;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,sBAAsB,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAsDjC"}
@@ -7,6 +7,34 @@ const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
7
7
  const types_1 = require("../../api/types");
8
8
  const utils_1 = require("../utils");
9
9
  const fees_1 = require("./fees");
10
+ function calculateTokensPurchasable(nativeTokens, totalTokensSold, nativeTokenDecimals, sellingTokenDecimals) {
11
+ const basePrice = new decimal_js_1.default(types_1.LaunchpadSale.BASE_PRICE);
12
+ const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
13
+ // Round native tokens, then calculate tokens based on that rounded amount
14
+ const roundedNativeTokens = nativeTokens.toDecimalPlaces(nativeTokenDecimals, decimal_js_1.default.ROUND_UP);
15
+ // Calculate tokens purchasable: newTokens = (decimals / exponentFactor) * ln((nativeTokens * exponentFactor / basePrice) + e^(exponentFactor * totalTokensSold / decimals)) - totalTokensSold
16
+ // Where:
17
+ // constant = nativeTokens * exponentFactor / basePrice
18
+ // exponent1 = exponentFactor * totalTokensSold / decimals
19
+ // eResult1 = e^(exponent1) = e^(exponentFactor * totalTokensSold / decimals)
20
+ // ethScaled = constant + eResult1 = (nativeTokens * exponentFactor / basePrice) + e^(exponentFactor * totalTokensSold / decimals)
21
+ // lnEthScaled = ln(ethScaled) * decimals
22
+ // lnEthScaledBase = lnEthScaled / exponentFactor = (decimals / exponentFactor) * ln(ethScaled)
23
+ // result = lnEthScaledBase - totalTokensSold
24
+ const constant = roundedNativeTokens.mul(exponentFactor).div(basePrice);
25
+ const exponent1 = exponentFactor.mul(totalTokensSold).div(decimals);
26
+ const eResult1 = euler.pow(exponent1);
27
+ const ethScaled = constant.add(eResult1);
28
+ const lnEthScaled = ethScaled.ln().mul(decimals);
29
+ const lnEthScaledBase = lnEthScaled.div(exponentFactor);
30
+ const result = lnEthScaledBase.minus(totalTokensSold);
31
+ let roundedResult = result.toDecimalPlaces(sellingTokenDecimals, decimal_js_1.default.ROUND_DOWN);
32
+ // Cap total supply to 10 million
33
+ if (roundedResult.add(totalTokensSold).greaterThan(new decimal_js_1.default("1e+7"))) {
34
+ roundedResult = new decimal_js_1.default("1e+7").minus(new decimal_js_1.default(totalTokensSold));
35
+ }
36
+ return [roundedNativeTokens.toFixed(), roundedResult.toFixed()];
37
+ }
10
38
  /**
11
39
  * Calculates the number of tokens that can be purchased using a specified amount
12
40
  * of native tokens based on a bonding curve mechanism.
@@ -18,8 +46,8 @@ const fees_1 = require("./fees");
18
46
  * @param buyTokenDTO - The data transfer object containing the sale address
19
47
  * and the amount of native tokens to spend for the purchase.
20
48
  *
21
- * @returns A promise that resolves to a string representing the calculated amount of
22
- * tokens to be received, rounded down to 18 decimal places.
49
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
50
+ * quantity of tokens to be received, the original quantity of native tokens used, and extra fees.
23
51
  *
24
52
  * @throws Error if the calculation results in an invalid state.
25
53
  */
@@ -29,39 +57,35 @@ async function callMemeTokenOut(ctx, buyTokenDTO) {
29
57
  // Initialize total tokens sold
30
58
  let totalTokensSold = new decimal_js_1.default(0);
31
59
  // Fetch sale details and update parameters if this is not a sale premint calculation
60
+ let sale;
32
61
  if (!buyTokenDTO.IsPreMint) {
33
- const sale = await (0, utils_1.fetchAndValidateSale)(ctx, buyTokenDTO.vaultAddress);
62
+ sale = await (0, utils_1.fetchAndValidateSale)(ctx, buyTokenDTO.vaultAddress);
34
63
  totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold());
35
- // Enforce market cap limit
64
+ // Enforce market cap limit, adjust number of native tokens that will be used in the transaction
65
+ // if total GALA tokens will exceed the market cap
36
66
  if (nativeTokens
37
67
  .add(new decimal_js_1.default(sale.nativeTokenQuantity))
38
68
  .greaterThan(new decimal_js_1.default(types_1.LaunchpadSale.MARKET_CAP))) {
39
69
  nativeTokens = new decimal_js_1.default(types_1.LaunchpadSale.MARKET_CAP).minus(new decimal_js_1.default(sale.nativeTokenQuantity));
40
70
  }
41
71
  }
42
- // Load bonding curve constants
43
- const basePrice = new decimal_js_1.default(types_1.LaunchpadSale.BASE_PRICE);
44
- const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
45
- // Apply bonding curve math
46
- const constant = nativeTokens.mul(exponentFactor).div(basePrice);
47
- const exponent1 = exponentFactor.mul(totalTokensSold).div(decimals);
48
- const eResult1 = euler.pow(exponent1);
49
- const ethScaled = constant.add(eResult1);
50
- const lnEthScaled = ethScaled.ln().mul(decimals);
51
- const lnEthScaledBase = lnEthScaled.div(exponentFactor);
52
- const result = lnEthScaledBase.minus(totalTokensSold);
53
- let roundedResult = result.toDecimalPlaces(18, decimal_js_1.default.ROUND_DOWN);
54
- // Cap total supply to 10 million
55
- if (roundedResult.add(totalTokensSold).greaterThan(new decimal_js_1.default("1e+7"))) {
56
- roundedResult = new decimal_js_1.default("1e+7").minus(new decimal_js_1.default(totalTokensSold));
57
- }
72
+ // Get token decimals for rounding
73
+ const { nativeTokenDecimals, sellingTokenDecimals } = sale
74
+ ? await (0, utils_1.fetchTokenDecimals)(ctx, sale)
75
+ : {
76
+ nativeTokenDecimals: types_1.LaunchpadSale.NATIVE_TOKEN_DECIMALS,
77
+ sellingTokenDecimals: types_1.LaunchpadSale.SELLING_TOKEN_DECIMALS
78
+ };
79
+ // Calculate tokens purchasable using bonding curve math
80
+ const [originalQuantity, calculatedQuantity] = calculateTokensPurchasable(nativeTokens, totalTokensSold, nativeTokenDecimals, sellingTokenDecimals);
58
81
  // Fetch fee configuration and return result
59
82
  const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
60
83
  return {
61
- calculatedQuantity: roundedResult.toFixed(),
84
+ originalQuantity: originalQuantity,
85
+ calculatedQuantity: calculatedQuantity,
62
86
  extraFees: {
63
87
  reverseBondingCurve: "0",
64
- transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(nativeTokens.toFixed()), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
88
+ transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(originalQuantity), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
65
89
  }
66
90
  };
67
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"callMemeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenOut.ts"],"names":[],"mappings":";;;;AAeA,wEAAqC;AACrC,oEAAiC;AAEjC,2CAAwE;AACxE,oCAA+F;AAC/F,iCAAiD;AAEjD;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,gBAAgB,CAAC,GAAqB,EAAE,WAAmC;IAC/F,kCAAkC;IAClC,IAAI,YAAY,GAAG,IAAI,oBAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3E,+BAA+B;IAC/B,IAAI,eAAe,GAAG,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC;IAErC,qFAAqF;IACrF,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;QACvE,eAAe,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAEtD,2BAA2B;QAC3B,IACE,YAAY;aACT,GAAG,CAAC,IAAI,oBAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;aAC1C,WAAW,CAAC,IAAI,oBAAO,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,EACrD;YACA,YAAY,GAAG,IAAI,oBAAO,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,oBAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;SACnG;KACF;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,IAAI,oBAAO,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAElE,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,oBAAO,CAAC,UAAU,CAAC,CAAC;IAEnE,iCAAiC;IACjC,IAAI,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACvE,aAAa,GAAG,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,oBAAO,CAAC,eAAe,CAAC,CAAC,CAAC;KACzE;IAED,4CAA4C;IAC5C,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAE7E,OAAO;QACL,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE;QAC3C,SAAS,EAAE;YACT,mBAAmB,EAAE,GAAG;YACxB,eAAe,EAAE,IAAA,8BAAuB,EACtC,IAAA,sBAAS,EAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EACjC,gCAAgC,aAAhC,gCAAgC,uBAAhC,gCAAgC,CAAE,SAAS,CAC5C;SACF;KACF,CAAC;AACJ,CAAC;AAtDD,4CAsDC"}
1
+ {"version":3,"file":"callMemeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenOut.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { GalaChainContext } from "@gala-chain/chaincode";
2
- import { ExactTokenQuantityDto } from "../../api/types";
2
+ import { ExactTokenQuantityDto, TradeCalculationResDto } from "../../api/types";
3
3
  /**
4
4
  * Calculates the amount of native tokens required to purchase a specified amount
5
5
  * of tokens using a bonding curve mechanism.
@@ -11,16 +11,10 @@ import { ExactTokenQuantityDto } from "../../api/types";
11
11
  * @param buyTokenDTO - The data transfer object containing the sale address
12
12
  * and the exact amount of tokens to be purchased.
13
13
  *
14
- * @returns A promise that resolves to a string representing the calculated amount of
15
- * native tokens required for the purchase, rounded up to 8 decimal places.
14
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
15
+ * quantity of native tokens required for the purchase, the original quantity of tokens used, and extra fees.
16
16
  *
17
17
  * @throws Error if the calculation encounters an invalid state or data.
18
18
  */
19
- export declare function callNativeTokenIn(ctx: GalaChainContext, buyTokenDTO: ExactTokenQuantityDto): Promise<{
20
- calculatedQuantity: string;
21
- extraFees: {
22
- reverseBondingCurve: string;
23
- transactionFees: string;
24
- };
25
- }>;
19
+ export declare function callNativeTokenIn(ctx: GalaChainContext, buyTokenDTO: ExactTokenQuantityDto): Promise<TradeCalculationResDto>;
26
20
  //# sourceMappingURL=callNativeTokenIn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callNativeTokenIn.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenIn.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAIxD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,EAAE,qBAAqB;;;;;;GAoChG"}
1
+ {"version":3,"file":"callNativeTokenIn.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenIn.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,qBAAqB,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AA6C/F;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,qBAAqB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAmCjC"}
@@ -4,8 +4,33 @@ exports.callNativeTokenIn = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
6
6
  const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
7
+ const types_1 = require("../../api/types");
7
8
  const utils_1 = require("../utils");
8
9
  const fees_1 = require("./fees");
10
+ function calculateNativeTokensRequired(tokensToBuy, totalTokensSold, sellingTokenDecimals, nativeTokenDecimals) {
11
+ const basePrice = new decimal_js_1.default(types_1.LaunchpadSale.BASE_PRICE);
12
+ const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
13
+ // Round tokens first, then calculate native tokens based on that rounded amount
14
+ const roundedTokensToBuy = tokensToBuy.toDecimalPlaces(sellingTokenDecimals, decimal_js_1.default.ROUND_DOWN);
15
+ // Calculate native tokens required: price = (basePrice / exponentFactor) * (e^(exponentFactor * (totalTokensSold + tokensToBuy) / decimals) - e^(exponentFactor * totalTokensSold / decimals))
16
+ // Where:
17
+ // exponent1 = exponentFactor * (totalTokensSold + tokensToBuy) / decimals
18
+ // exponent2 = exponentFactor * totalTokensSold / decimals
19
+ // eResult1 = e^(exponent1) = e^(exponentFactor * (totalTokensSold + tokensToBuy) / decimals)
20
+ // eResult2 = e^(exponent2) = e^(exponentFactor * totalTokensSold / decimals)
21
+ // constantFactor = basePrice / exponentFactor
22
+ // differenceOfExponentials = eResult1 - eResult2
23
+ // price = constantFactor * differenceOfExponentials
24
+ const exponent1 = exponentFactor.mul(totalTokensSold.add(roundedTokensToBuy)).div(decimals);
25
+ const exponent2 = exponentFactor.mul(totalTokensSold).div(decimals);
26
+ const eResult1 = euler.pow(exponent1);
27
+ const eResult2 = euler.pow(exponent2);
28
+ const constantFactor = basePrice.div(exponentFactor);
29
+ const differenceOfExponentials = eResult1.minus(eResult2);
30
+ const price = constantFactor.mul(differenceOfExponentials);
31
+ const roundedPrice = price.toDecimalPlaces(nativeTokenDecimals, decimal_js_1.default.ROUND_UP);
32
+ return [roundedTokensToBuy.toFixed(), roundedPrice.toFixed()];
33
+ }
9
34
  /**
10
35
  * Calculates the amount of native tokens required to purchase a specified amount
11
36
  * of tokens using a bonding curve mechanism.
@@ -17,8 +42,8 @@ const fees_1 = require("./fees");
17
42
  * @param buyTokenDTO - The data transfer object containing the sale address
18
43
  * and the exact amount of tokens to be purchased.
19
44
  *
20
- * @returns A promise that resolves to a string representing the calculated amount of
21
- * native tokens required for the purchase, rounded up to 8 decimal places.
45
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
46
+ * quantity of native tokens required for the purchase, the original quantity of tokens used, and extra fees.
22
47
  *
23
48
  * @throws Error if the calculation encounters an invalid state or data.
24
49
  */
@@ -26,25 +51,21 @@ async function callNativeTokenIn(ctx, buyTokenDTO) {
26
51
  const sale = await (0, utils_1.fetchAndValidateSale)(ctx, buyTokenDTO.vaultAddress);
27
52
  const totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold());
28
53
  let tokensToBuy = new decimal_js_1.default(buyTokenDTO.tokenQuantity.toString());
29
- const basePrice = new decimal_js_1.default(sale.fetchBasePrice());
30
- const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
54
+ // Adjust tokensToBuy if user is trying to buy more tokens than the total supply
31
55
  if (tokensToBuy.add(totalTokensSold).greaterThan(new decimal_js_1.default("1e+7"))) {
32
56
  tokensToBuy = new decimal_js_1.default(sale.sellingTokenQuantity);
33
57
  }
34
- const exponent1 = exponentFactor.mul(totalTokensSold.add(tokensToBuy)).div(decimals);
35
- const exponent2 = exponentFactor.mul(totalTokensSold).div(decimals);
36
- const eResult1 = euler.pow(exponent1);
37
- const eResult2 = euler.pow(exponent2);
38
- const constantFactor = basePrice.div(exponentFactor);
39
- const differenceOfExponentials = eResult1.minus(eResult2);
40
- const price = constantFactor.mul(differenceOfExponentials);
58
+ // Get token decimals for rounding
59
+ const { nativeTokenDecimals, sellingTokenDecimals } = await (0, utils_1.fetchTokenDecimals)(ctx, sale);
60
+ // Calculate native tokens required using bonding curve math
61
+ const [originalQuantity, calculatedQuantity] = calculateNativeTokensRequired(tokensToBuy, totalTokensSold, sellingTokenDecimals, nativeTokenDecimals);
41
62
  const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
42
- const roundedPrice = price.toDecimalPlaces(8, decimal_js_1.default.ROUND_UP).toFixed();
43
63
  return {
44
- calculatedQuantity: roundedPrice,
64
+ originalQuantity: originalQuantity,
65
+ calculatedQuantity: calculatedQuantity,
45
66
  extraFees: {
46
67
  reverseBondingCurve: "0",
47
- transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(roundedPrice), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
68
+ transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(calculatedQuantity), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
48
69
  }
49
70
  };
50
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"callNativeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenIn.ts"],"names":[],"mappings":";;;;AAeA,wEAAqC;AACrC,oEAAiC;AAGjC,oCAA+F;AAC/F,iCAAiD;AAEjD;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,iBAAiB,CAAC,GAAqB,EAAE,WAAkC;IAC/F,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,eAAe,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAE5D,IAAI,WAAW,GAAG,IAAI,oBAAO,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAElE,IAAI,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACrE,WAAW,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KACtD;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,wBAAwB,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAE3D,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAE7E,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,oBAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1E,OAAO;QACL,kBAAkB,EAAE,YAAY;QAChC,SAAS,EAAE;YACT,mBAAmB,EAAE,GAAG;YACxB,eAAe,EAAE,IAAA,8BAAuB,EACtC,IAAA,sBAAS,EAAC,YAAY,CAAC,EACvB,gCAAgC,aAAhC,gCAAgC,uBAAhC,gCAAgC,CAAE,SAAS,CAC5C;SACF;KACF,CAAC;AACJ,CAAC;AApCD,8CAoCC"}
1
+ {"version":3,"file":"callNativeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenIn.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { GalaChainContext } from "@gala-chain/chaincode";
2
- import { ExactTokenQuantityDto } from "../../api/types";
2
+ import { ExactTokenQuantityDto, TradeCalculationResDto } from "../../api/types";
3
3
  /**
4
4
  * Calculates the amount of native tokens a user would receive when selling
5
5
  * a specified amount of tokens based on a bonding curve mechanism.
@@ -11,17 +11,11 @@ import { ExactTokenQuantityDto } from "../../api/types";
11
11
  * @param sellTokenDTO - The data transfer object containing the sale address
12
12
  * and the exact amount of tokens to be sold.
13
13
  *
14
- * @returns A promise that resolves to a string representing the calculated amount of
15
- * native tokens to be received, rounded down to 8 decimal places.
14
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
15
+ * quantity of native tokens received, the quantity of tokens required, and extra fees.
16
16
  *
17
17
  * @throws DefaultError if the calculated new total tokens sold is less than zero
18
18
  * or if the input amount is invalid.
19
19
  */
20
- export declare function callNativeTokenOut(ctx: GalaChainContext, sellTokenDTO: ExactTokenQuantityDto): Promise<{
21
- calculatedQuantity: string;
22
- extraFees: {
23
- reverseBondingCurve: string;
24
- transactionFees: string;
25
- };
26
- }>;
20
+ export declare function callNativeTokenOut(ctx: GalaChainContext, sellTokenDTO: ExactTokenQuantityDto): Promise<TradeCalculationResDto>;
27
21
  //# sourceMappingURL=callNativeTokenOut.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callNativeTokenOut.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenOut.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,qBAAqB,EAAiB,MAAM,iBAAiB,CAAC;AAgCvE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB;;;;;;GAelG"}
1
+ {"version":3,"file":"callNativeTokenOut.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenOut.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,qBAAqB,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AA6C/F;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,gBAAgB,EACrB,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAsBjC"}
@@ -4,27 +4,30 @@ exports.callNativeTokenOut = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
6
6
  const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
7
+ const types_1 = require("../../api/types");
7
8
  const utils_1 = require("../utils");
8
9
  const fees_1 = require("./fees");
9
- function calculateNativeTokensReceived(sale, tokensToSellBn) {
10
+ function calculateNativeTokensReceived(sale, tokensToSellBn, sellingTokenDecimals, nativeTokenDecimals) {
10
11
  const totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold());
11
12
  let tokensToSell = new decimal_js_1.default(tokensToSellBn.toString());
12
- const basePrice = new decimal_js_1.default(sale.fetchBasePrice());
13
+ const basePrice = new decimal_js_1.default(types_1.LaunchpadSale.BASE_PRICE);
13
14
  const { exponentFactor, euler, decimals } = (0, utils_1.getBondingConstants)();
14
15
  let newTotalTokensSold = totalTokensSold.minus(tokensToSell);
15
- if (newTotalTokensSold.comparedTo(0) < 0) {
16
+ if (newTotalTokensSold.lessThan(0)) {
16
17
  tokensToSell = totalTokensSold;
17
18
  newTotalTokensSold = new decimal_js_1.default(0);
18
19
  }
19
- const exponent1 = exponentFactor.mul(newTotalTokensSold.add(tokensToSell)).div(decimals);
20
+ // Round tokens first, then calculate native tokens based on that rounded amount
21
+ const roundedTokensToSell = tokensToSell.toDecimalPlaces(sellingTokenDecimals, decimal_js_1.default.ROUND_UP);
22
+ const exponent1 = exponentFactor.mul(newTotalTokensSold.add(roundedTokensToSell)).div(decimals);
20
23
  const exponent2 = exponentFactor.mul(newTotalTokensSold).div(decimals);
21
24
  const eResult1 = euler.pow(exponent1);
22
25
  const eResult2 = euler.pow(exponent2);
23
26
  const constantFactor = basePrice.div(exponentFactor);
24
27
  const differenceOfExponentials = eResult1.minus(eResult2);
25
28
  const price = constantFactor.mul(differenceOfExponentials);
26
- const roundedPrice = price.toDecimalPlaces(8, decimal_js_1.default.ROUND_DOWN);
27
- return roundedPrice.toFixed();
29
+ const roundedPrice = price.toDecimalPlaces(nativeTokenDecimals, decimal_js_1.default.ROUND_DOWN);
30
+ return [roundedTokensToSell.toFixed(), roundedPrice.toFixed()];
28
31
  }
29
32
  /**
30
33
  * Calculates the amount of native tokens a user would receive when selling
@@ -37,21 +40,23 @@ function calculateNativeTokensReceived(sale, tokensToSellBn) {
37
40
  * @param sellTokenDTO - The data transfer object containing the sale address
38
41
  * and the exact amount of tokens to be sold.
39
42
  *
40
- * @returns A promise that resolves to a string representing the calculated amount of
41
- * native tokens to be received, rounded down to 8 decimal places.
43
+ * @returns A promise that resolves to a TradeCalculationResDto object containing the calculated
44
+ * quantity of native tokens received, the quantity of tokens required, and extra fees.
42
45
  *
43
46
  * @throws DefaultError if the calculated new total tokens sold is less than zero
44
47
  * or if the input amount is invalid.
45
48
  */
46
49
  async function callNativeTokenOut(ctx, sellTokenDTO) {
47
50
  const sale = await (0, utils_1.fetchAndValidateSale)(ctx, sellTokenDTO.vaultAddress);
48
- const nativeTokensReceived = calculateNativeTokensReceived(sale, sellTokenDTO.tokenQuantity);
51
+ const { nativeTokenDecimals, sellingTokenDecimals } = await (0, utils_1.fetchTokenDecimals)(ctx, sale);
52
+ const [originalQuantity, calculatedQuantity] = calculateNativeTokensReceived(sale, sellTokenDTO.tokenQuantity, sellingTokenDecimals, nativeTokenDecimals);
49
53
  const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
50
54
  return {
51
- calculatedQuantity: nativeTokensReceived,
55
+ originalQuantity: originalQuantity,
56
+ calculatedQuantity: calculatedQuantity,
52
57
  extraFees: {
53
- reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, (0, bignumber_js_1.default)(nativeTokensReceived)).toString(),
54
- transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(nativeTokensReceived), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
58
+ reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, (0, bignumber_js_1.default)(calculatedQuantity)).toString(),
59
+ transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(calculatedQuantity), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
55
60
  }
56
61
  };
57
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"callNativeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenOut.ts"],"names":[],"mappings":";;;;AAeA,wEAAqC;AACrC,oEAAiC;AAGjC,oCAA+F;AAC/F,iCAAkF;AAElF,SAAS,6BAA6B,CAAC,IAAmB,EAAE,cAAyB;IACnF,MAAM,eAAe,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAE5D,IAAI,YAAY,GAAG,IAAI,oBAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAElE,IAAI,kBAAkB,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QACxC,YAAY,GAAG,eAAe,CAAC;QAC/B,kBAAkB,GAAG,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC;KACrC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,wBAAwB,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,oBAAO,CAAC,UAAU,CAAC,CAAC;IAElE,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,kBAAkB,CAAC,GAAqB,EAAE,YAAmC;IACjG,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;IACxE,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IAC7F,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAE7E,OAAO;QACL,kBAAkB,EAAE,oBAAoB;QACxC,SAAS,EAAE;YACT,mBAAmB,EAAE,IAAA,sCAA+B,EAAC,IAAI,EAAE,IAAA,sBAAS,EAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,EAAE;YACtG,eAAe,EAAE,IAAA,8BAAuB,EACtC,IAAA,sBAAS,EAAC,oBAAoB,CAAC,EAC/B,gCAAgC,aAAhC,gCAAgC,uBAAhC,gCAAgC,CAAE,SAAS,CAC5C;SACF;KACF,CAAC;AACJ,CAAC;AAfD,gDAeC"}
1
+ {"version":3,"file":"callNativeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenOut.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ const types_1 = require("../../api/types");
33
33
  async function configureLaunchpadFeeAddress(ctx, dto) {
34
34
  var _a, _b, _c, _d, _e, _f;
35
35
  // Validate input: at least one field must be present
36
- if (!dto.newPlatformFeeAddress && !((_a = dto.newAuthorities) === null || _a === void 0 ? void 0 : _a.length) && !dto.newFeeAmount) {
36
+ if (!dto.newPlatformFeeAddress && !((_a = dto.newAuthorities) === null || _a === void 0 ? void 0 : _a.length) && dto.newFeeAmount === undefined) {
37
37
  throw new api_1.ValidationFailedError("None of the input fields are present.");
38
38
  }
39
39
  const curatorOrgMsp = (_b = process.env.CURATOR_ORG_MSP) !== null && _b !== void 0 ? _b : "CuratorOrg";
@@ -1 +1 @@
1
- {"version":3,"file":"configureLaunchpadFeeConfig.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/configureLaunchpadFeeConfig.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;GAaG;AACH,yCAAkG;AAElG,qDAAuE;AAEvE,2CAAsF;AAEtF;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,4BAA4B,CAChD,GAAqB,EACrB,GAAoC;;IAEpC,qDAAqD;IACrD,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAA,MAAA,GAAG,CAAC,cAAc,0CAAE,MAAM,CAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAClF,MAAM,IAAI,2BAAqB,CAAC,uCAAuC,CAAC,CAAC;KAC1E;IAED,MAAM,aAAa,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,eAAe,mCAAI,YAAY,CAAC;IAElE,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,0BAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE1E,kDAAkD;IAClD,IAAI,kBAAkB,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,0BAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACtF,MAAM,UAAU,GAAG,gBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,6CAA6C;QAC7C,IAAI,UAAU,CAAC,OAAO,CAAC,eAAS,CAAC,SAAS,CAAC,EAAE;YAC3C,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,MAAM,UAAU,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;QACnD,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACpF,MAAM,IAAI,uBAAiB,CAAC,eAAe,GAAG,CAAC,WAAW,wCAAwC,CAAC,CAAC;SACrG;KACF;IAED,mDAAmD;IACnD,IAAI,CAAC,kBAAkB,EAAE;QACvB,uDAAuD;QACvD,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACnD,MAAM,IAAI,2BAAqB,CAC7B,yGAAyG,CAC1G,CAAC;SACH;QACD,2BAA2B;QAC3B,kBAAkB,GAAG,IAAI,0BAAkB,CACzC,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,YAAY,EAChB,MAAA,GAAG,CAAC,cAAc,mCAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CACxC,CAAC;KACH;SAAM,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACzF,wDAAwD;QACxD,kBAAkB,CAAC,eAAe,CAChC,MAAA,GAAG,CAAC,qBAAqB,mCAAI,kBAAkB,CAAC,UAAU,EAC1D,MAAA,GAAG,CAAC,YAAY,mCAAI,kBAAkB,CAAC,SAAS,EAChD,MAAA,GAAG,CAAC,cAAc,mCAAI,kBAAkB,CAAC,WAAW,CACrD,CAAC;KACH;SAAM;QACL,MAAM,IAAI,uBAAiB,CAAC,eAAe,GAAG,CAAC,WAAW,wCAAwC,CAAC,CAAC;KACrG;IAED,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAE9C,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AA3DD,oEA2DC"}
1
+ {"version":3,"file":"configureLaunchpadFeeConfig.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/configureLaunchpadFeeConfig.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;GAaG;AACH,yCAAkG;AAElG,qDAAuE;AAEvE,2CAAsF;AAEtF;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,4BAA4B,CAChD,GAAqB,EACrB,GAAoC;;IAEpC,qDAAqD;IACrD,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAA,MAAA,GAAG,CAAC,cAAc,0CAAE,MAAM,CAAA,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE;QAC/F,MAAM,IAAI,2BAAqB,CAAC,uCAAuC,CAAC,CAAC;KAC1E;IAED,MAAM,aAAa,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,eAAe,mCAAI,YAAY,CAAC;IAElE,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,0BAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE1E,kDAAkD;IAClD,IAAI,kBAAkB,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,0BAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACtF,MAAM,UAAU,GAAG,gBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,6CAA6C;QAC7C,IAAI,UAAU,CAAC,OAAO,CAAC,eAAS,CAAC,SAAS,CAAC,EAAE;YAC3C,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,MAAM,UAAU,CAAC;SAClB;IACH,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;QACnD,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACpF,MAAM,IAAI,uBAAiB,CAAC,eAAe,GAAG,CAAC,WAAW,wCAAwC,CAAC,CAAC;SACrG;KACF;IAED,mDAAmD;IACnD,IAAI,CAAC,kBAAkB,EAAE;QACvB,uDAAuD;QACvD,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACnD,MAAM,IAAI,2BAAqB,CAC7B,yGAAyG,CAC1G,CAAC;SACH;QACD,2BAA2B;QAC3B,kBAAkB,GAAG,IAAI,0BAAkB,CACzC,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,YAAY,EAChB,MAAA,GAAG,CAAC,cAAc,mCAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CACxC,CAAC;KACH;SAAM,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACzF,wDAAwD;QACxD,kBAAkB,CAAC,eAAe,CAChC,MAAA,GAAG,CAAC,qBAAqB,mCAAI,kBAAkB,CAAC,UAAU,EAC1D,MAAA,GAAG,CAAC,YAAY,mCAAI,kBAAkB,CAAC,SAAS,EAChD,MAAA,GAAG,CAAC,cAAc,mCAAI,kBAAkB,CAAC,WAAW,CACrD,CAAC;KACH;SAAM;QACL,MAAM,IAAI,uBAAiB,CAAC,eAAe,GAAG,CAAC,WAAW,wCAAwC,CAAC,CAAC;KACrG;IAED,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAE9C,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AA3DD,oEA2DC"}
@@ -71,7 +71,7 @@ async function createSale(ctx, launchpadDetails) {
71
71
  network: "GC",
72
72
  tokenClass: tokenInstanceKey.getTokenClassKey(),
73
73
  isNonFungible: false,
74
- decimals: 18,
74
+ decimals: types_1.LaunchpadSale.SELLING_TOKEN_DECIMALS,
75
75
  name: launchpadDetails.tokenName,
76
76
  symbol: launchpadDetails.tokenSymbol,
77
77
  description: launchpadDetails.tokenDescription,
@@ -1 +1 @@
1
- {"version":3,"file":"createSale.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/createSale.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSale.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/createSale.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,15 @@ import { LaunchpadSale } from "../../api/types";
4
4
  export declare function calculateReverseBondingCurveFee(sale: LaunchpadSale, nativeTokensToReceive: BigNumber): BigNumber;
5
5
  export declare function payReverseBondingCurveFee(ctx: GalaChainContext, sale: LaunchpadSale, nativeTokensToReceive: BigNumber, maxAcceptableFee?: BigNumber): Promise<void>;
6
6
  export declare function calculateTransactionFee(tokensBeingTraded: BigNumber, feeAmount?: number): string;
7
+ /**
8
+ * Transfers transaction fees to the launchpad fee address if applicable.
9
+ * Optionally validates that the user has sufficient balance when nativeTokensRequired is provided.
10
+ *
11
+ * @param ctx - The context object providing access to the GalaChain environment.
12
+ * @param sale - The launchpad sale object.
13
+ * @param transactionFees - The transaction fees amount (as BigNumber or string).
14
+ * @param nativeToken - The native token instance key (returned from sale.fetchNativeTokenInstanceKey()).
15
+ * @param nativeTokensRequired - Optional. If provided, validates user has sufficient balance for fees + required tokens.
16
+ */
17
+ export declare function transferTransactionFees(ctx: GalaChainContext, sale: LaunchpadSale, transactionFees: BigNumber | string, nativeToken: ReturnType<LaunchpadSale["fetchNativeTokenInstanceKey"]>, nativeTokensRequired?: BigNumber): Promise<void>;
7
18
  //# sourceMappingURL=fees.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/fees.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAKjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,aAmBpG;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,aAAa,EACnB,qBAAqB,EAAE,SAAS,EAChC,gBAAgB,CAAC,EAAE,SAAS,iBA+C7B;AAED,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,UAEvF"}
1
+ {"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/fees.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAMjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,aAmBpG;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,aAAa,EACnB,qBAAqB,EAAE,SAAS,EAChC,gBAAgB,CAAC,EAAE,SAAS,iBA+C7B;AAED,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,UAEvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,SAAS,GAAG,MAAM,EACnC,WAAW,EAAE,UAAU,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC,EACrE,oBAAoB,CAAC,EAAE,SAAS,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiCf"}