Solana DEV #02: 지갑의 모든 Deposit 트랜잭션 검색
6735 단어 solanablockchaintypescriptwebdev
처음에는 필터링과 함께
getProgramAccounts
를 사용하여 가져온 다른 데이터와 비슷하다고 생각했습니다. 그러나 그런 식으로 작동하지 않습니다.서명 및 트랜잭션 가져오기
한 주소의 모든 입금 트랜잭션을 가져오려면 메소드
getSignaturesForAddress
를 사용하여 해당 주소의 모든 서명을 가져와야 합니다.const signatureInfos = await connection.getSignaturesForAddress(vaultAddress);
그런 다음 트랜잭션 서명만 가져오도록 정보를 매핑합니다.
const signatures = signatureInfos.map(sig => sig.signature);
const transactions = await connection.getParsedTransactions(signatures);
이 접근 방식에는 매우 큰 문제가 있습니다. 일반적으로 수행하는 것과 같이 가져온 서명을 필터링할 수 없습니다
getProgramAccounts
. 그리고 그런 식으로 귀하의 주소에는 동전을 받고 보내는 것 외에 다른 지갑 상호 작용이 있기 때문에 귀하의 주소에서 대량의 트랜잭션을 가져옵니다. 더 효율적으로 만들기 위해 반환 데이터에서 성공 서명을 필터링하려고 합니다.const filteredSignatureInfos = signatureInfos.filter(sig => !sig.err && !sig.memo);
그러나 불행하게도 지갑에 약 300개 이상의 트랜잭션이 있는 경우 RPC는 속도 제한이 있으므로 가져오기를 허용하지 않습니다. 다른 더 나은 접근 방식이 있는지 모르겠지만 이것이 내가 찾은 것입니다.
접근 방식을 개선하는 방법은 무엇입니까?
이는 수용 가능한 답변이 아닐 수 있지만 사례를 개선할 수 있는 몇 가지 방법이 있습니다.
onAccountChange
사용). 트랜잭션 필터링
Phantom에서 유사한 결과를 표시하기 위해 가져올 수 있는 두 가지 유형의 트랜잭션이 있습니다. 기본 SOL 입금 트랜잭션과 SPL 토큰 입금 트랜잭션입니다. 위에서 했던 것처럼
getParsedTransactions
를 사용하면 이미 모든 데이터가 사람이 읽을 수 있는 언어로 변환되어 있습니다. getTransactions
를 사용하는 원시 트랜잭션은 16진수 데이터만 반환합니다. 재사용할 수 있도록 이 두 가지 방법을 작성했습니다. 모든 데이터가 이미 구문 분석되었기 때문에 매우 간단합니다.// Filter SPL token deposit transaction
isSplTokenDepositTx(tx: any): boolean {
const ixs = tx.transaction.message.instructions;
const ix: any = ixs[ixs.length - 1];
return (
ix.programId.equals(TOKEN_PROGRAM_ID) &&
(ix.parsed.type === 'transfer' || ix.parsed.type === 'transferChecked')
);
}
// Filter Native SOL deposit transaction
isSolDepositTx(tx: any): boolean {
const ix: any = tx.transaction.message.instructions[0];
return ix.programId.equals(SYSTEM_PROGRAM_ID) && ix.parsed.type === 'transfer';
}
Reference
이 문제에 관하여(Solana DEV #02: 지갑의 모든 Deposit 트랜잭션 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chungquantin/solana-dev-02-retrieve-all-deposit-transactions-of-your-wallet-39ke텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)