PHP code example of sandermuller / laravel-solana-sdk

1. Go to this page and download the library: Download sandermuller/laravel-solana-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

sandermuller / laravel-solana-sdk example snippets


use SanderMuller\LaravelSolanaSdk\Facades\Solana;

$balance   = Solana::getBalance('SomeWalletAddressBase58'); // lamports as float
$blockhash = Solana::latestBlockhash();                     // typed BlockhashInfo
$status    = Solana::sendAndConfirmTransaction($tx, [$payer]);

return [
    'network'          => env('SOLANA_NETWORK', 'mainnet'),
    'token_program_id' => env('SOLANA_TOKEN_PROGRAM_ID', 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'),
    'transport' => [
        'mode'    => env('SOLANA_TRANSPORT_MODE', 'fallback'),
        'urls'    => array_values(array_filter([
            env('SOLANA_RPC_URL'),
            env('SOLANA_RPC_URL_FALLBACK'),
        ])),
        'headers' => [],
        'timeout' => (float) env('SOLANA_RPC_TIMEOUT', 30.0),
        'retry'   => [
            'max_attempts'  => (int) env('SOLANA_RPC_RETRY_ATTEMPTS', 3),
            'base_delay_ms' => (int) env('SOLANA_RPC_RETRY_BASE_MS', 100),
            'max_delay_ms'  => (int) env('SOLANA_RPC_RETRY_MAX_MS', 2_000),
        ],
    ],
    'commands' => [
        'enabled' => env('SOLANA_COMMANDS_ENABLED', true),
    ],
];

use SanderMuller\LaravelSolanaSdk\Facades\Solana;
use SanderMuller\LaravelSolanaSdk\Facades\SolanaRpc;

$balance   = Solana::getBalance('SomeWalletAddressBase58');
$info      = Solana::accountInfo('SomeWalletAddressBase58'); // typed AccountInfo
$blockhash = Solana::latestBlockhash();                      // typed BlockhashInfo

// Send + poll until confirmed in a single call:
$status = Solana::sendAndConfirmTransaction($tx, [$payer]);

// Low-level JSON-RPC escape hatch
$result = SolanaRpc::call('getSlot');

use SanderMuller\SolanaPhpSdk\Connection;

class WalletController
{
    public function show(Connection $solana, string $address): array
    {
        return ['balance' => $solana->getBalance($address)];
    }
}

use SanderMuller\SolanaPhpSdk\TransactionBuilder;
use SanderMuller\SolanaPhpSdk\Programs\SystemProgram;
use SanderMuller\LaravelSolanaSdk\Facades\Solana;

$blockhash = Solana::latestBlockhash();

$tx = TransactionBuilder::make()
    ->feePayer($payer->publicKey)
    ->recentBlockhash($blockhash)
    ->addInstruction(SystemProgram::transfer($payer->publicKey, $to, $lamports))
    ->addSigner($payer)
    ->build();

$status = Solana::sendAndConfirmTransaction($tx, [$payer]);

use SanderMuller\LaravelSolanaSdk\Facades\Solana;
use SanderMuller\LaravelSolanaSdk\Queue\ConfirmTransactionJob;

$blockhash = Solana::latestBlockhash();
$signature = Solana::sendTransaction($tx, [$payer]);

ConfirmTransactionJob::dispatch(
    signature: $signature,
    lastValidBlockHeight: $blockhash->lastValidBlockHeight,
    context: ['order_id' => $order->id],
);

use SanderMuller\SolanaPhpSdk\Services\SolanaPubSubClient;

class WatchSignatures
{
    public function handle(SolanaPubSubClient $pubsub, string $signature): void
    {
        $pubsub->enableAutoReconnect();
        $pubsub->signatureSubscribe($signature);

        foreach ($pubsub->listen() as $event) {
            // …
        }
    }
}

use SanderMuller\LaravelSolanaSdk\Facades\Solana;

it('reads the balance', function (): void {
    Solana::fake()->script([
        'getBalance' => ['value' => 5_000_000],
    ]);

    expect(Solana::getBalance($address))->toBe(5_000_000.0);
    expect(Solana::fakedStub()?->methodCalls())->toContain('getBalance');
});

use SanderMuller\SolanaPhpSdk\Testing\PestExpectations;

PestExpectations::register();
bash
php artisan vendor:publish --tag=solana-sdk-config