I have wrote a gitbook. It includes many examples like, create account, create token, transfer SOL/Token, fetch NFT ...
You will find more info in the book!
Also feel free to post a issue for missing content.
go get -v github.com/portto/solana-go-sdk@v1.10.2
package main
import (
"context"
"fmt"
"log"
"github.com/portto/solana-go-sdk/client"
"github.com/portto/solana-go-sdk/rpc"
)
func main() {
c := client.NewClient(rpc.MainnetRPCEndpoint)
resp, err := c.GetVersion(context.TODO())
if err != nil {
log.Fatalf("failed to version info, err: %v", err)
}
fmt.Println("version", resp.SolanaCore)
}
All interfaces of rpc follow the solana's json-rpc docs.
The implementation of client in this project separate into two parts, rpc and wrapped. The wrapped only returns main result value and the rpc returns whole rpc response. You can switch it by yourself for different situation. Take getBalance
as example:
package main
import (
"context"
"fmt"
"log"
"github.com/portto/solana-go-sdk/client"
"github.com/portto/solana-go-sdk/rpc"
)
func main() {
c := client.NewClient(rpc.DevnetRPCEndpoint)
// get balance
balance, err := c.GetBalance(
context.TODO(),
"RNfp4xTbBb4C3kcv2KqtAj8mu4YhMHxqm1Skg9uchZ7",
)
if err != nil {
log.Fatalf("failed to get balance, err: %v", err)
}
fmt.Printf("balance: %v\n", balance)
// get balance with sepcific commitment
balance, err = c.GetBalanceWithConfig(
context.TODO(),
"RNfp4xTbBb4C3kcv2KqtAj8mu4YhMHxqm1Skg9uchZ7",
rpc.GetBalanceConfig{
Commitment: rpc.CommitmentProcessed,
},
)
if err != nil {
log.Fatalf("failed to get balance with cfg, err: %v", err)
}
fmt.Printf("balance: %v\n", balance)
// for advanced usage. fetch full rpc response
res, err := c.RpcClient.GetBalance(
context.TODO(),
"RNfp4xTbBb4C3kcv2KqtAj8mu4YhMHxqm1Skg9uchZ7",
)
if err != nil {
log.Fatalf("failed to get balance via rpc client, err: %v", err)
}
fmt.Printf("response: %+v\n", res)
}
There are some important tpyes in solana.
- Program
resides in the program/
folder.
- Pubkey (a basic identity of key)
resides in the common/
folder.
- Insturciton (contain many pubkeys and program ID)
- Message (contain many instructions)
- Transaction (contain a message and many signatures)
- Account (a pub/pri keypair )
reside in the types/
folder.
for more examples, follow examples/
folder