-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Labels
Stellar WaveIssues in the Stellar wave programIssues in the Stellar wave programgood first issueGood for newcomersGood for newcomerssoroban-contract
Description
Description
Develop a smart contract that enables tokenization of physical assets, fractional ownership through fungible tokens, and secure trading of ownership shares on the Stellar network.
Requirements
Contract State:
- Tokenized assets mapping (asset_id → TokenizedAsset)
- Token balances mapping (asset_id → owner_address → token_balance)
- Token metadata mapping (asset_id → TokenMetadata)
- Total supply per asset
- Ownership threshold requirements
- Trading permissions
- Dividend distribution records
- Asset registry contract address
TokenizedAsset Data Structure:
- Original asset ID (reference to registry)
- Total token supply
- Token symbol (unique per asset)
- Token decimals
- Minimum ownership requirement (for voting rights)
- Token holders count
- Total tokens in circulation
- Locked tokens (non-transferable)
- Tokenization timestamp
- Tokenizer address
- Asset valuation (in stroops)
- Revenue sharing enabled flag
TokenMetadata Data Structure:
- Asset name
- Token description
- Underlying asset type
- IPFS metadata URI
- Legal documentation hash
- Valuation report hash
- Regulatory compliance status
- Geographic restrictions
- Transfer restrictions
- Accredited investor requirement
Ownership Record:
- Owner address
- Token balance
- Acquisition timestamp
- Average purchase price
- Voting power
- Dividend entitlement
- Lock period (if applicable)
- Ownership percentage
Core Functions:
- Initialize contract with asset registry address
- Tokenize asset (convert physical asset to tokens)
- Mint additional tokens (for asset appreciation)
- Burn tokens (for asset depreciation or buyback)
- Transfer tokens (fractional ownership transfer)
- Get token balance for owner
- Get all token holders for asset
- Calculate ownership percentage
- Lock tokens (prevent transfer for period)
- Unlock tokens
- Distribute dividends/revenue to token holders
- Vote on asset decisions (if voting enabled)
- Update asset valuation
- Detokenize asset (require majority ownership)
- Set transfer restrictions
- Whitelist addresses (for restricted tokens)
Access Control:
- Contract admin: Overall contract management
- Asset tokenizer: Original asset owner who tokenized
- Token holders: Own fractional shares
- Majority holders: Can influence asset decisions
- Whitelisted addresses: Can bypass transfer restrictions
Events to Emit:
- AssetTokenized (asset_id, total_supply, tokenizer, timestamp)
- TokensMinted (asset_id, amount, minted_by, timestamp)
- TokensBurned (asset_id, amount, burned_by, timestamp)
- TokensTransferred (asset_id, from, to, amount, timestamp)
- TokensLocked (asset_id, owner, amount, lock_period, timestamp)
- TokensUnlocked (asset_id, owner, amount, timestamp)
- DividendDistributed (asset_id, total_amount, timestamp)
- ValuationUpdated (asset_id, old_value, new_value, timestamp)
- AssetDetokenized (asset_id, final_owner, timestamp)
- VoteCast (asset_id, voter, voting_power, timestamp)
Validation Rules:
- Only asset owner can tokenize asset
- Asset must exist in registry and be verified
- Asset cannot be already tokenized
- Total supply must be greater than zero
- Cannot transfer more tokens than balance
- Cannot transfer to zero address
- Must meet minimum ownership for voting
- Locked tokens cannot be transferred
- Dividend distribution requires sufficient contract balance
- Detokenization requires majority token ownership (>50%)
- Transfer restrictions must be enforced
Business Logic:
- Calculate proportional dividend distribution based on token holdings
- Implement voting power weighted by token ownership
- Support time-locked tokens for vesting schedules
- Track token holder count efficiently
- Calculate and update ownership percentages automatically
- Implement buyback mechanism for token redemption
- Support partial detokenization (reduce supply)
- Handle token splits and merges
- Implement transfer restrictions (geographic, accredited investor)
- Support secondary market trading
Tokenization Features:
- Full tokenization: 100% of asset converted to tokens
- Partial tokenization: Tokenize percentage of asset value
- Multi-tier tokens: Different classes with different rights
- Revenue-sharing tokens: Auto-distribute income to holders
- Governance tokens: Voting rights on asset decisions
- Redeemable tokens: Can be exchanged for underlying asset
Dividend Distribution:
- Calculate each holder's share based on token balance
- Support batch distribution to all holders
- Track unclaimed dividends
- Allow holders to claim dividends
- Support different distribution methods (proportional, fixed)
Voting Mechanism:
- One token = one vote (or weighted voting)
- Minimum token threshold for voting eligibility
- Quorum requirements for decisions
- Time-limited voting periods
- Delegated voting support
Technical Specifications
- Follow Stellar Asset Contract (SAC) standards where applicable
- Implement efficient token balance tracking
- Use batch operations for dividend distribution
- Optimize gas costs for holder enumeration
- Implement safe math for token calculations
- Support cross-contract calls to asset registry
- Use events for indexing token transfers
- Implement reentrancy protection for transfers
Acceptance Criteria
- Assets can be tokenized with specified supply
- Token transfers work correctly and update balances
- Token holders can be enumerated efficiently
- Ownership percentages calculate correctly
- Dividend distribution works proportionally
- Locked tokens cannot be transferred
- Voting mechanism works with token-weighted power
- Detokenization requires majority ownership
- Transfer restrictions are enforced
- All events are emitted correctly
Metadata
Metadata
Assignees
Labels
Stellar WaveIssues in the Stellar wave programIssues in the Stellar wave programgood first issueGood for newcomersGood for newcomerssoroban-contract