diff --git a/pkg/solana/chainwriter/lookups.go b/pkg/solana/chainwriter/lookups.go index 9f1071c46..b15bcdf5c 100644 --- a/pkg/solana/chainwriter/lookups.go +++ b/pkg/solana/chainwriter/lookups.go @@ -52,10 +52,6 @@ type InternalField struct { Location string } -type ValueLookup struct { - Location string -} - // LookupTables represents a list of lookup tables that are used to derive addresses for a program. type LookupTables struct { DerivedLookupTables []DerivedLookupTable @@ -271,6 +267,8 @@ func (s *SolanaChainWriterService) ResolveLookupTables(ctx context.Context, args // Read derived lookup tables for _, derivedLookup := range lookupTables.DerivedLookupTables { + // Load the lookup table - note: This could be multiple tables if the lookup is a PDALookups that resovles to more + // than one address lookupTableMap, _, err := s.LoadTable(ctx, args, derivedLookup, s.reader, derivedTableMap) if err != nil { return nil, nil, fmt.Errorf("error loading derived lookup table: %w", err) @@ -312,12 +310,13 @@ func (s *SolanaChainWriterService) LoadTable(ctx context.Context, args any, rlt return nil, nil, fmt.Errorf("error resolving addresses for lookup table: %w", err) } + // Nested map in case the lookup table resolves to multiple addresses resultMap := make(map[string]map[string][]*solana.AccountMeta) var lookupTableMetas []*solana.AccountMeta // Iterate over each address of the lookup table for _, addressMeta := range lookupTableAddresses { - // Fetch account info + // Read the full list of addresses from the lookup table addresses, err := getLookupTableAddresses(ctx, reader, addressMeta.PublicKey) if err != nil { return nil, nil, fmt.Errorf("error fetching lookup table address: %w", err)