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
6 changes: 6 additions & 0 deletions .changeset/late-carrots-brake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@solanafm/explorer-kit": patch
"@solanafm/explorer-kit-idls": patch
---

release: 1.1.4
4 changes: 3 additions & 1 deletion packages/explorerkit-idls/src/idls/IdlRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,9 @@ export const getProgramIdl = async (

return null;
} catch (error) {
return null;
throw new Error(`Error fetching IDL for ${programHash}`, {
cause: error,
});
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export type DataWithMappedType = {
* @returns An object containing the mapped account keys and their corresponding names.
*/
export const mapMultisigAccountKeysToName = (
accountKeys?: IdlAccountName[],
accountKeys?: string[],
idlIxAccounts?: IdlInstructionAccount[],
accountName?: string
): DataWithMappedType => {
Expand Down
49 changes: 29 additions & 20 deletions packages/explorerkit-translator/src/parsers/v2/account/anchor-v1.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,36 @@ export const createAnchorV1AccountParser: (idlItem: IdlItem) => AccountParserInt
const accountLayouts = new BorshAccountsCoder(idl);

const parseAccount = (accountData: string, maptypes?: boolean): ParserOutput => {
const bufferData = Buffer.from(accountData, "base64");
const accountDiscriminator = bufferData.subarray(0, 8);
const accountName = Array.from(idl.accounts ?? []).find((key) =>
accountLayouts.accountDiscriminator(key.name).equals(accountDiscriminator)
);

let decodedAccountData = accountLayouts.decodeAny(bufferData);

if (decodedAccountData) {
const filteredIdlType = idl.types?.filter((type) => type.name === accountName?.name) ?? [];

if (maptypes) {
if (filteredIdlType[0]?.type.kind === "struct" && filteredIdlType[0]?.type.fields)
decodedAccountData = mapNewAnchorDataTypeToName(decodedAccountData, filteredIdlType[0]?.type.fields);
try {
const bufferData = Buffer.from(accountData, "base64");
const accountDiscriminator = bufferData.subarray(0, 8);
const accountName = Array.from(idl.accounts ?? []).find((key) =>
accountLayouts.accountDiscriminator(key.name).equals(accountDiscriminator)
);

let decodedAccountData = accountLayouts.decodeAny(bufferData);

if (decodedAccountData) {
const filteredIdlType = idl.types?.filter((type) => type.name === accountName?.name) ?? [];

if (maptypes) {
if (filteredIdlType[0]?.type.kind === "struct" && filteredIdlType[0]?.type.fields)
decodedAccountData = mapNewAnchorDataTypeToName(decodedAccountData, filteredIdlType[0]?.type.fields);
}

return {
name: accountName?.name as string,
data: convertBNToNumberInObject(decodedAccountData),
type: ParserType.ACCOUNT,
};
}

return {
name: accountName?.name as string,
data: convertBNToNumberInObject(decodedAccountData),
type: ParserType.ACCOUNT,
};
} catch (error) {
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}

return null;
Expand Down
32 changes: 21 additions & 11 deletions packages/explorerkit-translator/src/parsers/v2/account/anchor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,30 @@ export const createAnchorAccountParser: (idlItem: IdlItem) => AccountParserInter
const accountName = Array.from(idl.accounts ?? []).find((key) =>
BorshAccountsCoder.accountDiscriminator(key.name).equals(accountDiscriminator)
);
let decodedAccountData = accountLayouts.decodeAny(bufferData);

if (decodedAccountData) {
const filteredIdlAccount = idl.accounts?.filter((account) => account.name === accountName?.name) ?? [];
try {
let decodedAccountData = accountLayouts.decodeAny(bufferData);

if (maptypes) {
decodedAccountData = mapDataTypeToName(decodedAccountData, filteredIdlAccount[0]?.type.fields);
}
if (decodedAccountData) {
const filteredIdlAccount = idl.accounts?.filter((account) => account.name === accountName?.name) ?? [];

if (maptypes) {
decodedAccountData = mapDataTypeToName(decodedAccountData, filteredIdlAccount[0]?.type.fields);
}

return {
name: accountName?.name as string,
data: convertBNToNumberInObject(decodedAccountData),
type: ParserType.ACCOUNT,
};
return {
name: accountName?.name as string,
data: convertBNToNumberInObject(decodedAccountData),
type: ParserType.ACCOUNT,
};
}
} catch (error) {
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,12 @@ export const createShankConfigAccount: (idlItem: IdlItem, accountHash: string) =

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
19 changes: 14 additions & 5 deletions packages/explorerkit-translator/src/parsers/v2/account/metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,12 @@ export const createShankMetaplexAccountParser: (

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down Expand Up @@ -98,8 +102,6 @@ const sanitySerializeMetadataAccount = (
if (decodedAccountData && decodedAccountData[0]) {
return decodedAccountData[0];
}

return null;
} catch (error) {
if (error) {
const typeLayouts = new KinobiTreeGenerator(idl).constructLayout(KinobiTreeGeneratorType.TYPES);
Expand Down Expand Up @@ -213,8 +215,15 @@ const sanitySerializeMetadataAccount = (
}
}

return null;
throw new Error(`Error parsing metadata account data - ${accountDataBuffer.toString("base64")}`, {
cause: {
decoderError: error,
programId: idl.metadata.address ?? "",
},
});
}

return null;
};

function tryReadType(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export const createShankNameServiceAccount: (idlItem: IdlItem) => AccountParserI
let accountSerializer: FMShankSerializer | undefined = undefined;
if (dataBuffer.byteLength < ACCOUNT_MIN_SIZE) {
// account data is not within the range of the account we are trying to deserialize
return null;
throw new Error(`Account data length is less than the minimum size required for this account`);
}

// TODO: PLEASE ABSTRACT THIS IN THE FUTURE!!!!
Expand Down Expand Up @@ -53,8 +53,12 @@ export const createShankNameServiceAccount: (idlItem: IdlItem) => AccountParserI

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,12 @@ export const createShankPhoenixAccount: (idlItem: IdlItem) => AccountParserInter

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,12 @@ export const createShankAccountParser: (

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
37 changes: 25 additions & 12 deletions packages/explorerkit-translator/src/parsers/v2/account/token-v2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,12 @@ export const createShankTokenV2Account: (idlItem: IdlItem) => AccountParserInter

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down Expand Up @@ -230,19 +234,28 @@ export const parseAccountWithoutExtensions = (
mapTypes?: boolean
) => {
if (accountSerializer) {
const decodedAccountData = accountSerializer.serializer?.deserialize(dataBuffer);
try {
const decodedAccountData = accountSerializer.serializer?.deserialize(dataBuffer);

if (decodedAccountData && decodedAccountData[0]) {
const filteredIdlAccount =
idl.accounts?.filter(
(account) => account.name.toLowerCase() === accountSerializer?.instructionName.toLowerCase()
) ?? [];
if (decodedAccountData && decodedAccountData[0]) {
const filteredIdlAccount =
idl.accounts?.filter(
(account) => account.name.toLowerCase() === accountSerializer?.instructionName.toLowerCase()
) ?? [];

if (mapTypes) {
decodedAccountData[0] = mapDataTypeToName(decodedAccountData[0], filteredIdlAccount[0]?.type.fields);
}
if (mapTypes) {
decodedAccountData[0] = mapDataTypeToName(decodedAccountData[0], filteredIdlAccount[0]?.type.fields);
}

return decodedAccountData[0];
return decodedAccountData[0];
}
} catch (error) {
throw new Error(`Error parsing account data - ${dataBuffer.toString("base64")}`, {
cause: {
decoderError: error,
programId: idl.metadata.address ?? "",
},
});
}
}

Expand Down
10 changes: 7 additions & 3 deletions packages/explorerkit-translator/src/parsers/v2/account/token.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const createShankTokenAccount: (idlItem: IdlItem) => AccountParserInterfa

if (dataBuffer.byteLength < MINT_MAX_SIZE && dataBuffer.byteLength > MULTISIG_MAX_SIZE) {
// account data is not within the range of the account we are trying to deserialize
return null;
throw new Error(`Account data length is less than the minimum size required for this account`);
}

// checks if the account data length is within the length of the account we are trying to deserialize
Expand Down Expand Up @@ -87,8 +87,12 @@ export const createShankTokenAccount: (idlItem: IdlItem) => AccountParserInterfa

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing account data - ${accountData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,12 @@ export const createAnchorErrorParser: (idlItem: IdlItem) => ErrorParserInterface
};
}
} catch (parseErr) {
return null;
throw new Error(`Error parsing error data - ${unparsedErrorCode}`, {
cause: {
decoderError: parseErr,
programId: idlItem.programId,
},
});
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ export const createShankErrorParser: (idlItem: IdlItem) => ErrorParserInterface
};
}
} catch (parseErr) {
return null;
throw new Error(`Error parsing error data - ${unparsedErrorCode}`, {
cause: {
decoderError: parseErr,
programId: idlItem.programId,
},
});
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ export const createAnchorEventParser: (idlItem: IdlItem) => EventParserInterface

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing event data - ${eventData}`, {
cause: {
decoderError: error,
programId: idlItem.programId,
},
});
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,11 @@ export const createBubblegumEventParser: (_: IdlItem) => EventParserInterface =

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing event data - ${eventData}`, {
cause: {
decoderError: error,
},
});
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,12 @@ export const createSPLCompEventParser: (_: IdlItem) => EventParserInterface = (_

return null;
} catch (error) {
console.error(error);
return null;
throw new Error(`Error parsing event data - ${eventData}`, {
cause: {
decoderError: error,
programId: _.programId,
},
});
}
};

Expand Down
Loading
Loading