Tech at Klaytn
6 min readNov 9, 2022

--

들어가며

오라클은 스마트 컨트랙트에 외부 데이터를 사용할 수 있게 해주는 도구로, 블록체인 생태계의 필수적인 일부분입니다. 오라클을 통해 외부 데이터를 사용할 수 없다면, 스마트 컨트랙트는 말그대로 외부 시스템으로 부터 고립됩니다. 스마트 컨트랙트의 잠재성이 매우 낮아지게 되겠지요.

이 아티클에서는 오라클에 대한 간략한 설명과, 오라클이 dApp 개발 시 어떻게 스마트 컨트랙트에서 사용되는지를 살펴 보겠습니다.

탈중앙 오라클

오라클에는 탈중앙화 오라클과 중앙화된 오라클이 있습니다. 탈중앙화 오라클은 단일 오류 지점을 방지해준다는 장점이 있습니다. 데이터를 이용하는 스마트 컨트랙트가 하나의 정보원에만 의존하지 않는다는 뜻입니다. P2P 네트워크 내에서 오프체인 데이터에 대해 합의하는 다수의 참여자들이 탈중앙화 오라클 서비스를 구성합니다.

오라클 작동 방식

오라클 작동 방식을 간략하게 살펴보겠습니다. 사용자가 오라클 컨트랙트에 데이터 요청을 보내면, 컨트랙트는 요청 정보를 포함한 로그 이벤트를 생성합니다. 로그를 구독해 놓고 있던 노드들은 데이터를 받아 컨트랙트로 다시 보냅니다.

Klaytn Chainlink Oracle 컨트랙트로 예를 들어 보겠습니다.. 체인링크의 가격 피드를 사용해 볼 것입니다.

Klaytn에서 가격 피드 사용하기

체인링크 가격 피드는 다양한 고품질 데이터를 체인링크 오라클 네트워크에 결합하여 컨트랙트에 주입합니다. 그리고 이 컨트랙트에서 결과가 합산됩니다. 데이터의 품질과 무결성을 중시하는 DeFi 프로토콜들을 위해 체인링크는 검증된 솔루션을 제공합니다. 이로써 낮은 품질 데이터가 발생시키는 잠재적인 문제들을 방지할 수 있습니다.

이제 스마트 컨트랙트에 체인링크 가격 피드를 어떻게 추가하는지 알아보겠습니다.

요구사항:

메인넷과의 연동은 아직 개발 중에 있는 관계로, 이 튜토리얼에서도 체인링크 가격 피드를 Klaytn 테스트넷(바오밥)에서 사용해보겠습니다.

아래에서는 Klaytn 테스트넷에서 LINK/KLAY 의 최신 가격을 가져오는 예시를 살펴보겠습니다.

방법

  1. 컨트랙트 주소 복사

가격 피드 Contract Addresses로 이동하여 Klaytn 로고를 클릭합니다.

LINK/KLAY 페어의 데이터를 가져올 것이기 때문에 아래의 주소를 복사합니다.

0xf49f81b3d2F2a79b706621FA2D5934136352140c

2. Remix IDE 열기

Price Consumer contract”를 클릭하면 컨트랙트를 테스트해볼 수 있는 Remix IDE로 이동합니다. Klaytn Plugin이 설치된 것을 확인해주세요.

3. 컨트랙트 컴파일 & 배포하기

Klaytn 가격 피드 컨트랙트 주소를 constructor()에 붙여넣기 합니다. 함수는 아래와 같이 생겼습니다. 가장 기본적인 기능만을 테스트할 것이기 때문에 int price를 제외한 부분은 주석으로 처리되어 있습니다.

function getLatestPrice() public view returns (int) {         
(
/*uint80 roundID*/,
int price,
/*uint startedAt*/,
/*uint timeStamp*/,
/*uint80 answeredInRound*/
) = priceFeed.latestRoundData();
return price
}

앞서 본 토큰 페어 테이블에서 decimal, 즉 소수점 정보를 볼 수 있습니다. LINK/KLAY의 경우 아래와 같이 18입니다.

반환되는 소수점 자릿수가 매우 길어 불편하기 때문에 price 값을 보기 좋게 변경시켜 보겠습니다.

return price / 1e18;

컨트랙트 내 반환 값을 위와 같이 변경한 후 “Compile”을 클릭해주세요.

컴파일이 완료되고 나면 이제 컨트랙트를 배포해야 합니다.

좌측 바의 Klaytn 아이콘을 클릭하여 Klaytn 플러그인을 사용해주세요. ENVIRONMENT는 “Baobab”을 선택하고, 개인키나 키스토어를 통해 계정을 추가합니다. 컨트랙트 배포에 KLAY가 사용되므로 Faucet에서 테스트 KLAY를 꼭 받아주세요.

이제 “Deploy” 버튼을 클릭하겠습니다.

Klaytn 바오밥 네트워크에 컨트랙트가 잘 안착되었는지 아래와 같이 KlaytnfinderKlaytnscope에서 확인해볼 수 있습니다.

4. getLatestPrice 함수 호출하기

“Deployed Contracts” 아래 방금 배포한 Price Consumer 컨트랙트가 보일 것입니다. 클릭하면 사용 가능한 함수들이 보입니다. 우리가 배포한 컨트랙트에는 아래와 같이 getLatestPrice 함수가 있습니다.

함수 버튼을 클릭하여 호출합니다.

이제 결과에 LINK/KLAY 가격이 보입니다. 현 시점 41입니다. 이는 1 LINK를 위해 41 KLAY가 필요하다는 뜻입니다.

결론

오라클은 외부 데이터를 필요로 하는 스마트 컨트랙트에 없어서는 안 될 기능입니다. 이 튜토리얼에서는 체인링크 오라클의 LINK/KLAY 주소를 사용해 가격 데이터를 가져오는 함수를 호출해 보았습니다.

더 자세한 내용은 Klaytn DocsChainlink Developer Docs를 참고하세요. 질문이 있다면 Klaytn Forum을 방문해주세요. 다음 아티클에서는 VRF 사용법을 알아보겠습니다.

--

--