Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
d83ba32
feat: migrate to Tangle v2 evm, migrate dapp, cloud, leaderboard, rem…
drewstone Dec 10, 2025
d4eafd6
fix(leaderboard): update local env script and GraphQL queries for Envio
drewstone Dec 10, 2025
2bd47b7
fix: resolve remaining type errors after v2 EVM migration
drewstone Dec 10, 2025
35be6a9
fix(tangle-cloud): stub service tx hooks for EVM migration
drewstone Dec 10, 2025
b6ddca0
fix(tangle-cloud): fix empty function lint errors
drewstone Dec 10, 2025
872bf3b
fix(tangle-cloud): resolve typecheck and lint errors for EVM migration
drewstone Dec 10, 2025
190cd12
feat: add wallet connectors and fix local RPC for EVM
drewstone Dec 10, 2025
7ce9fac
style: format code
drewstone Dec 10, 2025
9cd69e7
feat: integrate RainbowKit for wallet connections
drewstone Dec 10, 2025
7345148
fix: improve wallet button UI and network selector with wagmi hooks
drewstone Dec 10, 2025
9207225
feat: update chains to Local/Base/Base Sepolia and use RainbowKit cha…
drewstone Dec 10, 2025
5e25c2f
feat(bridge): replace custom Hyperlane bridge with Li.Fi widget
drewstone Dec 10, 2025
855d4d9
feat: add NetworkGuard component and improve UI consistency
drewstone Dec 11, 2025
30b5773
chore: remove old leaderboard scripts (moved to scripts/local-env/)
drewstone Dec 11, 2025
06dbf97
feat: add native restaking, migration claims, and on-chain data fallback
drewstone Dec 11, 2025
07e2ed2
feat(migration-claim): add SP1 ZK circuit docs and fix build issues
drewstone Dec 11, 2025
e9b2db4
feat(migration-claim): add claim relayer, scripts, and update gitignore
drewstone Dec 11, 2025
689067d
refactor: migrate from Substrate to EVM-only architecture
drewstone Dec 11, 2025
8135d34
fix(scripts): use chain ID 31337 in activity-generator for local dev
drewstone Dec 11, 2025
9029074
perf(scripts): cache forge compiled artifacts in start-local-env
drewstone Dec 11, 2025
98ffc40
feat(tangle-cloud): add operator management, job submission, rewards,…
drewstone Dec 11, 2025
5614da9
feat: enhance local-env caching and fix lint errors
drewstone Dec 11, 2025
e0fb201
fix: improve GraphQL queries and UI error handling
drewstone Dec 11, 2025
2daf9f6
fix: prevent protocol config errors on non-restaking chains
drewstone Dec 11, 2025
ecb9ce5
fix: lint errors in tangle-dapp and tangle-shared-ui
drewstone Dec 11, 2025
2447f10
chore: envio health
drewstone Dec 11, 2025
e874a67
fix: handle missing RestakeContext gracefully during HMR
drewstone Dec 11, 2025
4beb64a
style: add beautiful loading spinner for restaking page
drewstone Dec 11, 2025
fd949dc
feat: add TokenIcon to all restake asset lists and selectors
drewstone Dec 11, 2025
d8b5083
fix: add native ETH support to on-chain restake assets fallback
drewstone Dec 11, 2025
d64c37f
fix(tangle-shared-ui): resolve circular dependency in restake hooks
drewstone Dec 11, 2025
202250c
fix(tangle-dapp): fix React hooks rules and lint errors in restake
drewstone Dec 11, 2025
176e528
fix(local-env): prevent nonce collision in activity generator
drewstone Dec 11, 2025
a8b0270
feat(local-env): add resume mode and improve CLI
drewstone Dec 11, 2025
e924134
style: format code with prettier
drewstone Dec 11, 2025
91f3eb2
chore: add .nxignore to exclude OpenZeppelin submodules
drewstone Dec 11, 2025
c9cb573
fix(tangle-cloud): resolve typecheck errors in service pages
drewstone Dec 11, 2025
4e437c7
fix(restake): harden metadata/balance fetch paths
drewstone Dec 12, 2025
74cc416
chore: fix claim relayer setup
drewstone Dec 12, 2025
3015401
chore: change port
drewstone Dec 12, 2025
7c4bd9f
docs: add AGENTS instructions
drewstone Dec 13, 2025
3c585d8
chore(local-env): make start-local-env resilient
drewstone Dec 13, 2025
2c84e90
ui: reduce flicker and restore glass cards
drewstone Dec 13, 2025
6699f8f
restake: fix approvals, native deposits, and wallet wiring
drewstone Dec 13, 2025
fc584a8
dashboard: compute TVL using USD prices
drewstone Dec 13, 2025
1080897
credits: gate credits UI to supported chains
drewstone Dec 13, 2025
938ec7e
fix(claim): remove duplicate merkleProof field
drewstone Dec 13, 2025
bd413a3
local-env: fix fund command for large values and missing token code
drewstone Dec 13, 2025
d75672b
fix(liquid-staking): approval + redeem requests
drewstone Dec 13, 2025
bc8b530
fix(restake): onchain balances + execute-ready
drewstone Dec 13, 2025
8dd2e9c
fix(local-env): verify fund balance
drewstone Dec 14, 2025
69b0fb3
local-env: resolve TNT token via operatorBondToken() and validate code
drewstone Dec 14, 2025
dbf3184
ux(dev): prompt switch to local anvil
drewstone Dec 14, 2025
d2c5b07
local-env: reuse canonical TNT for migration
drewstone Dec 14, 2025
f53e73a
local-env: fix fund_account balance parsing
drewstone Dec 14, 2025
0acfc26
local: point dApp to deployed incentives
drewstone Dec 14, 2025
0714d8d
fix(service-request): source contracts from dapp-config
drewstone Dec 15, 2025
a6beb31
fix(local-env): ensure incentives + never fail on multicall
drewstone Dec 15, 2025
c641266
local-env: fix postgres auth before db-setup
drewstone Dec 15, 2025
ef22091
feat(tx): restore tx history + resilient EVM reads
drewstone Dec 15, 2025
3ff58a3
feat(liquid-staking): wire vaults + unify list UI
drewstone Dec 15, 2025
fedef54
chore(format): apply prettier
drewstone Dec 15, 2025
beaebda
fix(local-env): make clean truly clean + reset pg password
drewstone Dec 15, 2025
f8943a3
local-env: retry localtestnet deploy if interrupted
drewstone Dec 15, 2025
4bfac4b
fix(claim): use pubkey-based migration contract + relayer fallback
drewstone Dec 15, 2025
75600f4
fix(local): align contract addresses with LocalTestnet deploy
drewstone Dec 15, 2025
4867a3a
feat(liquid-staking): wire create-vault to shared lists and guard dup…
drewstone Dec 15, 2025
7d6ca36
fix(tx): improve contract write simulation + revert decoding
drewstone Dec 15, 2025
3e16b1e
fix(vite): stabilize fs allowlist and prebundle polkadot extension
drewstone Dec 15, 2025
2a6935f
fix(claim): surface migration revert reasons
drewstone Dec 15, 2025
70bd978
chore(claim): require explicit mock proof flag
drewstone Dec 15, 2025
2b228b5
chore(format): apply prettier
drewstone Dec 15, 2025
27f48e6
fix(tx): appease tsc for simulated write request
drewstone Dec 15, 2025
99aba7e
feat(liquid-staking): create vault with selectable blueprint IDs
drewstone Dec 15, 2025
e6a2f4f
fix(tx): detect non-contract targets and decode panic
drewstone Dec 15, 2025
ecb7db8
chore: fix merkle gen
drewstone Dec 15, 2025
2cf3818
refactor: Dashboard QA improvements and data handling updates (#3077)
vutuanlinh2k2 Dec 15, 2025
60cc330
fix(restaking): QA fixes and improvements for restaking module (#3082)
vutuanlinh2k2 Dec 17, 2025
9bc40af
fix(migration-claim): fix contract reads and add local testing infras…
vutuanlinh2k2 Dec 20, 2025
9a76fe6
feat(dapp): align credits claims with tnt-core (#3088)
drewstone Dec 21, 2025
8188226
dapp: wire local credits address
drewstone Dec 22, 2025
15279a9
feat(credits): sync abis and windowed claims
drewstone Dec 22, 2025
a5042ef
chore(config): wire base sepolia deployment
drewstone Dec 22, 2025
81bcb8d
Improve restake UX and infra tooling
drewstone Dec 23, 2025
95660fa
chore: format
drewstone Dec 23, 2025
8f6de6a
Fix typecheck for restaking ABIs and helpers
drewstone Dec 23, 2025
772d663
Fix wallet client switch lint
drewstone Dec 23, 2025
bc70270
Remove local claim relayer fallback
drewstone Dec 23, 2025
7000717
chore: update abis and scripts
drewstone Dec 23, 2025
1108f7a
chore: update mads abi
drewstone Dec 23, 2025
4cd1545
fix(tangle-dapp): QA fixes for liquid staking (#3089)
vutuanlinh2k2 Dec 25, 2025
ed78002
refactor(tangle-dapp): Claim migration and liquid staking improvement…
vutuanlinh2k2 Dec 29, 2025
581fe9e
refactor(tangle-dapp): fixes for restaking, liquid staking, and migra…
vutuanlinh2k2 Dec 30, 2025
6de8dae
fix(tangle-dapp): QA fixes for claim credits (#3093)
vutuanlinh2k2 Jan 13, 2026
619adb4
fix(tangle-dapp): fix claim wallet connection and add unlock configur…
vutuanlinh2k2 Jan 14, 2026
e5f681d
feat: add operator delegation mode support and deprecate rewards hook…
vutuanlinh2k2 Jan 26, 2026
625d42f
feat(tangle-cloud): Blueprint management QA fixes and contract parity…
vutuanlinh2k2 Jan 27, 2026
4035c97
feat(tangle-cloud): QA improvements and operator registration redesig…
vutuanlinh2k2 Jan 29, 2026
7745e2a
feat(tangle-cloud): Service deployment QA fixes and contract parity (…
vutuanlinh2k2 Jan 31, 2026
2f800ec
fix(tangle-cloud): address PR #3109 review feedback (#3110)
vutuanlinh2k2 Jan 31, 2026
defaa99
feat(tangle-dapp): add expected rewards display and dedicated Rewards…
vutuanlinh2k2 Feb 3, 2026
41433ff
feat(tangle-cloud): manage service requests with approval flow (#3116)
vutuanlinh2k2 Feb 4, 2026
6e59222
chore(dedup): remove duplicate code, use shared-ui components
Feb 6, 2026
566d8a6
style: fix prettier formatting
Feb 6, 2026
4358797
docs: update README library list for v2 EVM migration
Feb 6, 2026
a08826b
feat(tangle-cloud): improve service management flows and job schema h…
vutuanlinh2k2 Feb 11, 2026
196151b
fix(tangle-cloud): QA improvements for cloud earnings and rewards (#3…
vutuanlinh2k2 Feb 13, 2026
ed84d61
feat(tangle-cloud): QA improvements for slashing, operator management…
vutuanlinh2k2 Feb 14, 2026
fa36603
feat(tangle-cloud): blueprint metadata update UX (#3128)
vutuanlinh2k2 Feb 15, 2026
dcba590
fix(tangle-cloud): data correctness improvements for operators, earni…
vutuanlinh2k2 Feb 15, 2026
5bf64cc
feat(tangle-cloud): runtime permitted callers management (#3132)
vutuanlinh2k2 Feb 19, 2026
5bfce60
feat(tangle-cloud): slashing lifecycle UI (#3133)
vutuanlinh2k2 Feb 20, 2026
19df5c8
feat(tangle-shared-ui): add TLV request args encoder
vutuanlinh2k2 Feb 22, 2026
e748f9c
feat(tangle-shared-ui): add useBlueprintRequestSchema hook
vutuanlinh2k2 Feb 22, 2026
57512fd
feat(tangle-shared-ui): support basic/exposure/security service reque…
vutuanlinh2k2 Feb 22, 2026
9d9f0ad
refactor(tangle-cloud): update deploy schema for multi-mode request
vutuanlinh2k2 Feb 22, 2026
5bcd667
feat(tangle-cloud): wire up multi-mode deploy UI
vutuanlinh2k2 Feb 22, 2026
19f427e
fix(tangle-cloud): update InstanceHeader card styling
vutuanlinh2k2 Feb 22, 2026
649e7eb
feat(tangle-shared-ui): detect service request variant and expose cus…
vutuanlinh2k2 Feb 22, 2026
83674f5
fix(tangle-cloud): fetch defaultTntMinExposureBps from contract inste…
vutuanlinh2k2 Feb 22, 2026
544bf2a
feat(tangle-cloud): display request variant and exposure details in S…
vutuanlinh2k2 Feb 22, 2026
55db756
fix(tangle-cloud): improve duration validation and fix membership lab…
vutuanlinh2k2 Feb 22, 2026
cf06b5e
fix(tangle-shared-ui): expose requestedOperators from useServiceReque…
vutuanlinh2k2 Feb 22, 2026
b0378d9
feat(tangle-cloud): show per-operator exposure labels in ServiceReque…
vutuanlinh2k2 Feb 22, 2026
c8b792c
feat(tangle-cloud): replace globalExposurePercent with per-operator e…
vutuanlinh2k2 Feb 22, 2026
817989b
feat(tangle-cloud): add standard approval flow and improve service re…
vutuanlinh2k2 Feb 23, 2026
9a91ca8
chore: format code
vutuanlinh2k2 Feb 23, 2026
54abf95
feat(tangle-cloud): support tntExposureBps in standard approval flow
vutuanlinh2k2 Feb 23, 2026
5e454c0
refactor(tangle-cloud): consolidate request variant display into Comm…
vutuanlinh2k2 Feb 23, 2026
281f8b7
refactor(tangle-cloud): improve service request detail modal UX
vutuanlinh2k2 Feb 23, 2026
cd69d8f
fix(tangle-cloud): improve service request variant tooltip descriptions
vutuanlinh2k2 Feb 23, 2026
33d3b7f
chore: format code
vutuanlinh2k2 Feb 23, 2026
223b015
fix(tangle-cloud): fix possibly undefined requirements type error
vutuanlinh2k2 Feb 23, 2026
790df23
chore: canonicalize staking naming across dapp and shared-ui
drewstone Mar 3, 2026
e6eb2e0
style: format staking canonicalization files for pre-push
drewstone Mar 3, 2026
6d80356
feat: finalize v2 staking-first dapp and cloud integration
drewstone Mar 3, 2026
b38bb4d
docs: clarify native restaking launch scope and route status
drewstone Mar 3, 2026
cd0aac9
chore: complete staking canonicalization and clear lint debt
drewstone Mar 3, 2026
6ebba40
style: format service terminate tx hook
drewstone Mar 3, 2026
7ccf9f5
refactor: canonicalize staking naming and harden launch flow checks
drewstone Mar 3, 2026
9563207
style: format new staking flow test files
drewstone Mar 3, 2026
a5b6898
Merge branch 'origin/linh/fix/service-req-args' into v2
drewstone Mar 3, 2026
d34cd2f
style: format request args step after merge
drewstone Mar 3, 2026
d88fd7d
feat: finalize v2 launch canonicalization and flow hardening
drewstone Mar 3, 2026
d6bfbdc
style: apply pre-push prettier fixes
drewstone Mar 3, 2026
f05a811
test: add launch flow coverage across dapp and cloud
drewstone Mar 3, 2026
719ca3b
style: format new flow verification specs
drewstone Mar 3, 2026
80e79f7
test: expand dapp route and notifier flow coverage
drewstone Mar 3, 2026
bc975a3
Add wallet flow suite for all launch manual-signoff gates
drewstone Mar 3, 2026
e7c9140
fix local env script resolution and wallet-runner headless support
drewstone Mar 3, 2026
ca8c9bf
refactor: canonicalize staking terminology in dapp runtime/docs
drewstone Mar 3, 2026
8a039a6
fix(ci): stabilize codegen inputs and resolve broken doc links
drewstone Mar 3, 2026
1466df1
fix(security): replace local activity RNG with crypto-safe randomness
drewstone Mar 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .cursor/rules/general.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ This project is Tangle dApp - a monorepo containing multiple dApp projects that
- `components/`: "Dumb", mostly re-usable components that are specific to Tangle dApp. Usually if a component is re-usable and generic enough to be used in other dApps, it should be placed within either `libs/tangle-shared-ui` or `libs/ui-components/`.
- `containers/`: "Smart" React components with business logic that fetch, calculate or otherwise interact with stuff that isn't passed directly as props. These smart components usually reuse components from `components/` folder, and even other containers too.
- `hooks/`: React hooks containing core infrastructure logic & functionality.
- `data/`: React hooks containing data fetching logic, generally organized by their corresponding areas (such as restaking, liquid staking, etc.).
- `data/`: React hooks containing data fetching logic, generally organized by their corresponding areas (such as staking, liquid staking, etc.).
- `pages/`: Contains pages of the dApps, which are used by `react-router-dom`.
- `abi/`: Contains EVM ABI definitions as a JS object, which is used when utilizing Viem to call Substrate precompiles. This is useful for when EVM accounts interact with our dApp and call extrinsics.

Expand All @@ -65,4 +65,4 @@ Tangle dApp is the main product and focus of the monorepo. Here's the tech stack

# Library: `libs/tangle-shared-ui`

Contains shared logic, hooks, and utility functions between multiple Tangle dApps, such as `tangle-cloud` & `tangle-dapp`. This differs from `ui-components` in that `ui-components` is more geared towards general & re-usable components, not necesarily tied to any context, whereas `libs/tangle-shared-ui` is specific to Tangle-related logic.
Contains shared logic, hooks, and utility functions between multiple Tangle dApps, such as `tangle-cloud` & `tangle-dapp`. This differs from `ui-components` in that `ui-components` is more geared towards general & re-usable components, not necesarily tied to any context, whereas `libs/tangle-shared-ui` is specific to Tangle-related logic.
25 changes: 25 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,28 @@ export NX_ADD_PLUGINS=false
export ESLINT_USE_FLAT_CONFIG=false

export VITE_GRAPHQL_ENDPOINT='https://mainnet-gql.tangle.tools/graphql'

# Credits claim data (off-chain proofs)
export VITE_CREDITS_TREE_URL='/data/credits-tree.json'
export VITE_CREDITS_TREE_URL_84532=''
export VITE_CREDITS_TREE_URL_8453=''

# Credits contract address overrides (optional)
# You can set a chain-specific address, e.g. VITE_CREDITS_ADDRESS_84532 for Base Sepolia.
export VITE_CREDITS_ADDRESS=''
export VITE_CREDITS_ADDRESS_84532=''
export VITE_CREDITS_ADDRESS_8453=''

# Migration claim (optional for general staking; required to validate /claim/migration end-to-end)
# Contract address (if unset or zero-address, migration claim flow is treated as unconfigured)
export VITE_TANGLE_MIGRATION_ADDRESS=''
# Proof data location (local or hosted JSON)
export VITE_MIGRATION_PROOFS_URL='/data/migration-proofs.json'
# RPC endpoint used by migration claim reads
export VITE_MIGRATION_RPC_URL=''
# Optional claim relayer endpoint (if unset, wallet-signing mode is used)
export VITE_CLAIM_RELAYER_URL=''
# Optional SP1 prover API (for off-chain proof generation)
export VITE_SP1_PROVER_API_URL=''
# Optional dev override for local proof mocking
export VITE_MOCK_PROOF=false
2 changes: 1 addition & 1 deletion .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,4 @@ You can contact Tangle Network via Email: drew@tangle.tools

This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](https://creativecommons.org/licenses/by-sa/4.0/).

Portions of text derived from the the [Parity Code of Conduct](https://github.com/openethereum/parity-ethereum/blob/v2.7.2-stable/.github/CODE_OF_CONDUCT.md), and [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy).
Portions of text derived from the the [Parity Code of Conduct](https://github.com/openethereum/parity-ethereum/blob/v2.7.2-stable/.github/CODE_OF_CONDUCT.md), and [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the Geek Feminism Anti-Harassment Policy.
2 changes: 1 addition & 1 deletion .github/workflows/deploy-storybook-docs.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: 'Publish Storybook Docs 📚'

on:
# TODO: Enable this when Storybook build is fixed
# NOTE: Enable this when Storybook build is fixed
# push:
# branches:
# - develop
Expand Down
20 changes: 19 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,29 @@ tmp
vite.config.*.timestamp*

# Generated graphql files
libs/tangle-shared-ui/src/graphql/
libs/tangle-shared-ui/src/graphql/*
!libs/tangle-shared-ui/src/graphql/graphql.ts
!libs/tangle-shared-ui/src/graphql/index.ts

vitest.config.*.timestamp*

# React Scan reports
reports/
agent-results/
.agent-wallet-profile/
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md

# Contracts - Foundry build artifacts
contracts/**/cache/
contracts/**/out/
contracts/**/broadcast/

# Contracts - Rust/SP1 build artifacts
contracts/**/target/

# Contracts - Generated migration data (large files)
**/migration-proofs.json
contracts/**/evm-claims.json

docs/cloud-qa
4 changes: 2 additions & 2 deletions .windsurf/rules/general.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ This project is Tangle dApp - a monorepo containing multiple dApp projects that
- `components/`: "Dumb", mostly re-usable components that are specific to Tangle dApp. Usually if a component is re-usable and generic enough to be used in other dApps, it should be placed within either `libs/tangle-shared-ui` or `libs/ui-components/`.
- `containers/`: "Smart" React components with business logic that fetch, calculate or otherwise interact with stuff that isn't passed directly as props. These smart components usually reuse components from `components/` folder, and even other containers too.
- `hooks/`: React hooks containing core infrastructure logic & functionality.
- `data/`: React hooks containing data fetching logic, generally organized by their corresponding areas (such as restaking, liquid staking, etc.).
- `data/`: React hooks containing data fetching logic, generally organized by their corresponding areas (such as staking, liquid staking, etc.).
- `pages/`: Contains pages of the dApps, which are used by `react-router-dom`.
- `abi/`: Contains EVM ABI definitions as a JS object, which is used when utilizing Viem to call Substrate precompiles. This is useful for when EVM accounts interact with our dApp and call extrinsics.

Expand All @@ -65,4 +65,4 @@ Tangle dApp is the main product and focus of the monorepo. Here's the tech stack

# Library: `libs/tangle-shared-ui`

Contains shared logic, hooks, and utility functions between multiple Tangle dApps, such as `tangle-cloud` & `tangle-dapp`. This differs from `ui-components` in that `ui-components` is more geared towards general & re-usable components, not necesarily tied to any context, whereas `libs/tangle-shared-ui` is specific to Tangle-related logic.
Contains shared logic, hooks, and utility functions between multiple Tangle dApps, such as `tangle-cloud` & `tangle-dapp`. This differs from `ui-components` in that `ui-components` is more geared towards general & re-usable components, not necesarily tied to any context, whereas `libs/tangle-shared-ui` is specific to Tangle-related logic.
33 changes: 33 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Tangle dApp monorepo (Nx + Yarn)

## Quick commands
- Install: `yarn install` (Node `>=18.18.x`, Yarn `4.x`)
- Run dApp: `yarn nx serve tangle-dapp` (default `http://localhost:4200`)
- Lint/test/build: `yarn lint`, `yarn test`, `yarn build`

## Env
- Start from `.env.example` (Vite vars are `VITE_*`)
- Set `VITE_GRAPHQL_ENDPOINT` to your Envio/Hasura GraphQL (local indexer or mainnet)
- Optional: `VITE_WALLETCONNECT_PROJECT_ID` for WalletConnect
- Migration claim flow (`/claim/migration`) requires:
- `VITE_MIGRATION_PROOFS_URL` (proof data JSON)
- `VITE_MIGRATION_RPC_URL` (RPC for migration reads)
- Optional `VITE_TANGLE_MIGRATION_ADDRESS` override (must be non-zero)
- Optional `VITE_CLAIM_RELAYER_URL` (otherwise wallet mode is used)
- Optional `VITE_SP1_PROVER_API_URL` and `VITE_MOCK_PROOF` for proof generation/testing

## Local protocol repo
- `../tnt-core/` (sibling repo): protocol + claims migration contracts, gas relayer, indexer, etc.
- When running locally, ensure:
- the chain you connect the UI to matches your `tnt-core` deployments
- `VITE_GRAPHQL_ENDPOINT` points at the indexer for that chain

## Key code locations
- App: `apps/tangle-dapp/` (Vite + React Router)
- Staking (EVM v2):
- GraphQL hooks: `libs/tangle-shared-ui/src/data/graphql/`
- Tx hooks: `libs/tangle-shared-ui/src/data/tx/`
- Write executor: `libs/tangle-shared-ui/src/hooks/useContractWrite.ts`
- Seed scripts (Substrate dev):
- `yarn script:setupServices` (create blueprints)
- `yarn script:setupStaking` (LST/vault/operator staking fixtures)
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ yarn generate:release # Review version bumps and changelog
- `components/`: Reusable "dumb" components specific to the app
- `containers/`: "Smart" components with business logic
- `hooks/`: React hooks for infrastructure logic
- `data/`: Data fetching hooks organized by domain (restaking, liquid staking, etc.)
- `data/`: Data fetching hooks organized by domain (staking, liquid staking, etc.)
- `pages/`: Route pages for react-router-dom
- `abi/`: EVM ABI definitions for Substrate precompiles

Expand Down
70 changes: 70 additions & 0 deletions DEDUP_REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Deduplication Report - PR #3090 Phase 2

## Summary
Removed **~580 lines** of duplicate code from tangle-dapp and tangle-cloud that already exist in tangle-shared-ui.

## Completed Deduplication

### 1. ErrorMessage.tsx (90 lines removed)
**Files Deleted:**
- `apps/tangle-cloud/src/components/ErrorMessage.tsx` ✅
- `apps/tangle-dapp/src/components/ErrorMessage.tsx` ✅

**Imports Updated:** 20 files now import from `@tangle-network/tangle-shared-ui/components/ErrorMessage`

### 2. InputWrapper.tsx (166 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/components/InputWrapper.tsx` ✅

**Imports Updated:** AmountInput, TextInput, PercentageInput, AddressInput

### 3. InputAction.tsx (41 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/components/InputAction.tsx` ✅

### 4. useInputAmount.ts (192 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/hooks/useInputAmount.ts` ✅

**Imports Updated:** AmountInput.tsx

### 5. parseChainUnits.ts (64 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/utils/parseChainUnits.ts` ✅

### 6. cleanNumericInputString.ts (19 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/utils/cleanNumericInputString.ts` ✅

**Imports Updated:** useCustomInputValue.ts

### 7. ErrorsContext/ directory (55 lines removed)
**Files Deleted:**
- `apps/tangle-dapp/src/context/ErrorsContext/ErrorsContext.ts` ✅
- `apps/tangle-dapp/src/context/ErrorsContext/useErrorCountContext.ts` ✅
- `apps/tangle-dapp/src/context/ErrorsContext/index.ts` ✅

## Build Status
- ✅ tangle-cloud: Builds successfully
- ⚠️ tangle-dapp: Has pre-existing build errors unrelated to this PR (graphql export issue)

## Files Not Deduplicated (Intentionally Different)

### AmountInput.tsx
- tangle-dapp version is almost identical but kept for now
- Only difference is import paths (uses full package path vs relative)
- Could be unified in future PR

### OperatorsTable.tsx
- Different implementations serving different purposes
- tangle-dapp version wraps the shared-ui version
- Intentionally different

## Total Line Reduction
| Category | Lines Removed |
|----------|---------------|
| Components | 297 |
| Hooks | 192 |
| Utils | 83 |
| Context | 55 |
| **Total** | **~580 lines** |
35 changes: 35 additions & 0 deletions LAUNCH_BACKLOG_CLOSEOUT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Launch Backlog Closeout (Docs Scope)

Date: 2026-03-03
Scope owner: `docs/` flow validation artifacts + top-level backlog docs in this repo

## Decision Rules
- `fixed-now`: Documentation/process gap closed in this pass.
- `deferred-external`: Real work remains, but completion depends on external repo/infrastructure/runtime actors.
- `removed-non-actionable`: Not a launch action item for this repo/scope.

## TODO Triage Register

| backlog_id | source | item | triage | owner | dependency | disposition |
|---|---|---|---|---|---|---|
| TODO-001 | `docs/flow-validation-report.md`, `docs/staking-flow-audit-checklist.md` | No explicit launch gate board with owner + gate criteria + verification command + status | fixed-now | Docs owner | None | Added `docs/launch-readiness-board.md` + `docs/launch-readiness-board.csv`; linked from all flow artifacts. |
| TODO-002 | `docs/flow-validation-report.md`, `docs/staking-flow-audit-checklist.md` | Migration claim flow still partial for launch confidence | fixed-now | dapp-frontend + migration | Manual runtime sign-off on live wallet/relayer paths | Hardened migration claim flow in dapp (fail-closed config + relayer receipt confirmation + surfaced eligibility errors); gate moved to `ready-manual-signoff`. |
| TODO-003 | `docs/flow-validation-report.md`, `docs/staking-flow-audit-checklist.md` | Native staking pod lifecycle launch certification | removed-non-actionable | Product/Protocol | Launch scope decision | Kept documented as out-of-launch scope; no release gate in dapp launch. |
| TODO-004 | `docs/flow-validation-report.md`, `docs/staking-flow-audit-checklist.md` | Native staking contract/user-flow certification | removed-non-actionable | Product/Protocol | Launch scope decision | Explicitly excluded from launch certification as a non-launch scope item. |
| TODO-005 | `docs/flow-validation-report.md`, `docs/staking-flow-audit-checklist.md` | Missing dedicated browser wallet E2E harness | deferred-external | QA/DevEx | Browser wallet automation harness + stable CI runner wallets | Launch board marks wallet-critical flows as manual-signoff required. |
| TODO-006 | `docs/flow-validation-report.md` | Automated tests too narrow for 300-story catalog confidence | deferred-external | QA + App teams | Deterministic end-to-end suite design and infra budget | Left as risk; not closed by doc-only pass. |
| TODO-007 | `docs/flow-validation-report.md`, `docs/user-stories-validation-catalog.md` | Legacy `[MANUAL_REQUIRED]` tag metric is misleading/under-counted | fixed-now | Docs owner | None | Deprecated this metric as launch gate input; canonical gate source is launch board + `implementation_status`. |
| TODO-008 | `MIGRATION_CLAIM_PLAN.md` | Historical implementation plan appears actionable in this repo | removed-non-actionable | Migration (tnt-core) | Work migrated to `../tnt-core/packages/migration-claim` | Marked archived context only; not tracked as dapp backlog action. |

## Unresolved Blockers After Closeout
- Wallet-critical flows remain `implemented+manual-required` until deterministic browser wallet E2E harness exists.
- Native staking lifecycle remains intentionally out of launch scope (not a launch blocker, but not complete).

## Governance Decision Inputs (Current)
- Go/no-go authority should use `docs/launch-readiness-board.csv` as the gate source, with this file as backlog disposition context.
- A strict launch go decision requires: no `blocked-partial` gates, plus manual sign-off evidence for all `ready-manual-signoff` gates.
- If launching with manual-signoff gates, record explicit risk acceptance for TODO-005 and TODO-006.
- `removed-non-actionable` items (TODO-003, TODO-004, TODO-008) require explicit product scope approval so they are not reintroduced as hidden blockers.

## Launch Answer (Strict)
- Are all user flows complete for launch-certifiable automation? **No.**
Loading
Loading