네트워크에서 읽기
이 섹션에서는 다양한 계정을 가져와 솔라나 계정의 구조를 이해하면서 솔라나 네트워크에서 데이터를 읽는 방법을 살펴봅니다.
솔라나에서 모든 데이터는 "계정"에 존재합니다. 솔라나의 데이터는 단일 "계정" 테이블이 있는 공개 데이터베이스로 생각할 수 있으며, 각 항목은 동일한 기본 계정 유형을 가진 계정입니다.
계정
솔라나의 계정은 "상태" 또는 "실행 가능한" 프로그램을 저장할 수 있습니다. 각 계정은 해당 온체인 데이터를 찾는 데 사용되는 고유 ID 역할을 하는 "주소"(공개 키)를 가지고 있습니다.
솔라나 계정은 다음 중 하나를 포함합니다:
- 상태: 읽고 유지되어야 하는 데이터. 예를 들어, 토큰에 관한 정보, 사용자 데이터 또는 프로그램 내에 정의된 기타 데이터가 있습니다.
- 실행 가능한 프로그램: 솔라나 프로그램의 실제 코드를 포함하는 계정. 이러한 계정은 사용자가 호출할 수 있는 명령어를 저장합니다.
프로그램 코드와 프로그램 상태의 이러한 분리는 솔라나 계정 모델의 핵심 기능입니다. 자세한 내용은 솔라나 계정 모델 페이지를 참조하세요.
지갑 계정 가져오기
이 예제는 다음을 보여줍니다:
- 새 keypair(공개/개인 키 쌍) 생성하기.
- 새 주소에 SOL 에어드롭을 요청하여 자금을 지원하기.
- 자금이 지원된 주소의 계정 데이터 검색하기.
솔라나에서 새 주소에 SOL로 자금을 지원하면 자동으로 System Program이 소유한 계정이 생성됩니다. 모든 "지갑" 계정은 단순히 SOL을 보유하고 트랜잭션에 서명할 수 있는 System Program 소유 계정입니다.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Token Program 조회하기
이 예제는 지갑 계정과 프로그램 계정의 차이점을 보여주기 위해 Token Program을 조회합니다.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
Mint 계정 가져오기
이 예제는 USD 코인(USDC) Mint 계정을 가져와 Solana의 프로그램이 어떻게 별도의 계정에 상태를 저장하는지 보여줍니다.
Mint 계정은 Token Program이 소유한 계정입니다. 이 계정은 총 공급량, 소수점 자릿수, 토큰을 발행하거나 동결할 권한이 있는 계정 등 특정 토큰에 대한 전역 메타데이터를 저장합니다. Mint 계정의 주소는 Solana 네트워크에서 토큰을 고유하게 식별합니다.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
Mint 계정 역직렬화하기
Solana 계정의 data
필드는 원시 바이트를 포함합니다. 이 데이터를 의미 있게
해석하려면 계정을 소유한 프로그램에서 정의한 적절한 데이터 타입으로 역직렬화해야
합니다.
대부분의 Solana 프로그램은 역직렬화 과정을 추상화하는 헬퍼 함수가 있는 클라이언트 라이브러리를 제공합니다. 이러한 함수는 원시 계정 바이트를 구조화된 데이터 타입으로 변환하여 계정 데이터를 더 쉽게 다룰 수 있게 해줍니다.
예를 들어, *shell@solana/spl-token
*에는 mint account의 data
필드를
Mint
데이터 타입으로 역직렬화하는 데 도움이 되는 getMint()
함수가 포함되어 있습니다.
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
Is this page helpful?