Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ groth16-solana = { version = "0.2.0" }
bytemuck = { version = "1.19.0" }
arrayvec = "0.7"
tinyvec = "1.10.0"
pinocchio-token-program = { git= "https://github.com/Lightprotocol/token", rev="fc39a485cf1b214e16a0f13fd6ddea0cd87aaa87" }
pinocchio-token-program = { git= "https://github.com/Lightprotocol/token", rev="5d2768b98075ba03dfc5d6e6dd8567ba065c84ba" }
# Math and crypto
num-bigint = "0.4.6"
tabled = "0.20"
Expand Down
2 changes: 1 addition & 1 deletion js/compressed-token/src/v3/actions/mint-to-compressed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export async function mintToCompressed(
mintAuthority: mintInfo.mint.mintAuthority,
freezeAuthority: mintInfo.mint.freezeAuthority,
splMint: mintInfo.mintContext!.splMint,
splMintInitialized: mintInfo.mintContext!.splMintInitialized,
cmintDecompressed: mintInfo.mintContext!.cmintDecompressed,
version: mintInfo.mintContext!.version,
metadata: mintInfo.tokenMetadata
? {
Expand Down
2 changes: 1 addition & 1 deletion js/compressed-token/src/v3/actions/mint-to.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export async function mintTo(
mintAuthority: mintInfo.mint.mintAuthority,
freezeAuthority: mintInfo.mint.freezeAuthority,
splMint: mintInfo.mintContext!.splMint,
splMintInitialized: mintInfo.mintContext!.splMintInitialized,
cmintDecompressed: mintInfo.mintContext!.cmintDecompressed,
version: mintInfo.mintContext!.version,
metadata: mintInfo.tokenMetadata
? {
Expand Down
2 changes: 1 addition & 1 deletion js/compressed-token/src/v3/instructions/create-mint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export function encodeCreateMintInstructionData(
decimals: params.decimals,
metadata: {
version: TokenDataVersion.ShaFlat,
splMintInitialized: false,
cmintDecompressed: false,
mint: splMintPda,
},
mintAuthority: params.mintAuthority,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ function encodeCompressedMintToInstructionData(
decimals: params.mintData.decimals,
metadata: {
version: params.mintData.version,
splMintInitialized: params.mintData.splMintInitialized,
cmintDecompressed: params.mintData.cmintDecompressed,
mint: params.mintData.splMint,
},
mintAuthority: params.mintData.mintAuthority,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export function createMintToInterfaceInstruction(
mintAuthority: mintInterface.mint.mintAuthority,
freezeAuthority: mintInterface.mint.freezeAuthority,
splMint: mintInterface.mintContext.splMint,
splMintInitialized: mintInterface.mintContext.splMintInitialized,
cmintDecompressed: mintInterface.mintContext.cmintDecompressed,
version: mintInterface.mintContext.version,
metadata: mintInterface.tokenMetadata
? {
Expand Down
2 changes: 1 addition & 1 deletion js/compressed-token/src/v3/instructions/mint-to.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function encodeMintToCTokenInstructionData(
decimals: params.mintData.decimals,
metadata: {
version: params.mintData.version,
splMintInitialized: params.mintData.splMintInitialized,
cmintDecompressed: params.mintData.cmintDecompressed,
mint: params.mintData.splMint,
},
mintAuthority: params.mintData.mintAuthority,
Expand Down
3 changes: 1 addition & 2 deletions js/compressed-token/src/v3/instructions/update-metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,7 @@ function encodeUpdateMetadataInstructionData(
decimals: mintInterface.mint.decimals,
metadata: {
version: mintInterface.mintContext!.version,
splMintInitialized:
mintInterface.mintContext!.splMintInitialized,
cmintDecompressed: mintInterface.mintContext!.cmintDecompressed,
mint: mintInterface.mintContext!.splMint,
},
mintAuthority: mintInterface.mint.mintAuthority,
Expand Down
4 changes: 2 additions & 2 deletions js/compressed-token/src/v3/instructions/update-mint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ function encodeUpdateMintInstructionData(
decimals: params.mintInterface.mint.decimals,
metadata: {
version: params.mintInterface.mintContext!.version,
splMintInitialized:
params.mintInterface.mintContext!.splMintInitialized,
cmintDecompressed:
params.mintInterface.mintContext!.cmintDecompressed,
mint: params.mintInterface.mintContext!.splMint,
},
mintAuthority: params.mintInterface.mint.mintAuthority,
Expand Down
42 changes: 33 additions & 9 deletions js/compressed-token/src/v3/layout/layout-mint-action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ export const RemoveMetadataKeyActionLayout = struct([
u8('idempotent'),
]);

export const DecompressMintActionLayout = struct([
u8('cmintBump'),
u8('rentPayment'),
u32('writeTopUp'),
]);

export const CompressAndCloseCMintActionLayout = struct([u8('idempotent')]);

export const ActionLayout = rustEnum([
MintToCompressedActionLayout.replicate('mintToCompressed'),
UpdateAuthorityLayout.replicate('updateMintAuthority'),
Expand All @@ -71,6 +79,8 @@ export const ActionLayout = rustEnum([
UpdateMetadataFieldActionLayout.replicate('updateMetadataField'),
UpdateMetadataAuthorityActionLayout.replicate('updateMetadataAuthority'),
RemoveMetadataKeyActionLayout.replicate('removeMetadataKey'),
DecompressMintActionLayout.replicate('decompressMint'),
CompressAndCloseCMintActionLayout.replicate('compressAndCloseCMint'),
]);

export const CompressedProofLayout = struct([
Expand Down Expand Up @@ -133,7 +143,7 @@ export const ExtensionInstructionDataLayout = rustEnum([

export const CompressedMintMetadataLayout = struct([
u8('version'),
bool('splMintInitialized'),
bool('cmintDecompressed'),
publicKey('mint'),
]);

Expand All @@ -158,7 +168,7 @@ export const MintActionCompressedInstructionDataLayout = struct([
vec(ActionLayout, 'actions'),
option(CompressedProofLayout, 'proof'),
option(CpiContextLayout, 'cpiContext'),
CompressedMintInstructionDataLayout.replicate('mint'),
option(CompressedMintInstructionDataLayout, 'mint'),
]);

export interface ValidityProof {
Expand Down Expand Up @@ -208,6 +218,16 @@ export interface RemoveMetadataKeyAction {
idempotent: number;
}

export interface DecompressMintAction {
cmintBump: number;
rentPayment: number;
writeTopUp: number;
}

export interface CompressAndCloseCMintAction {
idempotent: number;
}

export type Action =
| { mintToCompressed: MintToCompressedAction }
| { updateMintAuthority: UpdateAuthority }
Expand All @@ -216,7 +236,9 @@ export type Action =
| { mintToCToken: MintToCTokenAction }
| { updateMetadataField: UpdateMetadataFieldAction }
| { updateMetadataAuthority: UpdateMetadataAuthorityAction }
| { removeMetadataKey: RemoveMetadataKeyAction };
| { removeMetadataKey: RemoveMetadataKeyAction }
| { decompressMint: DecompressMintAction }
| { compressAndCloseCMint: CompressAndCloseCMintAction };

export interface CpiContext {
setContext: boolean;
Expand Down Expand Up @@ -254,7 +276,7 @@ export type ExtensionInstructionData = {

export interface CompressedMintMetadata {
version: number;
splMintInitialized: boolean;
cmintDecompressed: boolean;
mint: PublicKey;
}

Expand All @@ -279,7 +301,7 @@ export interface MintActionCompressedInstructionData {
actions: Action[];
proof: ValidityProof | null;
cpiContext: CpiContext | null;
mint: CompressedMintInstructionData;
mint: CompressedMintInstructionData | null;
}

/**
Expand All @@ -294,10 +316,12 @@ export function encodeMintActionInstructionData(
// Convert bigint fields to BN for Borsh encoding
const encodableData = {
...data,
mint: {
...data.mint,
supply: bn(data.mint.supply.toString()),
},
mint: data.mint
? {
...data.mint,
supply: bn(data.mint.supply.toString()),
}
: null,
actions: data.actions.map(action => {
// Handle MintToCompressed action with recipients
if ('mintToCompressed' in action && action.mintToCompressed) {
Expand Down
16 changes: 8 additions & 8 deletions js/compressed-token/src/v3/layout/layout-mint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ export interface BaseMint {
export interface MintContext {
/** Protocol version for upgradability */
version: number;
/** Whether the associated SPL mint is initialized */
splMintInitialized: boolean;
/** Whether the compressed mint is decompressed to a CMint Solana account */
cmintDecompressed: boolean;
/** PDA of the associated SPL mint */
splMint: PublicKey;
}
Expand Down Expand Up @@ -91,14 +91,14 @@ export interface CompressedMint {
/** MintContext as stored by the program */
export interface RawMintContext {
version: number;
splMintInitialized: number; // bool as u8
cmintDecompressed: number; // bool as u8
splMint: PublicKey;
}

/** Buffer layout for de/serializing MintContext */
export const MintContextLayout = struct<RawMintContext>([
u8('version'),
u8('splMintInitialized'),
u8('cmintDecompressed'),
publicKey('splMint'),
]);

Expand Down Expand Up @@ -231,7 +231,7 @@ export function deserializeMint(data: Buffer | Uint8Array): CompressedMint {

const mintContext: MintContext = {
version: rawContext.version,
splMintInitialized: rawContext.splMintInitialized !== 0,
cmintDecompressed: rawContext.cmintDecompressed !== 0,
splMint: rawContext.splMint,
};

Expand Down Expand Up @@ -275,7 +275,7 @@ export function serializeMint(mint: CompressedMint): Buffer {
MintContextLayout.encode(
{
version: mint.mintContext.version,
splMintInitialized: mint.mintContext.splMintInitialized ? 1 : 0,
cmintDecompressed: mint.mintContext.cmintDecompressed ? 1 : 0,
splMint: mint.mintContext.splMint,
},
contextBuffer,
Expand Down Expand Up @@ -441,7 +441,7 @@ export interface MintInstructionData {
mintAuthority: PublicKey | null;
freezeAuthority: PublicKey | null;
splMint: PublicKey;
splMintInitialized: boolean;
cmintDecompressed: boolean;
version: number;
metadata?: MintMetadataField;
}
Expand Down Expand Up @@ -483,7 +483,7 @@ export function toMintInstructionData(
mintAuthority: base.mintAuthority,
freezeAuthority: base.freezeAuthority,
splMint: mintContext.splMint,
splMintInitialized: mintContext.splMintInitialized,
cmintDecompressed: mintContext.cmintDecompressed,
version: mintContext.version,
metadata,
};
Expand Down
Loading
Loading