github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/module/updatable_configs/sealing_configs.go (about) 1 package updatable_configs 2 3 import ( 4 "fmt" 5 6 "go.uber.org/atomic" 7 8 "github.com/onflow/flow-go/model/flow" 9 "github.com/onflow/flow-go/module" 10 "github.com/onflow/flow-go/module/updatable_configs/validation" 11 ) 12 13 // min number of approvals required for constructing a candidate seal 14 type sealingConfigs struct { 15 requiredApprovalsForSealConstruction *atomic.Uint32 16 requiredApprovalsForSealVerification uint 17 chunkAlpha uint 18 emergencySealingActive bool // flag which indicates if emergency sealing is active or not. NOTE: this is temporary while sealing & verification is under development 19 approvalRequestsThreshold uint64 // threshold for re-requesting approvals: min height difference between the latest finalized block and the block incorporating a result 20 } 21 22 var _ module.SealingConfigsSetter = (*sealingConfigs)(nil) 23 24 func NewSealingConfigs( 25 requiredApprovalsForSealConstruction uint, 26 requiredApprovalsForSealVerification uint, 27 chunkAlpha uint, 28 emergencySealingActive bool, 29 ) (module.SealingConfigsSetter, error) { 30 err := validation.ValidateRequireApprovals( 31 requiredApprovalsForSealConstruction, 32 requiredApprovalsForSealVerification, 33 chunkAlpha, 34 ) 35 if err != nil { 36 return nil, fmt.Errorf("can not create RequiredApprovalsForSealConstructionInstance: %w", err) 37 } 38 return &sealingConfigs{ 39 requiredApprovalsForSealConstruction: atomic.NewUint32(uint32(requiredApprovalsForSealConstruction)), 40 requiredApprovalsForSealVerification: requiredApprovalsForSealVerification, 41 chunkAlpha: chunkAlpha, 42 emergencySealingActive: emergencySealingActive, 43 approvalRequestsThreshold: flow.DefaultApprovalRequestsThreshold, 44 }, nil 45 } 46 47 // SetRequiredApprovalsForSealingConstruction takes a new config value and updates the config 48 // if the new value is valid. 49 // Returns ValidationError if the new value results in an invalid sealing config. 50 func (r *sealingConfigs) SetRequiredApprovalsForSealingConstruction(requiredApprovalsForSealConstruction uint) error { 51 err := validation.ValidateRequireApprovals( 52 requiredApprovalsForSealConstruction, 53 r.requiredApprovalsForSealVerification, 54 r.chunkAlpha, 55 ) 56 if err != nil { 57 return NewValidationErrorf("invalid: %w", err) 58 } 59 60 r.requiredApprovalsForSealConstruction.Store(uint32(requiredApprovalsForSealConstruction)) 61 62 return nil 63 } 64 65 // RequireApprovalsForSealConstructionDynamicValue gets the latest value of requiredApprovalsForSealConstruction 66 func (r *sealingConfigs) RequireApprovalsForSealConstructionDynamicValue() uint { 67 return uint(r.requiredApprovalsForSealConstruction.Load()) 68 } 69 70 // ChunkAlphaConst returns the constant chunk alpha value 71 func (r *sealingConfigs) ChunkAlphaConst() uint { 72 return r.chunkAlpha 73 } 74 75 // RequireApprovalsForSealVerificationConst returns the constant RequireApprovalsForSealVerification value 76 func (r *sealingConfigs) RequireApprovalsForSealVerificationConst() uint { 77 return r.requiredApprovalsForSealVerification 78 } 79 80 // EmergencySealingActiveConst returns the constant EmergencySealingActive value 81 func (r *sealingConfigs) EmergencySealingActiveConst() bool { 82 return r.emergencySealingActive 83 } 84 85 func (r *sealingConfigs) ApprovalRequestsThresholdConst() uint64 { 86 return r.approvalRequestsThreshold 87 }