[체인링크 & AWS] Pulling data from AWS On-chain

드림보이즈·2023년 5월 17일
post-thumbnail

스마트 컨트랙트 <-> DON <-> AWS

이 강의는

AWS에 있는 데이터를 불러오는 스마트 컨트랙트를 작성하여,

오프체인 데이터를 온체인에 불러오는 실습 목적이다.

강의 영상 : https://www.youtube.com/watch?v=DynD2NzB6cQ


0. 서론

체인링크 기능들을 통해 오프체인 데이터를 온체인으로 불러올 수 있다고 한다.

구조를 쉽게 나타내면

스마트 컨트랙트 <---> (오라클 컨트랙트) <--->DON <---->오프체인

이다.

결국 우리는 '스마트 컨트랙트'만 제대로 작성하면 되는 것이다.
(물론 체인링크가 제공하는 양식에 맞게)

예를 들어,

'AWS에서 오늘 서울 날씨 불러와'

라는 컨트랙트를 작성하고 실행하면 (체인링크 양식에 맞게)

  1. 이 코드가 DON에 전달되고

  2. 각각 DON 노드들은 외부 데이터들을 받아와 각각 계산을 하고

  3. DON 노드들 끼리 합의, 확정 지어서

  4. 컨트랙트로 보내는

과정이다.

이번 실습에서는

컨트랙트 + DON에 AWS(외부 데이터) 요청하는 코드

를 작성해야 한다.

쉽게 생각하면

DON이 서버고, AWS에 GET 요청을 날리는 코드를 JS로 작성

한다고 생각하면 쉽다.

결국 해커톤 수준에서는, 우리가 DON도 컨트롤 할 수 있기 때문에

'어떤 데이터든 오프체인에서 받아올 수 있다'

고 한 것 같다.

(물론 여러 노드를 쓰고, 신뢰받는 data provider들을 사용하는 건 아니니 서비스 수준까진 안되겠지만)






1. 실습

0. 사전 준비

  • node --version으로 18이상인지 체크
  • metamask 계정 준비
  • rpc-url 준비 (infura, alchemy 등 회원가입 해놓기)

1. AWS 회원가입

링크 : https://aws.amazon.com/ko/free/?trk=fa2d6ba3-df80-4d24-a453-bf30ad163af9&sc_channel=ps&ef_id=CjwKCAjw04yjBhApEiwAJcvNoaQLp70nvSm0I49CzSrS-b-wb4esOuoXwFqkTwseYCr74tuJbk7L5RoCmMgQAvD_BwE:G:s&s_kwcid=AL!4422!3!563761819834!e!!g!!aws!15286221779!129400439466&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

2. Currency Exchange API 구독하기

링크 : https://aws.amazon.com/marketplace/pp/prodview-eufl3hymozfae?sr=0-1&ref_=beagle&applicationId=AWSMPContessa#offers

우리가 불러올 데이터는 '오늘의 환율'이다.

무료 구독하자.

3. git clone

링크 : https://github.com/smartcontractkit/functions-aws-currency-data

터미널을 열고

git clone https://github.com/smartcontractkit/functions-aws-currency-data.git

복붙하고 vscode를 실행하고,

npm i

까지 세팅하자.

4. 환경 변수 세팅

먼저 AWS 내 계정의 ACCESS_KEY, SECRET_KEY가 필요하다.

이를 확인하기 위해

링크 : https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html

따라가자.

1번의 링크를 타고 들어가서

사용자 클릭

사용자 이름 아래 파란 글씨 클릭, 없다면 사용자 추가
(여기서 뭔가 꼬인 것 같다... 사용자 추가시에 어떤 세팅을 해줘야만 하는건가?)

보안 자격 증명 - 액세스 키

에서 만들고 csv파일로 다운 받으면 된다.

준비가 되었다면 vscode로 가자.

먼저

npx env-enc set-pw

로 비번 세팅 해놓고

npx env-enc set

으로 '암호화된 env'파일을 작성할 것이다.

.env.example을 참고해

SEPOLIA_RPC_URL
PRIVATE_KEY
SECRET_KEY
ACCESS_KEY
//이 밑은 .env.example 에 있는 문자열 그대로 넣자
DATASET_ID
REVISION_ID
ASSET_ID


세팅을 해주자.

성공적으로 .env.enc 파일이 생성되고 환경변수를 적었다.

먼저 컨트랙트를 살펴보면

executeRequest

DON에 JS 코드 및 인자들을 담아 전달하는 함수다.

우리의 경우

aws에 환율 요청하는 JS코드를 작성하고 이를 DON에 전달하는 것이다.

'야 이 코드에 적힌대로 진행시켜'

하는 것이다.

fulfillRequest

가 DON으로 부터 응답을 받는다고 생각하면 된다.

그럼 그 JS 코드가 무엇이냐

Functions-request-source-API-example.js

이거다. 마치 http get 요청을 보내는 거 같지 않은가? 맞다.

이 코드를 컨트랙트에 넣어서

컨트랙트 >>> DON에 전달하고 DON은 이 코드를 실행시키고 값을 받는 따까리일 뿐

config는 설정 파일일 뿐이다. 아까 입력한 환경변수, 데이터 타입 등을 세팅해놨다.

이제 끝났다.

npx hardhat functions-simulate

으로 로컬 hardhat 테스트넷에 컨트랙트를 배포하고 실행하고 결과값을 받는
시뮬레이션을 한다.

성공적으로 작동한다면

1 gbd를 달러로 나타낸 오늘의 gbd/usd 126을 받아야 하는데


나는 403 에러가 떴다.

  • 구독도 했고
  • access, secret key도 제대로 입력했다.

api가 잘못 됬나 확인하려고 바로 위 코드 콘솔 url을 찍어보니 맞는 거 같다.
대체 무엇이 문제인가?

이거 안되면 aws 못 쓰는디..?

profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글