Term chosen
The weight is written once, at mint, and never moves again.
Picking 30, 90 or 180 days writes a weight of 10, 15 or 20 into the token itself. There is no second contract to stake into and no position to open: the weight is a field on the Zomi, and the Zomi is the bond.
Index rising
One index for the whole issue, moved by the reserve.
Whenever the reserve grows, the index rises by that growth divided by the total weight of every live Zomi. Each Zomi remembers the index it last settled at, so what it is owed is the distance between the two, times its weight.
pending = weight x (index - checkpoint)
weight = 10 | 15 | 20 by term
index += growth / totalWeight on every funding
claim allowed from mintedAt + term
Maturity
After the term, the coupon can be claimed at any time.
The claim pays BNB on BNB Smart Chain to the wallet holding the Zomi, and it costs the same gas whether ten Zomi exist or ten thousand: nothing is looped over, one subtraction settles the account. The weight does not step back down afterwards.
Transfer carries pending
What the token has earned travels with the token.
A Zomi is a plain ERC-721, so it moves wherever ERC-721s move, and the pending amount goes with it. That is why the price of a Zomi carries whatever it has already accrued, and why a buyer is buying a position and not just a picture.