2. Functions & Permissions
🔧 Smart Contract Functions & Permissions
“At MUY Token, investor actions are protected — and limited — by design.”
The MUY Token smart contract isn't just a token—it’s an automated system of investor rights, DAO power, and compliance logic. Below is a breakdown of the core functions and who is authorized to trigger them.
📘 Key Contract Functions
mintTokens()
Admin (after KYC)
Issues MUY Tokens to verified wallets
lockTokens()
Contract (auto)
Applies 12-month vesting for new tokens
releaseTokens()
Contract (auto)
Unlocks tokens after lockup expires
distributeIncome()
Admin (quarterly)
Distributes 85% of profits to holders
buyBackTokens()
DAO via vote
Executes token repurchase from market
castVote()
DAO Builders
Submits or votes on proposals
upgradeContract()
DAO (via quorum)
Initiates contract upgrade via proxy
pauseContract()
3-of-5 multisig
Emergency stop for safety/bugs
🧠 Admin Permissions
Administrative roles are minimal and transparent.
Admin
Mint, whitelist wallets, initiate distributions
Only used during onboarding or payouts
DAO Builders
Governance, voting, buyback approvals
Must meet $50K+ threshold
Multisig Wallet
Emergency pause, treasury actions
3-of-5 signer logic
Contract Owner
Cannot access investor funds or overwrite ledger
Only upgrade permissions via DAO
💡 We believe in “least privilege” — everyone has access only to what they must.
🔐 Wallet Whitelisting
All token transfers and voting powers are gated by:
✅ Wallet must pass KYC/AML
✅ Wallet must be whitelisted and registered
✅ No cold storage or centralized exchange wallets allowed
✅ Wallets can be updated via secure DAO process
💼 Real-Life Flow
Here’s a practical example of how the functions work:
Investor signs TSA
KYC is approved via SumSub
Admin calls
mintTokens()
to whitelist + issue tokenslockTokens()
activates 12-month vestingQuarterly,
distributeIncome()
runs via DAOAfter 12 months,
releaseTokens()
allows transferDAO can call
buyBackTokens()
to offer exits
All functions are transparently logged on PolygonScan.
🛠 Example Solidity Snippet
function mintTokens(address investor, uint amount) public onlyAdmin {
require(whitelist[investor], "Wallet not whitelisted");
_mint(investor, amount);
lock[investor] = block.timestamp + 365 days;
}
Last updated