Skip to content

Commit

Permalink
feat: rest of tokens bridged to Sonic (#536)
Browse files Browse the repository at this point in the history
### Description

- sSOL, USD*, USDC, USDT, and SONIC bridged between Solana and Sonic

### Backward compatibility

<!--
Are these changes backward compatible? Note that additions are backwards
compatible.

Yes/No
-->

### Testing

<!--
Have any new metadata configs and deployment addresses been used with
any Hyperlane tooling, such as the CLI?
-->

---------

Co-authored-by: Paul Balaji <[email protected]>
  • Loading branch information
tkporter and paulbalaji authored Jan 30, 2025
1 parent 63363b7 commit 427974d
Show file tree
Hide file tree
Showing 15 changed files with 165 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .changeset/moody-crabs-deliver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@hyperlane-xyz/registry': minor
---

Add sSOL, USDStar, USDC, USDT, and SONIC bridged between Solana and Sonic. Rename USD* -> USDStar.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
solanamainnet:
collateral: 2e6hyJbUpbhqbJzorDZ1m4QVTj5oPhsn2H3KBaMFVXAz
sonicsvm:
synthetic: 5sPRiRLfmohVmtkgiGV6scrzy2C6qEZRGRUiePZf1Fs2
23 changes: 23 additions & 0 deletions deployments/warp_routes/SONIC/solanamainnet-sonicsvm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# yaml-language-server: $schema=../schema.json
tokens:
- addressOrDenom: 2e6hyJbUpbhqbJzorDZ1m4QVTj5oPhsn2H3KBaMFVXAz
chainName: solanamainnet
coinGeckoId: sonic-svm
collateralAddressOrDenom: SonicxvLud67EceaEzCLRnMTBqzYUUYNr93DBkBdDES
connections:
- token: sealevel|sonicsvm|5sPRiRLfmohVmtkgiGV6scrzy2C6qEZRGRUiePZf1Fs2
decimals: 9
logoURI: /deployments/warp_routes/SONIC/logo.svg
name: Sonic SVM
standard: SealevelHypCollateral
symbol: SONIC
- addressOrDenom: 5sPRiRLfmohVmtkgiGV6scrzy2C6qEZRGRUiePZf1Fs2
chainName: sonicsvm
collateralAddressOrDenom: mrujEYaN1oyQXDHeYNxBYpxWKVkQ2XsGxfznpifu4aL
connections:
- token: sealevel|solanamainnet|2e6hyJbUpbhqbJzorDZ1m4QVTj5oPhsn2H3KBaMFVXAz
decimals: 9
logoURI: /deployments/warp_routes/SONIC/logo.svg
name: Sonic SVM
standard: SealevelHypSynthetic
symbol: SONIC
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
solanamainnet:
collateral: 996EsR8a7MC6odE6j7sjsArmDQVqB96qWu84wHdthahm
sonicsvm:
synthetic: BvTEYSqCcfMwpAriC1vDpNhzR1JWzasRFfCPCdgsYaCd
23 changes: 23 additions & 0 deletions deployments/warp_routes/USDC/solanamainnet-sonicsvm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# yaml-language-server: $schema=../schema.json
tokens:
- addressOrDenom: 996EsR8a7MC6odE6j7sjsArmDQVqB96qWu84wHdthahm
chainName: solanamainnet
coinGeckoId: usd-coin
collateralAddressOrDenom: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
connections:
- token: sealevel|sonicsvm|BvTEYSqCcfMwpAriC1vDpNhzR1JWzasRFfCPCdgsYaCd
decimals: 6
logoURI: /deployments/warp_routes/USDC/logo.svg
name: USDC
standard: SealevelHypCollateral
symbol: USDC
- addressOrDenom: BvTEYSqCcfMwpAriC1vDpNhzR1JWzasRFfCPCdgsYaCd
chainName: sonicsvm
collateralAddressOrDenom: HbDgpvHVxeNSRCGEUFvapCYmtYfqxexWcCbxtYecruy8
connections:
- token: sealevel|solanamainnet|996EsR8a7MC6odE6j7sjsArmDQVqB96qWu84wHdthahm
decimals: 6
logoURI: /deployments/warp_routes/USDC/logo.svg
name: USDC
standard: SealevelHypSynthetic
symbol: USDC
File renamed without changes
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
solanamainnet:
collateral: FRPTWpmnNPm4LS2a5NUL1QenUrzGDAuifZBUi1mTWTdt
sonicsvm:
synthetic: 68g96Cq16vKAqyG79BFVeJCgitjK9fQ1NRCRmcPkJtDB
24 changes: 24 additions & 0 deletions deployments/warp_routes/USDStar/solanamainnet-sonicsvm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# yaml-language-server: $schema=../schema.json
tokens:
- addressOrDenom: FRPTWpmnNPm4LS2a5NUL1QenUrzGDAuifZBUi1mTWTdt
chainName: solanamainnet
# USD* is not yet on Coingecko. As it's a stablecoin, we approximate with USDC's value.
coinGeckoId: usd-coin
collateralAddressOrDenom: BenJy1n3WTx9mTjEvy63e8Q1j4RqUc6E4VBMz3ir4Wo6
connections:
- token: sealevel|sonicsvm|68g96Cq16vKAqyG79BFVeJCgitjK9fQ1NRCRmcPkJtDB
decimals: 6
logoURI: /deployments/warp_routes/USDStar/logo.svg
name: USD Star
standard: SealevelHypCollateral
symbol: USD*
- addressOrDenom: 68g96Cq16vKAqyG79BFVeJCgitjK9fQ1NRCRmcPkJtDB
chainName: sonicsvm
collateralAddressOrDenom: BhaUtuAuuv8B5BiPx4LZyaPhY8CCtJsGNAic24pZzV78
connections:
- token: sealevel|solanamainnet|FRPTWpmnNPm4LS2a5NUL1QenUrzGDAuifZBUi1mTWTdt
decimals: 6
logoURI: /deployments/warp_routes/USDStar/logo.svg
name: USD Star
standard: SealevelHypSynthetic
symbol: USD*
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
solanamainnet:
collateral: CKrNt2y1e2H9728mHRVYyF2owy9eKreepRKpTMj2j8JG
sonicsvm:
synthetic: BGW8geBw12Yyp4rW7Fp97a3CQRA4Czi8PdtuV2Ec3Vdy
23 changes: 23 additions & 0 deletions deployments/warp_routes/USDT/solanamainnet-sonicsvm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# yaml-language-server: $schema=../schema.json
tokens:
- addressOrDenom: CKrNt2y1e2H9728mHRVYyF2owy9eKreepRKpTMj2j8JG
chainName: solanamainnet
coinGeckoId: tether
collateralAddressOrDenom: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
connections:
- token: sealevel|sonicsvm|BGW8geBw12Yyp4rW7Fp97a3CQRA4Czi8PdtuV2Ec3Vdy
decimals: 6
logoURI: /deployments/warp_routes/USDT/logo.svg
name: USDT
standard: SealevelHypCollateral
symbol: USDT
- addressOrDenom: BGW8geBw12Yyp4rW7Fp97a3CQRA4Czi8PdtuV2Ec3Vdy
chainName: sonicsvm
collateralAddressOrDenom: qPzdrTCvxK3bxoh2YoTZtDcGVgRUwm37aQcC3abFgBy
connections:
- token: sealevel|solanamainnet|CKrNt2y1e2H9728mHRVYyF2owy9eKreepRKpTMj2j8JG
decimals: 6
logoURI: /deployments/warp_routes/USDT/logo.svg
name: USDT
standard: SealevelHypSynthetic
symbol: USDT
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
solanamainnet:
collateral: 9PHKQFEDzedHuigSm1ZBojEX4DVF3cincGZwy3k7VHTN
sonicsvm:
synthetic: XYbsJQGzZgPDbt9Swd2ao54nhGSq8Wjq23MoogHvEq6
23 changes: 23 additions & 0 deletions deployments/warp_routes/sSOL/solanamainnet-sonicsvm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# yaml-language-server: $schema=../schema.json
tokens:
- addressOrDenom: 9PHKQFEDzedHuigSm1ZBojEX4DVF3cincGZwy3k7VHTN
chainName: solanamainnet
coinGeckoId: solayer-staked-sol
collateralAddressOrDenom: sSo14endRuUbvQaJS3dq36Q829a3A6BEfoeeRGJywEh
connections:
- token: sealevel|sonicsvm|XYbsJQGzZgPDbt9Swd2ao54nhGSq8Wjq23MoogHvEq6
decimals: 9
logoURI: /deployments/warp_routes/sSOL/logo.svg
name: Solayer SOL
standard: SealevelHypCollateral
symbol: sSOL
- addressOrDenom: XYbsJQGzZgPDbt9Swd2ao54nhGSq8Wjq23MoogHvEq6
chainName: sonicsvm
collateralAddressOrDenom: 21e27teReDgn7Z3J1ogdpJmFhUi75eYeiCD22zqCuwpd
connections:
- token: sealevel|solanamainnet|9PHKQFEDzedHuigSm1ZBojEX4DVF3cincGZwy3k7VHTN
decimals: 9
logoURI: /deployments/warp_routes/sSOL/logo.svg
name: Solayer SOL
standard: SealevelHypSynthetic
symbol: sSOL
1 change: 1 addition & 0 deletions src/consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export const DEFAULT_GITHUB_REGISTRY = 'https://github.com/hyperlane-xyz/hyperla
export const GITHUB_FETCH_CONCURRENCY_LIMIT = 5;

export const CHAIN_FILE_REGEX = /chains\/([a-z0-9]+)\/([a-z]+)\.(yaml|svg)/;
export const WARP_ROUTE_SYMBOL_DIRECTORY_REGEX = /warp_routes\/([a-zA-Z0-9]+)$/;
export const WARP_ROUTE_CONFIG_FILE_REGEX = /warp_routes\/([a-zA-Z0-9]+)\/([a-z0-9-]+)-config.yaml/;
export const WARP_ROUTE_DEPLOY_FILE_REGEX = /warp_routes\/([a-zA-Z0-9]+)\/([a-z0-9-]+)-deploy.yaml/;

Expand Down
31 changes: 23 additions & 8 deletions test/unit/warp-routes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,29 @@ import { FileSystemRegistry } from '../../src/registry/FileSystemRegistry.js';
import { createWarpRouteConfigId, parseWarpRouteConfigId } from '../../src/registry/warp-utils.js';
import path from 'path';
import fs from 'fs';
import { WARP_ROUTE_SYMBOL_DIRECTORY_REGEX } from '../../src/consts.js';

const BASE_URI = './';

describe('Warp Core Configs', () => {
const localRegistry = new FileSystemRegistry({ uri: BASE_URI });
const chainMetadata = localRegistry.getMetadata();
const multiProvider = new MultiProtocolProvider(chainMetadata);
const routes = localRegistry.getWarpRoutes();

it('All warp route symbol directories meet regex requirement', () => {
const warpRoutesPath = path.join(BASE_URI, 'deployments', 'warp_routes');
const symbolDirs = fs
.readdirSync(warpRoutesPath, { withFileTypes: true })
.filter((entry) => entry.isDirectory())
// Convert to a path within the deployments directory, as expected by the regex
.map((entry) => path.join('warp_routes', entry.name));

for (const symbolDir of symbolDirs) {
expect(WARP_ROUTE_SYMBOL_DIRECTORY_REGEX.test(symbolDir), `Symbol directory ${symbolDir} does not meet expected regex`).to.be.true;
}
});

for (const id of Object.keys(routes)) {
it(`WarpCore ${id} is valid`, async () => {
const config = routes[id];
Expand Down Expand Up @@ -129,16 +144,16 @@ describe('Warp Deploy Configs', () => {
// These Ids do not validate due to owner
// Remove after https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/5292
const excludeIds = [
'ECLIP/arbitrum-neutron',
'INJ/inevm-injective',
'TIA/arbitrum-neutron',
'INJ/inevm-injective',
'TIA/arbitrum-neutron',
'TIA/eclipsemainnet-stride',
'TIA/mantapacific-neutron',
'ECLIP/arbitrum-neutron',
'INJ/inevm-injective',
'TIA/arbitrum-neutron',
'INJ/inevm-injective',
'TIA/arbitrum-neutron',
'TIA/eclipsemainnet-stride',
'TIA/mantapacific-neutron',
'stTIA/eclipsemainnet-stride'
];
const configs = Object.keys(warpDeploys).filter(id =>!excludeIds.includes(id));
const configs = Object.keys(warpDeploys).filter(id => !excludeIds.includes(id));
for (const id of configs) {
it(`Deploy config ${id} is valid`, async () => {
WarpRouteDeployConfigSchema.parse(warpDeploys[id]);
Expand Down

0 comments on commit 427974d

Please sign in to comment.