
Solana Dev 101 — создание приложения SvelteKit с новым DAS API
Содержание
Введение
SDK для Digital Asset Standard API (DAS) упрощает работу со сжатием и DAS в Solana благодаря типам, однострочным абстракциям и правильно отформатированным ответам.
В этом пошаговом руководстве вы узнаете, как с помощью DAS SDK и метода getAssetsByGroup отображать изображения коллекции NFT на веб-странице. Кроме того, руководство заложит основу для применения DAS SDK в более сложных сценариях.
Предварительные требования
Чтобы получить максимум пользы от этого руководства, убедитесь, что выполнены следующие предварительные требования:
- Установлен npm или yarn: эти менеджеры пакетов необходимы для управления зависимостями проекта.
- Базовое знание JavaScript: вы должны понимать основные концепции JavaScript, такие как переменные, функции и объекты.
- Установлен Git: он необходим для контроля версий и совместной работы.
Настройка окружения
Чтобы выполнять шаги этого руководства, рекомендуем использовать готовый шаблон из репозитория, доступного здесь.
Посмотреть работающую версию проекта можно здесь.
Шаг 1. Настройте новый проект SvelteKit
Сначала нужно настроить новый проект SvelteKit. Для создания структуры проекта можно использовать шаблон create-svelte. Выполните следующую команду в терминале:
git clone https://github.com/helius-labs/das-ui.gitЗатем перейдите в новый каталог:
cd das-uiУстановите зависимости проекта:
npm installШаг 2. Настройте вспомогательную функцию
В созданном каталоге src/lib/util создайте новый файл с именем collection.ts.
В этом файле настройте функцию getCollection, как показано ниже:
import { Helius } from 'helius-sdk';
export async function getCollection() {
// Request goes here //
}Функция getCollection — это асинхронная функция, которая получает данные коллекции NFT из DAS API. Она использует Helius SDK для выполнения RPC-запросов, поэтому вам не придется настраивать вызов fetch или axios.
- В начале функции проверьте, хранятся ли в локальном хранилище данные с ключом «
nftData». Если данные есть, преобразуйте их из JSON и верните.
const storedData = localStorage.getItem('nftData');
if (storedData !== null) {
return JSON.parse(storedData);
}Это форма кеширования, которая сокращает количество ненужных сетевых запросов, если данные уже были получены ранее. Вы можете добавить собственную логику кеширования и загрузки.
2. Затем инициализируйте клиент Helius с помощью ключа API. При необходимости можно также указать кластер и идентификатор RPC-запроса.
const helius = new Helius('YOUR_API_KEY');- Инициализируйте несколько переменных для пагинации. Они позволят постранично получать результаты из DAS API по 1000 элементов за раз, пока не будут получены все элементы.
let results = [];
let page = 1;
let paginate = true;- Запустите цикл while, который будет выполняться, пока значение
paginateравно true. Внутри цикла отправьте запрос к DAS API с помощьюhelius.rpc.getAssetsByGroup(). Передайте ключ группы, значение группы и номер текущей страницы.
while (paginate) {
try {
const response = await helius.rpc.getAssetsByGroup({
groupKey: 'collection',
groupValue: 'YOUR_COLLECTION_VALUE',
page: page,
});
...
}
...
}- Обработайте элементы в ответе. Если элементов меньше 1000, значит, все элементы уже получены. Установите
paginateв false, чтобы выйти из цикла. В противном случае увеличьте переменнуюpage, чтобы получить следующую группу элементов на следующей итерации цикла.
const nfts = response.items;
// if the amount of items returned is less than 1000, stop pagination
if (nfts.length < 1000) {
paginate = false;
} else {
// otherwise, increase the page number to get the next page of results
page++;
}- Для каждого элемента в ответе извлеките
nameиimageиз метаданных и добавьте их в массивresults.
for (const nft of nfts) {
const name = nft.content?.metadata.name;
const image = nft.content?.links?.image;
results.push({ name, image });
}- Наконец, сохраните результаты в локальном хранилище, чтобы не запрашивать их снова в следующий раз, и верните их.
localStorage.setItem('nftData', JSON.stringify(results));
return results;Полный код:
import { Helius } from 'helius-sdk';
export async function getCollection() {
const storedData = localStorage.getItem('nftData');
if (storedData !== null) {
return JSON.parse(storedData);
}
const helius = new Helius('YOUR_API_KEY');
let results = [];
let page = 1;
let paginate = true;
while (paginate) {
try {
const response = await helius.rpc.getAssetsByGroup({
groupKey: 'collection',
groupValue: '8Rt3Ayqth4DAiPnW9MDFi63TiQJHmohfTWLMQFHi4KZH',
page: page,
});
const nfts = response.items;
// if the amount of items returned is less than 1000, stop pagination
if (nfts.length < 1000) {
paginate = false;
} else {
// otherwise, increase the page number to get the next page of results
page++;
}
for (const nft of nfts) {
const name = nft.content?.metadata.name;
const image = nft.content?.links?.image;
results.push({ name, image });
}
localStorage.setItem('nftData', JSON.stringify(results));
return results;
} catch (e) {
console.log(e);
}
}
}Не забудьте заменить YOUR_API_KEY на свой ключ Helius API, а groupValue — на фактическое значение коллекции, которую вы хотите отобразить. В этом примере значение groupValue — 8Rt3Ayqth4DAiPnW9MDFi63TiQJHmohfTWLMQFHi4KZH. Это идентификатор коллекции Solana Monkey Business Gen 3.
Шаг 3. Создайте компонент Collection
- В каталоге $lib/components создайте новый файл с именем Collection.svelte. В этом файле добавьте необходимые импорты в тег
<script>.
В этом коде мы:
- Импортируем функцию getCollection, чтобы использовать ее в этом компоненте.
- Импортируем onMount, onDestroy и afterUpdate из svelte.
- Задаем для коллекции пустой тип, чтобы получать название и изображение каждого NFT.
- Настраиваем функцию onMount для вызова
getCollectionи последующего сохранения данных коллекции.
- Теперь можно настроить Intersection Observer, чтобы изображения отрисовывались только при появлении в области просмотра. Это особенно важно при загрузке такого большого количества изображений.
- Теперь настройте onDestroy, чтобы остановить наблюдатель, созданный в предыдущей функции afterUpdate.
- Теперь с помощью Tailwind настройте адаптивную сетку для экранов любого размера:
- Настройте внутреннюю часть сетки для загрузки и отображения изображений из полученных данных:
В приведенном выше коде мы:
- Используем внешний div для настройки сетки и столбцов с помощью Tailwind.
- Добавляем блок each для загрузки источника изображения каждого элемента.
- Добавляем в макет сетки карточку и div изображения для каждого возвращенного NFT.
Полный код:
Шаг 4. Создайте страницу для отображения коллекции
- В каталоге src/routes создайте новый файл с именем +page.svelte и добавьте в него следующий код:
На этом шаге мы импортируем компонент коллекции на главную страницу.
- Затем настройте макет страницы.
На этом шаге мы:
- Настраиваем контейнер для содержимого страницы.
- Добавляем заголовок, стилизованный в теге <style>.
- Размещаем импортированный Collection.svelte сразу после <h1> в контейнере.
Шаг 5. Запустите сервер
Теперь все готово для запуска сервера SvelteKit. Выполните следующую команду в терминале:
npm run devЗаключение
Поздравляем! Вы успешно настроили проект SvelteKit, который использует Helius SDK для получения и отображения коллекции NFT. Функция из collection.ts универсальна и подходит для разных фреймворков. Это руководство закладывает основу для применения DAS SDK в более сложных сценариях.
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


