-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinstructions_initialize_pool.go
139 lines (118 loc) · 3 KB
/
instructions_initialize_pool.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package splitter_token
import (
"bytes"
"crypto/ed25519"
)
var initializePoolInstructionDiscriminator = []byte{
95, 180, 10, 172, 84, 174, 232, 40,
}
const (
InitializePoolInstructionArgsSize = (MaxNameLength + // Name
1) // Levels
InitializePoolInstructionAccountsSize = (32 + // pool
32 + // vault
32 + // mint
32 + // authority
32 + // payer
32 + // splTokenProgram
32 + // systemProgram
32) // sysvarRent
InitializePoolInstructionSize = (8 + // discriminator
InitializePoolInstructionArgsSize + // args
InitializePoolInstructionAccountsSize) // accounts
)
type InitializePoolInstructionArgs struct {
Name string
Levels uint8
}
type InitializePoolInstructionAccounts struct {
Pool ed25519.PublicKey
Vault ed25519.PublicKey
Mint ed25519.PublicKey
Authority ed25519.PublicKey
Payer ed25519.PublicKey
}
func NewInitializePoolInstruction(
accounts *InitializePoolInstructionAccounts,
args *InitializePoolInstructionArgs,
) Instruction {
var offset int
// Serialize instruction arguments
data := make([]byte,
len(initializePoolInstructionDiscriminator)+
InitializePoolInstructionArgsSize)
putDiscriminator(data, initializePoolInstructionDiscriminator, &offset)
putName(data, args.Name, &offset)
putUint8(data, args.Levels, &offset)
return Instruction{
Program: PROGRAM_ADDRESS,
// Instruction args
Data: data,
// Instruction accounts
Accounts: []AccountMeta{
{
PublicKey: accounts.Pool,
IsWritable: true,
IsSigner: false,
},
{
PublicKey: accounts.Vault,
IsWritable: true,
IsSigner: false,
},
{
PublicKey: accounts.Mint,
IsWritable: false,
IsSigner: false,
},
{
PublicKey: accounts.Authority,
IsWritable: false,
IsSigner: true,
},
{
PublicKey: accounts.Payer,
IsWritable: true,
IsSigner: true,
},
{
PublicKey: SPL_TOKEN_PROGRAM_ID,
IsWritable: false,
IsSigner: false,
},
{
PublicKey: SYSTEM_PROGRAM_ID,
IsWritable: false,
IsSigner: false,
},
{
PublicKey: SYSVAR_RENT_PUBKEY,
IsWritable: false,
IsSigner: false,
},
},
}
}
func InitializePoolInstructionFromBinary(data []byte) (*InitializePoolInstructionArgs, *InitializePoolInstructionAccounts, error) {
var offset int
var discriminator []byte
if len(data) < InitializePoolInstructionSize {
return nil, nil, ErrInvalidInstructionData
}
getDiscriminator(data, &discriminator, &offset)
if !bytes.Equal(discriminator, initializePoolInstructionDiscriminator) {
return nil, nil, ErrInvalidInstructionData
}
var args InitializePoolInstructionArgs
var accounts InitializePoolInstructionAccounts
// Instruction Args
getName(data, &args.Name, &offset)
getUint8(data, &args.Levels, &offset)
// Instruction Accounts
getKey(data, &accounts.Pool, &offset)
getKey(data, &accounts.Vault, &offset)
getKey(data, &accounts.Mint, &offset)
getKey(data, &accounts.Authority, &offset)
getKey(data, &accounts.Payer, &offset)
return &args, &accounts, nil
}