I get this metaplex program log in the blockchain (metaqbxxUerdq28cj1RbbAWkYQm3ybzjb6a8bt518x1s)
How do I decode it so I can get this token data?
{
"name": {
"type": "string",
"data": "Smoking Gangster Pig"
},
"symbol": {
"type": "string",
"data": "SGP"
},
"uri": {
"type": "string",
"data": "https://ipfs.io/ipfs/QmX1KSVVxKwL3fFKNE2vbfovcnaK7kA7P6o9Ph6o7T9PGT"
},
"mint": {
"type": "publicKey",
"data": "BREk36PFG3BuBjVYLkg8WUecqr3ujMMFoY387aBRpump"
},
"bondingCurve": {
"type": "publicKey",
"data": "5Lj9ACuoZ3jLwFoF4X8tEXmc2WsGiUEiZBKckLGCWt7A"
},
"user": {
"type": "publicKey",
"data": "9VnmREtEWMAkAdL5xTJ1WSVYZMiwkr6q8ZfC2NLtjdJR"
}
}
At the moment I'm from this log 'Program data: G3KpTd7rY3YUUAAAAAU21va2luZyBHYW5nc3RlciBQaWcDAAAAU0dQQQwAAAGh0dHBzOi8vaXBmcy5pby9pcGZzL1FtWDFLU1ZWeEt3TDNmRktORTJ2YmZvdmNuYUs3a0E3UDZvOVBoNm83VDlQR1Sayl jIqddZ5MHb5i5554M127CJIdXepFn5OOqgc7Coz0B8boK9mw6bXgT83AhpeAbeS1DjAlCvNHpUSuosoPNpfj2BckBfcTh8yTCmA8J0eJdp/dtcJR/hMeQbZuU+qWI=' will only be able to get surface data without mint, user, bc...
{
signature: '2nRAKcDF5MsXtvezRaUCNpQMbzSNacbJyxPKdWP2AEpSZMj41QJc7scwyr6aXVfT66q4ZkgHDqFjbBXibwAtatnz',
err: null,
logs: [
'Program ComputeBudget111111111111111111111111111111 invoke [1]',
'Program ComputeBudget111111111111111111111111111111 success',
'Program ComputeBudget111111111111111111111111111111 invoke [1]',
'Program ComputeBudget111111111111111111111111111111 success',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]',
'Program log: Instruction: Create',
'Program 11111111111111111111111111111111 invoke [2]',
'Program 11111111111111111111111111111111 success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: InitializeMint2',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2780 of 163880 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program 11111111111111111111111111111111 invoke [2]',
'Program 11111111111111111111111111111111 success',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [2]',
'Program log: Create',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]',
'Program log: Instruction: GetAccountDataSize',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 141484 compute units',
'Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program 11111111111111111111111111111111 invoke [3]',
'Program 11111111111111111111111111111111 success',
'Program log: Initialize the associated token account',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]',
'Program log: Instruction: InitializeImmutableOwner',
'Program log: Please upgrade to SPL Token 2022 for immutable owner support',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 134871 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]',
'Program log: Instruction: InitializeAccount3',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 130987 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20490 of 146959 compute units',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success',
'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s invoke [2]',
'Program log: IX: Create Metadata Accounts v3',
'Program 11111111111111111111111111111111 invoke [3]',
'Program 11111111111111111111111111111111 success',
'Program log: Allocate space for the account',
'Program 11111111111111111111111111111111 invoke [3]',
'Program 11111111111111111111111111111111 success',
'Program log: Assign the account to the owning program',
'Program 11111111111111111111111111111111 invoke [3]',
'Program 11111111111111111111111111111111 success',
'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 36588 of 113018 compute units',
'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: MintTo',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4492 of 73915 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: SetAuthority',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2911 of 67276 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [2]',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P consumed 2003 of 60158 compute units',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P success',
'Program data: G3KpTd7rY3YUAAAAU21va2luZyBHYW5nc3RlciBQaWcDAAAAU0dQQwAAAGh0dHBzOi8vaXBmcy5pby9pcGZzL1FtWDFLU1ZWeEt3TDNmRktORTJ2YmZvdmNuYUs3a0E3UDZvOVBoNm83VDlQR1Sayl
jIqddZ5MHb5i5554M127CJIdXepFn5OOqgc7Coz0B8boK9mw6bXgT83AhpeAbeS1DjAlCvNHpUSuosoPNpfj2BckBfcTh8yTCmA8J0eJdp/dtcJR/hMeQbZuU+qWI=',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P consumed 118934 of 175230 compute units',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P success',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]',
'Program log: CreateIdempotent',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: GetAccountDataSize',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 50895 compute units',
'Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program 11111111111111111111111111111111 invoke [2]',
'Program 11111111111111111111111111111111 success',
'Program log: Initialize the associated token account',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: InitializeImmutableOwner',
'Program log: Please upgrade to SPL Token 2022 for immutable owner support',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 44308 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: InitializeAccount3',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 40428 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20339 of 56296 compute units',
'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]',
'Program log: Instruction: Buy',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]',
'Program log: Instruction: Transfer',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 15816 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success',
'Program 11111111111111111111111111111111 invoke [2]',
'Program 11111111111111111111111111111111 success',
'Program 11111111111111111111111111111111 invoke [2]',
'Program 11111111111111111111111111111111 success',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [2]',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P consumed 2003 of 3728 compute units',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P success',
'Program data: vdt/007mYe6ayljIqddZ5MHb5i5554M127CJIdXepFn5OOqgc7CozwC/LyAAAAAAGIvUYEERAAABfj2BckBfcTh8yTCmA8J0eJdp/dtcJR/hMeQbZuU+qWKI53ZnAAAAAABrUxwHAAAA6IQD56G+Aw
AAvy8gAAAAAOjs8JoQwAIA',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P consumed 35957 of 35957 compute units',
'Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P success'
]
}
export class LogDecode {
static decodeMetadataToken(base64: string): DecodeMetadataToken {
try {
const buffer = Buffer.from(base64, "base64");
let offset = 0;
// Helper function to safely read string
const readString = () => {
if (offset + 4 > buffer.length) {
throw new Error(`Buffer overflow at offset ${offset}`);
}
const length = buffer.readUInt32LE(offset);
offset += 4;
if (offset + length > buffer.length) {
throw new Error(
`Buffer overflow while reading string at offset ${offset}`,
);
}
const str = buffer.toString("utf8", offset, offset + length);
offset += length;
return str;
};
// Skip first 8 bytes (header/metadata)
offset += 8;
// Read name, symbol, and URI
const name = readString();
const symbol = readString();
const uri = readString();
logger.info(`Токен:\nНазвание: ${name}\nСимвол: ${symbol}\nUri: ${uri}`);
return {
name,
symbol,
uri,
};
} catch (error) {
logger.error(
`Ошибка при декодировании токена: ${(error as Error).message}`,
);
throw error;
}
}
this working decoding function was written to me by claude.