
Contrôle d’accès par token sur Solana — Tutoriel Solana Mobile
Introduction
Début 2023, Solana Mobile a lancé un smartphone basé sur la blockchain. Avec désormais plus de 15 000 activations, le Solana Saga est un appareil Android personnalisé qui renforce la sécurité on-chain grâce à un coffre-fort de seed intégré au niveau de la puce et à l’expérience du portefeuille. Toutefois, l’expérience de portefeuille mobile n’est pas propre au Saga. Le même adaptateur de portefeuille mobile fournit un processus standard qui réduit la complexité pour les développeurs publiant leurs applications sur plusieurs plateformes. Alors, qu’est-ce qui distingue le Saga ?
Comme rite de passage pour devenir propriétaire d’un Saga, les utilisateurs créent le Saga Genesis Token, un token NFT soulbound. Cette collection de tokens fournit une liste précise des adresses principales des utilisateurs du Solana Saga et permet de lancer des activations auprès de la communauté. Le Saga Genesis Token a rendu les airdrops à une communauté plus simples que jamais. Cependant, les portefeuilles des utilisateurs se remplissant rapidement comme les rayons d’une friperie, il est peut-être temps d’explorer des solutions sur mesure pour mobiliser la communauté des détenteurs de Saga. Une possibilité consiste à développer des dApps dont l’accès est conditionné par des tokens et qui proposent aux utilisateurs des expériences personnalisées et exclusives.
Le contrôle d’accès par token permet d’afficher des informations côté client en fonction des tokens détenus par le portefeuille connecté. Il détermine si une personne peut accéder à certaines informations et peut servir à offrir un accès exclusif à des communautés comme Saga DAO. Ce tutoriel explique comment créer une dApp Solana avec contrôle d’accès par token à l’aide de la DAS API de Helius et de React Native, en utilisant le Saga Genesis Token comme exemple de collection d’accès. Vous pouvez adapter ce tutoriel et cette démo afin de contrôler l’accès pour n’importe quel groupe de tokens en modifiant leurs adresses et les conditions. Le dépôt GitHub est disponible ici : @helius_labs/saga-token-gating-tutorial.
Configuration de l’environnement
Ce tutoriel utilise un PC connecté au Solana Saga par un câble USB-C. Si vous ne disposez pas d’un Saga, un émulateur Android ou un appareil Android suffit également. Vous pouvez ignorer ces étapes si vous effectuez les tests sur un Saga dont le mode développeur est activé, avec les outils du SDK Android et la dernière version de NodeJS installés sur le PC.
Pour configurer un Saga pour le développement mobile, accédez aux paramètres et recherchez Numéro de build. Appuyez 7 fois sur cette option jusqu’à ce que la fenêtre contextuelle « Vous êtes maintenant développeur ! » apparaisse. Recherchez et activez les Options pour les développeurs, puis activez le Débogage USB dans le même menu déroulant.
Sur l’ordinateur, vérifiez que NodeJS est installé et mis à niveau vers la version v20.9.0. Installez l’outil Android SDK et définissez la variable ANDROID_HOME.
À l’aide de Git Bash, clonez le dépôt de démonstration depuis le GitHub de Helius et ouvrez-le dans un éditeur de code. Dans l’invite de commandes Git Bash, utilisez cd pour accéder au dossier app, puis exécutez yarn afin d’installer l’application. Pour lancer l’application, saisissez la commande suivante lorsqu’un appareil est connecté ou que l’émulateur Android est en cours d’exécution.
yarn react-native run-androidContrôle d’accès par token pour Solana Saga
Voici une vue d’ensemble du processus de contrôle d’accès par token :
- Un utilisateur autorise une session avec son portefeuille, ce qui fournit sa clé publique à la dApp.
- La dApp récupère les données depuis le point de terminaison searchAssets de la DAS API.
- Le JSON de la réponse est déstructuré pour accéder aux résultats.
- Les résultats sont validés et la détention du token est déterminée.
- L’état de vérification est défini et le client est affiché en conséquence.
Plongeons dans le code. Commençons par construire la requête adressée à la DAS API de Helius pour recevoir des informations sur l’utilisateur et vérifier s’il détient le Solana Genesis Token.
Pour recevoir des informations sur le Saga Genesis Token, la variable SagaGenesisToken est définie sur l’adresse du token de la collection. Remplacez cette variable par l’adresse d’un autre token pour contrôler l’accès à partir d’autres collections.
Une clé Helius API est requise pour la requête et a volontairement été laissée vide dans ce tutoriel. La meilleure pratique pour sécuriser la clé consiste à utiliser un serveur proxy afin de transférer les requêtes. Le dépôt @helius_labs/helius_rpc_proxy contient un worker Cloudflare qui peut être déployé en un clic et utilisé comme URL RPC tout en masquant la clé 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)
};La fonction findSagaGenesisToken prend l’adresse du portefeuille de l’utilisateur comme argument et l’utilise dans les paramètres de la requête POST envoyée à l’URL RPC de Helius.
Cette requête utilise la méthode searchAssets pour rechercher les actifs détenus par ownerAddress et regroupés selon un collection spécifique. La réponse de l’API est ensuite structurée au format JSON et déstructurée afin d’accéder au résultat.
Voici une réponse indiquant que le Saga Genesis Token est détenu :
{
"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
}Voici la réponse pour un portefeuille qui ne détient pas le Saga Genesis Token :
{
"items":[],
"limit":10,
"page":1,
"total":0
}Pour utiliser cette fonction, accédez au dossier screens afin de trouver MainScreen.tsx. L’application affiche ce composant fonctionnel comme écran principal, où des composants supplémentaires tels que la fonction peuvent être importés et utilisés dans l’interface utilisateur.
Pour appeler la fonction de contrôle d’accès par token, importez et placez la fonction findSagaGenesisToken dans une fonction de rappel. Ici, la fonction est nommée handleConnectPress(), car la fonction de rappel est invoquée lorsque les utilisateurs appuient sur le bouton de connexion.
// 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]);Dans la fonction de rappel asynchrone, invoquez la fonction transact de @solana-mobile/mobile-wallet-adapter pour exposer l’objet Web3MobileWallet, qui peut servir à autoriser une session.
Le protocole parcourt les portefeuilles disponibles, avec Phantom comme choix par défaut, puis démarre une session au cours de laquelle l’utilisateur doit autoriser l’application dans l’interface de son portefeuille avant d’être redirigé vers l’application. L’utilisateur doit signer un message afin de confirmer qu’il détient le portefeuille.
Dans le cadre de ce tutoriel, la vérification s’effectue côté serveur. Toutefois, dans les applications en production, le message doit être vérifié dans le backend par l’intermédiaire d’une API afin de garantir la légitimité de la propriété du compte.
Une fois le portefeuille de l’utilisateur autorisé, sa clé publique peut être récupérée en déstructurant les résultats de l’autorisation. Sa publicKey peut alors être utilisée pour rechercher s’il détient le Saga Genesis Token.
L’appel de findSagaGenesisToken avec la clé publique de l’utilisateur envoie une requête à la DAS API et renvoie les tokens trouvés dans un tableau. Si l’utilisateur possède exactement un Saga Genesis Token, définissez l’état de vérification sur true. Sinon, définissez-le sur false.
Utilisez l’état de vérification pour afficher les écrans et les composants de manière conditionnelle. Dans ce tutoriel, les états sont les suivants : en attente de connexion, vérifié et non vérifié.
Consultez la logique de rendu conditionnel dans Mainscreen.tsx pour obtenir une représentation simplifiée de la manière dont les informations peuvent être affichées en fonction de l’état de vérification. Le dépôt GitHub peut être modifié ou utilisé comme référence pour une personnalisation plus poussée. Une implémentation possible consisterait à relier le contrôle d’accès par token à React Native Navigation afin de naviguer de manière conditionnelle entre les écrans.
Applications du contrôle d’accès par token
Le contrôle d’accès par token est un nouveau concept introduit avec le Web3, dans lequel la détention d’actifs accorde des droits d’accès à du contenu. Cette logique s’applique à des secteurs tels que la sécurité, les biens de consommation, l’édition et la distribution.
Les outils de sécurité de Discord utilisent le contrôle d’accès par token pour accorder aux communautés un accès limité selon les tokens détenus et leur quantité.
Dans le domaine des biens et services de consommation, le contrôle d’accès par token permet aux commerçants de proposer aux communautés des coupons, des remises et des offres commerciales.
Cela renforce l’utilité de la détention d’actifs et offre une manière plus concrète d’utiliser des actifs numériques pour des applications réelles.
La détention d’actifs stimule les secteurs des médias et du contenu en monétisant la propriété et en offrant des expériences personnalisées.
Voici quelques exemples de ce que vous pouvez créer avec le contrôle d’accès par token :
- Codes de parrainage et coupons exclusifs
- Blog de type Substack
- Réclamations d’airdrops
- Tableaux de bord privés
- dApps narratives gamifiées
- Discussions de groupe secrètes
- Sondage on-chain
- Avantages et événements de jeu personnalisés
L’intérêt du contrôle d’accès par token avec la DAS API est qu’il fonctionne avec n’importe quel token. Une application DeFi pourrait exiger que les utilisateurs détiennent une quantité minimale de Solana pour y accéder, à l’image d’une discussion de groupe NFT qui demanderait à ses membres de confirmer qu’ils détiennent un nombre minimal de tokens. La même logique et la DAS API permettent de contrôler l’accès à une dApp avec des tokens SPL, des NFT, des SFT, des SBT ou des cNFT.
Conclusion
Ce tutoriel présente de manière simplifiée comment utiliser la DAS API pour contrôler par token l’accès aux dApps créées avec React Native. Cette logique peut être appliquée à n’importe quelle collection ou à n’importe quels tokens, puis adaptée à des cas d’usage précis. Les expériences avec contrôle d’accès par token apportent exclusivité et valeur aux communautés. Le Saga Genesis Token permet de proposer des airdrops à une communauté solide et ouvre de nombreuses possibilités aux créateurs comme aux utilisateurs. Le Web3 introduit la détention auto-dépositaire des biens numériques. Cela favorise l’émergence de communautés unies par les actifs qu’elles détiennent. Alors que le Solana Saga associe technologies physiques et numériques pour offrir une expérience native de Solana, des applications doivent être développées pour enrichir et récompenser cette expérience. Au-delà des gains, le contrôle d’accès par token favorise l’utilisation de la propriété d’actifs numériques dans cette nouvelle ère d’Internet.
Vous souhaitez découvrir davantage de contenu sur le développement de dApps mobiles pour Saga ? Rejoignez les plus de 15 000 propriétaires de Saga sur Saga DAO et soyez parmi les premiers à connaître les dernières sorties de dApps, les nouveaux avantages et les récompenses. Si ce tutoriel sur le contrôle d’accès par token vous a donné des idées d’implémentation, échangez avec la communauté des développeurs sur le Discord de Helius et suivez les dernières actualités sur le blog de Helius. Accélérez l’adoption de la blockchain et développez sur la technologie la plus performante avec Helius.
Ressources supplémentaires
- Dépôt de démonstration – GitHub de Helius
- API Digital Asset Standard (DAS) – API tout-en-un pour les actifs, propulsée par Helius
- Atelier : développement mobile – Atelier virtuel de Solana Foundation
- Structure de dApp Solana Mobile – Par Mike Sulistio, Solana Mobile
- Adaptateur de portefeuille mobile – Adaptateur de portefeuille multiplateforme
- Publication de dApps – Comment publier sur le DApp Store
Articles associés
Abonnez-vous à Helius
Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication


