Kaia에서 실시간 가격 피드 구축하기
2024년 7월, Pyth 네트워크와 Kaia의 통합이 완료되었습니다. 이를 통해 Kaia 개발자들은 애플리케이션 내에서 Pyth의 가격 피드(Price Feeds)에 접근할 수 있게 되어, 오라클(Oracle) 통합을 처음부터 직접 구축해야 하는 번거로움을 덜 수 있었습니다.
아울러 Kaia 공식 문서(Kaia Docs)에서는 이에 대한 구현 튜토리얼인 Kaia에서 Pyth를 사용하여 실시간 가격을 가져오기를 제공하고 있습니다.
본 아티클은 기술적인 배경 지식을 다룹니다. '풀(Pull)' 아키텍처가 무엇이며, 전통적인 오라클 모델과는 어떻게 다른지, 그리고 통합에 필요한 구성 요소는 무엇인지 설명합니다.
"푸시(Push)" 방식과 "풀(Pull)" 방식
전통적인 오라클 아키텍처는 푸시(Push) 기반 업데이트 방식에 의존합니다. 가격 정보는 정해진 일정에 따라, 혹은 특정 임계값(threshold)에 도달하여 업데이트가 트리거될 때 온체인(On-chain)에 기록됩니다. 이 방식은 시장 상황이 안정적일 때는 제대로 작동하지만, 변동성이 큰 상황에서는 한계를 드러냅니다. 애플리케이션이 사용하지도 않을 업데이트 때문에 비용을 지불해야 하거나, 더 심각한 경우 가격의 급변동시 오래된 데이터(Stale data)를 기반으로 작업하게 될 수도 있습니다.
반면 Pyth는 풀(Pull) 모델로 작동합니다. 애플리케이션은 새로운 가격 데이터가 필요할 때만 해당 데이터를 가져오고, 그 업데이트 내역을 트랜잭션에 포함시킵니다.
Kaia 개발자에게 이것이 중요한 이유
실행 시점의 정확성 (Execution-time accuracy)가격 정보가 컨트랙트 실행 직전에 업데이트되므로, 트레이딩 작업이나 청산(Liquidation)에 필요한 정밀한 데이터를 제공합니다.
사용량 기반 비용 (Usage-based costs)가스비(Gas fees)는 사용 여부와 관계없이 정해진 일정에 따라 부과되는 것이 아니라, 실제로 업데이트를 제출할 때만 발생합니다.
저지연 설계 (Low-latency design)Pyth 가격 업데이트는 대략 400ms(0.4초) 간격으로 제공되므로(Kaia 문서 기준), 지연 시간에 민감한 유스 케이스를 효과적으로 지원합니다.
아키텍처: 작동 원리
크게는 온체인 컨슈머 컨트랙트(Consumer contract)와 업데이트를 가져오는 오프체인(Off-chain) 클라이언트라는 두 가지 부분으로 구성됩니다.
온체인 컨트랙트 (Solidity)Kaia 네트워크에 PriceConsumer 컨트랙트를 배포합니다. 튜토리얼에서는 시연을 위해 Kairos 테스트넷을 사용합니다. 여러분의 컨트랙트는 업데이트 페이로드(Payload)를 Pyth 컨트랙트로 전달한 다음, 현재 가격을 읽어옵니다. 예제 구현에서는 USD/IDR 피드를 사용합니다.
오프체인 클라이언트 (Hermes)이 아키텍처는 풀(Pull) 기반이므로, 오프체인 프로세스가 최신 가격 데이터를 가져와야 합니다. 스크립트는 Hermes 웹 서비스와 통신하여 업데이트 데이터를 가져오고, Pyth 컨트랙트에 온체인 트랜잭션을 제출한 뒤, 업데이트된 가격을 읽어옵니다.
시작하기
자세한 명령어, 설정, 샘플 코드 등은 Kaia 공식 문서의 튜토리얼인 Kaia에서 Pyth를 사용하여 실시간 가격을 가져오기를 참고하시기 바랍니다.
이 튜토리얼에는 다음 내용이 포함되어 있습니다.
- PriceConsumer 컨트랙트를 위한 전체 코드 스니펫
- 보안 자격 증명(Credential) 관리를 포함한 Hardhat 설정 가이드
- 업데이트를 가져오고 가격을 읽기 위한 TypeScript 상호작용 스크립트
컨트랙트 주소, 피드 식별자(ID), 추가 도구 정보는 Pyth 네트워크 개요 문서를 참조해 주세요.