github.com/gagliardetto/solana-go@v1.11.0/rpc/getProgramAccounts.go (about)

     1  // Copyright 2021 github.com/gagliardetto
     2  // This file has been modified by github.com/gagliardetto
     3  //
     4  // Copyright 2020 dfuse Platform Inc.
     5  //
     6  // Licensed under the Apache License, Version 2.0 (the "License");
     7  // you may not use this file except in compliance with the License.
     8  // You may obtain a copy of the License at
     9  //
    10  //      http://www.apache.org/licenses/LICENSE-2.0
    11  //
    12  // Unless required by applicable law or agreed to in writing, software
    13  // distributed under the License is distributed on an "AS IS" BASIS,
    14  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15  // See the License for the specific language governing permissions and
    16  // limitations under the License.
    17  package rpc
    18  
    19  import (
    20  	"context"
    21  
    22  	"github.com/gagliardetto/solana-go"
    23  )
    24  
    25  // GetProgramAccounts returns all accounts owned by the provided program publicKey.
    26  func (cl *Client) GetProgramAccounts(
    27  	ctx context.Context,
    28  	publicKey solana.PublicKey,
    29  ) (out GetProgramAccountsResult, err error) {
    30  	return cl.GetProgramAccountsWithOpts(
    31  		ctx,
    32  		publicKey,
    33  		nil,
    34  	)
    35  }
    36  
    37  // GetProgramAccountsWithOpts returns all accounts owned by the provided program publicKey.
    38  func (cl *Client) GetProgramAccountsWithOpts(
    39  	ctx context.Context,
    40  	publicKey solana.PublicKey,
    41  	opts *GetProgramAccountsOpts,
    42  ) (out GetProgramAccountsResult, err error) {
    43  	obj := M{
    44  		"encoding": "base64",
    45  	}
    46  	if opts != nil {
    47  		if opts.Commitment != "" {
    48  			obj["commitment"] = string(opts.Commitment)
    49  		}
    50  		if len(opts.Filters) != 0 {
    51  			obj["filters"] = opts.Filters
    52  		}
    53  		if opts.Encoding != "" {
    54  			obj["encoding"] = opts.Encoding
    55  		}
    56  		if opts.DataSlice != nil {
    57  			obj["dataSlice"] = M{
    58  				"offset": opts.DataSlice.Offset,
    59  				"length": opts.DataSlice.Length,
    60  			}
    61  		}
    62  	}
    63  
    64  	params := []interface{}{publicKey, obj}
    65  
    66  	err = cl.rpcClient.CallForInto(ctx, &out, "getProgramAccounts", params)
    67  	return
    68  }