체인링크 노드를 사용해 요청을 이행할 수 있습니다. 이 가이드는 자체 오퍼레이터 컨트랙트를 배포하고 스마트 컨트랙트에 데이터를 제공할 수 있도록 노드에 작업을 추가하는 방법을 보여드리겠습니다.
체인링크 노드는 노드에 작업을 추가하기만 하면 외부 어댑터 없이도 개방형 또는 인증되지 않은 API의 요청을 처리할 수 있습니다. 이러한 요청에 대해 요청자는 각 노드가 검색하기를 원하는 오픈 API의 URL을 제공합니다. 그러면 체인링크 노드는 작업을 사용해 요청을 처리합니다.
일부 API는 운영자의 API 키에 대한 요청 헤더를 제공함으로써 인증을 요구하며, 이를 체인링크 노드가 지원합니다. 인증이 필요한 API에 대한 액세스를 제공하려면 외부 어댑터를 사용하거나 HTTP 작업의 매개변수를 사용하여 해당 API에 특정한 작업을 만들어야 합니다.
이 가이드를 시작하기 전에 다음 작업을 완료하여 필요한 모든 도구가 준비되었는지 확인하세요:
1. 메타마스크를 설정하고 테스트넷 LINK를 얻습니다.
2. 체인링크 노드를 실행합니다.
체인링크 노드가 사용하는 이더리움 주소에 자금을 입금합니다. 주소는 노드 오퍼레이터 GUI의 키 관리 구성에서 찾을 수 있습니다. 노드의 주소는 일반 유형입니다. 여러 수도꼭지에서 테스트 이더리움을 얻을 수 있습니다. 이 튜토리얼이 작동하려면 노드의 이더리움 주소에 세폴리아 ETH로 자금을 조달해야 합니다. 다음은 예시입니다:
노드는 여러 가지 유형의 주소로 작동합니다. 각 주소 유형에는 특정 기능이 있습니다:
노드 주소: 체인링크 노드 지갑의 주소입니다. 노드는 요청에 응답하기 위해 항상 네이티브 블록체인 토큰이 필요합니다. 이 예시에서는 노드가 세폴리아 이더리움을 사용합니다. 체인링크 노드를 시작하면 이 주소가 자동으로 생성됩니다. 이 주소는 노드 오퍼레이터 GUI의 키 관리 > EVM 체인 계정에서 찾을 수 있습니다.
오라클 컨트랙트 주소: 블록체인에 배포되는 Operator.sol 또는 Oracle.sol과 같은 컨트랙트의 주소입니다. 이 주소에는 ETH와 같은 네이티브 블록체인 토큰으로 자금을 조달하지 마세요. API 호출 요청을 할 때 자금은 이 컨트랙트를 통과하여 체인링크 노드와 상호작용합니다. 이 주소는 스마트 컨트랙트 개발자가 API 호출을 위해 노드를 선택할 때 가리키는 주소가 됩니다.
관리자 지갑 주소: 오퍼레이터.sol 또는 오라클.sol 컨트랙트 주소를 소유한 주소입니다. OCR을 사용하는 경우, LINK 토큰을 받는 지갑 주소입니다.
1. 리믹스로 이동하여 오퍼레이터닷솔 스마트 컨트랙트를 엽니다.
2. 컴파일 탭에서 오퍼레이터.sol의 컴파일 버튼을 클릭합니다. 특정 버전을 수동으로 선택하지 않는 한 Remix는 프래그마 라인에서 컴파일러 버전과 언어를 자동으로 선택합니다.
3. 배포 및 실행 탭에서 다음 설정을 구성합니다:
- 환경으로 "주입된 공급자"를 선택합니다. Javascript VM 환경은 오라클 노드에 액세스할 수 없습니다. 메타마스크가 Sepolia 테스트넷에 연결되어 있는지 확인합니다.
- 계약 메뉴에서 "운영자" 계약을 선택합니다.
- 사용 중인 네트워크에 대한 링크 토큰 컨트랙트 주소를 복사하여 배포 버튼 옆의 링크 필드에 붙여넣습니다. Sepolia의 경우 이 주소를 사용할 수 있습니다:
0x779877A7B0D9E8603169DdbD7836e478b4624789
관리자 지갑 주소를 소유자 필드에 복사합니다.
4.트랜잭션을 클릭합니다. 메타마스크에서 트랜잭션을 확인하라는 메시지를 표시합니다.
메타마스크가 팝업되지 않나요?
메타마스크가 메시지를 표시하지 않고 아래 오류를 표시하는 경우, 메타마스크에서 '개인정보 보호 모드'를 비활성화하세요. 오른쪽 상단의 고유 계정 아이콘을 클릭한 다음 설정으로 이동하면 됩니다. 개인정보 보호 모드는 하단 근처에 스위치가 있습니다.
오류: 트랜잭션 전송에 실패했습니다: 주소가 잘못되었습니다. 삽입된 제공업체를 사용하는 경우 제대로 잠금 해제되었는지 확인하세요.
5. 트랜잭션이 성공하면 배포된 계약 섹션에 새 주소가 표시됩니다.
6. 운영자 계약 주소를 기록해 두세요. 나중에 소비 계약을 위해 필요합니다.
1. 체인링크 노드 GUI에서 체인링크 노드의 주소를 찾아 복사합니다. 요구사항을 참조하세요.
2. Remix에서 노드 주소로 setAuthorizedSenders 함수를 호출합니다. 이 함수는 배열을 기대한다는 점에 유의하세요.
3. 트랜잭션 기능을 클릭하여 실행합니다. 메타마스크에서 트랜잭션을 승인하고 블록체인에서 트랜잭션이 확인될 때까지 기다립니다.
4. 노드 주소로 isAuthorizedSender 함수를 호출하여 체인링크 노드 주소가 오퍼레이터 컨트랙트를 호출할 수 있는지 확인합니다. 이 함수는 참을 반환해야 합니다.
OpenAPI 를 호출하는 작업을 생성하고 응답을 구문 분석한 다음 uint256을 반환합니다.
# THIS IS EXAMPLE CODE THAT USES HARDCODED VALUES FOR CLARITY.
# THIS IS EXAMPLE CODE THAT USES UN-AUDITED CODE.
# DO NOT USE THIS CODE IN PRODUCTION.
name = "Get > Uint256 - (TOML)"
schemaVersion = 1
type = "directrequest"
# Optional External Job ID: Automatically generated if unspecified
# externalJobID = "b1d42cd5-4a3a-4200-b1f7-25a68e48aad8"
contractAddress = "YOUR_OPERATOR_CONTRACT_ADDRESS"
maxTaskDuration = "0s"
minIncomingConfirmations = 0
observationSource = """
decode_log [type="ethabidecodelog"
abi="OracleRequest(bytes32 indexed specId, address requester, bytes32 requestId, uint256 payment, address callbackAddr, bytes4 callbackFunctionId, uint256 cancelExpiration, uint256 dataVersion, bytes data)"
data="$(jobRun.logData)"
topics="$(jobRun.logTopics)"]
decode_cbor [type="cborparse" data="$(decode_log.data)"]
fetch [type="http" method=GET url="$(decode_cbor.get)" allowUnrestrictedNetworkAccess="true"]
parse [type="jsonparse" path="$(decode_cbor.path)" data="$(fetch)"]
multiply [type="multiply" input="$(parse)" times="$(decode_cbor.times)"]
encode_data [type="ethabiencode" abi="(bytes32 requestId, uint256 value)" data="{ \\"requestId\\": $(decode_log.requestId), \\"value\\": $(multiply) }"]
encode_tx [type="ethabiencode"
abi="fulfillOracleRequest2(bytes32 requestId, uint256 payment, address callbackAddress, bytes4 callbackFunctionId, uint256 expiration, bytes calldata data)"
data="{\\"requestId\\": $(decode_log.requestId), \\"payment\\": $(decode_log.payment), \\"callbackAddress\\": $(decode_log.callbackAddr), \\"callbackFunctionId\\": $(decode_log.callbackFunctionId), \\"expiration\\": $(decode_log.cancelExpiration), \\"data\\": $(encode_data)}"
]
submit_tx [type="ethtx" to="YOUR_OPERATOR_CONTRACT_ADDRESS" data="$(encode_tx)"]
decode_log -> decode_cbor -> fetch -> parse -> multiply -> encode_data -> encode_tx -> submit_tx
"""
3. YOUR_OPERATOR_CONTRACT_ADDRESS를 이전 단계에서 배포한 운영자 계약 주소의 주소로 바꿉니다.
4. 작업 생성을 클릭합니다. 노드가 작업을 성공적으로 생성하면 작업 번호가 포함된 알림이 표시됩니다.
5. 작업 번호를 클릭하면 작업 세부 정보를 볼 수 있습니다. 노드 오퍼레이터 UI의 작업 탭에서 해당 작업을 찾을 수도 있습니다. 나중에 소비자 컨트랙트에 노드에 요청할 작업 ID를 알려줄 때 필요하므로 외부JobID 값을 저장하세요.
1. 노드에 작업을 추가한 후에는 노드를 사용하여 요청을 처리할 수 있습니다. 이 섹션에서는 요청자가 노드에 요청을 보낼 때 수행하는 작업을 보여줍니다. 또한 노드가 올바르게 작동하는지 테스트하고 확인할 수 있는 방법이기도 합니다.
2. 리믹스에서 ATestnetConsumer.sol을 엽니다.
3. Sepolia에 대해 setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789)이 구성되어 있는지 확인합니다.
4. 컴파일러 탭에서 ATestnetConsumer.sol에 대한 컴파일 버튼을 클릭합니다.
5. 배포 및 실행 탭에서 다음 설정을 구성합니다:
6. 환경으로 주입된 공급자를 선택합니다. 메타마스크가 Sepolia에 연결되어 있는지 확인합니다.
컨트랙트 메뉴에서 ATestnetConsumer를 선택합니다.
배포를 클릭합니다. 메타마스크에서 트랜잭션을 확인하라는 메시지가 표시됩니다.
7. 컨트랙트 주소로 LINK를 전송하여 컨트랙트에 펀딩합니다. 지침은 컨트랙트 자금 조달 페이지를 참조하세요. ATestnetConsumer 컨트랙트의 주소는 Remix의 배포된 컨트랙트 목록에 있습니다. 1 LINK로 컨트랙트에 펀딩할 수 있습니다.
8. 컨트랙트에 펀딩한 후, 요청을 생성합니다. 요청 이더리움 가격 요청 메서드에 오퍼레이터 컨트랙트 주소와 Get > Uint256 작업의 작업 ID를 대시 없이 입력합니다. 작업 ID는 노드 오퍼레이터 UI의 작업 정의 페이지에서 찾을 수 있는 externalJobID 매개변수입니다.
9.요청 이더리움 가격 함수에 대한 트랜잭션 버튼을 클릭하고 메타마스크에서 트랜잭션을 승인합니다. 요청 이더리움 가격 함수는 노드에 https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD 에서 uint256 데이터를 검색하도록 요청합니다.
10. 트랜잭션이 처리된 후 노드 오퍼레이터 UI의 작업 실행 페이지에서 작업 완료에 대한 세부 정보를 확인할 수 있습니다.
10. Remix에서 currentPrice 변수를 클릭하면 소비자 계약에서 업데이트된 현재 가격을 확인할 수 있습니다.
오퍼레이터 컨트랙트에서 LINK를 철회할 수 있습니다. 리믹스의 배포된 컨트랙트 목록 아래에서 오퍼레이터 컨트랙트를 클릭하고 기능 목록에서 탈퇴 기능을 찾습니다. 관리자(관리자 지갑 주소 참조)만 LINK를 출금할 수 있다는 점에 유의하세요.
출금할 주소를 붙여넣고 출금할 LINK 금액을 지정합니다. 그런 다음 출금을 클릭합니다. 팝업이 나타나면 메타마스크에서 트랜잭션을 확인합니다.
출처: https://docs.chain.link/chainlink-nodes/v1/fulfilling-requests
What is Space and Time? [Select * from ETHEREUM.Transaction ] (0) | 2023.05.05 |
---|---|
What is Truflation ? 트루플레이션이란? (0) | 2023.05.05 |
Running a Chainlink Node (0) | 2023.04.05 |
Random Numbers: Using Chainlink VRF (0) | 2023.04.04 |
Chainlink Single Word Response (0) | 2023.04.04 |