A minimal on-chain tender offer contract. The "Offeror" proposes to buy up to maxShares at a certain price per share. Shareholders can tender their shares, and after the tender offer ends, the contract finalizes the purchase if conditions are met.
Allows a shareholder to tender shares. In a real scenario, they'd transfer those shares into escrow or mark them as "tendered" in shareRegistry. For demonstration, we do a simpler approach: we record how many shares they've pledged to tender.
function tenderShares(uint96 quantity) external;
finalizeTender
Finalizes the tender offer, calculates total accepted, ensures it doesn't exceed maxShares, pays out, and updates ownership. For demonstration, we skip real payment logic or partial allocation if oversubscribed.