earn-as-base-keeper — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited earn-as-base-keeper (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Trigger when:
GBLIN is a treasury-backed index (cbBTC / WETH / USDC). The vault does not rebalance itself and pays nobody to do it. When a basket row drifts past its opening band, the vault holds a Dutch auction: whoever trades with it toward the target weights is the counterparty, at the Chainlink oracle price adjusted by a premium.
Vault: 0xc2181d975c05c8c724b334bcED0764c0b86B1D53 · Lens: 0xfCFea8027019E8551A1f09AD91532471F5D26f61 (Base mainnet, chain id 8453)
With the server connected (npx @gblin-protocol/mcp-server), call:
get_auction_stateIt returns auctionOpen, navReliable, the current premiumBps, the curve, and one entry per basket row with the side the vault takes, the gap in ETH, the input token and amount, and unsigned calldata for the approval and the bid. best is the row with the largest gap. If auctionOpen is false, every row is within its band: check again later.
Send the approval, then the bid, from your funded wallet. You receive the other side of the trade at the oracle price adjusted by the premium.
import { createPublicClient, http } from 'viem';
import { base } from 'viem/chains';
const VAULT = '0xc2181d975c05c8c724b334bcED0764c0b86B1D53';
const LENS = '0xfCFea8027019E8551A1f09AD91532471F5D26f61';
// 1. Lens.auctionOpenedAt(VAULT) != 0 -> an auction is open
// 2. Lens.auction(VAULT, i) for each row -> (open, premiumBps, vaultBuysAsset, gapEth)
// 3. If vaultBuysAsset: input = the asset, amount = gapEth converted at the two oracle prices
// else: input = WETH, amount = gapEth
// 4. approve(input token -> VAULT, amount), then VAULT.bid(i, vaultBuysAsset, amount, minOut, "0x")
// minOut may be 0: the price is the oracle's adjusted by the premium, fixed for the blockPoll get_auction_state on an interval (every few minutes; the premium moves once a minute or so). Bid when auctionOpen is true, navReliable is true and premiumBps covers your gas and any cost of holding the other side.
If your agent framework supports the GBLIN share_skill_with_peer tool, you can pass this skill to peer agents. Referred activity is attributed on-chain via ERC-8021 Builder Code.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.