Skip to content

docs(bankr): weekly skill sync — NFT bids and listings, contract deploy, holders endpoint, gateway daily budget - #641

Open
sidrisov wants to merge 2 commits into
mainfrom
sinaver/jolly-gates-0qpmli
Open

docs(bankr): weekly skill sync — NFT bids and listings, contract deploy, holders endpoint, gateway daily budget#641
sidrisov wants to merge 2 commits into
mainfrom
sinaver/jolly-gates-0qpmli

Conversation

@sidrisov

@sidrisov sidrisov commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

Weekly sync of the bankr skill against what the platform can actually do. Split into what shipped this week and pre-existing gaps the sync surfaced.

Shipped this week

NFTs — the sell and bid sides are now usable end to end

  • Collection-wide bids: make an offer good for any token in a collection, see the bids you've made, and retract them. Bids are always ERC-20 (WETH on most chains, or whatever currency the collection pins — USDG on some Robinhood Chain collections), never native ETH; a short WETH balance is wrapped from ETH automatically. Only collection-wide bids are cancellable through Bankr — single-token bids have to be cancelled on OpenSea.
  • Best-offer lookup is now available to ask directly, and an NFT with no live offers is a normal "no offers" answer rather than an error.
  • ERC-20-denominated offers and listings on Robinhood Chain (the conduit and payment-currency handling).

Deploy and verify contracts

  • The agent can deploy an EVM contract from compiled creation bytecode and verify its source on block explorers afterwards. Documented with the caveat that matters: deployment goes through a shared CREATE2 proxy, so msg.sender inside the constructor is the proxy, not your wallet — a constructor that assigns ownership or mints to msg.sender attributes those to the proxy. Address is deterministic and known pre-broadcast; deploys carry no native value; not for token launches.

