Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
06ad1da
testnet label and network logo fixes (#3153)
isstuev Dec 1, 2025
5fca50d
add zetachain swagger (#3155)
isstuev Dec 1, 2025
8c0213c
[skip ci] feature spec template
tom2drum Dec 2, 2025
1c4bb39
[skip ci] fix template
tom2drum Dec 2, 2025
8745445
[skip ci] more fixes
tom2drum Dec 2, 2025
5b21e34
[skip ci] remove title field
tom2drum Dec 2, 2025
6d4bee4
[skip ci] change value to placeholders
tom2drum Dec 2, 2025
e2f35ba
Fixes for release v2.5.0 (#3142)
tom2drum Dec 4, 2025
1a87cd2
Bump package versions to mitigate security vulnerabilities (#3164)
tom2drum Dec 4, 2025
baf877b
Change zero to <0.001 value within different pages (#3150)
tom2drum Dec 5, 2025
be1c030
[skip ci] fix z-index for select dropdown
tom2drum Dec 8, 2025
944a60b
Promote Credit Wallet in WalletConnect for all Creditcoin chains (#3166)
tom2drum Dec 8, 2025
9c81399
[skip ci] add chakra MCP server
tom2drum Dec 9, 2025
9be8e2b
Merge branch 'main' of github.com:blockscout/frontend
tom2drum Dec 9, 2025
48d0ed2
Public tags: attributions (#3169)
tom2drum Dec 9, 2025
1fd77f1
Migrate from Jest to Vitest (#3173)
tom2drum Dec 10, 2025
9e55608
Release v2.5.1 (#3174)
tom2drum Dec 11, 2025
46a32c5
[skip ci] fix csv export screenshot
tom2drum Dec 12, 2025
b0d9e5f
fix product schema and add fields (#3177)
isstuev Dec 12, 2025
fba6438
upgrade react and next versions (#3178)
isstuev Dec 12, 2025
201404a
[skip ci] disable next API proxy if the variable is not set
tom2drum Dec 15, 2025
6769d37
[skip ci] fix condition in Next.js API proxy resource
tom2drum Dec 16, 2025
0435eab
Minor packages bump and security updates (#3184)
tom2drum Dec 16, 2025
75f4e56
Always display `Internal txns` tab on Block details (#3185)
tom2drum Dec 16, 2025
dd90439
fix typo (#3187)
isstuev Dec 17, 2025
59b2e93
Highlights banners on home page (#3175)
tom2drum Dec 18, 2025
f448b87
replace bg-position animation with faster one (#3189)
isstuev Dec 18, 2025
6f3763a
OP batches: show EigenDA tag (#3186)
tom2drum Dec 18, 2025
10c4c52
Hot contracts table (#3165)
tom2drum Dec 18, 2025
76b7603
Refactor token media-type API to be token-scoped and safer (#3190)
tom2drum Dec 18, 2025
34fe8ca
Refactor navigation icon (#3191)
tom2drum Dec 19, 2025
8ef13bb
Fix deposits table layout on small desktops (#3192)
tom2drum Dec 19, 2025
fb05a3d
Hide the tooltip on the button whenever the dropdown is open (#3193)
tom2drum Dec 19, 2025
1b174d6
Pass the `x-csrf-token` to the call to the admin API (#3194)
tom2drum Dec 22, 2025
d6e3f73
Fix REST API docs request interceptor URL replacement (#3196)
tom2drum Dec 23, 2025
5a49ad8
UI/UX: Implement unified EmptyState component for stats page (#3195)
tom2drum Dec 23, 2025
a48bcd6
Advanced filter: amount (#3208)
isstuev Jan 1, 2026
1e62595
Move Swap essential dapp to iframe (#3167)
maxaleks Jan 2, 2026
323f1ca
Console message to warn users from script execution (#3209)
isstuev Jan 2, 2026
bc878ba
change tag and badge user-select property (#3205)
isstuev Jan 2, 2026
e540c01
Public tags: protocol tag for transaction list (#3182)
tom2drum Jan 5, 2026
4fc7050
Smart contracts: get supported languages for filter from the API inst…
tom2drum Jan 5, 2026
8d15222
Add possibility to change timestamp format (#3201)
tom2drum Jan 5, 2026
1884868
Private mode (#3138)
isstuev Jan 5, 2026
43a77c2
add variable for exit-only consensus (#3207)
isstuev Jan 5, 2026
e454b4b
Zilliqa chain type: support for ZRC-2 (#3202)
isstuev Jan 5, 2026
c72660c
Show conflicting proxy implementations warning (#3179)
tom2drum Jan 5, 2026
4711f70
prepare release
tom2drum Jan 5, 2026
f5f133b
replace link in task details (#3216)
maxaleks Jan 9, 2026
f576be1
Support essential dapps in DeFi dropdown (#3218)
maxaleks Jan 9, 2026
42f0244
add "view all" for all token transfers group (#3213)
isstuev Jan 12, 2026
2985e01
Bump hono from 4.10.7 to 4.11.4 (#3231)
dependabot[bot] Jan 15, 2026
4f63b9b
Fixes for release v2.6.0 (#3214)
tom2drum Jan 15, 2026
5fc23fd
UI: Toast. Close icon location. (#3237)
tom2drum Jan 16, 2026
912adae
UI/UX: Contract verification alert cases (#3234)
tom2drum Jan 16, 2026
473f178
Do not display error message on user's sign out on Profile page (#3238)
tom2drum Jan 16, 2026
6a92789
Incorrect size of DialogHeader for mobile (#3236)
tom2drum Jan 19, 2026
2990c88
Set the auth header for the merits API inside `useApiFetch` (#3239)
tom2drum Jan 19, 2026
16cd685
[skip ci] fix typo in rollup feature validator
tom2drum Jan 20, 2026
7f89bf1
[skip ci] fix essential dapps config for main preset
tom2drum Jan 22, 2026
ad73582
[skip ci] edit cursor rules and add "after file edit" format hook
tom2drum Jan 23, 2026
b9fdad1
fix for tokens request on address page (#3246)
isstuev Jan 26, 2026
300889a
design update for new blockscout version
Feb 4, 2026
c443eab
feat: removed duplication
Feb 4, 2026
b7f7608
feat: added type cast
Feb 4, 2026
2ad1724
feat: exported const
Feb 4, 2026
2d17f7e
fix: removed promo banner component
Feb 4, 2026
a386a45
feat: updated config
Feb 5, 2026
c91671f
feat: updated import
Feb 5, 2026
dbe423f
feat: updated packages and types
Feb 5, 2026
3f97cd0
feat: added csp
Feb 5, 2026
e663833
feat: csp middleware update
Feb 5, 2026
e4b11c5
feat: csp test
Feb 5, 2026
6d9866e
feat: updated config
Feb 5, 2026
6ae1c20
feat: updated config 2
Feb 5, 2026
2241d1a
feat: added margin for icon
Feb 6, 2026
3e3836c
fix: moved display none to parent
Feb 6, 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
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions .cursor/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"version": 1,
"hooks": {
"afterFileEdit": [
{
"command": "yarn eslint --fix ${file}",
"filter": {
"include": ["**/*.{ts,tsx,js,jsx}"]
}
}
]
}
}
8 changes: 8 additions & 0 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"chakra-ui": {
"command": "npx",
"args": ["-y", "@chakra-ui/react-mcp"]
}
}
}
2 changes: 1 addition & 1 deletion .cursor/rules/frontend.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ You are an expert senior software engineer specializing in modern web developmen

### UI and Styling
- Utilize Chakra UI v3 components for consistent design
- Be aware that some components are tailored for the project's specific requirements. They are all located in the "toolkit/chakra" directory. Always use these instead of the native Chakra components.
- **Component Import Priority**: Always check if a component exists in `toolkit/chakra/**` before importing from Chakra UI. If a custom version exists in `toolkit/chakra/**`, import from there instead of the native Chakra component. Only use default Chakra components when no custom version is available in `toolkit/chakra/**`.



3 changes: 2 additions & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: Bug Report
name: Bug report
description: File a bug report
labels: [ "bug", "triage" ]
type: bug
body:
- type: markdown
attributes:
Expand Down
42 changes: 42 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_spec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Feature spec (Blockscout team)
description: A simple template to capture title, overview, todo, mockups and deployment info.
type: feature
labels: ['enhancement']
assignees: []
body:
- type: textarea
id: overview
attributes:
label: Overview
description: Brief summary of the feature and why it's needed
placeholder: "Describe the purpose and goals of this feature..."
validations:
required: true

- type: textarea
id: todo
attributes:
label: To‑do / Implementation notes
description: High-level checklist or tasks to implement (use - [ ] items for checklists)
placeholder: "- [ ] Task 1\n- [ ] Task 2\n- [ ] Notes on approach..."

- type: textarea
id: mockups
attributes:
label: Mockups / Screenshots / Links
description: Paste links (Figma, image URLs) or describe the visual changes. Attach screenshots when possible.
placeholder: "https://www.figma.com/..., or link to image(s) / attach screenshots"

- type: textarea
id: deployment
attributes:
label: Deployment info
description: Deployment notes, feature flags, rollout plan, or special instructions
placeholder: "e.g. Requires DB migration X; enable feature-flag Y during rollout"

- type: textarea
id: acceptance_criteria
attributes:
label: Acceptance criteria
description: Conditions that must be met for this feature to be considered done
placeholder: "- Users can ...\n- API returns ...\n- No regressions in ..."
84 changes: 84 additions & 0 deletions .github/workflows/cf-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Deploy Blockscout to Cloudflare

on:
push:
branches:
- devel
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.husky/**'
- '.vscode/**'
- 'docs/**'
- 'jest/**'
- 'mocks/**'
- 'playwright/**'
- 'stubs/**'
- 'tools/**'

jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy Blockscout

steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v2
with:
version: 8

- uses: actions/setup-node@v3
with:
node-version: "22.11.0"
cache: "yarn"

- name: Install dependencies
run: yarn install
env:
CI: true
HUSKY: 0

- name: Build Blockscout
run: yarn run build:next
env:
# Local development ENVs
# NEXT_PUBLIC_APP_HOST: ${{ var.NEXT_PUBLIC_APP_HOST }}
# NEXT_PUBLIC_APP_PORT: ${{ var.NEXT_PUBLIC_APP_PORT }}
# NEXT_PUBLIC_APP_PROTOCOL: ${{ var.NEXT_PUBLIC_APP_PROTOCOL }}
# NEXT_PUBLIC_API_BASE_PATH=: ${{ var.NEXT_PUBLIC_API_BASE_PATH }}
# NEXT_PUBLIC_IS_TESTNET: ${{ var.NEXT_PUBLIC_IS_TESTNET }}
# NEXT_PUBLIC_APP_ENV: ${{ var.NEXT_PUBLIC_APP_ENV }}
# Blockscout specific
NEXT_PUBLIC_API_HOST: ${{ vars.NEXT_PUBLIC_API_HOST }}
NEXT_PUBLIC_STATS_API_HOST: ${{ vars.NEXT_PUBLIC_STATS_API_HOST }}
NEXT_PUBLIC_NETWORK_NAME: ${{ vars.NEXT_PUBLIC_NETWORK_NAME }}
NEXT_PUBLIC_NETWORK_SHORT_NAME: ${{ vars.NEXT_PUBLIC_NETWORK_SHORT_NAME }}
NEXT_PUBLIC_NETWORK_ID: ${{ vars.NEXT_PUBLIC_NETWORK_ID }}
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: ${{ vars.NEXT_PUBLIC_NETWORK_CURRENCY_NAME }}
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: ${{ vars.NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL }}
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: ${{ vars.NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS }}
NEXT_PUBLIC_HOMEPAGE_CHARTS: ${{ vars.NEXT_PUBLIC_HOMEPAGE_CHARTS }}
NEXT_PUBLIC_VISUALIZE_API_HOST: ${{ vars.NEXT_PUBLIC_VISUALIZE_API_HOST }}
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ${{ vars.NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL }}
NEXT_PUBLIC_API_SPEC_URL: ${{ vars.NEXT_PUBLIC_API_SPEC_URL }}
# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT: ${{ vars.NEXT_PUBLIC_COLOR_THEME_DEFAULT }}
NEXT_PUBLIC_NAVIGATION_LAYOUT: ${{ vars.NEXT_PUBLIC_NAVIGATION_LAYOUT }}

- name: Prepare deployment
run: |
mkdir -p ./deploy
cp -r .next ./deploy/
cp -r public ./deploy/
cp package.json ./deploy/
cd ./deploy
yarn add wrangler@3 --dev
env:
HUSKY: 0

- name: Deploy to Cloudflare Pages
working-directory: ./deploy
run: yarn wrangler pages deploy . --project-name=blockscout-fluent --commit-dirty=true
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
22 changes: 11 additions & 11 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand Down Expand Up @@ -70,7 +70,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand Down Expand Up @@ -133,7 +133,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand Down Expand Up @@ -163,8 +163,8 @@ jobs:
echo "exitcode=$exitcode" >> $GITHUB_OUTPUT
exit "$exitcode"

jest_tests:
name: Jest tests
vitest_tests:
name: Unit tests
needs: [ code_quality, envs_validation ]
runs-on: ubuntu-latest
steps:
Expand All @@ -176,7 +176,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand All @@ -195,8 +195,8 @@ jobs:
if: steps.cache-node-modules.outputs.cache-hit == 'true'
run: yarn chakra:typegen

- name: Run Jest
run: yarn test:jest ${{ github.event_name == 'pull_request' && '--changedSince=origin/main' || '' }} --passWithNoTests
- name: Run Vitest
run: yarn test:vitest ${{ github.event_name == 'pull_request' && '--changed=origin/main' || '' }} --passWithNoTests

pw_affected_tests:
name: Resolve affected Playwright tests
Expand All @@ -212,7 +212,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand Down Expand Up @@ -254,7 +254,7 @@ jobs:
(needs.pw_affected_tests.result == 'success' || needs.pw_affected_tests.result == 'skipped')
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.49.0-noble
image: mcr.microsoft.com/playwright:v1.57.0-noble

strategy:
fail-fast: false
Expand All @@ -273,7 +273,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22.11.0
node-version: 22.14.0
cache: 'yarn'

- name: Cache node_modules
Expand Down
36 changes: 0 additions & 36 deletions .github/workflows/deploy-main.yml

This file was deleted.

2 changes: 2 additions & 0 deletions .github/workflows/pre-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ jobs:
version:
name: Pre-release version info
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
is_initial: ${{ steps.is_initial.outputs.result }}
steps:
Expand Down
7 changes: 1 addition & 6 deletions .github/workflows/publish-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,7 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ steps.image-name.outputs.image-name }}
flavor: |
latest=false
tags: |
type=ref,event=tag
${{ inputs.tags }}
images: ghcr.io/fluentlabs-xyz/blockscout-frontend

- name: Add SHORT_SHA env property with commit short sha
run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/toolkit-npm-publisher.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: '22.11.0'
node-version: '22.14.0'
registry-url: 'https://registry.npmjs.org'

# Ensure npm 11.5.1 is installed
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ yarn-error.log*

# local env files
.env*.local
.env
/configs/envs/.env.secrets
/configs/envs/.samples

Expand Down
12 changes: 6 additions & 6 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ npx lint-staged

# format svg
echo 🧿 Running svg formatter...
for file in `git diff --diff-filter=ACMRT --cached --name-only | grep ".svg\$"`
do
echo "Formatting $file"
./node_modules/.bin/svgo -q $file --config svgo.config.format.js
git add $file
done
git diff --diff-filter=ACMRT --cached --name-only -z | grep -z -E "\.svg$" | while IFS= read -r -d '' file
do
echo "Formatting $file"
./node_modules/.bin/svgo -q "$file" --config svgo.config.format.js
git add "$file"
done

echo ✅ All pre-commit jobs are done
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22.11.0
>=22.14.0
20 changes: 1 addition & 19 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,5 @@
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jest: watch current file",
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
"args": [
"${fileBasename}",
"--runInBand",
"--verbose",
"-i",
"--no-cache",
"--watchAll",
"--testTimeout=1000000000",
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
"configurations": [ ]
}
Loading
Loading