Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .beads/pr-context.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":"shapeshiftWeb-xfmg","title":"shepherd pr 12194 ci fixes","status":"closed","priority":2,"issue_type":"task","owner":"17035424+gomesalexandre@users.noreply.github.com","created_at":"2026-03-20T01:27:08.617052+01:00","created_by":"gomes","updated_at":"2026-03-20T01:33:31.6828+01:00","closed_at":"2026-03-20T01:33:31.6828+01:00","close_reason":"Closed"}
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ VITE_FEATURE_YIELDS_PAGE=true
VITE_YIELD_XYZ_API_KEY=06903960-e442-4870-81eb-03ff3ad4c035
VITE_FEATURE_YIELD_MULTI_ACCOUNT=true
VITE_TON_NODE_URL=https://toncenter.com/api/v2/jsonRPC
VITE_TEMPO_NODE_URL=
VITE_FEATURE_STONFI_SWAP=true
VITE_FEATURE_TON=true
VITE_FEATURE_EARN_TAB=true
Expand All @@ -377,3 +378,4 @@ VITE_AGENTIC_SERVER_BASE_URL=https://shapeshiftossagentic-server-production.up.r

# MetaMask native multichain (BTC/SOL without snaps)
VITE_FEATURE_MM_NATIVE_MULTICHAIN=false
VITE_FEATURE_TEMPO=false
2 changes: 2 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ VITE_SOLANA_NODE_URL=https://dev-api.solana.shapeshift.com/api/v1/jsonrpc
VITE_JITO_BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf
VITE_STARKNET_NODE_URL=https://rpc.starknet.lava.build
VITE_TRON_NODE_URL=https://api.trongrid.io
VITE_TEMPO_NODE_URL=https://rpc.tempo.xyz

# midgard
VITE_THORCHAIN_MIDGARD_URL=https://dev-api.thorchain.shapeshift.com/midgard/v2
Expand Down Expand Up @@ -155,5 +156,6 @@ VITE_FEATURE_EARN_TAB=true
VITE_FEATURE_YIELD_MULTI_ACCOUNT=true
VITE_FEATURE_AGENTIC_CHAT=true
VITE_FEATURE_MM_NATIVE_MULTICHAIN=true
VITE_FEATURE_TEMPO=true
# VITE_AGENTIC_SERVER_BASE_URL=http://localhost:4111
VITE_AGENTIC_SERVER_BASE_URL=https://shapeshiftossagentic-server-production.up.railway.app
30 changes: 30 additions & 0 deletions chains/tempo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"camelName": "tempo",
"pascalName": "Tempo",
"upperName": "TEMPO",
"chainId": 4217,
"viemChainName": "tempo",
"nativeSymbol": "USD",
"nativeName": "USD",
"nativePrecision": 18,
"isNativeEth": false,
"color": "#22C55E",
"networkIconUrl": "https://assets.relay.link/icons/4217/light.png",
"nativeIconUrl": "https://assets.relay.link/icons/4217/light.png",
"explorerUrl": "https://explore.tempo.xyz",
"explorerAddressLink": "https://explore.tempo.xyz/address/",
"explorerTxLink": "https://explore.tempo.xyz/receipt/",
"rpcUrl": "https://rpc.tempo.xyz",
"fallbackRpcUrls": ["https://rpc.tempo.xyz"],
"coingeckoPlatform": "tempo",
"wrappedNativeAddress": null,
"relatedAssetKey": null,
"shortName": "USD",
"swappers": {
"relay": { "supported": true, "relayChainId": 4217 },
"across": { "supported": false },
"portals": { "supported": false },
"zerion": { "supported": false },
"yieldxyz": { "supported": false }
}
}
91 changes: 91 additions & 0 deletions e2e/fixtures/tempo-chain-regression.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Tempo Chain Regression
description: >
Regression test for Tempo second-class EVM chain integration. Verifies the
chain is discoverable/selectable in the trade modal, Tempo tradeable assets
and icons render correctly, Tempo account connection works, and small
cross-chain + same-chain Tempo swap flows succeed. Also verifies a Tempo
token self-send works and fee display is sane. Tempo has no normal native gas
coin UX - supported Tempo tokens are the practical fee/tradeable assets.
route: /trade
depends_on:
- wallet-health.yaml
steps:
- name: "Tempo: chain appears in trade chain filter"
instruction: >
Open the buy/receive asset selector on the trade page. Open the chain
filter dropdown and verify Tempo appears as an available chain option.
Select Tempo from the chain filter. Confirm the asset list updates to the
Tempo-only view and the selected filter chip/button shows Tempo.
expected: Tempo is visible in the chain dropdown, selectable, and filters the asset list
screenshot: true

