Replies: 5 comments
-
I definitely vote for a signed list of transactions. Do you see downsides to having two separate entry points? Is it more complicated to build a signed list of transactions, than a single transaction? |
Beta Was this translation helpful? Give feedback.
-
I do prefer the signed list of transactions for the reasons you mentioned, especially atomicity, as order can still be guaranteed by signing the nonce, but atomicity can not. Given that, I think having two different entry points would be cleaner :) |
Beta Was this translation helpful? Give feedback.
-
I was thinking of having a single entry point that takes a list of transactions, whose length can also be 1. I think this is easier to: implement, reason about, and integrate with. I'm biased towards simplifying the contract's API and codebase as much as possible. |
Beta Was this translation helpful? Give feedback.
-
I prefer as well a signed list of transactions for the reasons mentioned above. It also makes more sense with the I also like the idea of having 1 generic entry point accepting an array of transactions. |
Beta Was this translation helpful? Give feedback.
-
Agree with the above. Also, note that breaking atomicity deviates from the Solidity implementation and behaves differently. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Signed list vs List of signatures
Should this function take a list of signed transactions (
[(Signature, Message)]
) or a signed list of transactions ((Signature, [Message])
)? Probably the former is easier to implement, but the latter guarantees order and atomicity. Otherwise, a sequencer or some man-in-the-middle could partially send a subset of the intended list of transactions. More over, it could reorder/sandwich some of those calls to exploit it somehow, e.g. for MEV extraction.Single
execute
function?Should we have two different functions for single and multiple calls or should we have a single
execute
function supporting them both? Haven't thought about this one yet.Reference implementation
Here's the reference Solidity implementation from Multicall.sol:
Beta Was this translation helpful? Give feedback.
All reactions