Hoodquidity: liquidity campaigns for Robinhood Chain stock token markets
Full build: Vite/React acid-terminal frontend (BEARER design system, Panchang/Sentient/Fragment Mono, neon layer, palette audit script), HoodquidityVaults Foundry contracts (single+dual deposits via Chainlink-style feeds, hybrid exit, 10% platform fee, boost, Genesis LP), Reown AppKit wallet connect with Robinhood Chain testnet (46630), live data from Dexscreener and onchain reads, partner portal, design-sync setup for claude.ai/design. Deploy: static via Forgejo Actions platform, BUILD_DIR=apps/web/dist (.env). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
commit
dba2811447
1194 changed files with 206422 additions and 0 deletions
71
packages/contracts/script/Deploy.s.sol
Normal file
71
packages/contracts/script/Deploy.s.sol
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.26;
|
||||
|
||||
import {Script, console} from "forge-std/Script.sol";
|
||||
import {HoodquidityVaults} from "../src/HoodquidityVaults.sol";
|
||||
import {MockERC20} from "../src/MockERC20.sol";
|
||||
import {MockV3Aggregator} from "../src/MockV3Aggregator.sol";
|
||||
|
||||
/// @notice Deploys the demo environment: test USD, five stock tokens with
|
||||
/// Chainlink-style price feeds and five liquidity campaigns matching
|
||||
/// the launch set.
|
||||
contract Deploy is Script {
|
||||
struct Market {
|
||||
string name;
|
||||
string symbol;
|
||||
uint128 targetDepth;
|
||||
uint128 rewardBudget;
|
||||
uint64 duration;
|
||||
int256 price; // 8 decimals, seeded from live quotes
|
||||
}
|
||||
|
||||
function run() external {
|
||||
uint256 pk = vm.envUint("PRIVATE_KEY");
|
||||
address deployer = vm.addr(pk);
|
||||
vm.startBroadcast(pk);
|
||||
|
||||
MockERC20 usd = new MockERC20("Hood USD", "hUSD", 6, 10_000e6);
|
||||
HoodquidityVaults vaults = new HoodquidityVaults(deployer);
|
||||
|
||||
Market[5] memory markets = [
|
||||
Market("NVIDIA Stock Token", "NVDA", 1_000_000e6, 50_000e6, 14 days, 208e8),
|
||||
Market("Tesla Stock Token", "TSLA", 750_000e6, 40_000e6, 14 days, 400e8),
|
||||
Market("Apple Stock Token", "AAPL", 500_000e6, 25_000e6, 21 days, 315e8),
|
||||
Market("SPDR S&P 500 Token", "SPY", 2_000_000e6, 60_000e6, 30 days, 756e8),
|
||||
Market("AI Basket Token", "AIB", 400_000e6, 35_000e6, 14 days, 294e8)
|
||||
];
|
||||
|
||||
uint64 start = uint64(block.timestamp + 10 minutes);
|
||||
uint128 totalBudget = 0;
|
||||
for (uint256 i = 0; i < markets.length; i++) {
|
||||
totalBudget += markets[i].rewardBudget;
|
||||
}
|
||||
usd.mint(deployer, totalBudget);
|
||||
usd.approve(address(vaults), totalBudget);
|
||||
|
||||
console.log("hUSD:", address(usd));
|
||||
console.log("HoodquidityVaults:", address(vaults));
|
||||
|
||||
for (uint256 i = 0; i < markets.length; i++) {
|
||||
MockERC20 stock = new MockERC20(markets[i].name, markets[i].symbol, 18, 10e18);
|
||||
MockV3Aggregator feed = new MockV3Aggregator(
|
||||
8, string.concat(markets[i].symbol, " / USD"), markets[i].price
|
||||
);
|
||||
uint256 id = vaults.createCampaign(
|
||||
address(usd),
|
||||
address(stock),
|
||||
address(feed),
|
||||
start,
|
||||
start + markets[i].duration,
|
||||
1 days, // boost window
|
||||
15_000, // 1.5x early boost
|
||||
markets[i].targetDepth,
|
||||
markets[i].rewardBudget
|
||||
);
|
||||
console.log(markets[i].symbol, address(stock), "campaign", id);
|
||||
console.log(string.concat(markets[i].symbol, " feed:"), address(feed));
|
||||
}
|
||||
|
||||
vm.stopBroadcast();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue