> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Solana SPL 토큰 획득 방법: 전체 API 가이드

> "Helius를 사용하여 Solana SPL 토큰 데이터를 검색 및 쿼리하세요: 잔액, 토큰 계정, 공급, 소유자 및 대체 가능한 토큰 확장, 코드 예제 포함."

## 개요

이 가이드는 Solana에서 대체 가능한 토큰을 읽는 방법을 다룹니다: 계정 잔액, 소유자 또는 민트별 토큰 계정, 총 공급량, 최대 소유자 및 DAS 대체 가능한 토큰 확장. Helius는 표준 Solana RPC 토큰 메서드와 메타데이터 및 USD 가격을 추가하는 DAS 메서드를 제공합니다.

NFT, 압축 NFT, 에디션 및 증명에 대해서는 [Get Assets 가이드](/docs/ko/das/get-nfts)를 참조하세요. 이 페이지는 대체 가능한 (SPL 및 Token-2022) 토큰에 중점을 둡니다.

## 사용 시점

이 페이지의 메서드를 사용할 때:

* 단일 토큰 계정의 잔액을 읽을 때
* 지갑이 보유한 모든 토큰 계정을 나열할 때
* 특정 민트를 보유한 모든 계정을 찾을 때
* 토큰의 총 공급량 또는 최대 소유자를 확인할 때
* 잔액과 함께 토큰 메타데이터 및 USD 가격을 가져올 때

## 토큰 계정 잔액

표준 RPC를 사용하여 특정 토큰 계정의 잔액을 가져옵니다:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountBalance',
    params: [
      '3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/rpc/http/gettokenaccountbalance">
  getTokenAccountBalance
</Card>

## 소유자별 토큰 계정

지갑이 소유한 모든 토큰 계정을 나열하십시오:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountsByOwner',
    params: [
      '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
      {
        programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
      },
      {
        encoding: 'jsonParsed'
      }
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/rpc/http/gettokenaccountsbyowner">
  getTokenAccountsByOwner
</Card>

## 민트별 토큰 계정

특정 토큰을 보유한 모든 계정을 나열하십시오:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenAccountsByOwner',
    params: [
      'CEXq1uy9y15PL2Wb4vDQwQfcJakBGjaAjeuR2nKLj8dk',
      {
        mint: "8wXtPeU6557ETkp9WHFY1n1EcU6NxDvbAggHGsMYiHsB"
      },
      {
        encoding: 'jsonParsed'
      }
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/rpc/http/gettokenaccountsbyowner">
  getTokenAccountsByOwner
</Card>

모든 소유자에 걸친 민트를 보유한 모든 계정을 찾으려면 아래에 설명된 DAS `getTokenAccounts` 메서드를 사용하십시오.

## 토큰 공급

토큰의 총 공급량을 확인하십시오:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenSupply',
    params: [
      'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/rpc/http/gettokensupply">
  getTokenSupply
</Card>

## 최대 토큰 소유자

토큰을 보유한 최대 계정을 식별하십시오:

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getTokenLargestAccounts',
    params: [
      'he1iusmfkpAdwvxLNGV8Y1iSbj4rUy6yMhEA3fotn9A'
    ]
  })
});
const data = await response.json();
console.log(data);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/rpc/http/gettokenlargestaccounts">
  getTokenLargestAccounts
</Card>

최대 20개의 민트 계정을 반환합니다:

```json theme={"system"}
{
  "context": { "slot": 0 },
  "value": [
    { "address": "...", "amount": "1000000000000", "decimals": 9, "uiAmount": 1000.0, "uiAmountString": "1000" }
  ]
}
```

## DAS API와의 토큰 계정

DAS `getTokenAccounts` 메서드는 민트 또는 소유자별로 토큰 계정을 반환하며, 단일 페이지네이션 호출 내에서 잔액을 포함합니다. `getTokenAccountsByOwner`와 달리, `mint` 만으로 모든 소유자에 걸쳐 토큰을 보유한 모든 계정을 나열할 수 있습니다.

```typescript theme={"system"}
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`;

