@@ -113,6 +113,7 @@ type DependencyInstaller struct {
113113 SkipAlias bool
114114 logs categorizedLogs
115115 dependencies map [string ]config.Dependency
116+ accountAliases map [string ]map [string ]flowsdk.Address // network -> account -> alias
116117}
117118
118119// NewDependencyInstaller creates a new instance of DependencyInstaller
@@ -148,6 +149,7 @@ func NewDependencyInstaller(logger output.Logger, state *flowkit.State, saveStat
148149 SkipAlias : flags .skipAlias ,
149150 dependencies : make (map [string ]config.Dependency ),
150151 logs : categorizedLogs {},
152+ accountAliases : make (map [string ]map [string ]flowsdk.Address ),
151153 }, nil
152154}
153155
@@ -552,16 +554,38 @@ func (di *DependencyInstaller) updateDependencyAlias(contractName, aliasNetwork
552554 }
553555
554556 for _ , missingNetwork := range missingNetworks {
557+ // Check if we already have an alias for this account on this network
558+ accountAddress := di .getCurrentContractAccountAddress (contractName , aliasNetwork )
559+ if accountAddress != "" {
560+ if existingAlias , exists := di .getAccountAlias (accountAddress , missingNetwork ); exists {
561+ // Automatically apply the existing alias
562+ contract , err := di .State .Contracts ().ByName (contractName )
563+ if err != nil {
564+ return err
565+ }
566+ contract .Aliases .Add (missingNetwork , existingAlias )
567+ di .Logger .Info (fmt .Sprintf ("%s Automatically applied alias %s for %s on %s (from same account)" ,
568+ util .PrintEmoji ("🔄" ), existingAlias .String (), contractName , missingNetwork ))
569+ continue
570+ }
571+ }
572+
555573 label := fmt .Sprintf ("Enter an alias address for %s on %s if you have one, otherwise leave blank" , contractName , missingNetwork )
556574 raw := prompt .AddressPromptOrEmpty (label , "Invalid alias address" )
557575
558576 if raw != "" {
577+ aliasAddress := flowsdk .HexToAddress (raw )
578+
579+ if accountAddress != "" {
580+ di .setAccountAlias (accountAddress , missingNetwork , aliasAddress )
581+ }
582+
559583 contract , err := di .State .Contracts ().ByName (contractName )
560584 if err != nil {
561585 return err
562586 }
563587
564- contract .Aliases .Add (missingNetwork , flowsdk . HexToAddress ( raw ) )
588+ contract .Aliases .Add (missingNetwork , aliasAddress )
565589 }
566590 }
567591
@@ -591,3 +615,31 @@ func (di *DependencyInstaller) updateDependencyState(networkName, contractAddres
591615
592616 return nil
593617}
618+
619+ // getCurrentContractAccountAddress returns the account address for the current contract being processed
620+ func (di * DependencyInstaller ) getCurrentContractAccountAddress (contractName , networkName string ) string {
621+ for _ , dep := range di .dependencies {
622+ if dep .Name == contractName && dep .Source .NetworkName == networkName {
623+ return dep .Source .Address .String ()
624+ }
625+ }
626+ return ""
627+ }
628+
629+ // getAccountAlias returns the stored alias for an account on a specific network
630+ func (di * DependencyInstaller ) getAccountAlias (accountAddress , networkName string ) (flowsdk.Address , bool ) {
631+ if networkAliases , exists := di .accountAliases [networkName ]; exists {
632+ if alias , exists := networkAliases [accountAddress ]; exists {
633+ return alias , true
634+ }
635+ }
636+ return flowsdk.Address {}, false
637+ }
638+
639+ // setAccountAlias stores an alias for an account on a specific network
640+ func (di * DependencyInstaller ) setAccountAlias (accountAddress , networkName string , alias flowsdk.Address ) {
641+ if di .accountAliases [networkName ] == nil {
642+ di .accountAliases [networkName ] = make (map [string ]flowsdk.Address )
643+ }
644+ di.accountAliases [networkName ][accountAddress ] = alias
645+ }
0 commit comments