---
name: move-regen
description: Move REGEN between the Regen chain, Osmosis and Base with the one key you already hold, in one signed transaction per direction, with no wallet held by anyone else. Every direction was proven live on 2026-09-08 with one secp256k1 key and every landing was read from the destination chain. Use when someone says "bridge my REGEN", "get REGEN onto Base", "bring axlREGEN home to regen-1", "send REGEN to Osmosis", "is my bridge transaction stuck", or "how long does the Regen bridge take". Keyless quotes and status; the only signature is yours; nothing is custodied, nothing is metered, nothing is a trade.
---

# Move REGEN

One key signs on every chain here. A Base or Ethereum private key is a valid
Regen and Osmosis account under a different address prefix, so the agent that
holds a wallet on Base already holds the regen1 and osmo1 accounts too. This
skill gives that agent three directions, measured, and the two tools that
prepare and follow them.

## The measured table (2026-09-08, one key, landings read from the destination)

| Direction | What you sign | Toll | Landed in |
|---|---|---|---|
| regen-1 to Osmosis | one Cosmos MsgTransfer on regen-1 (channel-1) | none: amount out equals amount in | under a minute |
| Osmosis to regen-1 | one Cosmos MsgTransfer on osmosis-1 (channel-8) | none | under a minute |
| regen-1 to Base (as axlREGEN) | one Cosmos MsgTransfer on regen-1 (channel-48, Axelar) | flat per transfer, priced in dollars (about $0.20, so 94 to 175 REGEN across one week; 3,000 in became 2,856.60 out) | about 66 seconds |
| Base to regen-1 | one exact ERC-20 approval, then one EVM transaction to Skip's contract | none in REGEN; the transaction carries Axelar's fee as about $0.11 of ETH value | about 30 minutes |

The 30 minutes is Base finality: Axelar will not approve a call out of an EVM
chain into a Cosmos chain until the Base block is final. Nothing shortens it,
and the funds are not lost while it waits. The transactions behind the table:
`758F257270AEDA6432930D562CA140385D8C48B53A2760E1AC24829038D4FAB6` (regen to
Osmosis), `7AA0E11244CB4D90C13D5AD46A0A792ED57C3D8893EDA83D4BA1835E405E5DBD`
(regen to Base), `0xe0ac5bdfa1023a4ae86a3072d3d65a284827cb24a65d9f1804ccaa458a27f272`
(Base to regen, Base block 51,054,464).

## The two calls (MCP, `https://vealth.net/mcp`, keyless)

1. `prepare_bridge` with `from_chain`, `to_chain`, `amount` (whole REGEN),
   `sender` (your own address on the source chain) and, on the Base and
   Arbitrum routes, `destination` (your own address on the destination). On
   the Osmosis legs `destination` may be omitted: your own account under the
   other prefix is used and the reply says so. The reply carries a live quote
   (`quote.toll_regen`, `quote.min_send_regen`, `quote.est_fees_usd`) and
   `sign_this`: a Cosmos message or an EVM transaction, exactly what to sign,
   nothing more. On Base to regen, `sign_this.value` is Axelar's fee in ETH as
   Skip quoted it (refused above $0.50) and `required_erc20_approvals` names
   the one exact approval to send first.
2. Sign and broadcast `sign_this` with your own wallet. Skip Go's relayers
   carry every hop after that; there is no confirm step and nothing to call.
3. `bridge_status` with `chain` (the source chain) and `tx_hash`. It registers
   the hash with Skip's tracker first (a status read before that is blank
   forever), reads Skip's state, and for a Base or Arbitrum source reads
   Axelar's own record, so a send waiting on finality reads as "sent, waiting"
   rather than nothing. `landed` is true only when Skip reports
   STATE_COMPLETED_SUCCESS or Axelar reports the call executed; time passed
   is never taken as evidence. Then read the destination balance yourself.

## From a terminal (the npm kit, your own key stays on your machine)

`npx regen-agent-kit bridge quote <from> <to> <amount> --sender <addr>` and
`bridge status <chain> <txhash>` and `bridge balances --address <addr>` are
keyless. `bridge send` is the one broadcaster and refuses unless your key is in
`.env` and `REGEN_BRIDGE_LIVE=true`; it prints the same plan as `quote`, signs
where the key lives, then reads the destination balance before and after. The
kit is `packages/regen-agent-kit` in the public repo; the key is never
printed, logged or sent anywhere.

## What is refused, and why

- Osmosis straight to Base. Skip composes it as a CosmWasm contract call, not a
  plain transfer, so it is refused everywhere here. Go home first (Osmosis to
  regen-1), then regen-1 to Base.
- Any route needing more than one transaction (Base USDC to REGEN and the
  reverse are two signatures and are not offered).
- Any leg whose signer is not the address you gave.
- On the Axelar routes, a send under twelve times the live toll, or a toll of
  15% or more. The toll is flat, so one larger transfer fixes the percentage:
  batch, never dribble.
- On the Osmosis legs, any quote that keeps anything: that leg is promised
  toll-free, so a toll is refused rather than paid.

## What this is not

A round trip through Base and back loses money at every size these tools
prepare (measured 2026-09-08: minus 22% at 1,000 REGEN, minus 9% at 3,000),
because the flat toll never crosses the small price difference between the
venues. Move REGEN to where it is needed; never to trade the gap. Nothing here
is a price feed, an exchange, or advice, and nobody here holds your funds at
any point: the only custody in the whole path is Axelar's escrow, which is how
axlREGEN exists at all.

## Landmines already hit for you

- Skip returns EVM calldata as bare hex. `prepare_bridge` returns it with the
  `0x` prefix; if you build your own transaction from Skip's raw reply, add it,
  or your signer throws.
- A status read before the hash is tracked reads blank forever. Both tools
  track first.
- Small sends out of regen-1 get eaten by the flat toll. `prepare_bridge`
  derives the minimum from the live toll and says it.
- axlREGEN and REGEN are the same token in two places; a wallet on Base shows
  axlREGEN with six decimals, the same six decimals as uregen.
