class SolanaService
{
private $rpcUrl;
public function __construct()
{
$this->rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=9e12e094-530b-408a-9e21-16f0b0204a8e'; // Ваш API-ключ Helius
}
private function sendRpcRequest($method, $params = [])
{
$data = [
'jsonrpc' => '2.0',
'id' => 1,
'method' => $method,
'params' => $params,
];
$options = [
'http' => [
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($this->rpcUrl, false, $context);
if ($result === FALSE) {
throw new Exception("Ошибка при отправке запроса к RPC.");
}
return json_decode($result, true);
}
public function depositTokens($userWalletAddress, $amount)
{
// Адрес кошелька-банка
$bankWalletAddress = '4zmMBtXBLLswjZWVk2bjMe3Bqjzg8xApvJke3gsQ1TDS';
// Создаем транзакцию для перевода токенов
$transaction = $this->buildTransferTransaction($bankWalletAddress, $userWalletAddress, $amount);
// Отправляем транзакцию
$transactionId = $this->sendTransaction($transaction);
return $transactionId;
}
private function buildTransferTransaction($fromWalletAddress, $toWalletAddress, $amount)
{
// Логика для создания транзакции
return [
'instructions' => [
[
'programId' => 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
'keys' => [
[
'pubkey' => $fromWalletAddress,
'isSigner' => true,
'isWritable' => true,
],
[
'pubkey' => $toWalletAddress,
'isSigner' => false,
'isWritable' => true,
],
],
'data' => '...', // Данные для инструкции
],
],
'signatures' => [
// Подписи транзакции
],
'recentBlockhash' => $this->getRecentBlockhash(), // Хэш последнего блока
];
}
private function getRecentBlockhash()
{
$response = $this->sendRpcRequest('getLatestBlockhash');
if (isset($response['result']['value']['blockhash'])) {
return $response['result']['value']['blockhash'];
}
throw new Exception("Не удалось получить хэш последнего блока.");
}
private function sendTransaction($transaction)
{
// Сериализуем транзакцию
$serializedTransaction = $this->serializeTransaction($transaction);
// Кодируем транзакцию в base64
$encodedTransaction = base64_encode($serializedTransaction);
// Отправляем транзакцию через RPC
$response = $this->sendRpcRequest('sendTransaction', [
$encodedTransaction,
[
'encoding' => 'base64',
],
]);
if (isset($response['result'])) {
return $response['result']; // Возвращаем ID транзакции
}
throw new Exception("Не удалось отправить транзакцию: " . ($response['error']['message'] ?? 'Неизвестная ошибка'));
}
private function serializeTransaction($transaction)
{
// Логика для сериализации транзакции
return json_encode($transaction);
}
private function signTransaction($transaction)
{
// Логика для подписания транзакции
$privateKey = '425VjeztQxMGaKLbHgqrrY2c5ujpFvJLKuqFGitVa1Lko2wQYQJyck6gGyoapXmoJDMQhYVV46Ckc5JnQ5N487hS'; // Замените на ваш приватный ключ
$signedTransaction = sodium_crypto_sign($transaction, $privateKey);
return $signedTransaction;
}
}
Warning: Cannot modify header information - headers already sent by (output started at /var/www/stilys/data/www/nudeselfie.pics/services/SolanaService.php:1) in /var/www/stilys/data/www/nudeselfie.pics/profile.php on line 17