feat: Solana chain

This commit is contained in:
example
2026-09-23 14:26:38 +08:00
parent f9fd356679
commit cdbfa48662
13 changed files with 749 additions and 10 deletions
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace Tests\Unit;
use App\Services\Chain\SolAddress;
use App\Services\Chain\SolDriver;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
class SolAddressTest extends TestCase
{
#[Test]
public function derives_phantom_path_golden_vector(): void
{
if (! function_exists('sodium_crypto_sign_seed_keypair')) {
$this->markTestSkipped('ext-sodium required');
}
// BIP-39 abandon×11+about at m/44'/501'/0'/0' (Phantom/Solflare).
$mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
$address = SolAddress::fromMnemonic($mnemonic, 0);
$this->assertSame('HAgk14JpMQLgt6rVgv7cBQFJWFto5Dqxi472uT3DKpqk', $address);
$this->assertTrue(SolAddress::isValid($address));
}
#[Test]
public function sol_driver_derive_address_matches_sol_address(): void
{
if (! function_exists('sodium_crypto_sign_seed_keypair')) {
$this->markTestSkipped('ext-sodium required');
}
$mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
$driver = new SolDriver;
$this->assertSame(
SolAddress::fromMnemonic($mnemonic, 0),
$driver->deriveAddress($mnemonic, 0),
);
$this->assertSame(
SolAddress::fromMnemonic($mnemonic, 1),
$driver->deriveAddress($mnemonic, 1),
);
$this->assertNotSame(
$driver->deriveAddress($mnemonic, 0),
$driver->deriveAddress($mnemonic, 1),
);
}
}