신규: Helius가 Light Protocol을 인수했습니다
Helius로 새로 민팅된 토큰을 가져오는 방법
블로그/개발

Helius로 새로 민팅된 토큰을 가져오는 방법

개발자 경험 엔지니어X의 Anam AnsariLinkedIn의 Anam Ansari
읽는 데 6분
목차

    소개

    최근 Solana 밈코인이 주목받고 있습니다. $WIF는 35억 달러를 돌파했고, Boden은 3억 달러에 도달했습니다. Popcat과 Wen은 최근 3억 5천만 달러를 넘어섰습니다. Slerf는 출시 첫날 거래량에서 Ethereum 기반의 모든 거래소를 앞질렀습니다. 지난해 11월 BONK의 급등 이후 Solana에서는 그 어느 때보다 많은 새 토큰이 생성되고 있습니다.

    이 글에서는 Solana에서 토큰이 생성되는 방식과 SPL 토큰의 개념을 살펴보고, Helius를 사용해 새 토큰을 모니터링하고 메타데이터를 가져오는 방법을 알아봅니다.

    Solana에서 토큰은 어떻게 생성되나요?

    Solana는 네이티브 SOL과 다른 토큰을 모두 지원합니다. Solana Program Library(SPL)는 Solana의 대체 가능 토큰과 대체 불가능 토큰(NFT)에 대한 공통 표준을 정의합니다. Ethereum은 대체 불가능 토큰(ERC-721)과 대체 가능 토큰(ERC-20) 유형마다 서로 다른 표준을 사용합니다. 반면 Solana Program Library에는 토큰 유형별로 별도 설계된 표준이 없습니다. 

    Token Program

    Solana에서 대체 가능 토큰과 대체 불가능 토큰(NFT)을 구현하는 표준은 Token Program입니다. 새로운 토큰 유형과 계정 생성, 토큰 전송 및 소각을 비롯한 다양한 기능을 제공합니다. Token Program은 완성된 상태이며 새로운 기능을 추가할 계획은 없습니다. 다만 중요하거나 호환성을 깨뜨리는 버그를 수정하기 위한 변경은 있을 수 있습니다.

    하지만 Token Program에는 한계가 있습니다. 개발자가 새로운 기능을 추가하려면 이를 포크해야 하므로 트랜잭션이 더 복잡해지고 위험도 커집니다. 이를 해결하기 위해 Solana는 다음과 같은 추가 기능과 개선 사항을 제공하는 Token-2022를 도입했습니다.

    1.  민트 확장 기능: 기밀 전송, 전송 수수료, 민트 종료, 이자 발생 토큰, 전송 불가 토큰, 영구 위임자, 전송 훅, 메타데이터 포인터, 메타데이터.
    2. 계정 확장 기능: 수신 전송 시 메모 필수, 변경 불가능한 소유권, 기본 계정 상태, CPI 가드. 

    Token-2022에 대한 자세한 내용은 이 글을 참고하세요.

    Solana의 Token Program을 사용하면 민트 계정과 토큰 계정을 생성할 수 있습니다. 민트 계정에는 토큰의 전역 정보가 담기며, 토큰 계정에는 지갑과 민트 계정 간의 관계가 저장됩니다. 다음 코드 또는 spl-token-cli를 사용해 토큰을 생성할 수 있습니다. 예를 들어 spl-token-cli가 설치되어 있다면 명령줄에서 다음 명령어를 실행해 대체 가능 토큰을 생성하세요.

    코드
    spl-token create-token

    Token Metadata Program

    민트 계정에는 현재 토큰 공급량과 같은 데이터 속성이 포함됩니다. 하지만 이름이나 심볼과 같은 표준화된 데이터는 없습니다. 이를 해결하기 위해 Metaplex는 Token Metadata Program을 도입했습니다. 이 프로그램은 민트 주소에서 파생된 PDA(프로그램 파생 주소)를 사용해 대체 가능 토큰과 대체 불가능 토큰에 추가 데이터를 연결할 수 있게 해줍니다.

    Token Metadata Program은 처음에 Solana에서 NFT 생성을 간소화하기 위해 만들어졌습니다. 하지만 준대체 가능 토큰인 SFT에도 사용할 수 있습니다. SFT는 대체 가능 토큰과 대체 불가능 토큰의 특성을 결합합니다. 처음에는 대체 가능 토큰처럼 작동하므로 어느 쪽도 가치를 잃지 않고 동일한 토큰과 교환할 수 있습니다. 사용된 후에는 교환 가치를 잃고 수집 가능한 대체 불가능 토큰의 속성을 갖게 됩니다. SFT는 게임이나 메타버스 환경의 특성을 나타내는 메타데이터가 연결된 고유한 계정 유형으로 작동합니다. 효율성, 비용 효율성, 유연성, 향상된 트랜잭션 보안 덕분에 일부 환경에서는 NFT보다 SFT가 선호됩니다.

    Token Metadata Program은 프로그래밍 가능한 NFT(pNFT)도 지원합니다. 이 새로운 자산 표준을 사용하면 크리에이터가 특정 작업에 대한 사용자 지정 규칙을 정의하고 제3자 기관에 더 세분화된 권한을 위임할 수 있습니다. pNFT의 토큰 계정은 pNFT의 위임 여부와 관계없이 SPL Token Program에서 항상 동결됩니다. 따라서 누구도 SPL Token Program과 직접 상호작용해 Token Metadata Program을 우회할 수 없습니다.

    새 토큰 모니터링 

    새로 민팅된 토큰을 모니터링하기 위해 webhook을 설정하겠습니다. webhook을 사용하면 온체인 이벤트를 수신하고 이벤트가 발생할 때 특정 작업을 실행할 수 있습니다. Token Metadata Program의 TOKEN_MINT 트랜잭션 유형을 수신하도록 webhook을 구성하겠습니다. 현재 이 트랜잭션 유형에서 지원하는 소스는 다음과 같습니다. 그 밖의 소스에는 “UNKNOWN” 태그가 지정됩니다. 

    코드
     "TOKEN_MINT": [   "CANDY_MACHINE_V1",   "ATADIA",   "SOLANA_PROGRAM_LIBRARY" ]

    Helius Dashboard에서 webhook을 만들거나 API 레퍼런스를 사용해 코드로 생성할 수 있습니다. Dashboard에서 만들려면 왼쪽 패널의 Webhooks 섹션으로 이동해 New Webhook을 클릭하세요. 그런 다음 다음과 같은 세부 정보를 입력해 webhook을 구성합니다.

    1. 네트워크: Mainnet/Devnet
    2. Webhook 유형: Enhanced/Raw/Discord 중 하나를 선택할 수 있습니다. Discord를 선택하면 Webhook URL을 제출해야 하며, 알림은 봇이 형식을 지정해 직접 전송합니다. Discord 봇의 Webhook URL을 가져오는 단계는 여기에서 확인할 수 있습니다. Raw를 선택하면 트랜잭션 유형을 지정할 수 없습니다. 
    3. 트랜잭션 유형: 새로 민팅된 토큰을 수신하려면 TOKEN_MINT를 선택하세요*.* 프로그램에서 지원하는 다른 트랜잭션 유형은 여기에서 확인할 수 있습니다. 
    4. Webhook URL: 알림을 수신할 엔드포인트를 추가하세요(예: Discord 봇, 웹사이트 등). 
    5. 인증 헤더: webhook으로 전달되는 POST 요청에 사용할 인증 헤더를 입력하세요. 이 항목은 선택 사항입니다.
    6. 계정 주소: 여기에 Token Metadata Program 주소 metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s를 추가하세요. 다른 경우에는 필요에 따라 계정 주소를 여러 개 추가할 수 있습니다. 트랜잭션에서 특정 사용자의 활동만 수신하려면 해당 사용자의 주소를 포함할 수 있습니다.

    확인하면 webhook을 바로 사용할 수 있습니다. Webhook URL을 기반으로 적절한 프런트엔드를 구축할 수 있습니다. 여기서는 Webhook 유형으로 Discord를 선택하고 Discord 봇의 Webhook URL을 입력했습니다. 따라서 Discord 봇을 직접 코딩할 필요가 없습니다. 다음과 같은 알림을 받게 됩니다. 

    토큰 메타데이터 가져오기

    토큰 ID(토큰의 민트 주소)를 사용해 특정 토큰의 메타데이터를 가져올 수 있습니다. Enhanced webhook을 통해 전송된 JSON 알림을 파싱하세요. 이 알림은 webhook 유형을 Enhanced로 설정했을 때 전송됩니다. 민트 주소는 transferTokens 배열의 첫 번째 객체에 있는 "mint" 필드에서 찾을 수 있습니다. 토큰 ID를 확보한 후에는 DAS API에서 제공하는 getAsset 메서드를 사용해 토큰에 대한 추가 정보를 가져올 수 있습니다. 

    예를 들어 getAsset 메서드를 사용해 Jito Staked SOL(JitoSOL)에 대한 정보를 가져올 수 있습니다.

    코드
    const url = `https://mainnet.helius-rpc.com/?api-key=<api_key>`
    
    const getAsset = async () => {
      const response = await fetch(url, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: 'my-id',
          method: 'getAsset',
          params: {
            id: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
            displayOptions: {
    	    showFungible: true //return details about a fungible token
    	}
          },
        }),
      });
      const { result } = await response.json();
      console.log("Asset: ", result);
    };
    getAsset();

    더 많은 DAS API 예제와 이 메서드의 요청 및 응답에 대한 전체 스키마는 문서에서 확인할 수 있습니다.

    마무리

    이 글에서는 Solana에서 토큰이 생성되는 방식과 SPL 토큰의 개념을 알아봤습니다. 또한 webhook을 설정해 새 토큰을 모니터링하고 Helius를 통해 메타데이터를 가져오는 방법도 살펴봤습니다. 도움이나 지원이 필요하다면 언제든 Discord로 문의하세요!

    아래에 이메일 주소를 입력하면 Solana의 최신 소식을 빠짐없이 받아볼 수 있습니다. 더 깊이 알아볼 준비가 되셨나요? 지금 Helius 블로그의 최신 글을 살펴보고 Solana 여정을 계속하세요.

    리소스

    Helius 구독하기

    최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요

    확대 이미지