[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-16-bundling-konfliktloesung-block-submission":3},{"article":4,"author":59},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":38,"related_articles":39},"d7000000-0000-0000-0000-000000000116","a0000000-0000-0000-0000-000000000072","Deep EVM #16: Bundling und Konfliktloesung — Von der Simulation zur Block-Submission","deep-evm-16-bundling-konfliktloesung-block-submission","Die letzte Stufe der MEV-Pipeline: Bundles konstruieren, Konflikte zwischen Strategien aufloesen, an Block Builder senden und mit Flashbots MEV-Share integrieren.","## Von der Simulation zum Bundle\n\nNachdem Sie profitable Arbitrage-Zyklen gefunden und lokal simuliert haben, muessen Sie die Transaktionen in ein Bundle verpacken und an einen Block Builder senden. Dieser letzte Schritt entscheidet ueber Gewinn oder Verlust.\n\n## Was ist ein Bundle?\n\nEin Bundle ist ein geordnetes Paket von Transaktionen, das atomar ausgefuehrt werden muss:\n\n- Alle Transaktionen werden in der angegebenen Reihenfolge ausgefuehrt\n- Wenn eine Transaktion fehlschlaegt, wird das gesamte Bundle verworfen\n- Der Searcher zahlt eine Gebuehr (\"tip\") an den Block Builder\n\n```rust\nstruct Bundle {\n    transactions: Vec\u003CSignedTransaction>,\n    block_number: u64,\n    min_timestamp: Option\u003Cu64>,\n    max_timestamp: Option\u003Cu64>,\n}\n```\n\n## Konfliktloesung zwischen Strategien\n\nWenn Sie mehrere MEV-Strategien gleichzeitig ausfuehren, koennen sie in Konflikt geraten:\n\n### Zustandskonflikte\nZwei Strategien greifen auf denselben Pool zu:\n- Strategie A: ETH -> USDC auf Uniswap V2\n- Strategie B: USDC -> DAI auf Uniswap V2\n\nBeide aendern den Zustand des USDC\u002FETH-Pools. Die zweite Strategie muss den neuen Zustand nach der ersten beruecksichtigen.\n\n### Loesungsstrategie: Greedy-Optimierung\n```rust\nfn resolve_conflicts(\n    strategies: &[Strategy],\n    db: &CacheDB\u003Cimpl Database>,\n) -> Vec\u003CStrategy> {\n    let mut selected = Vec::new();\n    let mut current_db = db.clone();\n    \n    \u002F\u002F Strategien nach erwartetem Gewinn sortieren\n    let mut sorted = strategies.to_vec();\n    sorted.sort_by(|a, b| b.expected_profit.cmp(&a.expected_profit));\n    \n    for strategy in sorted {\n        \u002F\u002F Mit aktuellem Zustand neu simulieren\n        match simulate(&mut current_db.clone(), &strategy) {\n            Ok(result) if result.profit > MIN_PROFIT => {\n                \u002F\u002F Zustand anwenden\n                apply_state_changes(&mut current_db, &result);\n                selected.push(strategy);\n            }\n            _ => continue, \u002F\u002F Nicht mehr profitabel\n        }\n    }\n    \n    selected\n}\n```\n\n## Bundle an Builder senden\n\nFlashbots-kompatible Builder akzeptieren Bundles ueber eine JSON-RPC-API:\n\n```rust\nuse reqwest::Client;\n\nasync fn send_bundle(\n    client: &Client,\n    bundle: &Bundle,\n    builder_url: &str,\n) -> Result\u003CBundleResponse, Error> {\n    let payload = json!({\n        \"jsonrpc\": \"2.0\",\n        \"method\": \"eth_sendBundle\",\n        \"params\": [{\n            \"txs\": bundle.transactions.iter()\n                .map(|tx| format!(\"0x{}\", hex::encode(tx.rlp())))\n                .collect::\u003CVec\u003C_>>(),\n            \"blockNumber\": format!(\"0x{:x}\", bundle.block_number),\n        }],\n        \"id\": 1,\n    });\n    \n    let response = client.post(builder_url)\n        .header(\"X-Flashbots-Signature\", sign_payload(&payload)?)\n        .json(&payload)\n        .send()\n        .await?;\n    \n    response.json().await\n}\n```\n\n## Gebuehren-Optimierung\n\nDie Gebuehr (\"tip\") bestimmt, ob Ihr Bundle in den Block aufgenommen wird:\n\n- Zu niedrig: Builder ignoriert Ihr Bundle\n- Zu hoch: Sie verschenken Ihren Gewinn\n- Optimal: Gerade genug, um bevorzugt behandelt zu werden\n\nFaustregel: 80-90% des Nettogewinns als Tip bieten. In einem wettbewerbsintensiven Markt werden die Margen immer kleiner.\n\n## MEV-Share Integration\n\nFlashbots MEV-Share ermoeglicht es Searchern, MEV-Erloes mit den Benutzern zu teilen, deren Transaktionen sie nutzen:\n\n```rust\nasync fn send_mev_share_bundle(\n    bundle: &Bundle,\n    refund_percent: u8, \u002F\u002F z.B. 90% Rueckerstattung an den Benutzer\n) -> Result\u003C(), Error> {\n    \u002F\u002F MEV-Share-spezifische Parameter\n    let mev_share_bundle = json!({\n        \"version\": \"v0.1\",\n        \"inclusion\": {\n            \"block\": format!(\"0x{:x}\", bundle.block_number),\n        },\n        \"body\": bundle.transactions,\n        \"validity\": {\n            \"refund\": [{\n                \"bodyIdx\": 0,\n                \"percent\": refund_percent,\n            }],\n        },\n    });\n    \n    \u002F\u002F An MEV-Share Relay senden\n    send_to_relay(&mev_share_bundle).await\n}\n```\n\n## Fazit\n\nBundling und Konfliktloesung sind die letzten Schritte in der MEV-Pipeline. Von der Zyklen-Erkennung ueber die Simulation bis zur Bundle-Submission — jeder Schritt muss in Millisekunden ablaufen, um wettbewerbsfaehig zu bleiben. Die Integration mit Flashbots MEV-Share fuegt eine ethische Dimension hinzu: Gewinne mit Benutzern teilen statt sie auszubeuten.","\u003Ch2 id=\"von-der-simulation-zum-bundle\">Von der Simulation zum Bundle\u003C\u002Fh2>\n\u003Cp>Nachdem Sie profitable Arbitrage-Zyklen gefunden und lokal simuliert haben, muessen Sie die Transaktionen in ein Bundle verpacken und an einen Block Builder senden. Dieser letzte Schritt entscheidet ueber Gewinn oder Verlust.\u003C\u002Fp>\n\u003Ch2 id=\"was-ist-ein-bundle\">Was ist ein Bundle?\u003C\u002Fh2>\n\u003Cp>Ein Bundle ist ein geordnetes Paket von Transaktionen, das atomar ausgefuehrt werden muss:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Alle Transaktionen werden in der angegebenen Reihenfolge ausgefuehrt\u003C\u002Fli>\n\u003Cli>Wenn eine Transaktion fehlschlaegt, wird das gesamte Bundle verworfen\u003C\u002Fli>\n\u003Cli>Der Searcher zahlt eine Gebuehr (“tip”) an den Block Builder\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-rust\">struct Bundle {\n    transactions: Vec&lt;SignedTransaction&gt;,\n    block_number: u64,\n    min_timestamp: Option&lt;u64&gt;,\n    max_timestamp: Option&lt;u64&gt;,\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"konfliktloesung-zwischen-strategien\">Konfliktloesung zwischen Strategien\u003C\u002Fh2>\n\u003Cp>Wenn Sie mehrere MEV-Strategien gleichzeitig ausfuehren, koennen sie in Konflikt geraten:\u003C\u002Fp>\n\u003Ch3>Zustandskonflikte\u003C\u002Fh3>\n\u003Cp>Zwei Strategien greifen auf denselben Pool zu:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Strategie A: ETH -&gt; USDC auf Uniswap V2\u003C\u002Fli>\n\u003Cli>Strategie B: USDC -&gt; DAI auf Uniswap V2\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Beide aendern den Zustand des USDC\u002FETH-Pools. Die zweite Strategie muss den neuen Zustand nach der ersten beruecksichtigen.\u003C\u002Fp>\n\u003Ch3>Loesungsstrategie: Greedy-Optimierung\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-rust\">fn resolve_conflicts(\n    strategies: &amp;[Strategy],\n    db: &amp;CacheDB&lt;impl Database&gt;,\n) -&gt; Vec&lt;Strategy&gt; {\n    let mut selected = Vec::new();\n    let mut current_db = db.clone();\n    \n    \u002F\u002F Strategien nach erwartetem Gewinn sortieren\n    let mut sorted = strategies.to_vec();\n    sorted.sort_by(|a, b| b.expected_profit.cmp(&amp;a.expected_profit));\n    \n    for strategy in sorted {\n        \u002F\u002F Mit aktuellem Zustand neu simulieren\n        match simulate(&amp;mut current_db.clone(), &amp;strategy) {\n            Ok(result) if result.profit &gt; MIN_PROFIT =&gt; {\n                \u002F\u002F Zustand anwenden\n                apply_state_changes(&amp;mut current_db, &amp;result);\n                selected.push(strategy);\n            }\n            _ =&gt; continue, \u002F\u002F Nicht mehr profitabel\n        }\n    }\n    \n    selected\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"bundle-an-builder-senden\">Bundle an Builder senden\u003C\u002Fh2>\n\u003Cp>Flashbots-kompatible Builder akzeptieren Bundles ueber eine JSON-RPC-API:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-rust\">use reqwest::Client;\n\nasync fn send_bundle(\n    client: &amp;Client,\n    bundle: &amp;Bundle,\n    builder_url: &amp;str,\n) -&gt; Result&lt;BundleResponse, Error&gt; {\n    let payload = json!({\n        \"jsonrpc\": \"2.0\",\n        \"method\": \"eth_sendBundle\",\n        \"params\": [{\n            \"txs\": bundle.transactions.iter()\n                .map(|tx| format!(\"0x{}\", hex::encode(tx.rlp())))\n                .collect::&lt;Vec&lt;_&gt;&gt;(),\n            \"blockNumber\": format!(\"0x{:x}\", bundle.block_number),\n        }],\n        \"id\": 1,\n    });\n    \n    let response = client.post(builder_url)\n        .header(\"X-Flashbots-Signature\", sign_payload(&amp;payload)?)\n        .json(&amp;payload)\n        .send()\n        .await?;\n    \n    response.json().await\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"gebuehren-optimierung\">Gebuehren-Optimierung\u003C\u002Fh2>\n\u003Cp>Die Gebuehr (“tip”) bestimmt, ob Ihr Bundle in den Block aufgenommen wird:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Zu niedrig: Builder ignoriert Ihr Bundle\u003C\u002Fli>\n\u003Cli>Zu hoch: Sie verschenken Ihren Gewinn\u003C\u002Fli>\n\u003Cli>Optimal: Gerade genug, um bevorzugt behandelt zu werden\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Faustregel: 80-90% des Nettogewinns als Tip bieten. In einem wettbewerbsintensiven Markt werden die Margen immer kleiner.\u003C\u002Fp>\n\u003Ch2 id=\"mev-share-integration\">MEV-Share Integration\u003C\u002Fh2>\n\u003Cp>Flashbots MEV-Share ermoeglicht es Searchern, MEV-Erloes mit den Benutzern zu teilen, deren Transaktionen sie nutzen:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-rust\">async fn send_mev_share_bundle(\n    bundle: &amp;Bundle,\n    refund_percent: u8, \u002F\u002F z.B. 90% Rueckerstattung an den Benutzer\n) -&gt; Result&lt;(), Error&gt; {\n    \u002F\u002F MEV-Share-spezifische Parameter\n    let mev_share_bundle = json!({\n        \"version\": \"v0.1\",\n        \"inclusion\": {\n            \"block\": format!(\"0x{:x}\", bundle.block_number),\n        },\n        \"body\": bundle.transactions,\n        \"validity\": {\n            \"refund\": [{\n                \"bodyIdx\": 0,\n                \"percent\": refund_percent,\n            }],\n        },\n    });\n    \n    \u002F\u002F An MEV-Share Relay senden\n    send_to_relay(&amp;mev_share_bundle).await\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"fazit\">Fazit\u003C\u002Fh2>\n\u003Cp>Bundling und Konfliktloesung sind die letzten Schritte in der MEV-Pipeline. Von der Zyklen-Erkennung ueber die Simulation bis zur Bundle-Submission — jeder Schritt muss in Millisekunden ablaufen, um wettbewerbsfaehig zu bleiben. Die Integration mit Flashbots MEV-Share fuegt eine ethische Dimension hinzu: Gewinne mit Benutzern teilen statt sie auszubeuten.\u003C\u002Fp>\n","de","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:30.169366Z","Die letzte Stufe der MEV-Pipeline: Bundles konstruieren, Konflikte aufloesen, an Block Builder senden und Flashbots MEV-Share integrieren.","MEV Bundling Konfliktloesung",null,"index, follow",[21,26,30,34],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000019","MEV","mev","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000001","Rust","rust",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000013","Security","security",{"id":35,"name":36,"slug":37,"created_at":25},"c0000000-0000-0000-0000-000000000009","Web3","web3","Blockchain",[40,47,53],{"id":41,"title":42,"slug":43,"excerpt":44,"locale":12,"category_name":45,"published_at":46},"d0000000-0000-0000-0000-000000000680","Warum Bali 2026 zum Impact-Tech-Hub Südostasiens wird","warum-bali-2026-impact-tech-hub-suedostasiens","Bali rangiert auf Platz 16 unter den Startup-Ökosystemen Südostasiens. Mit einer wachsenden Konzentration von Web3-Entwicklern, AI-Nachhaltigkeits-Startups und Eco-Travel-Tech-Unternehmen formt die Insel ihre Nische als Impact-Tech-Hauptstadt der Region.","Ingenieurwesen","2026-03-28T10:44:49.720230Z",{"id":48,"title":49,"slug":50,"excerpt":51,"locale":12,"category_name":45,"published_at":52},"d0000000-0000-0000-0000-000000000679","ASEAN-Datenschutz-Flickenteppich: Compliance-Checkliste für Entwickler","asean-datenschutz-flickenteppich-compliance-checkliste-entwickler","Sieben ASEAN-Länder verfügen mittlerweile über umfassende Datenschutzgesetze mit unterschiedlichen Einwilligungsmodellen, Lokalisierungsanforderungen und Sanktionsstrukturen. Eine praktische Compliance-Checkliste für Entwickler.","2026-03-28T10:44:49.715484Z",{"id":54,"title":55,"slug":56,"excerpt":57,"locale":12,"category_name":45,"published_at":58},"d0000000-0000-0000-0000-000000000678","Indonesias 29-Milliarden-Dollar-Digitaltransformation: Chancen für Softwareunternehmen","indonesias-29-milliarden-dollar-digitaltransformation-chancen-softwareunternehmen","Indonesias IT-Dienstleistungsmarkt wird voraussichtlich 2026 29,03 Milliarden Dollar erreichen, gegenüber 24,37 Milliarden im Jahr 2025. Cloud-Infrastruktur, AI, E-Commerce und Rechenzentren treiben das schnellste Wachstum in Südostasien.","2026-03-28T10:44:49.697275Z",{"id":13,"name":60,"slug":61,"bio":62,"photo_url":18,"linkedin":18,"role":63,"created_at":64,"updated_at":64},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]