Skip to content

Commit 6325515

Browse files
Merge pull request #386 from sonicfromnewyoke/sonic/feat-stake-state-types-and-tests
feat: stake state types & ext tests
2 parents 04dfc79 + ea77e31 commit 6325515

18 files changed

Lines changed: 1006 additions & 0 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_AuthorizeChecked(t *testing.T) {
11+
inst := NewAuthorizeCheckedInstructionBuilder().
12+
SetStakeAccount(pubkeyOf(1)).
13+
SetClockSysvar(solana.SysVarClockPubkey).
14+
SetCurrentAuthority(pubkeyOf(2)).
15+
SetNewAuthority(pubkeyOf(3)).
16+
SetStakeAuthorize(StakeAuthorizeStaker)
17+
18+
data, err := encodeInst(inst)
19+
require.NoError(t, err)
20+
require.Equal(t, u32LE(Instruction_AuthorizeChecked), data[:4])
21+
22+
decoded, err := DecodeInstruction(nil, data)
23+
require.NoError(t, err)
24+
ac := decoded.Impl.(*AuthorizeChecked)
25+
require.Equal(t, StakeAuthorizeStaker, *ac.StakeAuthorize)
26+
}

programs/stake/Authorize_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_Authorize(t *testing.T) {
11+
newAuth := pubkeyOf(5)
12+
inst := NewAuthorizeInstructionBuilder().
13+
SetStakeAccount(pubkeyOf(1)).
14+
SetClockSysvar(solana.SysVarClockPubkey).
15+
SetAuthority(pubkeyOf(2)).
16+
SetNewAuthorized(newAuth).
17+
SetStakeAuthorize(StakeAuthorizeWithdrawer)
18+
19+
data, err := encodeInst(inst)
20+
require.NoError(t, err)
21+
require.Equal(t, u32LE(Instruction_Authorize), data[:4])
22+
23+
decoded, err := DecodeInstruction(nil, data)
24+
require.NoError(t, err)
25+
auth := decoded.Impl.(*Authorize)
26+
require.Equal(t, newAuth, *auth.NewAuthorized)
27+
require.Equal(t, StakeAuthorizeWithdrawer, *auth.StakeAuthorize)
28+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestRoundTrip_DeactivateDelinquent(t *testing.T) {
10+
inst := NewDeactivateDelinquentInstruction(pubkeyOf(1), pubkeyOf(2), pubkeyOf(3))
11+
data, err := encodeInst(inst)
12+
require.NoError(t, err)
13+
require.Equal(t, u32LE(Instruction_DeactivateDelinquent), data[:4])
14+
require.Len(t, data, 4)
15+
}

programs/stake/Deactivate_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_Deactivate(t *testing.T) {
11+
inst := NewDeactivateInstructionBuilder().
12+
SetStakeAccount(pubkeyOf(1)).
13+
SetClockSysvar(solana.SysVarClockPubkey).
14+
SetStakeAuthority(pubkeyOf(2))
15+
16+
data, err := encodeInst(inst)
17+
require.NoError(t, err)
18+
require.Equal(t, u32LE(Instruction_Deactivate), data[:4])
19+
require.Len(t, data, 4)
20+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_DelegateStake(t *testing.T) {
11+
inst := NewDelegateStakeInstructionBuilder().
12+
SetStakeAccount(pubkeyOf(1)).
13+
SetVoteAccount(pubkeyOf(2)).
14+
SetClockSysvar(solana.SysVarClockPubkey).
15+
SetStakeHistorySysvar(solana.SysVarStakeHistoryPubkey).
16+
SetConfigAccount(pubkeyOf(3)).
17+
SetStakeAuthority(pubkeyOf(4))
18+
19+
data, err := encodeInst(inst)
20+
require.NoError(t, err)
21+
require.Equal(t, u32LE(Instruction_DelegateStake), data[:4])
22+
require.Len(t, data, 4)
23+
24+
decoded, err := DecodeInstruction(nil, data)
25+
require.NoError(t, err)
26+
require.IsType(t, &DelegateStake{}, decoded.Impl)
27+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestRoundTrip_GetMinimumDelegation(t *testing.T) {
10+
inst := NewGetMinimumDelegationInstruction()
11+
data, err := encodeInst(inst)
12+
require.NoError(t, err)
13+
require.Equal(t, u32LE(Instruction_GetMinimumDelegation), data[:4])
14+
require.Len(t, data, 4)
15+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_InitializeChecked(t *testing.T) {
11+
inst := NewInitializeCheckedInstructionBuilder().
12+
SetStakeAccount(pubkeyOf(1)).
13+
SetRentSysvar(solana.SysVarRentPubkey).
14+
SetStakeAuthority(pubkeyOf(2)).
15+
SetWithdrawAuthority(pubkeyOf(3))
16+
17+
data, err := encodeInst(inst)
18+
require.NoError(t, err)
19+
require.Equal(t, u32LE(Instruction_InitializeChecked), data[:4])
20+
require.Len(t, data, 4)
21+
}

programs/stake/Initialize_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_Initialize(t *testing.T) {
11+
staker := pubkeyOf(1)
12+
withdrawer := pubkeyOf(2)
13+
custodian := pubkeyOf(3)
14+
15+
inst := NewInitializeInstructionBuilder().
16+
SetStakeAccount(pubkeyOf(10)).
17+
SetRentSysvarAccount(solana.SysVarRentPubkey).
18+
SetStaker(staker).
19+
SetWithdrawer(withdrawer).
20+
SetLockupTimestamp(1000).
21+
SetLockupEpoch(42).
22+
SetCustodian(custodian)
23+
24+
data, err := encodeInst(inst)
25+
require.NoError(t, err)
26+
27+
// First 4 bytes: instruction ID (u32 LE)
28+
require.Equal(t, u32LE(Instruction_Initialize), data[:4])
29+
30+
// Decode back
31+
decoded, err := DecodeInstruction(nil, data)
32+
require.NoError(t, err)
33+
init := decoded.Impl.(*Initialize)
34+
require.Equal(t, staker, *init.Authorized.Staker)
35+
require.Equal(t, withdrawer, *init.Authorized.Withdrawer)
36+
require.Equal(t, int64(1000), *init.Lockup.UnixTimestamp)
37+
require.Equal(t, uint64(42), *init.Lockup.Epoch)
38+
require.Equal(t, custodian, *init.Lockup.Custodian)
39+
}

programs/stake/Merge_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gagliardetto/solana-go"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRoundTrip_Merge(t *testing.T) {
11+
inst := NewMergeInstructionBuilder().
12+
SetDestinationStakeAccount(pubkeyOf(1)).
13+
SetSourceStakeAccount(pubkeyOf(2)).
14+
SetClockSysvar(solana.SysVarClockPubkey).
15+
SetStakeHistorySysvar(solana.SysVarStakeHistoryPubkey).
16+
SetStakeAuthority(pubkeyOf(3))
17+
18+
data, err := encodeInst(inst)
19+
require.NoError(t, err)
20+
require.Equal(t, u32LE(Instruction_Merge), data[:4])
21+
require.Len(t, data, 4)
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package stake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestRoundTrip_MoveLamports(t *testing.T) {
10+
inst := NewMoveLamportsInstruction(3_000_000_000, pubkeyOf(1), pubkeyOf(2), pubkeyOf(3))
11+
data, err := encodeInst(inst)
12+
require.NoError(t, err)
13+
require.Equal(t, u32LE(Instruction_MoveLamports), data[:4])
14+
15+
decoded, err := DecodeInstruction(nil, data)
16+
require.NoError(t, err)
17+
ml := decoded.Impl.(*MoveLamports)
18+
require.Equal(t, uint64(3_000_000_000), *ml.Lamports)
19+
}

0 commit comments

Comments
 (0)