Skip to content

Commit 0359e4f

Browse files
committed
relayer: encode txn bundles with deploy txn as guest module payloads (v3)
1 parent eedaece commit 0359e4f

File tree

1 file changed

+51
-5
lines changed

1 file changed

+51
-5
lines changed

relayer.go

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)