Skip to content

Commit

Permalink
add sdk integration
Browse files Browse the repository at this point in the history
  • Loading branch information
solonk8 committed Apr 12, 2024
1 parent 5df0354 commit 92c7347
Show file tree
Hide file tree
Showing 5 changed files with 293 additions and 10 deletions.
5 changes: 3 additions & 2 deletions sdk/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export * from './idl/mmm';
export * from './constants';
export * from './pda';
export * from './idl/mmm';
export * from './metadataProvider';
export * from './mmmClient';
export * from './pda';
export * from './price';
export * from './transferHookProvider';
86 changes: 80 additions & 6 deletions sdk/src/mmmClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,18 @@ import {
getMMMPoolPDA,
getMMMSellStatePDA,
getTokenRecordPDA,
M2_PROGRAM,
} from './pda';
import {
doesTokenExtensionExist,
MetadataProvider,
MintStateWithAddress,
RpcMetadataProvider,
} from './metadataProvider';
import {
LibreplexRoyaltyProvider,
TransferHookProvider,
} from './transferHookProvider';

export const getEmptyAllowLists = (num: number) => {
const emptyAllowList = {
Expand Down Expand Up @@ -68,6 +73,10 @@ export class MMMClient {
mint: PublicKey,
conn: Connection,
) => Promise<MetadataProvider>;
private readonly transferHookProviderGenerator: (
mint: PublicKey,
conn: Connection,
) => Promise<TransferHookProvider>;

poolData: (anchor.IdlAccounts<Mmm>['pool'] & { pool: PublicKey }) | undefined;

Expand All @@ -78,6 +87,10 @@ export class MMMClient {
mint: PublicKey,
conn: Connection,
) => Promise<MetadataProvider>,
transferHookProviderGenerator?: (
mint: PublicKey,
conn: Connection,
) => Promise<TransferHookProvider>,
) {
this.conn = conn;
this.provider = new anchor.AnchorProvider(this.conn, dummyKeypair, {
Expand All @@ -89,6 +102,8 @@ export class MMMClient {
this.mpl = new Metaplex(conn);
this.metadataProviderGenerator =
metadataProviderGenerator ?? RpcMetadataProvider.loadFromRpc;
this.transferHookProviderGenerator =
transferHookProviderGenerator ?? LibreplexRoyaltyProvider.loadFromRpc;
}

signTx(insArr: TransactionInstruction[]): Transaction {
Expand Down Expand Up @@ -255,11 +270,16 @@ export class MMMClient {
assetTokenAccount: PublicKey,
allowlistAuxAccount?: PublicKey,
metadataProvider?: MetadataProvider,
transferHookProvider?: TransferHookProvider,
): Promise<TransactionInstruction> {
if (!this.poolData) throw MMMClient.ErrPoolDataEmpty;
const mintContext =
metadataProvider ??
(await this.metadataProviderGenerator(assetMint, this.conn));
const transferHookContext =
transferHookProvider ??
(await this.transferHookProviderGenerator(assetMint, this.conn));

let { key: buysideSolEscrowAccount } = getMMMBuysideSolEscrowPDA(
MMMProgramID,
this.poolData.pool,
Expand Down Expand Up @@ -401,10 +421,27 @@ export class MMMClient {
}
}

// Add m2 and shared escrow account here as remaining accounts for shared escrow pool.
if (!this.poolData.sharedEscrowAccount.equals(PublicKey.default)) {
builder = builder.remainingAccounts([
{
pubkey: M2_PROGRAM,
isSigner: false,
isWritable: false,
},
{
pubkey: this.poolData.sharedEscrowAccount,
isWritable: true,
isSigner: false,
},
]);
}

if (
this.poolData.buysideCreatorRoyaltyBp > 0 ||
ocpMintState ||
tokenStandard === TokenStandard.ProgrammableNonFungible
(this.poolData.buysideCreatorRoyaltyBp > 0 ||
ocpMintState ||
tokenStandard === TokenStandard.ProgrammableNonFungible) &&
!transferHookContext.isTransferHookProgramAllowed()
) {
const creators = mintContext.creators;
if (creators.length > 0) {
Expand All @@ -417,6 +454,12 @@ export class MMMClient {
);
}
}

if (transferHookContext.isTransferHookProgramAllowed()) {
builder = builder.remainingAccounts(
await transferHookContext.getRemainingAccounts(true),
);
}
return await builder.instruction();
}

Expand All @@ -426,6 +469,7 @@ export class MMMClient {
assetMint: PublicKey,
allowlistAuxAccount?: PublicKey,
metadataProvider?: MetadataProvider,
transferHookProvider?: TransferHookProvider,
): Promise<TransactionInstruction> {
if (!this.poolData) throw MMMClient.ErrPoolDataEmpty;
let { key: buysideSolEscrowAccount } = getMMMBuysideSolEscrowPDA(
Expand All @@ -436,6 +480,9 @@ export class MMMClient {
const mintContext =
metadataProvider ??
(await this.metadataProviderGenerator(assetMint, this.conn));
const transferHookContext =
transferHookProvider ??
(await this.transferHookProviderGenerator(assetMint, this.conn));

const { key: sellState } = getMMMSellStatePDA(
MMMProgramID,
Expand Down Expand Up @@ -572,9 +619,10 @@ export class MMMClient {
}

if (
args.buysideCreatorRoyaltyBp > 0 ||
ocpMintState ||
tokenStandard === TokenStandard.ProgrammableNonFungible
(args.buysideCreatorRoyaltyBp > 0 ||
ocpMintState ||
tokenStandard === TokenStandard.ProgrammableNonFungible) &&
!transferHookContext.isTransferHookProgramAllowed()
) {
const creators = mintContext.creators;
if (creators.length > 0) {
Expand All @@ -587,6 +635,12 @@ export class MMMClient {
);
}
}

if (transferHookContext.isTransferHookProgramAllowed()) {
builder = builder.remainingAccounts(
await transferHookContext.getRemainingAccounts(true),
);
}
return await builder.instruction();
}

Expand All @@ -595,12 +649,16 @@ export class MMMClient {
assetMint: PublicKey,
allowlistAuxAccount?: PublicKey,
metadataProvider?: MetadataProvider,
transferHookProvider?: TransferHookProvider,
): Promise<TransactionInstruction> {
if (!this.poolData) throw MMMClient.ErrPoolDataEmpty;
const assetMetadata = this.mpl.nfts().pdas().metadata({ mint: assetMint });
const mintContext =
metadataProvider ??
(await this.metadataProviderGenerator(assetMint, this.conn));
const transferHookContext =
transferHookProvider ??
(await this.transferHookProviderGenerator(assetMint, this.conn));

const { key: sellState } = getMMMSellStatePDA(
MMMProgramID,
Expand Down Expand Up @@ -708,6 +766,12 @@ export class MMMClient {
});
}
}

if (transferHookContext.isTransferHookProgramAllowed()) {
builder = builder.remainingAccounts(
await transferHookContext.getRemainingAccounts(false),
);
}
return await builder.instruction();
}

Expand All @@ -716,11 +780,15 @@ export class MMMClient {
assetMint: PublicKey,
allowlistAuxAccount?: PublicKey,
metadataProvider?: MetadataProvider,
transferHookProvider?: TransferHookProvider,
): Promise<TransactionInstruction> {
if (!this.poolData) throw MMMClient.ErrPoolDataEmpty;
const mintContext =
metadataProvider ??
(await this.metadataProviderGenerator(assetMint, this.conn));
const transferHookContext =
transferHookProvider ??
(await this.transferHookProviderGenerator(assetMint, this.conn));

const { key: sellState } = getMMMSellStatePDA(
MMMProgramID,
Expand Down Expand Up @@ -837,6 +905,12 @@ export class MMMClient {
});
}
}

if (transferHookContext.isTransferHookProgramAllowed()) {
builder = builder.remainingAccounts(
await transferHookContext.getRemainingAccounts(false),
);
}
return await builder.instruction();
}

Expand Down
Loading

0 comments on commit 92c7347

Please sign in to comment.