@gala-chain/launchpad 1.0.9 → 1.0.10

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 (27) hide show
  1. package/CLAUDE.md +279 -0
  2. package/lib/package.json +2 -2
  3. package/lib/src/chaincode/launchpad/buyWithNative.d.ts.map +1 -1
  4. package/lib/src/chaincode/launchpad/buyWithNative.js +11 -4
  5. package/lib/src/chaincode/launchpad/buyWithNative.js.map +1 -1
  6. package/lib/src/chaincode/launchpad/sellWithNative.d.ts.map +1 -1
  7. package/lib/src/chaincode/launchpad/sellWithNative.js +9 -1
  8. package/lib/src/chaincode/launchpad/sellWithNative.js.map +1 -1
  9. package/lib/src/chaincode/test/launchpadgala.js +1 -1
  10. package/lib/src/chaincode/test/launchpadgala.js.map +1 -1
  11. package/lib/tsconfig.tsbuildinfo +1 -1
  12. package/package.json +2 -2
  13. package/src/chaincode/launchpad/buyExactToken.spec.ts +90 -20
  14. package/src/chaincode/launchpad/buyWithNative.spec.ts +99 -25
  15. package/src/chaincode/launchpad/buyWithNative.ts +20 -5
  16. package/src/chaincode/launchpad/callMemeTokenIn.spec.ts +244 -0
  17. package/src/chaincode/launchpad/callMemeTokenOut.spec.ts +1 -1
  18. package/src/chaincode/launchpad/callNativeTokenIn.spec.ts +269 -0
  19. package/src/chaincode/launchpad/callNativeTokenOut.spec.ts +276 -0
  20. package/src/chaincode/launchpad/configureLaunchpadFeeConfig.spec.ts +202 -0
  21. package/src/chaincode/launchpad/createSale.spec.ts +259 -0
  22. package/src/chaincode/launchpad/fetchSaleDetails.spec.ts +141 -0
  23. package/src/chaincode/launchpad/finalizeTokenAllocation.spec.ts +126 -0
  24. package/src/chaincode/launchpad/sellExactToken.spec.ts +284 -0
  25. package/src/chaincode/launchpad/sellWithNative.spec.ts +329 -0
  26. package/src/chaincode/launchpad/sellWithNative.ts +22 -5
  27. package/src/chaincode/test/launchpadgala.ts +1 -1
package/CLAUDE.md ADDED
@@ -0,0 +1,279 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+ GalaChain Launchpad Chaincode - A blockchain smart contract for token sales and DEX operations built on the GalaChain platform.
7
+
8
+ ## Development Commands
9
+
10
+ ### Build and Compilation
11
+ - `npm run build` - Compile TypeScript to JavaScript
12
+ - `npm run build:watch` - Compile with watch mode
13
+ - `npm run clean` - Clean build artifacts
14
+
15
+ ### Code Quality
16
+ - `npm run lint` - Run ESLint on .ts and .js files
17
+ - `npm run fix` - Fix ESLint issues automatically
18
+ - `npm run format` - Format code with Prettier
19
+
20
+ ### Testing
21
+ - `npm test` - Run unit tests with Jest (uses RBAC by default)
22
+ - `npm run test:e2e` - Run end-to-end tests
23
+ - `npm run test:e2e-mocked` - Run e2e tests with mocked chaincode
24
+ - `npm run update-snapshot` - Update Jest snapshots
25
+ - Running a single test: Use Jest with specific test file path
26
+
27
+ ### Network Operations
28
+ - `npm run network:start` - Start local test network with watch mode
29
+ - `npm run network:up` - Start network with specific contracts
30
+ - `npm run network:prune` - Clean up network
31
+ - `npm run network:recreate` - Full network reset and restart
32
+
33
+ ## Architecture
34
+
35
+ ### Core Structure
36
+ The codebase follows a chaincode pattern with clear separation:
37
+
38
+ - **src/chaincode/** - Smart contract implementation
39
+ - `LaunchpadContract.ts` - Main contract with all transaction methods
40
+ - `launchpad/` - Individual transaction implementations (buy, sell, trade operations)
41
+ - `dexLaunchpadFeeGate.ts` - Fee calculation and validation logic
42
+
43
+ - **src/api/** - External API layer
44
+ - `types/` - DTOs and data models (LaunchpadSale, LaunchpadFeeConfig, etc.)
45
+ - `validators/` - Custom validation decorators
46
+ - `utils/` - Utility functions
47
+
48
+ ### Key Patterns
49
+ 1. **Transaction Methods**: Each major operation (buy, sell, trade) is implemented as a separate module in `src/chaincode/launchpad/`
50
+ 2. **Fee Management**: Centralized fee logic through fee gates and configuration
51
+ 3. **Batch Operations**: Support for batch submit authorities and batch processing
52
+ 4. **GalaChain Integration**: Built on GalaChain SDK with GalaContract base class
53
+
54
+ ### Dependencies
55
+ - Built on GalaChain SDK (@gala-chain/api, @gala-chain/chaincode)
56
+ - Integrates with @gala-chain/dex for DEX functionality
57
+ - Uses Fabric Contract API for blockchain interactions
58
+
59
+ ### Testing Approach
60
+ - Unit tests alongside implementation files (*.spec.ts)
61
+ - E2E tests in separate e2e/ directory
62
+ - RBAC (Role-Based Access Control) enabled by default for tests
63
+ - Test environment configured via .dev-env file
64
+
65
+ ## Unit Test Guidelines
66
+
67
+ ### Test Structure Pattern
68
+ Follow this consistent pattern for all unit tests:
69
+
70
+ ```typescript
71
+ describe("Feature Name", () => {
72
+ // Declare reusable variables at describe block level
73
+ let contract: LaunchpadContract;
74
+ let currencyClass: TokenClass;
75
+ let sale: LaunchpadSale;
76
+ let userBalance: TokenBalance;
77
+ // ... other test fixtures
78
+
79
+ beforeEach(() => {
80
+ // Initialize all reusable variables here
81
+ contract = new LaunchpadContract();
82
+ currencyClass = currency.tokenClass();
83
+ // ... setup test data
84
+ });
85
+
86
+ it("should describe expected behavior", async () => {
87
+ // Given - Setup test prerequisites
88
+ const { ctx, contract } = fixture(LaunchpadContract)
89
+ .registeredUsers(users.testUser1)
90
+ .savedState(
91
+ currencyClass,
92
+ sale,
93
+ userBalance
94
+ // ... all required chain state
95
+ );
96
+
97
+ const dto = new SomeDto(param1, param2);
98
+ dto.uniqueKey = randomUniqueKey();
99
+ dto.sign(users.testUser1.privateKey);
100
+
101
+ // When - Execute the contract method
102
+ const result = await contract.SomeMethod(ctx, dto);
103
+
104
+ // Then - Verify expected outcomes
105
+ expect(result.Status).toBe(1);
106
+ expect(result.Data?.someProperty).toBe("expectedValue");
107
+ });
108
+ });
109
+ ```
110
+
111
+ ### Key Requirements
112
+
113
+ 1. **Proper Fixture Setup**: Always use `fixture(ContractClass).registeredUsers(...).savedState(...)` to set up blockchain state
114
+ 2. **DTO Construction**: Use proper constructors with required parameters - never construct with empty `new Dto()`
115
+ 3. **User Alias Format**: Use `asValidUserAlias("client|username")` format for user identifiers
116
+ 4. **Signing**: Always call `dto.sign(user.privateKey)` before submitting DTOs
117
+ 5. **State Dependencies**: Include ALL required chain objects (token classes, instances, balances, sales) in `.savedState()`
118
+
119
+ ### Common Patterns
120
+
121
+ #### Balance Setup
122
+ ```typescript
123
+ const userBalance = plainToInstance(TokenBalance, {
124
+ ...currency.tokenBalance(),
125
+ owner: users.testUser1.identityKey,
126
+ quantity: new BigNumber("1000")
127
+ });
128
+ ```
129
+
130
+ #### DTO Creation and Signing
131
+ ```typescript
132
+ const dto = new ExactTokenQuantityDto(vaultAddress, new BigNumber("100"));
133
+ dto.expectedNativeToken = new BigNumber("10"); // Optional slippage protection
134
+ dto.uniqueKey = randomUniqueKey();
135
+ dto.sign(users.testUser1.privateKey);
136
+ ```
137
+
138
+ #### Result Validation
139
+ ```typescript
140
+ // Test successful operations
141
+ expect(result.Status).toBe(1);
142
+ expect(result.Data?.outputQuantity).toBe("100");
143
+
144
+ // Test failures
145
+ expect(result.Status).toBe(0);
146
+ expect(result.ErrorKey).toContain("VALIDATION_FAILED");
147
+ expect(result.Message).toContain("expected error text");
148
+ ```
149
+
150
+ ### Test Data Management
151
+ - Use helper functions from `src/chaincode/test/` (e.g., `currency`, `launchpadgala`)
152
+ - Create consistent test users via `users.testUser1`, `users.testUser2`, etc.
153
+ - Use `plainToInstance()` to create properly typed test objects
154
+ - Set up complete object graphs - don't leave required properties undefined
155
+
156
+ ### User Authorization in Tests
157
+ The `@gala-chain/test` package provides different user types for different testing scenarios:
158
+
159
+ - **`users.admin`**: A Curator user with CuratorOrg privileges. Use for testing methods that require organization-level permissions (e.g., `ConfigureLaunchpadFeeAddress`, `FinalizeTokenAllocation`)
160
+ - **`users.testUser1`, `users.testUser2`, etc.**: Normal end users representing typical client interactions. Use for standard trading operations and user-facing functionality
161
+
162
+ **CuratorOrg Methods**: For methods with `allowedOrgs: ["CuratorOrg"]`, you MUST use the `caClientIdentity` fixture method to set the proper organization context:
163
+
164
+ ```typescript
165
+ const { ctx, contract } = fixture(LaunchpadContract)
166
+ .caClientIdentity("test-admin", "CuratorOrg") // Essential for CuratorOrg methods
167
+ .registeredUsers(users.admin)
168
+ .savedState(feeConfig);
169
+ ```
170
+
171
+ **Important**: Always use both `caClientIdentity("test-admin", "CuratorOrg")` AND `users.admin` for testing methods that require CuratorOrg privileges, otherwise tests will fail with permission errors.
172
+
173
+ ### Key Technical Insights
174
+
175
+ #### DTO Construction Pattern
176
+ *Sometimes* DTOs don't take constructor parameters: If the DTO defines a constructor, it generally uses a constructor. Otherwise, use `plainToInstance` (imported from `class-transformer`) or `createValidDTO` (imported from `@gala-chain/api`).
177
+
178
+ ```typescript
179
+ // DTO with constructor
180
+ const dto = new ExactTokenQuantityDto(vaultAddress, new BigNumber("100"));
181
+
182
+ // DTO without constructor
183
+ const dto = new ConfigureLaunchpadFeeAddressDto();
184
+ dto.newPlatformFeeAddress = asValidUserAlias("client|feeAddress");
185
+ dto.newFeeAmount = 0.01;
186
+ ```
187
+
188
+ #### Organization Permissions
189
+ Methods like `ConfigureLaunchpadFeeAddress` and `FinalizeTokenAllocation` require CuratorOrg privileges. Always use `users.admin` for testing these methods, not regular test users.
190
+
191
+ #### Bonding Curve Constraints
192
+ Sell operations are mathematically constrained by previous buy operations and token precision limits. The bonding curve calculations can produce high-precision results that may exceed token decimal constraints (typically 10 decimal places).
193
+
194
+ #### Test Data Setup Requirements
195
+ Proper fixture setup requires comprehensive chain state including:
196
+ - Token classes and instances for both native and meme tokens
197
+ - Token balances for all participants (users and sale vaults)
198
+ - LaunchpadSale objects with appropriate initial state
199
+ - Fee configurations when testing fee-related functionality
200
+
201
+ ### Execution Testing
202
+ - Always execute actual contract methods, not just internal functions
203
+ - Test both success and failure scenarios
204
+ - Verify state changes through result objects and contract responses
205
+ - Use real cryptographic signing and validation flows
206
+
207
+ ### Response Validation Best Practices
208
+ Prefer using `transactionSuccess()` and `transactionError()` helper methods from `@gala-chain/test` over manual status checks:
209
+
210
+ ```typescript
211
+ // Given expected inputs and outputs
212
+ const expectedResponse = new SomeResponseDto();
213
+ expectedResponse.someProperty = "expectedValue";
214
+
215
+ // When
216
+ const response = await contract.SomeMethod(ctx, dto);
217
+
218
+ // Then - Use helper methods for better error reporting
219
+ expect(response).toEqual(transactionSuccess(expectedResponse));
220
+ // Instead of: expect(response.Status).toBe(1);
221
+ ```
222
+
223
+ **Benefits**:
224
+ - Single assertion compares both status and response properties
225
+ - Detailed error messages show actual vs expected responses
226
+ - Reveals underlying implementation issues (e.g., decimal precision errors)
227
+ - Better test failure diagnostics for debugging
228
+
229
+ ## Chaincode Unit Test File Organization
230
+
231
+ Unit test are written in files side-by-side with source code files in `src/`. End-to-End intgration tests go in `e2e/`.
232
+
233
+ ### 1:1 File-to-Test Association
234
+ The `src/chaincode/launchpad/` directory generally follows a 1:1 correspondence between implementation files and their test files:
235
+
236
+ - **Implementation files**: `{functionName}.ts` - Contains the core transaction logic
237
+ - **Test files**: `{functionName}.spec.ts` - Contains comprehensive unit tests for the function
238
+ - **Contract mapping**: Each function is exposed as a method in `LaunchpadContract.ts` and exported via `index.ts`
239
+
240
+ This is not a strict rule but is a general convention.
241
+
242
+ ### Current Implementation Coverage
243
+ Based on contract methods in `LaunchpadContract.ts`, the following functions should have corresponding files:
244
+
245
+ **Contract Methods → Implementation Files:**
246
+ - `CreateSale` → `createSale.ts`
247
+ - `FetchSaleDetails` → `fetchSaleDetails.ts`
248
+ - `BuyExactToken` → `buyExactToken.ts`
249
+ - `SellExactToken` → `sellExactToken.ts`
250
+ - `BuyWithNative` → `buyWithNative.ts`
251
+ - `SellWithNative` → `sellWithNative.ts`
252
+ - `CallNativeTokenIn` → `callNativeTokenIn.ts`
253
+ - `CallMemeTokenOut` → `callMemeTokenOut.ts`
254
+ - `CallNativeTokenOut` → `callNativeTokenOut.ts`
255
+ - `CallMemeTokenIn` → `callMemeTokenIn.ts`
256
+ - `ConfigureLaunchpadFeeAddress` → `configureLaunchpadFeeConfig.ts`
257
+ - `FinalizeTokenAllocation` → `finalizeTokenAllocation.ts`
258
+ - `FetchLaunchpadFeeAmount` → `fetchLaunchpadFeeAmount.ts`
259
+ - `AuthorizeBatchSubmitter` → `launchpadBatchSubmitAuthorizations.ts`
260
+ - `DeauthorizeBatchSubmitter` → `launchpadBatchSubmitAuthorizations.ts`
261
+ - `GetBatchSubmitAuthorities` → `launchpadBatchSubmitAuthorizations.ts`
262
+
263
+ ### Test Coverage Standards
264
+ Each `.spec.ts` file should comprehensively test:
265
+
266
+ 1. **Happy Path Scenarios**: Valid inputs producing expected outputs
267
+ 3. **Business Logic Edge Cases**: Insufficient balances, expired sales, quantity limits
268
+ 5. **State Verification**: Proper updates to balances, sales, and configurations
269
+
270
+ #### Unnecessary coverage
271
+
272
+ 1. **Validation Failures**: Invalid DTOs, missing required fields, etc: These cases are tested via class-validator and/or in the defined DTO classes that extend ChainCallDTO or SubmitCallDTO. The `@GalaTransaction` and `@Submit` decorators will always validate DTOs before these methods are executed by the contract.
273
+ 2. **Error Conditions**: Network failures, state inconsistencies, concurrent operations, etc. should be tested as needed via integration tests (e2e directory) not unit tests.
274
+
275
+ ### Naming Conventions
276
+ - Implementation files use camelCase: `buyExactToken.ts`
277
+ - Test files match with `.spec.ts` suffix: `buyExactToken.spec.ts`
278
+ - Exported function names match the implementation file name
279
+ - Contract method names use PascalCase: `BuyExactToken`
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gala-chain/launchpad",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "GalaChain Launchpad Chaincode",
5
5
  "main": "lib/src/index.js",
6
6
  "types": "lib/src/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "@gala-chain/api": "~2.3.4",
27
27
  "@gala-chain/chaincode": "~2.3.4",
28
- "@gala-chain/dex": "1.0.4",
28
+ "@gala-chain/dex": "1.0.19",
29
29
  "@grpc/grpc-js": "1.10.10",
30
30
  "decimal.js": "^10.5.0",
31
31
  "dotenv": "^16.0.1",
@@ -1 +1 @@
1
- {"version":3,"file":"buyWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAKjB,MAAM,uBAAuB,CAAC;AAG/B,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,CA4GtB"}
1
+ {"version":3,"file":"buyWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAMjB,MAAM,uBAAuB,CAAC;AAG/B,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,CA0HtB"}
@@ -54,11 +54,17 @@ async function buyWithNative(ctx, buyTokenDTO) {
54
54
  let tokensToBuy = new bignumber_js_1.default(callMemeTokenOutResult.calculatedQuantity);
55
55
  const nativeToken = sale.fetchNativeTokenInstanceKey();
56
56
  const memeToken = sale.fetchSellingTokenInstanceKey();
57
+ // Round tokensToBuy based on decimals property of sellToken TokenClass entry,
58
+ // because otherwise `transferToken()` call below will fail with
59
+ // an INVALID_DECIMALS error.
60
+ const { collection, category, type, additionalKey } = sale.sellingToken;
61
+ const memeTokenClass = await (0, chaincode_1.getObjectByKey)(ctx, api_1.TokenClass, api_1.TokenClass.getCompositeKeyFromParts(api_1.TokenClass.INDEX_KEY, [collection, category, type, additionalKey]));
62
+ tokensToBuy = tokensToBuy.decimalPlaces(memeTokenClass.decimals);
57
63
  // If vault has fewer tokens than what user wants to buy, cap the purchase
58
64
  if (tokensLeftInVault.comparedTo(tokensToBuy) <= 0) {
59
- tokensToBuy = tokensLeftInVault;
60
- const nativeTokensrequiredToBuyDto = new types_1.ExactTokenQuantityDto(buyTokenDTO.vaultAddress, tokensToBuy);
61
- const callNativeTokenInResult = await (0, callNativeTokenIn_1.callNativeTokenIn)(ctx, nativeTokensrequiredToBuyDto);
65
+ tokensToBuy = tokensLeftInVault.decimalPlaces(memeTokenClass.decimals);
66
+ const nativeTokensRequiredToBuyDto = new types_1.ExactTokenQuantityDto(buyTokenDTO.vaultAddress, tokensToBuy);
67
+ const callNativeTokenInResult = await (0, callNativeTokenIn_1.callNativeTokenIn)(ctx, nativeTokensRequiredToBuyDto);
62
68
  transactionFees = callMemeTokenOutResult.extraFees.transactionFees;
63
69
  buyTokenDTO.nativeTokenQuantity = new bignumber_js_1.default(callNativeTokenInResult.calculatedQuantity);
64
70
  isSaleFinalized = true;
@@ -66,8 +72,9 @@ async function buyWithNative(ctx, buyTokenDTO) {
66
72
  // Finalize sale if market cap is reached
67
73
  if (buyTokenDTO.nativeTokenQuantity
68
74
  .plus(new bignumber_js_1.default(sale.nativeTokenQuantity))
69
- .gte(new bignumber_js_1.default(types_1.LaunchpadSale.MARKET_CAP)))
75
+ .gte(new bignumber_js_1.default(types_1.LaunchpadSale.MARKET_CAP))) {
70
76
  isSaleFinalized = true;
77
+ }
71
78
  // Check for slippage condition
72
79
  if (buyTokenDTO.expectedToken && buyTokenDTO.expectedToken.comparedTo(tokensToBuy) > 0) {
73
80
  throw new error_1.SlippageToleranceExceededError("Tokens expected from this operation are more than the actual amount that will be provided.");
@@ -1 +1 @@
1
- {"version":3,"file":"buyWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buyWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/buyWithNative.ts"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;GAaG;AACH,yCAAoE;AACpE,qDAO+B;AAC/B,wEAAqC;AAErC,2CAA4G;AAC5G,iDAAuE;AACvE,oCAA0E;AAC1E,yDAAsD;AACtD,2DAAwD;AACxD,iDAA8C;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,aAAa,CACjC,GAAqB,EACrB,WAAmC;IAEnC,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,iBAAiB,GAAG,IAAI,sBAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEnE,0DAA0D;IAC1D,MAAM,sBAAsB,GAAG,MAAM,IAAA,mCAAgB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxE,IAAI,eAAe,GAAG,sBAAsB,CAAC,SAAS,CAAC,eAAe,CAAC;IACvE,IAAI,WAAW,GAAG,IAAI,sBAAS,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAEtD,8EAA8E;IAC9E,gEAAgE;IAChE,6BAA6B;IAC7B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;IAExE,MAAM,cAAc,GAAG,MAAM,IAAA,0BAAc,EACzC,GAAG,EACH,gBAAU,EACV,gBAAU,CAAC,wBAAwB,CAAC,gBAAU,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CACvG,CAAC;IAEF,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEjE,0EAA0E;IAC1E,IAAI,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAClD,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,4BAA4B,GAAG,IAAI,6BAAqB,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtG,MAAM,uBAAuB,GAAG,MAAM,IAAA,qCAAiB,EAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAC3F,eAAe,GAAG,sBAAsB,CAAC,SAAS,CAAC,eAAe,CAAC;QACnE,WAAW,CAAC,mBAAmB,GAAG,IAAI,sBAAS,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAC5F,eAAe,GAAG,IAAI,CAAC;KACxB;IAED,yCAAyC;IACzC,IACE,WAAW,CAAC,mBAAmB;SAC5B,IAAI,CAAC,IAAI,sBAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAC7C,GAAG,CAAC,IAAI,sBAAS,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,EAC/C;QACA,eAAe,GAAG,IAAI,CAAC;KACxB;IAED,+BAA+B;IAC/B,IAAI,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;QACtF,MAAM,IAAI,sCAA8B,CACtC,4FAA4F,CAC7F,CAAC;KACH;IAED,qDAAqD;IACrD,MAAM,gCAAgC,GAAG,MAAM,IAAA,gCAAwB,EAAC,GAAG,CAAC,CAAC;IAC7E,IAAI,gCAAgC,IAAI,eAAe,EAAE;QACvD,MAAM,aAAa,GAAG,IAAI,sBAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3F,MAAM,YAAY,GAAG,MAAM,IAAA,gCAAoB,EAAC,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxF,IAAI,YAAY,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE;YACrD,MAAM,IAAI,2BAAqB,CAC7B,gEAAgE,aAAa,EAAE,CAChF,CAAC;SACH;QAED,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE;YACvB,IAAI,EAAE,GAAG,CAAC,WAAW;YACrB,EAAE,EAAE,gCAAgC,CAAC,UAAU;YAC/C,gBAAgB,EAAE,WAAW;YAC7B,QAAQ,EAAE,IAAI,sBAAS,CAAC,eAAe,CAAC;YACxC,eAAe,EAAE,EAAE;YACnB,kBAAkB,EAAE,SAAS;SAC9B,CAAC,CAAC;KACJ;IAED,6CAA6C;IAC7C,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE;QACvB,IAAI,EAAE,GAAG,CAAC,WAAW;QACrB,EAAE,EAAE,WAAW,CAAC,YAAY;QAC5B,gBAAgB,EAAE,WAAW;QAC7B,QAAQ,EAAE,WAAW,CAAC,mBAAmB;QACzC,eAAe,EAAE,EAAE;QACnB,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE;QACvB,IAAI,EAAE,WAAW,CAAC,YAAY;QAC9B,EAAE,EAAE,GAAG,CAAC,WAAW;QACnB,gBAAgB,EAAE,SAAS;QAC3B,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,EAAE;QACnB,kBAAkB,EAAE;YAClB,eAAe,EAAE,WAAW,CAAC,YAAY;YACzC,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B;KACF,CAAC,CAAC;IAEH,wCAAwC;IACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC5D,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAEhC,iCAAiC;IACjC,IAAI,eAAe,EAAE;QACnB,MAAM,IAAA,2BAAY,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KAC/B;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAe,EAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE;QACxD,SAAS,EAAE,eAAe;QAC1B,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE;QACrC,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;KACvC,CAAC;AACJ,CAAC;AA7HD,sCA6HC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sellWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/sellWithNative.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAkD,MAAM,uBAAuB,CAAC;AAGzG,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,WAAW,CAAC,CA2FtB"}
1
+ {"version":3,"file":"sellWithNative.d.ts","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/sellWithNative.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAKjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAiB,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMrF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,WAAW,CAAC,CAsGtB"}
@@ -46,6 +46,14 @@ async function sellWithNative(ctx, sellTokenDTO) {
46
46
  var _a, _b, _c;
47
47
  // Fetch and validate the sale object
48
48
  const sale = await (0, utils_1.fetchAndValidateSale)(ctx, sellTokenDTO.vaultAddress);
49
+ const { collection, category, type, additionalKey } = sale.sellingToken;
50
+ const sellingTokenCompositeKey = api_1.TokenClass.getCompositeKeyFromParts(api_1.TokenClass.INDEX_KEY, [
51
+ collection,
52
+ category,
53
+ type,
54
+ additionalKey
55
+ ]);
56
+ const sellingToken = await (0, chaincode_1.getObjectByKey)(ctx, api_1.TokenClass, sellingTokenCompositeKey);
49
57
  const nativeTokensLeftInVault = new bignumber_js_1.default(sale.nativeTokenQuantity);
50
58
  // Cap nativeTokenQuantity to the vault balance if the requested amount exceeds it
51
59
  if (nativeTokensLeftInVault.comparedTo(sellTokenDTO.nativeTokenQuantity) < 0) {
@@ -54,7 +62,7 @@ async function sellWithNative(ctx, sellTokenDTO) {
54
62
  // Calculate how many tokens need to be sold to get the requested native amount
55
63
  const callMemeTokenInResult = await (0, callMemeTokenIn_1.callMemeTokenIn)(ctx, sellTokenDTO);
56
64
  const transactionFees = callMemeTokenInResult.extraFees.transactionFees;
57
- const tokensToSell = new bignumber_js_1.default(callMemeTokenInResult.calculatedQuantity);
65
+ const tokensToSell = new bignumber_js_1.default(callMemeTokenInResult.calculatedQuantity).decimalPlaces(sellingToken.decimals);
58
66
  const nativeToken = sale.fetchNativeTokenInstanceKey();
59
67
  const memeToken = sale.fetchSellingTokenInstanceKey();
60
68
  // Enforce slippage tolerance
@@ -1 +1 @@
1
- {"version":3,"file":"sellWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/sellWithNative.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sellWithNative.js","sourceRoot":"","sources":["../../../../src/chaincode/launchpad/sellWithNative.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ const tokenClassKeyPlain = (0, utils_1.createPlainFn)({
33
33
  const tokenClassPlain = (0, utils_1.createPlainFn)({
34
34
  ...tokenClassKeyPlain(),
35
35
  description: "Generated via automated test suite.",
36
- decimals: 10,
36
+ decimals: 8,
37
37
  image: "https://app.gala.games/test-image-placeholder-url.png",
38
38
  isNonFungible: false,
39
39
  maxCapacity: new bignumber_js_1.default(100000000000000),
@@ -1 +1 @@
1
- {"version":3,"file":"launchpadgala.js","sourceRoot":"","sources":["../../../../src/chaincode/test/launchpadgala.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launchpadgala.js","sourceRoot":"","sources":["../../../../src/chaincode/test/launchpadgala.ts"],"names":[],"mappings":"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"}