
Доступ по токенам в Solana — руководство по Solana Mobile
Введение
В начале 2023 года Solana Mobile выпустила смартфон на базе блокчейна. Сегодня активировано уже более 15 000 устройств Solana Saga. Это специализированное Android-устройство повышает безопасность ончейн-операций благодаря встроенному на уровне чипа хранилищу сид-фразы, интегрированному с кошельком. Однако мобильный кошелек доступен не только на Saga. Тот же адаптер мобильного кошелька предоставляет стандартный процесс, который упрощает кроссплатформенную разработку. Так чем же выделяется Saga?
В качестве обязательного этапа получения Saga пользователи выпускают Saga Genesis Token — непередаваемый NFT. Коллекция токенов содержит точный список основных адресов пользователей Solana Saga и позволяет проводить активности для сообщества. Благодаря Saga Genesis Token раздавать аирдропы сообществу стало проще, чем когда-либо. Но кошельки пользователей быстро наполняются, словно секонд-хенд, поэтому пора рассмотреть специализированные способы взаимодействия с сообществом владельцев Saga. Один из вариантов — разработка dApp с доступом по токенам, которые предоставляют пользователям персонализированный и эксклюзивный опыт.
Доступ по токенам позволяет показывать информацию на стороне клиента в зависимости от того, какими токенами владеет подключенный кошелек. Он определяет, может ли пользователь получить доступ к информации, и позволяет предоставлять эксклюзивный доступ к таким сообществам, как Saga DAO. В этом руководстве мы создадим dApp в Solana с доступом по токенам, используя DAS API от Helius и React Native. В качестве коллекции для проверки возьмем Saga Genesis Token. Руководство и демоверсию можно адаптировать для любой группы токенов, изменив их адреса и условия. Репозиторий GitHub доступен здесь: @helius_labs/saga-token-gating-tutorial.
Настройка окружения
В этом руководстве используется ПК, подключенный к Solana Saga кабелем USBC. Если Saga недоступен, подойдет эмулятор Android или другое Android-устройство. Эти шаги можно пропустить, если вы тестируете приложение на Saga с включенным режимом разработчика, а на ПК уже установлены инструменты Android SDK и последняя версия NodeJS.
Чтобы настроить Saga для мобильной разработки, откройте настройки и найдите пункт Номер сборки. Нажмите на него 7 раз, пока не появится сообщение «Теперь вы разработчик!». Найдите и включите Параметры разработчика, затем в том же раскрывающемся меню включите Отладку по USB.
Убедитесь, что на компьютере установлен NodeJS версии v20.9.0. Установите инструмент Android SDK и задайте переменную ANDROID_HOME.
С помощью Git Bash клонируйте репозиторий демоверсии из GitHub Helius и откройте его в редакторе кода. В командной строке Git Bash перейдите с помощью cd в папку app и выполните yarn, чтобы установить приложение. Чтобы запустить приложение, подключите устройство или запустите эмулятор Android, а затем введите следующую команду.
yarn react-native run-androidДоступ по токенам для Solana Saga
Общий обзор процесса проверки доступа по токенам:
- Пользователь авторизует сеанс через свой кошелек и передает dApp свой публичный ключ.
- dApp получает данные из эндпоинта searchAssets в DAS API.
- JSON из ответа деструктурируется для доступа к результатам.
- Результаты проверяются, после чего определяется владение токеном.
- Задается состояние проверки, и клиент отображается соответствующим образом.
Перейдем к коду. Сначала сформируем запрос к DAS API от Helius, чтобы получить информацию о пользователе и наличии у него Solana Genesis Token.
Чтобы получить информацию о Saga Genesis Token, переменной SagaGenesisToken присваивается адрес токена коллекции. Чтобы настроить доступ для других коллекций, замените эту переменную другим адресом токена.
Для запроса требуется ключ Helius API, который намеренно не указан в руководстве. Для оптимальной защиты ключа используйте прокси-сервер для перенаправления запросов. Репозиторий @helius_labs/helius_rpc_proxy содержит Cloudflare worker, который можно развернуть одним щелчком и использовать в качестве RPC URL, скрыв ключ API.
import { PublicKey } from "@solana/web3.js";
export default async function findSagaGenesisToken(address: PublicKey) {
// Replace this with the token address you want to gate for
const SagaGenesisToken = '46pcSL5gmjBrPqGKFaLbbCmR6iVuLJbnQy13hAe7s6CC';
// Populate your Helius API key
const HELIUS_APIKEY = '';
const url = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_APIKEY}`
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
id: 'my-id',
method: 'searchAssets',
params: {
ownerAddress: address.toString(),
grouping: ["collection", SagaGenesisToken],
page: 1,
limit: 10
},
}),
});
const { result } = await response.json();
return (result.items)
};Функция findSagaGenesisToken принимает адрес кошелька пользователя в качестве аргумента и использует его в параметрах POST-запроса, отправляемого на RPC URL Helius.
Этот запрос использует метод searchAssets для поиска активов, принадлежащих ownerAddress и сгруппированных по определенному collection. Затем ответ API преобразуется в JSON и деструктурируется для доступа к результату.
Ниже приведен ответ, подтверждающий владение Saga Genesis Token:
{
"items":[
{
"authorities":[Array],
"burnt":false,
"compression":[Object],
"content":[Object],
"creators":[Array],
"grouping":[Array],
"id":[Token_Address],
"interface":"V1_NFT",
"mutable":true,
"ownership":[Object],
"royalty":[Object],
"supply":[Object]
}
],
"limit":10,
"page":1,
"total":1
}А это ответ для кошелька без Saga Genesis Token:
{
"items":[],
"limit":10,
"page":1,
"total":0
}Чтобы использовать эту функцию, перейдите в папку screens и найдите MainScreen.tsx. Приложение отображает этот функциональный компонент как основной экран. В него можно импортировать и добавлять в пользовательский интерфейс дополнительные компоненты, включая эту функцию.
Чтобы вызвать функцию проверки доступа по токенам, импортируйте и поместите функцию findSagaGenesisToken в функцию обратного вызова. Здесь функция называется handleConnectPress(), поскольку обратный вызов запускается, когда пользователь нажимает кнопку подключения.
// Checks if the user's wallet has a Saga Genesis Token
const handleConnectPress = useCallback(async () => {
return await transact(async (wallet: Web3MobileWallet) => {
const authorizationResult = await authorizeSession(wallet);
const message = "Confirm that you own this wallet.";
const messageBuffer = new Uint8Array(
message.split("").map((c) => c.charCodeAt(0))
);
const signedMessages = await wallet.signMessages({
addresses: [authorizationResult.address],
payloads: [messageBuffer],
});
const verified = sign.detached.verify(
messageBuffer,
signedMessages[0],
authorizationResult.publicKey.toBytes()
);
if (verified) {
const result = await findSagaGenesisToken(authorizationResult.publicKey);
// Checks that user has exactly 1 Saga Genesis Token
if (result.length === 1) {
setVerified(true);
} else {
setVerified(false);
}
} else {
setVerified(false);
}
});
}, [authorizeSession]);В асинхронной функции обратного вызова вызовите функцию transact из @solana-mobile/mobile-wallet-adapter, чтобы получить доступ к объекту Web3MobileWallet, который можно использовать для авторизации сеанса.
Протокол откроет один из доступных кошельков — по умолчанию Phantom — и запустит сеанс. Пользователь должен авторизовать приложение в интерфейсе кошелька, после чего вернется в приложение. Чтобы подтвердить владение кошельком, пользователь должен подписать сообщение.
В рамках этого руководства проверка выполняется на стороне сервера. Однако в рабочих приложениях сообщение необходимо проверять на бэкенде через API, чтобы надежно подтвердить владение аккаунтом.
После авторизации кошелька пользователя его публичный ключ можно получить путем деструктуризации результатов авторизации. Теперь publicKey можно использовать для проверки владения Saga Genesis Token.
Вызов findSagaGenesisToken с публичным ключом пользователя отправляет запрос в DAS API и возвращает найденные токены в виде массива. Если у пользователя есть ровно один Saga Genesis Token, задайте для состояния проверки значение true. В противном случае задайте значение false.
Используйте состояние проверки для условного отображения экранов и компонентов. В этом руководстве предусмотрены следующие состояния: ожидание подключения, проверка пройдена и проверка не пройдена.
Логику условного отображения можно найти в Mainscreen.tsx. Это упрощенный пример того, как отображать информацию в зависимости от состояния проверки. Репозиторий GitHub можно изменить или использовать в качестве основы для дальнейшей персонализации. Например, можно связать проверку доступа по токенам с навигацией React Native, чтобы условно переходить между экранами.
Применение доступа по токенам
Доступ по токенам — новая концепция Web3, в которой владение активом дает право на доступ к контенту. Эту логику можно применять в таких сферах, как безопасность, потребительские товары, публикация и распространение контента.
Инструменты безопасности Discord используют доступ по токенам, чтобы предоставлять участникам сообществ ограниченный доступ в зависимости от наличия и количества принадлежащих им токенов.
В сфере потребительских товаров и услуг доступ по токенам позволяет продавцам предлагать сообществам купоны, скидки и специальные условия покупки.
Это повышает практическую ценность владения активами и позволяет использовать цифровые активы для реальных задач.
Владение активами расширяет возможности медиа и контентных платформ, позволяя монетизировать владение и создавать персонализированный опыт.
Вот несколько примеров того, что можно создать с помощью доступа по токенам:
- Эксклюзивные реферальные коды и купоны
- Блог в стиле Substack
- Получение аирдропов
- Приватные панели управления
- dApp с игровым повествованием
- Секретные групповые чаты
- Ончейн-опрос
- Персонализированные игровые преимущества и события
Преимущество доступа по токенам через DAS API заключается в том, что можно использовать любой токен. Например, приложение DeFi может требовать от пользователей наличия минимального количества Solana для получения доступа. Аналогично групповой чат NFT может требовать от участников подтверждения владения минимальным количеством токенов. С помощью той же логики DAS API можно ограничить доступ к dApp на основе токенов SPL, NFT, SFT, SBT и cNFT.
Заключение
В этом руководстве представлен упрощенный обзор использования DAS API для реализации доступа по токенам в dApp, созданных с помощью React Native. Эту логику можно применить к любой коллекции или токенам и адаптировать к конкретным сценариям. Доступ по токенам дает сообществам эксклюзивность и дополнительную ценность. Saga Genesis Token позволяет проводить аирдропы для активного сообщества и открывает множество возможностей для авторов и пользователей. Web3 предлагает самостоятельное хранение цифровых активов. Благодаря этому появляются сообщества, объединенные владением активами. Solana Saga связывает физические и цифровые технологии, создавая нативный для Solana пользовательский опыт. Поэтому приложения должны улучшать этот опыт и вознаграждать пользователей. Помимо финансовой выгоды, доступ по токенам способствует практическому применению цифровых активов в новую эпоху интернета.
Хотите узнать больше о разработке мобильных dApp для Saga? Присоединяйтесь к более чем 15 000 владельцев Saga в Saga DAO, чтобы первыми узнавать о новых dApp, преимуществах и наградах. Если это руководство по доступу с помощью токенов подсказало вам идеи для реализации, обсудите их с сообществом разработчиков в Helius Discord и следите за новостями в блоге Helius. Ускоряйте внедрение блокчейна и создавайте продукты на базе самых производительных технологий вместе с Helius.
Дополнительные ресурсы
- Репозиторий демоверсии – GitHub Helius
- Digital Asset Standard (DAS) API – универсальный API для активов от Helius
- Практикум: мобильная разработка – виртуальный практикум от Solana Foundation
- Шаблон мобильного DApp для Solana – автор: Mike Sulistio, Solana Mobile
- Адаптер мобильного кошелька – кроссплатформенный адаптер кошельков
- Публикация DApp – как опубликовать приложение в DApp Store
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


