Skip to content

Commit

Permalink
wire glam fund methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
jpe7s committed Aug 20, 2024
1 parent db93593 commit 326348c
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,5 @@ default PublicKey treasuryPublicKey() {

ProgramDerivedAddress openFundsPDA();

ProgramDerivedAddress shareClassPDA(long shareId);
ProgramDerivedAddress shareClassPDA(final long shareId);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package software.sava.anchor.programs.glam;

import software.sava.anchor.programs.glam.anchor.types.FundAccount;
import software.sava.anchor.programs.glam.anchor.types.FundModel;
import software.sava.anchor.programs.glam.anchor.types.ShareClassModel;
import software.sava.core.accounts.PublicKey;
import software.sava.core.accounts.SolanaAccounts;
import software.sava.core.tx.Instruction;
Expand Down Expand Up @@ -66,4 +68,26 @@ static Map<PublicKey, FundAccount> filterFundAccounts(final List<AccountInfo<Fun
Instruction initializeAndDelegateStake(final FundPDA stakeAccountPDA,
final PublicKey validatorVoteAccount,
final long lamports);

Instruction initializeFund(final FundModel fundModel);

Instruction addShareClass(final ShareClassModel shareClassModel);

Instruction updateFund(final FundModel fundModel);

Instruction closeFund();

Instruction closeShareClass(final PublicKey shareClassKey, final int shareClassId);

Instruction subscribe(final PublicKey shareClassKey,
final PublicKey shareClassATAKey,
final PublicKey assetKey,
final PublicKey treasuryAssetATAKey,
final PublicKey assetATAKey,
final long amount);

Instruction redeem(final PublicKey shareClassKey,
final PublicKey shareClassATAKey,
final long amount,
final boolean inKind);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package software.sava.anchor.programs.glam;

import software.sava.anchor.programs.glam.anchor.GlamProgram;
import software.sava.anchor.programs.glam.anchor.types.FundModel;
import software.sava.anchor.programs.glam.anchor.types.ShareClassModel;
import software.sava.core.accounts.AccountWithSeed;
import software.sava.core.accounts.ProgramDerivedAddress;
import software.sava.core.accounts.PublicKey;
Expand Down Expand Up @@ -548,4 +550,138 @@ public List<Instruction> closeStakeAccounts(final Collection<AccountInfo<StakeAc
public Instruction withdrawStakeAccount(final StakeAccount stakeAccount, final long lamports) {
throw new UnsupportedOperationException("TODO: withdrawStakeAccount with specific amount of lamports");
}

@Override
public Instruction initializeFund(final FundModel fundModel) {
return GlamProgram.initializeFund(
invokedProgram,
glamFundAccounts.fundPublicKey(),
glamFundAccounts.openFundsPDA().publicKey(),
glamFundAccounts.treasuryPublicKey(),
manager.publicKey(),
solanaAccounts.systemProgram(),
fundModel
);
}

@Override
public Instruction addShareClass(final ShareClassModel shareClassModel) {
return GlamProgram.addShareClass(
invokedProgram,
glamFundAccounts.fundPublicKey(),
glamFundAccounts.openFundsPDA().publicKey(),
glamFundAccounts.treasuryPublicKey(),
manager.publicKey(),
solanaAccounts.systemProgram(),
solanaAccounts.tokenProgram(),
shareClassModel
);
}

@Override
public Instruction updateFund(final FundModel fundModel) {
return GlamProgram.updateFund(
invokedProgram,
glamFundAccounts.fundPublicKey(),
manager.publicKey(),
fundModel
);
}

@Override
public Instruction closeFund() {
return GlamProgram.closeFund(
invokedProgram,
glamFundAccounts.fundPublicKey(),
glamFundAccounts.openFundsPDA().publicKey(),
glamFundAccounts.treasuryPublicKey(),
manager.publicKey(),
solanaAccounts.systemProgram()
);
}

@Override
public Instruction closeShareClass(final PublicKey shareClassKey, final int shareClassId) {
return GlamProgram.closeShareClass(
invokedProgram,
glamFundAccounts.fundPublicKey(),
shareClassKey,
manager.publicKey(),
solanaAccounts.token2022Program(),
shareClassId
);
}

@Override
public Instruction subscribe(final PublicKey shareClassKey,
final PublicKey shareClassATAKey,
final PublicKey assetKey,
final PublicKey treasuryAssetATAKey,
final PublicKey assetATAKey,
final long amount) {
return GlamProgram.subscribe(
invokedProgram,
glamFundAccounts.fundPublicKey(),
glamFundAccounts.treasuryPublicKey(),
shareClassKey,
shareClassATAKey,
assetKey,
treasuryAssetATAKey,
assetATAKey,
manager.publicKey(),
solanaAccounts.systemProgram(),
solanaAccounts.associatedTokenAccountProgram(),
solanaAccounts.tokenProgram(),
solanaAccounts.token2022Program(),
amount,
true
);
}

@Override
public Instruction redeem(final PublicKey shareClassKey,
final PublicKey shareClassATAKey,
final long amount,
final boolean inKind) {
return GlamProgram.redeem(
invokedProgram,
glamFundAccounts.fundPublicKey(),
shareClassKey,
shareClassATAKey,
manager.publicKey(),
glamFundAccounts.treasuryPublicKey(),
solanaAccounts.systemProgram(),
solanaAccounts.tokenProgram(),
solanaAccounts.token2022Program(),
amount,
inKind,
true
);
}

public Instruction jupiterSwap(final PublicKey inputTreasuryAtaKey,
final PublicKey inputSignerAtaKey,
final PublicKey outputSignerAtaKey,
final PublicKey outputTreasuryAtaKey,
final PublicKey inputMintKey,
final PublicKey outputMintKey,
final long amount,
final byte[] data) {
return GlamProgram.jupiterSwap(
invokedProgram,
glamFundAccounts.fundPublicKey(),
glamFundAccounts.treasuryPublicKey(),
inputTreasuryAtaKey, inputSignerAtaKey,
outputSignerAtaKey, outputTreasuryAtaKey,
inputMintKey, outputMintKey,
manager.publicKey(),
solanaAccounts.systemProgram(),
null,
solanaAccounts.associatedTokenAccountProgram(),
solanaAccounts.tokenProgram(),
solanaAccounts.token2022Program(),
amount,
data
);
}
}

0 comments on commit 326348c

Please sign in to comment.