Skip to content

fix(contracts): fuzz the real burn entrypoint, not a reimplementation - #1137

Merged
Ejirowebfi merged 1 commit into
Favourorg:mainfrom
hman38705:fix/1098-fuzz-real-contract
Aug 24, 2026
Merged

fix(contracts): fuzz the real burn entrypoint, not a reimplementation#1137
Ejirowebfi merged 1 commit into
Favourorg:mainfrom
hman38705:fix/1098-fuzz-real-contract

Conversation

@hman38705

@hman38705 hman38705 commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Summary

fuzz_burn.rs previously reimplemented burn's arithmetic inline (saturating_sub on plain i128s), never calling the actual TokenFactory::burn entrypoint — described accurately elsewhere in this same fuzz suite as a "pure reimplementation." No target imported soroban_sdk or TokenFactory at all, since the contract crate wasn't even a fuzz dependency (fuzz/Cargo.toml only listed libfuzzer-sys and arbitrary).

  • 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 — 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 budget scripts/check-wasm-size.mjs enforces). The real contract package's Cargo.toml is unchanged (crate-type = ["cdylib"]).
  • Adds 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 in docs/contract-abi.md's new "Test/fuzz-only helpers" section) that registers a token in factory storage exactly as create_token would have. It uses a real Stellar Asset Contract as the token — the same bypass the crate's own seed_token test helper already uses, since no real token WASM exists anywhere in this repo to install at a token_wasm_hash in a native test/fuzz environment (see the existing note on mod bench 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.

Scope: this covers fuzz_burn.rs, the simplest of the flagged targets. fuzz_fee_arithmetic.rs (plus auditing fuzz_mint_tokens.rs/fuzz_set_metadata.rs for the same pattern, and 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.

closes #1098

Test plan

  • cargo fmt -- --check — clean
  • cargo test (contracts/token-factory) — 184/184 passed
  • cargo clippy -- -D warnings — clean
  • cargo build --target wasm32v1-none --release — WASM size unchanged at 41,670 bytes (limit 65,536)
  • All 5 fuzz targets (cargo +nightly build --release) still build, including the 4 untouched ones
  • Ran fuzz_burn for 159,607 iterations against the real, correct contract — zero crashes/false positives
  • Deliberately weakened burn's amount > balance check 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 committing
  • scripts/check-abi-doc-drift.sh, scripts/check-validation-drift.sh, node scripts/check-vercel-cron.mjs all pass
  • Frontend test suite (npm run test -- --run) — 702/702 passed

…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.
@Ejirowebfi
Ejirowebfi merged commit be8a342 into Favourorg:main Aug 24, 2026
20 checks passed
github-actions Bot pushed a commit that referenced this pull request Aug 24, 2026
## [1.5.9](v1.5.8...v1.5.9) (2026-08-24)

### Bug Fixes

* **contracts:** fuzz the real burn entrypoint, not a reimplementation ([#1098](#1098)) ([#1137](#1137)) ([be8a342](be8a342))
@github-actions

Copy link
Copy Markdown

🎉 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…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🟠 Fuzz harnesses fuzz a reimplementation, not the real contract

2 participants