GET /tokens/holders

  • New API-key-gated endpoint returning an EVM token's holders joined to Bankr wallet identity and X handle, with cursor pagination. filter=bankr for the Bankr users who hold it, filter=all for the full on-chain ranking annotated where we recognise the address. Documented alongside the caveats: balance is a raw integer string, cursors are query-scoped, and it's a live feed rather than a snapshot (the agent's holder snapshot stays the right tool for airdrop targeting).

LLM gateway — daily spend budget

  • Optional per-UTC-day cap across all metered LLM spend on the wallet, covering every key it owns plus Max Mode runs. Documented the dailyBudget shape on /v1/credits, that it's omitted entirely when uncapped, that over-budget spend returns 402 daily_budget_exceeded (distinct from insufficient_credits, and needing a different fix), that read-only GETs keep working so you can find out when you're unblocked, and that it's a guardrail with a small overshoot rather than an accounting boundary.

Gateway models: added grok-4.6 and qwen3.8-max.

Avantis (v2)

  • Take-profit and stop-loss are signed intents that now land. An unreachable level — an SL past liquidation, a TP the wrong side of entry — is refused up front with the liquidation price in the message rather than accepted and silently dropped, and "set" now means visible on the position. TP/SL is unsupported in wallet (connected-wallet) mode. Pair catalogue is fetched live from the Avantis data API.

Exact-output swaps on same-chain Solana — "buy exactly N TOKEN" now sizes the input there too, rather than throwing.

x402$0 challenges are signed rather than rejected as unparseable, and a multi-rail 402 is priced and bounded on the rail Bankr will actually sign, so a seller listing an unsupported rail first no longer makes a payable endpoint read as unpriceable.

Gaps caught while syncing

These were already true; the skill just didn't say so (or said the wrong thing).

  • NFT listing management was entirely missing — listing for sale, viewing your own listings, and cancelling them.
  • NFT chain coverage was wrong in both directions. The reference claimed three chains; it's actually six (Base, Ethereum, Polygon, Unichain, Arbitrum, Robinhood Chain) — and explicitly not World Chain or BNB Chain, which Bankr trades tokens on but has no marketplace coverage for. Now stated in both places plus the troubleshooting table.
  • Arbitrary-transaction chain table was four chains short (World Chain, Arbitrum, BNB Chain, Robinhood Chain), now with slugs alongside chain IDs.
  • bankr webhooks was undocumented — a whole command family for deploying handlers that turn an external event into an agent run. New references/webhooks.md covering the handler contract, provider templates, the REST surface, and the security point that matters: the trigger URL is public, the generic template verifies nothing, and every accepted POST is an agent run on your wallet.
  • CLI surface: bankr files mv|rename|info, the real bankr wallet sign / wallet submit tx|json forms, bankr login siwe, bankr update.
  • /tokens/* endpoints (search, trending, balance, balances) weren't listed at all.
  • token.balance is a string, not a number — parsing it as a float rounds high-decimal tokens up, and a max-size trade built from a rounded balance reverts on-chain.
  • x402 smart-account payers: the skill claimed ERC-6492 worked. Corrected — deployed ERC-1271 and EIP-7702 delegated wallets are accepted; counterfactual ERC-6492 from an undeployed account is rejected with invalid_permit2_signature, because such a payment would verify and then fail to settle.
  • CLI email logins are listed and revocable in Active sessions, and bankr logout only clears the local config — it revokes nothing server-side.
  • Max Mode out of credits is a reply asking you to top up (with an X-only fallback to the standard model), and a mid-turn exhaustion saves progress in the thread — the skill previously said messages just fail.
  • Gateway error surface: 503 provider_unavailable, the two distinct causes of a 402, the OpenRouter routing controls that are stripped rather than forwarded, and which errors on /v1/messages use the Anthropic envelope versus the OpenAI one.

Review pass

The second commit corrects three claims from the first that didn't survive verification, worth calling out since two were newly introduced rather than inherited:

  1. NFT coverage is not "every EVM chain." I'd read the tools' supportedChains metadata as marketplace coverage; it's tool availability. World Chain and BNB Chain carry no OpenSea chain mapping, so collections there are rejected outright.
  2. Exact-output swaps target the output, they don't pin it. The input is sized from a theoretical price on both EVM and Solana, and pool impact then applies to the fill. minBuyAmount is the hard floor; the exact-output amount isn't.
  3. The Anthropic error envelope on /v1/messages covers request and streaming errors only. Auth and billing errors use the OpenAI envelope on every surface — which is exactly where the insufficient_credits / daily_budget_exceeded distinction is read from, so the original phrasing would have misled anyone acting on it.

Plus smaller precision fixes: the Avantis pair count is live-fetched and drifts (so no fixed figure), session revocation propagates within seconds rather than instantly and the MFA step-up covers any session, webhook names cap at 47 characters, and the daily budget applies to Max Mode runs specifically since ordinary agent runs don't draw on LLM credits.

Files

SKILL.md plus references/: nft-operations, arbitrary-transaction, llm-gateway, market-research, leverage-trading, token-trading, portfolio, files, safety, x402-cloud, and a new webhooks.

Shipped this week:
- NFT: collection-wide bids (create/view/cancel), best-offer lookup with a
  "no offers" answer, and offer/listing support on every EVM chain
- Contract deployment + source verification via the agent
- GET /tokens/holders — holders joined to Bankr identity, paginated
- LLM gateway daily spend budget (402 daily_budget_exceeded, /v1/credits view)
- New gateway models (grok-4.6, qwen3.8-max) and Sonnet 5's permanent rate
- Avantis v2: TP/SL that actually lands, unreachable levels refused up front,
  ~118 pairs, no TP/SL in wallet mode
- Exact-output swaps on same-chain Solana
- x402: $0 challenges are payable; a multi-rail 402 is priced on the rail we sign

Gaps caught while syncing:
- NFT listing management (list/cancel/view) was never documented, and the NFT
  chain list was three chains behind
- Arbitrary-transaction chain table was missing four chains
- bankr webhooks was entirely undocumented — new references/webhooks.md
- bankr files mv/rename/info, wallet sign/submit forms, login siwe, update
- /tokens/* public endpoints
- token.balance is a string, not a number
- x402 smart-account payers: deployed ERC-1271 and EIP-7702 are accepted,
  counterfactual ERC-6492 is rejected (the skill claimed 6492 worked)
- CLI email logins are listed and revocable in Active sessions
- Max Mode out-of-credits behaviour, gateway 503 provider_unavailable, the
  Anthropic error envelope on /v1/messages, and the stripped OpenRouter
  routing controls
@sidrisov
sidrisov requested a review from igoryuzo August 15, 2026 05:21
@sidrisov sidrisov changed the title docs(bankr): weekly skill sync — NFT bids & listings, contract deploy, holders endpoint, gateway daily budget docs(bankr): weekly skill sync — NFT bids and listings, contract deploy, holders endpoint, gateway daily budget Aug 15, 2026
…ope claims

Review pass over the weekly sync caught three claims that didn't hold:

- NFT operations are Base / Ethereum / Polygon / Unichain / Arbitrum /
  Robinhood Chain, not every EVM chain. World Chain and BNB Chain have no
  marketplace coverage, so a collection on either is rejected. The tools'
  supported-chains metadata is tool availability, not marketplace reach —
  reading it as coverage was the error.
- Exact-output swaps target the output, they don't guarantee it. The input is
  sized from a theoretical price on both EVM and Solana and pool impact then
  applies to the fill, so the delivered amount lands close to the target rather
  than on it. Point readers at minBuyAmount for a hard floor.
- The Anthropic error envelope on /v1/messages covers request and streaming
  errors only. Auth and billing errors (401/402/403) use the OpenAI envelope on
  every surface — which is where the insufficient_credits vs
  daily_budget_exceeded check reads from.

Also: Avantis pair count is live-fetched and drifts, so 100+ rather than a
fixed figure; session revocation propagates within seconds and the MFA step-up
covers any session, not just someone else's; webhook names cap at 47 chars; the
daily budget applies to Max Mode runs specifically, since ordinary agent runs
don't draw on LLM credits; dropped a gateway instance-count aside.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants