Skip to content

bullpen polymarket sweep-native-pol

Last updated: August 26, 2026

Move native POL accidentally sent to a Deposit Wallet via a gasless transfer.

Usage

bullpen polymarket sweep-native-pol [OPTIONS] --to <ADDRESS> --amount <AMOUNT>

Live Help

Move native POL accidentally sent to a Deposit Wallet via a gasless transfer.

This is different from `sweep-stranded --token MATIC/POL`, which moves wrapped WMATIC/POL ERC-20. Native POL is the Polygon gas token and must be transferred with a native-value recovery call.

The first release supports Deposit Wallet sources. Legacy Safe native-POL recovery stays support-only until the Safe recovery path is confirmed to carry native value.

Usage: bullpen polymarket sweep-native-pol [OPTIONS] --to <ADDRESS> --amount <AMOUNT>

Options:
      --from <ADDRESS>
          Source Deposit Wallet address. Defaults to your active Deposit Wallet when omitted

      --output <OUTPUT>
          Output format for command results

          [possible values: table, json]

      --env <ENV>
          Target environment to connect to (overrides config.toml)

          [env: BULLPEN_ENV=]
          [possible values: staging, production]

      --to <ADDRESS>
          Destination address (0x-prefixed). Required; use --unsafe-recipient for third-party addresses

      --amount <AMOUNT>
          Amount of native POL to sweep, in POL units (18 decimals max)

      --config <CONFIG>
          Path to a custom config.toml file (overrides $BULLPEN_CONFIG and the default location).

          Explicit --config and BULLPEN_CONFIG paths fail closed: if the file is missing, the CLI exits validation instead of silently loading defaults. Credentials still resolve via BULLPEN_HOME, so set BULLPEN_HOME too when isolating a session.

      --unsafe-recipient
          Allow sending to an arbitrary address, not just your own Bullpen-managed 0x wallet or Deposit Wallet

      --dry-run
          Print the transfer plan without submitting

  -y, --yes
          Skip confirmation prompt

      --read-only
          Enable read-only mode: blocks all mutating commands

      --non-interactive
          Suppress interactive prompts; does NOT imply --yes for money-moving commands

          [env: BULLPEN_NON_INTERACTIVE=]

  -h, --help
          Print help (see a summary with '-h')

EXAMPLES:
  # Preview a native POL recovery without submitting
  bullpen polymarket sweep-native-pol --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run

  # Preview from an explicit Deposit Wallet source
  bullpen polymarket sweep-native-pol --from 0x2222222222222222222222222222222222222222 --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run --output json

  # Review all recovery options without submitting anything
  bullpen polymarket sweep-native-pol --help

Example Commands

bullpen polymarket sweep-native-pol --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run
bullpen polymarket sweep-native-pol --from 0x2222222222222222222222222222222222222222 --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run --output json
bullpen polymarket sweep-native-pol --help
bullpen polymarket sweep-native-pol --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run --output json

JSON Output

Contract: JSON Output Contract.

Successful output is a single JSON document. The shape below is representative for this command family; commands may add fields without breaking the shared contract.

Schema version: 1 when a command emits schema_version; otherwise treat the current command shape as contract version 1.

Top-level Keys

key type nullable notes
status string no dry_run for preview output
dry_run boolean no Always true for the documented preview
source_wallet_kind string no deposit_wallet
source string no Source Deposit Wallet
owner_eoa string no Owner controlling the source wallet
active_eoa string no Active Bullpen wallet owner
recipient string no Destination address
amount_pol string no Human-readable native POL amount
amount_wei string no Raw native POL amount
balance_wei string no Source balance observed before submission
relayer_path string no Deposit Wallet native-value batch route

Example

Example output: This non-runnable command-and-response pair documents the JSON shape. Use the preview/live workflow in Example Commands when you intend to submit.

bullpen polymarket sweep-native-pol --to 0x1111111111111111111111111111111111111111 --amount 0.25 --dry-run --output json
{
  "status": "dry_run",
  "dry_run": true,
  "source_wallet_kind": "deposit_wallet",
  "source": "0x2222222222222222222222222222222222222222",
  "owner_eoa": "0x1111111111111111111111111111111111111111",
  "active_eoa": "0x1111111111111111111111111111111111111111",
  "recipient": "0x1111111111111111111111111111111111111111",
  "amount_pol": "0.25",
  "amount_wei": "250000000000000000",
  "balance_wei": "1000000000000000000",
  "relayer_path": "deposit_wallet_wallet_batch_native_value"
}

Live (--yes --output json) output includes receipt and balance proof.

key type nullable notes
status string no confirmed-success, degraded-success, or hard-failure
operation string no sweep_native_pol
route_owner string no Routing metadata for the native-POL sweep path
submission_state string no Relayer state or outcome_unknown
tx_hash string yes Confirmed Polygon transaction hash when known
relayer_trace_id string yes Relayer transaction identity when known
receipt_status string no Receipt proof state
verification object no Normalized receipt and balance-delta proof
balance_proof object yes Source/recipient balances, expected deltas, and actual deltas
safe_to_retry boolean no False for submitted or ambiguous money movement
next_diagnostic_command string yes Parser-valid reconciliation command when proof is incomplete

A hard failure is printed as structured JSON before the command exits nonzero. Unknown submit outcomes are not retried automatically.

Error Envelope

When a Polymarket CLOB or gasless-relayer rejection coincides with a degraded Polymarket status page, the error envelope may include a polymarket_status object:

{
  "polymarket_status": {
    "page_status": "HASISSUES",
    "status_url": "https://status.polymarket.com",
    "affected_components": [
      {"name": "CLOB API", "status": "PARTIALOUTAGE"}
    ],
    "advisory": "Polymarket is experiencing issues; this rejection is most likely a Polymarket-side outage."
  }
}

The field is omitted on local validation/auth/balance errors and when the status-page fetch times out or reports healthy relevant components.

Stability

Patch releases may add nullable or optional fields. Minor releases may add required fields or increment schema_version. Major releases may remove or rename fields.