Skip to content

Commit

Permalink
Update saga handleAllFee
Browse files Browse the repository at this point in the history
  • Loading branch information
kuba80-02 committed Mar 4, 2025
1 parent 7efc7b9 commit bdfd62a
Showing 1 changed file with 158 additions and 156 deletions.
314 changes: 158 additions & 156 deletions src/store/sagas/positions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import { getConnection, handleRpcError } from './connection'
import { createClaimAllPositionRewardsTx } from './farms'
import { createAccount, getWallet, sleep } from './wallet'
import { closeSnackbar } from 'notistack'
import { Tick } from '@invariant-labs/sdk/lib/market'
import { ClaimAllFee, Tick } from '@invariant-labs/sdk/lib/market'

Check failure on line 49 in src/store/sagas/positions.ts

View workflow job for this annotation

GitHub Actions / lint

'"@invariant-labs/sdk/lib/market"' has no exported member named 'ClaimAllFee'. Did you mean 'ClaimFee'?
import { calculateClaimAmount } from '@invariant-labs/sdk/lib/utils'

function* handleInitPositionAndPoolWithSOL(action: PayloadAction<InitPositionData>): Generator {
Expand Down Expand Up @@ -1746,7 +1746,7 @@ export function* handleCalculateTotalUnclaimedFees() {
feeGrowthGlobalX: position.poolData.feeGrowthGlobalX,
feeGrowthGlobalY: position.poolData.feeGrowthGlobalY
})

console.log(position.tokenX)
const xValue =
+printBN(bnX, position.tokenX.decimals) *
(pricesData.data[position.tokenX.assetAddress.toString()].price ?? 0)
Expand All @@ -1764,156 +1764,158 @@ export function* handleCalculateTotalUnclaimedFees() {
}
}

// export function* handleClaimAllFees() {
// const loaderClaimAllFees = createLoaderKey()
// const loaderSigningTx = createLoaderKey()

// try {
// const connection = yield* call(getConnection)
// const networkType = yield* select(network)
// const rpc = yield* select(rpcAddress)
// const wallet = yield* call(getWallet)
// const marketProgram = yield* call(getMarketProgram, networkType, rpc, wallet as IWallet)

// const allPositionsData = yield* select(positionsWithPoolsData)
// const tokensAccounts = yield* select(accounts)

// if (allPositionsData.length === 0) {
// return
// }
// if (allPositionsData.length === 1) {
// const claimFeeAction = actions.claimFee(0)
// return yield* call(handleClaimFee, claimFeeAction)
// }

// yield* put(actions.setAllClaimLoader(true))
// yield put(
// snackbarsActions.add({
// message: 'Claiming all fees',
// variant: 'pending',
// persist: true,
// key: loaderClaimAllFees
// })
// )

// for (const position of allPositionsData) {
// const pool = allPositionsData[position.positionIndex].poolData

// if (!tokensAccounts[pool.tokenX.toString()]) {
// yield* call(createAccount, pool.tokenX)
// }
// if (!tokensAccounts[pool.tokenY.toString()]) {
// yield* call(createAccount, pool.tokenY)
// }
// }

// const formattedPositions = allPositionsData.map(position => ({
// pair: new Pair(position.poolData.tokenX, position.poolData.tokenY, {
// fee: position.poolData.fee,
// tickSpacing: position.poolData.tickSpacing
// }),
// index: position.positionIndex,
// lowerTickIndex: position.lowerTickIndex,
// upperTickIndex: position.upperTickIndex
// }))

// const txs = yield* call([marketProgram, marketProgram.claimAllFeesTxs], {
// owner: wallet.publicKey,
// positions: formattedPositions
// } as ClaimAllFee)

// yield put(snackbarsActions.add({ ...SIGNING_SNACKBAR_CONFIG, key: loaderSigningTx }))

// for (const { tx, additionalSigner } of txs) {
// const blockhash = yield* call([connection, connection.getLatestBlockhash])
// tx.recentBlockhash = blockhash.blockhash
// tx.feePayer = wallet.publicKey

// let signedTx: Transaction
// if (additionalSigner) {
// const partiallySignedTx = yield* call([wallet, wallet.signTransaction], tx)
// partiallySignedTx.partialSign(additionalSigner)
// signedTx = partiallySignedTx
// } else {
// signedTx = yield* call([wallet, wallet.signTransaction], tx)
// }

// const txid = yield* call(sendAndConfirmRawTransaction, connection, signedTx.serialize(), {
// skipPreflight: false
// })

// if (!txid.length) {
// yield put(
// snackbarsActions.add({
// message: 'Failed to claim some fees. Please try again.',
// variant: 'error',
// persist: false,
// txid
// })
// )
// }
// }

// yield put(
// snackbarsActions.add({
// message: 'All fees claimed successfully.',
// variant: 'success',
// persist: false
// })
// )

// for (const position of formattedPositions) {
// yield put(actions.getSinglePosition(position.index))
// }

// closeSnackbar(loaderSigningTx)
// yield put(snackbarsActions.remove(loaderSigningTx))
// closeSnackbar(loaderClaimAllFees)
// yield put(snackbarsActions.remove(loaderClaimAllFees))

// yield put(actions.getPositionsList())
// yield put(actions.calculateTotalUnclaimedFees())

// yield* put(actions.setAllClaimLoader(false))
// } catch (error) {
// yield* put(actions.setAllClaimLoader(false))

// console.log(error)

// closeSnackbar(loaderClaimAllFees)
// yield put(snackbarsActions.remove(loaderClaimAllFees))
// closeSnackbar(loaderSigningTx)
// yield put(snackbarsActions.remove(loaderSigningTx))

// if (error instanceof TransactionExpiredTimeoutError) {
// yield put(
// snackbarsActions.add({
// message: TIMEOUT_ERROR_MESSAGE,
// variant: 'info',
// persist: true,
// txid: error.signature
// })
// )
// yield put(connectionActions.setTimeoutError(true))
// } else {
// yield put(
// snackbarsActions.add({
// message: 'Failed to claim fees. Please try again.',
// variant: 'error',
// persist: false
// })
// )
// }

// try {
// if (error instanceof Error) {
// yield* call(handleRpcError, error.message)
// }
// } catch (rpcError) {
// console.error('RPC error handling failed:', rpcError)
// }
// }
// }
export function* handleClaimAllFees() {
const loaderClaimAllFees = createLoaderKey()
const loaderSigningTx = createLoaderKey()

try {
const connection = yield* call(getConnection)
const networkType = yield* select(network)
const rpc = yield* select(rpcAddress)
const wallet = yield* call(getWallet)
const marketProgram = yield* call(getMarketProgram, networkType, rpc, wallet as IWallet)

const allPositionsData = yield* select(positionsWithPoolsData)
const tokensAccounts = yield* select(accounts)

if (allPositionsData.length === 0) {
return
}
if (allPositionsData.length === 1) {
const claimFeeAction = actions.claimFee(0)
return yield* call(handleClaimFee, claimFeeAction)
}

yield* put(actions.setAllClaimLoader(true))
yield put(
snackbarsActions.add({
message: 'Claiming all fees',
variant: 'pending',
persist: true,
key: loaderClaimAllFees
})
)

for (const position of allPositionsData) {
const pool = allPositionsData[position.positionIndex].poolData

if (!tokensAccounts[pool.tokenX.toString()]) {
yield* call(createAccount, pool.tokenX)
}
if (!tokensAccounts[pool.tokenY.toString()]) {
yield* call(createAccount, pool.tokenY)
}
}

const formattedPositions = allPositionsData.map(position => ({
pair: new Pair(position.poolData.tokenX, position.poolData.tokenY, {
fee: position.poolData.fee,
tickSpacing: position.poolData.tickSpacing
}),
index: position.positionIndex,
lowerTickIndex: position.lowerTickIndex,
upperTickIndex: position.upperTickIndex
}))

const txs = yield* call([marketProgram, marketProgram.claimAllFeesTxs], {

Check failure on line 1820 in src/store/sagas/positions.ts

View workflow job for this annotation

GitHub Actions / lint

Property 'claimAllFeesTxs' does not exist on type 'Market'.
owner: wallet.publicKey,
positions: formattedPositions
} as ClaimAllFee)

yield put(snackbarsActions.add({ ...SIGNING_SNACKBAR_CONFIG, key: loaderSigningTx }))

for (const { tx, additionalSigner } of txs) {
const blockhash = yield* call([connection, connection.getLatestBlockhash])
tx.recentBlockhash = blockhash.blockhash
tx.feePayer = wallet.publicKey

let signedTx: Transaction
if (additionalSigner) {
const partiallySignedTx = yield* call([wallet, wallet.signTransaction], tx)
partiallySignedTx.partialSign(additionalSigner)
signedTx = partiallySignedTx
} else {
signedTx = yield* call([wallet, wallet.signTransaction], tx)
}

const txid = yield* call(sendAndConfirmRawTransaction, connection, signedTx.serialize(), {
skipPreflight: false
})

if (!txid.length) {
console.log('to sie wykonuje')
yield put(
snackbarsActions.add({
message: 'Failed to claim some fees. Please try again.',
variant: 'error',
persist: false,
txid
})
)
}
}

yield put(
snackbarsActions.add({
message: 'All fees claimed successfully.',
variant: 'success',
persist: false
})
)

for (const position of formattedPositions) {
yield put(actions.getSinglePosition(position.index))
}

closeSnackbar(loaderSigningTx)
yield put(snackbarsActions.remove(loaderSigningTx))
closeSnackbar(loaderClaimAllFees)
yield put(snackbarsActions.remove(loaderClaimAllFees))

yield put(actions.getPositionsList())
yield put(actions.calculateTotalUnclaimedFees())

yield* put(actions.setAllClaimLoader(false))
} catch (error) {
yield* put(actions.setAllClaimLoader(false))

console.log(error)

closeSnackbar(loaderClaimAllFees)
yield put(snackbarsActions.remove(loaderClaimAllFees))
closeSnackbar(loaderSigningTx)
yield put(snackbarsActions.remove(loaderSigningTx))

if (error instanceof TransactionExpiredTimeoutError) {
yield put(
snackbarsActions.add({
message: TIMEOUT_ERROR_MESSAGE,
variant: 'info',
persist: true,
txid: error.signature
})
)
yield put(connectionActions.setTimeoutError(true))
} else {
console.log(error)
yield put(
snackbarsActions.add({
message: 'Failed to claim fees. Please try again.',
variant: 'error',
persist: false
})
)
}

try {
if (error instanceof Error) {
yield* call(handleRpcError, error.message)
}
} catch (rpcError) {
console.error('RPC error handling failed:', rpcError)
}
}
}

export function* initPositionHandler(): Generator {
yield* takeEvery(actions.initPosition, handleInitPosition)
Expand All @@ -1932,9 +1934,9 @@ export function* unclaimedFeesHandler(): Generator {
yield* takeEvery(actions.calculateTotalUnclaimedFees, handleCalculateTotalUnclaimedFees)
}

// export function* claimAllFeeHandler(): Generator {
// yield* takeEvery(actions.claimAllFee, handleClaimAllFees)
// }
export function* claimAllFeeHandler(): Generator {
yield* takeEvery(actions.claimAllFee, handleClaimAllFees)
}

export function* closePositionHandler(): Generator {
yield* takeEvery(actions.closePosition, handleClosePosition)
Expand All @@ -1953,7 +1955,7 @@ export function* positionsSaga(): Generator {
getCurrentPlotTicksHandler,
getPositionsListHandler,
unclaimedFeesHandler,
// claimAllFeeHandler,
claimAllFeeHandler,
claimFeeHandler,
closePositionHandler,
getSinglePositionHandler,
Expand Down

0 comments on commit bdfd62a

Please sign in to comment.