# Bundle imitation on Arbitrum

**URL:** <https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503>\
**Category:** Uncategorized\
**Tags:** tx-ordering, defi\
**Created:** [October 12, 2023, 8:44am UTC](https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503 "2023-10-12T08:44:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![halo3mic](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@halo3mic](https://research.arbitrum.io/u/halo3mic)\
**Post date:** [October 12, 2023, 8:44am UTC](https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503/1 "2023-10-12T08:44:30Z")

</div>

Hi 👋,

Recently, I researched if the effect of bundles can be mimicked on Arbitrum before bundles are natively supported. I am sharing the methods, results and findings here: [Bundle imitation on Arbitrum - HackMD](https://hackmd.io/TdKlZziCSgm8X_fBnGv-FQ).

The main goal of the research was to investigate whether transactions submitted in quick succession or via BatchRPC end up positioned next to each other within the same block, while also preserving their original order of submission.

**Key findings:**

- Introducing 5-10ms delay between the submission of two transactions preserved the order of transactions and placed them adjacent to each other in 76-79% of the cases submitted from Oregon.
- Submitting multiple transactions via BatchRPC placed each transaction in a new block; in \>99% of the cases, the blocks were sequential.
- The geographical proximity to the sequencer and transaction volume affected the results.

Would appreciate your feedback!

---

<div class="post-metadata">

**Author:** ![halo3mic](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@halo3mic](https://research.arbitrum.io/u/halo3mic)\
**Post date:** [October 12, 2023, 11:15am UTC](https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503/2 "2023-10-12T11:15:16Z")

</div>

Out of curiosity, what causes transactions submitted via BatchRPC to be placed in different blocks? I checked [the code for batch handler for Arbitrum node](https://github.com/OffchainLabs/go-ethereum/blob/b4221631e1e5eac86f01582bd74234e3c0f7f5c7/rpc/handler.go#L191), but I did not find any block delay associated with the underlying calls. Is this the right place in the codebase to be looking for the answer?

---

<div class="post-metadata">

**Author:** ![edfelten](https://avatars.discourse-cdn.com/v4/letter/e/ecc23a/32.png) [@edfelten](https://research.arbitrum.io/u/edfelten)\
**Post date:** [October 12, 2023, 12:48pm UTC](https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503/3 "2023-10-12T12:48:06Z")

</div>

The most likely explanation for why the transactions are put in different blocks is because the combination of the fact that batch json rpc calls execute sequentially waiting for the previous one to return successfully and that fact that in arbitrum unlike ethereum `eth_sendRawTransaction` only returns successfully after a transaction is included in a block

---

<div class="post-metadata">

**Author:** ![halo3mic](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@halo3mic](https://research.arbitrum.io/u/halo3mic)\
**Post date:** [October 12, 2023, 1:57pm UTC](https://research.arbitrum.io/t/bundle-imitation-on-arbitrum/9503/4 "2023-10-12T13:57:01Z")

</div>

That makes sense, thanks!
