
체인링크 함수들을 사용하여 컨트랙트를 배포, 다른 테스트 넷에서 사용하고 싶다면
화이트 리스트에 등록되어야 한다. 해당 페이지로 이동하여 테스트넷의 지갑주소를 입력하자.
max 24 hours 안에 등록이 된단다.

현재 베타버전에서는 '바닐라 자바스크립트'만 사용 가능하고,
여러 노드를 사용하는게 아니라 하나의 노드에 하나의 요청(?)만 가능하다고 한다.

컨트랙트 >>> DON // 으로 코드를 보내고, DON의 각 노드가 독립적으로 코드를 실행한다.

이 강의에서는 시뮬레이션만 할건데, 실제로 돌렸다가 에러가 있으면 LINK 토큰이 필요하기 때문이다. (코드에 에러가 있어도 노드는 모르고 계속 컴퓨팅을 하기 때문예)
이제 실행한 코드들의 결과를 취합 >> 합의 >> 결과를 컨트랙트에 보낸다.

더 쉽게 도식화하면 이렇다.




자바스크립트로 된 예시 코드들을 공부하고 싶거나, 참고하고 싶다면

여기서 복붙해서 쓰면 된다. (이번 강의에서도 여기서 복붙해서 사용한다)
https://www.usechainlinkfunctions.com/posts/openai-prompt
먼저 깃허브에서 클론한다.
https://github.com/smartcontractkit/functions-hardhat-starter-kit

env.enc - .env 비스무리인데 암호화해서 보임, 깃허브에 올리면 보안 안 좋지만 .env 보단 나
set-pw로 비번 만들어주고
set으로 세 가지 환경변수를 만든다
ETHEREUM_SEPOLIA_RPC_URL // rpc url
PRIVATE_KEY // 화이트 리스트 설정된 메타마스크 지갑 개인키
OPEN_AI_API_KEY // openai api key
https://platform.openai.com/account/api-keys
여기서 api ke를 발급받으면 된다.
(만약 429 에러가 계속 난다면, 챗 gpt 유료 버전을 사용하거나, 트래픽이 줄 때 까지 기다리자)

세팅을 하면 다음과 같이 .env.enc 파일이 생성된다.
(decrypt 된 원본 값들을 보고 싶다면 npx env-enc view 입력하면 된다)
이 프로젝트에서 중요한 파일은 3가지

여기서 source.js 파일은 없을 것이다. 파일을 생성하고,
아래 링크에서 코드를 복붙해오자.
https://www.usechainlinkfunctions.com/posts/openai-prompt
이제 config.js 파일을 수정해주자.

소스 파일이 바뀌었고,
우리는 openai에 요청을 보내므로 키 값을 아까 설정한 키로 바꿔주고,
args에 chat gpt에 물어볼 질문을 적으면 된다.
이제 source.js 파일이다.

고대로 복붙하되 민트 박스 내용만 바꿔주면 된다.
max_token을 늘리게 되면 응답받는 답변의 길이가 길어지지만, 그만큼 많은 비용을 지불해야 한다.
무료 버전을 사용하는 입장에서 제한이 걸릴 수 있다, 유료 버전 쓰면 늘려도 될듯
이외 내용은 그냥 post 요청 보내는 것과 매우 유사하다.
이제 요청을 보내보자.
npx hardhat functions-simulate


맥스 토큰이 부족하니 답변이 7단어로 한정된다. 한번 늘려보고 다시 해보자.

이제야 좀 제대로 된 답변이 온다. 맥스 토큰을 7에서 15로 올렸더니 가스 비용도 두 배 가까이 올랐다 오우쉣
여기까지가 강의 내용이다. 솔직히 40% 정도만 이해간다.
지금까지 명령어, 파일들을 좀 더 자세히 알아봐야 한다.
마지막에 요청을 보내려고
npx hardhat simulate
를 입력했는데, 얘가 정확히 어떤 명령어인지 살펴 보자.
npx hardhat 치면 명령어 설명 볼 수 있지 않나

아, 아까 중요하다던 FunctionsConsumer.sol 파일 컨트랙트 실행하나 보다.
이제 FunctionsConsumer.sol 파일을 살펴보자.
여러 강의를 거치면서 공통적으로 하는 말이 딱 2가지 함수만 중요하다고 했다.
executeRequest : DON에 요청을 보내는 함수
fulfillRequest : DON이 처리한 결과를 받는 함수
자세히는 아직 모르겠다.
막말로 이 두 함수를 실행하는 부분이 없는데 어떻게 실행한건지,
수 많은 인터페이스들,
지금은 첫 학습이니 이 정도 하고 끝!