diff --git a/packages/currency/src/chains/evm/data/sonic.ts b/packages/currency/src/chains/evm/data/sonic.ts new file mode 100644 index 0000000000..f492cdf9e9 --- /dev/null +++ b/packages/currency/src/chains/evm/data/sonic.ts @@ -0,0 +1 @@ +export const chainId = 146; diff --git a/packages/currency/src/chains/evm/index.ts b/packages/currency/src/chains/evm/index.ts index 6c4123071b..aaa41a6a9a 100644 --- a/packages/currency/src/chains/evm/index.ts +++ b/packages/currency/src/chains/evm/index.ts @@ -28,6 +28,7 @@ import * as SepoliaDefinition from './data/sepolia'; import * as ZkSyncEraTestnetDefinition from './data/zksync-era-testnet'; import * as ZkSyncEraDefinition from './data/zksync-era'; import * as BaseDefinition from './data/base'; +import * as SonicDefinition from './data/sonic'; export type EvmChain = CurrencyTypes.Chain & { chainId: number; @@ -62,4 +63,5 @@ export const chains: Record = { zksynceratestnet: ZkSyncEraTestnetDefinition, zksyncera: ZkSyncEraDefinition, base: BaseDefinition, + sonic: SonicDefinition, }; diff --git a/packages/currency/src/conversion-aggregators.ts b/packages/currency/src/conversion-aggregators.ts index 9492f7505a..720d5b4e09 100644 --- a/packages/currency/src/conversion-aggregators.ts +++ b/packages/currency/src/conversion-aggregators.ts @@ -35,6 +35,7 @@ const noConversionNetworks: CurrencyTypes.AggregatorsMap = { 'aurora-testnet': {}, base: {}, celo: {}, + sonic: {}, }; /** diff --git a/packages/currency/src/native.ts b/packages/currency/src/native.ts index ac7aae6dc7..0e0631274f 100644 --- a/packages/currency/src/native.ts +++ b/packages/currency/src/native.ts @@ -172,6 +172,12 @@ export const nativeCurrencies: Record = { core: { chainId: 1116, name: 'core' }, zksynceratestnet: { chainId: 280, name: 'zksynceratestnet' }, zksyncera: { chainId: 324, name: 'zksyncera' }, + sonic: { chainId: 146, name: 'sonic' }, }; /** @@ -33,6 +34,7 @@ export class MultichainExplorerApiProvider extends ethers.providers.EtherscanPro super(network, apiKey); } + // eslint-disable-next-line complexity getBaseUrl(): string { switch (this.network.name) { case 'sokol': @@ -72,6 +74,10 @@ export class MultichainExplorerApiProvider extends ethers.providers.EtherscanPro return 'https://goerli.explorer.zksync.io/'; case 'zksyncera': return 'https://explorer.zksync.io/'; + case 'base': + return 'https://api.basescan.org/api'; + case 'sonic': + return 'https://api.sonicscan.org/api'; default: return super.getBaseUrl(); } diff --git a/packages/smart-contracts/hardhat.config.ts b/packages/smart-contracts/hardhat.config.ts index 3f54db1bb0..77ec4e98f0 100644 --- a/packages/smart-contracts/hardhat.config.ts +++ b/packages/smart-contracts/hardhat.config.ts @@ -204,6 +204,11 @@ export default { chainId: 8453, accounts, }, + sonic: { + url: url('sonic'), + chainId: 146, + accounts, + }, }, zksolc: { version: '1.3.16', @@ -243,6 +248,7 @@ export default { mantle: 'api-key', 'mantle-testnet': 'api-key', celo: process.env.CELOSCAN_API_KEY, + sonic: process.env.SONIC_API_KEY, }, customChains: [ { @@ -285,6 +291,14 @@ export default { browserURL: 'https://celoscan.io/', }, }, + { + network: 'sonic', + chainId: 146, + urls: { + apiURL: 'https://api.sonicscan.org/api', + browserURL: 'https://sonicscan.org/', + }, + }, ], }, tenderly: { @@ -317,6 +331,7 @@ export default { 'avalanche', 'optimism', 'moonbeam', + 'sonic', ], gasLimit: undefined, deployerAddress: requestDeployer, diff --git a/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts b/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts index df9a0364a4..0b9ca11d38 100644 --- a/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts @@ -86,6 +86,10 @@ export const batchConversionPaymentsArtifact = new ContractArtifact( address: '0x1892196E80C4c17ea5100Da765Ab48c1fE2Fb814', creationBlockNumber: 10827274, }, + sonic: { + address: '0x399F5EE127ce7432E4921a61b8CF52b0af52cbfE', + creationBlockNumber: 3974138, + }, }, }, near: { diff --git a/packages/smart-contracts/src/lib/artifacts/ERC20Proxy/index.ts b/packages/smart-contracts/src/lib/artifacts/ERC20Proxy/index.ts index 2c9a3f778e..8937cb5f84 100644 --- a/packages/smart-contracts/src/lib/artifacts/ERC20Proxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/ERC20Proxy/index.ts @@ -41,6 +41,10 @@ export const erc20ProxyArtifact = new ContractArtifact( address: '0xc31323ea7513799e1e112Dc15a05d5b600Cc357e', creationBlockNumber: 10827271, }, + sonic: { + address: '0xC8D3FE2A27bB69a85F6973081FdC41103E107595', + creationBlockNumber: 3974125, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/Erc20ConversionProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/Erc20ConversionProxy/index.ts index 9f21bd668a..54bec925ee 100644 --- a/packages/smart-contracts/src/lib/artifacts/Erc20ConversionProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/Erc20ConversionProxy/index.ts @@ -87,6 +87,10 @@ export const erc20ConversionProxy = new ContractArtifact( address: '0x8296D56321cf207925a7804E5A8E3F579838e6Ad', creationBlockNumber: 10827277, }, + sonic: { + address: '0xe43fd55Da253628Ed7Cad5ab198664F5B3659DA9', + creationBlockNumber: 3974151, + }, }, }, '0.1.1': { @@ -137,6 +141,10 @@ export const erc20ConversionProxy = new ContractArtifact( address: '0x8296D56321cf207925a7804E5A8E3F579838e6Ad', creationBlockNumber: 10827277, }, + sonic: { + address: '0xe43fd55Da253628Ed7Cad5ab198664F5B3659DA9', + creationBlockNumber: 3974151, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/EthConversionProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/EthConversionProxy/index.ts index e1461c91fa..5476e3ef52 100644 --- a/packages/smart-contracts/src/lib/artifacts/EthConversionProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/EthConversionProxy/index.ts @@ -108,6 +108,10 @@ export const ethConversionArtifact = new ContractArtifact( address: '0x3E3B04e1bF170522a5c5DDE628C4d365c0342239', creationBlockNumber: 35929105, }, + sonic: { + address: '0x3E3B04e1bF170522a5c5DDE628C4d365c0342239', + creationBlockNumber: 3974113, + }, }, }, '0.2.1': { @@ -126,6 +130,10 @@ export const ethConversionArtifact = new ContractArtifact( address: '0x3E3B04e1bF170522a5c5DDE628C4d365c0342239', creationBlockNumber: 35929105, }, + sonic: { + address: '0x3E3B04e1bF170522a5c5DDE628C4d365c0342239', + creationBlockNumber: 3974113, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts index 4516cb845b..9f1e2d2753 100644 --- a/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts @@ -150,6 +150,10 @@ export const ethereumFeeProxyArtifact = new ContractArtifact( address: '0xd9C3889eB8DA6ce449bfFE3cd194d08A436e96f2', creationBlockNumber: 10827264, }, + sonic: { + address: '0x4989F941D62bEEb3548Bf55d0D5291Ec335429f0', + creationBlockNumber: 3974098, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/EthereumProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/EthereumProxy/index.ts index df0fe2d945..f922414088 100644 --- a/packages/smart-contracts/src/lib/artifacts/EthereumProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/EthereumProxy/index.ts @@ -204,6 +204,10 @@ export const ethereumProxyArtifact = new ContractArtifact( address: '0x090D3583e3f5953e2CC758b146f4Ae11f8224ad7', creationBlockNumber: 10827261, }, + sonic: { + address: '0x171Ee0881407d4c0C11eA1a2FB7D5b4cdED71e6e', + creationBlockNumber: 3974083, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/RequestDeployer/index.ts b/packages/smart-contracts/src/lib/artifacts/RequestDeployer/index.ts index 21680a7ee3..a01deaa270 100644 --- a/packages/smart-contracts/src/lib/artifacts/RequestDeployer/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/RequestDeployer/index.ts @@ -89,6 +89,10 @@ export const requestDeployer = new ContractArtifact( address: '0xE99Ab70a5FAE59551544FA326fA048f7B95A24B2', creationBlockNumber: 4733269, }, + sonic: { + address: '0xE99Ab70a5FAE59551544FA326fA048f7B95A24B2', + creationBlockNumber: 3970964, + }, }, }, }, diff --git a/packages/types/src/currency-types.ts b/packages/types/src/currency-types.ts index 0282c3908b..b0b51d8fd6 100644 --- a/packages/types/src/currency-types.ts +++ b/packages/types/src/currency-types.ts @@ -26,6 +26,7 @@ export type EvmChainName = | 'private' | 'rinkeby' // FIXME: Rinkeby is deprecated | 'sepolia' + | 'sonic' | 'ronin' | 'sokol' | 'tombchain' diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 74cda62767..671b7d4653 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -53,6 +53,7 @@ const networkRpcs: Record = { zksyncera: 'https://mainnet.era.zksync.io', sepolia: 'https://rpc.sepolia.org/', base: 'https://mainnet.base.org/', + sonic: 'https://rpc.soniclabs.com', }; /**