Legacy
Historical referenceLegacy rewards
Historical rewards and existing claim rights.
Historical reward accounting
Deposit
Keeper-funded USDT
Legacy
Historical referenceHistorical rewards and existing claim rights.
Historical reward accounting
Deposit
Keeper-funded USDT
Accumulate
Share by legacy weight
Claim
Existing reward balance
This page describes historical reward contracts. Topups do not add reward weight or create rewards. Existing claim rights remain at Legacy claims. The contract rules below are retained as a historical reference.
Legacy holders can claim funded USDT rewards according to their recorded weight. The trading-tax path below was part of the historical design; the project token and TaxSplitter are not deployed on mainnet. Do not infer live trading revenue from this diagram or the configured tax rates.
The project token is a four.meme TaxToken. The tax configuration is:
TaxSplitter receives the tax, swaps the tax token to USDT through PancakeSwap, sends half to the AI treasury, and deposits half into RewardDistributor.
The keeper can also deposit USDT directly into the distributor.
RewardDistributor uses a reward-per-weight accumulator.
rewardPerWeight += depositAmount * 1e18 / totalWeight
claimable = pendingRewards + weight * (rewardPerWeight - lastClaimed) / 1e18
weight is the wallet's aggregate weight. Each new pass adds 10,000. Existing NFTs keep their original weight.lastClaimed is the accumulator value at the last claim or weight change.pendingRewards stores rewards earned before a weight change.A new holder does not earn rewards from before their mint. The mint callback sets lastClaimed to the current accumulator.
Two holders:
The keeper deposits 10 USDT.
Rounding leaves a small amount of dust in the contract.
Open Legacy claims from the workspace sidebar. Connect the wallet that owns the historical entitlement, use the configured network, and keep BNB for claim gas. The claim transaction is separate from wallet sign-in.
If your claimable amount is below 1 USDT, the claim button stays disabled until it reaches the minimum.
The accumulator uses the total weight at the moment of each deposit. A wallet that mints just before a large deposit receives a share of that deposit.
The new holder does not earn rewards from before the mint, but the deposit itself is shared with all holders at deposit time.
This can dilute existing holders. Each additional $5 mint adds 1x weight, including repeated mints from the same wallet. Already accrued rewards are settled before weight increases; new weight does not earn past deposits.
The current testnet design has this behavior. A mainnet mitigation is still under review. Options include a weight snapshot per epoch, a time-weighted weight, or more frequent smaller deposits.
RewardDistributor:
KEEPER_ROLE.claim().claimable(address), totalDeposited(), totalClaimed(), unclaimed(), and solvent().The testnet distributor holds mock USDT. Rewards have no real value.
Testnet address: 0x1036250810800681542bfe17889b6641d91f7a49.
rewardPerWeight = 10e18 * 1e18 / 35,000 = 285,714,285,714,285,714,285,714,285,714,285
Alice claimable = 10,000 * rewardPerWeight / 1e18 = 2.857 USDT
Bob claimable = 25,000 * rewardPerWeight / 1e18 = 7.142 USDT