Skip to content

Instantly share code, notes, and snippets.

@koeppelmann
koeppelmann / deployment_report.md
Last active July 1, 2026 19:27
EEZ two-composer deployment on 147.135.221.107 — issue report (2026-07-01)

Two-composer EEZ deployment on 147.135.221.107 — issue report

Chain: Chiado L1 (10200) + EEZ Rollup0 L2 (10201) • Registry 0xd3a59fc7…99317 • Composers C1 / C2 Date: 2026-07-01 • Updated: 2026-07-01 after live diagnosis with Edu


Correction to the original diagnosis of #1

The initial version of this report attributed the failing L1→L2 deposits to the two-composer bundle race described in eez-rollup0#20. That was wrong. After Edu identified the real cause on-chain and I re-tested, the actual behavior is described in the corrected #1 below. The two-composer race may still exist as a separate issue, but it is not what I was reproducing.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Swarm File Upload</title>
<script src="https://unpkg.com/@ethersphere/bee-js/dist/index.browser.min.js"></script>
<!-- Helia for IPFS in browser -->
<script type="module">
import { createHelia } from 'https://esm.sh/helia@4';
@koeppelmann
koeppelmann / concise.md
Last active June 11, 2026 06:01
Safe Tx Builder JSON: whitelist CoW leverage wrappers (Gnosis staging) from 2/n admin

Safe Tx Builder JSON — whitelist CoW leverage wrappers + solver EOA (Gnosis staging)

Update 2026-06-11: added a third addSolver for the fresh solver EOA 0xFa5d3f85da8395D4562D18422cB27e032a676Af1 — the address that will actually call wrappedSettle. Wrappers alone aren't enough: the authenticator must also allow the caller. (JSON uses data: null so the Tx Builder decodes each call into readable setManager/addSolver entries instead of "Custom hex data".)

JSON for the Safe Transaction Builder to whitelist everything needed on Gnosis staging (authenticator 0x02073540567FA1EABcBf74C2F7E6F9029ca7d800) from the 2/n proxy-admin Safe

@koeppelmann
koeppelmann / whitelist-wrappers.json
Last active June 11, 2026 06:11
Whitelist CoW leverage wrappers on Gnosis staging (Safe Transaction Builder batch)
{
"version": "1.0",
"chainId": "100",
"createdAt": 1781196000000,
"meta": {
"name": "Whitelist CoW leverage wrappers + solver EOA (staging) via proxy-admin",
"description": "setManager(self) -> addSolver(CoWSafeWrapper) -> addSolver(CowFlashLoanWrapper v6) -> addSolver(solver EOA) -> setManager(restore original 4/12 manager). Run from the proxy-admin Safe (2/6).",
"txBuilderVersion": "1.18.0",
"createdFromSafeAddress": "0x68185584ccb166806f7ed69996380f50ac06035b",
"createdFromOwnerAddress": "",
@koeppelmann
koeppelmann / .gitignore
Last active June 8, 2026 14:52
Fully collateralized symmetric options reference contract
cache/
out/
@koeppelmann
koeppelmann / IntegrationTestDepth2ReturnData.t.sol
Created March 23, 2026 19:54
Regression test for issue #246: depth-2 L2→L1→L2 return data
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {Test, console} from "forge-std/Test.sol";
import {Rollups, RollupConfig} from "../src/Rollups.sol";
import {CrossChainManagerL2} from "../src/CrossChainManagerL2.sol";
import {CrossChainProxy} from "../src/CrossChainProxy.sol";
import {Action, ActionType, ExecutionEntry, StateDelta, ProxyInfo} from "../src/ICrossChainManager.sol";
import {IZKVerifier} from "../src/IZKVerifier.sol";
import {Counter} from "./mocks/CounterContracts.sol";
@koeppelmann
koeppelmann / DelayTokenWrapper.sol
Created April 4, 2024 09:46
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.25+commit.b61c2a91.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
contract DelayTokenWrapper {
import json
import requests
import pprint
#response = requests.get("https://api.circles.garden/api/users/Martin")
#pprint.pprint(response.content)
martinsavings = "0x052b4793d50d37FD3BFcBf93AAC9Cda6292F81Fa"
martin = "0x42cEDde51198D1773590311E2A340DC06B24cB37"
import json
import requests
import pprint
#response = requests.get("https://api.circles.garden/api/users/Martin")
#pprint.pprint(response.content)
martinsavings = "0x052b4793d50d37FD3BFcBf93AAC9Cda6292F81Fa"
martin = "0x42cEDde51198D1773590311E2A340DC06B24cB37"
// SPDX-License-Identifier: CC0
pragma solidity ^0.8.0;
// author @koeppelmann
// Detector Factory allows to deploy new CensorshipDetector
// Each CensorshipDetector monitors wether a specific address is being cencored on Ethereum
// Each CensorshipDetector must be funded with ETH (anyone can send ETH to the CensorshipDetector)
// Once funded anyone can call the "withdrawal" in the "CensorshipDetector" every 1h and it will pay a small bounty to tx.origin (100k * basefee)
// During this transaction the "CensorshipDetector" will send 1 wei to the address that is endangered of being cencored.
// CensorshipDetector will log the coinbase (validator address) (those are NOT censoring) and the number of blocks that has passed.