fix(contracts): fuzz the real burn entrypoint, not a reimplementation - #1137
Merged
Merged
Conversation
…Favourorg#1098) fuzz_burn.rs previously reimplemented burn's arithmetic inline via saturating_sub, never calling the actual TokenFactory::burn entrypoint — so a real bug in lib.rs (wrong operator, missing checked_ call) could silently diverge from the fuzz author's model while the target stayed green. No target imported soroban_sdk or TokenFactory at all, since the contract crate wasn't even a fuzz dependency. Adds contracts/token-factory/testutils-lib, a thin rlib-only crate that compiles the contract's own src/lib.rs so it can be depended on as an ordinary library. This is a separate crate rather than adding "rlib" to the contract's own crate-type, because doing that directly breaks the production WASM build's fat-LTO size optimization (measured: ~42 KB -> ~68 KB, over the 64 KB budget in scripts/check-wasm-size.mjs) — verified locally; the real contract package keeps crate-type = ["cdylib"] only. Adds TokenFactory::fuzz_seed_token, a #[cfg(feature = "testutils")]-only plain associated function (not a #[contractimpl] entrypoint, so it's compiled out of the production build and invisible on-chain) that registers a token in factory storage exactly as create_token would have, using a real Stellar Asset Contract as the token — the same bypass the crate's own seed_token test helper uses, since no real token WASM is available to install at a token_wasm_hash in a native test/fuzz environment (see mod bench's note in lib.rs). fuzz_burn.rs now drives the real TokenFactory::burn entrypoint via the generated TokenFactoryClient against a live soroban_sdk::testutils Env, asserting each result against an independently-computed oracle rather than reimplementing burn's own logic. Verified locally: 86k+ clean runs against the real contract with zero false positives, and a deliberately injected regression (weakening the amount > balance check) is caught within seconds — the underlying token rejects the resulting over-balance burn and the target panics on the unexpected result. Scope: this covers fuzz_burn.rs, the simplest of the flagged targets. fuzz_fee_arithmetic.rs (and auditing fuzz_mint_tokens.rs/ fuzz_set_metadata.rs for the same pattern, plus new targets for create_tokens_batch/distribute_fee/migrate) are left for follow-up — each needs live fee-split registration and multi-recipient balance tracking, a substantially larger harness than burn's single-token case. Verified locally (no CI-only steps): cargo fmt --check, cargo test (184 passed), cargo clippy -- -D warnings, cargo build --target wasm32v1-none --release (WASM size unchanged at 41,670 bytes), all other fuzz targets still build, and scripts/check-abi-doc-drift.sh / check-validation-drift.sh / check-vercel-cron.mjs all pass.
|
🎉 This PR is included in version 1.5.9 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
github-actions Bot
pushed a commit
to waterWang/Stellar-forge
that referenced
this pull request
Aug 24, 2026
# [1.5.0](v1.4.1...v1.5.0) (2026-08-24) ### Bug Fixes * align frontend token validation with contract (name ≤ 32 UTF-8 bytes, remove ASCII-only restriction) ([Favourorg#1125](https://github.com/waterWang/Stellar-forge/issues/1125)) ([cefa9b9](cefa9b9)) * **api:** add rate limiting to auth challenge endpoints ([Favourorg#1144](https://github.com/waterWang/Stellar-forge/issues/1144)) ([600e8a0](600e8a0)), closes [Favourorg#1101](https://github.com/waterWang/Stellar-forge/issues/1101) * **api:** remove clientIp() dead code with inverted XFF parsing (audit [Favourorg#26](https://github.com/waterWang/Stellar-forge/issues/26)) ([Favourorg#1129](https://github.com/waterWang/Stellar-forge/issues/1129)) ([fa1a888](fa1a888)), closes [Favourorg#1101](https://github.com/waterWang/Stellar-forge/issues/1101) * **api:** sanitize lastError in health/indexer to avoid leaking internal error details ([Favourorg#1143](https://github.com/waterWang/Stellar-forge/issues/1143)) ([c51d179](c51d179)), closes [Favourorg#1103](https://github.com/waterWang/Stellar-forge/issues/1103) * **api:** store wallet-auth challenges in Vercel KV (Closes [Favourorg#1091](https://github.com/waterWang/Stellar-forge/issues/1091)) ([Favourorg#1132](https://github.com/waterWang/Stellar-forge/issues/1132)) ([62941bb](62941bb)) * **contracts:** enforce MAX_BATCH_SIZE cap in create_tokens_batch (Closes [Favourorg#1100](https://github.com/waterWang/Stellar-forge/issues/1100)) ([Favourorg#1135](https://github.com/waterWang/Stellar-forge/issues/1135)) ([2ba33e5](2ba33e5)) * **contracts:** fuzz the real burn entrypoint, not a reimplementation ([Favourorg#1098](https://github.com/waterWang/Stellar-forge/issues/1098)) ([Favourorg#1137](https://github.com/waterWang/Stellar-forge/issues/1137)) ([be8a342](be8a342)) * **explorer:** snapshot tokenCount once per session to prevent pagination drift ([Favourorg#1126](https://github.com/waterWang/Stellar-forge/issues/1126)) ([a27f77b](a27f77b)) * **infra:** consolidate vercel.json security headers (Closes [Favourorg#1104](https://github.com/waterWang/Stellar-forge/issues/1104)) ([Favourorg#1134](https://github.com/waterWang/Stellar-forge/issues/1134)) ([fc64bea](fc64bea)) * **infra:** schedule the indexer cron in vercel.json (Closes [Favourorg#1090](https://github.com/waterWang/Stellar-forge/issues/1090)) ([Favourorg#1130](https://github.com/waterWang/Stellar-forge/issues/1130)) ([288d5f3](288d5f3)), closes [Favourorg#1123](https://github.com/waterWang/Stellar-forge/issues/1123) [Favourorg#1124](https://github.com/waterWang/Stellar-forge/issues/1124) [Favourorg#1125](https://github.com/waterWang/Stellar-forge/issues/1125) [Favourorg#1126](https://github.com/waterWang/Stellar-forge/issues/1126) [Favourorg#1126](https://github.com/waterWang/Stellar-forge/issues/1126) [Favourorg#1126](https://github.com/waterWang/Stellar-forge/issues/1126) [Favourorg#1121](https://github.com/waterWang/Stellar-forge/issues/1121) [Favourorg#1121](https://github.com/waterWang/Stellar-forge/issues/1121) * isolate per-recipient fee-split transfer failures from aborting the call ([Favourorg#1136](https://github.com/waterWang/Stellar-forge/issues/1136)) ([6e68f0d](6e68f0d)) * reclaim orphaned IPFS pins on failed set_metadata (Closes [Favourorg#1096](https://github.com/waterWang/Stellar-forge/issues/1096)) ([Favourorg#1146](https://github.com/waterWang/Stellar-forge/issues/1146)) ([d845880](d845880)) * relabel TokenDetail Admin field to 'Deployed by' (Closes [Favourorg#1109](https://github.com/waterWang/Stellar-forge/issues/1109)) ([Favourorg#1119](https://github.com/waterWang/Stellar-forge/issues/1119)) ([5d5df07](5d5df07)) * remove 'unsafe-inline' from CSP style-src (Closes [Favourorg#1105](https://github.com/waterWang/Stellar-forge/issues/1105)) ([Favourorg#1123](https://github.com/waterWang/Stellar-forge/issues/1123)) ([838129c](838129c)) * **specs:** resolve spec stubs and enforce kiro spec documentation ([Favourorg#1117](https://github.com/waterWang/Stellar-forge/issues/1117)) ([Favourorg#1120](https://github.com/waterWang/Stellar-forge/issues/1120)) ([0875cd2](0875cd2)), closes [Favourorg#1099](https://github.com/waterWang/Stellar-forge/issues/1099) [Favourorg#1107](https://github.com/waterWang/Stellar-forge/issues/1107) [Favourorg#1108](https://github.com/waterWang/Stellar-forge/issues/1108) [Favourorg#1113](https://github.com/waterWang/Stellar-forge/issues/1113) [Favourorg#1118](https://github.com/waterWang/Stellar-forge/issues/1118) ### Features * add client-side CID verification for metadata integrity ([Favourorg#1139](https://github.com/waterWang/Stellar-forge/issues/1139)) ([82e9a1b](82e9a1b)) * **api:** persist contract events in the indexer store (supersedes [Favourorg#1138](https://github.com/waterWang/Stellar-forge/issues/1138)) ([Favourorg#1154](https://github.com/waterWang/Stellar-forge/issues/1154)) ([45ad5bc](45ad5bc)) * **ci:** add access-control documentation drift check ([Favourorg#1112](https://github.com/waterWang/Stellar-forge/issues/1112)) ([Favourorg#1148](https://github.com/waterWang/Stellar-forge/issues/1148)) ([7b41cfd](7b41cfd)) * show pre-signature fee recipient breakdown and batch total (Closes [Favourorg#1108](https://github.com/waterWang/Stellar-forge/issues/1108)) ([Favourorg#1124](https://github.com/waterWang/Stellar-forge/issues/1124)) ([f983539](f983539))
Ejirowebfi
added a commit
that referenced
this pull request
Aug 25, 2026
…#1118) (#1170) * chore(release): 1.0.0 [skip ci] # 1.0.0 (2026-08-24) ### Bug Fixes * [#741](https://github.com/ignaciojulio/Stellar-forge/issues/741) AdminPanel restricted to admin address only ([7b2b8c2](https://github.com/ignaciojulio/Stellar-forge/commit/7b2b8c23d40955b39ea300acea24cfeef851d32d)) * **#1024,#1023:** fee-split edge cases and metadata URI validation ([#1036](https://github.com/ignaciojulio/Stellar-forge/issues/1036)) ([e3174cb](https://github.com/ignaciojulio/Stellar-forge/commit/e3174cb0bde98950c3bf7be8b97beb16a8cd8113)), closes [#1024](https://github.com/ignaciojulio/Stellar-forge/issues/1024) [#1023](https://github.com/ignaciojulio/Stellar-forge/issues/1023) [#1024](https://github.com/ignaciojulio/Stellar-forge/issues/1024) [#1023](https://github.com/ignaciojulio/Stellar-forge/issues/1023) * **#1024,#1023:** fee-split edge cases and metadata URI validation ([#1037](https://github.com/ignaciojulio/Stellar-forge/issues/1037)) ([116d025](https://github.com/ignaciojulio/Stellar-forge/commit/116d0258ba1a58cfb22f5a12de9107b00e0323d5)), closes [#1024](https://github.com/ignaciojulio/Stellar-forge/issues/1024) [#1023](https://github.com/ignaciojulio/Stellar-forge/issues/1023) [#1024](https://github.com/ignaciojulio/Stellar-forge/issues/1024) [#1023](https://github.com/ignaciojulio/Stellar-forge/issues/1023) * **#854:** format useTransactionHistory.ts to match project Prettier style (remove semicolons) ([8e7b12b](https://github.com/ignaciojulio/Stellar-forge/commit/8e7b12b757780a3570ec5b425ba61bcf4a23d6b1)), closes [#854](https://github.com/ignaciojulio/Stellar-forge/issues/854) * **#855:** eliminate CSP duplication by generating index.html meta tag from policy.ts ([1dc325a](https://github.com/ignaciojulio/Stellar-forge/commit/1dc325a503f0f41eb78e5220e1252b4afcb5ee13)), closes [#855](https://github.com/ignaciojulio/Stellar-forge/issues/855) * **#932:** consolidate useTransactionPolling into useTransaction.ts ([#956](https://github.com/ignaciojulio/Stellar-forge/issues/956)) ([28a84b6](https://github.com/ignaciojulio/Stellar-forge/commit/28a84b67df80e8f6c155e97da6f54704a36113cb)), closes [#932](https://github.com/ignaciojulio/Stellar-forge/issues/932) [#932](https://github.com/ignaciojulio/Stellar-forge/issues/932) * **#944:** add txHash, network, contractId Sentry tagging on transaction failures ([#952](https://github.com/ignaciojulio/Stellar-forge/issues/952)) ([9c213d0](https://github.com/ignaciojulio/Stellar-forge/commit/9c213d09b089f5704d2748ccc7e3aa2b4fc18a15)), closes [#944](https://github.com/ignaciojulio/Stellar-forge/issues/944) [#944](https://github.com/ignaciojulio/Stellar-forge/issues/944) * **#945:** document batch resource limits and add frontend size cap ([#953](https://github.com/ignaciojulio/Stellar-forge/issues/953)) ([8555f65](https://github.com/ignaciojulio/Stellar-forge/commit/8555f65acc16ff60cd3108eb533d836ca7fcd0f2)), closes [#945](https://github.com/ignaciojulio/Stellar-forge/issues/945) [#945](https://github.com/ignaciojulio/Stellar-forge/issues/945) * **#947:** add incident response runbook and break-glass recovery docs ([#954](https://github.com/ignaciojulio/Stellar-forge/issues/954)) ([0546342](https://github.com/ignaciojulio/Stellar-forge/commit/054634208dd995ce8daacbd83199c6c8e3547c2a)), closes [#947](https://github.com/ignaciojulio/Stellar-forge/issues/947) [#9](https://github.com/ignaciojulio/Stellar-forge/issues/9) [#947](https://github.com/ignaciojulio/Stellar-forge/issues/947) * accept decimals=0 in validateTokenParams ([56cb8d9](https://github.com/ignaciojulio/Stellar-forge/commit/56cb8d961c2d5e421f5391b6d31587ad52013d4b)) * add bounds validation to token metadata type guard (CWE-1236) ([#964](https://github.com/ignaciojulio/Stellar-forge/issues/964)) ([ab4cb5c](https://github.com/ignaciojulio/Stellar-forge/commit/ab4cb5c31ea6ded2673ee8d4dc61d11f2469d5a7)) * add BurnAmountExceedsBalance check in burn function ([1113068](https://github.com/ignaciojulio/Stellar-forge/commit/1113068ceb02e464c40066021ca24279dc4753ab)) * add CI drift check for contract ABI documentation - Closes [#946](https://github.com/ignaciojulio/Stellar-forge/issues/946) ([#949](https://github.com/ignaciojulio/Stellar-forge/issues/949)) ([8e67454](https://github.com/ignaciojulio/Stellar-forge/commit/8e67454a4a4d41c8fe1232eb0d2faebce79f9c6d)) * add env var validation and misconfiguration screen ([f66f1d5](https://github.com/ignaciojulio/Stellar-forge/commit/f66f1d5c144e9e96ddb451e4feeffca41e950b3d)) * add esbuild as a direct devDependency for Storybook CI build ([512b11e](https://github.com/ignaciojulio/Stellar-forge/commit/512b11e8cad65979e4fbbdac073ddb8dc5ba1fa8)) * add formula-injection guard to CSV export (CWE-1236) ([#963](https://github.com/ignaciojulio/Stellar-forge/issues/963)) ([bff7012](https://github.com/ignaciojulio/Stellar-forge/commit/bff70125f81172ece961c8c4f9f2a215e6f746ce)) * add missing build step to E2E job, fix sitemap script crash ([535955c](https://github.com/ignaciojulio/Stellar-forge/commit/535955c34bbd6b3877fde7f5a29b42288352cdcc)) * add missing imports for mobile responsive components ([0b89740](https://github.com/ignaciojulio/Stellar-forge/commit/0b89740d64d35bfacddd14b8c6b5a7c4933a4c7b)) * add standalone network support and fix E2E test mocks ([a78f8de](https://github.com/ignaciojulio/Stellar-forge/commit/a78f8deef5c21e74f3b391726a60636692a242c3)) * align adm_upd topic and add CI drift detection ([#1032](https://github.com/ignaciojulio/Stellar-forge/issues/1032)) ([872baa9](https://github.com/ignaciojulio/Stellar-forge/commit/872baa9047675607156a731e1c9de78d4e9843fb)) * align frontend token validation with contract (name ≤ 32 UTF-8 bytes, remove ASCII-only restriction) ([#1125](https://github.com/ignaciojulio/Stellar-forge/issues/1125)) ([cefa9b9](https://github.com/ignaciojulio/Stellar-forge/commit/cefa9b9c13bbc7f2b5a770e5376369c4875c3833)) * **analytics:** add opt-out tests, CI bypass check, and compliance ADR ([#965](https://github.com/ignaciojulio/Stellar-forge/issues/965)) ([180f672](https://github.com/ignaciojulio/Stellar-forge/commit/180f6725d2f82fa5a068687e428886e85179edd3)), closes [#948](https://github.com/ignaciojulio/Stellar-forge/issues/948) * **api:** add rate limiting to auth challenge endpoints ([#1144](https://github.com/ignaciojulio/Stellar-forge/issues/1144)) ([600e8a0](https://github.com/ignaciojulio/Stellar-forge/commit/600e8a057f98129ad93a520030c3224682da0400)), closes [#1101](https://github.com/ignaciojulio/Stellar-forge/issues/1101) * **api:** remove clientIp() dead code with inverted XFF parsing (audit [#26](https://github.com/ignaciojulio/Stellar-forge/issues/26)) ([#1129](https://github.com/ignaciojulio/Stellar-forge/issues/1129)) ([fa1a888](https://github.com/ignaciojulio/Stellar-forge/commit/fa1a888c99133d2fafab52f3e79444d1ac188766)), closes [#1101](https://github.com/ignaciojulio/Stellar-forge/issues/1101) * **api:** sanitize lastError in health/indexer to avoid leaking internal error details ([#1143](https://github.com/ignaciojulio/Stellar-forge/issues/1143)) ([c51d179](https://github.com/ignaciojulio/Stellar-forge/commit/c51d179b782507f167150b719309715fcf6225d9)), closes [#1103](https://github.com/ignaciojulio/Stellar-forge/issues/1103) * **api:** store wallet-auth challenges in Vercel KV (Closes [#1091](https://github.com/ignaciojulio/Stellar-forge/issues/1091)) ([#1132](https://github.com/ignaciojulio/Stellar-forge/issues/1132)) ([62941bb](https://github.com/ignaciojulio/Stellar-forge/commit/62941bb0131970c10fc56f5fcf19135eefe8de3f)) * audit follow-ups — restore tx polling backoff, fix wasm target, drop orphan form ([05409eb](https://github.com/ignaciojulio/Stellar-forge/commit/05409eb55f4e3ff2797fce06d631fc94553a0239)), closes [#852](https://github.com/ignaciojulio/Stellar-forge/issues/852) [#732](https://github.com/ignaciojulio/Stellar-forge/issues/732) [813/#814](https://github.com/ignaciojulio/Stellar-forge/issues/814) * **build:** build the contract for wasm32v1-none everywhere ([#940](https://github.com/ignaciojulio/Stellar-forge/issues/940)) ([0aa6df3](https://github.com/ignaciojulio/Stellar-forge/commit/0aa6df38bc25e5bf1941a7dbbafd12616a108505)) * **ci:** remove continue-on-error from fuzz steps, add PR smoke job ([#937](https://github.com/ignaciojulio/Stellar-forge/issues/937)) ([#966](https://github.com/ignaciojulio/Stellar-forge/issues/966)) ([000458f](https://github.com/ignaciojulio/Stellar-forge/commit/000458f8ffde77f136476ea37f2758169f212e07)) * clear cargo clippy -D warnings findings in token-factory ([2a27a8f](https://github.com/ignaciojulio/Stellar-forge/commit/2a27a8fff3e0b78b5173696166315c1470211a09)) * complete contract test suite with all error variants covered ([5f8320d](https://github.com/ignaciojulio/Stellar-forge/commit/5f8320d7b14d3a93339ed3f82779d4763a0717b7)) * **contract:** close open-proxy hole in burn ([#1021](https://github.com/ignaciojulio/Stellar-forge/issues/1021)) ([#1059](https://github.com/ignaciojulio/Stellar-forge/issues/1059)) ([895a621](https://github.com/ignaciojulio/Stellar-forge/commit/895a6218340f8540b8f961ddf47551c96f1c1dbc)) * **contract:** front-load batch validation and document Soroban transaction atomicity ([#915](https://github.com/ignaciojulio/Stellar-forge/issues/915)) ([#974](https://github.com/ignaciojulio/Stellar-forge/issues/974)) ([b60868f](https://github.com/ignaciojulio/Stellar-forge/commit/b60868f0363e8e6c1c89927cfee42fecef7af34a)) * **contracts:** add crash-to-regression-test process with fuzz corpus infrastructure ([#951](https://github.com/ignaciojulio/Stellar-forge/issues/951)) ([9428b7d](https://github.com/ignaciojulio/Stellar-forge/commit/9428b7d209366e9ba62ef72359c902cf9beb79b3)), closes [#938](https://github.com/ignaciojulio/Stellar-forge/issues/938) * **contracts:** add distribute_fee test coverage at realistic split sizes ([#918](https://github.com/ignaciojulio/Stellar-forge/issues/918)) ([#1025](https://github.com/ignaciojulio/Stellar-forge/issues/1025)) ([f9ec953](https://github.com/ignaciojulio/Stellar-forge/commit/f9ec95316a5ee9968094f12947f7a088cd2b24d1)), closes [#919](https://github.com/ignaciojulio/Stellar-forge/issues/919) * **contracts:** add integer overflow protection in fee arithmetic ([18622f1](https://github.com/ignaciojulio/Stellar-forge/commit/18622f1777201ba92c4db2ef60928faa4c053de3)), closes [#513](https://github.com/ignaciojulio/Stellar-forge/issues/513) * **contracts:** charge exactly the required fee, not fee_payment ([#1035](https://github.com/ignaciojulio/Stellar-forge/issues/1035)) ([8654767](https://github.com/ignaciojulio/Stellar-forge/commit/86547670d6b45bf9a967ea59e26813b2670de6b5)), closes [#1007](https://github.com/ignaciojulio/Stellar-forge/issues/1007) [#1007](https://github.com/ignaciojulio/Stellar-forge/issues/1007) [#1008](https://github.com/ignaciojulio/Stellar-forge/issues/1008) [#1008](https://github.com/ignaciojulio/Stellar-forge/issues/1008) * **contracts:** close remaining FWC26 audit issues ([787dc22](https://github.com/ignaciojulio/Stellar-forge/commit/787dc22d4272d0258856b6a31967c164dcefddda)), closes [909-#948](https://github.com/909-/issues/948) [#1022](https://github.com/ignaciojulio/Stellar-forge/issues/1022) [#910](https://github.com/ignaciojulio/Stellar-forge/issues/910) [#913](https://github.com/ignaciojulio/Stellar-forge/issues/913) [#916](https://github.com/ignaciojulio/Stellar-forge/issues/916) [#943](https://github.com/ignaciojulio/Stellar-forge/issues/943) * **contracts:** enforce MAX_BATCH_SIZE cap in create_tokens_batch (Closes [#1100](https://github.com/ignaciojulio/Stellar-forge/issues/1100)) ([#1135](https://github.com/ignaciojulio/Stellar-forge/issues/1135)) ([2ba33e5](https://github.com/ignaciojulio/Stellar-forge/commit/2ba33e5e5516b2e3e66388ebd3dcb4568a3b5a14)) * **contracts:** fuzz the real burn entrypoint, not a reimplementation ([#1098](https://github.com/ignaciojulio/Stellar-forge/issues/1098)) ([#1137](https://github.com/ignaciojulio/Stellar-forge/issues/1137)) ([be8a342](https://github.com/ignaciojulio/Stellar-forge/commit/be8a3424d514423f9946635ff899440911bd3377)) * **contracts:** make token-factory initialize atomic with deployment ([#1029](https://github.com/ignaciojulio/Stellar-forge/issues/1029)) ([3e12de2](https://github.com/ignaciojulio/Stellar-forge/commit/3e12de21ff69c7998ff0ad591bc8f066009e364f)), closes [#1005](https://github.com/ignaciojulio/Stellar-forge/issues/1005) * **contracts:** move per-token bookkeeping to persistent storage ([#1034](https://github.com/ignaciojulio/Stellar-forge/issues/1034)) ([51c52bd](https://github.com/ignaciojulio/Stellar-forge/commit/51c52bd1bcb07eeda1744cd99f82a2816db6aa27)), closes [#1007](https://github.com/ignaciojulio/Stellar-forge/issues/1007) [#1007](https://github.com/ignaciojulio/Stellar-forge/issues/1007) * **contracts:** prove multi-step migrate pattern with synthetic v2 tests ([#919](https://github.com/ignaciojulio/Stellar-forge/issues/919)) ([#1026](https://github.com/ignaciojulio/Stellar-forge/issues/1026)) ([f9ef384](https://github.com/ignaciojulio/Stellar-forge/commit/f9ef3849f30d7af08473cd66268c0692def6da91)), closes [#918](https://github.com/ignaciojulio/Stellar-forge/issues/918) [#918](https://github.com/ignaciojulio/Stellar-forge/issues/918) * **contracts:** repair broken merge artifacts on main ([#1041](https://github.com/ignaciojulio/Stellar-forge/issues/1041)) ([6524e58](https://github.com/ignaciojulio/Stellar-forge/commit/6524e58d86b00235622cb07e89d30a756df69f8e)), closes [1034/#1035](https://github.com/ignaciojulio/Stellar-forge/issues/1035) [#1033](https://github.com/ignaciojulio/Stellar-forge/issues/1033) [#1034](https://github.com/ignaciojulio/Stellar-forge/issues/1034) [#1025](https://github.com/ignaciojulio/Stellar-forge/issues/1025) * **contracts:** seed max-supply counter with initial_supply ([#1006](https://github.com/ignaciojulio/Stellar-forge/issues/1006)) ([#1031](https://github.com/ignaciojulio/Stellar-forge/issues/1031)) ([4a3e90d](https://github.com/ignaciojulio/Stellar-forge/commit/4a3e90de113d45a28f67c765c4a7c07af38c7e44)) * correct useLocalStorage syntax error and variable reference ([232fc52](https://github.com/ignaciojulio/Stellar-forge/commit/232fc520e4df8a4d1345e67e05084ae32252fe5e)) * dedupe token-validation rules in validation.ts ([d3012c2](https://github.com/ignaciojulio/Stellar-forge/commit/d3012c2c310f31135a463f13482af36ec9b1dc46)), closes [#845](https://github.com/ignaciojulio/Stellar-forge/issues/845) * **deps:** add Dependabot fuzz coverage and auto-merge policy ([#985](https://github.com/ignaciojulio/Stellar-forge/issues/985)) ([2247b9f](https://github.com/ignaciojulio/Stellar-forge/commit/2247b9f0cb3343708d5eebb461280d7e558a5b38)), closes [#941](https://github.com/ignaciojulio/Stellar-forge/issues/941) * downgrade vite to v6 for Storybook compatibility ([c2f071b](https://github.com/ignaciojulio/Stellar-forge/commit/c2f071bb75ced96669d27f11cec13e11d9c83358)) * **e2e:** add token-list-container class and show 6 trailing address chars ([9fcfff3](https://github.com/ignaciojulio/Stellar-forge/commit/9fcfff3398df79dd9ad987ff4ad51d15409f78b6)) * **e2e:** prevent watcher auto-connect by not responding to REQUEST_NETWORK_DETAILS ([9649702](https://github.com/ignaciojulio/Stellar-forge/commit/9649702d0793d0e489bb9eb2caba0217f3ab99dc)) * exclude fuzz crate from workspace to prevent wasm32 compilation errors ([b3f09f2](https://github.com/ignaciojulio/Stellar-forge/commit/b3f09f208486b314a10fd2f8061b90631fa5df3a)) * expand .gitignore to prevent accidental commits of local artifacts ([1da56fe](https://github.com/ignaciojulio/Stellar-forge/commit/1da56fe00394ccbbff2a86d0de8fa7cf24356924)), closes [#835](https://github.com/ignaciojulio/Stellar-forge/issues/835) * **explorer:** snapshot tokenCount once per session to prevent pagination drift ([#1126](https://github.com/ignaciojulio/Stellar-forge/issues/1126)) ([a27f77b](https://github.com/ignaciojulio/Stellar-forge/commit/a27f77b8dda5b76feced0cf6baeac7a42a84bcf0)) * **frontend:** clear typecheck errors and prettier drift masked by red CI ([82994b9](https://github.com/ignaciojulio/Stellar-forge/commit/82994b977781c0b616e68b29fa1e1859765b0ac9)) * **frontend:** close network-mismatch signing window with a fresh pre-sign check ([#961](https://github.com/ignaciojulio/Stellar-forge/issues/961)) ([7619e99](https://github.com/ignaciojulio/Stellar-forge/commit/7619e9960d68ad73f6fb67ee0f4f9d11d6ee6ba6)), closes [#927](https://github.com/ignaciojulio/Stellar-forge/issues/927) * **frontend:** close unclosed PR wrapper in App.tsx and remove duplicate route entries ([4f9442b](https://github.com/ignaciojulio/Stellar-forge/commit/4f9442bda20864966521c36f1ed4272c52f56dd2)) * **frontend:** establish transaction reconciliation policy and add phantom-entry guards ([#955](https://github.com/ignaciojulio/Stellar-forge/issues/955)) ([1372af1](https://github.com/ignaciojulio/Stellar-forge/commit/1372af165a869a1814ef9b43d22c9e9f507190f2)), closes [#933](https://github.com/ignaciojulio/Stellar-forge/issues/933) * **frontend:** filter-aware cache key, stable useCallback deps, re-fetch on filter change ([62d2c8c](https://github.com/ignaciojulio/Stellar-forge/commit/62d2c8c3aaba49c1099b30db5e3956747b407b9a)) * **frontend:** fix Option encoding, map missing topics, add cap field ([fb3ee73](https://github.com/ignaciojulio/Stellar-forge/commit/fb3ee73daa47161d932d9f91585762223afa6a1a)), closes [#1022](https://github.com/ignaciojulio/Stellar-forge/issues/1022) [#917](https://github.com/ignaciojulio/Stellar-forge/issues/917) [#1022](https://github.com/ignaciojulio/Stellar-forge/issues/1022) [#943](https://github.com/ignaciojulio/Stellar-forge/issues/943) * **frontend:** handle every sendTransaction status explicitly ([#1020](https://github.com/ignaciojulio/Stellar-forge/issues/1020)) ([#1058](https://github.com/ignaciojulio/Stellar-forge/issues/1058)) ([70ebab6](https://github.com/ignaciojulio/Stellar-forge/commit/70ebab62bea7d7dc887e3ce6852a7f436b023083)), closes [#1056](https://github.com/ignaciojulio/Stellar-forge/issues/1056) [#1057](https://github.com/ignaciojulio/Stellar-forge/issues/1057) * **frontend:** implement the CSV formula-injection guard its tests expected ([59839b6](https://github.com/ignaciojulio/Stellar-forge/commit/59839b603cf7a84d782a740ff455e9bc9748ed62)), closes [#963](https://github.com/ignaciojulio/Stellar-forge/issues/963) * **frontend:** make token-detail routes public for deep links ([#880](https://github.com/ignaciojulio/Stellar-forge/issues/880)) ([971e14b](https://github.com/ignaciojulio/Stellar-forge/commit/971e14b24097a4f08688b097225728ed22955c6e)) * **frontend:** only mount OnboardingModal on Help click, not first-visit ([87d3ce4](https://github.com/ignaciojulio/Stellar-forge/commit/87d3ce41a764067f90f0384ce795f6111fdcaeec)) * **frontend:** paginate factory event fetch instead of silently capping "all tokens" ([#962](https://github.com/ignaciojulio/Stellar-forge/issues/962)) ([b480f56](https://github.com/ignaciojulio/Stellar-forge/commit/b480f56b8f935802aab26d2384efcb3eb3da9080)), closes [#35](https://github.com/ignaciojulio/Stellar-forge/issues/35) * **frontend:** pay real base_fee, surface FeeDisplay in mint, block writes on network mismatch ([6d5697d](https://github.com/ignaciojulio/Stellar-forge/commit/6d5697d3f661be16c4fefccdb1a71f5b5d35734b)) * **frontend:** remove exhaustive-deps suppressions, fix dep arrays ([a8fcf34](https://github.com/ignaciojulio/Stellar-forge/commit/a8fcf3463afe36bacf28f5f1f259eb5f8e7ca845)) * **frontend:** resolve merge fallout — format, getMetadata validation, no-this-alias ([4e0d770](https://github.com/ignaciojulio/Stellar-forge/commit/4e0d77063f0d8b10f23cc9176ea2217bf9337b08)) * **frontend:** resolve token identity from contract, not events ([#1018](https://github.com/ignaciojulio/Stellar-forge/issues/1018)) ([#1030](https://github.com/ignaciojulio/Stellar-forge/issues/1030)) ([66bcb19](https://github.com/ignaciojulio/Stellar-forge/commit/66bcb1915e5199371a1b49f5b353e0aba0dfd86a)) * **frontend:** source FeeDisplay fees from useFactoryState, not the singleton ([e388e7a](https://github.com/ignaciojulio/Stellar-forge/commit/e388e7aacaf66708e01aba263121bd9b932895b2)) * **frontend:** stop passing a decimal XLM string to formatXLM ([d23be61](https://github.com/ignaciojulio/Stellar-forge/commit/d23be616d378af583289ce5544de20673eeb5fda)) * **frontend:** track Horizon paging_token and pass cursor on load-more ([aa6e15b](https://github.com/ignaciojulio/Stellar-forge/commit/aa6e15b235bda5842fed1e8aa5848a2e06b04959)) * **frontend:** unify transaction poll backoff into shared utility ([#960](https://github.com/ignaciojulio/Stellar-forge/issues/960)) ([2ad85fc](https://github.com/ignaciojulio/Stellar-forge/commit/2ad85fc7f43c40a66746519eccaf89cb5147e53c)) * **frontend:** wire orphaned features, fix standalone network, add typecheck gate ([c14d1b1](https://github.com/ignaciojulio/Stellar-forge/commit/c14d1b108ef210ede1d007f231cd4797f844fe26)) * **infra:** consolidate vercel.json security headers (Closes [#1104](https://github.com/ignaciojulio/Stellar-forge/issues/1104)) ([#1134](https://github.com/ignaciojulio/Stellar-forge/issues/1134)) ([fc64bea](https://github.com/ignaciojulio/Stellar-forge/commit/fc64bea1d5185c43fe289214857246bfe014e51c)) * **infra:** schedule the indexer cron in vercel.json (Closes [#1090](https://github.com/ignaciojulio/Stellar-forge/issues/1090)) ([#1130](https://github.com/ignaciojulio/Stellar-forge/issues/1130)) ([288d5f3](https://github.com/ignaciojulio/Stellar-forge/commit/288d5f3b1208405fd08e12342fef2ae58cf25a7b)), closes [#1123](https://github.com/ignaciojulio/Stellar-forge/issues/1123) [#1124](https://github.com/ignaciojulio/Stellar-forge/issues/1124) [#1125](https://github.com/ignaciojulio/Stellar-forge/issues/1125) [#1126](https://github.com/ignaciojulio/Stellar-forge/issues/1126) [#1126](https://github.com/ignaciojulio/Stellar-forge/issues/1126) [#1126](https://github.com/ignaciojulio/Stellar-forge/issues/1126) [#1121](https://github.com/ignaciojulio/Stellar-forge/issues/1121) [#1121](https://github.com/ignaciojulio/Stellar-forge/issues/1121) * **ipfs:** retry image upload on transient Pinata errors ([26a2005](https://github.com/ignaciojulio/Stellar-forge/commit/26a2005ebfbe5c27c7f132c3f0a031d5c750ac30)), closes [#743](https://github.com/ignaciojulio/Stellar-forge/issues/743) * **ipfs:** validate getMetadata response shape before returning ([7183346](https://github.com/ignaciojulio/Stellar-forge/commit/71833467e8e0aa7c8a770d2905056227e721378c)), closes [#849](https://github.com/ignaciojulio/Stellar-forge/issues/849) * isolate per-recipient fee-split transfer failures from aborting the call ([#1136](https://github.com/ignaciojulio/Stellar-forge/issues/1136)) ([6e68f0d](https://github.com/ignaciojulio/Stellar-forge/commit/6e68f0d78f1272fa6a31cc6d8cb54859dc9fb83b)) * make all 202 tests pass ([1043432](https://github.com/ignaciojulio/Stellar-forge/commit/1043432dcdf6307385661d7261fd8f73bcae6923)) * pin esbuild/globals devDeps and apply npm audit fixes ([6ccd8c3](https://github.com/ignaciojulio/Stellar-forge/commit/6ccd8c3418b8617052bd8c290231cabad9d82119)) * provide VITE_TOKEN_WASM_HASH in E2E CI job ([64c1a5b](https://github.com/ignaciojulio/Stellar-forge/commit/64c1a5b24f90f4685b1690b8653e620768924240)) * real bugs surfaced while restoring lint/test coverage ([8434f56](https://github.com/ignaciojulio/Stellar-forge/commit/8434f5688c3f8877513c5931eef26bf93b85091f)) * reclaim orphaned IPFS pins on failed set_metadata (Closes [#1096](https://github.com/ignaciojulio/Stellar-forge/issues/1096)) ([#1146](https://github.com/ignaciojulio/Stellar-forge/issues/1146)) ([d845880](https://github.com/ignaciojulio/Stellar-forge/commit/d84588094a620097ffcb3d66135201ffedc70ad8)) * redesign fee transfer and token deployment per issue spec ([e7b8c9e](https://github.com/ignaciojulio/Stellar-forge/commit/e7b8c9e7f0a77cb618b39afa0b91ea6ac87c5b21)) * refactor build system, fix contract errors, fix dark mode toggle ([85751f8](https://github.com/ignaciojulio/Stellar-forge/commit/85751f85239640acbae8197feccb14ff63724c16)) * relabel TokenDetail Admin field to 'Deployed by' (Closes [#1109](https://github.com/ignaciojulio/Stellar-forge/issues/1109)) ([#1119](https://github.com/ignaciojulio/Stellar-forge/issues/1119)) ([5d5df07](https://github.com/ignaciojulio/Stellar-forge/commit/5d5df075612a6e510448e17087c281d987a36478)) * **release:** add @actions/io to satisfy @actions/exec's undeclared import ([cd21fdc](https://github.com/ignaciojulio/Stellar-forge/commit/cd21fdc70110759165e95d85803d48f15dd7225f)) * **release:** disable husky hooks in the release workflow ([5429060](https://github.com/ignaciojulio/Stellar-forge/commit/5429060a58cf30265f835f3954a420de043452df)) * remove 'unsafe-inline' from CSP style-src (Closes [#1105](https://github.com/ignaciojulio/Stellar-forge/issues/1105)) ([#1123](https://github.com/ignaciojulio/Stellar-forge/issues/1123)) ([838129c](https://github.com/ignaciojulio/Stellar-forge/commit/838129ccc63f862350ac86ee1efcc1ba2ae4a163)) * repair local Stellar network startup in E2E CI job ([5aa9026](https://github.com/ignaciojulio/Stellar-forge/commit/5aa90265077404369cfe81c6a96eb94017075893)) * replace console.error with logger in CreateToken, TokenForm, MetadataUploadForm ([24805af](https://github.com/ignaciojulio/Stellar-forge/commit/24805af56b93e60392a4817ba8708c29960dd043)), closes [#848](https://github.com/ignaciojulio/Stellar-forge/issues/848) * replace invalid checksum address in validation test ([64ac45a](https://github.com/ignaciojulio/Stellar-forge/commit/64ac45ae4179ede5aa0fce9533ffaae640ef2084)) * resolve build failure blocking strict mode verification ([e3370f5](https://github.com/ignaciojulio/Stellar-forge/commit/e3370f50dec6af5a2780d35d7e11462ecf0c3145)) * resolve Horizon URL from active network config in useTransactionHistory ([2c25a2d](https://github.com/ignaciojulio/Stellar-forge/commit/2c25a2d2d3b43a72c5453e84f2e2707b4d443696)), closes [#837](https://github.com/ignaciojulio/Stellar-forge/issues/837) * restore ESLint v9 flat config ([a85d008](https://github.com/ignaciojulio/Stellar-forge/commit/a85d008e18a7f925eff1fd5a7361e624754f28cf)) * **routing:** fix deep-link for /token/:address and add e2e tests ([1eb308a](https://github.com/ignaciojulio/Stellar-forge/commit/1eb308ab9014c595c30aa3868e9d3e4b87278470)) * **security:** stop shipping Pinata credentials in the frontend bundle ([#921](https://github.com/ignaciojulio/Stellar-forge/issues/921)) ([2a23cad](https://github.com/ignaciojulio/Stellar-forge/commit/2a23cad10304a6b822720ec0ac4cfe5eb19d3a09)) * **security:** validate uploaded image content, not client-declared M… ([#1055](https://github.com/ignaciojulio/Stellar-forge/issues/1055)) ([ab1f253](https://github.com/ignaciojulio/Stellar-forge/commit/ab1f25398d2c0a1c2a1a6418364423e5a0dfe577)), closes [#1002](https://github.com/ignaciojulio/Stellar-forge/issues/1002) [#1002](https://github.com/ignaciojulio/Stellar-forge/issues/1002) [#1056](https://github.com/ignaciojulio/Stellar-forge/issues/1056) [#1057](https://github.com/ignaciojulio/Stellar-forge/issues/1057) * **specs:** resolve spec stubs and enforce kiro spec documentation ([#1117](https://github.com/ignaciojulio/Stellar-forge/issues/1117)) ([#1120](https://github.com/ignaciojulio/Stellar-forge/issues/1120)) ([0875cd2](https://github.com/ignaciojulio/Stellar-forge/commit/0875cd23e96ae0bb87a7d897418349aaa04b18d8)), closes [#1099](https://github.com/ignaciojulio/Stellar-forge/issues/1099) [#1107](https://github.com/ignaciojulio/Stellar-forge/issues/1107) [#1108](https://github.com/ignaciojulio/Stellar-forge/issues/1108) [#1113](https://github.com/ignaciojulio/Stellar-forge/issues/1113) [#1118](https://github.com/ignaciojulio/Stellar-forge/issues/1118) * stop E2E app crash on unknown network and repair Freighter mock ([232afee](https://github.com/ignaciojulio/Stellar-forge/commit/232afee01997300d0fb64ebbe5101d9c11c520fb)) * **storybook:** finish the Storybook 10 migration ([a66a453](https://github.com/ignaciojulio/Stellar-forge/commit/a66a453846c86dd2ee83fcb347380b26af4c66ef)), closes [#893](https://github.com/ignaciojulio/Stellar-forge/issues/893) * **token-factory:** bound fee-split recipient count to prevent resource-exhaustion griefing ([#1027](https://github.com/ignaciojulio/Stellar-forge/issues/1027)) ([becd28f](https://github.com/ignaciojulio/Stellar-forge/commit/becd28f8647eef2fa7e62a9d42b9626413c00216)) * **token-factory:** enforce strict clippy linting for contract code ([686b143](https://github.com/ignaciojulio/Stellar-forge/commit/686b143cec68646bffeb75790ac317a450742f1f)) * **token-factory:** extend reentrancy guard to all state-mutating entrypoints ([#972](https://github.com/ignaciojulio/Stellar-forge/issues/972)) ([45a1a9c](https://github.com/ignaciojulio/Stellar-forge/commit/45a1a9c1f077d7dbb4e6989ce6ccf42195e88fce)) * **token-factory:** reject negative base_fee and metadata_fee ([#973](https://github.com/ignaciojulio/Stellar-forge/issues/973)) ([e3cdd5e](https://github.com/ignaciojulio/Stellar-forge/commit/e3cdd5eb5de4962381800beaa58853b45ee4b46d)) * **token-factory:** store token_wasm_hash in FactoryState ([7de1635](https://github.com/ignaciojulio/Stellar-forge/commit/7de1635b752553f7166f4e6838620a4dd8d540cc)), closes [#543](https://github.com/ignaciojulio/Stellar-forge/issues/543) * **ui:** sanitize and validate token name/symbol inputs ([1e4e2e7](https://github.com/ignaciojulio/Stellar-forge/commit/1e4e2e74f4f0dec3fa06cd44bc4892e76dd421d7)) * upgrade soroban-sdk to 25.x and fix wasm build ([1e098e1](https://github.com/ignaciojulio/Stellar-forge/commit/1e098e149830f6a10e319bd4ac26ef6db8c1c13a)) * Use correct validation function name in MetadataUploadForm ([b8802cf](https://github.com/ignaciojulio/Stellar-forge/commit/b8802cfd55f2f9f80e2ec76387c9d91b14bce9e5)) * use dedicated fee_token for all fee transfers in factory contract ([14db340](https://github.com/ignaciojulio/Stellar-forge/commit/14db340019273fbbd6538c240d765aba96906ec5)) * use formatXLM and stroopsToXLM in FeeDisplay and add conversion test ([65b5d94](https://github.com/ignaciojulio/Stellar-forge/commit/65b5d944ea82d68e68dd816830751533bf58eca2)) * validate hexToBytes input is exactly 64 hex chars ([4165f9f](https://github.com/ignaciojulio/Stellar-forge/commit/4165f9f3a9d7285fe3ae50c5784f257c73d77716)), closes [#836](https://github.com/ignaciojulio/Stellar-forge/issues/836) * validate token supply before minting to prevent u128 overflow ([#959](https://github.com/ignaciojulio/Stellar-forge/issues/959)) ([d4027c8](https://github.com/ignaciojulio/Stellar-forge/commit/d4027c81e69c2d2434374a41e8d2bd514a647c26)), closes [#909](https://github.com/ignaciojulio/Stellar-forge/issues/909) * **validation:** use StrKey checksum validation for Stellar addresses ([c55f0f4](https://github.com/ignaciojulio/Stellar-forge/commit/c55f0f49232a10494906398930488a8eb7e7f9bc)) * **wallet:** clear all state and token cache on disconnect ([a2b1ed3](https://github.com/ignaciojulio/Stellar-forge/commit/a2b1ed36c3413c37eca259e389307a2f6f06f556)) ### Features * **#588:** Build Token Creation Form UI ([b13478c](https://github.com/ignaciojulio/Stellar-forge/commit/b13478ce4ce5f7f5ff75bd629ee82c8e77c6e00b)), closes [#588](https://github.com/ignaciojulio/Stellar-forge/issues/588) * **#589:** Implement StellarService Token Deployment ([b186936](https://github.com/ignaciojulio/Stellar-forge/commit/b18693646c7a9a6826cae19aef04b6b97fe95e16)), closes [#589](https://github.com/ignaciojulio/Stellar-forge/issues/589) * **#590:** Implement IPFS Metadata Upload via Pinata ([98e1fc0](https://github.com/ignaciojulio/Stellar-forge/commit/98e1fc05522b123fdfba8949d4f891d09ca36315)), closes [#590](https://github.com/ignaciojulio/Stellar-forge/issues/590) * **#603:** Create Token Detail Page ([a1aa1ec](https://github.com/ignaciojulio/Stellar-forge/commit/a1aa1ecd6ccad4ec4e2b00a59e706cff4b133c13)), closes [#603](https://github.com/ignaciojulio/Stellar-forge/issues/603) * **#604:** Add React Router for Navigation ([be195b5](https://github.com/ignaciojulio/Stellar-forge/commit/be195b50249bb8d3cfe632338b279ccbab3078c1)), closes [#604](https://github.com/ignaciojulio/Stellar-forge/issues/604) * **#606:** Add loading states and skeleton UI ([41111e0](https://github.com/ignaciojulio/Stellar-forge/commit/41111e0675574976efd551268375a5f5aafa094e)), closes [#606](https://github.com/ignaciojulio/Stellar-forge/issues/606) * **#607:** Add environment variable validation on startup ([5e3ff84](https://github.com/ignaciojulio/Stellar-forge/commit/5e3ff842dee16505f089da8fa8ddf59ff1cbf0aa)), closes [#607](https://github.com/ignaciojulio/Stellar-forge/issues/607) * **#734:** Add debounced search and creator address filter to TokenExplorer ([12c703b](https://github.com/ignaciojulio/Stellar-forge/commit/12c703bf6f4ef881be1aec3fb7a31659182a05fb)), closes [#734](https://github.com/ignaciojulio/Stellar-forge/issues/734) * **#fuzz:** add fuzz targets for set_metadata and mint_tokens ([167432d](https://github.com/ignaciojulio/Stellar-forge/commit/167432dc36b3a44d2fa2b3bcd891af976dc06ab6)), closes [#fuzz](https://github.com/ignaciojulio/Stellar-forge/issues/fuzz) * **a11y:** accessibility audit and fixes ([98eb2f7](https://github.com/ignaciojulio/Stellar-forge/commit/98eb2f7bce43199095257b3f21b29347db71fb7d)) * add accessibility improvements (a11y) ([259d1b0](https://github.com/ignaciojulio/Stellar-forge/commit/259d1b0ba239906605b10feb7a151deea01bb70b)) * add AddressDisplay component with copy and explorer link ([2ab3bda](https://github.com/ignaciojulio/Stellar-forge/commit/2ab3bdaa16ba838f6da55e681983df940707cb31)) * add analytics integration spec and scaffolding ([#522](https://github.com/ignaciojulio/Stellar-forge/issues/522)) ([e4d8902](https://github.com/ignaciojulio/Stellar-forge/commit/e4d89029fe13ea8a94a574bc2028f9090bc51cc0)) * add CHANGELOG.md and PR template with changelog checklist ([89bb67e](https://github.com/ignaciojulio/Stellar-forge/commit/89bb67ed0b73c25e9a0fad46554b8ee6c35e17cb)) * add client-side CID verification for metadata integrity ([#1139](https://github.com/ignaciojulio/Stellar-forge/issues/1139)) ([82e9a1b](https://github.com/ignaciojulio/Stellar-forge/commit/82e9a1b72bf1c78efede6522669d40707a5f295c)) * add client-side routing with react-router-dom (fixes [#471](https://github.com/ignaciojulio/Stellar-forge/issues/471)) ([baee94d](https://github.com/ignaciojulio/Stellar-forge/commit/baee94d5865dea41be3e3a0caa3a70952c8f45b3)) * add comprehensive error handling system ([62b4348](https://github.com/ignaciojulio/Stellar-forge/commit/62b43485f363fcdd348e518631221dcdedbca452)) * add ConfirmModal before all on-chain transactions ([3cef134](https://github.com/ignaciojulio/Stellar-forge/commit/3cef134598c07ec70c6c8d7ed84549da9a0c6162)) * add Content-Security-Policy headers ([ef28578](https://github.com/ignaciojulio/Stellar-forge/commit/ef285786231bd883fab9b5e4f2e369658cb010b4)) * add contract event history with pagination ([0425f56](https://github.com/ignaciojulio/Stellar-forge/commit/0425f560eb14fe3ab740e9e1726e045d9259772a)) * add contract event indexing spec ([#612](https://github.com/ignaciojulio/Stellar-forge/issues/612)) ([5952c01](https://github.com/ignaciojulio/Stellar-forge/commit/5952c015de58f01b79a0a3978f7baa09e1ec8c4c)) * add CopyButton component and integrations [#491](https://github.com/ignaciojulio/Stellar-forge/issues/491) ([6d16970](https://github.com/ignaciojulio/Stellar-forge/commit/6d1697051d31d6876a50008a3d7669f69d5315b6)) * add dark mode support with localStorage persistence ([24e96e5](https://github.com/ignaciojulio/Stellar-forge/commit/24e96e584e68fdf5177d3631d5172f390ed08465)) * add dark mode with system preference, localStorage persistence, and toggle button ([5658728](https://github.com/ignaciojulio/Stellar-forge/commit/5658728f0ba9b5825e3f002c10a8a381c4434ced)) * add decimals validation for create_token (0-18 inclusive) ([f88ec3c](https://github.com/ignaciojulio/Stellar-forge/commit/f88ec3c3e3100c34bb383c6b90a92fcb1fd33cc4)), closes [#515](https://github.com/ignaciojulio/Stellar-forge/issues/515) * add deploy-contract.sh script for automated contract deployment ([f478eb2](https://github.com/ignaciojulio/Stellar-forge/commit/f478eb2f264a2ad65366be6217dd897ab5ca1e26)) * add E2E coverage for network mismatch guard across all write forms Closes [#935](https://github.com/ignaciojulio/Stellar-forge/issues/935) ([#970](https://github.com/ignaciojulio/Stellar-forge/issues/970)) ([a644ce6](https://github.com/ignaciojulio/Stellar-forge/commit/a644ce657163e43308840ecb8e4a5582b7046cf7)) * add env variable validation and configuration guide ([98642d9](https://github.com/ignaciojulio/Stellar-forge/commit/98642d9dd07b242b72fa17f7c71c90749209cf71)), closes [#8](https://github.com/ignaciojulio/Stellar-forge/issues/8) * add ErrorBoundary component to catch render errors ([d297816](https://github.com/ignaciojulio/Stellar-forge/commit/d29781600265a3afc90e905556a2b1c995f2dd29)) * add eslint import order rule spec ([ca4bc6b](https://github.com/ignaciojulio/Stellar-forge/commit/ca4bc6bad5f926f67845006654a62d413a8d7446)) * add export CSV functionality to TransactionHistory ([637dc7c](https://github.com/ignaciojulio/Stellar-forge/commit/637dc7cfdb0c15520196983a6f5a87e0504fe0a1)) * add fee bump transaction support ([#63](https://github.com/ignaciojulio/Stellar-forge/issues/63)) ([9b2b8ea](https://github.com/ignaciojulio/Stellar-forge/commit/9b2b8ea83cad398c574e53d1b5e50876c58252e7)) * add FeeDisplay component with module-level cache ([e749987](https://github.com/ignaciojulio/Stellar-forge/commit/e749987653db420fb5261cbe857fb557a697ecd1)) * add formatTimestamp and timeAgo utilities (#issue) ([02f8f30](https://github.com/ignaciojulio/Stellar-forge/commit/02f8f308f23c64b660d3419496b21085f9f35059)), closes [#issue](https://github.com/ignaciojulio/Stellar-forge/issues/issue) * add formatTokenAmount and parseTokenAmount utilities ([1041ada](https://github.com/ignaciojulio/Stellar-forge/commit/1041ada734af076be7fd095d40e6c87ab39b58ed)) * add French (fr) locale i18n support ([4429f89](https://github.com/ignaciojulio/Stellar-forge/commit/4429f898c5906e2f42b38d3b3069af5acf8b07bd)), closes [#740](https://github.com/ignaciojulio/Stellar-forge/issues/740) * add friendbot banner for testnet ([aece4cb](https://github.com/ignaciojulio/Stellar-forge/commit/aece4cb99d882cf89cd6e87ba8a97312300ead57)) * add frontend unit tests and fix retry unhandled rejections ([ec4b78b](https://github.com/ignaciojulio/Stellar-forge/commit/ec4b78b50b9ce92b0c37c64e705b0bd81a0f5f10)), closes [#9](https://github.com/ignaciojulio/Stellar-forge/issues/9) * add frontend unit tests for validation utils ([#609](https://github.com/ignaciojulio/Stellar-forge/issues/609)) ([5ef4995](https://github.com/ignaciojulio/Stellar-forge/commit/5ef4995f2fce86123490a70b7a320a21ef5cdd19)) * add get_tokens_by_creator view function ([#38](https://github.com/ignaciojulio/Stellar-forge/issues/38)) ([17b7ae0](https://github.com/ignaciojulio/Stellar-forge/commit/17b7ae09f4e8bca9660d61389704a18eab50a42f)) * add global toast notification system ([ea22272](https://github.com/ignaciojulio/Stellar-forge/commit/ea22272f16cffdd0390b85ceb56a54fd0fbf519e)) * Add husky + lint-staged pre-commit hooks ([#59](https://github.com/ignaciojulio/Stellar-forge/issues/59)) ([b11c468](https://github.com/ignaciojulio/Stellar-forge/commit/b11c4682e0bf0fbcf4b9885237b135142211c366)) * add Husky pre-commit and pre-push hooks ([#533](https://github.com/ignaciojulio/Stellar-forge/issues/533)) ([c232169](https://github.com/ignaciojulio/Stellar-forge/commit/c232169967c5bcf58d07aeb4885efeed39444ce0)) * add i18n foundation with react-i18next ([0f8c270](https://github.com/ignaciojulio/Stellar-forge/commit/0f8c2706990f5b6b6ce9f4c17876efee909929b1)) * add isValidIPFSUri validation utility and SetMetadataForm ([#33](https://github.com/ignaciojulio/Stellar-forge/issues/33)) ([5ba129f](https://github.com/ignaciojulio/Stellar-forge/commit/5ba129f8148add491d6dfd406138a3a3ab3a7f1c)) * add isValidIPFSUri validation utility and SetMetadataForm ([#33](https://github.com/ignaciojulio/Stellar-forge/issues/33)) ([9e76fc4](https://github.com/ignaciojulio/Stellar-forge/commit/9e76fc48a45c3512ffcc7e9c5edffae81dd0fdf6)) * Add mainnet deployment checklist modal ([#35](https://github.com/ignaciojulio/Stellar-forge/issues/35)) ([d3e8f2d](https://github.com/ignaciojulio/Stellar-forge/commit/d3e8f2dfd04536bc5fede24ca84d1e0d416c8e39)) * add MetadataAlreadySet guard in set_metadata ([ebbdd65](https://github.com/ignaciojulio/Stellar-forge/commit/ebbdd65360b829419d112b4dc8544c0396502a65)) * add MintForm component with address validation and mintTokens service ([ac9df39](https://github.com/ignaciojulio/Stellar-forge/commit/ac9df395c2e4b4ad710f86211f0ee626e76238e0)) * add network switching support ([#680](https://github.com/ignaciojulio/Stellar-forge/issues/680)) ([60e9f3f](https://github.com/ignaciojulio/Stellar-forge/commit/60e9f3fb185c5be0e93d0763c1ada5c6818ec3f3)) * add OG tags, react-router-dom, clippy CI, and npm ci ([24d091c](https://github.com/ignaciojulio/Stellar-forge/commit/24d091c957c65e2b03eb374edfeb9f62c780d969)), closes [#54](https://github.com/ignaciojulio/Stellar-forge/issues/54) [#56](https://github.com/ignaciojulio/Stellar-forge/issues/56) [#68](https://github.com/ignaciojulio/Stellar-forge/issues/68) [#85](https://github.com/ignaciojulio/Stellar-forge/issues/85) * add pause/unpause admin function to factory contract ([#39](https://github.com/ignaciojulio/Stellar-forge/issues/39)) ([5a5c965](https://github.com/ignaciojulio/Stellar-forge/commit/5a5c9657eb01f741a73fd68b07e8c129c0b72494)) * add polling, last-updated indicator, and refresh to transaction history ([ac79943](https://github.com/ignaciojulio/Stellar-forge/commit/ac799436d088dc8a3876b6b1f8f1f3bda7e57e9e)), closes [#752](https://github.com/ignaciojulio/Stellar-forge/issues/752) * add Prettier, fix all TS errors, add CI/CD pipeline, add formatAddress and Checkbox UI component ([a11180e](https://github.com/ignaciojulio/Stellar-forge/commit/a11180e10be6c60a668889a4ca85c4056e65db23)) * add PWA support with vite-plugin-pwa ([#81](https://github.com/ignaciojulio/Stellar-forge/issues/81)) ([547110c](https://github.com/ignaciojulio/Stellar-forge/commit/547110c7a3bf0b9308433e6541a72851315dbc7f)) * add reentrancy guard to create_token with Error::Reentrancy variant ([986de4b](https://github.com/ignaciojulio/Stellar-forge/commit/986de4be908dde9aca2df9497827bd4e57c72188)) * add reusable Modal base component ([#527](https://github.com/ignaciojulio/Stellar-forge/issues/527)) ([e19c519](https://github.com/ignaciojulio/Stellar-forge/commit/e19c519d5362139603878ae605d798d0f32d4885)) * add reusable Modal base component ([#527](https://github.com/ignaciojulio/Stellar-forge/issues/527)) ([f605b53](https://github.com/ignaciojulio/Stellar-forge/commit/f605b537b184538356ec3f5dfaf6e77a7023ec68)) * add robots.txt, sitemap.xml, and meta description for SEO ([de6bb1c](https://github.com/ignaciojulio/Stellar-forge/commit/de6bb1ca190af7144dbcf42c4e375fb037629e40)) * add robust useClipboard hook and refactor dashboard ([7149392](https://github.com/ignaciojulio/Stellar-forge/commit/7149392879177afb4890d27e84fcafd74993380c)), closes [#26](https://github.com/ignaciojulio/Stellar-forge/issues/26) * add secure Admin Panel for factory fee management ([39e28a5](https://github.com/ignaciojulio/Stellar-forge/commit/39e28a5d8ea44f66da35c9103d0283f8ebbca68a)) * Add security disclosure policy ([#47](https://github.com/ignaciojulio/Stellar-forge/issues/47)) ([096fcd7](https://github.com/ignaciojulio/Stellar-forge/commit/096fcd7db59170ab86e51293dfd1c261de5b856c)) * Add Select UI component with accessibility and dark mode support ([412420a](https://github.com/ignaciojulio/Stellar-forge/commit/412420aaf6de26d11d299790904564aada4d9982)) * add semantic release for automated versioning ([bcd42fe](https://github.com/ignaciojulio/Stellar-forge/commit/bcd42fe4045889bb25e4c751a1999444d91b9e48)) * add sitemap generation script and update prebuild script to include it ([8948663](https://github.com/ignaciojulio/Stellar-forge/commit/89486632614de04d357937eebec497dfcd8656bc)) * add skeleton loaders and a11y improvements ([#475](https://github.com/ignaciojulio/Stellar-forge/issues/475), [#477](https://github.com/ignaciojulio/Stellar-forge/issues/477)) ([1ea1e54](https://github.com/ignaciojulio/Stellar-forge/commit/1ea1e54760f52c844e342691ade1968f9d9f3db4)) * add skeleton loaders for TokenExplorer and Dashboard ([42867fe](https://github.com/ignaciojulio/Stellar-forge/commit/42867fe60d0626302ff16fe9f97da65e7ca44aa9)), closes [#735](https://github.com/ignaciojulio/Stellar-forge/issues/735) * add skeleton-loaders spec (requirements, design, tasks) ([ec3a9ed](https://github.com/ignaciojulio/Stellar-forge/commit/ec3a9edccdea9cb861af1c086b32f0e45188e011)) * add social sharing for newly created tokens ([#521](https://github.com/ignaciojulio/Stellar-forge/issues/521)) ([7e2cdcc](https://github.com/ignaciojulio/Stellar-forge/commit/7e2cdcc311980edab824795b7afb3fa37f5bf470)) * add Soroban benchmark harness for resource cost tracking ([#968](https://github.com/ignaciojulio/Stellar-forge/issues/968)) ([91b504f](https://github.com/ignaciojulio/Stellar-forge/commit/91b504f5f459c5e5491cf181a30c00c4611bfb1d)), closes [#12](https://github.com/ignaciojulio/Stellar-forge/issues/12) * add soroban-token-sdk audit spec ([ae3686a](https://github.com/ignaciojulio/Stellar-forge/commit/ae3686a6aa6a9ea90c65cdac09212cbc17484e50)) * add stellar contract optimize to deployment workflow ([4a56338](https://github.com/ignaciojulio/Stellar-forge/commit/4a5633820d68a264160311da5c161e36fa3dec9d)) * add stellarExplorerUrl utility and wire explorer links ([d043699](https://github.com/ignaciojulio/Stellar-forge/commit/d04369980cab1a6f5a29c557b4857fdec90d0b43)) * add Storybook stories for ConfirmModal, ProgressIndicator, and InsufficientBalanceWarning ([a25343e](https://github.com/ignaciojulio/Stellar-forge/commit/a25343ef58f82389e1ee34d6e81304cf0bcba9c8)) * add Storybook with stories for all UI components ([564a5b8](https://github.com/ignaciojulio/Stellar-forge/commit/564a5b8747b18cecec42b800a28dd3b4845a51e6)) * add Terms of Service acceptance modal before first transaction ([#529](https://github.com/ignaciojulio/Stellar-forge/issues/529)) ([53a7bc8](https://github.com/ignaciojulio/Stellar-forge/commit/53a7bc8473d5bfc7ddc0b4c8bb6b34d28c6f0b10)) * add Terms of Service acceptance modal before first transaction ([#529](https://github.com/ignaciojulio/Stellar-forge/issues/529)) ([b2ddf76](https://github.com/ignaciojulio/Stellar-forge/commit/b2ddf76f997e7098519c2db85ef732176cc34ecf)) * add testnet faucet integration via Friendbot ([#519](https://github.com/ignaciojulio/Stellar-forge/issues/519)) ([f7c2965](https://github.com/ignaciojulio/Stellar-forge/commit/f7c29653018bc9422437a517de60b021c9d9fd94)) * add token event history with pagination and event details display ([9196fdf](https://github.com/ignaciojulio/Stellar-forge/commit/9196fdfa879502ba361811ad750a45319afee0e4)) * add token search, filter, and sort to Dashboard ([a17250a](https://github.com/ignaciojulio/Stellar-forge/commit/a17250a7e7415c736f7abfb26c24ad63cce35e51)) * add token search, filter, and sort to dashboard ([#64](https://github.com/ignaciojulio/Stellar-forge/issues/64)) ([eb80749](https://github.com/ignaciojulio/Stellar-forge/commit/eb80749f6deacb0dab54ba40af95e1d1693cdb81)) * add TokenDashboard with pagination, search, and Explorer links ([d7ce574](https://github.com/ignaciojulio/Stellar-forge/commit/d7ce574bcb1e0b4670e1cc9c2d895946776aaf1a)) * add TokenExplorer component with search and pagination ([4b21179](https://github.com/ignaciojulio/Stellar-forge/commit/4b211798c41fbfb492613f48e66a6bb174a37da1)) * add TokenMetadata display component ([658efc0](https://github.com/ignaciojulio/Stellar-forge/commit/658efc0c1321a6b4794c0682e75894e0a45e66aa)) * Add transaction retry logic with exponential backoff ([#62](https://github.com/ignaciojulio/Stellar-forge/issues/62)) ([f0d8f02](https://github.com/ignaciojulio/Stellar-forge/commit/f0d8f02c2d45a8649b21ef2a83f69fc757033bba)) * Add TransactionHistory component and useTransactionHistory hook for Stellar token operations ([f8fed91](https://github.com/ignaciojulio/Stellar-forge/commit/f8fed914347008992fae259b506952c2d0c7ae88)) * Add TransactionStatus component and tests ([4637fb8](https://github.com/ignaciojulio/Stellar-forge/commit/4637fb8c495482a5609f2f90ea6a5309aa09dd57)) * add transfer_admin function with tests ([347d54f](https://github.com/ignaciojulio/Stellar-forge/commit/347d54fbbf885985964f991d51ed4c6807dcd071)) * add TTL management for all Soroban storage writes ([7b34532](https://github.com/ignaciojulio/Stellar-forge/commit/7b3453265f83cbc0fe7f0dcaf8a736f21902887c)) * add UI barrel export and update all imports ([2e4fbe0](https://github.com/ignaciojulio/Stellar-forge/commit/2e4fbe0e006564fee5c51396ba9137e9de42793c)) * add update_admin function to token factory contract ([#479](https://github.com/ignaciojulio/Stellar-forge/issues/479)) ([5db1fe4](https://github.com/ignaciojulio/Stellar-forge/commit/5db1fe4734dc41788232efd3e11397bf74bd2954)) * add useDebounce hook, apply to MintForm/BurnForm/Dashboard, fix build ([e8727e1](https://github.com/ignaciojulio/Stellar-forge/commit/e8727e16b4f1c50beca6977389720fe1497b192b)) * add useFactoryState hook, coverage thresholds, and CI workflow ([15b366d](https://github.com/ignaciojulio/Stellar-forge/commit/15b366d315366e901a05351e7d200da9330bd39d)) * Add useLocalStorage hook and tests ([56eac71](https://github.com/ignaciojulio/Stellar-forge/commit/56eac719547fd75bdd916da05ab5a8bcde6fc663)) * add useTokenBalance hook and fix TypeScript errors ([43792b7](https://github.com/ignaciojulio/Stellar-forge/commit/43792b7593c29fff7929ca1c52e9096b32c4e3ef)) * add useTokens pagination and useTokenInfo hook ([a473194](https://github.com/ignaciojulio/Stellar-forge/commit/a473194fbf697aa6feeed853de1253c30d8947df)) * add VITE_TOKEN_WASM_HASH to env validation and fix duplicate import ([b027cc2](https://github.com/ignaciojulio/Stellar-forge/commit/b027cc256bc2c3381cedcfab7b48a81805e7f41f)) * add wallet token portfolio dashboard ([cc28ab9](https://github.com/ignaciojulio/Stellar-forge/commit/cc28ab9f2d9505077bfbc430aac870983c6979f7)) * add WalletButton UI component and integrate into App.tsx header ([cf20f69](https://github.com/ignaciojulio/Stellar-forge/commit/cf20f695cb93d60d96fa4f5f1592f1395ac2ef4f)) * add wasm-opt post-processing for contract binary ([de1f779](https://github.com/ignaciojulio/Stellar-forge/commit/de1f779897d4ddbc938d9d1d58e1020d352081a0)) * add whitelist for fee-free token creation ([59c0f59](https://github.com/ignaciojulio/Stellar-forge/commit/59c0f598ecfd74fa1cfe5a036a8ac22418e0d823)) * **api:** add off-chain contract event indexer ([#943](https://github.com/ignaciojulio/Stellar-forge/issues/943)) ([19a9544](https://github.com/ignaciojulio/Stellar-forge/commit/19a9544f64827539f6c763c7f9c5b0df725b3cf0)) * **api:** persist contract events in the indexer store (supersedes [#1138](https://github.com/ignaciojulio/Stellar-forge/issues/1138)) ([#1154](https://github.com/ignaciojulio/Stellar-forge/issues/1154)) ([45ad5bc](https://github.com/ignaciojulio/Stellar-forge/commit/45ad5bc0af5d6a8079746f03ff2399fc47be653b)) * build token creation form UI on home page ([#667](https://github.com/ignaciojulio/Stellar-forge/issues/667)) ([0311381](https://github.com/ignaciojulio/Stellar-forge/commit/03113810e45d1c622661e7b3e6a9d19222d302a1)) * Burn Tokens UI with danger-zone styling and safety confirmation ([#675](https://github.com/ignaciojulio/Stellar-forge/issues/675)) ([f894e11](https://github.com/ignaciojulio/Stellar-forge/commit/f894e116c013786ca1ddd4bce9a7af607a96c418)) * **burn:** add data-testid attributes for balance display, Max button, and validation error ([0c72f14](https://github.com/ignaciojulio/Stellar-forge/commit/0c72f141647c5c6b77faca6fbd4ea22c696d4b5e)), closes [#755](https://github.com/ignaciojulio/Stellar-forge/issues/755) [#755](https://github.com/ignaciojulio/Stellar-forge/issues/755) * **ci:** add access-control documentation drift check ([#1112](https://github.com/ignaciojulio/Stellar-forge/issues/1112)) ([#1148](https://github.com/ignaciojulio/Stellar-forge/issues/1148)) ([7b41cfd](https://github.com/ignaciojulio/Stellar-forge/commit/7b41cfda11bb62a91fc6bbcfbfd5bf3063f69f9f)) * **ci:** add reproducible WASM hash verification workflow for mainnet deployments ([#950](https://github.com/ignaciojulio/Stellar-forge/issues/950)) ([abcdbce](https://github.com/ignaciojulio/Stellar-forge/commit/abcdbceaf28f24c23aaa963bf69c9a0b27b47fd5)), closes [#940](https://github.com/ignaciojulio/Stellar-forge/issues/940) * comprehensive contract tests + fix lib.rs compilation errors ([#677](https://github.com/ignaciojulio/Stellar-forge/issues/677)) ([83a8f8f](https://github.com/ignaciojulio/Stellar-forge/commit/83a8f8f55ddbdd49046ce8ddb84be53360e16699)) * **contract:** add batch token creation ([#487](https://github.com/ignaciojulio/Stellar-forge/issues/487)) ([b50b182](https://github.com/ignaciojulio/Stellar-forge/commit/b50b18207842a21052d69f1a85c67f893e36231a)) * **contract:** add optional max supply cap to tokens ([#483](https://github.com/ignaciojulio/Stellar-forge/issues/483)) ([dc00eb6](https://github.com/ignaciojulio/Stellar-forge/commit/dc00eb6f44e00cdc437c4824c474cb227837dfef)) * **contract:** add treasury fee split mechanism ([#485](https://github.com/ignaciojulio/Stellar-forge/issues/485)) ([d933acf](https://github.com/ignaciojulio/Stellar-forge/commit/d933acfc8876eb3f0db155a0ec7149d04bc2b323)) * **contract:** emit events for all state-changing functions ([#482](https://github.com/ignaciojulio/Stellar-forge/issues/482)) ([0a375a8](https://github.com/ignaciojulio/Stellar-forge/commit/0a375a8a115d2c580d2c1e801e6936102eba4d19)) * **contracts:** add schema versioning and implement migrate ([7293485](https://github.com/ignaciojulio/Stellar-forge/commit/7293485078366ff93f43ebb358360ad335dbde12)) * **contracts:** add schema versioning and implement migrate ([a9fbd2e](https://github.com/ignaciojulio/Stellar-forge/commit/a9fbd2e525ce9f459d28cfdbc126c3a50ab68919)) * create WalletConnectButton component ([766c6b9](https://github.com/ignaciojulio/Stellar-forge/commit/766c6b92eb995d711458cf20585591120ced5d91)) * enable TypeScript strict mode ([#531](https://github.com/ignaciojulio/Stellar-forge/issues/531)) ([bb3ad84](https://github.com/ignaciojulio/Stellar-forge/commit/bb3ad84b61317ddca30bc365f9eb93d4bfc76b28)) * enforce u128 for initial_supply and add InvalidTokenParams validation [#517](https://github.com/ignaciojulio/Stellar-forge/issues/517) ([67582a3](https://github.com/ignaciojulio/Stellar-forge/commit/67582a37491bb016ab44a09f6539321b776a29d0)) * enhance security, add contract upgrade support, and integrate E2E tests into CI ([5695ca0](https://github.com/ignaciojulio/Stellar-forge/commit/5695ca0f03c7e7473d50b32cc8be6ca7c41ea560)) * enhance token factory with DataKey enum and update storage access ([e0c24c0](https://github.com/ignaciojulio/Stellar-forge/commit/e0c24c04b0f0a9c6b9ea74afd0778915d2256a6f)) * **explorer:** add Stellar Expert deep links for accounts, transactions, and contracts ([6d509a4](https://github.com/ignaciojulio/Stellar-forge/commit/6d509a4719802c15ba7a25454bd1cb63e51f4fdc)) * extract contract error mapping to contractErrors.ts ([0420e56](https://github.com/ignaciojulio/Stellar-forge/commit/0420e56d1fa61c2f6923fd51f34e199f9d0aa058)) * **factory:** add offset/limit pagination to get_tokens_by_creator ([#729](https://github.com/ignaciojulio/Stellar-forge/issues/729)) ([3f88aae](https://github.com/ignaciojulio/Stellar-forge/commit/3f88aaeb44917ccbcc07bfa5bb6c8fa8c69f1bec)) * **frontend:** add ipfs gateway URL resolver and stabilize frontend checks ([005ff3f](https://github.com/ignaciojulio/Stellar-forge/commit/005ff3f36d8e792c1aae283a908f8e34f4540440)) * **frontend:** block writes on network mismatch in metadata + admin forms ([#906](https://github.com/ignaciojulio/Stellar-forge/issues/906)) ([f6e88f3](https://github.com/ignaciojulio/Stellar-forge/commit/f6e88f390e3f87e5abd34ce35989c5907b83bd98)) * **frontend:** implement i18n support with es and pt translations ([dcbc1b2](https://github.com/ignaciojulio/Stellar-forge/commit/dcbc1b2838650f7d285d92ffec61a226f0dd28df)) * **frontend:** implement paginated global token listing (getAllTokens) ([#1028](https://github.com/ignaciojulio/Stellar-forge/issues/1028)) ([0e1b51e](https://github.com/ignaciojulio/Stellar-forge/commit/0e1b51e2590b3c23468f893f13e77e5f2eeb592a)), closes [#1017](https://github.com/ignaciojulio/Stellar-forge/issues/1017) * **frontend:** verify deployed token WASM hash against factory state ([#986](https://github.com/ignaciojulio/Stellar-forge/issues/986)) ([6d1566a](https://github.com/ignaciojulio/Stellar-forge/commit/6d1566a8416e1ac44860fbb6a1395e062548141a)), closes [#925](https://github.com/ignaciojulio/Stellar-forge/issues/925) [hi#severity](https://github.com/hi/issues/severity) [#982](https://github.com/ignaciojulio/Stellar-forge/issues/982) [#984](https://github.com/ignaciojulio/Stellar-forge/issues/984) [#984](https://github.com/ignaciojulio/Stellar-forge/issues/984) [#984](https://github.com/ignaciojulio/Stellar-forge/issues/984) [#982](https://github.com/ignaciojulio/Stellar-forge/issues/982) * **frontend:** wire network-mismatch banner + FAQ page, drop dead duplicate, fix repo URLs ([901021f](https://github.com/ignaciojulio/Stellar-forge/commit/901021f9ce8eac98d3d50bf5970006818bd835f8)) * gate wallet and metadata actions behind ToS ([8318679](https://github.com/ignaciojulio/Stellar-forge/commit/8318679a05a77d2324ef1032e5a8735df50de38b)) * global error boundary, toast system, and service error cleanup ([19dbf05](https://github.com/ignaciojulio/Stellar-forge/commit/19dbf055d8666ad6c29cfb08330d54dba1c37da2)) * global error boundary, toast system, and service error cleanup ([6ca83ad](https://github.com/ignaciojulio/Stellar-forge/commit/6ca83ad43e48b722d1decf01505c7df900926b39)) * **hooks:** add LRU eviction to useTokens module-level cache ([#967](https://github.com/ignaciojulio/Stellar-forge/issues/967)) ([25ca799](https://github.com/ignaciojulio/Stellar-forge/commit/25ca799e4b03c97a3d52752f7ccbdda0e0820816)) * **hooks:** add useTransaction hook for transaction lifecycle ([#489](https://github.com/ignaciojulio/Stellar-forge/issues/489)) ([18debc3](https://github.com/ignaciojulio/Stellar-forge/commit/18debc33c6bc0dd55ebb830be061c32663b9b2bd)) * implement BigInt-safe formatting utilities ([fc30b37](https://github.com/ignaciojulio/Stellar-forge/commit/fc30b3739e3829c47c164b5fc3ed766a720160e7)) * implement burn_enabled per-token flag ([7d265e8](https://github.com/ignaciojulio/Stellar-forge/commit/7d265e844a3490af982d1665e0d6d17287a21ad1)) * Implement Freighter Wallet Integration ([b91a66e](https://github.com/ignaciojulio/Stellar-forge/commit/b91a66ea7d8ca5e98b04da98c036bde9103896a8)) * implement Freighter wallet integration ([#666](https://github.com/ignaciojulio/Stellar-forge/issues/666)) ([8416cfd](https://github.com/ignaciojulio/Stellar-forge/commit/8416cfd8dd76863b1142ec6662bd063a5eb5c2c8)) * implement global error boundary ([#473](https://github.com/ignaciojulio/Stellar-forge/issues/473)) ([d83fe50](https://github.com/ignaciojulio/Stellar-forge/commit/d83fe50a891c8e6b0ddf9657f533068d85ae8d9d)) * implement Horizon API retry logic with exponential backoff and Retry-After handling [#499](https://github.com/ignaciojulio/Stellar-forge/issues/499) ([cfd31b5](https://github.com/ignaciojulio/Stellar-forge/commit/cfd31b5b7d3cb95c5a4ac367ed93ec95da884a5f)) * implement mobile-responsive design for all components ([cfdf285](https://github.com/ignaciojulio/Stellar-forge/commit/cfdf285acfd73648d3ddb9189c9603994e422016)) * implement pagination for token dashboard ([#29](https://github.com/ignaciojulio/Stellar-forge/issues/29)) ([9aa41b1](https://github.com/ignaciojulio/Stellar-forge/commit/9aa41b1489fc9a4b07d3be68c6f2521197a402f0)) * implement Pinata IPFS upload service with tests ([6b33365](https://github.com/ignaciojulio/Stellar-forge/commit/6b33365592b88e4835ff4b0728bfd33fe5c65504)) * implement Pinata IPFS upload with progress tracking and error handling ([53b3684](https://github.com/ignaciojulio/Stellar-forge/commit/53b368444cefd75a4ab1ae0ad0856244b78d0d59)) * implement responsive mobile layout (issue [#616](https://github.com/ignaciojulio/Stellar-forge/issues/616)) ([49ddf41](https://github.com/ignaciojulio/Stellar-forge/commit/49ddf41412597f035283a56ce005728838a7bf8e)) * implement reusable CopyButton component with Clipboard API integration ([2f8b716](https://github.com/ignaciojulio/Stellar-forge/commit/2f8b71673d4bcfed75cea83aba41ba75c7d39d59)) * implement Soroban contract invocation logic in StellarService ([3a4af37](https://github.com/ignaciojulio/Stellar-forge/commit/3a4af37b668bc7dd633dca8f80ab34230a160da8)) * implement Soroban RPC interactions in stellar.ts ([42c9d18](https://github.com/ignaciojulio/Stellar-forge/commit/42c9d18240eccc884dcee88d0e56e1897fe2a7de)) * implement StellarService with full Soroban RPC integration ([3f0a520](https://github.com/ignaciojulio/Stellar-forge/commit/3f0a52060e1264e34239d59ede6542c9a2791bf6)) * implement token burn UI and service ([a199523](https://github.com/ignaciojulio/Stellar-forge/commit/a19952319a4e6efc77ccf128bd72ac0fe6fdc2e3)) * implement Token Dashboard page ([#673](https://github.com/ignaciojulio/Stellar-forge/issues/673)) ([c3b204c](https://github.com/ignaciojulio/Stellar-forge/commit/c3b204c15fcca7827fd91c69f97cc0708395e3a8)) * implement token detail page ([a79ef19](https://github.com/ignaciojulio/Stellar-forge/commit/a79ef19b62d87c742306511e4c6d4194f47f4301)) * implement TokenDashboard page with TokenCard component and index-based pagination ([4af373b](https://github.com/ignaciojulio/Stellar-forge/commit/4af373b0d6ae3928d8c9f09f6fec2e181c1fd857)) * implement TokenDetail page ([#470](https://github.com/ignaciojulio/Stellar-forge/issues/470)) ([71ca751](https://github.com/ignaciojulio/Stellar-forge/commit/71ca75186290f61636b5217b0e4817d8d70d5860)) * implement TokenDetail page with IPFS metadata, mint/burn/set-metadata inline forms, and 404 state ([9c7f0eb](https://github.com/ignaciojulio/Stellar-forge/commit/9c7f0eb21f1218f5ad84e0026eb007b6760fcf49)) * implement transaction status tracking ([#681](https://github.com/ignaciojulio/Stellar-forge/issues/681)) ([3c0a793](https://github.com/ignaciojulio/Stellar-forge/commit/3c0a79320128a7e0ebe31f2c6c2091dedbabc790)) * implement update_treasury in token-factory ([0c381d3](https://github.com/ignaciojulio/Stellar-forge/commit/0c381d364fc58b048d6ac3b5a3c8e2fdb014a4d4)) * implement useLocalStorage for dark mode context and add tests for useDarkMode hook ([f04664c](https://github.com/ignaciojulio/Stellar-forge/commit/f04664cf78bf2f23ca284ae6d8f7807432928a30)) * implement useLocalStorage hook and integrate for Dark Mode, Network, and Language [#518](https://github.com/ignaciojulio/Stellar-forge/issues/518) ([9a25f84](https://github.com/ignaciojulio/Stellar-forge/commit/9a25f843fb0e4aa8c1cd12c84a1e045243386228)) * implement useTokens hook with parallel fetching and cache ([d9cc12d](https://github.com/ignaciojulio/Stellar-forge/commit/d9cc12d47d2b1f03c90a062a7a4c43e5a8b9d16f)), closes [#16](https://github.com/ignaciojulio/Stellar-forge/issues/16) * implement wallet auto-reconnect and Freighter event listeners ([4cba9dc](https://github.com/ignaciojulio/Stellar-forge/commit/4cba9dc763125c9a8fa920a14aa94eb91f241835)) * integrate Sentry error tracking for failed contract calls ([e0cb9f9](https://github.com/ignaciojulio/Stellar-forge/commit/e0cb9f995c7d04606937ca8c1df0cd923e71c96d)), closes [#757](https://github.com/ignaciojulio/Stellar-forge/issues/757) * **ipfs:** implement IPFS metadata upload via Pinata ([#669](https://github.com/ignaciojulio/Stellar-forge/issues/669)) ([949bcc3](https://github.com/ignaciojulio/Stellar-forge/commit/949bcc3dc44b247c9fc084edd83cac814a510dd2)) * Mint Tokens UI with RHF validation and token dropdown ([#674](https://github.com/ignaciojulio/Stellar-forge/issues/674)) ([223235d](https://github.com/ignaciojulio/Stellar-forge/commit/223235d8b6d6995d04610e0103b44853d267c4f4)) * mobile responsive design ([90814c2](https://github.com/ignaciojulio/Stellar-forge/commit/90814c291d43fc2cc5cb1082eaedb49d70b8f228)) * **monitoring:** add monitoring docs and sentry dependency ([e043a5c](https://github.com/ignaciojulio/Stellar-forge/commit/e043a5c4778490cdc5f61a5a6a8bec84f04a97e0)) * **monitoring:** add Sentry, uptime monitoring, and health endpoint ([cee6369](https://github.com/ignaciojulio/Stellar-forge/commit/cee6369984c5aa792f631cb2d99f5387f523a675)) * move wallet state to global React Context ([6c24340](https://github.com/ignaciojulio/Stellar-forge/commit/6c243409493ecaf75dcaf7020b07e51fa764489e)) * network switcher with mainnet warning and localStorage persistence ([5fa8531](https://github.com/ignaciojulio/Stellar-forge/commit/5fa8531fe7735ea781dfdcc3d0393e43b2392138)) * pause/unpause factory already implemented; add burn-while-paused test ([#480](https://github.com/ignaciojulio/Stellar-forge/issues/480)) ([4dd54ca](http…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
fuzz_burn.rspreviously reimplemented burn's arithmetic inline (saturating_subon plaini128s), never calling the actualTokenFactory::burnentrypoint — described accurately elsewhere in this same fuzz suite as a "pure reimplementation." No target importedsoroban_sdkorTokenFactoryat all, since the contract crate wasn't even a fuzz dependency (fuzz/Cargo.tomlonly listedlibfuzzer-sysandarbitrary).contracts/token-factory/testutils-lib, a thinrlib-only crate that compiles the contract's ownsrc/lib.rsso it can be depended on as an ordinary library. This is a separate crate rather than adding"rlib"to the contract's owncrate-type— I tried that first and it broke the production WASM build's fat-LTO size optimization (measured locally: ~42 KB → ~68 KB, over the 64 KB budgetscripts/check-wasm-size.mjsenforces). The real contract package'sCargo.tomlis unchanged (crate-type = ["cdylib"]).TokenFactory::fuzz_seed_token, a#[cfg(feature = "testutils")]-only plain associated function (not a#[contractimpl]entrypoint — compiled out of the production build, invisible on-chain, documented indocs/contract-abi.md's new "Test/fuzz-only helpers" section) that registers a token in factory storage exactly ascreate_tokenwould have. It uses a real Stellar Asset Contract as the token — the same bypass the crate's ownseed_tokentest helper already uses, since no real token WASM exists anywhere in this repo to install at atoken_wasm_hashin a native test/fuzz environment (see the existing note onmod benchinlib.rs).fuzz_burn.rsnow drives the realTokenFactory::burnentrypoint via the generatedTokenFactoryClientagainst a livesoroban_sdk::testutils::Env, asserting each result against an independently-computed oracle rather than reimplementing burn's own logic.Scope: this covers
fuzz_burn.rs, the simplest of the flagged targets.fuzz_fee_arithmetic.rs(plus auditingfuzz_mint_tokens.rs/fuzz_set_metadata.rsfor the same pattern, and new targets forcreate_tokens_batch/distribute_fee/migrate) are left for follow-up — each needs live fee-split registration and multi-recipient balance tracking, a substantially larger harness than burn's single-token case.closes #1098
Test plan
cargo fmt -- --check— cleancargo test(contracts/token-factory) — 184/184 passedcargo clippy -- -D warnings— cleancargo build --target wasm32v1-none --release— WASM size unchanged at 41,670 bytes (limit 65,536)cargo +nightly build --release) still build, including the 4 untouched onesfuzz_burnfor 159,607 iterations against the real, correct contract — zero crashes/false positivesburn'samount > balancecheck locally, confirmed the rewritten target catches it (the underlying token rejects the resulting over-balance burn and the fuzz target panics on the unexpected result) within the first few thousand runs, then reverted the regression before committingscripts/check-abi-doc-drift.sh,scripts/check-validation-drift.sh,node scripts/check-vercel-cron.mjsall passnpm run test -- --run) — 702/702 passed