@@ -12,6 +12,7 @@ import (
1212 cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment"
1313 cldfproposalutils "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalutils"
1414
15+ "github.com/smartcontractkit/chainlink/deployment/ccip/changeset"
1516 "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_5_1"
1617 "github.com/smartcontractkit/chainlink/deployment/ccip/shared"
1718 "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview"
@@ -104,7 +105,7 @@ func ProcessConfig[T any](
104105 if err != nil {
105106 return err
106107 }
107- err = cldf .MergeChangesetOutput (* e , finalOutput , output )
108+ err = changeset .MergeChangesetOutput (* e , finalOutput , output )
108109 if err != nil {
109110 return fmt .Errorf ("failed to merge changeset output: %w" , err )
110111 }
@@ -342,50 +343,50 @@ func E2ETokenPoolv2(env cldf.Environment, cfg E2ETokenPoolConfigv2) (cldf.Change
342343 if err != nil {
343344 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to initialize global config for token pool: %w" , err )
344345 }
345- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
346+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
346347 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running InitGlobalConfigTokenPoolProgram: %w" , err )
347348 }
348349 }
349350 output , err := AddTokenPoolAndLookupTable (e , tokenPoolAndLookupTableCfg )
350351 if err != nil {
351352 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to add token pool and lookup table: %w" , err )
352353 }
353- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
354+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
354355 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running AddTokenPoolAndLookupTable: %w" , err )
355356 }
356357 output , err = SetupTokenPoolForRemoteChain (e , remotePoolConfig )
357358 if err != nil {
358359 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to setup token pool for remote chain: %w" , err )
359360 }
360- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
361+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
361362 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running SetupTokenPoolForRemoteChain: %w" , err )
362363 }
363364 output , err = RegisterTokenAdminRegistry (e , registerTokenAdminRegistryCfg )
364365 if err != nil {
365366 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to register token admin registry: %w" , err )
366367 }
367- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
368+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
368369 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running RegisterTokenAdminRegistry: %w" , err )
369370 }
370371 output , err = AcceptAdminRoleTokenAdminRegistry (e , acceptAdminRoleTokenAdminRegistryCfg )
371372 if err != nil {
372373 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to accept admin role: %w" , err )
373374 }
374- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
375+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
375376 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running AcceptAdminRoleTokenAdminRegistry: %w" , err )
376377 }
377378 output , err = SetPool (e , setPoolCfg )
378379 if err != nil {
379380 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to set pool: %w" , err )
380381 }
381- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
382+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
382383 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running SetPool: %w" , err )
383384 }
384385 output , err = v1_5_1 .ConfigureMultiplePoolLogic (e , evmToSolanaRemotePoolCfg )
385386 if err != nil {
386387 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to configure token pool contracts: %w" , err )
387388 }
388- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
389+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
389390 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running ConfigureTokenPoolContractsChangeset: %w" , err )
390391 }
391392 // and finally lets transfer away the pool to timelock
@@ -394,7 +395,7 @@ func E2ETokenPoolv2(env cldf.Environment, cfg E2ETokenPoolConfigv2) (cldf.Change
394395 if err != nil {
395396 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to transfer ccip to mcms with timelock: %w" , err )
396397 }
397- if err = cldf .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
398+ if err = changeset .MergeChangesetOutput (e , finalCSOut , output ); err != nil {
398399 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge changeset output after running TransferCCIPToMCMSWithTimelockSolana: %w" , err )
399400 }
400401 }
@@ -419,11 +420,20 @@ func E2ETokenPoolv2(env cldf.Environment, cfg E2ETokenPoolConfigv2) (cldf.Change
419420 }
420421 }
421422
422- ds , err := shared .PopulateDataStore (finalCSOut .AddressBook ) //nolint:staticcheck //SA1019 ignoring deprecated
423+ // Preserve the datastore accumulated by MergeChangesetOutput: it already carries the
424+ // sub-changesets' semantic qualifiers, metadata, and deletions. Rebuilding it from the
425+ // address book would discard all of that. The address book has no qualifiers, so it can only
426+ // contribute the singleton refs the sub-changesets did not write to the datastore; merge
427+ // those in rather than replacing the accumulated store.
428+ singletons , err := shared .PopulateDataStore (finalCSOut .AddressBook ) //nolint:staticcheck //SA1019 ignoring deprecated
423429 if err != nil {
424430 return cldf.ChangesetOutput {}, fmt .Errorf ("failed to populate in-memory DataStore: %w" , err )
425431 }
426432
427- finalCSOut .DataStore = ds
433+ if finalCSOut .DataStore == nil {
434+ finalCSOut .DataStore = singletons
435+ } else if err := finalCSOut .DataStore .Merge (singletons .Seal ()); err != nil {
436+ return cldf.ChangesetOutput {}, fmt .Errorf ("failed to merge address-book refs into DataStore: %w" , err )
437+ }
428438 return * finalCSOut , nil
429439}
0 commit comments