
Solana 开发入门 101:使用新版 DAS API 创建 SvelteKit 应用
目录
简介
数字资产标准 API (DAS) SDK 通过引入类型、单行抽象和格式规范的响应,简化了 Solana 上的压缩技术和 DAS。
本分步教程将指导你使用 DAS SDK,通过 getAssetsByGroup 方法在网页上展示 NFT 系列图片。此外,本教程还将为你在更复杂的场景中使用 DAS SDK 打下基础。
准备工作
为了充分掌握本教程,请确保满足以下准备条件:
- 已安装 npm 或 yarn:它们是管理项目依赖项所必需的包管理器。
- 具备 JavaScript 基础知识:你应该熟悉变量、函数和对象等 JavaScript 基础概念。
- 已安装 Git:版本控制和协作需要使用 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 函数是一个异步函数,用于从 DAS API 获取 NFT 数据集合。它使用 Helius SDK 发出 RPC 请求,无需设置 fetch 或 axios 调用。
- 首先,检查本地存储中是否有以 '
nftData' 为键保存的数据。如果有,则解析该 JSON 数据并将其返回。
const storedData = localStorage.getItem('nftData');
if (storedData !== null) {
return JSON.parse(storedData);
}这是一种缓存机制。如果之前已经获取过数据,它可以减少不必要的网络请求。你也可以加入自己的自定义缓存和加载逻辑。
2. 接下来,我们使用 API 密钥初始化 Helius 客户端。你还可以选择传入要使用的集群以及 RPC 请求 ID。
const helius = new Helius('YOUR_API_KEY');- 我们初始化几个用于分页的变量。我们将使用这些变量对 DAS API 的结果进行分页,每次获取 1000 个项目,直到获取完所有项目。
let results = [];
let page = 1;
let paginate = true;- 我们进入一个 while 循环。只要
paginate为 true,该循环就会持续运行。在循环中,我们使用helius.rpc.getAssetsByGroup()向 DAS API 发出请求,并提供分组键、分组值和当前页码。
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 的系列 ID。
第 3 步:创建 Collection 组件
- 在 $lib/components 目录中,创建一个名为 Collection.svelte 的新文件。在该文件的
<script>标签中设置必要的导入。
在这段代码中,我们会:
- 导入 getCollection 函数,以便在此组件中使用。
- 从 svelte 导入 onMount、onDestroy 和 afterUpdate。
- 将 collection 设置为空类型,以接收每个 NFT 的名称和图片。
- 设置 onMount 函数来调用
getCollection函数,然后设置 collection 数据。
- 现在,我们可以设置交叉观察器,仅在图片进入视口时才进行渲染。当需要加载如此多的图片时,这一点尤其重要。
- 现在可以设置 onDestroy,以停止我们在上一个 afterUpdate 函数中设置的观察器。
- 现在可以使用 tailwind 将布局设置为网格格式,并适配所有屏幕尺寸:
- 设置网格内部,将返回结果中的图片加载到页面中:
在上述代码中,我们会:
- 使用外层 div,通过 tailwind 设置网格和列。
- 在此处放置 each 块,以加载每个项目的图片源。
- 为返回并展示的每个 NFT 项目向网格布局添加卡片和图片 div。
完整代码如下:
第 4 步:创建展示系列的页面
- 在 src/routes 目录中,创建一个名为 +page.svelte 的新文件,并输入以下代码:
在此步骤中,我们会将 collection 组件导入主页面。
- 接下来,设置页面布局。
在此步骤中,我们会:
- 设置用于放置页面内容的容器。
- 添加一个 header(在 <style> 标签中设置样式)。
- 将导入的 Collection.svelte 放在容器内的 <h1> 正下方。
第 5 步:启动服务器
现在可以启动 SvelteKit 服务器了。在终端中运行以下命令:
npm run dev总结
恭喜!你已成功设置一个 SvelteKit 项目,它使用 Helius SDK 获取并展示 NFT 系列。collection.ts 中设置的函数非常灵活,可用于不同框架。本教程为你在更复杂的用例中使用 DAS SDK 奠定了基础。
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


