Skip to content

Commit c49ce9d

Browse files
authored
chore: port solana generate view (#49)
Adds missing `GenerateView` for solana state loading
1 parent 5a793ef commit c49ce9d

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

legacy/pkg/family/solana/state.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package solana
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67

@@ -13,6 +14,7 @@ import (
1314
mcmssolanasdk "github.com/smartcontractkit/mcms/sdk/solana"
1415

1516
cldchangesetscommon "github.com/smartcontractkit/cld-changesets/pkg/common"
17+
"github.com/smartcontractkit/cld-changesets/pkg/contract/mcms/view/v1_0"
1618
)
1719

1820
type PDASeed [32]byte
@@ -34,6 +36,48 @@ type MCMSWithTimelockPrograms struct {
3436
BypasserAccessControllerAccount solana.PublicKey
3537
}
3638

39+
// Validate checks that all fields are non-nil, ensuring it's ready
40+
// for use generating views or interactions.
41+
func (s *MCMSWithTimelockPrograms) Validate() error {
42+
if s.McmProgram.IsZero() {
43+
return errors.New("mcm program not found")
44+
}
45+
if s.TimelockProgram.IsZero() {
46+
return errors.New("timelock program not found")
47+
}
48+
if s.AccessControllerProgram.IsZero() {
49+
return errors.New("access controller program not found")
50+
}
51+
if s.ProposerAccessControllerAccount.IsZero() {
52+
return errors.New("proposer access controller account not found")
53+
}
54+
if s.ExecutorAccessControllerAccount.IsZero() {
55+
return errors.New("executor access controller account not found")
56+
}
57+
if s.CancellerAccessControllerAccount.IsZero() {
58+
return errors.New("canceller access controller account not found")
59+
}
60+
if s.BypasserAccessControllerAccount.IsZero() {
61+
return errors.New("bypasser access controller account not found")
62+
}
63+
64+
return nil
65+
}
66+
67+
func (s *MCMSWithTimelockPrograms) GenerateView(
68+
ctx context.Context, chain cldf_solana.Chain,
69+
) (v1_0.MCMSWithTimelockViewSolana, error) {
70+
if err := s.Validate(); err != nil {
71+
return v1_0.MCMSWithTimelockViewSolana{}, fmt.Errorf("unable to validate state: %w", err)
72+
}
73+
74+
inspector := mcmssolanasdk.NewInspector(chain.Client)
75+
timelockInspector := mcmssolanasdk.NewTimelockInspector(chain.Client)
76+
77+
return v1_0.GenerateMCMSWithTimelockViewSolana(ctx, inspector, timelockInspector, s.McmProgram,
78+
s.ProposerMcmSeed, s.CancellerMcmSeed, s.BypasserMcmSeed, s.TimelockProgram, s.TimelockSeed)
79+
}
80+
3781
func (s *MCMSWithTimelockPrograms) GetStateFromType(programType cldf.ContractType) (solana.PublicKey, PDASeed, error) {
3882
switch programType {
3983
case mcmscontracts.ManyChainMultisigProgram:

0 commit comments

Comments
 (0)