From 0359e4f65eb394eb7b799db8514ce385cbc61ffb Mon Sep 17 00:00:00 2001 From: Patryk Kalinowski Date: Mon, 16 Feb 2026 20:55:57 +0100 Subject: [PATCH 1/2] relayer: encode txn bundles with deploy txn as guest module payloads (v3) --- relayer.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/relayer.go b/relayer.go index 480778a6e..b0b6804a6 100644 --- a/relayer.go +++ b/relayer.go @@ -129,15 +129,61 @@ func EncodeTransactionsForRelayingV3(relayer Relayer, walletAddress common.Addre return common.Address{}, nil, fmt.Errorf("cannot encode empty transactions") } - payload, err := txns.Payload(walletAddress, chainID, space, nonce) - if err != nil { - return common.Address{}, nil, err + var ( + deployTxn *Transaction + walletTxns = make(Transactions, 0, len(txns)) + ) + for _, txn := range txns { + if txn.To == walletContext.FactoryAddress { + deployTxn = txn + } else { + walletTxns = append(walletTxns, txn) + } + } + + if deployTxn == nil { + payload, err := walletTxns.Payload(walletAddress, chainID, space, nonce) + if err != nil { + return common.Address{}, nil, err + } + + execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) + if err != nil { + return common.Address{}, nil, err + } + + return walletAddress, execdata, nil } - execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) + guestTxns := Transactions{deployTxn} + + if len(walletTxns) > 0 { + payload, err := walletTxns.Payload(walletAddress, chainID, space, nonce) + if err != nil { + return common.Address{}, nil, err + } + + execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) + if err != nil { + return common.Address{}, nil, err + } + + guestTxns = append(guestTxns, &Transaction{ + To: walletAddress, + Data: execdata, + RevertOnError: true, + }) + } + + guestPayload, err := guestTxns.Payload( + walletContext.GuestModuleAddress, + chainID, + big.NewInt(0), + big.NewInt(0), + ) if err != nil { return common.Address{}, nil, err } - return walletAddress, execdata, nil + return walletContext.GuestModuleAddress, guestPayload.Encode(walletContext.GuestModuleAddress), nil } From 2101231e889e53392eefbb26e05c5c00551a56c4 Mon Sep 17 00:00:00 2001 From: Patryk Kalinowski Date: Mon, 16 Mar 2026 20:00:58 +0100 Subject: [PATCH 2/2] relayer: allow multiple factory-targetting transactions --- relayer.go | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/relayer.go b/relayer.go index b0b6804a6..a5763ca97 100644 --- a/relayer.go +++ b/relayer.go @@ -130,44 +130,32 @@ func EncodeTransactionsForRelayingV3(relayer Relayer, walletAddress common.Addre } var ( - deployTxn *Transaction + guestTxns = make(Transactions, 0, len(txns)) walletTxns = make(Transactions, 0, len(txns)) ) for _, txn := range txns { if txn.To == walletContext.FactoryAddress { - deployTxn = txn + guestTxns = append(guestTxns, txn) } else { walletTxns = append(walletTxns, txn) } } - if deployTxn == nil { - payload, err := walletTxns.Payload(walletAddress, chainID, space, nonce) - if err != nil { - return common.Address{}, nil, err - } + payload, err := walletTxns.Payload(walletAddress, chainID, space, nonce) + if err != nil { + return common.Address{}, nil, err + } - execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) - if err != nil { - return common.Address{}, nil, err - } + execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) + if err != nil { + return common.Address{}, nil, err + } + if len(guestTxns) == 0 { return walletAddress, execdata, nil } - guestTxns := Transactions{deployTxn} - if len(walletTxns) > 0 { - payload, err := walletTxns.Payload(walletAddress, chainID, space, nonce) - if err != nil { - return common.Address{}, nil, err - } - - execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) - if err != nil { - return common.Address{}, nil, err - } - guestTxns = append(guestTxns, &Transaction{ To: walletAddress, Data: execdata,