The Graph란
The Graph는 이더리움같은 블록체인 네트워크에 있는 데이터를 쿼리하고 인덱싱하는 탈중앙화 프로토콜입니다.
유니스왑이나 BAYC같은 프로젝트들은 데이터를 이더리움 블록체인에 저장합니다. 여기에 저장된 데이터를 읽고 싶으면 스마트컨트랙트에 의해 프로그래밍된 기본읽기 작업을 할 수 있습니다. 하지만 원하는 데이터를 필터링하는 등의 쿼리작업은 불가능합니다. 이런 데이터를 얻으려면 모든 transfer를 처리하고, IPFS해시와 토큰ID를 통해 메타데이터를 읽고 집계해야합니다. 이 작업은 굉장히 긴 시간이 걸립니다.
the graph에서는 이런 복잡한 인덱싱을 GraphQL API를 사용해 쿼리할 수 있게 합니다.
GraphQL
GraphQL은 SQL과 같은 쿼리언어인데 언어구조에서는 꽤 차이가 있고 따라서 사용방식도 차이가 납니다. SQL은 데이터베이스 시스템에 저장된 데이터를 가져오는 것이 목적이고, GraphQL은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적입니다. 따라서 SQL은 보통 백엔드에서 처리하는데 GraphQL은 주로 클라이언트에서 작성하고 호출합니다.
REST API에서는 URL과 METHOD의 조합으로 다양한 endpoint가 존재합니다. 비교해서 GraphQL에서는 하나의 endpoint가 있고 GraphQL API에서는 불러오는 데이터를 쿼리의 조합, 스키마의 타입으로 결정합니다. GraphQL에서 쿼리를 일일이 다 작성해야하지만 항상 예측가능한 응답을 받을 수 있습니다.
출처:https://blog.apollographql.com/graphql-vs-rest-5d425123e34b
GraphQL의 구조
쿼리
The Graph 작동방식
- DApp이 트랜잭션을 보내고 데이터가 스마트컨트랙트에 저장됩니다.
- 스마트 컨트랙트가 하나 이상의 이벤트를 발생시킵니다
- 그래프 노드가 새로운 block과 subgraph를 포함하는 데이터를 찾기위해 지속적으로 이더리움을 스캔합니다
- 노드가 찾고있는 subgraph의 이벤트를 발견하면 mapping 핸들러를 실행합니다. mapping은 그래프노드의 entity를 생성하고 업데이트하는 WASM(web assembly) 모듈입니다.
- 그래프 노드를 사용해 이 데이터를 쿼리할 수 있습니다
The Graph 생태계
The Graph의 네트워크는 네트워크에 서비스를 제공하고 어플리케이션에 데이터를 제공하는 인덱서, 큐레이터, 위임자와 어플리케이션을 사용하고 데이터를 소비하는 소비자로 구성됩니다.
- 인덱서: 인덱싱 및 쿼리 처리 서비스를 제공하기 위해 GRT를 포함하는 노드 운영자, 자신의 작업에 비례하여 서비스에 대한 쿼리 요금과 인덱서보상 획득이 가능합니다.
- 큐레이터: 프로토콜에 의해 인덱싱되어야하는 API를 인덱서로 보내는 서브그래프 개발자, 데이터 소비자 또는 커뮤니티 구성원,
- 위임자: 그래프 노드를 직접 실행하지 않고 네트워크 보안에 기여하기 위해 인덱서에게 지분을 위임하는 개인참여자, 권한을 위임한 인덱서가 얻은 쿼리 수수료 및 보상의 일부를 얻습니다.
- 소비자: 서브그래프를 쿼리하고 인덱서, 큐레이터 및 위임자에게 쿼리 요금을 지불하는 최종사용자
그래프 네트워크의 경제적 보안과 쿼리되는 데이터무결성을 보장하기 위해 참가자들은 GRT를 스테이킹하고 사용합니다.
GRT는 이더리움 블록체인의 ERC-20 토큰입니다. 인덱서, 큐레이터, 위임자는 수행하는 작업의 양과 GRT지분에 비례하여 네트워크에서 서비스를 제공하고 수입을 올릴 수 있습니다.
서브그래프
서브그래프는 그래프가 블록체인에서 인덱싱할 데이터와 데이터를 저장하는 방법을 정의합니다. 일단 배포되면 GraphQL을 사용하여 검색할 수 있는 블록체인 데이터의 글로벌 그래프 일부를 구성합니다.
출처 : https://thegraph.com/docs/en/ , learnweb3 dao