下面我将展示如何搭建一个连接到 Solana 本地测试网的移动客户端,并实现查看账户余额和发送交易的功能。我们将使用 React Native 和 Expo 来进行开发。 好的,下面我将展示如何搭建一个连接到 Solana 本地测试网的移动客户端,并实现查看账户余额和发送交易的功能。我们将使用 React Native 和 Expo 来进行开发。
确保你已经安装了 Node.js 和 npm,可以从 Node.js 官网 下载并安装它们。
Expo CLI 是一个强大的工具,可以帮助你快速创建和管理 React Native 项目。
npm install -g expo-cli
使用 Expo CLI 创建一个新的 React Native 项目:
expo init SolanaMobileApp
cd SolanaMobileApp
在创建项目时,选择 "blank" 模板。
运行以下命令启动开发服务器:
expo start
或者下边三个命令随便选一个启动,但前提都是,本地已经安装了 android 或者 ios 的开发环境
- npm run android
- npm run ios
- npm run web
这将启动一个开发服务器,并在浏览器中打开一个控制面板。你可以使用 Expo Go 应用在手机上扫描 QR 码来预览应用。
在项目目录中安装 Solana Web3.js 库:
npm install @solana/web3.js
使用 Solana CLI 启动本地测试验证器:
solana-test-validator
打开 App.js
文件,并将其内容替换为以下代码:
import React, { useState } from 'react';
import { StyleSheet, Text, View, TextInput, Button, Alert } from 'react-native';
import { Connection, PublicKey, clusterApiUrl, LAMPORTS_PER_SOL, Keypair, Transaction, SystemProgram } from '@solana/web3.js';
const App = () => {
const [publicKey, setPublicKey] = useState('');
const [balance, setBalance] = useState(null);
const [recipient, setRecipient] = useState('');
const [amount, setAmount] = useState('');
// 连接到 Solana 的本地测试网
const connection = new Connection('http://127.0.0.1:8899');
// 检查余额
const handleCheckBalance = async () => {
try {
const pubKey = new PublicKey(publicKey);
const balance = await connection.getBalance(pubKey);
setBalance(balance / LAMPORTS_PER_SOL);
} catch (error) {
Alert.alert('Error', 'Invalid public key');
}
};
// 发送交易
const handleSendTransaction = async () => {
try {
// 使用你的私钥生成 Keypair
const fromKeypair = Keypair.fromSecretKey(new Uint8Array([/* your secret key array here */]));
const toPubkey = new PublicKey(recipient);
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: fromKeypair.publicKey,
toPubkey: toPubkey,
lamports: parseFloat(amount) * LAMPORTS_PER_SOL,
})
);
const signature = await connection.sendTransaction(transaction, [fromKeypair]);
await connection.confirmTransaction(signature);
Alert.alert('Success', `Transaction successful with signature: ${signature}`);
} catch (error) {
Alert.alert('Error', 'Transaction failed');
}
};
return (
<View style={styles.container}>
<Text style={styles.title}>Solana Mobile App</Text>
<TextInput
style={styles.input}
placeholder="Enter Public Key"
value={publicKey}
onChangeText={setPublicKey}
/>
<Button title="Check Balance" onPress={handleCheckBalance} />
{balance !== null && <Text>Balance: {balance} SOL</Text>}
<TextInput
style={styles.input}
placeholder="Recipient Public Key"
value={recipient}
onChangeText={setRecipient}
/>
<TextInput
style={styles.input}
placeholder="Amount (SOL)"
keyboardType="numeric"
value={amount}
onChangeText={setAmount}
/>
<Button title="Send Transaction" onPress={handleSendTransaction} />
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
padding: 20,
},
title: {
fontSize: 24,
marginBottom: 20,
},
input: {
height: 40,
borderColor: 'gray',
borderWidth: 1,
marginBottom: 12,
padding: 10,
width: '100%',
},
});
export default App;
连接到 Solana 本地测试网:
const connection = new Connection('http://127.0.0.1:8899');
我们使用 Connection
对象连接到 Solana 的本地测试网络。
检查余额:
const balance = await connection.getBalance(pubKey);
setBalance(balance / LAMPORTS_PER_SOL);
使用 getBalance
方法获取指定公钥的余额,并转换为 SOL 单位。
发送交易:
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: fromKeypair.publicKey,
toPubkey: toPubkey,
lamports: parseFloat(amount) * LAMPORTS_PER_SOL,
})
);
const signature = await connection.sendTransaction(transaction, [fromKeypair]);
await connection.confirmTransaction(signature);
创建和发送一个简单的 SOL 转账交易,并等待确认。
确保你已经启动了开发服务器,并使用 Expo Go 应用扫描 QR 码来预览你的应用。
通过上述步骤,我们搭建了一个基本的 React Native 开发环境,并编写了一个简单的 Solana 移动客户端,具备查看余额和发送交易的功能。这个示例使用了 React Native 和 Solana 的 Web3.js 库,展示了如何与 Solana 区块链进行交互。你可以根据需要扩展这个示例,添加更多功能和优化。