블록체인 데이터를 조회하는 방법
For the complete documentation index, see llms.txt
이 가이드에서는 Midnight 블록체인에 연결하고 새 블록을 실시간으로 수신하는 방법을 다룹니다. Polkadot API와 Substrate 기반 블록체인 네트워크에 연결하기 위해 제공되는 다양한 메서드를 사용해 블록에서 데이터를 추출하는 방법도 함께 살펴봅니다.
Prerequisites
시작하기 전에 다음 사항을 준비하세요.
- 머신에 Node.js가 설치되어 있어야 합니다.
- TypeScript에 대한 기본적인 이해가 필요합니다.
Connect to the Midnight blockchain
@polkadot/api 라이브러리는 Midnight을 포함한 Substrate 기반 블록체인 네트워크에 연결하기 위한 WebSocket 프로바이더(WsProvider)를 지원합니다.
Installation
의존성을 설치합니다.
- npm
- yarn
npm install @polkadot/api
yarn add @polkadot/api
Connect to the Midnight node
WsProvider로 RPC 엔드포인트를 통해 Midnight 노드에 연결합니다.
import { ApiPromise, WsProvider } from '@polkadot/api';
// Midnight 노드의 WebSocket 엔드포인트 정의
const wsProvider = new WsProvider('wss://rpc.preview.midnight.network');
// API 인스턴스 생성
const api = await ApiPromise.create({ provider: wsProvider });
위 예제의 RPC 엔드포인트는 preview 네트워크용입니다. 동일한 코드에서 엔드포인트만 바꿔 다른 환경에 연결할 수 있습니다. 지원되는 환경은 다음과 같습니다.
- Preview:
wss://rpc.preview.midnight.network - Preprod:
wss://rpc.preprod.midnight.network - Mainnet:
wss://rpc.mainnet.midnight.network
지원 환경에 대한 자세한 내용은 Environments and endpoints 문서를 참고하세요.
Listen for new blocks
연결이 완료되면 새 블록 헤더를 구독하여 새 블록을 수신할 수 있습니다.
api.rpc.chain.subscribeNewHeads((lastHeader) => {
console.log(`New block #${lastHeader.number} has been added`);
});
이 함수는 새 블록이 체인에 추가될 때마다 블록 번호를 출력합니다.
Extract data from blocks
새 블록에서 트랜잭션이나 이벤트 같은 상세 정보를 추출하려면 다음 코드를 사용하세요.
api.rpc.chain.subscribeNewHeads(async (lastHeader) => {
const blockHash = await api.rpc.chain.getBlockHash(lastHeader.number);
const signedBlock = await api.rpc.chain.getBlock(blockHash);
const allEvents = await api.query.system.events.at(blockHash);
console.log(`nBlock #${lastHeader.number}`);
signedBlock.block.extrinsics.forEach((extrinsic, index) => {
console.log(`nExtrinsic ${index}: ${extrinsic.method.section}.${extrinsic.method.method}`);
console.log(`Arguments: ${extrinsic.args.map((arg) => arg.toString()).join(', ')}`);
});
allEvents.forEach(({ event, phase }, index) => {
console.log(`nEvent ${index}: ${event.section}.${event.method}`);
console.log(`Phase: ${phase.toString()}`);
console.log(`Data: ${event.data.toString()}`);
});
});
위 코드가 수행하는 작업은 다음과 같습니다.
- 새 블록 헤더 구독
- 전체 블록과 관련 이벤트 조회
- 각 extrinsic(트랜잭션)과 이벤트의 상세 정보 출력
What is an extrinsic?
Extrinsic은 블록체인 외부에서 네트워크에 특정 동작을 요청하기 위해 전달되는 데이터 조각을 말합니다. Substrate 기반 블록체인에서는 일반적으로 트랜잭션을 가리키는 용어로 사용됩니다.
Extrinsic에는 크게 세 가지 종류가 있습니다.
- Signed extrinsics: 사용자가 디지털 서명을 포함해 제출하는 트랜잭션입니다. 토큰 전송이나 스마트 컨트랙트 호출 등이 해당합니다.
- Unsigned extrinsics: 서명 없이 제출되며, 사용자 인증이 필요 없는 작업에 주로 사용됩니다.
- Inherent extrinsics: 새 블록의 타임스탬프 설정 같은 시스템 수준 작업에 사용되며, 보통 블록체인이 직접 생성합니다.
Next steps
이제 Midnight 블록체인에 연결하고 새 블록을 수신하는 방법을 익혔습니다. 노드 운영에 대해 더 알아보려면 Node RPC 가이드를 참고하세요.