forked from blocto/solana-go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get_transaction.go
90 lines (76 loc) · 3.75 KB
/
get_transaction.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package rpc
import (
"context"
)
type GetTransactionResponse JsonRpcResponse[*GetTransaction]
// GetTransaction is a part of GetTransactionResponse
type GetTransaction struct {
Slot uint64 `json:"slot"`
Meta *TransactionMeta `json:"meta"`
Transaction any `json:"transaction"`
BlockTime *int64 `json:"blockTime"`
Version any `json:"version,omitempty"`
}
// TransactionMeta is a part of GetTransactionResult
type TransactionMeta struct {
Err any `json:"err"`
Fee uint64 `json:"fee"`
PreBalances []int64 `json:"preBalances"`
PostBalances []int64 `json:"postBalances"`
PreTokenBalances []TransactionMetaTokenBalance `json:"preTokenBalances"`
PostTokenBalances []TransactionMetaTokenBalance `json:"postTokenBalances"`
LogMessages []string `json:"logMessages"`
InnerInstructions []TransactionMetaInnerInstruction `json:"innerInstructions"`
LoadedAddresses TransactionLoadedAddresses `json:"loadedAddresses"`
ReturnData *ReturnData `json:"returnData"`
ComputeUnitsConsumed *uint64 `json:"computeUnitsConsumed"`
}
// TransactionMetaTokenBalance is a part of TransactionMeta
type TransactionMetaTokenBalance struct {
AccountIndex uint64 `json:"accountIndex"`
Mint string `json:"mint"`
Owner string `json:"owner,omitempty"`
UITokenAmount TokenAccountBalance `json:"uiTokenAmount"`
}
// TransactionMetaInnerInstruction is a part of TransactionMeta
type TransactionMetaInnerInstruction struct {
Index uint64 `json:"index"`
Instructions []any `json:"instructions"`
}
// Instruction is a part of TransactionMetaInnerInstruction
type Instruction struct {
ProgramIDIndex int `json:"programIdIndex"`
Accounts []int `json:"accounts"`
Data string `json:"data"`
}
// TransactionMetaReward is a part of TransactionMeta
type TransactionMetaReward struct {
Pubkey string `json:"pubkey"`
Lamports int64 `json:"lamports"`
PostBalances uint64 `json:"postBalance"`
RewardType TransactionMetaRewardType `json:"rewardType"`
Commission *uint8 `json:"commission"`
}
type TransactionMetaRewardType string
const (
// currently only "rent", other types may be added in the future
TransactionMetaRewardTypeRent TransactionMetaRewardType = "rent"
)
type TransactionLoadedAddresses struct {
Writable []string `json:"writable"`
Readonly []string `json:"readonly"`
}
// GetTransactionConfig is a option config for `getTransaction`
type GetTransactionConfig struct {
Encoding TransactionEncoding `json:"encoding,omitempty"`
Commitment Commitment `json:"commitment,omitempty"` // "processed" is not supported
MaxSupportedTransactionVersion *uint8 `json:"maxSupportedTransactionVersion,omitempty"` // default: nil legacy only
}
// GetTransaction returns transaction details for a confirmed transaction
func (c *RpcClient) GetTransaction(ctx context.Context, txhash string) (JsonRpcResponse[*GetTransaction], error) {
return call[JsonRpcResponse[*GetTransaction]](c, ctx, "getTransaction", txhash)
}
// GetTransactionWithConfig returns transaction details for a confirmed transaction
func (c *RpcClient) GetTransactionWithConfig(ctx context.Context, txhash string, cfg GetTransactionConfig) (JsonRpcResponse[*GetTransaction], error) {
return call[JsonRpcResponse[*GetTransaction]](c, ctx, "getTransaction", txhash, cfg)
}