
Solana Dev101 - NFT 컬렉션 보유자 목록을 가져오는 방법(스냅샷)
소개
NFT 컬렉션 소유자의 스냅샷을 생성하는 방법이 궁금하다면 잘 찾아오셨습니다. Helius에서는 DAS API를 사용해 간편하게 스냅샷을 생성할 수 있습니다.
이 튜토리얼을 따라 하려면 Helius 계정과 API 키가 필요합니다. 여기에서 무료로 가입해 발급받을 수 있습니다. 궁금한 점이 있다면 게시물 끝에 있는 관련 문서를 참고하세요. 추가 도움이 필요하면 Helius Discord 커뮤니티에 참여하거나 Twitter에서 Helius를 태그해 질문하세요.
DAS API 사용하기
디지털 자산 표준(DAS) API는 디지털 자산(토큰, NFT 등)과 상호작용하기 위한 통합 인터페이스를 제공하는 오픈 소스 사양이자 시스템입니다. DAS API를 사용해 특정 자산의 소유자를 가져오겠습니다. 컬렉션의 그룹화 방식에 따라 사용할 수 있는 호출이 몇 가지 있습니다.
컬렉션 주소로 컬렉션의 NFT 가져오기(getAssetByGroup)
최신 버전의 Metaplex NFT 표준은 인증된 컬렉션을 사용합니다. 컬렉션을 나타내는 NFT를 생성하는 방식으로 구현되며, 이를 통해 NFT를 분류하고 블록체인에서 컬렉션 정보를 검증할 수 있습니다. 컬렉션의 모든 NFT를 가져오려면 컬렉션 NFT의 민트 주소인 컬렉션 주소를 사용하면 됩니다. 컬렉션에 속한 NFT가 있다면 해당 NFT의 메타데이터를 확인하고 컬렉션 섹션에서 컬렉션 주소를 찾을 수 있습니다.
주소를 확인했다면 DAS getAssetByGroup 메서드로 관련된 모든 NFT를 검색할 수 있습니다. 다음 코드 조각은 페이지네이션을 사용해 Mad Lads NFT 10,000개를 모두 순회하는 방법을 보여줍니다. API 호출의 params 섹션에서 그룹 키로 컬렉션을 사용한다고 지정한 다음, 그룹 값으로 컬렉션 주소를 제공합니다.
const fs = require("fs"); // Required to save the snapshot to a file
const url =
"https://mainnet.helius-rpc.com/?api-key=";
const getAssetsByGroup = async () => {
console.time("getAssetsByGroup"); // Start the timer
let page = 1;
let assetList = [];
while (page) {
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: "my-id",
method: "getAssetsByGroup",
params: {
groupKey: "collection",
groupValue: "J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w",
page: page,
limit: 1000,
},
}),
});
const { result } = await response.json();
const owners = result.items.map((item) => ({
NFTAddress: item.id,
OwnerAddress: item.ownership.owner,
}));
assetList.push(...owners);
if (result.total !== 1000) {
page = false;
} else {
page++;
}
}
const resultData = {
totalResults: assetList.length,
results: assetList,
};
console.log("Owners: ", resultData);
fs.writeFile("output.json", JSON.stringify(resultData, null, 2), (err) => {
if (err) throw err;
console.log("Data written to file");
});
console.timeEnd("getAssetsByGroup"); // End the timer
};
getAssetsByGroup();첫 번째로 검증된 크리에이터를 기준으로 컬렉션의 NFT 가져오기(getAssetByCreator)
첫 번째로 검증된 크리에이터를 기준으로 스냅샷을 생성하려면 'getAssetByCreator' 함수를 사용하고 매개변수에 크리에이터 주소를 제공해야 합니다. NFT의 온체인 메타데이터에 있는 creators 섹션에서 크리에이터 주소를 찾을 수 있습니다.
첫 번째 크리에이터를 확인한 후 getAssetsByCreator 호출에서 해당 주소를 크리에이터 주소로 설정합니다.
const fs = require("fs"); // Required to save the snapshot to a file
const url =
"https://mainnet.helius-rpc.com/?api-key=";
const getAssetsByCreator = async () => {
console.time("getAssetsByCreator"); // Start the timer
let page = 1;
let assetList = [];
while (page) {
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: "my-id",
method: 'getAssetsByCreator',
params: {
creatorAddress: 'D3XrkNZz6wx6cofot7Zohsf2KSsu2ArngNk8VqU9cTY3',
onlyVerified: true,
page: page,
limit: 1000,
},
}),
});
const { result } = await response.json();
const owners = result.items.map((item) => ({
NFTAddress: item.id,
OwnerAddress: item.ownership.owner,
}));
assetList.push(...owners);
if (result.total !== 1000) {
page = false;
} else {
page++;
}
}
const resultData = {
totalResults: assetList.length,
results: assetList,
};
console.log("Owners: ", resultData);
fs.writeFile("output.json", JSON.stringify(resultData, null, 2), (err) => {
if (err) throw err;
console.log("Data written to file");
});
console.timeEnd("getAssetsByCreator"); // End the timer
};
getAssetsByCreator();출력
위의 모든 코드 조각에서는 각 NFT의 주소와 해당 소유자를 출력합니다.
{
NFTAddress: 'J61tzxTJ1gqe1Z8orSQtNmvZUG27fokmcPcobdB3sZXz',
ownerAddress: 'Dar5nrE6XWqv9vAi9o6enUQsamEJKq2zgxjNywncZpYj'
},
필요에 따라 이 출력을 수정해 이름, 설명 또는 속성 등의 정보를 추가하세요. getAssetsByGroup API 응답에 포함되는 데이터의 자세한 내용은 문서에서 확인할 수 있습니다.
마무리
이 글에서는 DAS API를 사용해 NFT 컬렉션 보유자 정보를 가져오는 방법을 살펴봤습니다. DAS API를 사용하면 NFT와 소유자에 관한 유용한 정보를 쉽게 얻을 수 있습니다. 사용자 행동을 분석하거나 NFT 분포를 추적하려는 경우 모두 DAS API가 편리한 솔루션을 제공합니다. 지금 웹사이트에서 플랜에 가입하고 DAS API를 무료로 사용해 보세요.
참고 자료
관련 아티클
Helius 구독하기
최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요


