• bitcoinBitcoin (BTC) $ 59,609.00
  • ethereumEthereum (ETH) $ 1,574.95
  • tetherTether (USDT) $ 0.998388
  • usd-coinUSDC (USDC) $ 1.00
  • tronTRON (TRX) $ 0.322630
  • dogecoinDogecoin (DOGE) $ 0.072573
  • leo-tokenLEO Token (LEO) $ 9.40
  • zcashZcash (ZEC) $ 388.04
  • stellarStellar (XLM) $ 0.173179
  • moneroMonero (XMR) $ 307.12
  • chainlinkChainlink (LINK) $ 7.31
  • cardanoCardano (ADA) $ 0.145032
  • daiDai (DAI) $ 0.999819
  • bitcoin-cashBitcoin Cash (BCH) $ 196.14
  • litecoinLitecoin (LTC) $ 42.33
  • hedera-hashgraphHedera (HBAR) $ 0.070858
  • crypto-com-chainCronos (CRO) $ 0.053848
  • okbOKB (OKB) $ 78.37
  • ethereum-classicEthereum Classic (ETC) $ 7.02
  • kucoin-sharesKuCoin (KCS) $ 6.82
  • cosmosCosmos Hub (ATOM) $ 1.53
  • algorandAlgorand (ALGO) $ 0.085516
  • true-usdTrueUSD (TUSD) $ 0.996728
  • dashDash (DASH) $ 32.78
  • vechainVeChain (VET) $ 0.004459
  • tezosTezos (XTZ) $ 0.210124
  • decredDecred (DCR) $ 11.16
  • iotaIOTA (IOTA) $ 0.035511
  • neoNEO (NEO) $ 1.92
  • basic-attention-tokenBasic Attention (BAT) $ 0.082264
  • qtumQtum (QTUM) $ 0.689252
  • 0x0x Protocol (ZRX) $ 0.080252
  • ravencoinRavencoin (RVN) $ 0.003924
  • ontologyOntology (ONT) $ 0.042944
  • paxos-standardPax Dollar (USDP) $ 0.999406
  • iconICON (ICX) $ 0.024720
  • wavesWaves (WAVES) $ 0.259104
  • liskLisk (LSK) $ 0.085999
  • bitcoin-diamondBitcoin Diamond (BCD) $ 0.061182
  • huobi-tokenHuobi (HT) $ 0.078750
Альткоины

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

Если вы давно мечтали почувствовать себя программистом — этот день настал. Сегодня создать собственное децентрализованное приложение (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 –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 (https://developer.android.com/studio).
  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 Кошельки для тестов

Платформа Кошелек Ссылка
iOS/Android Phantom https://phantom.app/download
iOS/Android Backpack https://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/
@solana/
@solana/
@solana-mobile/
@solana-mobile/
@metaplex-foundation/

  • Почему именно они?

    • 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.

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

Сообщение Причина Решение
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

  1. Разработка и аудит. Компании и проекты платят за написание и проверку смарт-контрактов.
  2. Сбор комиссий. Внутриприложения можно брать процент от операций (обмен, займы, торговля NFT).
  3. Токеномика. Выпуск собственного токена проекта и его листинг на биржах: рост его цены приносит прибыль держателям и команде разработчиков.
  4. Пулы ликвидности и стейкинг. Вы можете вложить свои активы в пулы DeFi-протоколов на Solana и получать вознаграждение за предоставление ликвидности или делегирование токенов.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»