Merge branch 'main' of ssh://gitlab.fcpays.cc:2222/root/coruna-lab

This commit is contained in:
hashbro
2026-09-24 03:01:15 +08:00
13 changed files with 749 additions and 10 deletions
+38
View File
@@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Log;
* Live on-chain balance refresh for wallet_addresses.
*
* Tron: TRX + USDT (TRC20). ETH: ETH + USDT (ERC20). BTC: BTC only.
* SOL: SOL + USDT (SPL).
*/
class WalletBalanceService
{
@@ -32,6 +33,7 @@ class WalletBalanceService
'TRON', 'TRX' => $this->refreshTron($address),
'ETH', 'ETHEREUM' => $this->refreshEth($address),
'BTC', 'BITCOIN' => $this->refreshBtc($address),
'SOL', 'SOLANA' => $this->refreshSol($address),
default => false,
};
}
@@ -102,6 +104,42 @@ class WalletBalanceService
}
}
public function refreshSol(WalletAddress $address): bool
{
$addr = trim((string) $address->address);
if ($addr === '') {
return false;
}
try {
$driver = $this->chains->resolve('sol');
$attrs = [
'sol' => $driver->getNativeBalance($addr),
];
$contract = trim((string) config('coruna.sol.usdt_contract', ''));
if ($contract !== '') {
$attrs['usdt'] = $driver->getTokenBalance($addr, $contract);
}
$this->persistCoins($address, $attrs);
Log::info('sol balance refresh ok', [
'wallet_address_id' => $address->id,
'address' => $addr,
'sol' => $address->sol,
'usdt' => $address->usdt,
]);
return true;
} catch (\Throwable $e) {
Log::warning('sol balance refresh failed: '.$e->getMessage(), [
'wallet_address_id' => $address->id,
'address' => $addr,
]);
return false;
}
}
public function refreshTron(WalletAddress $address): bool
{
$addr = trim((string) $address->address);