Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Account
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 fromBuffer
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAccount
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace Attestto\SolanaPhpSdk\State;
4
5use Attestto\SolanaPhpSdk\Borsh\Borsh;
6use Attestto\SolanaPhpSdk\Borsh\BorshObject;
7use Attestto\SolanaPhpSdk\Connection;
8use Attestto\SolanaPhpSdk\Exceptions\AccountNotFoundException;
9use Attestto\SolanaPhpSdk\PublicKey;
10use Attestto\SolanaPhpSdk\Util\Commitment;
11
12/**
13 * @property mixed|null $mint
14 */
15class Account
16{
17
18    use BorshObject;
19    protected const TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
20    private static PublicKey $address;
21    private static mixed $tlvData;
22
23
24
25    public const SCHEMA = [
26        self::class => [
27            'kind' => 'struct',
28            'fields' => [
29                ['mint', 'pubKey'],
30                ['owner', 'pubKey'],
31                ['amount', 'u64'],
32                ['delegateOption', 'u32'],
33                ['delegate', 'pubKey'],
34                ['state', 'u8'],
35                ['isNativeOption', 'u8'],
36                ['isNative', 'u8'],
37                ['delegatedAmount', 'u64'],
38                ['closeAuthorityOption', 'u32'],
39                ['closeAuthority', 'pubKey']
40            ],
41        ],
42    ];
43
44    public static function fromBuffer(array $buffer): self
45    {
46        return Borsh::deserialize(self::SCHEMA, self::class, $buffer);
47    }
48
49    /**
50     * @throws AccountNotFoundException
51     */
52    public static function getAccount(
53        Connection $connection,
54        PublicKey $accountPublicKeyOnbject,
55        Commitment $commitment = null,
56        $programId = new PublicKey(self::TOKEN_PROGRAM_ID)
57    ): Account
58    {
59        try {
60            $info = $connection->getAccountInfo($accountPublicKeyOnbject, $commitment);
61            self::$address = $accountPublicKeyOnbject;
62            self::$tlvData = $info['data'];
63            $base64Data = $info['data']['0'];
64            $base64String = base64_decode($base64Data);
65            $uint8Array = array_values(unpack('C*', $base64String));
66            return self::fromBuffer($uint8Array);
67        } catch (AccountNotFoundException $e) {
68            throw new AccountNotFoundException();
69        }
70    }
71}