- name: "Tempo: tradeable asset rows are visible, selectable, and icons are not borked"
instruction: >
While Tempo is selected in the chain filter, look for the Tempo tradeable
asset rows. The expected swappable Tempo assets are pathUSD and USDC.
Verify both rows are present, the network/chain attribution clearly says
Tempo, and the asset + network icons render normally rather than showing
a broken image, empty placeholder, or obviously wrong chain icon. Click
USDC to select it as the buy asset.
expected: pathUSD and USDC on Tempo are visible with sane icons, and USDC becomes the selected buy asset
screenshot: true

- name: "Tempo: popular assets are populated under the Tempo filter"
instruction: >
Re-open the buy/receive asset selector if needed, keep Tempo selected in
the chain filter, and inspect the modal content. Verify there is a
Popular Assets section or equivalent top section with Tempo assets, and
that it is not empty. Confirm pathUSD and USDC are present as selectable
Tempo options.
expected: Tempo-filtered popular assets are populated and both pathUSD and USDC are available
screenshot: true

- name: "Tempo: connect chain account so receive address resolves"
instruction: >
If the trade form says no Tempo address is connected, click the Tempo
connect/manage-accounts flow and add a Tempo account. Finish the modal
flow and return to trade. Confirm the receive address area resolves to an
actual Tempo address instead of the missing-address warning.
expected: Tempo receive address resolves successfully after connecting a Tempo account
screenshot: true

- name: "Tempo: cross-chain swap into USDC ($1-ish)"
instruction: >
Configure a small cross-chain trade into Tempo USDC. Use a funded sell
asset from another chain - prefer ETH on Ethereum, but if that wallet is
unfunded use another asset/chain with available balance. Enter roughly
$1 of sell amount. Wait for a quote, open the trade preview, then confirm
and sign the trade. Wait for completion and dismiss any success
notification.
expected: A small cross-chain swap into USDC on Tempo completes successfully
screenshot: true

- name: "Tempo: same-chain USDC to pathUSD swap works"
instruction: >
Configure a small same-chain Tempo swap from USDC to pathUSD using the
Tempo balance received in the previous step. Use a small amount like
$0.20 or the closest safe amount available. Wait for a quote, open the
trade preview, approve if required, then confirm and sign the swap. Wait
for completion and dismiss any success notification.
expected: A same-chain Tempo USDC to pathUSD swap completes successfully
screenshot: true

- name: "Tempo: same-chain pathUSD to USDC swap works"
instruction: >
Configure a small same-chain Tempo swap from pathUSD back to USDC using
the Tempo balance now in the wallet. Use a small amount like $0.10 or the
closest safe amount available. Wait for a quote, open the trade preview,
approve if required, then confirm and sign the swap. Wait for completion
and dismiss any success notification.
expected: A same-chain Tempo pathUSD to USDC swap completes successfully
screenshot: true

- name: "Tempo: self-send of a Tempo token works and fee display is sane"
instruction: >
Open the send flow for Tempo USDC and self-send a very small amount such
as $0.10 to the currently connected Tempo account address. Verify the
confirm screen shows a sane small fee amount in the Tempo token rather
than a giant nonsense value. Confirm and sign the transaction, then wait
for the send success state or success toast.
expected: A Tempo USDC self-send completes successfully and the displayed fee looks sane
screenshot: true
11 changes: 11 additions & 0 deletions headers/csps/chains/tempo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { loadEnv } from 'vite'

