Skip to content

Commit

Permalink
Drift settle PNL
Browse files Browse the repository at this point in the history
  • Loading branch information
jpe7s committed Oct 11, 2024
1 parent 251593d commit b453135
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ public static void main(final String[] args) throws InterruptedException {
""", signature);

delay(minMillisBetweenRequests, beginRequest);
beginRequest = System.currentTimeMillis();
beginRequest = delay(minMillisBetweenRequests, beginRequest);
final var transactionFuture = rpcClient.getTransaction(signature);
final var transaction = transactionFuture.join();
final var txData = transaction.data();
Expand All @@ -63,6 +62,7 @@ public static void main(final String[] args) throws InterruptedException {

for (final var addLiquidityIxParam : addLiquidityIxParams) {
final var blockTime = transaction.blockTime();
final var strategyParams = addLiquidityIxParam.strategyParameters();
System.out.format("""
Found add-liquidity-by-strategy with the following params at %s:
AmountX: %d
Expand All @@ -82,10 +82,11 @@ public static void main(final String[] args) throws InterruptedException {
addLiquidityIxParam.amountY(),
addLiquidityIxParam.activeId(),
addLiquidityIxParam.maxActiveBinSlippage(),
addLiquidityIxParam.strategyParameters().minBinId(),
addLiquidityIxParam.strategyParameters().maxBinId(),
addLiquidityIxParam.strategyParameters().strategyType(),
transaction);
strategyParams.minBinId(),
strategyParams.maxBinId(),
strategyParams.strategyType(),
transaction
);
}

System.out.format("Contained %d add liquidity instructions.%n", addLiquidityIxParams.size());
Expand All @@ -95,20 +96,23 @@ public static void main(final String[] args) throws InterruptedException {
}
}

delay(minMillisBetweenRequests, beginRequest);
beginRequest = System.currentTimeMillis();
beginRequest = delay(minMillisBetweenRequests, beginRequest);
signaturesFuture = rpcClient.getSignaturesForAddressBefore(
meteoraProgramId, pageLimit, signatures.getLast().signature()
);
}
}
}

private static void delay(final long minMillisBetweenRequests, final long beginRequest) throws InterruptedException {
final long millisBetweenRequests = System.currentTimeMillis() - beginRequest;
private static long delay(final long minMillisBetweenRequests, final long beginRequest) throws InterruptedException {
final long now = System.currentTimeMillis();
final long millisBetweenRequests = now - beginRequest;
final long sleepMillis = minMillisBetweenRequests - millisBetweenRequests;
if (sleepMillis > 0) {
Thread.sleep(sleepMillis);
return System.currentTimeMillis();
} else {
return now;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package software.sava.anchor.programs.drift;

import software.sava.anchor.programs.drift.anchor.types.OrderParams;
import software.sava.anchor.programs.drift.anchor.types.SettlePnlMode;
import software.sava.anchor.programs.drift.anchor.types.User;
import software.sava.core.accounts.ProgramDerivedAddress;
import software.sava.core.accounts.PublicKey;
Expand Down Expand Up @@ -147,6 +148,19 @@ default Instruction withdraw(final PublicKey user,
return withdraw(user, authority, userTokenAccountKey, tokenProgramKey, marketIndex, amount, false);
}

Instruction settlePnl(final int marketIndex);

Instruction settlePnl(final PublicKey user,
final PublicKey authority,
final int marketIndex);

Instruction settlePnl(final short[] marketIndexes, final SettlePnlMode mode);

Instruction settlePnl(final PublicKey user,
final PublicKey authority,
final short[] marketIndexes,
final SettlePnlMode mode);

Instruction placeOrder(final OrderParams orderParams);

Instruction placeOrder(final OrderParams orderParams, final PublicKey authority, final PublicKey user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import software.sava.anchor.programs.drift.anchor.DriftProgram;
import software.sava.anchor.programs.drift.anchor.types.OrderParams;
import software.sava.anchor.programs.drift.anchor.types.SettlePnlMode;
import software.sava.anchor.programs.drift.anchor.types.User;
import software.sava.core.accounts.PublicKey;
import software.sava.core.accounts.SolanaAccounts;
Expand All @@ -23,13 +24,15 @@ final class DriftProgramClientImpl implements DriftProgramClient {
private final DriftAccounts accounts;
private final PublicKey authority;
private final PublicKey user;
private final PublicKey quoteSpotMarketVaultAccountKey;

DriftProgramClientImpl(final NativeProgramAccountClient nativeProgramAccountClient,
final DriftAccounts accounts) {
this.solanaAccounts = nativeProgramAccountClient.solanaAccounts();
this.accounts = accounts;
this.authority = nativeProgramAccountClient.ownerPublicKey();
this.user = DriftPDAs.deriveMainUserAccount(accounts, authority).publicKey();
this.quoteSpotMarketVaultAccountKey = deriveSpotMarketVaultAccount(accounts, accounts.defaultQuoteMarket().marketIndex()).publicKey();
}

@Override
Expand Down Expand Up @@ -142,6 +145,46 @@ public Instruction withdraw(final PublicKey user,
);
}

@Override
public Instruction settlePnl(final int marketIndex) {
return settlePnl(user, authority(), marketIndex);
}

@Override
public Instruction settlePnl(final PublicKey user,
final PublicKey authority,
final int marketIndex) {
return DriftProgram.settlePnl(
accounts.invokedDriftProgram(),
accounts.stateKey(),
user,
authority,
quoteSpotMarketVaultAccountKey,
marketIndex
);
}

@Override
public Instruction settlePnl(final short[] marketIndexes, final SettlePnlMode mode) {
return settlePnl(user, authority(), marketIndexes, mode);
}

@Override
public Instruction settlePnl(final PublicKey user,
final PublicKey authority,
final short[] marketIndexes,
final SettlePnlMode mode) {
return DriftProgram.settleMultiplePnls(
accounts.invokedDriftProgram(),
accounts.stateKey(),
user,
authority,
quoteSpotMarketVaultAccountKey,
marketIndexes,
mode
);
}

@Override
public Instruction placeOrder(final OrderParams orderParams) {
return placeOrder(orderParams, authority, user);
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ dependencyResolutionManagement {
}
versionCatalogs {
libs {
from("software.sava:solana-version-catalog:0.2.31")
from("software.sava:solana-version-catalog:0.2.35")
}
}
}

0 comments on commit b453135

Please sign in to comment.