Skip to content

Commit 4c4aab2

Browse files
committed
Move account derivations and add RewardManagerState struct
1 parent 4b0238f commit 4c4aab2

2 files changed

Lines changed: 49 additions & 36 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package reward_manager
2+
3+
import (
4+
"encoding/hex"
5+
"strings"
6+
7+
"github.com/gagliardetto/solana-go"
8+
)
9+
10+
type RewardManagerState struct {
11+
Version uint8
12+
TokenAccount solana.PublicKey
13+
Manager solana.PublicKey
14+
MinVotes uint8
15+
}
16+
17+
func deriveAuthority(programId solana.PublicKey, state solana.PublicKey) (solana.PublicKey, uint8, error) {
18+
seeds := make([][]byte, 1)
19+
seeds[0] = state.Bytes()[0:32]
20+
return solana.FindProgramAddress(seeds, programId)
21+
}
22+
23+
func deriveSender(programId solana.PublicKey, authority solana.PublicKey, ethAddress string) (solana.PublicKey, uint8, error) {
24+
senderSeedPrefix := []byte(SenderSeedPrefix)
25+
// Remove 0x and decode hex
26+
decodedEthAddress, err := hex.DecodeString(strings.TrimPrefix(ethAddress, "0x"))
27+
if err != nil {
28+
return solana.PublicKey{}, 0, err
29+
}
30+
// Pad the eth address if necessary w/ leading 0
31+
senderSeed := make([]byte, len(senderSeedPrefix)+EthAddressByteLength)
32+
copy(senderSeed, senderSeedPrefix)
33+
copy(senderSeed[len(senderSeed)-len(decodedEthAddress):], decodedEthAddress)
34+
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], senderSeed}, programId)
35+
}
36+
37+
func deriveAttestations(programId solana.PublicKey, authority solana.PublicKey, disbursementId string) (solana.PublicKey, uint8, error) {
38+
attestationsSeed := make([]byte, len(AttestationsSeedPrefix)+len(disbursementId))
39+
copy(attestationsSeed, []byte(AttestationsSeedPrefix))
40+
copy(attestationsSeed[len([]byte(AttestationsSeedPrefix)):], disbursementId)
41+
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], attestationsSeed}, programId)
42+
}
43+
44+
func deriveDisbursement(programId solana.PublicKey, authority solana.PublicKey, disbursementId string) (solana.PublicKey, uint8, error) {
45+
disbursementSeed := make([]byte, len(DisbursementSeedPrefix)+len(disbursementId))
46+
copy(disbursementSeed, []byte(DisbursementSeedPrefix))
47+
copy(disbursementSeed[len([]byte(DisbursementSeedPrefix)):], disbursementId)
48+
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], disbursementSeed}, programId)
49+
}

api/spl/programs/reward_manager/instruction.go

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package reward_manager
22

33
import (
44
"bytes"
5-
"encoding/hex"
65
"fmt"
7-
"strings"
86

97
bin "github.com/gagliardetto/binary"
108
"github.com/gagliardetto/solana-go"
@@ -127,37 +125,3 @@ func DecodeInstruction(accounts []*solana.AccountMeta, data []byte) (*Instructio
127125
}
128126
return inst, nil
129127
}
130-
131-
func deriveAuthority(programId solana.PublicKey, state solana.PublicKey) (solana.PublicKey, uint8, error) {
132-
seeds := make([][]byte, 1)
133-
seeds[0] = state.Bytes()[0:32]
134-
return solana.FindProgramAddress(seeds, programId)
135-
}
136-
137-
func deriveSender(programId solana.PublicKey, authority solana.PublicKey, ethAddress string) (solana.PublicKey, uint8, error) {
138-
senderSeedPrefix := []byte(SenderSeedPrefix)
139-
// Remove 0x and decode hex
140-
decodedEthAddress, err := hex.DecodeString(strings.TrimPrefix(ethAddress, "0x"))
141-
if err != nil {
142-
return solana.PublicKey{}, 0, err
143-
}
144-
// Pad the eth address if necessary w/ leading 0
145-
senderSeed := make([]byte, len(senderSeedPrefix)+EthAddressByteLength)
146-
copy(senderSeed, senderSeedPrefix)
147-
copy(senderSeed[len(senderSeed)-len(decodedEthAddress):], decodedEthAddress)
148-
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], senderSeed}, programId)
149-
}
150-
151-
func deriveAttestations(programId solana.PublicKey, authority solana.PublicKey, disbursementId string) (solana.PublicKey, uint8, error) {
152-
attestationsSeed := make([]byte, len(AttestationsSeedPrefix)+len(disbursementId))
153-
copy(attestationsSeed, []byte(AttestationsSeedPrefix))
154-
copy(attestationsSeed[len([]byte(AttestationsSeedPrefix)):], disbursementId)
155-
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], attestationsSeed}, programId)
156-
}
157-
158-
func deriveDisbursement(programId solana.PublicKey, authority solana.PublicKey, disbursementId string) (solana.PublicKey, uint8, error) {
159-
disbursementSeed := make([]byte, len(DisbursementSeedPrefix)+len(disbursementId))
160-
copy(disbursementSeed, []byte(DisbursementSeedPrefix))
161-
copy(disbursementSeed[len([]byte(DisbursementSeedPrefix)):], disbursementId)
162-
return solana.FindProgramAddress([][]byte{authority.Bytes()[0:32], disbursementSeed}, programId)
163-
}

0 commit comments

Comments
 (0)