From 6cd1a15006da7babb77e1c912219311c814b9a0f Mon Sep 17 00:00:00 2001 From: Nicholas Molnar <65710+neekolas@users.noreply.github.com> Date: Tue, 18 Nov 2025 07:29:07 -0800 Subject: [PATCH] [DO NOT MERGE] hack duplicate welcomes --- .github/workflows/build-node-go.yml | 2 +- pkg/mls/store/store.go | 126 +++++++++++++++++++--------- 2 files changed, 88 insertions(+), 40 deletions(-) diff --git a/.github/workflows/build-node-go.yml b/.github/workflows/build-node-go.yml index d942b67d..3d1f205b 100644 --- a/.github/workflows/build-node-go.yml +++ b/.github/workflows/build-node-go.yml @@ -72,7 +72,7 @@ jobs: with: context: . file: ./dev/docker/${{ steps.set_dockerfile.outputs.dockerfile }} - push: ${{ github.event_name != 'pull_request' }} + push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | diff --git a/pkg/mls/store/store.go b/pkg/mls/store/store.go index 1bb9c27e..58a32b04 100644 --- a/pkg/mls/store/store.go +++ b/pkg/mls/store/store.go @@ -4,7 +4,9 @@ import ( "context" "crypto/sha256" "database/sql" + "encoding/binary" "errors" + "os" "strings" "time" @@ -314,23 +316,45 @@ func (s *Store) InsertWelcomeMessage( wrapperAlgorithm types.WrapperAlgorithm, welcomeMetadata []byte, ) (*queries.WelcomeMessage, error) { - dataHash := sha256.Sum256(append(installationId, data...)) - message, err := s.queries.InsertWelcomeMessage(ctx, queries.InsertWelcomeMessageParams{ - InstallationKey: installationId, - Data: data, - InstallationKeyDataHash: dataHash[:], - HpkePublicKey: hpkePublicKey, - WrapperAlgorithm: int16(wrapperAlgorithm), - WelcomeMetadata: welcomeMetadata, - }) - if err != nil { - if strings.Contains(err.Error(), "duplicate key value violates unique constraint") { - return nil, NewAlreadyExistsError(err) + enableDuplicates := os.Getenv("XMTP_ENABLE_DUPLICATE_WELCOMES") == "true" + numInserts := 1 + if enableDuplicates { + numInserts = 3 + } + + var firstMessage *queries.WelcomeMessage + for i := 0; i < numInserts; i++ { + // Include the index in the hash to ensure duplicates can be inserted + hashInput := append(installationId, data...) + if enableDuplicates { + indexBytes := make([]byte, 4) + binary.BigEndian.PutUint32(indexBytes, uint32(i)) + hashInput = append(hashInput, indexBytes...) + } + dataHash := sha256.Sum256(hashInput) + + message, err := s.queries.InsertWelcomeMessage(ctx, queries.InsertWelcomeMessageParams{ + InstallationKey: installationId, + Data: data, + InstallationKeyDataHash: dataHash[:], + HpkePublicKey: hpkePublicKey, + WrapperAlgorithm: int16(wrapperAlgorithm), + WelcomeMetadata: welcomeMetadata, + }) + if err != nil { + if strings.Contains(err.Error(), "duplicate key value violates unique constraint") { + return nil, NewAlreadyExistsError(err) + } + return nil, err + } + + // Store the first message to return + if i == 0 { + firstMessage = &message } - return nil, err } - return &message, nil + return firstMessage, nil } func (s *Store) InsertWelcomePointerMessage( @@ -344,35 +368,59 @@ func (s *Store) InsertWelcomePointerMessage( return nil, errors.New("hpke public key is required") } - h := sha256.New() - _, err := h.Write(installationKey) - if err != nil { - return nil, err + enableDuplicates := os.Getenv("XMTP_ENABLE_DUPLICATE_WELCOMES") == "true" + numInserts := 1 + if enableDuplicates { + numInserts = 3 } - _, err = h.Write(welcomePointerData) - if err != nil { - return nil, err - } - var dataHash [32]byte - copy(dataHash[:], h.Sum(nil)) - message, err := s.queries.InsertWelcomePointerMessage( - ctx, - queries.InsertWelcomePointerMessageParams{ - InstallationKey: installationKey, - WelcomePointerData: welcomePointerData, - InstallationKeyDataHash: dataHash[:], - HpkePublicKey: hpkePublicKey, - WrapperAlgorithm: int16(wrapperAlgorithm), - }, - ) - if err != nil { - if strings.Contains(err.Error(), "duplicate key value violates unique constraint") { - return nil, NewAlreadyExistsError(err) + + var firstMessage *queries.WelcomeMessage + for i := 0; i < numInserts; i++ { + h := sha256.New() + _, err := h.Write(installationKey) + if err != nil { + return nil, err + } + _, err = h.Write(welcomePointerData) + if err != nil { + return nil, err + } + // Include the index in the hash to ensure duplicates can be inserted + if enableDuplicates { + indexBytes := make([]byte, 4) + binary.BigEndian.PutUint32(indexBytes, uint32(i)) + _, err = h.Write(indexBytes) + if err != nil { + return nil, err + } + } + var dataHash [32]byte + copy(dataHash[:], h.Sum(nil)) + + message, err := s.queries.InsertWelcomePointerMessage( + ctx, + queries.InsertWelcomePointerMessageParams{ + InstallationKey: installationKey, + WelcomePointerData: welcomePointerData, + InstallationKeyDataHash: dataHash[:], + HpkePublicKey: hpkePublicKey, + WrapperAlgorithm: int16(wrapperAlgorithm), + }, + ) + if err != nil { + if strings.Contains(err.Error(), "duplicate key value violates unique constraint") { + return nil, NewAlreadyExistsError(err) + } + return nil, err + } + + // Store the first message to return + if i == 0 { + firstMessage = &message } - return nil, err } - return &message, nil + return firstMessage, nil } func (s *Store) GetInboxIds(