0
BNB Chain

Launch a coin that pays its holders in real stock.

Flap runs a vault on BNB Chain that turns a token's sell tax into tokenized equities and pays them out to holders. The machinery is real and permissionless, but the entry point is a 27-field struct with four enums and two opaque byte blobs. An agent wallet that can only emit a simple typed call cannot build it. YieldRelay is the adapter that closes that gap.

one call
// what your agent actually sends
launchStockToken(
  "Dividend Dog", "DDOG",
  salt,
  [NVDAon, MSFTon, SPYon],
  "DDOGBSKT"
)

What it is

  • A relay contract. Takes primitive arguments, fills in the configuration a stocks vault needs, and forwards the launch. Immutable, ownerless, holds nothing.
  • An MCP server. Resolves tickers to addresses, grinds the vanity salt the launch requires, and hands back an unsigned transaction. It never holds a key and never signs.
  • A dry run before you spend. Every launch is checked against a node and against your balance first, so a bad basket or a thin wallet fails before anything is signed.
  • No custody, anywhere. The vault is deployed by Flap's factory and has no owner and no creator rights, which is what makes it safe to launch through a relay at all.

What it is not

  • Not a custodian. Nothing in the payout path is controlled by us.
  • Not a broker. The equities are Ondo's tokenized shares, already trading on BNB Chain.
  • Not a signer. The MCP server returns calldata; your wallet's limits and prompts stay in force.
  • Not an oracle. Pricing comes from the vault's own oracle, not from anything we run.
one call
// what your agent actually sends
launchStockToken(
  "Dividend Dog",
  "DDOG",
  salt,
  [NVDAon, MSFTon, SPYon],
  "DDOGBSKT"
)

// what Flap requires without it
// newTokenV6WithVault(struct{ 27 fields,
// 4 enums, 2 opaque bytes blobs })
Relay contract
MCP server
Vanity salt mining
Unsigned transactions
Tested on mainnet state
How the payout works
Five steps, none of which we are part of. Every one runs on contracts Flap deployed.
01

Someone sells the token

The sell tax is taken in BNB and sent to the token's vault. Buys are never taxed, so holding and accumulating is not penalised.

02

A keeper sells stock into the vault

Any wallet may sell a listed equity to the vault at oracle price plus a two percent premium, taking that BNB. This is permissionless. There is no privileged keeper and no keeper we operate.

03

The equity is minted into a basket

The stock the keeper sold goes into the vault's own basket token, an ERC-20 that wraps the equities chosen when the token launched.

04

Basket shares reach the dividend contract

On a randomised one to six hour cadence, accumulated basket shares are deposited into the token's dividend contract and credited across holders.

05

Holders claim, and get stock

Anyone above the minimum balance claims from the dividend contract. The basket unwraps on transfer, so what lands in the wallet is the underlying tokenized equities.

Launch one
Pick what your holders get paid in, then launch from your own wallet. The list is read from the vault factory on BNB Chain when this page loads, not from a list we keep. A basket holds up to ten.
Reading chain
Your basket none selected

This page builds the transaction in your browser and your wallet signs it. It talks to Flap directly, so nothing here depends on our relay contract. The relay exists for agent wallets that cannot encode the launch themselves.

What the relay pins
Mirrored from a stocks-vault token already trading on BNB Chain, then asserted in the tests so a change upstream fails loudly instead of quietly.
SettingValueWhy
Buy tax0%Holding and accumulating is never penalised.
Sell tax1%The only thing that funds the basket. Capped at 10%.
Share of tax to the vault100%Anything less means less equity bought for holders.
Dividend tokenresolved at launchThe basket does not exist yet, so a sentinel is passed and the factory substitutes the real address mid-launch.
Minimum balance for dividends10,000Keeps dust wallets out of the distribution.
MigratorUniswap V2The only one BNB Chain accepts on this path. The other three revert.
Token addressends in 7777Required by the launchpad, so the salt is ground off-chain before the call.
Point your agent at it
and launch.
The server speaks MCP over stdio, so anything that reads MCP can drive it: Claude Code, Cursor, or your own runner. Nothing is broadcast without your wallet.
claude_desktop_config.json
{
  "mcpServers": {
    "yieldrelay": {
      "command": "node",
      "args": ["/path/to/yieldrelay/mcp/server.js"],
      "env": { "YIELDRELAY_RELAY": "0x..." }
    }
  }
}

// tools: list_stocks, plan_launch, inspect_token,
//        check_dividends, relay_status
terminal
# the equities a basket can hold, read live
npx yieldrelay stocks

# build a launch without sending anything
npx yieldrelay plan --name "Dividend Dog" \
  --symbol DDOG --stocks NVDA,MSFT --buy 0.05

# read back what a token really is, on chain
npx yieldrelay inspect 0x...
YieldRelay.sol
function launchStockToken(
    string calldata name,
    string calldata symbol,
    bytes32 salt,
    address[] calldata stocks,
    string calldata basketSymbol
) external payable returns (address token);

// Any value sent is used as the first buy.
// The tokens and any unspent BNB are forwarded
// back to you in the same transaction.