@shyft-to/solana-transaction-parser
Version:
Tool for parsing arbitrary Solana transactions with IDL/custom parsers
77 lines (71 loc) • 3.52 kB
TypeScript
/// <reference types="node" />
import { AccountMeta, CompiledInstruction, LoadedAddresses, Message, MessageCompiledInstruction, ParsedInstruction as SolanaParsedInstruction, ParsedTransactionWithMeta, PartiallyDecodedInstruction, PublicKey, TransactionInstruction, VersionedMessage, VersionedTransactionResponse } from "@solana/web3.js";
import { LogContext } from "./interfaces";
export declare function hexToBuffer(data: string): Buffer;
/**
* Parse transaction message and extract account metas
* @param message transaction message
* @returns parsed accounts metas
*/
export declare function parseTransactionAccounts<T extends Message | VersionedMessage>(message: T, loadedAddresses?: T extends VersionedMessage ? LoadedAddresses | undefined : undefined): AccountMeta[];
/**
* Converts compiled instruction into common TransactionInstruction
* @param compiledInstruction
* @param parsedAccounts account meta, result of {@link parseTransactionAccounts}
* @returns TransactionInstruction
*/
export declare function compiledInstructionToInstruction<Ix extends CompiledInstruction | MessageCompiledInstruction>(compiledInstruction: Ix, parsedAccounts: AccountMeta[]): TransactionInstruction;
export declare function parsedInstructionToInstruction(parsedInstruction: PartiallyDecodedInstruction, accountMeta: AccountMeta[]): TransactionInstruction;
/**
* Converts transaction response with CPI into artifical transaction that contains all instructions from tx and CPI
* @param transaction transactionResponse to convert from
* @returns Transaction object
*/
export declare function flattenTransactionResponse(transaction: VersionedTransactionResponse): (TransactionInstruction & {
parentProgramId?: PublicKey;
})[];
export declare function flattenParsedTransaction(transaction: ParsedTransactionWithMeta): ((SolanaParsedInstruction | PartiallyDecodedInstruction) & {
parentProgramId?: PublicKey;
})[];
/**
* Parses transaction logs and provides additional context such as
* - programId that generated the message
* - call id of instruction, that generated the message
* - call depth of instruction
* - data messages, log messages and error messages
* @param logs logs from TransactionResponse.meta.logs
* @returns parsed logs with call depth and additional context
*/
export declare function parseLogs(logs: string[]): LogContext[];
/** Python script to extract native solana logs
*
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
import os
regex = r"ic_msg!\((\s|.)*?,\s*?\"(?P<log>.*?)\""
def print_logs(data):
matches = re.finditer(regex, data)
for m in matches:
print(m.group('log'))
def open_files_in_directory(directory):
for root, dirs, files in os.walk(directory):
for filename in files:
if '.rs' not in filename:
continue
file_path = os.path.join(root, filename)
try:
with open(file_path, 'r', encoding='utf-8') as file:
print(f'Opened file: {file_path}')
content = file.read()
print_logs(content)
except Exception as e:
print(f'Could not open file {file_path}: {e}')
for d in dirs:
if d == '.' or d == '..':
continue
open_files_in_directory(os.path.join(root, d))
if __name__ == "__main__":
open_files_in_directory('INPUT DIR HERE')
*/
//# sourceMappingURL=helpers.d.ts.map