superior-trade/external-deposit
Use when a user wants to fund or bridge from an external wallet through a third-party UI such as Relay, especially when asking for MetaMask Mobile QR codes, bridge links, prefilled deposit URLs, Robinhood Chain USDG, or avoiding high-fee transaction QR mistakes.
npx skills add https://github.com/Superior-Trade/superior-skills --skill external-deposit
Use this skill for deposits that should be completed in an external wallet or third-party bridge UI rather than by exporting Superior-managed keys or encoding arbitrary transaction calldata into a QR code.
Use skills/v3/primitives/deposit-qr only for simple wallet funding QRs: native token sends or ERC-20 transfer payment URIs to a destination address.
approve(...) or bridge deposit calls into MetaMask Mobile QR/deeplinks. MetaMask Mobile supports native sends and token transfers better than arbitrary transaction calldata; forcing calldata can show wrong or high fees.transfer payment URI instead of Relay.When the source chain, destination chain, and token contract are identical, do not use Relay. Generate an EIP-681 ERC-20 transfer URI:
ethereum:<token-address>@<chain-id>/transfer?address=<recipient>&uint256=<amount-base-units>
The bundled script automatically switches to this mode when --from-chain, --to-chain, --from-token, and --to-token resolve to the same chain/token and --recipient plus --to-amount are provided. In this mode:
mode is direct_erc20_transfer.payment_uri contains the transfer URI.relay_url and quote are null.Supported built-in chains and tokens:
| Chain | Tokens |
|---|---|
| ethereum | USDC |
| arbitrum | USDC |
| base | USDC |
| avalanche | USDC |
| polygon | USDC, USDC.e, pUSD |
| robinhood | USDG |
Custom ERC-20 token addresses are also accepted and default to 18 decimals.
Relay supports bridge URLs shaped like:
https://relay.link/bridge/<destination-chain>?toCurrency=<destination-token>&fromChainId=<source-chain-id>&fromCurrency=<source-token>&toAddress=<recipient>&amount=<target-amount>&tradeType=EXPECTED_OUTPUT
Use toAddress, amount, and tradeType=EXPECTED_OUTPUT when a recipient and target output amount are known. Relay's web app uses EXPECTED_OUTPUT to prefill the Buy field; keep using the quote API with EXACT_OUTPUT when you need a live exact-output quote.
For MetaMask Mobile, wrap the Relay URL:
https://link.metamask.io/dapp/<url-encoded-relay-url>
Supported wallet link targets:
| Wallet target | Link format |
|---|---|
| metamask | https://link.metamask.io/dapp/<encoded-url> |
| trust | https://link.trustwallet.com/open_url?coin_id=60&url=<encoded-url> |
| okx | okx://wallet/dapp/url?dappUrl=<encoded-url> |
| plain | raw Relay URL |
Always include plain as a fallback when a wallet-specific link fails to open.
Example: Arbitrum USDC to Robinhood Chain USDG:
https://relay.link/bridge/robinhood?toCurrency=0x5fc5360d0400a0fd4f2af552add042d716f1d168&fromChainId=42161&fromCurrency=0xaf88d065e77c8cc2239327c5edb3a432268e5831&toAddress=0xF60CA00ef5e510137bC09691b52BA7863F52158F&amount=20&tradeType=EXPECTED_OUTPUT
This opens Relay with the route prefilled. The user still reviews the live quote and signs normal wallet prompts inside Relay.
Use the bundled script:
node skills/external-deposit/scripts/create-relay-bridge-qr.mjs \
--from-chain arbitrum \
--from-token USDC \
--to-chain robinhood \
--to-token USDG \
--wallet metamask \
--wallet trust \
--wallet okx \
--wallet plain \
--recipient 0xF60CA00ef5e510137bC09691b52BA7863F52158F \
--to-amount 20 \
--quote
It prints JSON with:
mode — direct_erc20_transfer for same-chain token sends, otherwise relay_bridge.relay_url — prefilled Relay bridge URL.payment_uri — EIP-681 ERC-20 transfer URI for same-chain direct transfers.wallet_links — wallet-specific dapp URLs and QR URLs for requested targets.metamask_mobile_url — backward-compatible alias for the MetaMask link when requested.qr_url — hosted QR image URL for the default wallet link.quote — live Relay quote summary when --quote is provided.summary — route, token contracts, recipient, and amount.If no --wallet flags are provided, the script emits metamask and plain.
Display the QR in Markdown when the client supports images:

Relay Deposit Summary:
* From: Arbitrum USDC
* Source token: 0xaf88d065e77c8cc2239327c5edb3a432268e5831
* To: Robinhood Chain USDG
* Destination token: 0x5fc5360d0400a0fd4f2af552add042d716f1d168
* Recipient: 0xF60CA00ef5e510137bC09691b52BA7863F52158F
* Quote: pay 20.14 USDC, receive 20 USDG
* Expected gas: tiny Arbitrum ETH gas
Scan this QR with your phone camera to open Relay inside MetaMask Mobile.
Reject the transaction if MetaMask shows the wrong chain or a high network fee.
approve or deposit calldata and expecting MetaMask Mobile to show a safe transaction popup.Take superior-trade/external-deposit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.