Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
354 commits
Select commit Hold shift + click to select a range
bbd081b
feat: complete events parsing (#95)
bpierre Nov 24, 2025
ee5deea
feat: fee breakdown on receipt view (#86)
o-az Nov 24, 2025
1833ba5
feat: spotlight links (#99)
o-az Nov 25, 2025
2568645
feat: global blocks route (#98)
o-az Nov 25, 2025
b2cb6c8
chore: SSR 1st load in block route + fix layout (#100)
o-az Nov 25, 2025
0e1292b
fix: favicon dark/light mode (#102)
o-az Nov 25, 2025
9ee9b41
chore: use better favicon
o-az Nov 25, 2025
8eb595e
fix: remove duplicate line items in `mint`/`burn` receipts (#106)
o-az Nov 25, 2025
98e6503
fix: receipt pdf search param (#105)
o-az Nov 25, 2025
c31b75b
feat: row links + datagrid (#107)
bpierre Nov 25, 2025
3330acf
chore: update deps (#103)
o-az Nov 26, 2025
146f8eb
fix: multiline event descriptions (#109)
bpierre Nov 26, 2025
2847523
feat: route TIP-20 addresses to /token (#108)
bpierre Nov 26, 2025
3e5013a
chore: remove unused token API route (#110)
bpierre Nov 26, 2025
008bd90
feat: strip default search params (#111)
bpierre Nov 26, 2025
6358f69
feat: filter token transfers by address with ?a= (#116)
bpierre Nov 26, 2025
d576682
chore: /account => /address (#117)
bpierre Nov 26, 2025
64ee8ca
feat: top loader (#118)
jxom Nov 26, 2025
cf4a757
chore: make token table scrollable (#119)
o-az Nov 26, 2025
c40011c
feat: use `tsgo` for typechecking (#120)
o-az Nov 26, 2025
bef270c
feat: use `Handler.feePayer` in sponsor service (#122)
struong Nov 27, 2025
363f3d0
chore: fee payer tweaks (#125)
jxom Nov 27, 2025
0a79c93
feat: tokens screen + pagination improvements (#126)
bpierre Nov 30, 2025
f95ef61
feat: show search everywhere (#127)
bpierre Nov 30, 2025
79f7b65
chore: use specific tx for demo (#129)
o-az Dec 1, 2025
c12b901
feat: add `GET /usage` route to fee payer (#128)
struong Dec 1, 2025
8284dd3
chore: update deps & wagmi usage (#138)
o-az Dec 2, 2025
6c2d517
feat: add `block_timestamp` filters to `GET /usage` endpoint (#136)
struong Dec 2, 2025
e3139da
feat: search completion (#135)
bpierre Dec 2, 2025
4285b2f
feat: contract tab - ABI viewer (#133)
o-az Dec 2, 2025
767776e
feat: toggle timestamp column (relative/utc/local) (#137)
snario Dec 3, 2025
38f6ba5
feat: `whatsabi` ABI (#143)
o-az Dec 3, 2025
d8eaf84
feat: separate `sponsor` and `privy-sponsor` fee payers (#145)
struong Dec 3, 2025
1f26719
fix: search bar render & block route copy button (#147)
o-az Dec 3, 2025
e88cd56
feat: allow to see the receipt full data (JSON) (#139)
bpierre Dec 3, 2025
043c545
chore: bump tempo.ts to 0.8.1 (#149)
bpierre Dec 4, 2025
07bc130
chore: update deps (#150)
o-az Dec 4, 2025
a01be7c
chore: update readme (#153)
o-az Dec 4, 2025
6ecb8f7
feat: viewport preloading strategy (#144)
bpierre Dec 4, 2025
9cd3f20
fix: linkingUSD -> pathUSD link (#155)
o-az Dec 4, 2025
4591d27
feat: dynamically size block hash in `/blocks` (#156)
o-az Dec 4, 2025
0ed9a4e
feat: better timestamp column text (#158)
o-az Dec 4, 2025
8c85996
feat: advanced /tx screen (#161)
bpierre Dec 5, 2025
c00e702
chore: deploy worker only when its files change (#162)
o-az Dec 5, 2025
53cf26a
docs(fee-payer): API section (#163)
struong Dec 5, 2025
467ed74
chore: deploy worker only when its files change (prod) (#165)
o-az Dec 5, 2025
bb159a5
chore: switch to Orchestra for WS and HTTP (#167)
Zygimantass Dec 5, 2025
38399cf
chore: try `smart` placement
o-az Dec 5, 2025
1a3007a
chore: VITE_ENABLE_DEVTOOLS + check scripts (#170)
bpierre Dec 5, 2025
5ef2d20
fix: slow loading on accounts w/ large # of txs (#169)
o-az Dec 6, 2025
e194044
fix: pagination with large number of pages (#171)
bpierre Dec 6, 2025
6a901e3
feat: empty states (#172)
bpierre Dec 6, 2025
b4951f1
fix: use `bytea` extract row data not cursor (#173)
o-az Dec 6, 2025
3804a36
feat: add calls tab to /tx (#174)
bpierre Dec 6, 2025
3e9de67
chore: update deps (#175)
o-az Dec 6, 2025
30fb542
chore: `viewport` -> `intent` (#177)
o-az Dec 6, 2025
4ae43fe
feat: migrate to `wevm/idxs` (#176)
o-az Dec 6, 2025
56d879e
chore: prefer non-awaited `prefetchQueryData` over `ensureQueryData` …
o-az Dec 6, 2025
13fe787
fix: check if address is tip20 in receipt (#179)
o-az Dec 6, 2025
42b499c
feat: fee payer rate limiter (#164)
struong Dec 6, 2025
a45af61
chore: organize explorer files (#180)
o-az Dec 6, 2025
3200ba7
chore: reduce routes sizes (#181)
o-az Dec 7, 2025
a8f9944
chore: move more things to TruncatedHash (#182)
bpierre Dec 7, 2025
e45ca62
fix: query result coercion (#183)
jxom Dec 7, 2025
6608870
fix: only rate limit sponsorship endpoint (#187)
struong Dec 8, 2025
cea5102
chore: move to /receipt as default tx links (#186)
bpierre Dec 8, 2025
6dd666e
feat: decoded topics (#185)
bpierre Dec 8, 2025
138caa0
wip: use idxs for usage query (#188)
struong Dec 8, 2025
bf74021
feat: add a title to the latest block link (#192)
bpierre Dec 8, 2025
487dc87
feat: block screen ui tweaks (#189)
bpierre Dec 8, 2025
347ebfa
feat: default events precedence (#193)
bpierre Dec 8, 2025
df85626
Revert "wip: use idxs for usage query (#188)" (#196)
struong Dec 8, 2025
7d6634d
feat: disable live block fetching when page != first page (#195)
o-az Dec 8, 2025
6ace119
feat: /block pagination (#191)
bpierre Dec 8, 2025
14a8946
feat: use idxs for usage query (#197)
struong Dec 8, 2025
7784bf8
feat: service proxy (#199)
jxom Dec 9, 2025
a2d1bf3
ci: up
jxom Dec 9, 2025
c2405cd
fix: ui fixes (#202)
bpierre Dec 9, 2025
106bae9
fix: token transfers query (#201)
o-az Dec 9, 2025
b959068
chore: remove auth from explorer and RPC (#198)
o-az Dec 9, 2025
5315719
fix: conditional websocket usage (#216)
o-az Dec 9, 2025
8cdd46a
fix: display main event in block viewer (#222)
struong Dec 9, 2025
efe7b1d
chore: missing meta tags (#221)
o-az Dec 9, 2025
ac410c0
chore: favicons update (#224)
bpierre Dec 9, 2025
d607310
(chore): update favicon, og-image (#230)
achalvs Dec 9, 2025
f06435f
feat: return formatted fee token units from usage (#234)
struong Dec 9, 2025
26e7458
chore: use TxEventDescription.ExpandGroup (#228)
bpierre Dec 9, 2025
75dfe6f
chore: fix + optimize favicons (#235)
bpierre Dec 9, 2025
441b528
fix: parse token symbol for FeeManger events (#239)
struong Dec 9, 2025
a53625b
feat: tokenlist (#237)
o-az Dec 9, 2025
0e223a3
chore: tokenlist readme (#241)
o-az Dec 9, 2025
8dd790e
fix: @media print tweaks (#226)
bpierre Dec 9, 2025
4168b3b
feat: events named args (#240)
bpierre Dec 9, 2025
d2ca632
chore: tokenlist icons update (#242)
bpierre Dec 9, 2025
e20f6f7
chore: tokenlists wording (#244)
o-az Dec 10, 2025
1f6cd1b
feat: sentry (#257)
o-az Dec 10, 2025
0e8dfeb
fix: event details crash (#261)
bpierre Dec 10, 2025
d67a4b9
fix: icons path (#262)
bpierre Dec 10, 2025
7b574a4
feat: Decode TIP-20 roles (#265)
gorried Dec 10, 2025
391f079
fix: parse add liquidity events in address (#267)
gorried Dec 10, 2025
bb7d00e
fix: show amounts (decimals) and symbol for non-TIP20 tokens (#268)
bpierre Dec 11, 2025
ab2421a
feat: various UI tweaks (#266)
bpierre Dec 11, 2025
fab8e58
feat: add feepayer detection in explorer events parsing + address pag…
gorried Dec 11, 2025
44daa22
fix: group related events in tx events tab (#270)
bpierre Dec 11, 2025
1855552
fix: add a receipt not found screen (#215)
bpierre Dec 11, 2025
91f5489
chore: switch from `*serverFn` to `/api` (#273)
o-az Dec 11, 2025
aa970ce
feat: add contract call event parsing (#275)
gorried Dec 11, 2025
c3d3c04
chore: .gitignore update
o-az Dec 12, 2025
3333179
feat: stable scrollbar gutter (#281)
tmm Dec 12, 2025
8bf408c
chore: DataGrid UI tweaks + improve loading (#280)
bpierre Dec 13, 2025
5aef29e
fix: allow to expand values on the Contract tab (#282)
bpierre Dec 13, 2025
195ad27
feat: add balance changes tab to transaction page (#285)
bpierre Dec 13, 2025
3b9ecd8
fix: pagination: use aria-disabled instead of disabled for Link style…
evgenyboxer Dec 13, 2025
7808c47
fix: show memo in tx view if present (#288)
struong Dec 13, 2025
ce3e013
chore: fmt
jxom Dec 13, 2025
772dacb
feat: render hidden tabs (#286)
bpierre Dec 13, 2025
6abcb70
feat: preload event details on /tx (#287)
bpierre Dec 13, 2025
5065ecc
chore: fmt
jxom Dec 13, 2025
8c987cb
fix: add rate limiter to privy env (#289)
struong Dec 13, 2025
c1bdf41
feat: `/og` for dynamic preview images 2.0 (#279)
o-az Dec 15, 2025
b30a9bb
fix: remove `withdraws` from block page (#293)
o-az Dec 15, 2025
3e2d503
chore: cleanup `og` api (#294)
o-az Dec 15, 2025
f8f564f
feat: token logos in assets tab (#296)
o-az Dec 15, 2025
21ac783
feat: experimental badge (#290)
o-az Dec 15, 2025
e1652df
feat: token logos everywhere (#297)
o-az Dec 15, 2025
be9457f
feat: support more rows in tip20 og image (#298)
o-az Dec 16, 2025
393d786
fix: error copy button (#303)
bpierre Dec 16, 2025
a96d290
feat: common redirects (#307)
bpierre Dec 17, 2025
4c30bcd
fix: double header on 404 screens + default url params on `/blocks` (…
bpierre Dec 17, 2025
6a6d236
chore: quick verification test
o-az Dec 17, 2025
dac8061
chore: update action
o-az Dec 17, 2025
5bfb413
chore: add gh token
o-az Dec 17, 2025
77eb7a4
chore: use checkout step to clone repo
o-az Dec 17, 2025
d687126
revert: gh token usage
o-az Dec 17, 2025
37aca07
chore: run every 5 hours
o-az Dec 17, 2025
8736a28
feat: Smart contracts verification service (#243)
o-az Dec 17, 2025
5081749
fix: workspace name in action
o-az Dec 17, 2025
ab81870
chore: normalize search params in `/api/code` (#310)
o-az Dec 17, 2025
71a9779
fix: also fetch contract code client side (#312)
o-az Dec 17, 2025
bb4cb95
feat: /tx trace (#299)
bpierre Dec 17, 2025
0f38b01
chore: only publish github-pages when `tokenlist` changes (#309)
Copilot Dec 17, 2025
884f099
feat: /tx state diff (#302)
bpierre Dec 17, 2025
94b0119
feat: `vyper` contract verification support (#311)
o-az Dec 17, 2025
5641c1e
fix: use real lts
o-az Dec 17, 2025
f096b8c
chore: migrate `tempo.ts/viem` to `viem/tempo` (#317)
o-az Dec 17, 2025
27d2c21
feat: show failed status on receipt view (#318)
bpierre Dec 17, 2025
c4ff088
fix: dev server (#319)
bpierre Dec 18, 2025
6a0eab9
feat: contract write section (#320)
o-az Dec 19, 2025
c1a4d90
fix: handle `CORS` in contract verify API (#324)
o-az Dec 19, 2025
927b4ae
fix: blinking explore input during navigation (#323)
bpierre Dec 19, 2025
9d4707e
fix: expand addresses on the calls tab of /tx (#322)
bpierre Dec 19, 2025
ee198d1
fix: small layout issue (#327)
bpierre Dec 19, 2025
201d0de
feat: add devnet fee payer (#328)
struong Dec 19, 2025
4d571a8
fix: patch devnet definition for fee payer (#329)
struong Dec 19, 2025
adee58a
fix: /tx trace tab loading (#331)
bpierre Dec 19, 2025
d6af5ed
feat: add balances updates summary to the /tx overview (#330)
bpierre Dec 22, 2025
f13137f
fix: amount display and layout improvements (#332)
bpierre Dec 22, 2025
9b9dc7d
fix: use the token address for the TokenCreated known event (#333)
bpierre Dec 22, 2025
aed515c
feat: account types + tags (#334)
bpierre Dec 22, 2025
1005c2d
fix(contracts): enable bigger body size (#336)
Zygimantass Dec 24, 2025
1516224
fix(contracts): increase timeout to 30s (#337)
Zygimantass Dec 24, 2025
0d87a8e
fix(contracts): remove orchestra suffix from rpc (#338)
Zygimantass Dec 24, 2025
1f1a954
fix(explorer): don't use orchestra
Zygimantass Dec 24, 2025
ba392bf
fix: use process.env.INDEXER_API_KEY (#340)
struong Dec 25, 2025
f16cf97
chore: remove tempoDevnet patch in fee-payer service (#339)
struong Dec 25, 2025
240ae8b
chore(ci): update RPC url (#341)
o-az Dec 25, 2025
a9839a8
feat: passkey support in explorer
o-az Dec 19, 2025
5e8ebeb
feat: working passkey endpoint
o-az Dec 19, 2025
0c8b367
chore: cleanup
o-az Dec 19, 2025
eaa9dee
feat: working faucet
o-az Dec 19, 2025
8e09c82
tweaks
bpierre Dec 21, 2025
0473235
fix: fmt
o-az Dec 25, 2025
f26145f
fix: ws
o-az Dec 25, 2025
ddaa00b
fix: wagmi config and ts query usage (#342)
o-az Dec 25, 2025
e472cf1
chore: update deps and enhance pnpm (#343)
o-az Dec 25, 2025
9a7eeb1
feat: wagmi SSR persist cookie (#344)
o-az Dec 26, 2025
48ef938
chore: mark all sus queries with a `TODO` (#346)
o-az Dec 26, 2025
6a221d3
fix: fee-payer usage endpoint should be env aware (#345)
struong Dec 26, 2025
96059a0
feat: use Tempo RPC key when possible in `contract-verification` (#347)
o-az Dec 26, 2025
d77f9e2
feat: use "p" for pathUSD token icon (#349)
struong Dec 27, 2025
47e717a
fix: mitigate query (#352)
jxom Dec 29, 2025
bf47d7e
test: e2e testing for fee payer (#350)
struong Dec 30, 2025
152ef6f
Token page query improvements (#353)
gorried Dec 31, 2025
7efa6fe
Better OG image generation for tokens (#355)
gorried Dec 31, 2025
57ab4ed
feat(explorer): key "t" to toggle between transaction and receipt vie…
struong Dec 31, 2025
07b6819
chore: ui tweak (#356)
o-az Dec 31, 2025
6452bc7
fix: temporarily use testnet instead of prool for fee-payer CI test (…
struong Jan 1, 2026
0ff966c
chore: update deps & rm unused workspace (#357)
o-az Jan 1, 2026
5201307
feat: use RPC proxy (#358)
o-az Jan 1, 2026
6827e58
chore: don't refetch contract on nav & use prod mode (#360)
o-az Jan 1, 2026
875a924
fix: deploy command
o-az Jan 2, 2026
05c21b8
chore: make `main.yml` `workflow_dispatch`-able
o-az Jan 2, 2026
698a7d7
fix: add missing if termination
o-az Jan 2, 2026
66103cd
fix: elif
o-az Jan 2, 2026
cbff041
chore: add ci pnpm cache
o-az Jan 2, 2026
3f7ec57
chore: ease tokenlist api cors (#362)
o-az Jan 2, 2026
8dd1c22
fix: default fee payer tests to testnet image (#363)
struong Jan 3, 2026
89bbd0a
chore: bump viem to 2.43.5 (#366)
struong Jan 3, 2026
688590f
speeds up token page initial load (#367)
brendanjryan Jan 5, 2026
8937bbb
Add new hashes (#374)
achalvs Jan 6, 2026
e90aa38
feat: migrate `tempo.ts/wagmi` to `wagmi/tempo` (#376)
o-az Jan 6, 2026
7d50ac5
fix webauthn
bpierre Jan 8, 2026
b26eafa
wip
bpierre Jan 8, 2026
ca60c94
chore: trigger deploy
o-az Jan 7, 2026
68f20e9
feat: google search console verification
o-az Jan 7, 2026
c51378d
feat: faster block pages (#378)
gorried Jan 7, 2026
a60203c
feat: light posthog (#379)
o-az Jan 7, 2026
1b4784f
feat: setup `devnet` and `moderato` envs (#365)
o-az Jan 7, 2026
880f7f6
chore: wrangler config
o-az Jan 8, 2026
386c644
tightens up indicators for large number of tokens (#380)
brendanjryan Jan 8, 2026
0235a24
Show moderato info banner (#381)
jenpaff Jan 8, 2026
78dcb18
feat(fee-payer): add moderato testnet support (#382)
struong Jan 8, 2026
f58d45c
chore: fix link
tmm Jan 8, 2026
e7cdd33
update wrangler domains
bpierre Jan 8, 2026
3e58b4b
chore: bump viem to ^2.44.0 (#386)
struong Jan 9, 2026
b458581
fix: misc UI improvements (#375)
achalvs Jan 9, 2026
c42f21a
feat: home screen tweaks (#377)
bpierre Jan 9, 2026
1ac28e9
fix: moderato deployment related fixes
bpierre Jan 9, 2026
00cd33b
Update link for network upgrades documentation (#383)
snario Jan 9, 2026
17f8fcf
chore: pnpm dev => pnpm dev:moderato (#387)
bpierre Jan 9, 2026
f2ca237
fix: moderato ABIs (#388)
bpierre Jan 9, 2026
1fa05f1
fix: moderato ABIs (missing file)
bpierre Jan 9, 2026
a697450
feat: moderato spotlight links (#389)
bpierre Jan 9, 2026
e8be0e8
docs: cleaner explanation of change
snario Jan 9, 2026
115fd25
feat: make tokens-index chain-relative (#390)
bpierre Jan 9, 2026
6c1b4fe
feat: /blocks UI tweaks (#372)
bpierre Jan 9, 2026
007376f
fix: tweak banner colors (#391)
bpierre Jan 9, 2026
52285a5
feat: show header search on smaller viewports (#373)
bpierre Jan 9, 2026
0b2bc1b
fix: spotlight links (#392)
bpierre Jan 9, 2026
4bdd66f
fix: home screen tweaks (#393)
bpierre Jan 10, 2026
5e1c6d9
fix: address & hash max-width in sidebars (#394)
bpierre Jan 10, 2026
59ab17a
fix: handle undefined transactions on address page (#396)
emmajam Jan 10, 2026
a50510f
fix(explorer): use gasUsed instead of cumulativeGasUsed for tx fee (#…
0xrusowsky Jan 10, 2026
55fb6f2
fix(explorer): use absolute URL for OG image (#370)
tomhaverford624 Jan 11, 2026
9e4593b
fix: add multiple chain support to apps/og (#397)
bpierre Jan 12, 2026
9498e31
feat: use webp on apps/og (#398)
bpierre Jan 12, 2026
33f3f86
feat: explorer basic auth (#401)
bpierre Jan 12, 2026
3c2320f
refactor: explorer env cleanup (#400)
bpierre Jan 12, 2026
df98916
feat: posthog event instrumentation (#399)
gorried Jan 12, 2026
3a60cfa
chore: no session recording (#403)
gorried Jan 12, 2026
c79d984
feat: presto (#402)
bpierre Jan 12, 2026
ce625e8
wrangler update
bpierre Jan 12, 2026
91ff652
wrangler update
bpierre Jan 12, 2026
d921f89
chore: presto deployment (#408)
bpierre Jan 12, 2026
818c905
chore: update presto rpc (#409)
bpierre Jan 12, 2026
d1ffa0d
perf(explorer): batch token balance RPC calls with multicall (#407)
brendanjryan Jan 12, 2026
4186635
feat(fee-payer): add PostHog instrumentation (#404)
struong Jan 12, 2026
81857af
perf(explorer): defer PostHog analytics initialization (#405)
brendanjryan Jan 12, 2026
14d97be
wip
bpierre Jan 12, 2026
c5493e7
chore: resolve merge conflicts with main
gakonst Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,10 @@ jobs:
env: testnet
- app: fee-payer
env: moderato
- app: fee-payer
env: mainnet
#### other (single-env-apps)
- app: contract-verification
- app: key-manager
- app: og
- app: tokenlist
- app: contract-verification

steps:
- uses: actions/checkout@v6
Expand Down
71 changes: 5 additions & 66 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ jobs:
env: moderato
- app: explorer
env: devnet
- app: explorer
env: presto
#### fee-payer
- app: fee-payer
env: privy
Expand Down Expand Up @@ -88,68 +86,9 @@ jobs:
environment: ${{ env.CLOUDFLARE_ENV }}
command: versions upload

- name: Save Deployment Info
if: always()
shell: bash
run: |
mkdir -p deployment-info

if [[ "${{ steps.changes.outputs.relevant }}" != "true" ]]; then
STATUS="skipped"
DEPLOYMENT_URL=""
ALIAS_URL=""
elif [[ "${{ steps.deploy.outcome }}" == "success" ]]; then
STATUS="success"
DEPLOYMENT_URL="${{ steps.deploy.outputs.deployment-url }}"
ALIAS_URL="${{ steps.deploy.outputs.pages-deployment-alias-url }}"
else
STATUS="failed"
DEPLOYMENT_URL=""
ALIAS_URL=""
fi

FILENAME="deployment-info/${{ matrix.app }}${{ matrix.env && format('-{0}', matrix.env) || '' }}.json"
cat > "$FILENAME" << EOF
{
"app": "${{ matrix.app }}",
"env": "${{ matrix.env }}",
"status": "$STATUS",
"deployment_url": "$DEPLOYMENT_URL",
"deployment_alias_url": "$ALIAS_URL"
}
EOF

cat "$FILENAME"

- name: Upload Deployment Info
if: always()
uses: actions/upload-artifact@v6
with:
name: deployment-${{ matrix.app }}${{ matrix.env && format('-{0}', matrix.env) || '' }}
path: deployment-info/${{ matrix.app }}${{ matrix.env && format('-{0}', matrix.env) || '' }}.json
retention-days: 1

comment-deployments:
name: Post Deployment Table
runs-on: ubuntu-latest
needs: deploy-preview
if: always()
permissions:
pull-requests: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Download All Deployment Artifacts
uses: actions/download-artifact@v7
with:
pattern: deployment-*
path: deployments
merge-multiple: true

- name: Post Deployment Table
uses: ./.github/actions/post-deployment-table
- name: Comment Preview URL on PR
if: steps.changes.outputs.relevant == 'true'
uses: moojing/cf-preview-bot@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
deployments-path: deployments
deployment_url: ${{ steps.deploy.outputs.deployment-url }}
branch_preview_url: ${{ steps.deploy.outputs.pages-deployment-alias-url }}
88 changes: 48 additions & 40 deletions .github/workflows/test-verification.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,62 +3,70 @@ name: Test Contract Verification
on:
workflow_dispatch:
inputs:
networks:
description: "Networks to test (comma-separated: devnet,mainnet,testnet)"
rpc-url:
description: 'RPC URL'
required: false
default: "devnet,mainnet,testnet"
default: 'https://rpc.testnet.tempo.xyz'
verifier-url:
description: "Verifier URL"
description: 'Verifier URL'
required: false
default: "https://contracts.porto.workers.dev"
default: 'https://contracts.porto.workers.dev'
schedule:
- cron: "0 */6 * * *"
- cron: '0 */6 * * *'

defaults:
run:
shell: bash
working-directory: apps/contract-verification

env:
ACTIONS_RUNNER_DEBUG: true
TEMPO_RPC_URL: ${{ github.event.inputs.rpc-url || 'https://rpc.testnet.tempo.xyz' }}
VERIFIER_URL: ${{ github.event.inputs.verifier-url || 'https://contracts.porto.workers.dev' }}

jobs:
tempo-check:
verify-vyper:
env:
GH_TOKEN: ${{ github.token }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
network: [devnet, mainnet, testnet]
name: tempo-check (${{ matrix.network }})
steps:
- name: Check if network is selected
id: check
run: |
NETWORKS="${{ github.event.inputs.networks || 'devnet,mainnet,testnet' }}"
if [[ "$NETWORKS" == *"${{ matrix.network }}"* ]]; then
echo "skip=false" >> "$GITHUB_OUTPUT"
else
echo "skip=true" >> "$GITHUB_OUTPUT"
fi
- name: Checkout
uses: actions/checkout@v6

- name: Install Foundry
if: steps.check.outputs.skip != 'true'
uses: foundry-rs/foundry-toolchain@master
with:
version: nightly
network: tempo

- name: Fetch tempo-deploy.sh
if: steps.check.outputs.skip != 'true'
run: |
curl --location \
--fail \
--silent \
--show-error \
--request GET \
--url https://raw.githubusercontent.com/tempoxyz/tempo-foundry/tempo/.github/scripts/tempo-deploy.sh \
--output tempo-deploy.sh
chmod +x tempo-deploy.sh
- name: Install uv
uses: astral-sh/setup-uv@main
with:
version: latest
python-version: '3.14'

- name: Install vyper Compiler
run: uv tool install vyper

- name: Test Vyper (small counter)
run: ./scripts/test-vyper.sh

verify-solidity:
env:
GH_TOKEN: ${{ github.token }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: apps/contract-verification
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@master
with:
version: nightly
network: tempo

- name: Run tempo-deploy
if: steps.check.outputs.skip != 'true'
env:
ETH_RPC_URL: ${{ matrix.network == 'mainnet' && secrets.TEMPO_MAINNET_RPC_URL || matrix.network == 'testnet' && secrets.TEMPO_TESTNET_RPC_URL || secrets.TEMPO_DEVNET_RPC_URL }}
TEMPO_FEE_TOKEN: ${{ matrix.network == 'mainnet' && '0x20c00000000000000000000016c6514b53947fdc' || '0x20c0000000000000000000000000000000000002' }}
VERIFIER_URL: ${{ matrix.network == 'mainnet' && 'https://contracts.tempo.xyz' || env.VERIFIER_URL }}
run: ./tempo-deploy.sh
- name: Test Solidity
run: ./scripts/test-big-boy.sh
2 changes: 0 additions & 2 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,3 @@ jobs:
- name: Check code and types
run: pnpm gen:types && pnpm check

- name: Run Tempo Lints
run: pnpm lint:tempo
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Monorepo for Tempo Apps
| [`apps/fee-payer`](apps/fee-payer) | Fee payer. | [`sponsor.testnet.tempo.xyz`](<https://sponsor.testnet.tempo.xyz>) |
| [`apps/tokenlist`](apps/tokenlist) | Tempo Tokenlist Registry & API. | [`tokenlist.tempo.xyz`](<https://tokenlist.tempo.xyz>) |
| [`apps/contract-verification`](apps/contract-verification) | Smart contract verification service. | [`contracts.tempo.xyz`](<https://contracts.tempo.xyz>) |
| [`apps/key-manager`](apps/key-manager) | WebAuthn key management service. | [`keys.tempo.xyz`](<https://keys.tempo.xyz>) |

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion apps/contract-verification/container/compiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export async function getVyperPath(requestedVersion: string) {
await NodeFS.mkdir(VYPER_CACHE_DIR, { recursive: true })

// Sanitize the version string
// Vyper versions can be: 0.3.10, v0.3.10, 0.3.10+commit.XXXXXXX
// Vyper versions can be: 0.3.10, 0.4.0, 0.4.1, v0.3.10, 0.3.10+commit.XXXXXXX
const cleaned = requestedVersion.replace(/^v/, '')
const match = cleaned.match(/^(\d+\.\d+\.\d+)(?:\+commit\.[0-9a-f]+)?$/)
if (!match) throw new Error(`Unsupported Vyper version: ${requestedVersion}`)
Expand Down
4 changes: 0 additions & 4 deletions apps/contract-verification/env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@ interface EnvironmentVariables {
readonly WHITELISTED_ORIGINS: string
readonly VITE_LOG_LEVEL: 'info' | 'warn' | 'silent'

readonly VITEST_ENV: 'devnet' | 'testnet' | 'mainnet'

readonly TEMPO_RPC_KEY: string

readonly CLOUDFLARE_ACCOUNT_ID: string
readonly CLOUDFLARE_DATABASE_ID: string
readonly CLOUDFLARE_D1_TOKEN: string
Expand Down
11 changes: 2 additions & 9 deletions apps/contract-verification/openapi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 6 additions & 14 deletions apps/contract-verification/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,48 +11,40 @@
"dev": "vite dev",
"preview": "vite preview",
"build": "vite build",
"check": "pnpm check:biome && pnpm check:types",
"check:biome": "biome check --write --unsafe",
"check": "biome check . --write --unsafe",
"check:types": "tsgo --project tsconfig.json --noEmit",
"test": "vitest --run",
"vitest": "vitest",
"gen:types": "test -f .env || cp .env.example .env; CLOUDFLARE_ENV= wrangler types",
"tail": "wrangler tail",
"db:studio": "drizzle-kit studio --config='drizzle.config.ts'",
"db:push": "CLOUDFLARE_D1_ENVIRONMENT='remote' drizzle-kit push --config='drizzle.config.ts'"
},
"dependencies": {
"@cloudflare/containers": "^0.1.0",
"@cloudflare/containers": "^0.0.31",
"cbor-x": "^1.6.0",
"drizzle-orm": "^0.45.1",
"hono": "catalog:",
"hono-rate-limiter": "catalog:",
"ox": "catalog:",
"semver": "^7.7.3",
"tempo.ts": "catalog:",
"viem": "catalog:",
"zod": "catalog:"
"viem": "catalog:"
},
"devDependencies": {
"@biomejs/biome": "catalog:",
"@cloudflare/vite-plugin": "catalog:",
"@cloudflare/vitest-pool-workers": "catalog:",
"@cloudflare/workers-types": "catalog:",
"@libsql/client": "^0.17.0",
"@libsql/client": "^0.15.15",
"@scalar/api-reference": "catalog:",
"@total-typescript/ts-reset": "catalog:",
"@types/bun": "^1.3.6",
"@types/bun": "^1.3.5",
"@types/node": "catalog:",
"@types/semver": "^7.7.1",
"dotenv": "catalog:",
"@vitest/ui": "catalog:",
"dbmate": "^2.29.3",
"dbmate": "^2.28.0",
"drizzle-kit": "^0.31.8",
"esbuild": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vite-plugin-devtools-json": "catalog:",
"vitest": "catalog:",
"wrangler": "catalog:"
},
"license": "MIT"
Expand Down
31 changes: 31 additions & 0 deletions apps/contract-verification/scripts/Mail.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import {Script} from "forge-std/Script.sol";
import {ITIP20} from "tempo-std/interfaces/ITIP20.sol";
import {ITIP20RolesAuth} from "tempo-std/interfaces/ITIP20RolesAuth.sol";
import {StdPrecompiles} from "tempo-std/StdPrecompiles.sol";
import {StdTokens} from "tempo-std/StdTokens.sol";
import {Mail} from "../src/Mail.sol";

contract MailScript is Script {
function setUp() public {}

function run() public {
vm.startBroadcast();

// StdPrecompiles.TIP_FEE_MANAGER.setUserToken(StdTokens.ALPHA_USD_ADDRESS);

// ITIP20 token =
// ITIP20(StdPrecompiles.TIP20_FACTORY.createToken("testUSD", "tUSD", "USD", StdTokens.PATH_USD, msg.sender));

// ITIP20RolesAuth(address(token)).grantRole(token.ISSUER_ROLE(), msg.sender);

// token.mint(msg.sender, 1_000_000 * 10 ** token.decimals());

ITIP20 token = ITIP20(StdTokens.PATH_USD);
new Mail(token);

vm.stopBroadcast();
}
}
Loading