const getTokenAccounts = async (params) => {
  const response = await fetch(url, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: "my-request-id",
      method: "getTokenAccounts",
      params: params,
    }),
  });

  const { result } = await response.json();
  return result;
};

// Example: Get all accounts holding a specific token
getTokenAccounts({
  mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
  page: 1,
  limit: 100
});
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/das/gettokenaccounts">
  getTokenAccounts
</Card>

페이지네이션; 각 항목에는 계정, 민트, 소유자, 잔액이 포함됩니다:

```json theme={"system"}
{
  "total": 100,
  "limit": 100,
  "page": 1,
  "token_accounts": [
    { "address": "...", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "owner": "...", "amount": 12345678 }
  ]
}
```

## DAS API로 토큰 메타데이터 및 가격

토큰 메타데이터 및 USD 가격을 위해 DAS `getAsset` 메서드를 `showFungible`가 활성화된 상태로 호출하십시오. 검증된 토큰의 가격은 `token_info.price_info`에서 반환됩니다.

<Note>
  `getAsset`의 가격 데이터는 최대 600초간 캐시되므로 최대 10분까지 오래될 수 있습니다.
</Note>

```typescript theme={"system"}
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: '1',
    method: 'getAsset',
    params: {
      id: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263', // Bonk
      options: {
        showFungible: true
      }
    }
  })
});
const { result } = await response.json();
console.log(result.token_info.price_info);
```

<Card title="API 참고자료" horizontal icon="code" href="/docs/ko/api-reference/das/getasset">
  getAsset
</Card>

응답은 `token_info` 하에 공급량, 소수점 및 가격을 반환합니다:

```json theme={"system"}
{
  "token_info": {
    "symbol": "Bonk",
    "supply": 8881594973561640000,
    "decimals": 5,
    "token_program": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    "price_info": {
      "price_per_token": 0.0000192271,
      "currency": "USDC"
    }
  }
}
```

### 시가 총액 계산

가격을 소수점 조정된 공급량과 곱합니다:

```typescript theme={"system"}
const { price_per_token } = result.token_info.price_info;
const { supply, decimals } = result.token_info;
const marketCap = (supply / Math.pow(10, decimals)) * price_per_token;
```

지갑의 모든 대체 가능한 토큰을 한 번의 호출로 나열하려면 잔액 및 가격과 함께 `getAssetsByOwner` 또는 `searchAssets`를 `tokenType: "fungible"`와 함께 사용하십시오. `tokenType`, 잔액, Token-2022 확장 및 가격 데이터가 응답에 나타나는 방법은 [대체 가능한 토큰 확장](/docs/ko/das/fungible-token-extension)을 참조하십시오.

## 모범 사례

* 큰 결과 집합을 반환하는 메서드에는 페이지네이션을 사용하십시오. 자세한 내용은 [페이지네이션 가이드](/docs/ko/das/pagination)를 참조하십시오.
* 메타데이터나 USD 가격이 필요한 경우 DAS 메서드(`getAsset`, `getAssetsByOwner`, `getTokenAccounts`)를 사용하고, 원시 온체인 잔액 및 공급의 경우 표준 RPC 메서드를 사용하십시오.
* 오류를 try/catch 블록과 재시도를 사용하여 원활하게 처리하십시오.
* 적절할 때 응답을 캐시하여 API 호출을 줄이십시오.

## 다음 단계

<CardGroup cols={3}>
  <Card title="대체 가능한 토큰 확장" icon="coins" href="/docs/ko/das/fungible-token-extension">
    DAS가 대체 가능한 토큰, Token-2022 확장 및 가격을 반환하는 방법.
  </Card>

  <Card title="자산 가져오기 (NFT)" icon="image" href="/docs/ko/das/get-nfts">
    NFT, 압축 NFT, 에디션 및 증명을 검색합니다.
  </Card>

  <Card title="DAS API 참조" icon="code" href="/docs/ko/api-reference/das">
    모든 DAS 메서드에 대한 전체 스키마.
  </Card>
</CardGroup>
