A vault that trades the floor, funded by its own token
HoodRally is a launchpad on Robinhood Chain. Its own token, $HOODRALLY, is launched on letscash.fun and set on the launchpad contract. Each strategy is a token pointed at one NFT collection, opened by the launchpad.
Contracts
| Contract | Address | Role | Key entry points |
|---|---|---|---|
| StrategyFactory | — | The launchpad. Deploys one token + one vault per strategy and keeps the registry. | createStrategy(), setPlatformToken() |
| StrategyToken | — | Fixed 1,000,000,000 supply ERC-20. Deliberately plain: no transfer tax, no privileged transfer path. | burn(), setSocials() |
| StrategyFeeHook | — | Uniswap v4 hook charging the configured buy/sell fee, always on the ETH side, and routing it to the vault. Its address encodes its permissions, so it is deployed with a mined CREATE2 salt. | beforeSwap(), afterSwap(), sweep() |
| StrategyLiquidityLocker | — | Holds every strategy's v4 position. Contains no code path that decreases liquidity and has no owner, so the lock is structural rather than a promise. | lock(), position() |
| StrategyRouter | — | A small, unprivileged v4 router this site trades through — a v4 swap must happen inside a PoolManager unlock, which a wallet cannot open on its own. | buy(), sell() |
| StrategyVault | — | Custody + accounting: ETH fee pool, NFT inventory, purchase prices, realized P&L, buybacks. | executeStrategy(), repriceAll(), settleSoldNFT(), runBuybacks() |
| StrategyVaultDeployer | — | Runs new StrategyVault(...) on the factory's behalf. It exists because inlining that creation bytecode pushed the factory past EIP-170's 24,576-byte limit. |
deploy() |
| StrategyTokenDeployer | — | The same, for the ERC-20. | deploy() |
| Uniswap v4 PoolManager | — | Not ours — the v4 singleton every strategy pool lives in. Note this is not the canonical cross-chain address; v4 was deployed separately here. | external |
| Seaport 1.6 | — | Not ours — the marketplace the vault buys and lists through. | external |
| StrategyExecutor | — | Shared keeper entry point. Holds nothing; batches calls into the vaults. | buyFloorNFT(), settleAndBuyback() |
The cycle
- Launch. The factory creates a Uniswap v4 pool, puts the whole supply in as single-sided liquidity, and locks the position. The pool opens at the top of the range, so the position is 100% token and the launch needs no ETH at all. It is an ordinary v4 pool: any v4 router can trade it immediately.
- Fees accrue. The pool's own LP fee is zero. The configured buy/sell fee is charged by the hook instead, always on the ETH side, and swept into the strategy vault. The token itself has no transfer tax and can never grow one.
- executeStrategy(). A keeper resolves the cheapest live listing on OpenSea and passes the Seaport order in. The vault checks the collection, the price cap and the fee pool, fills the order, and stores the purchase price.
- Listing. The vault calls Seaport.validate() as the offerer — a contract cannot sign, so the order is made valid on-chain — at purchase × (1 + markup).
- Repricing. The creator can cancel and re-validate the whole inventory at the current floor with one transaction.
- Settlement. When a listing fills, the proceeds are earmarked: they are excluded from the buying pool, and P&L is booked against the stored purchase price.
- Burn. 75% of the proceeds buy the strategy token back off its own v4 pool and burn it; 25% buys back $HOODRALLY and burns it. The split is a constant, decided once at settlement, so a leg that has to wait can never change the ratio.
What is fixed, and what is not
Chosen at creation
Only the collection (an ERC-721 deployed on Robinhood Chain), the name, ticker, image and links. Everything economic is fixed: 5% / 5% trade fee, +30% relist markup, 1,000,000,000 supply, 75/25 burn split.
After launch
Reprice the inventory to floor, set a per-NFT price cap, add or revoke keepers, set the marketplace fee split, update the links. The fee and the markup have no setter at all.
Not exclusive
A collection is not claimed by whoever indexes it first. Any number of strategies can target the same NFTs, each with its own token, pool, fees, markup and vault. They compete for the same floor and share nothing.
Nobody controls
The vault has no withdraw function: its ETH can only buy NFTs from the configured collection or fund the burns. The liquidity is locked the same way — the contract holding it simply has no code that can remove it, and no owner. There is no migration and no unlock.
