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 sendslaunchStockToken(
"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 sendslaunchStockToken(
"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.
This wallet is on another network. YieldRelay launches on BNB Chain.
Your basketnone 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.
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.
Setting
Value
Why
Buy tax
0%
Holding and accumulating is never penalised.
Sell tax
1%
The only thing that funds the basket. Capped at 10%.
Share of tax to the vault
100%
Anything less means less equity bought for holders.
Dividend token
resolved at launch
The basket does not exist yet, so a sentinel is passed and the factory substitutes the real address mid-launch.
Minimum balance for dividends
10,000
Keeps dust wallets out of the distribution.
Migrator
Uniswap V2
The only one BNB Chain accepts on this path. The other three revert.
Token address
ends in 7777
Required 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.
# 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.
Connect a wallet
YieldRelay never takes custody. It builds the transaction, your wallet signs it.