Blackbiz Bot
ПОЛЬЗОВАТЕЛЬ
- Статус
- Вне сети
- Регистрация
- 19 Июн 2022
- Сообщения
- 148.414
- Реакции
- 3
- Автор темы
- #1
Если вы давно мечтали почувствовать себя программистом — этот день настал. Сегодня создать собственное децентрализованное приложение (dApp) не так сложно. Для работы не нужны специальные знания и умения. Достаточно следовать инструкции
Рассказываем, как создать свое децентрализованное приложение на Solana, если ты не программист.
Что такое альтсезон и как к нему подготовиться
Проверяем:
Проверяем:
Задайте переменную
Включите сеть Devnet в настройках кошелька.
Подключаем их перед любыми другими импортами — в
Шаг 5. Кнопка подключения кошелька (
Шаг 6. Баланс и NFT (
Шаг 7. Минтим свое NFT (
Зачем нужны DApp’ы
The post Как создать приложение на Solana, если ты не программист appeared first on BeInCrypto.
Продолжить чтение...
Рассказываем, как создать свое децентрализованное приложение на 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 yarn@1.22.19 --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 (Download Android Studio & App Tools - Android Developers).
- В 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/Android | Phantom | Download Phantom • Phantom |
| iOS/Android | Backpack | https://backpack.app |
| Android‑эмулятор | Fake Wallet (из примеров Solana Mobile) | Your first React Native dApp | Solana Mobile Docs |
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/web3.js@1.98.2 \
@solana/spl-token@0.4.13 \
@solana/wallet-adapter-react@0.15.39 \
@solana-mobile/wallet-adapter-mobile@2.2.2 \
@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.2 \
@metaplex-foundation/js@0.18.0
- Почему именно они?
web3.js1.98.2 — последняя LTS версия JS‑SDK Solana.wallet-adapter-react0.15.39 — React‑обертка адаптеров.wallet-adapter-mobile2.2.2 — MWA 2.0 для React Native.Metaplex JS0.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 defined | polyfill buffer не подключен | Добавьте в самом верху index.js импорт buffer. |
Invariant Violation: attempted to call missing method при запуске Android | забыли включить JDK 17 | Проверьте java --version. |
walletAdapterIdentity: identity not provided | Metaplex вызывается до подключения кошелька | Создавайте экземпляр 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 и получать вознаграждение за предоставление ликвидности или делегирование токенов.
The post Как создать приложение на Solana, если ты не программист appeared first on BeInCrypto.
Продолжить чтение...
Похожие темы:
- Kelp полностью восстановил обеспечение токена rsETH
- Альтман усомнился в «апокалипсисе рабочих мест» из-за ИИ
- Сингапур выбрали в качестве квантового хаба Constructor Group
- Нефть подешевела из-за ожиданий открытия Ормузского пролива
- Strategy выкупила собственные облигации на $1,5 млрд
- Отток средств из криптофондов усилился до $1,47 млрд
- OKX запустила торговый турнир с призовым фондом 1 млн USDT и билетами на Формулу-1
- СМИ: Трамп отказался от указа о ИИ-безопасности
- Кредитный Союз США перейдет на централизованную платформу Thought Machine
- Спотовые объемы биткоина упали до минимумов 2023 года