diff --git a/src/config/default.json b/src/config/default.json index 13faddc83..daf7bf1db 100644 --- a/src/config/default.json +++ b/src/config/default.json @@ -118,10 +118,8 @@ "pause": 200000000, "resume": 200000000, "setFeePercents": 200000000, + "setupFeesCollector": 10000000, "setMaxObservationsPerRecord": 200000000, - "setBPSwapConfig": 200000000, - "setBPRemoveConfig": 200000000, - "setBPAddConfig": 200000000, "setStateActiveNoSwaps": 200000000, "setLockingDeadlineEpoch": 200000000, "setLockingScAddress": 200000000, @@ -522,6 +520,7 @@ "BLOCKS_IN_YEAR": 5256000, "SWAP_FEE_PERCENT": 300, "SWAP_FEE_PERCENT_BASE_POINTS": 100000, + "FEES_COLLECTOR_CUT": 50000, "MAX_GAS_LIMIT": 750000000, "ISSUE_LP_TOKEN_COST": 50000000000000000, "MEX_TOKEN_ID": "MEX-27f4cd", diff --git a/src/modules/pair/pair.resolver.ts b/src/modules/pair/pair.resolver.ts index e1f0c3591..89cd6a0a7 100644 --- a/src/modules/pair/pair.resolver.ts +++ b/src/modules/pair/pair.resolver.ts @@ -478,4 +478,15 @@ export class PairResolver { await this.pairService.requireOwner(user.address); return this.transactionService.setUnlockEpoch(pairAddress, newEpoch); } + + @UseGuards(JwtOrNativeAdminGuard) + @Query(() => TransactionModel, { + description: + 'Generate transaction to set the fees collector address and fees cut percentage for a pair', + }) + async setupFeesCollector( + @Args('pairAddress') pairAddress: string, + ): Promise { + return this.transactionService.setupFeesCollector(pairAddress); + } } diff --git a/src/modules/pair/services/pair.transactions.service.ts b/src/modules/pair/services/pair.transactions.service.ts index 227023ef9..b2d8b5205 100644 --- a/src/modules/pair/services/pair.transactions.service.ts +++ b/src/modules/pair/services/pair.transactions.service.ts @@ -3,10 +3,11 @@ import { AddressValue, BigUIntValue, TypedValue, + U64Value, } from '@multiversx/sdk-core/out/smartcontracts/typesystem'; import { BytesValue } from '@multiversx/sdk-core/out/smartcontracts/typesystem/bytes'; import { Address, TokenPayment } from '@multiversx/sdk-core'; -import { mxConfig, gasConfig } from 'src/config'; +import { mxConfig, gasConfig, scAddress, constantsConfig } from 'src/config'; import { TransactionModel } from 'src/models/transaction.model'; import { AddLiquidityArgs, @@ -754,4 +755,17 @@ export class PairTransactionService { .buildTransaction() .toPlainObject(); } + + async setupFeesCollector(pairAddress: string): Promise { + const contract = await this.mxProxy.getPairSmartContract(pairAddress); + return contract.methodsExplicit + .setupFeesCollector([ + new AddressValue(Address.fromString(scAddress.feesCollector)), + new U64Value(new BigNumber(constantsConfig.FEES_COLLECTOR_CUT)), + ]) + .withGasLimit(gasConfig.pairs.admin.setupFeesCollector) + .withChainID(mxConfig.chainID) + .buildTransaction() + .toPlainObject(); + } } diff --git a/src/modules/pair/specs/pair.transactions.service.spec.ts b/src/modules/pair/specs/pair.transactions.service.spec.ts index 90b944b44..8f541a0d4 100644 --- a/src/modules/pair/specs/pair.transactions.service.spec.ts +++ b/src/modules/pair/specs/pair.transactions.service.spec.ts @@ -891,4 +891,34 @@ describe('TransactionPairService', () => { signature: undefined, }); }); + + it('should get setup fees collector transaction', async () => { + const service = module.get( + PairTransactionService, + ); + + const transaction = await service.setupFeesCollector( + Address.fromHex( + '0000000000000000000000000000000000000000000000000000000000000012', + ).bech32(), + ); + + expect(transaction).toEqual({ + nonce: 0, + value: '0', + receiver: Address.fromHex( + '0000000000000000000000000000000000000000000000000000000000000012', + ).bech32(), + sender: 'erd1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gq4hu', + gasPrice: 1000000000, + gasLimit: 10000000, + data: encodeTransactionData( + `setupFeesCollector@erd1qqqqqqqqqqqqqpgqagq2v9exkrn3wnauq3lw4xcetwsmgmwjd8ssjt4k7s@50000`, + ), + chainID: mxConfig.chainID, + version: 1, + options: undefined, + signature: undefined, + }); + }); });