@@ -129,15 +129,61 @@ func EncodeTransactionsForRelayingV3(relayer Relayer, walletAddress common.Addre
129129 return common.Address {}, nil , fmt .Errorf ("cannot encode empty transactions" )
130130 }
131131
132- payload , err := txns .Payload (walletAddress , chainID , space , nonce )
133- if err != nil {
134- return common.Address {}, nil , err
132+ var (
133+ deployTxn * Transaction
134+ walletTxns = make (Transactions , 0 , len (txns ))
135+ )
136+ for _ , txn := range txns {
137+ if txn .To == walletContext .FactoryAddress {
138+ deployTxn = txn
139+ } else {
140+ walletTxns = append (walletTxns , txn )
141+ }
142+ }
143+
144+ if deployTxn == nil {
145+ payload , err := walletTxns .Payload (walletAddress , chainID , space , nonce )
146+ if err != nil {
147+ return common.Address {}, nil , err
148+ }
149+
150+ execdata , err := contracts .V3 .WalletStage1Module .Encode ("execute" , payload .Encode (walletAddress ), seqSig )
151+ if err != nil {
152+ return common.Address {}, nil , err
153+ }
154+
155+ return walletAddress , execdata , nil
135156 }
136157
137- execdata , err := contracts .V3 .WalletStage1Module .Encode ("execute" , payload .Encode (walletAddress ), seqSig )
158+ guestTxns := Transactions {deployTxn }
159+
160+ if len (walletTxns ) > 0 {
161+ payload , err := walletTxns .Payload (walletAddress , chainID , space , nonce )
162+ if err != nil {
163+ return common.Address {}, nil , err
164+ }
165+
166+ execdata , err := contracts .V3 .WalletStage1Module .Encode ("execute" , payload .Encode (walletAddress ), seqSig )
167+ if err != nil {
168+ return common.Address {}, nil , err
169+ }
170+
171+ guestTxns = append (guestTxns , & Transaction {
172+ To : walletAddress ,
173+ Data : execdata ,
174+ RevertOnError : true ,
175+ })
176+ }
177+
178+ guestPayload , err := guestTxns .Payload (
179+ walletContext .GuestModuleAddress ,
180+ chainID ,
181+ big .NewInt (0 ),
182+ big .NewInt (0 ),
183+ )
138184 if err != nil {
139185 return common.Address {}, nil , err
140186 }
141187
142- return walletAddress , execdata , nil
188+ return walletContext . GuestModuleAddress , guestPayload . Encode ( walletContext . GuestModuleAddress ) , nil
143189}
0 commit comments