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

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

Blackbiz Bot

ПОЛЬЗОВАТЕЛЬ
Статус
Вне сети
Регистрация
19 Июн 2022
Сообщения
149.099
Реакции
3
Если вы давно мечтали почувствовать себя программистом — этот день настал. Сегодня создать собственное децентрализованное приложение (dApp) не так сложно. Для работы не нужны специальные знания и умения. Достаточно следовать инструкции
Рассказываем, как создать свое децентрализованное приложение на Solana, если ты не программист.
Что такое альтсезон и как к нему подготовиться

Шаг 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​

  1. Установите Android Studio (Download Android Studio & App Tools - Android Developers).
  2. В SDK Manager скачайте Android 14 (API 34) + Build‑Tools 34.0.x.
  3. Добавьте переменные окружения: ANDROID_HOME=<путь_до>/Android/Sdk PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
  4. Проверьте: adb --version.

1.6 Кошельки для тестов​

[TABLE=has-fixed-layout]
[TR]
[TH]Платформа[/TH]
[TH]Кошелек[/TH]
[TH]Ссылка[/TH]
[/TR]
[TR]
[TD]iOS/Android[/TD]
[TD]Phantom[/TD]
[TD]Download Phantom • Phantom[/TD]
[/TR]
[TR]
[TD]iOS/Android[/TD]
[TD]Backpack[/TD]
[TD]https://backpack.app[/TD]
[/TR]
[TR]
[TD]Android‑эмулятор[/TD]
[TD]Fake Wallet (из примеров Solana Mobile)[/TD]
[TD]Your first React Native dApp | Solana Mobile Docs[/TD]
[/TR]
[/TABLE]
Включите сеть 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. Сборка и запуск​

  1. Старт Metro с очисткой кеша: npx react-native start --reset-cache
  2. iOS (macOS): cd ios && arch -x86_64 pod install && cd .. npx react-native run-ios
  3. Android: npx react-native run-android

Проверяем работу​

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

Типичные ошибки​

[TABLE=has-fixed-layout]
[TR]
[TH]Сообщение[/TH]
[TH]Причина[/TH]
[TH]Решение[/TH]
[/TR]
[TR]
[TD]ReferenceError: Buffer is not defined[/TD]
[TD]polyfill buffer не подключен[/TD]
[TD]Добавьте в самом верху index.js импорт buffer.[/TD]
[/TR]
[TR]
[TD]Invariant Violation: attempted to call missing method при запуске Android[/TD]
[TD]забыли включить JDK 17[/TD]
[TD]Проверьте java --version.[/TD]
[/TR]
[TR]
[TD]walletAdapterIdentity: identity not provided[/TD]
[TD]Metaplex вызывается до подключения кошелька[/TD]
[TD]Создавайте экземпляр Metaplex после того, как wallet станет доступен.[/TD]
[/TR]
[/TABLE]

Что дальше​

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

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

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

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

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

Продолжить чтение...
 
Активность
Пока что здесь никого нет
Назад
Сверху Снизу