github.com/gagliardetto/solana-go@v1.11.0/programs/address-lookup-table/address-lookup_test.go (about)

     1  package addresslookuptable
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/base64"
     6  	"math"
     7  	"testing"
     8  
     9  	bin "github.com/gagliardetto/binary"
    10  	"github.com/gagliardetto/solana-go"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestDecodeTable(t *testing.T) {
    15  	tableAccountBase64 := "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"
    16  
    17  	tableAccountBytes, err := base64.StdEncoding.DecodeString(tableAccountBase64)
    18  	require.NoError(t, err)
    19  
    20  	table, err := DecodeAddressLookupTableState(tableAccountBytes)
    21  	require.NoError(t, err)
    22  
    23  	require.Equal(t, uint64(math.MaxUint64), table.DeactivationSlot)
    24  	require.Equal(t, uint64(154742572), table.LastExtendedSlot)
    25  	require.Equal(t, uint8(232), table.LastExtendedSlotStartIndex)
    26  	require.Equal(t, solana.MPK("9FRhPDoDk9JrpCqc4r51qTWgdBTxM892TdjexeErQUNs"), *table.Authority)
    27  	require.Equal(t, uint8(232), table.LastExtendedSlotStartIndex)
    28  
    29  	expectedKeys := solana.PublicKeySlice{
    30  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
    31  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    32  		solana.MPK("GW1Xt9HHtvcnky8X7aBA3BoTgiirJKP5XwC5REFcZSsc"),
    33  		solana.MPK("GXueH9K1MzRncoTYbpLiXXC3WrKkmHUFxV5JEu8oADbw"),
    34  		solana.MPK("F7XioZaGe99nosYJQCahx25TKgdUGufYf6sudm1JSgu"),
    35  		solana.MPK("BT14DfFyNS7qcBGc8TY4HAzDev4vvqsoFBJgjtQpdM2Z"),
    36  		solana.MPK("C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1"),
    37  		solana.MPK("BhHd49JYH3Hk6TV5kCjmUgf7fQSQKDjaWTokMmBhTx9o"),
    38  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
    39  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    40  		solana.MPK("8JPid6GtND2tU3A7x7GDfPPEWwS36rMtzF7YoHU44UoA"),
    41  		solana.MPK("749y4fXb9SzqmrLEetQdui5iDucnNiMgCJ2uzc3y7cou"),
    42  		solana.MPK("ErcxwkPgLdyoVL6j2SsekZ5iysPZEDRGfAggh282kQb8"),
    43  		solana.MPK("EFYW6YEiCGpavuMPS1zoXhgfNkPisWkQ3bQz1b4UfKek"),
    44  		solana.MPK("BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo"),
    45  		solana.MPK("E6aTzkZKdCECgpDtBZtVpqiGjxRDSAFh1SC9CdSoVK7a"),
    46  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
    47  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    48  		solana.MPK("ABrn4ED4AvkQ79VAXqf7ooqicJPHhZDAbC9rqcQ8ePzz"),
    49  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
    50  		solana.MPK("D7CHbxSFSiEW3sPc486AGDwuwsmyZqhP7stG4Yo9ZHTC"),
    51  		solana.MPK("5o8dopjEKEy491bVHShtG6KSSHKm2JUugVqKEK7Jw7YF"),
    52  		solana.MPK("FN3wMZUuWkM65ZtcnAoYpsq773YxrnMfM5iAroSGttBo"),
    53  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
    54  		solana.MPK("6uGUx583UHvFKKCnoMfnGNEFxhSWy5iXXyea4o5E9dx7"),
    55  		solana.MPK("Gp7wpKu9mXpxdykMD9JKW5SK2Jw1h2fttxukvcL2dnW6"),
    56  		solana.MPK("4mkSxT9MaUsUd5uSkZxohf1pbPByk7b5ptWpu4ZABvto"),
    57  		solana.MPK("4dDEjb4JZejtweFEJjjqqC5wwZi3jqtzoS7cPNRyPoT6"),
    58  		solana.MPK("Geoh8p8j48Efupens8TqJKj491aqk5VhPXABFAqGtAjr"),
    59  		solana.MPK("EVv4jPvUxbugw8EHTDwkNBboE26DiN4Zy1CQrd5j3Sd4"),
    60  		solana.MPK("3ceGkbGkqQwjJsZEYzjykDcWM1FjzHGMNTyKHD1c7kqW"),
    61  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
    62  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    63  		solana.MPK("3Ukqqshh3kZ8UPbcYYFSRaeJcsgttcmShtNNn12F1rj2"),
    64  		solana.MPK("7NP8DTzPdpbQofhNyhLW3j2khutmfy1kuFp2AjaD8rrp"),
    65  		solana.MPK("F6nCAMYEFxsyRDVonQXLNufXgAHsgAa1Br8DhBoX3KAV"),
    66  		solana.MPK("HWCTHmQppFSsKQEk1bHUqPC2WLaidgnfTG9MQGD4XKEt"),
    67  		solana.MPK("GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n"),
    68  		solana.MPK("CCuSVbnnq8SUj7cpPe7BbHLuKanyxfvfrwypzCBnaDdf"),
    69  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
    70  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    71  		solana.MPK("2Y1Jmpkf5wt1X5zcFHNBDoHxqjTXbMJfj1UFtrYQwUbG"),
    72  		solana.MPK("8K4eRHeyPhBGB9zCjKtyBHoPPZ75zLN64oxBF6GyF4Qg"),
    73  		solana.MPK("DRYADMQevoJHDFCYbDQeS4p551MpsDN2d7CJU3LxfNHa"),
    74  		solana.MPK("HzsECCX6RZ2ccbR3FarRSEfc5rkuETfywXJnRZut5JzU"),
    75  		solana.MPK("ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW"),
    76  		solana.MPK("Bx3ZhEBFedDqCBzuzKVS4eMKTtW1MmHkcMGU45FcyxRT"),
    77  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
    78  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    79  		solana.MPK("6MxUhBLXHCqpdYaFPTmw1D9fQ7zYnm9grZyJvpGiqr15"),
    80  		solana.MPK("SvWmpVVUkv8cwoRnBQ5Gqt2FFYjdpWLS665gE2ZLNQp"),
    81  		solana.MPK("686KiYDMMkbredNoWx8yqvAdKSiHuWSG3dnbL6yWYmZp"),
    82  		solana.MPK("9i14ZKzaDmzKCAQb8hCv4h5GCo2Xiq83JcL7bofk4Ddj"),
    83  		solana.MPK("EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd"),
    84  		solana.MPK("6vWYnRDEHu7kRLbA2dnBgEfbdba72iDMDD9k3munyPaP"),
    85  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
    86  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
    87  		solana.MPK("vVXfY15WdPsCmLvbiP4hWWECPFeAvPTuPNq3Q4BXfhy"),
    88  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
    89  		solana.MPK("A7RFkvmDFN4Qev8XgGAqSr5W75sNhhtCY3ZcGHZiDDo1"),
    90  		solana.MPK("BKqBnj1TLpW4UEBbZn6aVoPLLBHDB6NTEL5nFNRqX7e7"),
    91  		solana.MPK("AN7XxHrrcFL7629WySWVA2Tq9inczxkbE6YqgZ31rDnG"),
    92  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
    93  		solana.MPK("72aW3Sgp1hMTXUiCq8aJ39DX2Jr7sZgumAvdLrLuCMLe"),
    94  		solana.MPK("F3PQsAGiFf8fSySjUGgP3NQdAGSnioAThncyfd26GKZ3"),
    95  		solana.MPK("6KyB4XprAw7Mgp1YMMsxRGx8T59Y5Lcu6s1FcwFrXy3i"),
    96  		solana.MPK("Due4ZmGX2u7an9DPMvk3uX3sXYgngRatP1XmwzEgk1tT"),
    97  		solana.MPK("8FMjC6yopBVYTXcYSGdFgoh6AFpwTdkJAGXxBeoV8xSq"),
    98  		solana.MPK("5vgxuCqMn7DUt6Le6EGhdMzZjPQrtD1x4TD9zGw3mPte"),
    99  		solana.MPK("FCZkJzztVTx6qKVec25jA3m4XjeGBH1iukGdDqDBHPvG"),
   100  		solana.MPK("72aW3Sgp1hMTXUiCq8aJ39DX2Jr7sZgumAvdLrLuCMLe"),
   101  		solana.MPK("7vtb8cULCnAdsfUKpex5v4CiFS2GwcsTzcK22m9BiDD5"),
   102  		solana.MPK("Due4ZmGX2u7an9DPMvk3uX3sXYgngRatP1XmwzEgk1tT"),
   103  		solana.MPK("F3PQsAGiFf8fSySjUGgP3NQdAGSnioAThncyfd26GKZ3"),
   104  		solana.MPK("6KyB4XprAw7Mgp1YMMsxRGx8T59Y5Lcu6s1FcwFrXy3i"),
   105  		solana.MPK("8FMjC6yopBVYTXcYSGdFgoh6AFpwTdkJAGXxBeoV8xSq"),
   106  		solana.MPK("5vgxuCqMn7DUt6Le6EGhdMzZjPQrtD1x4TD9zGw3mPte"),
   107  		solana.MPK("FCZkJzztVTx6qKVec25jA3m4XjeGBH1iukGdDqDBHPvG"),
   108  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   109  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   110  		solana.MPK("SysvarRent111111111111111111111111111111111"),
   111  		solana.MPK("BHzPYvC5J38kUeqkcUXwfraLWJ68cmGWm43ksF3i8bmk"),
   112  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   113  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   114  		solana.MPK("rxwsjytcEBvXpXrXBL1rpsjhoh78imBn8WbxjKmLRge"),
   115  		solana.MPK("AcaxutE6Rh9vRxipTLdqinEdRK6R4ayUAAv2bZPh6UU9"),
   116  		solana.MPK("6FRxhbY7bvSiDojPiqoidjTyDjxaUyCoPQk3ifEdfFbm"),
   117  		solana.MPK("8aTapFecZRZmC2bTeKr2voHFW2twNvbrh8nWYdXYQWkZ"),
   118  		solana.MPK("GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5"),
   119  		solana.MPK("7pPJGwd8Vq7aYmHaocQpQSfTn3UWYGKUgFkFhpMmRdDF"),
   120  		solana.MPK("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
   121  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   122  		solana.MPK("F7qyox3dAegTNfd8oBQD97LuCHWzQ9hSjbsF7Kv8kTNc"),
   123  		solana.MPK("3NpsRa7H93FeGyT53KgeFNF4vX5m1YT5hxpUZJSpeUy1"),
   124  		solana.MPK("4tS4d1j8vBeBU8zeHHo8sP7DUoNzVG24SZkHKGRNKXiT"),
   125  		solana.MPK("DhU9gMt4gpnqseda43nXJjCssz266ivmTiJSRVu6P8Re"),
   126  		solana.MPK("4VwhkiNBu2YpgvJjY6tANLXdtFtNY6jp5WPq4gY2PeUi"),
   127  		solana.MPK("4rgdoZhrEbYrf9ZMXZmugMoYZ2XWiNPEAiKKujnEcjSv"),
   128  		solana.MPK("faihchv9g9RwjcficyZVRPrQkzKA2NHUDL2PhgmxXPS"),
   129  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   130  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   131  		solana.MPK("GQJjrG6f8HbxkE3ZVSRpzoyWhQ2RiivT68BybVK9DxME"),
   132  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   133  		solana.MPK("AwHZdJrEDWAFhxsdsErvVPjWyE5JEY5Xq6cq4JjZX73L"),
   134  		solana.MPK("3zrQ9od43vB9sV1MNbM68VnkLCfq9dVUvM1hmp8tcJNz"),
   135  		solana.MPK("5odFuHq8jhqtNBKtCu4F2GvUiH5hB1zVfpS9XXbLf35d"),
   136  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   137  		solana.MPK("FrR9FBmiBjm2GjLZbfnCcgkbueUJ78NbBx1qcQKPUQe8"),
   138  		solana.MPK("4W6ZoBB2QNBe6AYM6ofpWjerAsnJad93hVfdC5WMjRsX"),
   139  		solana.MPK("64yfFmc7ivEknLRT2nvUmWkASGwz8MPxtcPdaiWUffro"),
   140  		solana.MPK("GgJ8bQSZ6Lt2mEurrhzLMWFMzTgVFq8ax91QzmZzYiS6"),
   141  		solana.MPK("9yg6VjgPUbojGn9d2n3UpX7B6gz7todGfTcV8apV5wkL"),
   142  		solana.MPK("BDdh4ane6wXkRdbqUuMGYYR4ggf3GufUbjT2TxpHiAzU"),
   143  		solana.MPK("A3LkbNQUjz1q3Ux5kQKCzNMFJw3yxk9qx1RtuQBXbZZe"),
   144  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   145  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   146  		solana.MPK("HdeYs4bpJKN2oTb7PHxbqq4kzKiLr772A5N2gWjY57ZT"),
   147  		solana.MPK("2KRcBDQJWEPygxcMMFMvR6dMTVtMkJV6kbxr5e9Kdj5Q"),
   148  		solana.MPK("DBckbD9CoRBFE8WdbbnFLDz6WdDDSZ7ReEeqdjL62fpG"),
   149  		solana.MPK("B252w7ZkUX4WyLUJKLEymEpRkYMqJhgv2PSj2Z2LWH34"),
   150  		solana.MPK("DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi"),
   151  		solana.MPK("5XuLrZqpX9gW3pJw7274EYwAft1ciTXndU4on96ERi9J"),
   152  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   153  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   154  		solana.MPK("5zUBVuXM3pwcrfi2Nj1mkT4RLKJjmBTjd4AsGs3biZBY"),
   155  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   156  		solana.MPK("C5JCYfp6YE6JrpNkRoAGhARSUSMLMP7paPBHsiK1E5tb"),
   157  		solana.MPK("DBMA8CUKosdnNvXT7phVDk8u9QCyNWnG4Z2twDS7ET17"),
   158  		solana.MPK("EjBkXsDPGmyMQavnAQQsuMAMncDYTUAL35MhvyzEX4Kx"),
   159  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   160  		solana.MPK("9oXkdAWFyjDH8BbYrDVJ77r6GWPmUWo9ZYYpE25SZ2td"),
   161  		solana.MPK("BdAZ2q9Ct9atgYnENKTsNKyLFhPXWiKuy3god4zEKMQW"),
   162  		solana.MPK("6GBaKj1LncmZGS2B4uWjCM7pRZ9gUZWNTK7K8VCBvxaG"),
   163  		solana.MPK("8aVP9P8cPzCSK4hdsVVk1E2nEf53f7iWkTKmsbidp4Fm"),
   164  		solana.MPK("8N9HsqECLfZ7wHg7DW5WqYzN9UnWEgRhChG8ByNJ828Q"),
   165  		solana.MPK("kvNtTHZU6vofnfdzYjN8G9gFqfjjf6yGYQJzwHb4m7h"),
   166  		solana.MPK("5XKsQrPiQh1YznQFs9x8zMcqMSeJZBiGe7FmGfyQgC9N"),
   167  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   168  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   169  		solana.MPK("B76e3wtCDTKBgKQjvx87EBkDLPGcCY9w1SGiwjD5kaK7"),
   170  		solana.MPK("FRUmMZDiZrDrwioiUYi3tdqF7SEBeT219bBu54PGxoCo"),
   171  		solana.MPK("8voSogytL9jLgE73GS3WuujBinKFRQJjvUFsVGYexWZd"),
   172  		solana.MPK("HEP7mACuN13cT95eDAYTNjgwriqJnMQVhnyRctqnBRe4"),
   173  		solana.MPK("Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6"),
   174  		solana.MPK("BCuRKfsM99LJFCchKUBLBZ26UuziDewJDRkkKMwx2qnd"),
   175  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   176  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   177  		solana.MPK("2Tv6eMih3iqxHrLAWn372Nba4A8FT8AxFSbowBmmTuAd"),
   178  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   179  		solana.MPK("GNHftHYD7WRG5HYdyWjd9KsxjUgUALrLcSG2AZvv5ahU"),
   180  		solana.MPK("9ZQNgn9zAc9oLKST5yW9PNjCCqSfJVwnFpfgZnd88Xn1"),
   181  		solana.MPK("HLtqBqwgdbGdFfd5UZtKkvrdxLLcpaMnAJ5aZAzDjFdT"),
   182  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   183  		solana.MPK("9cuBrXXSH9Uw51JB9odLqEyeF5RQSeRpcfXbEW2L8X6X"),
   184  		solana.MPK("EmqbfgZFSQxAeJRWKrrBVST4oLsq8aMt4WtcufPARcd7"),
   185  		solana.MPK("GZqx3xX1PjNpmw2qDGhiUSa6PsM5tWYY7cMmKzYFCCLD"),
   186  		solana.MPK("8w8JzuqcRUm9QAC3YWJm2mBCVjWDLXh8b7ktSouJKMUd"),
   187  		solana.MPK("8DGcP5Z8M878mguFLohaK9jFrrShDCREF3qa7JhMfgib"),
   188  		solana.MPK("CLS4WFje2PbV3MmV4v7CGxu3bNFqx2sYewq95rzGR8t8"),
   189  		solana.MPK("FBLtcfAXmm5PpJLLr95L5cjfgbpJiGHsWdBXDpC2TBQ2"),
   190  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   191  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   192  		solana.MPK("5DnwMqYAGEKekYXJdN8Bue6vN1p5zrEnBpmd53jEK61S"),
   193  		solana.MPK("4NfadURWeSDPJBGcKQRt39mPhbG9M7EJx6FZDwwcFB9f"),
   194  		solana.MPK("6d19CQA1FP2MLLAzA7XoZEc9Agc32FaKUS175UVWLGtv"),
   195  		solana.MPK("HpPnUHyo19VjmXbP6FbbKXu7WQCUEn6h7be76fZdHVmf"),
   196  		solana.MPK("qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB"),
   197  		solana.MPK("57L2bEFecsAv4jnaM2PBaeAVyPZEYtTmXBi7eaG2xWXw"),
   198  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   199  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   200  		solana.MPK("FEFzBbbEK8yDigqyJPgJKMR5X1xZARC25QTCskvudjuK"),
   201  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   202  		solana.MPK("8PAAfUWoVsSotWUGrL6CJCT2sApMpE2hn8DGWXq4y9Gs"),
   203  		solana.MPK("AZPsv6tY1HQjmeps2sMje5ysNtPKsfbtxj5Qw3jcya1a"),
   204  		solana.MPK("9D6JfNjyi6dXBYGErxmXmezkauPJdHW4KjMr2RGyD86Y"),
   205  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   206  		solana.MPK("BHqcTEDhCoZgvXcsSbwnTuzPdxv1HPs6Kz4AnPpNrGuq"),
   207  		solana.MPK("F61FtHm4R4F1gszB3FuwDPvXeSPQwNmHTofoYCnrV4FY"),
   208  		solana.MPK("5tYcHCW3ZZK4TMUSYiTi4dEE7iefyQ9dE17XDDAmDf92"),
   209  		solana.MPK("C5gcq3kmmXJ6ADWvH3Pc8bpiBQCL5cx4ypRwPg5xxFFx"),
   210  		solana.MPK("6sF1TAJjfrNucAqaQFRrMD78z2RinTGeyo4KsXPbwiqh"),
   211  		solana.MPK("5iXoDYXGnMxEwL65XTJHWdr6Z2UD5qq47ZijW24VSSSQ"),
   212  		solana.MPK("BuRLkxJffwznEsxXEqmXZJdLh4vQ1BRXc41sT6BtPV4X"),
   213  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   214  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   215  		solana.MPK("ErWwp9HKjk5ZPLDt8SrHKH5PvSKTwFDdFo5E3zDuE5Be"),
   216  		solana.MPK("GYY1t5d4pZnJC4rMXGY9yKMyCzLqxRqbtSguD2KkxghH"),
   217  		solana.MPK("GEtZSc8188t2cCAv21UGCyjvxCeyU5Co99GtRtyTkpdh"),
   218  		solana.MPK("Bi95f8H7o7zHWuYysxDHEubPv4c3NhsHWhaesXJu91NC"),
   219  		solana.MPK("GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc"),
   220  		solana.MPK("6NhybmW42rdWj5TcobNKQT6JaZispgngcfTDrCsgVq4Q"),
   221  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   222  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   223  		solana.MPK("v51xWrRwmFVH6EKe8eZTjgK5E4uC2tzY5sVt5cHbrkG"),
   224  		solana.MPK("3Kk8rpjxpc9qv2pJPr1CbmyQqrTDPntpryXActLogQeD"),
   225  		solana.MPK("5c4tzhRVaCxpmu8o3HrEZ8PWBDKSR6QNkBdQrUo9oe3e"),
   226  		solana.MPK("AFNaWHH7ZGFjB7y7jmPM7jVs7QBAciffu7Z5tZidRHPR"),
   227  		solana.MPK("5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5"),
   228  		solana.MPK("ACKiRmbiMaPEc73pz4dVMuJGPaa74Vx9sfYADjnHuzvo"),
   229  		solana.MPK("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
   230  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   231  		solana.MPK("CeGZNd2ap2ke8JreVqDXikSrxhnSERh9G8WAt4yqMcBs"),
   232  		solana.MPK("GhZVE3cbEtbAJMb4QbYEEK4BQXcDeyPCWmr8yzZL9NH7"),
   233  		solana.MPK("BJW4t9VsS7W5W7UxXhjGj3C3r4sB9ZzTXMcUD3WVq511"),
   234  		solana.MPK("AjYCGnsaCsoif9LU4Dr3PRN2EJucjsn1DduycybVwzvL"),
   235  		solana.MPK("GC83zEFAxq6mR6HZgPMwTf4oThc7RPsjQFfopEn2R1Rf"),
   236  		solana.MPK("3v3QYAnnGjeGo8K2rsqeKYegCB1YWb7QC58JXKdaGGoD"),
   237  		solana.MPK("4BKxA3d67Sfa3xhjg6waEo58ACB2XkFESXDL5RYFHsP4"),
   238  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   239  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   240  		solana.MPK("7c2CLgatf2TU36PgpS65WLmvWk94rmaHVf1Z1peZ7mcA"),
   241  		solana.MPK("Mq46N9EknnxHL9fRkJhS4Eg9YXRifHiWzFJTD11ePWC"),
   242  		solana.MPK("5rU6M2jAXQMSmgrsn14BPoVVhoBdCU6y5cP7XMjN4ZYy"),
   243  		solana.MPK("D28rzq246bcXBrYiCeALY86y8NwvCUmuJGNggvKsh4WR"),
   244  		solana.MPK("Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz"),
   245  		solana.MPK("7JH76Kw4dHyC5szRXkx6MFkJ3BEViodfNy15uFJst1cX"),
   246  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   247  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   248  		solana.MPK("C3b5AWQJiyar5g8EWu75zgDE26F55ZJWpqtFVCCVDQQQ"),
   249  		solana.MPK("3SphkwoHx3d13Eu9RehVVg4gGMZv7FEaDXvPqWbQF9bm"),
   250  		solana.MPK("5AhPVbtyiTV3SiNRJuq5z9xeaqqwoHQWqohR9HvjJkKS"),
   251  		solana.MPK("6mtcbtTAadVEdnWJZmsq8woqLea7ef7k5WumVXSHr5KQ"),
   252  		solana.MPK("7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE"),
   253  		solana.MPK("CT95CSNqi4nttNW84dDuA8Um7FLAC52PVUvuVRKeCHVK"),
   254  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   255  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   256  		solana.MPK("GumfURfQvPaJ2E5ueCEKYJmymNQbV34gU9TmiKZYRkiv"),
   257  		solana.MPK("EjoLNSDggfWWE7BxwoL4tJHBEg1cFpdiyKeYTYCec2o2"),
   258  		solana.MPK("AGNHgSQuPd4EqjLTLJrXEVb3KCkjRxGVDTaag4drV1XX"),
   259  		solana.MPK("FESKk2kj9oqdYR4dcaP4LyqDyWZt3NttgypRVFoyUQNs"),
   260  		solana.MPK("55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4"),
   261  		solana.MPK("F6xCTe256cA6HTX5CYBkDtXoruHvjfbxeHNeqR9kR7oJ"),
   262  		solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   263  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   264  		solana.MPK("9tK2LaapwjxaUmfcAzY9zgC39M3wnaFX558y2Bb4oxWG"),
   265  		solana.MPK("EGuBsx6HAgAtf1ogzF1uXTUQgwRex61hnhvuZcMwQKUJ"),
   266  		solana.MPK("GgfTGZ5DnAotnXKFM86vqffKQZ9nGgHaX1PDS7RTcKjQ"),
   267  		solana.MPK("A3rzsPGtqowjKXfscYrPo1jvv2EVYpJwXQPGKxgvvStf"),
   268  		solana.MPK("DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG"),
   269  		solana.MPK("Acom6ebnmbFKQk3XeX5VHPiz8bd7kzfpUMsqHKJDJnry"),
   270  		solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   271  		solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   272  		solana.MPK("9xUWbM7zXsccied2jNXama1Z1Wh9mwn9APX1drRTPtvh"),
   273  		solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   274  		solana.MPK("JD51bY2uLtwgzYQNYjF7m1UvWX5HdHE7orMrxogPQk1G"),
   275  		solana.MPK("7TeWuw6WxwqLkadHGRsLFVWoe4zb9snMRZHH5nQPpUPV"),
   276  		solana.MPK("A59Pg8yemxDqUqfvfmh6e9Wmkr74v7uGeygcUkQCSoLJ"),
   277  		solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   278  		solana.MPK("9fe1MWiKqUdwift3dEpxuRHWftG72rysCRHbxDy6i9xB"),
   279  		solana.MPK("4ZwKetX2m7fS3gigLa215xjveVNwLWAVJeh1zaQUbpuF"),
   280  		solana.MPK("vL2N5k5PS67MctE1Tj5u3sivBNMj6EvejskPiqtDP6n"),
   281  		solana.MPK("ApWLqV2xjdn2FEjYvVgf7Ltp5by9TDVEnpg5dXrZzY8k"),
   282  		solana.MPK("26h5i4vYPinyUZ6kUp8tzhzvQtP3cNzhzaBMqySybNMF"),
   283  		solana.MPK("7E5CzVnTFsTnwPqoJ8uUA8RNqCgsYy6ZEnRVmz7LURaA"),
   284  		solana.MPK("FPC75yXyJwF3NFEmgHrJRDNmXnukpVQgXayZVsmpEDKo"),
   285  	}
   286  
   287  	require.Equal(t, len(expectedKeys), len(table.Addresses), "decoded addresses length mismatch")
   288  
   289  	for i := range expectedKeys {
   290  		require.Equal(t, expectedKeys[i], table.Addresses[i], "key %d; extected %s, got %s", i, expectedKeys[i], table.Addresses[i])
   291  	}
   292  	{
   293  		buf := new(bytes.Buffer)
   294  		enc := bin.NewBinEncoder(buf)
   295  		err := table.MarshalWithEncoder(enc)
   296  		require.NoError(t, err)
   297  		require.Equal(t, buf.Bytes(), tableAccountBytes)
   298  	}
   299  	{
   300  		// https://explorer.solana.com/tx/24jRjMP3medE9iMqVSPRbkwfe9GdPmLfeftKPuwRHZdYTZJ6UyzNMGGKo4BHrTu2zVj4CgFF3CEuzS79QXUo2CMC
   301  		txBase64 := "ATU8IfVPwTFbXJvq0sO8w7Xc6/nc/4RFux7ehibunps+JjNSczZbue4bPn6uR9s6aWSZQCP8brf8RyYUwZQ0DQeAAQACBVTKAWVY3LzWDZTdfErhZpxix74Qyp+LjLmlvAPS/l4z4Rt91U7dxP1bjyHkoY3vBWo/XAqjvIzK8DTSvetevZWcVdOLU3j3+e/xY8bnWyZ3eMohRZiHw3bH7GrsEzYzowR51S3tv2vF7NCdhFNKNK6ll1BDs2/QKyRlC7WEQ1lcAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAACgpxPJ+57U2CTjvooWuPN91CltQch0oj/O5i3Fa45CgQMDIBMAARQTBRUGBwgWCQoLDA0OFwECABgTGRoAAg8QARESJOUXy5d6460qAAIAAAACBwIDgJaYAAAAAACAlpgAAAAAAAAAAAQABQLAJwkABAAJA0CcAAAAAAAAAaC/OwMGMFZGentK87meSfdqah4dRR/iw+wKg/yvZNw5DhIUFRYYGRobHB0MDQ4PCAEQExceAAoL"
   302  		tx := &solana.Transaction{}
   303  		err := tx.UnmarshalBase64(txBase64)
   304  		require.NoError(t, err)
   305  		err = tx.Message.SetAddressTables(map[solana.PublicKey]solana.PublicKeySlice{
   306  			solana.MPK("BpVMhYJB14QX5pXfbHRxB8vmpW4AFodWjBTDvfCJwsfv"): table.Addresses,
   307  		})
   308  		require.NoError(t, err)
   309  		require.True(t, tx.Message.IsSigner(solana.MPK("6hyuGqKQyhAEipjtaquiNHfd1dVjrNT3FzzanXurbK4W")))
   310  
   311  		require.Equal(t, solana.PublicKeySlice{
   312  			solana.MPK("BpVMhYJB14QX5pXfbHRxB8vmpW4AFodWjBTDvfCJwsfv"),
   313  		}, tx.Message.GetAddressTableLookups().GetTableIDs())
   314  
   315  		metas, err := tx.Message.AccountMetaList()
   316  		require.NoError(t, err)
   317  
   318  		{
   319  			writable := solana.PublicKeySlice{
   320  				//
   321  				solana.MPK("G9j3eZtj5pprqxvYz6v5WoyqhEMbnV6m9KTtoZuNrvCk"),
   322  				solana.MPK("BXGWMYBEsuXsqt4R19ihHsjhL81KvVXbDvw5TxTfD7sx"),
   323  				// from lookups:
   324  				solana.MPK("ABrn4ED4AvkQ79VAXqf7ooqicJPHhZDAbC9rqcQ8ePzz"),
   325  				solana.MPK("D7CHbxSFSiEW3sPc486AGDwuwsmyZqhP7stG4Yo9ZHTC"),
   326  				solana.MPK("5o8dopjEKEy491bVHShtG6KSSHKm2JUugVqKEK7Jw7YF"),
   327  				solana.MPK("FN3wMZUuWkM65ZtcnAoYpsq773YxrnMfM5iAroSGttBo"),
   328  				solana.MPK("6uGUx583UHvFKKCnoMfnGNEFxhSWy5iXXyea4o5E9dx7"),
   329  				solana.MPK("Gp7wpKu9mXpxdykMD9JKW5SK2Jw1h2fttxukvcL2dnW6"),
   330  				solana.MPK("4mkSxT9MaUsUd5uSkZxohf1pbPByk7b5ptWpu4ZABvto"),
   331  				solana.MPK("4dDEjb4JZejtweFEJjjqqC5wwZi3jqtzoS7cPNRyPoT6"),
   332  				solana.MPK("Geoh8p8j48Efupens8TqJKj491aqk5VhPXABFAqGtAjr"),
   333  				solana.MPK("EVv4jPvUxbugw8EHTDwkNBboE26DiN4Zy1CQrd5j3Sd4"),
   334  				solana.MPK("ErcxwkPgLdyoVL6j2SsekZ5iysPZEDRGfAggh282kQb8"),
   335  				solana.MPK("EFYW6YEiCGpavuMPS1zoXhgfNkPisWkQ3bQz1b4UfKek"),
   336  				solana.MPK("BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo"),
   337  				solana.MPK("E6aTzkZKdCECgpDtBZtVpqiGjxRDSAFh1SC9CdSoVK7a"),
   338  			}
   339  			for _, acc := range writable {
   340  				is, err := tx.Message.IsWritable(acc)
   341  				require.NoError(t, err, "account %s", acc)
   342  				require.True(t, is, "account %s must be writable", acc)
   343  			}
   344  			for _, acc := range writable {
   345  				has, err := tx.Message.HasAccount(acc)
   346  				require.NoError(t, err)
   347  				require.True(t, has)
   348  			}
   349  		}
   350  		{
   351  			readonly := solana.PublicKeySlice{
   352  				solana.MPK("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB"),
   353  				solana.MPK("ComputeBudget111111111111111111111111111111"),
   354  				// from lookups:
   355  				solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
   356  				solana.MPK("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
   357  				solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
   358  				solana.MPK("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
   359  				solana.MPK("3ceGkbGkqQwjJsZEYzjykDcWM1FjzHGMNTyKHD1c7kqW"),
   360  				solana.MPK("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
   361  				solana.MPK("8JPid6GtND2tU3A7x7GDfPPEWwS36rMtzF7YoHU44UoA"),
   362  				solana.MPK("749y4fXb9SzqmrLEetQdui5iDucnNiMgCJ2uzc3y7cou"),
   363  			}
   364  			for _, acc := range readonly {
   365  				is, err := tx.Message.IsWritable(acc)
   366  				require.NoError(t, err, "account %s", acc)
   367  				require.False(t, is, "account %s must be readonly", acc)
   368  			}
   369  			for _, acc := range readonly {
   370  				has, err := tx.Message.HasAccount(acc)
   371  				require.NoError(t, err)
   372  				require.True(t, has)
   373  			}
   374  		}
   375  		{
   376  			ix := tx.Message.Instructions[0]
   377  			got, err := tx.Message.ResolveProgramIDIndex(ix.ProgramIDIndex)
   378  			require.NoError(t, err)
   379  			require.Equal(t, solana.MPK("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB"), got)
   380  		}
   381  		{
   382  			ix := tx.Message.Instructions[1]
   383  			got, err := tx.Message.ResolveProgramIDIndex(ix.ProgramIDIndex)
   384  			require.NoError(t, err)
   385  			require.Equal(t, solana.MPK("ComputeBudget111111111111111111111111111111"), got)
   386  		}
   387  		{
   388  			ix := tx.Message.Instructions[2]
   389  			got, err := tx.Message.Program(ix.ProgramIDIndex)
   390  			require.NoError(t, err)
   391  			require.Equal(t, solana.MPK("ComputeBudget111111111111111111111111111111"), got)
   392  		}
   393  		{
   394  			has, err := tx.Message.HasAccount(solana.SysVarClockPubkey)
   395  			require.NoError(t, err)
   396  			require.False(t, has)
   397  		}
   398  		{
   399  			acc, err := tx.Message.Account(0)
   400  			require.NoError(t, err)
   401  			require.Equal(t, solana.MPK("6hyuGqKQyhAEipjtaquiNHfd1dVjrNT3FzzanXurbK4W"), acc)
   402  			require.Equal(t, solana.MPK("6hyuGqKQyhAEipjtaquiNHfd1dVjrNT3FzzanXurbK4W"), metas[0].PublicKey)
   403  		}
   404  		{
   405  			acc, err := tx.Message.Account(1)
   406  			require.NoError(t, err)
   407  			require.Equal(t, solana.MPK("G9j3eZtj5pprqxvYz6v5WoyqhEMbnV6m9KTtoZuNrvCk"), acc)
   408  			require.Equal(t, solana.MPK("G9j3eZtj5pprqxvYz6v5WoyqhEMbnV6m9KTtoZuNrvCk"), metas[1].PublicKey)
   409  		}
   410  		{
   411  			acc, err := tx.Message.Account(15)
   412  			require.NoError(t, err)
   413  			require.Equal(t, solana.MPK("ErcxwkPgLdyoVL6j2SsekZ5iysPZEDRGfAggh282kQb8"), acc)
   414  			require.Equal(t, solana.MPK("ErcxwkPgLdyoVL6j2SsekZ5iysPZEDRGfAggh282kQb8"), metas[15].PublicKey)
   415  		}
   416  		{
   417  			acc, err := tx.Message.Account(18)
   418  			require.NoError(t, err)
   419  			require.Equal(t, solana.MPK("E6aTzkZKdCECgpDtBZtVpqiGjxRDSAFh1SC9CdSoVK7a"), acc)
   420  			require.Equal(t, solana.MPK("E6aTzkZKdCECgpDtBZtVpqiGjxRDSAFh1SC9CdSoVK7a"), metas[18].PublicKey)
   421  		}
   422  		{
   423  			acc, err := tx.Message.Account(21)
   424  			require.NoError(t, err)
   425  			require.Equal(t, solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"), acc)
   426  			require.Equal(t, solana.MPK("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"), metas[21].PublicKey)
   427  		}
   428  		{
   429  			acc, err := tx.Message.Account(26)
   430  			require.NoError(t, err)
   431  			require.Equal(t, solana.MPK("749y4fXb9SzqmrLEetQdui5iDucnNiMgCJ2uzc3y7cou"), acc)
   432  			require.Equal(t, solana.MPK("749y4fXb9SzqmrLEetQdui5iDucnNiMgCJ2uzc3y7cou"), metas[26].PublicKey)
   433  		}
   434  		{
   435  			acc, err := tx.Message.Account(9999)
   436  			require.Error(t, err)
   437  			require.Equal(t, solana.PublicKey{}, acc)
   438  		}
   439  		require.True(t, tx.Message.IsVersioned())
   440  		{
   441  			{
   442  				lookups := tx.Message.GetAddressTableLookups()
   443  				require.Equal(t, 1, len(lookups))
   444  				first := lookups[0]
   445  				require.Equal(t,
   446  					solana.MessageAddressTableLookup{
   447  						AccountKey:      solana.MPK("BpVMhYJB14QX5pXfbHRxB8vmpW4AFodWjBTDvfCJwsfv"),
   448  						WritableIndexes: []uint8{18, 20, 21, 22, 24, 25, 26, 27, 28, 29, 12, 13, 14, 15},
   449  						ReadonlyIndexes: []uint8{1, 16, 19, 23, 30, 0, 10, 11},
   450  					}, first)
   451  			}
   452  		}
   453  		{
   454  			got, err := tx.Message.GetAllKeys()
   455  			require.NoError(t, err)
   456  			require.Equal(t, metas.GetKeys(), got)
   457  			{
   458  				// before resolution:
   459  				static := solana.PublicKeySlice{
   460  					solana.MPK("6hyuGqKQyhAEipjtaquiNHfd1dVjrNT3FzzanXurbK4W"),
   461  					solana.MPK("G9j3eZtj5pprqxvYz6v5WoyqhEMbnV6m9KTtoZuNrvCk"),
   462  					solana.MPK("BXGWMYBEsuXsqt4R19ihHsjhL81KvVXbDvw5TxTfD7sx"),
   463  					solana.MPK("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB"),
   464  					solana.MPK("ComputeBudget111111111111111111111111111111"),
   465  				}
   466  				require.Equal(t, 5, len(tx.Message.AccountKeys))
   467  				for i, acc := range static {
   468  					require.Equal(t, acc, tx.Message.AccountKeys[i], "static key %d", i)
   469  				}
   470  				{ // serialization before resolution:
   471  					{
   472  						got, err := tx.ToBase64()
   473  						require.NoError(t, err)
   474  						require.Equal(t, txBase64, got)
   475  					}
   476  					{
   477  						buf := new(bytes.Buffer)
   478  						err := table.MarshalWithEncoder(bin.NewBinEncoder(buf))
   479  						require.NoError(t, err)
   480  						require.Equal(t, tableAccountBytes, buf.Bytes())
   481  					}
   482  					{
   483  						require.Equal(t, 14, tx.Message.GetAddressTableLookups().NumWritableLookups())
   484  						require.Equal(t, 22, tx.Message.GetAddressTableLookups().NumLookups())
   485  						require.Equal(t, 22, tx.Message.NumLookups())
   486  					}
   487  				}
   488  				// after resolution:
   489  				err = tx.Message.ResolveLookups()
   490  				require.NoError(t, err)
   491  				require.Equal(t, 27, len(tx.Message.AccountKeys))
   492  				{
   493  					// serialization after resolution:
   494  					{
   495  						got, err := tx.ToBase64()
   496  						require.NoError(t, err)
   497  						require.Equal(t, txBase64, got)
   498  					}
   499  					{
   500  						buf := new(bytes.Buffer)
   501  						err := table.MarshalWithEncoder(bin.NewBinEncoder(buf))
   502  						require.NoError(t, err)
   503  						require.Equal(t, tableAccountBytes, buf.Bytes())
   504  					}
   505  					{
   506  						require.Equal(t, 14, tx.Message.GetAddressTableLookups().NumWritableLookups())
   507  						require.Equal(t, 22, tx.Message.GetAddressTableLookups().NumLookups())
   508  						require.Equal(t, 22, tx.Message.NumLookups())
   509  					}
   510  				}
   511  				// after resolution:
   512  				err = tx.Message.ResolveLookups()
   513  				require.NoError(t, err)
   514  				require.Equal(t, 27, len(tx.Message.AccountKeys))
   515  				{
   516  					// same as before first resolution call:
   517  					{
   518  						got, err := tx.ToBase64()
   519  						require.NoError(t, err)
   520  						require.Equal(t, txBase64, got)
   521  					}
   522  					{
   523  						buf := new(bytes.Buffer)
   524  						err := table.MarshalWithEncoder(bin.NewBinEncoder(buf))
   525  						require.NoError(t, err)
   526  						require.Equal(t, tableAccountBytes, buf.Bytes())
   527  					}
   528  					{
   529  						require.Equal(t, 14, tx.Message.GetAddressTableLookups().NumWritableLookups())
   530  						require.Equal(t, 22, tx.Message.GetAddressTableLookups().NumLookups())
   531  						require.Equal(t, 22, tx.Message.NumLookups())
   532  					}
   533  				}
   534  			}
   535  		}
   536  	}
   537  }