-
[Intern] Moralis api로 조회 안되는 데이터들 조회되도록 구현 (토큰의 양)Intern/Project 2024. 12. 8. 21:57
✏ 근무 내용
- moralis api로 조회 안되는 데이터들 조회되도록 구현 (토큰의 양)
⭐근무 결과
- hash, chain 정보로 sender, destination 정보 불러오는 url
[ 체인 정보 안넣고 해시값만 넣었을 때 데이터 조회되게 하기 ]
⭕moralis api로 조회 되는 데이터들
: 체인 종류(원래 조회x) /출발,도착 체인 주소값(정확x) / 출발 시간
❌moralis api로 조회 안되는 데이터들
: 도착체인 해시값 / 도착날짜및시간 /보낸 토큰과 받는 토큰의 양 (이건 뜨긴하는데 정확도 떨어짐)
-moralis api 이용해 보낸 토큰과 받는 토큰의 양 데이터 가져오기
// 토큰 전송 정보 조회 async getTokenTransferDetails(transactionHash: string): Promise<any> { // 트랜잭션 해시를 기반으로 트랜잭션이 발생한 체인을 감지 const chain = await this.detectTransactionChain(transactionHash); try { const response = await Moralis.EvmApi.transaction.getTransactionVerbose({ transactionHash, // 입력 트랜잭션 해시 chain, // 감지된 체인 ID }); if (!response?.raw?.logs) { throw new Error("Transaction logs not found."); } // 트랜잭션 로그를 추출 const logs = response.raw.logs; // ERC-20 Transfer 이벤트에 대한 토픽 식별자 const transferTopic = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; let sentTokenAmountRaw = "0"; let receivedTokenAmountRaw = "0"; // 트랜잭션 로그를 순회하며 Transfer 이벤트를 필터링 for (const log of logs) { if (log.topic0 === transferTopic) { // 로그의 `topic1`은 전송자의 주소, `topic2`는 수신자의 주소를 나타냄 const fromAddress = `0x${log.topic1.slice(-40)}`; const toAddress = `0x${log.topic2.slice(-40)}`; // 전송자의 주소와 트랜잭션 발신자의 주소가 일치하면 보낸 토큰 양을 기록 if (fromAddress.toLowerCase() === response.raw.from_address.toLowerCase()) { sentTokenAmountRaw = BigInt(log.data).toString(); } // 수신자의 주소와 트랜잭션 수신자의 주소가 일치하면 받은 토큰 양을 기록 if (toAddress.toLowerCase() === response.raw.to_address.toLowerCase()) { receivedTokenAmountRaw = BigInt(log.data).toString(); } } } // 토큰의 소수점 자리수(USDC는 6자리)로 나눠 실제 토큰 양을 계산 const decimals = 6; const sentTokenAmount = parseInt(sentTokenAmountRaw) / 10 ** decimals; const receivedTokenAmount = parseInt(receivedTokenAmountRaw) / 10 ** decimals; // 체인 ID와 토큰 전송 정보를 반환 return { chain, sentTokenAmount: `${sentTokenAmount.toFixed(2)} USDC`, receivedTokenAmount: `${receivedTokenAmount.toFixed(2)} USDC`, }; } catch (error) { console.error("Error fetching token transfer details:", error); throw error; } }
위 코드 실행시 아래와 같이 체인 종류 정보, 보낸 토큰과 받는 토큰 양 결과 확인 가능!
{ "chain": "0x2105", "sentTokenAmount": "64076.01 USDC", "receivedTokenAmount": "64076.01 USDC" }
위 방식의 단점 : 각 세개의 체인이 조회될 때까지 서버 왔다갔다 해야하므로 효율성 떨어지므로 개선이 필요하다.
-moralis api의 한계점 및 다른 api를 찾아야 할것 같은 이유
- 받는 체인 기준이 불명확:
- Range 사이트처럼 특정 프로토콜(CCTP 등)이나 토큰 트랜스퍼 흐름에 따라 받는 데이터를 구성하려면, 수신 데이터를 단순히 "주소값"만으로 찾는 것이 아닌, 특정 계약 주소나 트랜잭션과 연결된 이벤트를 확인해야 합니다.
- Moralis API의 한계:
- Moralis API는 특정 체인에서 발생한 트랜잭션을 반환하지만, Cross-Chain과 같이 서로 연결된 송/수신 트랜잭션 데이터를 명확히 매핑하지 않습니다.
- 사진 속 데이터:
- Range는 USDC 토큰의 Cross-Chain Transfer Protocol(CCTP)을 기반으로 데이터를 시각화합니다. 여기에는 Circle이나 특정 브릿지 프로토콜을 통해 두 체인 간 연결을 매핑합니다.
- 사진 속 데이터를 구성하려면 해당 트랜잭션에서 Cross-Chain 관련 이벤트 로그를 확인해야 합니다.
🚩인사이트
다음에 할거
- 도착 체인 해시값 불러오는 방법 생각해보기 …
- 이후 5개 트랜잭션 보여주기
- Get native transactions by wallet api 이용해 Transaction 5개 불러오기
- 로그 분석해서 사용할 수 있는 정보있나 확인
반응형'Intern > Project' 카테고리의 다른 글
[Intern] Range api 트랜잭션 반환 데이터 확인 / 해시값 조회시 출발 및 도착 체인 정보 반환하도록 구현 (0) 2024.12.11 [Intern] Moralis api 데이터 검증 / 대체 api 찾기 (0) 2024.12.09 [Intern] 해시값 조회 안되는 체인 데이터 조회되도록 구현 / Moralis api 데이터 log분석 (0) 2024.12.08 [Intern] 로컬 401 에러 해결 / hash로 sender, destination 정보 불러오기 / moralis api 연결 (0) 2024.12.08 [Intern] Moralis API document 호출 확인 / 맥 환경 AWS 배포 (0) 2024.12.07