Contracts
Two small contracts on BNB Smart Chain. Everything else is Flap's.
| Contract | Address |
|---|---|
| HostLauncher | 0x3a0B433b5D9CA0547289271Ba0fec540E70B96Ca |
| HostAgent treasury | 0x9b5e4f5d78e70311bb3415e9eba099b6981b39d4 |
| Flap Portal | 0xe2cE6ab80874Fa9Fa2aAE65D277Dd6B8e65C9De0 |
| Flap Tax Token V3 impl | 0x024f18294970B5c76c0691b87f138A0317156422 |
| $HOST | not launched yet |
HostLauncher
struct LaunchParams {
string name;
string symbol;
string meta; // Flap metadata CID
bytes32 salt; // mined so the token ends in 7777
address expected; // predicted token; reverts on mismatch
string model; // permanent model id
bytes32 personaHash; // keccak256(persona + goal)
uint256 minDevOut; // dev-buy slippage floor
}
function launch(LaunchParams calldata p) external payable
returns (address token, address vault);
event Launched(address indexed token, address indexed vault, address indexed creator,
string model, bytes32 personaHash, string meta, uint256 devBuyBnb);- Immutables:
portal,treasury,taxBps. No owner, no pause, no upgrade. - Deploys a
HostFeeVault, callsPortal.newTokenV6withbeneficiary = vault,mktBps = 10000,commissionReceiver = treasury, token versionTOKEN_TAXED_V3, migrator V2 (PancakeSwap V2). - Dev buy uses
Portal.swapExactInputwith native input and forwards the output tomsg.sender.
HostFeeVault
address public immutable treasury;
address public immutable portal;
address public immutable launcher;
address public token; // set once by the launcher
receive() external payable; // tax dispatch lands here
function claim() external returns (uint256 bnb); // anyone; Portal LP-fee claim + push all BNB to treasury
function sweep(address erc20) external; // anyone; push any ERC-20 to treasury
event FeesReceived(address indexed from, uint256 amount);
event Claimed(uint256 bnb, uint256 lpBnb, uint256 lpTokens);
event LpClaimFailed(bytes reason);- The only way value leaves the vault is to
treasury. There is no other address anywhere in the contract. claim()tries the Portal's revenue-shareclaim(token)first (only the beneficiary may call it) and records a failure event when nothing is claimable, then forwards the balance.- The ledger attributes each
Claimedevent to the coin bound to that vault.
How fees reach the vault
- On the bonding curve the Portal takes the tax in BNB on every trade and forwards it as WBNB to the coin's tax processor.
- Once the processor holds more than Flap's dispatch threshold, anyone may call
dispatch(); it unwraps and pays the beneficiary (the vault) and the commission receiver (the treasury). The HostAgent worker calls it. - After graduation the token taxes transfers against the PancakeSwap pool and liquidates through the same processor to the same beneficiary.
- The worker then calls
vault.claim()and books the amount to the coin.
Verification
Source for both contracts ships in the repository under contracts/ with Foundry tests that run against a BNB Chain fork and the live Portal. The deployed bytecode is verified on BscScan.