From a910d0382b9f3567933435d6771b06b5c855836c Mon Sep 17 00:00:00 2001 From: Erik Olsson Date: Fri, 10 Jan 2025 23:30:34 +0100 Subject: [PATCH] add config flag for globally enabling/disabling mls events (#1992) --- core/config/config.go | 4 ++++ core/env/local/multi/config.yaml | 1 + core/env/local/multi_ne/config.yaml | 1 + core/node/rpc/add_event.go | 1 + core/node/rules/can_add_event.go | 12 ++++++++++-- packages/sdk/src/tests/multi_ne/mls.test.ts | 4 ++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/config/config.go b/core/config/config.go index 651f72b94b..3bce49432b 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -79,6 +79,7 @@ func GetDefaultConfig() *Config { SingleCallTimeout: 30 * time.Second, // geth internal timeout is 30 seconds ProgressReportInterval: 10 * time.Second, }, + EnableMls: false, } } @@ -149,6 +150,9 @@ type Config struct { // Disable base chain contract usage. DisableBaseChain bool + + // Enable MemberPayload_Mls. + EnableMls bool // Chains provides a map of chain IDs to their provider URLs as // a comma-serparated list of chainID:URL pairs. diff --git a/core/env/local/multi/config.yaml b/core/env/local/multi/config.yaml index b558978fec..28ce1c9c3e 100644 --- a/core/env/local/multi/config.yaml +++ b/core/env/local/multi/config.yaml @@ -1 +1,2 @@ disableBaseChain: false +enableMls: true diff --git a/core/env/local/multi_ne/config.yaml b/core/env/local/multi_ne/config.yaml index 00172e65fe..973dca3402 100644 --- a/core/env/local/multi_ne/config.yaml +++ b/core/env/local/multi_ne/config.yaml @@ -1 +1,2 @@ disableBaseChain: true +enableMls: true diff --git a/core/node/rpc/add_event.go b/core/node/rpc/add_event.go index cc624f04d2..0267dd7d0d 100644 --- a/core/node/rpc/add_event.go +++ b/core/node/rpc/add_event.go @@ -66,6 +66,7 @@ func (s *Service) addParsedEvent( canAddEvent, verifications, sideEffects, err := rules.CanAddEvent( ctx, + *s.config, s.chainConfig, s.nodeRegistry.GetValidNodeAddresses(), time.Now(), diff --git a/core/node/rules/can_add_event.go b/core/node/rules/can_add_event.go index e24cb1778f..0646496938 100644 --- a/core/node/rules/can_add_event.go +++ b/core/node/rules/can_add_event.go @@ -10,6 +10,7 @@ import ( "google.golang.org/protobuf/proto" + "github.com/river-build/river/core/config" "github.com/river-build/river/core/node/crypto" "github.com/river-build/river/core/node/mls_service" "github.com/river-build/river/core/node/mls_service/mls_tools" @@ -30,7 +31,8 @@ import ( type aeParams struct { ctx context.Context - cfg crypto.OnChainConfiguration + config config.Config + chainConfig crypto.OnChainConfiguration mediaMaxChunkSize int streamMembershipLimit int validNodeAddresses []common.Address @@ -168,6 +170,7 @@ type aeHideUserJoinLeaveEventsWrapperRules struct { */ func CanAddEvent( ctx context.Context, + config config.Config, chainConfig crypto.OnChainConfiguration, validNodeAddresses []common.Address, currentTime time.Time, @@ -205,7 +208,8 @@ func CanAddEvent( ru := &aeParams{ ctx: ctx, - cfg: chainConfig, + config: config, + chainConfig: chainConfig, mediaMaxChunkSize: int(settings.MediaMaxChunkSize), streamMembershipLimit: int(settings.MembershipLimits.ForType(streamView.StreamId().Type())), validNodeAddresses: validNodeAddresses, @@ -594,6 +598,10 @@ func (params *aeParams) canAddMemberPayload(payload *StreamEvent_MemberPayload) check(ru.validMemberBlockchainTransaction_IsUnique). check(ru.validMemberBlockchainTransaction_ReceiptMetadata) case *MemberPayload_Mls_: + if !params.config.EnableMls { + return aeBuilder(). + fail(RiverError(Err_INVALID_ARGUMENT, "mls disabled globally")) + } return params.canAddMlsPayload(content.Mls) case *MemberPayload_EncryptionAlgorithm_: diff --git a/packages/sdk/src/tests/multi_ne/mls.test.ts b/packages/sdk/src/tests/multi_ne/mls.test.ts index d9b89939b8..bc499bff51 100644 --- a/packages/sdk/src/tests/multi_ne/mls.test.ts +++ b/packages/sdk/src/tests/multi_ne/mls.test.ts @@ -304,6 +304,8 @@ describe('mlsTests', () => { const mls = streamAfterSnapshot.membershipContent.mls expect(mls.externalGroupSnapshot).toBeDefined() expect(mls.groupInfoMessage).toBeDefined() + expect(mls.externalGroupSnapshot!.length).toBeGreaterThan(0) + expect(mls.groupInfoMessage!.length).toBeGreaterThan(0) expect(bin_equal(mls.externalGroupSnapshot, latestExternalGroupSnapshot)).toBe(true) expect(bin_equal(mls.groupInfoMessage, latestGroupInfoMessage)).toBe(true) }) @@ -357,6 +359,8 @@ describe('mlsTests', () => { const mls = streamAfterSnapshot.membershipContent.mls expect(mls.externalGroupSnapshot).toBeDefined() expect(mls.groupInfoMessage).toBeDefined() + expect(mls.externalGroupSnapshot!.length).toBeGreaterThan(0) + expect(mls.groupInfoMessage!.length).toBeGreaterThan(0) expect(bin_equal(mls.groupInfoMessage, latestGroupInfoMessage)).toBe(true) })