All notable changes to the StellarTip contract will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
init(admin, fee_recipient, fee_bps)– one-time contract initializationupdate_profile()– allows creators to update their display name and biounregister()– allows creators to delete their profile when balances are zeroget_tips(start, limit)– paginated function for fetching tip history in rangesget_profile_by_username()– convenience view function to resolve username → full profileget_all_tokens()– list all tokens a creator has received tips inget_contract_version()– returnsCONTRACT_VERSIONfor client compatibilityget_admin(),is_paused(),get_fee_percentage(),get_fee_recipient()– admin view functionsset_admin(),pause(),unpause(),set_fee_percentage(),set_fee_recipient()– admin controls- Input validation: display_name max 64 chars, bio max 256 chars
- Contract version constant (
CONTRACT_VERSION = 1) - Platform fee mechanism: configurable basis-points fee deducted from each tip
- Emergency pause mechanism: admin can pause and unpause all state-changing functions
- Creator verification in
withdraw()to prevent non-creators from withdrawing - Persistent storage TTL extension for all long-lived data entries
TipCountand tip records moved to persistent storage for durabilityCreatorTokenstracking to support multi-token balance checking on unregister- CI: format check, clippy lints, and WASM optimization step
- Dependabot configuration for automated dependency updates
- Issue templates (bug report and feature request)
- Pull request template
- CODEOWNERS file
.editorconfigfor consistent editor settings.rustfmt.tomlfor consistent code formattingrust-toolchain.tomlto pin the Rust toolchainCONTRIBUTING.mdwith development workflowLICENSE(MIT)
register()now requires the contract to be initialized and not pausedtip()now deducts a platform fee (if configured) and forwards it to the fee recipientwithdraw()now verifies the caller is a registered creator before processingtip()andwithdraw()now extend the TTL of persistent storage entries they touch- CI workflow now builds for
wasm32-unknown-unknowntarget - Deploy workflow includes WASM optimization via
soroban contract optimize - Deploy workflow correctly handles pre-release versions
Makefileexpanded withfmt,lint,check, andwasm-buildtargetsdeploy.shimproved with better validation and deploy identity supportREADME.mdupdated with new API documentation and architecture details
- Issue #38: Optimize
withdraw()token removal fromCreatorTokens- Replaced the
Vec<Address>underlyingDataKey::CreatorTokenswith a host-backedMap<Address, ()>so membership tests, inserts, and removals run in O(log n) instead of the previous O(n) linear scan. tip(),withdraw(),unregister(), andget_all_tokens()updated to use theMapAPI; the public contract surface is unchanged.- Added three multi-token tests (12 / 10 / 11 tokens) covering full
out-of-order withdrawal, partial withdrawal, and
unregisterafter mass withdrawal.
- Replaced the
- Issue #19: Persistent Storage TTL Not Extended — Risk of Data Loss
- All persistent storage reads and writes now call
extend_ttl TipCountmoved from instance to persistent storage for durability
- All persistent storage reads and writes now call
- Issue #18: Pause / Emergency Stop Mechanism
- Added
pause(),unpause(), andis_paused() - All state-changing functions check
Pausedflag before executing
- Added
- Issue #17: Platform Fee Mechanism
- Added configurable fee basis points and fee recipient
- Fee is deducted from each tip and sent to the recipient immediately
- Issue #20: Profile Updates & Account Deletion
- Added
update_profile()for in-place profile edits - Added
unregister()that requires zero balance across all tokens
- Added
- CI build step previously did not target wasm32, causing WASM artifact verification to fail
- Whitespace and formatting in
lib.rscleaned up - GitHub release concurrency group added to prevent race conditions on deploy
- Initial release of StellarTip smart contract
- Creator registration with unique usernames
- Multi-token tipping with on-chain history
- Self-custody withdrawal for creators
- View functions for profiles, balances, and tip history
- Soroban event emission for all state changes
- Unit test suite with 12 tests
- CI pipeline with test and WASM verification
- Deploy pipeline via GitHub Actions