import { FALLBACK_RPC_URLS } from '../../../packages/contracts/src/fallbackRpcUrls'
import type { Csp } from '../../types'

const mode = process.env.MODE ?? process.env.NODE_ENV ?? 'development'
const env = loadEnv(mode, process.cwd(), '')

export const csp: Csp = {
'connect-src': [env.VITE_TEMPO_NODE_URL, ...FALLBACK_RPC_URLS.tempo],
}
2 changes: 2 additions & 0 deletions headers/csps/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import { csp as sonic } from './chains/sonic'
import { csp as starknet } from './chains/starknet'
import { csp as story } from './chains/story'
import { csp as sui } from './chains/sui'
import { csp as tempo } from './chains/tempo'
import { csp as thorchain } from './chains/thorchain'
import { csp as ton } from './chains/ton'
import { csp as tron } from './chains/tron'
Expand Down Expand Up @@ -208,4 +209,5 @@ export const csps = [
railway,
discord,
yieldxyz,
tempo,
]

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"eip155:10/erc20:0x94b008aa00579c1307b0ef2c499ad98a8ce58e58":"tether","eip155:10/erc20:0x0b2c639c533813f4aa9d7837caf62653d097ff85":"usd-coin","eip155:10/erc20:0x1f32b1c2345538c0c6f582fcb022739c4a194ebb":"lido-finance-wsteth","eip155:10/erc20:0x68f180fcce6836688e9084f035309e29bf0a2095":"wrapped-bitcoin","eip155:10/erc20:0x4200000000000000000000000000000000000006":"weth","eip155:10/erc20:0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6":"chainlink","eip155:10/erc20:0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff":"wrapped-eeth","eip155:10/erc20:0x6fd9d7ad17242c41f7131d257212c54a0e816691":"uniswap","eip155:10/erc20:0xdc6ff44d5d932cbd77b52e5612ba0529dc6226f1":"worldcoin-org","eip155:10/erc20:0x9bcef72be871e61ed4fbbc7630889bee758eb81d":"rocket-pool-eth","eip155:10/erc20:0x6985884c4392d348587b19cb9eaaf157f13271cd":"layerzero","eip155:10/erc20:0x0994206dfe8de6ec6920ff4d779b0d950605fb53":"curve-dao-token","eip155:10/erc20:0x4200000000000000000000000000000000000042":"optimism-ethereum","eip155:10/erc20:0x2e3d870790dc77a83dd1d18184acc7439a53f475":"frax","eip155:10/erc20:0x80eede496655fb9047dd39d9f418d5483ed600df":"frax-usd","eip155:10/erc20:0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91":"wormhole","eip155:10/erc20:0xc6bdfc4f2e90196738873e824a9efa03f7c64176":"vicicoin","eip155:10/erc20:0x8700daec35af8ff88c16bdf0418774cb3d7599b4":"synthetix-network-token","eip155:10/erc20:0x3eaeb77b03dbc0f6321ae1b72b2e9adb0f60112b":"sushiswap","eip155:10/erc20:0xaeaeed23478c3a4b798e4ed40d8b7f41366ae861":"ankr","eip155:10/erc20:0xa00e3a3511aac35ca78530c85007afcd31753819":"kyber-network","eip155:10/erc20:0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9":"susd","eip155:10/erc20:0xec6adef5e1006bb305bb1975333e8fc4071295bf":"cartesi","eip155:10/erc20:0xe05a08226c49b636acf99c40da8dc6af83ce5bb3":"ankreth","eip155:10/erc20:0x5f8d72676e37197b5011afc64d8641af2fe41fdb":"measurable-data-token","eip155:10/erc20:0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151":"dhedge-dao","eip155:10/erc20:0xc7edf7b7b3667a06992508e7b156eff794a9e1c8":"persistence","eip155:10/erc20:0xe453d6649643f1f460c371dc3d1da98f7922fe51":"fuse-network","eip155:10/erc20:0x528cdc92eab044e1e39fe43b9514bfdab4412b98":"giveth","eip155:10/erc20:0x1da650c3b2daa8aa9ff6f661d4156ce24d08a062":"dentacoin","eip155:10/erc20:0x6a661312938d22a2a0e27f585073e4406903990a":"mahadao"}
{"eip155:10/erc20:0x94b008aa00579c1307b0ef2c499ad98a8ce58e58":"tether","eip155:10/erc20:0x0b2c639c533813f4aa9d7837caf62653d097ff85":"usd-coin","eip155:10/erc20:0x1f32b1c2345538c0c6f582fcb022739c4a194ebb":"lido-finance-wsteth","eip155:10/erc20:0x68f180fcce6836688e9084f035309e29bf0a2095":"wrapped-bitcoin","eip155:10/erc20:0x4200000000000000000000000000000000000006":"weth","eip155:10/erc20:0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6":"chainlink","eip155:10/erc20:0x5a7facb970d094b6c7ff1df0ea68d99e6e73cbff":"wrapped-eeth","eip155:10/erc20:0x6fd9d7ad17242c41f7131d257212c54a0e816691":"uniswap","eip155:10/erc20:0xdc6ff44d5d932cbd77b52e5612ba0529dc6226f1":"worldcoin-org","eip155:10/erc20:0x9bcef72be871e61ed4fbbc7630889bee758eb81d":"rocket-pool-eth","eip155:10/erc20:0x6985884c4392d348587b19cb9eaaf157f13271cd":"layerzero","eip155:10/erc20:0x0994206dfe8de6ec6920ff4d779b0d950605fb53":"curve-dao-token","eip155:10/erc20:0x2e3d870790dc77a83dd1d18184acc7439a53f475":"frax","eip155:10/erc20:0x4200000000000000000000000000000000000042":"optimism-ethereum","eip155:10/erc20:0x80eede496655fb9047dd39d9f418d5483ed600df":"frax-usd","eip155:10/erc20:0xc6bdfc4f2e90196738873e824a9efa03f7c64176":"vicicoin","eip155:10/erc20:0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91":"wormhole","eip155:10/erc20:0x8700daec35af8ff88c16bdf0418774cb3d7599b4":"synthetix-network-token","eip155:10/erc20:0x3eaeb77b03dbc0f6321ae1b72b2e9adb0f60112b":"sushiswap","eip155:10/erc20:0xaeaeed23478c3a4b798e4ed40d8b7f41366ae861":"ankr","eip155:10/erc20:0xa00e3a3511aac35ca78530c85007afcd31753819":"kyber-network","eip155:10/erc20:0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9":"susd","eip155:10/erc20:0xec6adef5e1006bb305bb1975333e8fc4071295bf":"cartesi","eip155:10/erc20:0xe05a08226c49b636acf99c40da8dc6af83ce5bb3":"ankreth","eip155:10/erc20:0x5f8d72676e37197b5011afc64d8641af2fe41fdb":"measurable-data-token","eip155:10/erc20:0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151":"dhedge-dao","eip155:10/erc20:0xc7edf7b7b3667a06992508e7b156eff794a9e1c8":"persistence","eip155:10/erc20:0xe453d6649643f1f460c371dc3d1da98f7922fe51":"fuse-network","eip155:10/erc20:0x528cdc92eab044e1e39fe43b9514bfdab4412b98":"giveth","eip155:10/erc20:0x1da650c3b2daa8aa9ff6f661d4156ce24d08a062":"dentacoin","eip155:10/erc20:0x6a661312938d22a2a0e27f585073e4406903990a":"mahadao"}
Loading
Loading