Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions legacy/pkg/family/solana/state.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package solana

import (
"context"
"errors"
"fmt"

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

cldchangesetscommon "github.com/smartcontractkit/cld-changesets/pkg/common"
"github.com/smartcontractkit/cld-changesets/pkg/contract/mcms/view/v1_0"
)

type PDASeed [32]byte
Expand All @@ -34,6 +36,48 @@ type MCMSWithTimelockPrograms struct {
BypasserAccessControllerAccount solana.PublicKey
}

// Validate checks that all fields are non-nil, ensuring it's ready
// for use generating views or interactions.
Comment on lines +39 to +40
func (s *MCMSWithTimelockPrograms) Validate() error {
if s.McmProgram.IsZero() {
return errors.New("mcm program not found")
}
if s.TimelockProgram.IsZero() {
return errors.New("timelock program not found")
}
Comment on lines +44 to +47
Comment on lines +39 to +47
if s.AccessControllerProgram.IsZero() {
return errors.New("access controller program not found")
}
if s.ProposerAccessControllerAccount.IsZero() {
return errors.New("proposer access controller account not found")
}
if s.ExecutorAccessControllerAccount.IsZero() {
return errors.New("executor access controller account not found")
}
if s.CancellerAccessControllerAccount.IsZero() {
return errors.New("canceller access controller account not found")
}
if s.BypasserAccessControllerAccount.IsZero() {
return errors.New("bypasser access controller account not found")
}

return nil
}

func (s *MCMSWithTimelockPrograms) GenerateView(
ctx context.Context, chain cldf_solana.Chain,
) (v1_0.MCMSWithTimelockViewSolana, error) {
if err := s.Validate(); err != nil {
return v1_0.MCMSWithTimelockViewSolana{}, fmt.Errorf("unable to validate state: %w", err)
}

inspector := mcmssolanasdk.NewInspector(chain.Client)
timelockInspector := mcmssolanasdk.NewTimelockInspector(chain.Client)

return v1_0.GenerateMCMSWithTimelockViewSolana(ctx, inspector, timelockInspector, s.McmProgram,
s.ProposerMcmSeed, s.CancellerMcmSeed, s.BypasserMcmSeed, s.TimelockProgram, s.TimelockSeed)
}

func (s *MCMSWithTimelockPrograms) GetStateFromType(programType cldf.ContractType) (solana.PublicKey, PDASeed, error) {
switch programType {
case mcmscontracts.ManyChainMultisigProgram:
Expand Down
Loading