SOZIA Token is a fully decentralized ERC20 token with linear vesting and multi-signature governance. Ownership can be safely renounced, and all critical actions (token claims, operator management, approval threshold updates) are controlled via a multi-sig proposal system.
- Features
- Getting Started
- Deployment
- Proposing a Token Claim
- Approving a Proposal
- Executing a Proposal
- Operator Management via Multi-Sig
- Monitoring & Dashboard
- Post-Deployment Best Practices
- Key Takeaway
- License
- ERC20 token with linear vesting for Team, Advisors, Community, and Company buckets.
- Multi-sig governance for claims, operator management, and threshold updates.
- Ownership can be renounced safely, making the contract fully decentralized.
- Dashboard-ready helper functions for proposals, approvals, and claimable balances.
companyWallet→ Company treasury addressteamWallet→ Team wallet addressadvisoryWallet→ Advisors wallet addresscommunityWallet→ Community wallet address_initialOperators→ List of trusted operator addresses (3–5 recommended)_initialThreshold→ Minimum number of operator approvals required (e.g., 2 out of 3)
Example:
companyWallet = 0xAAA...AAA
teamWallet = 0xBBB...BBB
advisoryWallet = 0xCCC...CCC
communityWallet = 0xDDD...DDD
_initialOperators = [0x111..., 0x222..., 0x333...]
_initialThreshold = 2
uint256 proposalId = proposeClaim(TokenBucket.TEAM);uint256 proposalId = proposeClaimAll();- Captures all claimable tokens at the time of proposal.
- Skips buckets with 0 claimable tokens.
Operators approve proposals:
approveProposal(proposalId);- Each operator can approve once per proposal.
- Once approvals ≥
approvalThreshold, the proposal executes automatically.
- Normally executes automatically when threshold approvals are reached.
- Manual execution (internal):
_executeProposal(proposalId);uint256 proposalId = proposeAddOperator(newOperatorAddress);uint256 proposalId = proposeRemoveOperator(existingOperatorAddress);uint256 proposalId = proposeUpdateThreshold(newThreshold);- Threshold must be >0 and ≤ current number of operators.
- Executes after reaching threshold approvals.
- View Pending Proposals:
uint256[] memory pending = getPendingProposals();- Check Proposal Details:
(proposalType, buckets, amounts, wallets, targetOperator, newThreshold, approvals, executed) = getProposalSummary(proposalId);- Check Operator Approvals:
bool approved = isApprovedBy(proposalId, operatorAddress);- Get Operators and Threshold:
address[] memory ops = getOperators();
uint256 threshold = approvalThreshold;- Test on a testnet (Goerli, Mumbai) before mainnet deployment.
- Renounce ownership only after verifying operators and threshold.
- Ensure threshold is high enough to prevent deadlocks, but not too high to block approvals.
- Keep operator keys secure, ideally using multi-sig wallets.
- Use a frontend dashboard for transparency of proposals, approvals, and claimable balances.
After renouncing ownership, all actions are controlled by multi-sig proposals. There is no centralized owner, making SOZIA Token fully trustless and decentralized.