@@ -68,24 +68,24 @@ func (a *TonTransferOwnershipAdapter) SequenceTransferOwnershipViaMCMS() *cldfop
6868 return sequences.OnChainOutput {}, fmt .Errorf ("TON chain with selector %d not found in environment" , in .ChainSelector )
6969 }
7070
71- proposedOwner , err := address .ParseAddr (in .ProposedOwner )
72- if err != nil {
73- return sequences.OnChainOutput {}, fmt .Errorf ("failed to parse proposed owner address: %w" , err )
74- }
75-
7671 dp , err := dep .NewDependencyProvider (
7772 dep .Provide (chain ),
7873 )
7974 if err != nil {
8075 return sequences.OnChainOutput {}, fmt .Errorf ("failed to create dependency provider: %w" , err )
8176 }
8277
83- deployerAddr := chain .Wallet .WalletAddress ()
78+ proposedOwner , err := a .getProposedOwner (in )
79+ if err != nil {
80+ return sequences.OnChainOutput {}, fmt .Errorf ("failed to get proposed owner: %w" , err )
81+ }
82+
8483 _inputMCMS := opsmcms .NewSendOrPlanInput (types .ChainSelector (in .ChainSelector ))
8584
86- currentOwner , err := address .ParseAddr (in .CurrentOwner )
85+ deployerAddr := chain .Wallet .WalletAddress ()
86+ currentOwner , err := a .getCurrentOwner (in , deployerAddr )
8787 if err != nil {
88- return sequences.OnChainOutput {}, fmt .Errorf ("failed to parse current owner address : %w" , err )
88+ return sequences.OnChainOutput {}, fmt .Errorf ("failed to get current owner: %w" , err )
8989 }
9090
9191 for _ , contractRef := range in .ContractRef {
@@ -166,18 +166,18 @@ func (a *TonTransferOwnershipAdapter) SequenceAcceptOwnership() *cldfops.Sequenc
166166 return sequences.OnChainOutput {}, fmt .Errorf ("TON chain with selector %d not found in environment" , in .ChainSelector )
167167 }
168168
169- proposedOwner , err := address .ParseAddr (in .ProposedOwner )
170- if err != nil {
171- return sequences.OnChainOutput {}, fmt .Errorf ("failed to parse proposed owner address: %w" , err )
172- }
173-
174169 dp , err := dep .NewDependencyProvider (
175170 dep .Provide (chain ),
176171 )
177172 if err != nil {
178173 return sequences.OnChainOutput {}, fmt .Errorf ("failed to create dependency provider: %w" , err )
179174 }
180175
176+ proposedOwner , err := a .getProposedOwner (in )
177+ if err != nil {
178+ return sequences.OnChainOutput {}, fmt .Errorf ("failed to get proposed owner: %w" , err )
179+ }
180+
181181 sender := chain .Wallet .WalletAddress ()
182182 _inputMCMS := opsmcms .NewSendOrPlanInput (types .ChainSelector (in .ChainSelector ))
183183
@@ -239,9 +239,9 @@ func (a *TonTransferOwnershipAdapter) SequenceAcceptOwnership() *cldfops.Sequenc
239239// Returns false when the proposed owner is the deployer (timelock transfers via deferred execution, can't accept in same changeset).
240240// Returns false when the proposed owner is unknown
241241func (a * TonTransferOwnershipAdapter ) ShouldAcceptOwnershipWithTransferOwnership (_ cldf.Environment , in deploy.TransferOwnershipPerChainInput ) (bool , error ) {
242- proposedOwner , err := address . ParseAddr (in . ProposedOwner )
242+ proposedOwner , err := a . getProposedOwner (in )
243243 if err != nil {
244- return false , fmt .Errorf ("failed to parse proposed owner address : %w" , err )
244+ return false , fmt .Errorf ("failed to get proposed owner: %w" , err )
245245 }
246246
247247 timelockAddr , ok := a .timelockAddrs [in .ChainSelector ]
@@ -251,3 +251,37 @@ func (a *TonTransferOwnershipAdapter) ShouldAcceptOwnershipWithTransferOwnership
251251
252252 return false , nil
253253}
254+
255+ // Default proposed owner to timelock address if not provided
256+ func (a * TonTransferOwnershipAdapter ) getProposedOwner (in deploy.TransferOwnershipPerChainInput ) (* address.Address , error ) {
257+ if in .ProposedOwner != "" {
258+ proposedOwner , err := address .ParseAddr (in .ProposedOwner )
259+ if err != nil {
260+ return nil , fmt .Errorf ("failed to parse proposed owner address: %w" , err )
261+ }
262+
263+ return proposedOwner , nil
264+ }
265+
266+ timelockAddr , ok := a .timelockAddrs [in .ChainSelector ]
267+ if ! ok {
268+ return nil , fmt .Errorf ("timelock address not initialized for chain %d" , in .ChainSelector )
269+ }
270+
271+ return timelockAddr , nil
272+ }
273+
274+ func (a * TonTransferOwnershipAdapter ) getCurrentOwner (in deploy.TransferOwnershipPerChainInput , defaultAddr * address.Address ) (* address.Address , error ) {
275+ // Default current owner to deployer address if not provided
276+ // Notice: common case where deployer is transferring to timelock
277+ if in .CurrentOwner != "" {
278+ currentOwner , err := address .ParseAddr (in .CurrentOwner )
279+ if err != nil {
280+ return nil , fmt .Errorf ("failed to parse current owner address: %w" , err )
281+ }
282+
283+ return currentOwner , nil
284+ }
285+
286+ return defaultAddr , nil
287+ }
0 commit comments