@gala-chain/launchpad 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/package.json +2 -2
- package/lib/src/api/types/LaunchpadBatchSubmitAuthorities.d.ts +12 -0
- package/lib/src/api/types/LaunchpadBatchSubmitAuthorities.d.ts.map +1 -0
- package/lib/src/api/types/LaunchpadBatchSubmitAuthorities.js +56 -0
- package/lib/src/api/types/LaunchpadBatchSubmitAuthorities.js.map +1 -0
- package/lib/src/api/types/LaunchpadDtos.d.ts +14 -0
- package/lib/src/api/types/LaunchpadDtos.d.ts.map +1 -1
- package/lib/src/api/types/LaunchpadDtos.js +45 -1
- package/lib/src/api/types/LaunchpadDtos.js.map +1 -1
- package/lib/src/api/types/LaunchpadFeeConfig.d.ts +3 -2
- package/lib/src/api/types/LaunchpadFeeConfig.d.ts.map +1 -1
- package/lib/src/api/types/LaunchpadFeeConfig.js +15 -6
- package/lib/src/api/types/LaunchpadFeeConfig.js.map +1 -1
- package/lib/src/api/types/LaunchpadFinalizeAllocation.js +1 -2
- package/lib/src/api/types/LaunchpadFinalizeAllocation.js.map +1 -1
- package/lib/src/api/types/LaunchpadSale.js +1 -2
- package/lib/src/api/types/LaunchpadSale.js.map +1 -1
- package/lib/src/api/types/index.d.ts +1 -0
- package/lib/src/api/types/index.d.ts.map +1 -1
- package/lib/src/api/types/index.js +1 -0
- package/lib/src/api/types/index.js.map +1 -1
- package/lib/src/api/validators/decorators.js.map +1 -1
- package/lib/src/chaincode/LaunchpadContract.d.ts +6 -1
- package/lib/src/chaincode/LaunchpadContract.d.ts.map +1 -1
- package/lib/src/chaincode/LaunchpadContract.js +97 -0
- package/lib/src/chaincode/LaunchpadContract.js.map +1 -1
- package/lib/src/chaincode/launchpad/buyExactToken.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/buyExactToken.js +22 -9
- package/lib/src/chaincode/launchpad/buyExactToken.js.map +1 -1
- package/lib/src/chaincode/launchpad/buyWithNative.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/buyWithNative.js +31 -9
- package/lib/src/chaincode/launchpad/buyWithNative.js.map +1 -1
- package/lib/src/chaincode/launchpad/callMemeTokenIn.d.ts +1 -0
- package/lib/src/chaincode/launchpad/callMemeTokenIn.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/callMemeTokenIn.js +3 -5
- package/lib/src/chaincode/launchpad/callMemeTokenIn.js.map +1 -1
- package/lib/src/chaincode/launchpad/callMemeTokenOut.d.ts +1 -0
- package/lib/src/chaincode/launchpad/callMemeTokenOut.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/callMemeTokenOut.js +5 -5
- package/lib/src/chaincode/launchpad/callMemeTokenOut.js.map +1 -1
- package/lib/src/chaincode/launchpad/callNativeTokenIn.d.ts +1 -0
- package/lib/src/chaincode/launchpad/callNativeTokenIn.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/callNativeTokenIn.js +7 -6
- package/lib/src/chaincode/launchpad/callNativeTokenIn.js.map +1 -1
- package/lib/src/chaincode/launchpad/callNativeTokenOut.d.ts +1 -0
- package/lib/src/chaincode/launchpad/callNativeTokenOut.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/callNativeTokenOut.js +4 -5
- package/lib/src/chaincode/launchpad/callNativeTokenOut.js.map +1 -1
- package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.d.ts +12 -0
- package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.js +26 -6
- package/lib/src/chaincode/launchpad/configureLaunchpadFeeConfig.js.map +1 -1
- package/lib/src/chaincode/launchpad/createSale.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/createSale.js +10 -12
- package/lib/src/chaincode/launchpad/createSale.js.map +1 -1
- package/lib/src/chaincode/launchpad/fees.d.ts +1 -0
- package/lib/src/chaincode/launchpad/fees.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/fees.js +6 -2
- package/lib/src/chaincode/launchpad/fees.js.map +1 -1
- package/lib/src/chaincode/launchpad/fetchLaunchpadAdressConfig.js.map +1 -1
- package/lib/src/chaincode/launchpad/fetchSaleDetails.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/fetchSaleDetails.js +0 -4
- package/lib/src/chaincode/launchpad/fetchSaleDetails.js.map +1 -1
- package/lib/src/chaincode/launchpad/finaliseSale.js +3 -3
- package/lib/src/chaincode/launchpad/finaliseSale.js.map +1 -1
- package/lib/src/chaincode/launchpad/finalizeTokenAllocation.js.map +1 -1
- package/lib/src/chaincode/launchpad/index.d.ts +1 -0
- package/lib/src/chaincode/launchpad/index.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/index.js +1 -0
- package/lib/src/chaincode/launchpad/index.js.map +1 -1
- package/lib/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.d.ts +24 -0
- package/lib/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.d.ts.map +1 -0
- package/lib/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.js +84 -0
- package/lib/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.js.map +1 -0
- package/lib/src/chaincode/launchpad/preMintCalculation.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/preMintCalculation.js +0 -4
- package/lib/src/chaincode/launchpad/preMintCalculation.js.map +1 -1
- package/lib/src/chaincode/launchpad/sellExactToken.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/sellExactToken.js +27 -11
- package/lib/src/chaincode/launchpad/sellExactToken.js.map +1 -1
- package/lib/src/chaincode/launchpad/sellWithNative.d.ts.map +1 -1
- package/lib/src/chaincode/launchpad/sellWithNative.js +30 -8
- package/lib/src/chaincode/launchpad/sellWithNative.js.map +1 -1
- package/lib/src/chaincode/utils/launchpadSaleUtils.js +2 -2
- package/lib/src/chaincode/utils/launchpadSaleUtils.js.map +1 -1
- package/lib/src/cli.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/api/types/LaunchpadBatchSubmitAuthorities.ts +53 -0
- package/src/api/types/LaunchpadDtos.ts +38 -0
- package/src/api/types/LaunchpadFeeConfig.ts +13 -4
- package/src/api/types/index.ts +1 -0
- package/src/chaincode/LaunchpadContract.ts +104 -1
- package/src/chaincode/launchpad/buyExactToken.ts +18 -6
- package/src/chaincode/launchpad/buyWithNative.ts +29 -6
- package/src/chaincode/launchpad/callMemeTokenIn.ts +9 -8
- package/src/chaincode/launchpad/callMemeTokenOut.ts +9 -7
- package/src/chaincode/launchpad/callNativeTokenIn.ts +11 -8
- package/src/chaincode/launchpad/callNativeTokenOut.ts +9 -8
- package/src/chaincode/launchpad/configureLaunchpadFeeConfig.ts +27 -4
- package/src/chaincode/launchpad/createSale.ts +1 -5
- package/src/chaincode/launchpad/fees.ts +5 -1
- package/src/chaincode/launchpad/fetchSaleDetails.ts +0 -5
- package/src/chaincode/launchpad/finaliseSale.ts +3 -3
- package/src/chaincode/launchpad/index.ts +1 -0
- package/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.spec.ts +185 -0
- package/src/chaincode/launchpad/launchpadBatchSubmitAuthorizations.ts +105 -0
- package/src/chaincode/launchpad/preMintCalculation.ts +0 -5
- package/src/chaincode/launchpad/sellExactToken.ts +30 -15
- package/src/chaincode/launchpad/sellWithNative.ts +31 -7
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a, _b;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.LaunchpadContract = void 0;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
@@ -16,6 +17,7 @@ const tslib_1 = require("tslib");
|
|
|
16
17
|
* See the License for the specific language governing permissions and
|
|
17
18
|
* limitations under the License.
|
|
18
19
|
*/
|
|
20
|
+
const api_1 = require("@gala-chain/api");
|
|
19
21
|
const chaincode_1 = require("@gala-chain/chaincode");
|
|
20
22
|
const package_json_1 = require("../../package.json");
|
|
21
23
|
const types_1 = require("../api/types");
|
|
@@ -67,6 +69,56 @@ class LaunchpadContract extends chaincode_1.GalaContract {
|
|
|
67
69
|
async FetchLaunchpadFeeConfig(ctx) {
|
|
68
70
|
return (0, launchpad_1.fetchLaunchpadFeeConfig)(ctx);
|
|
69
71
|
}
|
|
72
|
+
async BatchSubmit(ctx, batchDto) {
|
|
73
|
+
var _a;
|
|
74
|
+
// Check if the calling user is authorized to submit batches
|
|
75
|
+
const batchAuthorities = await (0, launchpad_1.fetchLaunchpadBatchSubmitAuthorities)(ctx);
|
|
76
|
+
if (!batchAuthorities.isAuthorized(ctx.callingUser)) {
|
|
77
|
+
throw new api_1.UnauthorizedError(`CallingUser ${ctx.callingUser} is not authorized to submit batches. ` +
|
|
78
|
+
`Authorized users: ${batchAuthorities.getAuthorities().join(", ")}`);
|
|
79
|
+
}
|
|
80
|
+
const responses = [];
|
|
81
|
+
const softWritesLimit = (_a = batchDto.writesLimit) !== null && _a !== void 0 ? _a : api_1.BatchDto.WRITES_DEFAULT_LIMIT;
|
|
82
|
+
const writesLimit = Math.min(softWritesLimit, api_1.BatchDto.WRITES_HARD_LIMIT);
|
|
83
|
+
let writesCount = ctx.stub.getWritesCount();
|
|
84
|
+
for (const [index, op] of batchDto.operations.entries()) {
|
|
85
|
+
// Use sandboxed context to avoid flushes of writes and deletes, and populate
|
|
86
|
+
// the stub with current writes and deletes.
|
|
87
|
+
const sandboxCtx = ctx.createReadOnlyContext(index);
|
|
88
|
+
sandboxCtx.stub.setWrites(ctx.stub.getWrites());
|
|
89
|
+
sandboxCtx.stub.setDeletes(ctx.stub.getDeletes());
|
|
90
|
+
// Execute the operation. Collect both successful and failed responses.
|
|
91
|
+
let response;
|
|
92
|
+
try {
|
|
93
|
+
if (writesCount >= writesLimit) {
|
|
94
|
+
throw new chaincode_1.BatchWriteLimitExceededError(writesLimit);
|
|
95
|
+
}
|
|
96
|
+
const method = (0, chaincode_1.getApiMethod)(this, op.method, (m) => m.isWrite && m.methodName !== "BatchSubmit");
|
|
97
|
+
response = await this[method.methodName](sandboxCtx, op.dto);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
response = api_1.GalaChainResponse.Error(error);
|
|
101
|
+
}
|
|
102
|
+
responses.push(response);
|
|
103
|
+
// Update the current context with the writes and deletes if the operation
|
|
104
|
+
// is successful.
|
|
105
|
+
if (api_1.GalaChainResponse.isSuccess(response)) {
|
|
106
|
+
ctx.stub.setWrites(sandboxCtx.stub.getWrites());
|
|
107
|
+
ctx.stub.setDeletes(sandboxCtx.stub.getDeletes());
|
|
108
|
+
writesCount = ctx.stub.getWritesCount();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return responses;
|
|
112
|
+
}
|
|
113
|
+
async AuthorizeBatchSubmitter(ctx, dto) {
|
|
114
|
+
return await (0, launchpad_1.authorizeLaunchpadBatchSubmitter)(ctx, dto);
|
|
115
|
+
}
|
|
116
|
+
async DeauthorizeBatchSubmitter(ctx, dto) {
|
|
117
|
+
return await (0, launchpad_1.deauthorizeLaunchpadBatchSubmitter)(ctx, dto);
|
|
118
|
+
}
|
|
119
|
+
async GetBatchSubmitAuthorities(ctx, dto) {
|
|
120
|
+
return await (0, launchpad_1.getLaunchpadBatchSubmitAuthorities)(ctx, dto);
|
|
121
|
+
}
|
|
70
122
|
}
|
|
71
123
|
exports.LaunchpadContract = LaunchpadContract;
|
|
72
124
|
tslib_1.__decorate([
|
|
@@ -214,4 +266,49 @@ tslib_1.__decorate([
|
|
|
214
266
|
tslib_1.__metadata("design:paramtypes", [chaincode_1.GalaChainContext]),
|
|
215
267
|
tslib_1.__metadata("design:returntype", Promise)
|
|
216
268
|
], LaunchpadContract.prototype, "FetchLaunchpadFeeConfig", null);
|
|
269
|
+
tslib_1.__decorate([
|
|
270
|
+
(0, chaincode_1.GalaTransaction)({
|
|
271
|
+
type: chaincode_1.SUBMIT,
|
|
272
|
+
in: api_1.BatchDto,
|
|
273
|
+
out: "object",
|
|
274
|
+
description: "Submit a batch of transactions",
|
|
275
|
+
verifySignature: true
|
|
276
|
+
}),
|
|
277
|
+
tslib_1.__metadata("design:type", Function),
|
|
278
|
+
tslib_1.__metadata("design:paramtypes", [chaincode_1.GalaChainContext, api_1.BatchDto]),
|
|
279
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
280
|
+
], LaunchpadContract.prototype, "BatchSubmit", null);
|
|
281
|
+
tslib_1.__decorate([
|
|
282
|
+
(0, chaincode_1.Submit)({
|
|
283
|
+
in: types_1.AuthorizeBatchSubmitterDto,
|
|
284
|
+
out: types_1.BatchSubmitAuthoritiesResDto,
|
|
285
|
+
allowedOrgs: [(_a = process.env.CURATOR_ORG_MSP) !== null && _a !== void 0 ? _a : "CuratorOrg"]
|
|
286
|
+
}),
|
|
287
|
+
tslib_1.__metadata("design:type", Function),
|
|
288
|
+
tslib_1.__metadata("design:paramtypes", [chaincode_1.GalaChainContext,
|
|
289
|
+
types_1.AuthorizeBatchSubmitterDto]),
|
|
290
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
291
|
+
], LaunchpadContract.prototype, "AuthorizeBatchSubmitter", null);
|
|
292
|
+
tslib_1.__decorate([
|
|
293
|
+
(0, chaincode_1.Submit)({
|
|
294
|
+
in: types_1.DeauthorizeBatchSubmitterDto,
|
|
295
|
+
out: types_1.BatchSubmitAuthoritiesResDto,
|
|
296
|
+
allowedOrgs: [(_b = process.env.CURATOR_ORG_MSP) !== null && _b !== void 0 ? _b : "CuratorOrg"]
|
|
297
|
+
}),
|
|
298
|
+
tslib_1.__metadata("design:type", Function),
|
|
299
|
+
tslib_1.__metadata("design:paramtypes", [chaincode_1.GalaChainContext,
|
|
300
|
+
types_1.DeauthorizeBatchSubmitterDto]),
|
|
301
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
302
|
+
], LaunchpadContract.prototype, "DeauthorizeBatchSubmitter", null);
|
|
303
|
+
tslib_1.__decorate([
|
|
304
|
+
(0, chaincode_1.GalaTransaction)({
|
|
305
|
+
type: chaincode_1.EVALUATE,
|
|
306
|
+
in: types_1.FetchBatchSubmitAuthoritiesDto,
|
|
307
|
+
out: types_1.BatchSubmitAuthoritiesResDto
|
|
308
|
+
}),
|
|
309
|
+
tslib_1.__metadata("design:type", Function),
|
|
310
|
+
tslib_1.__metadata("design:paramtypes", [chaincode_1.GalaChainContext,
|
|
311
|
+
types_1.FetchBatchSubmitAuthoritiesDto]),
|
|
312
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
313
|
+
], LaunchpadContract.prototype, "GetBatchSubmitAuthorities", null);
|
|
217
314
|
//# sourceMappingURL=LaunchpadContract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LaunchpadContract.js","sourceRoot":"","sources":["../../../src/chaincode/LaunchpadContract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LaunchpadContract.js","sourceRoot":"","sources":["../../../src/chaincode/LaunchpadContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyExactToken.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyExactToken.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAkD,MAAM,uBAAuB,CAAC;AAGzG,OAAO,EAAE,qBAAqB,EAAiB,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"buyExactToken.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyExactToken.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAkD,MAAM,uBAAuB,CAAC;AAGzG,OAAO,EAAE,qBAAqB,EAAiB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMpF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,qBAAqB,GACjC,OAAO,CAAC,WAAW,CAAC,CAiGtB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buyExactToken = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
/*
|
|
5
6
|
* Copyright (c) Gala Games Inc. All rights reserved.
|
|
6
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -16,15 +17,12 @@ exports.buyExactToken = void 0;
|
|
|
16
17
|
* limitations under the License.
|
|
17
18
|
*/
|
|
18
19
|
const chaincode_1 = require("@gala-chain/chaincode");
|
|
19
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
20
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
|
20
21
|
const types_1 = require("../../api/types");
|
|
21
22
|
const error_1 = require("../../api/utils/error");
|
|
22
23
|
const utils_1 = require("../utils");
|
|
23
24
|
const callNativeTokenIn_1 = require("./callNativeTokenIn");
|
|
24
25
|
const finaliseSale_1 = require("./finaliseSale");
|
|
25
|
-
bignumber_js_1.BigNumber.config({
|
|
26
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
27
|
-
});
|
|
28
26
|
/**
|
|
29
27
|
* Executes the purchase of an exact amount of tokens in a token sale.
|
|
30
28
|
*
|
|
@@ -45,29 +43,43 @@ async function buyExactToken(ctx, buyTokenDTO) {
|
|
|
45
43
|
let isSaleFinalized = false;
|
|
46
44
|
// Fetch and validate the sale based on the provided vault address
|
|
47
45
|
const sale = await (0, utils_1.fetchAndValidateSale)(ctx, buyTokenDTO.vaultAddress);
|
|
48
|
-
const tokenLeftInVault = new bignumber_js_1.
|
|
46
|
+
const tokenLeftInVault = new bignumber_js_1.default(sale.sellingTokenQuantity);
|
|
49
47
|
// Calculate the required amount of native tokens to buy the specified token amount
|
|
50
48
|
const callNativeTokenInResult1 = await (0, callNativeTokenIn_1.callNativeTokenIn)(ctx, buyTokenDTO);
|
|
51
|
-
let
|
|
49
|
+
let transactionFees = callNativeTokenInResult1.extraFees.transactionFees;
|
|
50
|
+
let nativeTokensToBuy = new bignumber_js_1.default(callNativeTokenInResult1.calculatedQuantity);
|
|
52
51
|
const nativeToken = sale.fetchNativeTokenInstanceKey();
|
|
53
52
|
const memeToken = sale.fetchSellingTokenInstanceKey();
|
|
54
53
|
// If the requested token amount exceeds what's available, adjust it and recalculate native tokens needed
|
|
55
54
|
if (tokenLeftInVault.lte(buyTokenDTO.tokenQuantity)) {
|
|
56
55
|
buyTokenDTO.tokenQuantity = tokenLeftInVault;
|
|
57
56
|
const callNativeTokenInResult2 = await (0, callNativeTokenIn_1.callNativeTokenIn)(ctx, buyTokenDTO);
|
|
58
|
-
nativeTokensToBuy = new bignumber_js_1.
|
|
57
|
+
nativeTokensToBuy = new bignumber_js_1.default(callNativeTokenInResult2.calculatedQuantity);
|
|
58
|
+
transactionFees = callNativeTokenInResult2.extraFees.transactionFees;
|
|
59
59
|
isSaleFinalized = true;
|
|
60
60
|
}
|
|
61
61
|
// Check if the native tokens used exceed the market cap, finalizing the sale if true
|
|
62
62
|
if (nativeTokensToBuy
|
|
63
|
-
.plus(new bignumber_js_1.
|
|
64
|
-
.gte(new bignumber_js_1.
|
|
63
|
+
.plus(new bignumber_js_1.default(sale.nativeTokenQuantity))
|
|
64
|
+
.gte(new bignumber_js_1.default(types_1.LaunchpadSale.MARKET_CAP))) {
|
|
65
65
|
isSaleFinalized = true;
|
|
66
66
|
}
|
|
67
67
|
// Ensure the expected native token amount is not less than the actual amount required
|
|
68
68
|
if (buyTokenDTO.expectedNativeToken && buyTokenDTO.expectedNativeToken.comparedTo(nativeTokensToBuy) < 0) {
|
|
69
69
|
throw new error_1.SlippageToleranceExceededError("Gala tokens expected to perform this operation are less than the actual amount required.");
|
|
70
70
|
}
|
|
71
|
+
// Transfer transaction fees
|
|
72
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
73
|
+
if (launchpadFeeAddressConfiguration && transactionFees) {
|
|
74
|
+
await (0, chaincode_1.transferToken)(ctx, {
|
|
75
|
+
from: ctx.callingUser,
|
|
76
|
+
to: launchpadFeeAddressConfiguration.feeAddress,
|
|
77
|
+
tokenInstanceKey: nativeToken,
|
|
78
|
+
quantity: new bignumber_js_1.default(transactionFees),
|
|
79
|
+
allowancesToUse: [],
|
|
80
|
+
authorizedOnBehalf: undefined
|
|
81
|
+
});
|
|
82
|
+
}
|
|
71
83
|
// Transfer native tokens from the buyer to the vault
|
|
72
84
|
await (0, chaincode_1.transferToken)(ctx, {
|
|
73
85
|
from: ctx.callingUser,
|
|
@@ -100,6 +112,7 @@ async function buyExactToken(ctx, buyTokenDTO) {
|
|
|
100
112
|
const token = await (0, chaincode_1.fetchTokenClass)(ctx, sale.sellingToken);
|
|
101
113
|
return {
|
|
102
114
|
inputQuantity: nativeTokensToBuy.toFixed(),
|
|
115
|
+
totalFees: transactionFees,
|
|
103
116
|
outputQuantity: buyTokenDTO.tokenQuantity.toFixed(),
|
|
104
117
|
tokenName: token.name,
|
|
105
118
|
tradeType: "Buy",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyExactToken.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyExactToken.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buyExactToken.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyExactToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAkD,MAAM,uBAAuB,CAAC;AAGzG,OAAO,EAAwC,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"buyWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAkD,MAAM,uBAAuB,CAAC;AAGzG,OAAO,EAAwC,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO5G;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,sBAAsB,GAClC,OAAO,CAAC,WAAW,CAAC,CAiGtB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buyWithNative = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
/*
|
|
5
6
|
* Copyright (c) Gala Games Inc. All rights reserved.
|
|
6
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -16,16 +17,13 @@ exports.buyWithNative = void 0;
|
|
|
16
17
|
* limitations under the License.
|
|
17
18
|
*/
|
|
18
19
|
const chaincode_1 = require("@gala-chain/chaincode");
|
|
19
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
20
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
|
20
21
|
const types_1 = require("../../api/types");
|
|
21
22
|
const error_1 = require("../../api/utils/error");
|
|
22
23
|
const utils_1 = require("../utils");
|
|
23
24
|
const callMemeTokenOut_1 = require("./callMemeTokenOut");
|
|
24
25
|
const callNativeTokenIn_1 = require("./callNativeTokenIn");
|
|
25
26
|
const finaliseSale_1 = require("./finaliseSale");
|
|
26
|
-
bignumber_js_1.BigNumber.config({
|
|
27
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
28
|
-
});
|
|
29
27
|
/**
|
|
30
28
|
* Executes the purchase of tokens using a specified amount of native tokens.
|
|
31
29
|
*
|
|
@@ -46,26 +44,46 @@ bignumber_js_1.BigNumber.config({
|
|
|
46
44
|
*/
|
|
47
45
|
async function buyWithNative(ctx, buyTokenDTO) {
|
|
48
46
|
let isSaleFinalized = false;
|
|
47
|
+
// Fetch and validate sale state
|
|
49
48
|
const sale = await (0, utils_1.fetchAndValidateSale)(ctx, buyTokenDTO.vaultAddress);
|
|
50
|
-
const tokensLeftInVault = new bignumber_js_1.
|
|
49
|
+
const tokensLeftInVault = new bignumber_js_1.default(sale.sellingTokenQuantity);
|
|
50
|
+
// Calculate how many tokens the user can buy and fee info
|
|
51
51
|
const callMemeTokenOutResult = await (0, callMemeTokenOut_1.callMemeTokenOut)(ctx, buyTokenDTO);
|
|
52
|
-
let
|
|
52
|
+
let transactionFees = callMemeTokenOutResult.extraFees.transactionFees;
|
|
53
|
+
let tokensToBuy = new bignumber_js_1.default(callMemeTokenOutResult.calculatedQuantity);
|
|
53
54
|
const nativeToken = sale.fetchNativeTokenInstanceKey();
|
|
54
55
|
const memeToken = sale.fetchSellingTokenInstanceKey();
|
|
56
|
+
// If vault has fewer tokens than what user wants to buy, cap the purchase
|
|
55
57
|
if (tokensLeftInVault.comparedTo(tokensToBuy) <= 0) {
|
|
56
58
|
tokensToBuy = tokensLeftInVault;
|
|
57
59
|
const nativeTokensrequiredToBuyDto = new types_1.ExactTokenQuantityDto(buyTokenDTO.vaultAddress, tokensToBuy);
|
|
58
60
|
const callNativeTokenInResult = await (0, callNativeTokenIn_1.callNativeTokenIn)(ctx, nativeTokensrequiredToBuyDto);
|
|
59
|
-
|
|
61
|
+
transactionFees = callMemeTokenOutResult.extraFees.transactionFees;
|
|
62
|
+
buyTokenDTO.nativeTokenQuantity = new bignumber_js_1.default(callNativeTokenInResult.calculatedQuantity);
|
|
60
63
|
isSaleFinalized = true;
|
|
61
64
|
}
|
|
65
|
+
// Finalize sale if market cap is reached
|
|
62
66
|
if (buyTokenDTO.nativeTokenQuantity
|
|
63
|
-
.plus(new bignumber_js_1.
|
|
64
|
-
.gte(new bignumber_js_1.
|
|
67
|
+
.plus(new bignumber_js_1.default(sale.nativeTokenQuantity))
|
|
68
|
+
.gte(new bignumber_js_1.default(types_1.LaunchpadSale.MARKET_CAP)))
|
|
65
69
|
isSaleFinalized = true;
|
|
70
|
+
// Check for slippage condition
|
|
66
71
|
if (buyTokenDTO.expectedToken && buyTokenDTO.expectedToken.comparedTo(tokensToBuy) > 0) {
|
|
67
72
|
throw new error_1.SlippageToleranceExceededError("Tokens expected from this operation are more than the the actual amount that will be provided.");
|
|
68
73
|
}
|
|
74
|
+
// Transfer transaction fees to launchpad fee address
|
|
75
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
76
|
+
if (launchpadFeeAddressConfiguration && transactionFees) {
|
|
77
|
+
await (0, chaincode_1.transferToken)(ctx, {
|
|
78
|
+
from: ctx.callingUser,
|
|
79
|
+
to: launchpadFeeAddressConfiguration.feeAddress,
|
|
80
|
+
tokenInstanceKey: nativeToken,
|
|
81
|
+
quantity: new bignumber_js_1.default(transactionFees),
|
|
82
|
+
allowancesToUse: [],
|
|
83
|
+
authorizedOnBehalf: undefined
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Transfer native tokens from buyer to vault
|
|
69
87
|
await (0, chaincode_1.transferToken)(ctx, {
|
|
70
88
|
from: ctx.callingUser,
|
|
71
89
|
to: buyTokenDTO.vaultAddress,
|
|
@@ -74,6 +92,7 @@ async function buyWithNative(ctx, buyTokenDTO) {
|
|
|
74
92
|
allowancesToUse: [],
|
|
75
93
|
authorizedOnBehalf: undefined
|
|
76
94
|
});
|
|
95
|
+
// Transfer meme tokens from vault to buyer
|
|
77
96
|
await (0, chaincode_1.transferToken)(ctx, {
|
|
78
97
|
from: buyTokenDTO.vaultAddress,
|
|
79
98
|
to: ctx.callingUser,
|
|
@@ -85,14 +104,17 @@ async function buyWithNative(ctx, buyTokenDTO) {
|
|
|
85
104
|
callingUser: ctx.callingUser
|
|
86
105
|
}
|
|
87
106
|
});
|
|
107
|
+
// Update sale object with purchase data
|
|
88
108
|
sale.buyToken(tokensToBuy, buyTokenDTO.nativeTokenQuantity);
|
|
89
109
|
await (0, chaincode_1.putChainObject)(ctx, sale);
|
|
110
|
+
// Finalize sale if it's complete
|
|
90
111
|
if (isSaleFinalized) {
|
|
91
112
|
await (0, finaliseSale_1.finalizeSale)(ctx, sale);
|
|
92
113
|
}
|
|
93
114
|
const token = await (0, chaincode_1.fetchTokenClass)(ctx, sale.sellingToken);
|
|
94
115
|
return {
|
|
95
116
|
inputQuantity: buyTokenDTO.nativeTokenQuantity.toFixed(),
|
|
117
|
+
totalFees: transactionFees,
|
|
96
118
|
outputQuantity: tokensToBuy.toFixed(),
|
|
97
119
|
tokenName: token.name,
|
|
98
120
|
tradeType: "Buy",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buyWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callMemeTokenIn.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenIn.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"callMemeTokenIn.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenIn.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AA+BxE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB;;;;;;GAchG"}
|
|
@@ -17,13 +17,9 @@ const tslib_1 = require("tslib");
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
const api_1 = require("@gala-chain/api");
|
|
20
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
21
20
|
const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
|
|
22
21
|
const utils_1 = require("../utils");
|
|
23
22
|
const fees_1 = require("./fees");
|
|
24
|
-
bignumber_js_1.BigNumber.config({
|
|
25
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
26
|
-
});
|
|
27
23
|
function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity) {
|
|
28
24
|
const totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold()); // current tokens sold / x
|
|
29
25
|
let nativeTokens = new decimal_js_1.default(requestedNativeTokenQuantity.toString()); // native tokens used to buy / y
|
|
@@ -65,10 +61,12 @@ function calculateMemeTokensRequired(sale, requestedNativeTokenQuantity) {
|
|
|
65
61
|
*/
|
|
66
62
|
async function callMemeTokenIn(ctx, sellTokenDTO) {
|
|
67
63
|
const sale = await (0, utils_1.fetchAndValidateSale)(ctx, sellTokenDTO.vaultAddress);
|
|
64
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
68
65
|
return {
|
|
69
66
|
calculatedQuantity: calculateMemeTokensRequired(sale, sellTokenDTO.nativeTokenQuantity),
|
|
70
67
|
extraFees: {
|
|
71
|
-
reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, sellTokenDTO.nativeTokenQuantity).toString()
|
|
68
|
+
reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, sellTokenDTO.nativeTokenQuantity).toString(),
|
|
69
|
+
transactionFees: (0, fees_1.calculateTransactionFee)(sellTokenDTO.nativeTokenQuantity, launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
|
|
72
70
|
}
|
|
73
71
|
};
|
|
74
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callMemeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenIn.ts"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;GAaG;AACH,yCAAwD;
|
|
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 +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;
|
|
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;;;;;;GA2ChG"}
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.callMemeTokenOut = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
|
6
6
|
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
|
-
|
|
10
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
11
|
-
});
|
|
9
|
+
const fees_1 = require("./fees");
|
|
12
10
|
/**
|
|
13
11
|
* Calculates the number of tokens that can be purchased using a specified amount
|
|
14
12
|
* of native tokens based on a bonding curve mechanism.
|
|
@@ -45,10 +43,12 @@ async function callMemeTokenOut(ctx, buyTokenDTO) {
|
|
|
45
43
|
if (roundedResult.add(totalTokensSold).greaterThan(new decimal_js_1.default("1e+7"))) {
|
|
46
44
|
roundedResult = new decimal_js_1.default("1e+7").minus(new decimal_js_1.default(totalTokensSold));
|
|
47
45
|
}
|
|
46
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
48
47
|
return {
|
|
49
48
|
calculatedQuantity: roundedResult.toFixed(),
|
|
50
49
|
extraFees: {
|
|
51
|
-
reverseBondingCurve: "0"
|
|
50
|
+
reverseBondingCurve: "0",
|
|
51
|
+
transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(nativeTokens.toFixed()), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callMemeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callMemeTokenOut.ts"],"names":[],"mappings":";;;;AAeA
|
|
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,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,CAAC,0BAA0B;IACvF,IAAI,YAAY,GAAG,IAAI,oBAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,gCAAgC;IAC5G,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,IACE,YAAY,CAAC,GAAG,CAAC,IAAI,oBAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,oBAAO,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,EAC1G;QACA,YAAY,GAAG,IAAI,oBAAO,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,oBAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;KACnG;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEjE,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;IAEtC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExD,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,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,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAC7E,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;AA3CD,4CA2CC"}
|
|
@@ -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;
|
|
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;;;;;;GAmChG"}
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.callNativeTokenIn = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
|
6
6
|
const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
|
|
7
7
|
const utils_1 = require("../utils");
|
|
8
|
-
|
|
9
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
10
|
-
});
|
|
8
|
+
const fees_1 = require("./fees");
|
|
11
9
|
/**
|
|
12
10
|
* Calculates the amount of native tokens required to purchase a specified amount
|
|
13
11
|
* of tokens using a bonding curve mechanism.
|
|
@@ -40,10 +38,13 @@ async function callNativeTokenIn(ctx, buyTokenDTO) {
|
|
|
40
38
|
const constantFactor = basePrice.div(exponentFactor);
|
|
41
39
|
const differenceOfExponentials = eResult1.minus(eResult2);
|
|
42
40
|
const price = constantFactor.mul(differenceOfExponentials);
|
|
41
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
42
|
+
const roundedPrice = price.toDecimalPlaces(8, decimal_js_1.default.ROUND_UP).toFixed();
|
|
43
43
|
return {
|
|
44
|
-
calculatedQuantity:
|
|
44
|
+
calculatedQuantity: roundedPrice,
|
|
45
45
|
extraFees: {
|
|
46
|
-
reverseBondingCurve: "0"
|
|
46
|
+
reverseBondingCurve: "0",
|
|
47
|
+
transactionFees: (0, fees_1.calculateTransactionFee)((0, bignumber_js_1.default)(roundedPrice), launchpadFeeAddressConfiguration === null || launchpadFeeAddressConfiguration === void 0 ? void 0 : launchpadFeeAddressConfiguration.feeAmount)
|
|
47
48
|
}
|
|
48
49
|
};
|
|
49
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callNativeTokenIn.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenIn.ts"],"names":[],"mappings":";;;;AAeA
|
|
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;IAC7E,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;AAnCD,8CAmCC"}
|
|
@@ -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;
|
|
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;;;;;;GAclG"}
|
|
@@ -2,13 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.callNativeTokenOut = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
|
6
6
|
const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
|
|
7
7
|
const utils_1 = require("../utils");
|
|
8
8
|
const fees_1 = require("./fees");
|
|
9
|
-
bignumber_js_1.BigNumber.config({
|
|
10
|
-
ROUNDING_MODE: bignumber_js_1.BigNumber.ROUND_UP
|
|
11
|
-
});
|
|
12
9
|
function calculateNativeTokensReceived(sale, tokensToSellBn) {
|
|
13
10
|
const totalTokensSold = new decimal_js_1.default(sale.fetchTokensSold());
|
|
14
11
|
let tokensToSell = new decimal_js_1.default(tokensToSellBn.toString());
|
|
@@ -49,10 +46,12 @@ function calculateNativeTokensReceived(sale, tokensToSellBn) {
|
|
|
49
46
|
async function callNativeTokenOut(ctx, sellTokenDTO) {
|
|
50
47
|
const sale = await (0, utils_1.fetchAndValidateSale)(ctx, sellTokenDTO.vaultAddress);
|
|
51
48
|
const nativeTokensReceived = calculateNativeTokensReceived(sale, sellTokenDTO.tokenQuantity);
|
|
49
|
+
const launchpadFeeAddressConfiguration = await (0, utils_1.fetchLaunchpadFeeAddress)(ctx);
|
|
52
50
|
return {
|
|
53
51
|
calculatedQuantity: nativeTokensReceived,
|
|
54
52
|
extraFees: {
|
|
55
|
-
reverseBondingCurve: (0, fees_1.calculateReverseBondingCurveFee)(sale, (0, bignumber_js_1.
|
|
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)
|
|
56
55
|
}
|
|
57
56
|
};
|
|
58
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callNativeTokenOut.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/callNativeTokenOut.ts"],"names":[],"mappings":";;;;AAeA
|
|
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;IAC7E,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;AAdD,gDAcC"}
|