[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-15-mev-simulation-lokale-evm-revm":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":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":39,"related_articles":40},"d7000000-0000-0000-0000-000000000115","a0000000-0000-0000-0000-000000000076","Deep EVM #15: MEV-Simulation — Lokale EVM-Ausfuehrung mit revm fuer Gewinnberechnung","deep-evm-15-mev-simulation-lokale-evm-revm","MEV-Strategien vor dem Senden mit lokaler EVM-Simulation testen: revm fuer Transaktionsnachbildung, Gewinnberechnung und Gas-Schaetzung in der MEV-Pipeline.","## Warum lokal simulieren?\n\nIn der MEV-Welt gilt: Wer zuerst simuliert, gewinnt. Bevor Sie einen Bundle an einen Block Builder senden, muessen Sie sicher sein, dass die Transaktion profitabel ist. Ein fehlgeschlagener Bundle kostet nichts (keine Gaskosten), aber verpasste Gelegenheiten kosten alles.\n\n## revm: Rust Ethereum Virtual Machine\n\nrevm ist eine in Rust geschriebene EVM-Implementierung, die fuer Simulation optimiert ist. Sie ist schneller als Geth und kann Transaktionen ohne ein vollstaendiges Ethereum-Node ausfuehren.\n\n```rust\nuse revm::{Evm, db::CacheDB, primitives::*};\n\nfn simulate_swap(\n    db: &mut CacheDB\u003CEmptyDB>,\n    router: Address,\n    calldata: Bytes,\n    value: U256,\n) -> Result\u003CExecutionResult, Box\u003Cdyn Error>> {\n    let mut evm = Evm::builder()\n        .with_db(db)\n        .modify_tx_env(|tx| {\n            tx.caller = MY_BOT_ADDRESS;\n            tx.transact_to = TransactTo::Call(router);\n            tx.data = calldata;\n            tx.value = value;\n            tx.gas_limit = 500_000;\n        })\n        .build();\n    \n    let result = evm.transact()?;\n    Ok(result.result)\n}\n```\n\n## Zustandsverwaltung mit CacheDB\n\nCacheDB haelt den Blockchain-Zustand im Speicher und ermoeglicht schnelle Simulation:\n\n```rust\nuse revm::db::{CacheDB, EthersDB};\n\n\u002F\u002F Zustand von einem RPC-Node laden\nlet client = Provider::\u003CHttp>::try_from(rpc_url)?;\nlet ethers_db = EthersDB::new(client, Some(block_number));\nlet mut cache_db = CacheDB::new(ethers_db);\n\n\u002F\u002F Jetzt koennen Sie Transaktionen simulieren\nlet result = simulate_swap(&mut cache_db, router, calldata, value)?;\n```\n\n## Gewinnberechnung\n\n```rust\nfn calculate_profit(\n    db: &mut CacheDB\u003Cimpl Database>,\n    cycle: &ArbitrageCycle,\n    amount_in: U256,\n) -> Result\u003CProfitResult, SimulationError> {\n    \u002F\u002F Snapshot erstellen (fuer Rollback)\n    let snapshot = db.clone();\n    \n    let mut current_amount = amount_in;\n    let mut total_gas = 0u64;\n    \n    for hop in &cycle.hops {\n        let calldata = encode_swap(hop, current_amount);\n        let result = simulate_swap(db, hop.router, calldata, U256::ZERO)?;\n        \n        match result {\n            ExecutionResult::Success { output, gas_used, .. } => {\n                current_amount = decode_amount_out(&output)?;\n                total_gas += gas_used;\n            }\n            _ => {\n                *db = snapshot; \u002F\u002F Rollback\n                return Err(SimulationError::Revert);\n            }\n        }\n    }\n    \n    let gas_cost = U256::from(total_gas) * gas_price;\n    let gross_profit = current_amount.saturating_sub(amount_in);\n    let net_profit = gross_profit.saturating_sub(gas_cost);\n    \n    Ok(ProfitResult { net_profit, gas_used: total_gas })\n}\n```\n\n## Optimale Eingabemenge finden\n\nDie optimale Eingabemenge maximiert den Gewinn. Bei AMMs (Automated Market Makers) gibt es ein analytisches Optimum:\n\n```rust\nfn find_optimal_amount(\n    db: &CacheDB\u003Cimpl Database>,\n    cycle: &ArbitrageCycle,\n) -> U256 {\n    \u002F\u002F Binaere Suche ueber moegliche Eingabemengen\n    let mut low = U256::from(1_000_000); \u002F\u002F 0.001 ETH\n    let mut high = U256::from(100_000_000_000_000_000u128); \u002F\u002F 100 ETH\n    \n    for _ in 0..64 { \u002F\u002F 64 Iterationen fuer ausreichende Praezision\n        let mid = (low + high) \u002F 2;\n        let profit_mid = calculate_profit(&mut db.clone(), cycle, mid);\n        let profit_high = calculate_profit(&mut db.clone(), cycle, mid + 1);\n        \n        if profit_high > profit_mid {\n            low = mid;\n        } else {\n            high = mid;\n        }\n    }\n    \n    low\n}\n```\n\n## Fazit\n\nMEV-Simulation mit revm ist der kritische Schritt zwischen dem Finden von Arbitrage-Zyklen und dem Senden profitabler Bundles. Lokale Simulation ermoeglicht exakte Gewinnberechnung, optimale Eingabemengen und Gas-Schaetzung — alles in Mikrosekunden, ohne das Netzwerk zu beruehren.","\u003Ch2 id=\"warum-lokal-simulieren\">Warum lokal simulieren?\u003C\u002Fh2>\n\u003Cp>In der MEV-Welt gilt: Wer zuerst simuliert, gewinnt. Bevor Sie einen Bundle an einen Block Builder senden, muessen Sie sicher sein, dass die Transaktion profitabel ist. Ein fehlgeschlagener Bundle kostet nichts (keine Gaskosten), aber verpasste Gelegenheiten kosten alles.\u003C\u002Fp>\n\u003Ch2 id=\"revm-rust-ethereum-virtual-machine\">revm: Rust Ethereum Virtual Machine\u003C\u002Fh2>\n\u003Cp>revm ist eine in Rust geschriebene EVM-Implementierung, die fuer Simulation optimiert ist. Sie ist schneller als Geth und kann Transaktionen ohne ein vollstaendiges Ethereum-Node ausfuehren.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-rust\">use revm::{Evm, db::CacheDB, primitives::*};\n\nfn simulate_swap(\n    db: &amp;mut CacheDB&lt;EmptyDB&gt;,\n    router: Address,\n    calldata: Bytes,\n    value: U256,\n) -&gt; Result&lt;ExecutionResult, Box&lt;dyn Error&gt;&gt; {\n    let mut evm = Evm::builder()\n        .with_db(db)\n        .modify_tx_env(|tx| {\n            tx.caller = MY_BOT_ADDRESS;\n            tx.transact_to = TransactTo::Call(router);\n            tx.data = calldata;\n            tx.value = value;\n            tx.gas_limit = 500_000;\n        })\n        .build();\n    \n    let result = evm.transact()?;\n    Ok(result.result)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"zustandsverwaltung-mit-cachedb\">Zustandsverwaltung mit CacheDB\u003C\u002Fh2>\n\u003Cp>CacheDB haelt den Blockchain-Zustand im Speicher und ermoeglicht schnelle Simulation:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-rust\">use revm::db::{CacheDB, EthersDB};\n\n\u002F\u002F Zustand von einem RPC-Node laden\nlet client = Provider::&lt;Http&gt;::try_from(rpc_url)?;\nlet ethers_db = EthersDB::new(client, Some(block_number));\nlet mut cache_db = CacheDB::new(ethers_db);\n\n\u002F\u002F Jetzt koennen Sie Transaktionen simulieren\nlet result = simulate_swap(&amp;mut cache_db, router, calldata, value)?;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"gewinnberechnung\">Gewinnberechnung\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-rust\">fn calculate_profit(\n    db: &amp;mut CacheDB&lt;impl Database&gt;,\n    cycle: &amp;ArbitrageCycle,\n    amount_in: U256,\n) -&gt; Result&lt;ProfitResult, SimulationError&gt; {\n    \u002F\u002F Snapshot erstellen (fuer Rollback)\n    let snapshot = db.clone();\n    \n    let mut current_amount = amount_in;\n    let mut total_gas = 0u64;\n    \n    for hop in &amp;cycle.hops {\n        let calldata = encode_swap(hop, current_amount);\n        let result = simulate_swap(db, hop.router, calldata, U256::ZERO)?;\n        \n        match result {\n            ExecutionResult::Success { output, gas_used, .. } =&gt; {\n                current_amount = decode_amount_out(&amp;output)?;\n                total_gas += gas_used;\n            }\n            _ =&gt; {\n                *db = snapshot; \u002F\u002F Rollback\n                return Err(SimulationError::Revert);\n            }\n        }\n    }\n    \n    let gas_cost = U256::from(total_gas) * gas_price;\n    let gross_profit = current_amount.saturating_sub(amount_in);\n    let net_profit = gross_profit.saturating_sub(gas_cost);\n    \n    Ok(ProfitResult { net_profit, gas_used: total_gas })\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"optimale-eingabemenge-finden\">Optimale Eingabemenge finden\u003C\u002Fh2>\n\u003Cp>Die optimale Eingabemenge maximiert den Gewinn. Bei AMMs (Automated Market Makers) gibt es ein analytisches Optimum:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-rust\">fn find_optimal_amount(\n    db: &amp;CacheDB&lt;impl Database&gt;,\n    cycle: &amp;ArbitrageCycle,\n) -&gt; U256 {\n    \u002F\u002F Binaere Suche ueber moegliche Eingabemengen\n    let mut low = U256::from(1_000_000); \u002F\u002F 0.001 ETH\n    let mut high = U256::from(100_000_000_000_000_000u128); \u002F\u002F 100 ETH\n    \n    for _ in 0..64 { \u002F\u002F 64 Iterationen fuer ausreichende Praezision\n        let mid = (low + high) \u002F 2;\n        let profit_mid = calculate_profit(&amp;mut db.clone(), cycle, mid);\n        let profit_high = calculate_profit(&amp;mut db.clone(), cycle, mid + 1);\n        \n        if profit_high &gt; profit_mid {\n            low = mid;\n        } else {\n            high = mid;\n        }\n    }\n    \n    low\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"fazit\">Fazit\u003C\u002Fh2>\n\u003Cp>MEV-Simulation mit revm ist der kritische Schritt zwischen dem Finden von Arbitrage-Zyklen und dem Senden profitabler Bundles. Lokale Simulation ermoeglicht exakte Gewinnberechnung, optimale Eingabemengen und Gas-Schaetzung — alles in Mikrosekunden, ohne das Netzwerk zu beruehren.\u003C\u002Fp>\n","de","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:30.163606Z","Deep EVM #15: MEV-Simulation — Lokale EVM-Ausfuehrung mit revm","MEV-Strategien mit lokaler EVM-Simulation testen: revm fuer Transaktionsnachbildung, Gewinnberechnung und Gas-Schaetzung in der MEV-Pipeline.","MEV Simulation revm",null,"index, follow",[22,27,31,35],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000019","MEV","mev",{"id":36,"name":37,"slug":38,"created_at":26},"c0000000-0000-0000-0000-000000000001","Rust","rust","Ingenieurwesen",[41,47,53],{"id":42,"title":43,"slug":44,"excerpt":45,"locale":12,"category_name":39,"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.","2026-03-28T10:44:49.720230Z",{"id":48,"title":49,"slug":50,"excerpt":51,"locale":12,"category_name":39,"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":39,"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":19,"linkedin":19,"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"]