11package solana
22
33import (
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
1820type 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+
3781func (s * MCMSWithTimelockPrograms ) GetStateFromType (programType cldf.ContractType ) (solana.PublicKey , PDASeed , error ) {
3882 switch programType {
3983 case mcmscontracts .ManyChainMultisigProgram :
0 commit comments