Skip to content

Instantly share code, notes, and snippets.

@koeppelmann
Last active June 11, 2026 06:01
Show Gist options
  • Select an option

  • Save koeppelmann/409c21360067500617f9319a5f0eed35 to your computer and use it in GitHub Desktop.

Select an option

Save koeppelmann/409c21360067500617f9319a5f0eed35 to your computer and use it in GitHub Desktop.
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 0x68185584ccb166806f7ed69996380f50ac06035b instead of the 4/12 manager — the admin is the EIP-1967 owner and can setManager, so it can grant solvers itself in one atomic batch.

Run: Transaction Builder app on the admin Safe → import the JSON below → 2 sigs → execute.

What the tx does

  1. setManager(0x68185584…035b) — admin Safe temporarily becomes manager
  2. addSolver(0x531636e6…7A37) — CoWSafeWrapper
  3. addSolver(0x2E3fdEe2…9363) — CowFlashLoanWrapper v6
  4. addSolver(0xFa5d3f85…6Af1) — solver EOA (calls wrappedSettle)
  5. setManager(0xA03be496…4930) — restore the original 4/12 manager

Net effect: only the three solvers added; manager restored. Atomic.

Here the JSON

{
  "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": "",
    "checksum": "0xb1738c22b168af4922f59f098ff66d2fee6d6c501e5610b2fed78741005477f5"
  },
  "transactions": [
    {
      "to": "0x02073540567FA1EABcBf74C2F7E6F9029ca7d800",
      "value": "0",
      "data": null,
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "manager_",
            "type": "address"
          }
        ],
        "name": "setManager",
        "payable": false
      },
      "contractInputsValues": {
        "manager_": "0x68185584ccb166806f7ed69996380f50ac06035b"
      }
    },
    {
      "to": "0x02073540567FA1EABcBf74C2F7E6F9029ca7d800",
      "value": "0",
      "data": null,
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "solver",
            "type": "address"
          }
        ],
        "name": "addSolver",
        "payable": false
      },
      "contractInputsValues": {
        "solver": "0x531636e6e18F3A52c283aCCda39D7185E4597A37"
      }
    },
    {
      "to": "0x02073540567FA1EABcBf74C2F7E6F9029ca7d800",
      "value": "0",
      "data": null,
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "solver",
            "type": "address"
          }
        ],
        "name": "addSolver",
        "payable": false
      },
      "contractInputsValues": {
        "solver": "0x2E3fdEe28D7224ED140B4ea08C57F47546679363"
      }
    },
    {
      "to": "0x02073540567FA1EABcBf74C2F7E6F9029ca7d800",
      "value": "0",
      "data": null,
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "solver",
            "type": "address"
          }
        ],
        "name": "addSolver",
        "payable": false
      },
      "contractInputsValues": {
        "solver": "0xFa5d3f85da8395D4562D18422cB27e032a676Af1"
      }
    },
    {
      "to": "0x02073540567FA1EABcBf74C2F7E6F9029ca7d800",
      "value": "0",
      "data": null,
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "manager_",
            "type": "address"
          }
        ],
        "name": "setManager",
        "payable": false
      },
      "contractInputsValues": {
        "manager_": "0xA03be496e67Ec29bC62F01a428683D7F9c204930"
      }
    }
  ]
}```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment