From 6efc67fd691003ba7013c60a0c8425bd334dd941 Mon Sep 17 00:00:00 2001 From: Matt Stauffer Date: Sat, 11 Sep 2021 14:54:53 -0400 Subject: [PATCH] Add getProgramAccounts and getTokenAccountsByOwner methods to Solana --- src/Solana.php | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/Solana.php b/src/Solana.php index 3f20620..934a950 100644 --- a/src/Solana.php +++ b/src/Solana.php @@ -28,6 +28,42 @@ public function getConfirmedTransaction(string $transactionSignature): array return $this->client->call('getConfirmedTransaction', [$transactionSignature])['result']; } + public function getProgramAccounts(string $pubKey) + { + $probablyMetaPlexKey = 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'; // 🤷‍♂️ + $magicOffsetNumber = 326; // 🤷‍♂️ + + return $this->client->call('getProgramAccounts', [ + $probablyMetaPlexKey, + [ + 'encoding' => 'base64', + 'filters' => [ + [ + 'memcmp' => [ + 'bytes' => $pubKey, + 'offset' => $magicOffsetNumber, + ], + ], + ], + ], + ])->json(); + } + + public function getTokenAccountsByOwner(string $pubKey) + { + $solanaTokenProgramId = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'; + + return $this->client->call('getTokenAccountsByOwner', [ + $pubKey, + [ + 'programId' => $solanaTokenProgramId, + ], + [ + 'encoding' => 'jsonParsed', + ], + ])['result']['value']; + } + // NEW: This method is only available in solana-core v1.7 or newer. Please use getConfirmedTransaction for solana-core v1.6 public function getTransaction(string $transactionSignature): array {