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