BTCC / BTCC Square / BeincryptoRU /
Создаем приложение на Solana без навыков программирования: Гид для новичков в 2025

Создаем приложение на Solana без навыков программирования: Гид для новичков в 2025

Published:
2025-07-02 16:40:00
12
2

Как создать приложение на Solana, если ты не программист

Хотите запустить свой проект на блокчейне Solana, но не знаете код? Не проблема. Платформа давно перестала быть эксклюзивным клубом разработчиков.

Нулевой порог входа: инструменты для «нон-технарей»

No-code платформы вроде Solana Studio и SharkyFi позволяют собирать dApps как конструктор Lego — drag-and-drop интерфейс и готовые шаблоны смарт-контрактов. Комиссии сети упали на 67% после обновления Firedancer — идеальный момент для экспериментов.

Где подводные камни?

Без базового понимания web3 вы рискуете создать «пустышку» — 83% таких проектов закрываются в первые 3 месяца (данные Solana Foundation). Но курсы вроде Solana Bootcamp требуют всего 15 часов обучения.

Финишная прямая: ваш токен может стоить дороже мемкоина от какого-нибудь хедж-фонда. Главное — начать.

Шаг 1. Подготовка окружения

1.1 Устанавливаем Node.js (LTS 20 или 18)

Node 20 — актуальный LTS, но React Native 0.73 официально поддерживает и Node 18. Выберите тот, что проще поставить в вашем окружении.

# macOS / Linux (через nvm) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash nvm install --lts # LTS=20.x nvm use --lts # Windows (через winget) winget install OpenJS.NodeJS.LTS

Проверяем:

node --version # v20.xx (или v18.xx)

1.2 Yarn Classic через Corepack

Corepack поставляется вместе с Node. Активируем его и включаем стабильную Yarn 1.22 (на RN сборках она надежнее Yarn Berry).

corepack enable # включает Corepack corepack prepare [email protected] --activate

Проверяем:

yarn --version # 1.22.19

1.3 Git

Скачайте с https://git-scm.com и установите.

git --version # git 2.45.1

1.4 Java JDK 17

React Native 0.73 использует Gradle 8, которому нужна Java ≥17.

# macOS (Homebrew) brew install openjdk@17 # Ubuntu sudo apt install openjdk-17-jdk

Задайте переменную JAVA_HOME и добавьте $JAVA_HOME/bin в PATH.

1.5 Android Studio + SDK

  • Установите Android Studio (https://developer.android.com/studio).
  • В SDK Manager скачайте Android 14 (API 34) + Build‑Tools 34.0.x.
  • Добавьте переменные окружения: ANDROID_HOME=<путь_до>/Android/Sdk PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
  • Проверьте: adb --version.
  • 1.6 Кошельки для тестов

    ПлатформаКошелекСсылка
    iOS/AndroidPhantomhttps://phantom.app/download
    iOS/AndroidBackpackhttps://backpack.app
    Android‑эмуляторFake Wallet (из примеров Solana Mobile)https://docs.solanamobile.com/react-native/first_app_tutorial

    Включите сеть Devnet в настройках кошелька.

    1.7 Обязательные polyfill‑библиотеки

    @solana/web3.js ожидает глобальные объекты crypto, Buffer, URL. В React Native их нет. Ставим:

    yarn add react-native-get-random-values buffer react-native-url-polyfill

    Подключаем их перед любыми другими импортами — в index.js или App.js:

    import 'react-native-get-random-values'; import { Buffer } from 'buffer'; global.Buffer = Buffer; import 'react-native-url-polyfill/auto';

    Шаг 2. Создаем проект React Native

    npx react-native@latest init MySolanaApp # создаст проект 0.73.x cd MySolanaApp

    Совет: в имени проекта избегайте пробелов и спецсимволов.

    Шаг 3. Устанавливаем зависимости Solana

    yarn add \ @solana/[email protected] \ @solana/[email protected] \ @solana/[email protected] \ @solana-mobile/[email protected] \ @solana-mobile/[email protected] \ @metaplex-foundation/[email protected]
    • Почему именно они?
      • web3.js 1.98.2 — последняя LTS версия JS‑SDK Solana.
      • wallet-adapter-react 0.15.39 — React‑обертка адаптеров.
      • wallet-adapter-mobile 2.2.2 — MWA 2.0 для React Native.
      • Metaplex JS 0.18.0 — упрощенный SDK для NFT (уже архивный, но по‑прежнему самый простой для старта).

    Важно: готового UI для Jupiter (обмен токенов) в React Native нет. Для свопов используйте пример Jupiter Core RN либо REST API.

    Шаг 4. Подключаем сеть и Mobile Wallet Adapter

    Откройте App.js и замените содержимое:

    import React from 'react'; import { View, StyleSheet } from 'react-native'; import { clusterApiUrl } from '@solana/web3.js'; import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react'; import { MobileWalletAdapter } from '@solana-mobile/wallet-adapter-mobile'; /* --- ваши компоненты --- */ import ConnectWalletButton from './ConnectWalletButton'; import AccountInfo from './AccountInfo'; import MintExample from './MintExample'; export default function App() { const endpoint = clusterApiUrl('devnet'); // Единственный адаптер, необходимый в React Native const wallets = [ new MobileWalletAdapter({ appIdentity: { name: 'MySolanaApp' } }), ]; return ( <ConnectionProvider endpoint={endpoint} config={{ commitment: 'processed' }}> <WalletProvider wallets={wallets} autoConnect> <View style={styles.container}> <ConnectWalletButton /> <AccountInfo /> <MintExample /> </View> </WalletProvider> </ConnectionProvider> ); } const styles = StyleSheet.create({ container: { flex: 1, padding: 16 }, });
    • autoConnect пытается восстановить последний выбранный кошелек.
    • Чтобы перейти на Mainnet, поменяйте clusterApiUrl('mainnet-beta').

    Шаг 5. Кнопка подключения кошелька (ConnectWalletButton.js)

    import React from 'react'; import { Button, Text, View } from 'react-native'; import { useWallet } from '@solana/wallet-adapter-react'; export default function ConnectWalletButton() { const { adapter, connect, connecting, connected, publicKey } = useWallet(); if (!adapter) return <Text>Подготавливаем адаптеры…</Text>; return ( <View style={{ marginBottom: 16 }}> <Button title={connected ? 'Кошелек подключен' : connecting ? 'Подключаем…' : 'Подключить кошелек'} onPress={() => connect().catch(err => alert('Ошибка: ' + err.message))} disabled={!adapter.ready || connecting} /> {connected && ( <Text style={{ marginTop: 8 }}>Адрес: {publicKey.toBase58()}</Text> )} </View> ); }

    Шаг 6. Баланс и NFT (AccountInfo.js)

    import React, { useEffect, useState } from 'react'; import { View, Text, FlatList } from 'react-native'; import { Connection, LAMPORTS_PER_SOL, clusterApiUrl, PublicKey } from '@solana/web3.js'; import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; import { useWallet } from '@solana/wallet-adapter-react'; import { Metaplex, walletAdapterIdentity } from '@metaplex-foundation/js'; const connection = new Connection(clusterApiUrl('devnet')); export default function AccountInfo() { const { publicKey, wallet } = useWallet(); const [balance, setBalance] = useState(0); const [tokens, setTokens] = useState([]); useEffect(() => { if (!publicKey || !wallet) return; const metaplex = Metaplex.make(connection).use(walletAdapterIdentity(wallet)); // Баланс SOL connection.getBalance(publicKey).then(lamports => { setBalance(lamports / LAMPORTS_PER_SOL); }); // Список токенов / NFT connection .getParsedTokenAccountsByOwner(publicKey, { programId: TOKEN_PROGRAM_ID }) .then(({ value }) => value.filter(v => +v.account.data.parsed.info.tokenAmount.amount > 0)) .then(async list => { const detailed = await Promise.all( list.map(async acc => { const mintStr = acc.account.data.parsed.info.mint; const mint = new PublicKey(mintStr); try { const nft = await metaplex.nfts().findByMint({ mintAddress: mint }).run(); return { mint: mintStr, name: nft.name }; } catch { return { mint: mintStr }; } }), ); setTokens(detailed); }); }, [publicKey, wallet]); return ( <View style={{ marginBottom: 16 }}> <Text>Баланс SOL: {balance.toFixed(4)}</Text> <Text style={{ marginTop: 8 }}>Токены / NFT:</Text> <FlatList data={tokens} keyExtractor={item => item.mint} renderItem={({ item }) => <Text>- {item.name || `Mint: ${item.mint}`}</Text>} /> </View> ); }

    Шаг 7. Минтим свое NFT (MintExample.js)

    import React from 'react'; import { Button } from 'react-native'; import { useWallet } from '@solana/wallet-adapter-react'; import { Connection, clusterApiUrl } from '@solana/web3.js'; import { Metaplex, walletAdapterIdentity } from '@metaplex-foundation/js'; export default function MintExample() { const { wallet, publicKey } = useWallet(); const connection = new Connection(clusterApiUrl('devnet')); const mintNFT = async () => { if (!wallet || !publicKey) return alert('Сначала подключите кошелек'); const metaplex = Metaplex.make(connection).use(walletAdapterIdentity(wallet)); try { const { nft } = await metaplex.nfts().create({ uri: 'https://example.com/metadata.json', // замените на ваш JSON name: 'Мое первое NFT', sellerFeeBasisPoints: 500, // 5 % роялти }).run(); alert('NFT создано! Адрес: ' + nft.address.toBase58()); } catch (err) { alert('Ошибка: ' + err.message); } }; return <Button title="Создать NFT" onPress={mintNFT} />; }

    Примечание: библиотека Metaplex JS с марта 2025 архивирована и заменена Umi‑‑пакетами, но для первого знакомства она остается самой простой. Для production‑кода изучите umi и пакет @metaplex-foundation/mpl-core.

    Шаг 8. Сборка и запуск

  • Старт Metro с очисткой кеша: npx react-native start --reset-cache
  • iOS (macOS): cd ios && arch -x86_64 pod install && cd .. npx react-native run-ios
  • Android: npx react-native run-android
  • Проверяем работу

  • Подключите Phantom / Backpack на устройстве.
  • Убедитесь, что отображается баланс SOL.
  • Нажмите «Создать NFT» — после подтверждения транзакции в кошельке NFT появится на Devnet.
  • Типичные ошибки

    СообщениеПричинаРешение
    ReferenceError: Buffer is not definedpolyfill buffer не подключенДобавьте в самом верху index.js импорт buffer.
    Invariant Violation: attempted to call missing method при запуске Androidзабыли включить JDK 17Проверьте java --version.
    walletAdapterIdentity: identity not providedMetaplex вызывается до подключения кошелькаСоздавайте экземпляр Metaplex после того, как wallet станет доступен.

    Что дальше

    • Изучите пример Jupiter Core RN, чтобы добавить обмен токенов.
    • Посмотрите на Umi‑пакеты (@metaplex-foundation/mpl-core, umi-signer-wallet-adapters) — именно они будут поддерживаться дальше.

    Зачем нужны dApps на Solana

    DApp на Solana (децентрализованное приложение) — это приложение, в котором логика, данные и пользовательские взаимодействия лежат прямо в блокчейне Solana или на смарт-контрактах, а не на традиционных серверах. За счет высокой пропускной способности (до десятков тысяч транзакций в секунду) и низких комиссий Solana позволяет создавать быстрые, масштабируемые и дешевые приложения.

    Зачем нужны DApp’ы

    • Децентрализация и доверие. Владея смарт-контрактом, вы можете быть уверены, что код выполнится точно так, как заложено, без возможности «откатить» транзакцию или изменить правила извне.
    • Автоматизация и прозрачность. Все операции записываются в публичный блокчейн, что обеспечивает проверяемость и защищенность данных.
    • Низкие комиссии и скорость. Solana предлагает комиссии в доли цента и время подтверждения транзакции менее секунды.

    Как зарабатывать на Solana-dApps

  • Разработка и аудит. Компании и проекты платят за написание и проверку смарт-контрактов.
  • Сбор комиссий. Внутриприложения можно брать процент от операций (обмен, займы, торговля NFT).
  • Токеномика. Выпуск собственного токена проекта и его листинг на биржах: рост его цены приносит прибыль держателям и команде разработчиков.
  • Пулы ликвидности и стейкинг. Вы можете вложить свои активы в пулы DeFi-протоколов на Solana и получать вознаграждение за предоставление ликвидности или делегирование токенов.
  • Хотите стать частью большого и дружного сообщества BIC? Тогда подписывайтесь на нашу группу в «Телеграме» — там вас ждет общение с криптоэнтузиастами, помощь от наших экспертов и эксклюзивные комментарии опытных аналитиков.

    |Square

    Установите приложение BTCC, чтобы начать свое путешествие в мир крипты

    Начать сегодня Отсканируйте, чтобы присоединиться к 100 млн + наших пользователей