Skip to content

Commit

Permalink
updated comments and slight tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
silaslenihan committed Dec 20, 2024
1 parent 8670824 commit 234c456
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
2 changes: 1 addition & 1 deletion integration-tests/relayinterface/lookups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func TestAccountLookups(t *testing.T) {
}

func TestPDALookups(t *testing.T) {
programID := solana.SystemProgramID
programID := chainwriter.GetRandomPubKey(t)

t.Run("PDALookup resolves valid PDA with constant address seeds", func(t *testing.T) {
seed := chainwriter.GetRandomPubKey(t)
Expand Down
2 changes: 1 addition & 1 deletion pkg/solana/chainwriter/chain_writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ func TestChainWriter_FilterLookupTableAddresses(t *testing.T) {
Name: "DataAccountPDA",
PublicKey: chainwriter.AccountConstant{Name: "WriteTest", Address: programID.String()},
Seeds: []chainwriter.Lookup{
// extract seed2 for PDA lookup
// extract seed1 for PDA lookup
chainwriter.AccountLookup{Name: "seed1", Location: "seed1"},
},
IsSigner: true,
Expand Down
16 changes: 7 additions & 9 deletions pkg/solana/chainwriter/lookups.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -212,7 +208,6 @@ func decodeBorshIntoType(data []byte, typ reflect.Type) (interface{}, error) {
// It handles both AddressSeeds (which are public keys) and ValueSeeds (which are byte arrays from input args).
func getSeedBytes(ctx context.Context, lookup PDALookups, args any, derivedTableMap map[string]map[string][]*solana.AccountMeta, reader client.Reader) ([][]byte, error) {
var seedBytes [][]byte
maxSeedLength := 32

for _, seed := range lookup.Seeds {
if lookupSeed, ok := seed.(AccountLookup); ok {
Expand All @@ -223,8 +218,8 @@ func getSeedBytes(ctx context.Context, lookup PDALookups, args any, derivedTable
}
// validate seed length
for _, b := range bytes {
if len(b) > maxSeedLength {
return nil, fmt.Errorf("seed byte array exceeds maximum length of %d: got %d bytes", maxSeedLength, len(b))
if len(b) > solana.MaxSeedLength {
return nil, fmt.Errorf("seed byte array exceeds maximum length of %d: got %d bytes", solana.MaxSeedLength, len(b))
}
seedBytes = append(seedBytes, b)
}
Expand All @@ -247,7 +242,7 @@ func getSeedBytes(ctx context.Context, lookup PDALookups, args any, derivedTable

// generatePDAs generates program-derived addresses (PDAs) from public keys and seeds.
func generatePDAs(publicKeys []*solana.AccountMeta, seeds [][]byte, lookup PDALookups) ([]*solana.AccountMeta, error) {
if len(seeds) > 16 {
if len(seeds) > solana.MaxSeeds {
return nil, fmt.Errorf("seed maximum exceeded: %d", len(seeds))
}
var addresses []*solana.AccountMeta
Expand All @@ -271,6 +266,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)
Expand Down Expand Up @@ -312,12 +309,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)
Expand Down

0 comments on commit 234c456

Please sign in to comment.