Skip to content
Merged
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
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ VITE_ARBITRUM_NOVA_NODE_URL=https://api.arbitrum-nova.shapeshift.com/api/v1/json
VITE_BASE_NODE_URL=https://api.base.shapeshift.com/api/v1/jsonrpc
VITE_MONAD_NODE_URL=https://rpc.monad.xyz
VITE_PLASMA_NODE_URL=https://rpc.plasma.to
VITE_KATANA_NODE_URL=https://rpc.katana.network
VITE_THORCHAIN_NODE_URL=https://api.thorchain.shapeshift.com/lcd
VITE_MAYACHAIN_NODE_URL=https://api.mayachain.shapeshift.com/lcd
VITE_SOLANA_NODE_URL=https://api.solana.shapeshift.com/api/v1/jsonrpc
Expand Down Expand Up @@ -304,3 +305,4 @@ VITE_FEATURE_PLASMA=true
VITE_HYPEREVM_NODE_URL=https://rpc.hyperliquid.xyz/evm
VITE_FEATURE_HYPEREVM=true
VITE_FEATURE_NEAR=false
VITE_FEATURE_KATANA=false
2 changes: 2 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ VITE_ARBITRUM_NOVA_NODE_URL=https://dev-api.arbitrum-nova.shapeshift.com/api/v1/
VITE_BASE_NODE_URL=https://dev-api.base.shapeshift.com/api/v1/jsonrpc
VITE_MONAD_NODE_URL=https://rpc.monad.xyz
VITE_PLASMA_NODE_URL=https://rpc.plasma.to
VITE_KATANA_NODE_URL=https://rpc.katana.network
VITE_HYPEREVM_NODE_URL=https://rpc.hyperliquid.xyz/evm
# Swap me back to 9R as-needed
# VITE_THORCHAIN_NODE_URL=https://thornode.ninerealms.com
Expand Down Expand Up @@ -94,3 +95,4 @@ VITE_FEATURE_WC_DIRECT_CONNECTION=true
VITE_FEATURE_CETUS_SWAP=true
VITE_FEATURE_AVNU_SWAP=true
VITE_FEATURE_NEAR=true
VITE_FEATURE_KATANA=true
10 changes: 10 additions & 0 deletions headers/csps/chains/katana.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { loadEnv } from 'vite'

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_KATANA_NODE_URL],
}
2 changes: 2 additions & 0 deletions headers/csps/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { csp as dogecoin } from './chains/dogecoin'
import { csp as ethereum } from './chains/ethereum'
import { csp as gnosis } from './chains/gnosis'
import { csp as hyperevm } from './chains/hyperevm'
import { csp as katana } from './chains/katana'
import { csp as litecoin } from './chains/litecoin'
import { csp as mayachain } from './chains/mayachain'
import { csp as monad } from './chains/monad'
Expand Down Expand Up @@ -106,6 +107,7 @@ export const csps = [
ethereum,
gnosis,
hyperevm,
katana,
litecoin,
optimism,
polygon,
Expand Down
36 changes: 18 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -104,24 +104,24 @@
"@shapeshiftoss/chain-adapters": "workspace:^",
"@shapeshiftoss/contracts": "workspace:^",
"@shapeshiftoss/errors": "workspace:^",
"@shapeshiftoss/hdwallet-coinbase": "1.62.36",
"@shapeshiftoss/hdwallet-core": "1.62.36",
"@shapeshiftoss/hdwallet-gridplus": "1.62.36",
"@shapeshiftoss/hdwallet-keepkey": "1.62.36",
"@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.36",
"@shapeshiftoss/hdwallet-keplr": "1.62.36",
"@shapeshiftoss/hdwallet-ledger": "1.62.36",
"@shapeshiftoss/hdwallet-ledger-webhid": "1.62.36",
"@shapeshiftoss/hdwallet-ledger-webusb": "1.62.36",
"@shapeshiftoss/hdwallet-metamask-multichain": "1.62.36",
"@shapeshiftoss/hdwallet-native": "1.62.36",
"@shapeshiftoss/hdwallet-native-vault": "1.62.36",
"@shapeshiftoss/hdwallet-phantom": "1.62.36",
"@shapeshiftoss/hdwallet-trezor": "1.62.36",
"@shapeshiftoss/hdwallet-trezor-connect": "1.62.36",
"@shapeshiftoss/hdwallet-vultisig": "1.62.36",
"@shapeshiftoss/hdwallet-walletconnect": "1.62.36",
"@shapeshiftoss/hdwallet-walletconnectv2": "1.62.36",
"@shapeshiftoss/hdwallet-coinbase": "1.62.38",
"@shapeshiftoss/hdwallet-core": "1.62.38",
"@shapeshiftoss/hdwallet-gridplus": "1.62.38",
"@shapeshiftoss/hdwallet-keepkey": "1.62.38",
"@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.38",
"@shapeshiftoss/hdwallet-keplr": "1.62.38",
"@shapeshiftoss/hdwallet-ledger": "1.62.38",
"@shapeshiftoss/hdwallet-ledger-webhid": "1.62.38",
"@shapeshiftoss/hdwallet-ledger-webusb": "1.62.38",
"@shapeshiftoss/hdwallet-metamask-multichain": "1.62.38",
"@shapeshiftoss/hdwallet-native": "1.62.38",
"@shapeshiftoss/hdwallet-native-vault": "1.62.38",
"@shapeshiftoss/hdwallet-phantom": "1.62.38",
"@shapeshiftoss/hdwallet-trezor": "1.62.38",
"@shapeshiftoss/hdwallet-trezor-connect": "1.62.38",
"@shapeshiftoss/hdwallet-vultisig": "1.62.38",
"@shapeshiftoss/hdwallet-walletconnect": "1.62.38",
"@shapeshiftoss/hdwallet-walletconnectv2": "1.62.38",
"@shapeshiftoss/swapper": "workspace:^",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
Expand Down
6 changes: 6 additions & 0 deletions packages/caip/src/adapters/coingecko/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
ethChainId,
gnosisChainId,
hyperEvmChainId,
katanaChainId,
mayachainChainId,
monadChainId,
nearChainId,
Expand Down Expand Up @@ -49,6 +50,7 @@ export enum CoingeckoAssetPlatform {
Monad = 'monad',
HyperEvm = 'hyperevm',
Plasma = 'plasma',
Katana = 'katana',
Solana = 'solana',
Starknet = 'starknet',
Tron = 'tron',
Expand Down Expand Up @@ -108,6 +110,8 @@ export const chainIdToCoingeckoAssetPlatform = (chainId: ChainId): string => {
return CoingeckoAssetPlatform.HyperEvm
case CHAIN_REFERENCE.PlasmaMainnet:
return CoingeckoAssetPlatform.Plasma
case CHAIN_REFERENCE.KatanaMainnet:
return CoingeckoAssetPlatform.Katana
default:
throw new Error(
`chainNamespace ${chainNamespace}, chainReference ${chainReference} not supported.`,
Expand Down Expand Up @@ -206,6 +210,8 @@ export const coingeckoAssetPlatformToChainId = (
return hyperEvmChainId
case CoingeckoAssetPlatform.Plasma:
return plasmaChainId
case CoingeckoAssetPlatform.Katana:
return katanaChainId
case CoingeckoAssetPlatform.Cosmos:
return cosmosChainId
case CoingeckoAssetPlatform.Thorchain:
Expand Down
5 changes: 5 additions & 0 deletions packages/caip/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export const baseAssetId: AssetId = 'eip155:8453/slip44:60'
export const monadAssetId: AssetId = 'eip155:143/slip44:60'
export const hyperEvmAssetId: AssetId = 'eip155:999/slip44:60'
export const plasmaAssetId: AssetId = 'eip155:9745/slip44:60'
export const katanaAssetId: AssetId = 'eip155:747474/slip44:60'
export const solAssetId: AssetId = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501'
export const wrappedSolAssetId: AssetId =
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:So11111111111111111111111111111111111111112'
Expand Down Expand Up @@ -78,6 +79,7 @@ export const baseChainId: ChainId = 'eip155:8453'
export const monadChainId: ChainId = 'eip155:143'
export const hyperEvmChainId: ChainId = 'eip155:999'
export const plasmaChainId: ChainId = 'eip155:9745'
export const katanaChainId: ChainId = 'eip155:747474'

export const cosmosChainId: ChainId = 'cosmos:cosmoshub-4'
export const thorchainChainId: ChainId = 'cosmos:thorchain-1'
Expand Down Expand Up @@ -127,6 +129,7 @@ export const CHAIN_REFERENCE = {
MonadMainnet: '143', // https://docs.monad.xyz/developer-essentials/network-information
HyperEvmMainnet: '999', // https://chainlist.org/chain/999
PlasmaMainnet: '9745', // https://chainlist.org/chain/9745
KatanaMainnet: '747474', // https://docs.katana.network
SolanaMainnet: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', // https://namespaces.chainagnostic.org/solana/caip2
TronMainnet: '0x2b6653dc', // https://developers.tron.network/docs/networks
SuiMainnet: '35834a8a', // First 8 chars of SUI mainnet genesis hash
Expand Down Expand Up @@ -169,6 +172,7 @@ export const ASSET_REFERENCE = {
Monad: '60', // evm chain which uses ethereum derivation path as common practice
HyperEvm: '60', // evm chain which uses ethereum derivation path as common practice
Plasma: '60', // evm chain which uses ethereum derivation path as common practice
Katana: '60', // evm chain which uses ethereum derivation path as common practice
Solana: '501',
Tron: '195',
Sui: '784',
Expand Down Expand Up @@ -197,6 +201,7 @@ export const VALID_CHAIN_IDS: ValidChainMap = Object.freeze({
CHAIN_REFERENCE.MonadMainnet,
CHAIN_REFERENCE.HyperEvmMainnet,
CHAIN_REFERENCE.PlasmaMainnet,
CHAIN_REFERENCE.KatanaMainnet,
],
[CHAIN_NAMESPACE.CosmosSdk]: [
CHAIN_REFERENCE.CosmosHubMainnet,
Expand Down
4 changes: 2 additions & 2 deletions packages/chain-adapters/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
"@near-js/transactions": "^2.5.1",
"@near-js/utils": "^2.5.1",
"@shapeshiftoss/caip": "workspace:^",
"@shapeshiftoss/hdwallet-core": "1.62.36",
"@shapeshiftoss/hdwallet-ledger": "1.62.36",
"@shapeshiftoss/hdwallet-core": "1.62.38",
"@shapeshiftoss/hdwallet-ledger": "1.62.38",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
"@shapeshiftoss/utils": "workspace:^",
Expand Down
9 changes: 9 additions & 0 deletions packages/chain-adapters/src/evm/EvmBaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
supportsETH,
supportsGnosis,
supportsHyperEvm,
supportsKatana,
supportsMonad,
supportsOptimism,
supportsPlasma,
Expand Down Expand Up @@ -82,6 +83,7 @@ export const evmChainIds = [
KnownChainIds.MonadMainnet,
KnownChainIds.HyperEvmMainnet,
KnownChainIds.PlasmaMainnet,
KnownChainIds.KatanaMainnet,
] as const

export type EvmChainAdapter = EvmBaseAdapter<EvmChainId>
Expand Down Expand Up @@ -184,6 +186,8 @@ export abstract class EvmBaseAdapter<T extends EvmChainId> implements IChainAdap
return supportsHyperEvm(wallet)
case Number(fromChainId(KnownChainIds.PlasmaMainnet).chainReference):
return supportsPlasma(wallet)
case Number(fromChainId(KnownChainIds.KatanaMainnet).chainReference):
return supportsKatana(wallet)
default:
return false
}
Expand Down Expand Up @@ -276,6 +280,11 @@ export abstract class EvmBaseAdapter<T extends EvmChainId> implements IChainAdap
symbol: 'XPL',
explorer: 'https://plasmascan.to',
},
[KnownChainIds.KatanaMainnet]: {
name: 'Ethereum',
symbol: 'ETH',
explorer: 'https://katanascan.com',
},
}[this.chainId]

try {
Expand Down
1 change: 1 addition & 0 deletions packages/chain-adapters/src/evm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ export * as base from './base'
export * as monad from './monad'
export * as hyperevm from './hyperevm'
export * as plasma from './plasma'
export * as katana from './katana'
57 changes: 57 additions & 0 deletions packages/chain-adapters/src/evm/katana/KatanaChainAdapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import type { AssetId } from '@shapeshiftoss/caip'
import { ASSET_REFERENCE, katanaAssetId } from '@shapeshiftoss/caip'
import type { RootBip44Params } from '@shapeshiftoss/types'
import { KnownChainIds } from '@shapeshiftoss/types'

import { ChainAdapterDisplayName } from '../../types'
import type { TokenInfo } from '../SecondClassEvmAdapter'
import { SecondClassEvmAdapter } from '../SecondClassEvmAdapter'

const SUPPORTED_CHAIN_IDS = [KnownChainIds.KatanaMainnet]
const DEFAULT_CHAIN_ID = KnownChainIds.KatanaMainnet

export type ChainAdapterArgs = {
rpcUrl: string
getKnownTokens: () => TokenInfo[]
}

export const isKatanaChainAdapter = (adapter: unknown): adapter is ChainAdapter => {
return (adapter as ChainAdapter).getType() === KnownChainIds.KatanaMainnet
}

export class ChainAdapter extends SecondClassEvmAdapter<KnownChainIds.KatanaMainnet> {
public static readonly rootBip44Params: RootBip44Params = {
purpose: 44,
coinType: Number(ASSET_REFERENCE.Katana),
accountNumber: 0,
}

constructor(args: ChainAdapterArgs) {
super({
assetId: katanaAssetId,
chainId: DEFAULT_CHAIN_ID,
rootBip44Params: ChainAdapter.rootBip44Params,
supportedChainIds: SUPPORTED_CHAIN_IDS,
rpcUrl: args.rpcUrl,
getKnownTokens: args.getKnownTokens,
})
}

getDisplayName() {
return ChainAdapterDisplayName.Katana
}

getName() {
return 'Katana'
}

getType(): KnownChainIds.KatanaMainnet {
return KnownChainIds.KatanaMainnet
}

getFeeAssetId(): AssetId {
return this.assetId
}
}

export type { TokenInfo }
1 change: 1 addition & 0 deletions packages/chain-adapters/src/evm/katana/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './KatanaChainAdapter'
6 changes: 6 additions & 0 deletions packages/chain-adapters/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type ChainSpecificAccount<T> = ChainSpecific<
[KnownChainIds.MonadMainnet]: evm.Account
[KnownChainIds.HyperEvmMainnet]: evm.Account
[KnownChainIds.PlasmaMainnet]: evm.Account
[KnownChainIds.KatanaMainnet]: evm.Account
[KnownChainIds.BitcoinMainnet]: utxo.Account
[KnownChainIds.BitcoinCashMainnet]: utxo.Account
[KnownChainIds.DogecoinMainnet]: utxo.Account
Expand Down Expand Up @@ -97,6 +98,7 @@ type ChainSpecificFeeData<T> = ChainSpecific<
[KnownChainIds.MonadMainnet]: evm.FeeData
[KnownChainIds.HyperEvmMainnet]: evm.FeeData
[KnownChainIds.PlasmaMainnet]: evm.FeeData
[KnownChainIds.KatanaMainnet]: evm.FeeData
[KnownChainIds.BitcoinMainnet]: utxo.FeeData
[KnownChainIds.BitcoinCashMainnet]: utxo.FeeData
[KnownChainIds.DogecoinMainnet]: utxo.FeeData
Expand Down Expand Up @@ -180,6 +182,7 @@ export type ChainSignTx = {
[KnownChainIds.BaseMainnet]: ETHSignTx
[KnownChainIds.MonadMainnet]: ETHSignTx
[KnownChainIds.PlasmaMainnet]: ETHSignTx
[KnownChainIds.KatanaMainnet]: ETHSignTx
[KnownChainIds.BitcoinMainnet]: BTCSignTx
[KnownChainIds.BitcoinCashMainnet]: BTCSignTx
[KnownChainIds.DogecoinMainnet]: BTCSignTx
Expand Down Expand Up @@ -233,6 +236,7 @@ export type ChainSpecificBuildTxData<T> = ChainSpecific<
[KnownChainIds.MonadMainnet]: evm.BuildTxInput
[KnownChainIds.HyperEvmMainnet]: evm.BuildTxInput
[KnownChainIds.PlasmaMainnet]: evm.BuildTxInput
[KnownChainIds.KatanaMainnet]: evm.BuildTxInput
[KnownChainIds.BitcoinMainnet]: utxo.BuildTxInput
[KnownChainIds.BitcoinCashMainnet]: utxo.BuildTxInput
[KnownChainIds.DogecoinMainnet]: utxo.BuildTxInput
Expand Down Expand Up @@ -338,6 +342,7 @@ type ChainSpecificGetFeeDataInput<T> = ChainSpecific<
[KnownChainIds.MonadMainnet]: evm.GetFeeDataInput
[KnownChainIds.HyperEvmMainnet]: evm.GetFeeDataInput
[KnownChainIds.PlasmaMainnet]: evm.GetFeeDataInput
[KnownChainIds.KatanaMainnet]: evm.GetFeeDataInput
[KnownChainIds.BitcoinMainnet]: utxo.GetFeeDataInput
[KnownChainIds.BitcoinCashMainnet]: utxo.GetFeeDataInput
[KnownChainIds.DogecoinMainnet]: utxo.GetFeeDataInput
Expand Down Expand Up @@ -408,6 +413,7 @@ export enum ChainAdapterDisplayName {
Monad = 'Monad',
HyperEvm = 'HyperEVM',
Plasma = 'Plasma',
Katana = 'Katana',
Cosmos = 'Cosmos',
Bitcoin = 'Bitcoin',
BitcoinCash = 'Bitcoin Cash',
Expand Down
2 changes: 2 additions & 0 deletions packages/contracts/src/ethersProviderSingleton.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ export const rpcUrlByChainId = (chainId: EvmChainId): string => {
return process.env.VITE_HYPEREVM_NODE_URL
case KnownChainIds.PlasmaMainnet:
return process.env.VITE_PLASMA_NODE_URL
case KnownChainIds.KatanaMainnet:
return process.env.VITE_KATANA_NODE_URL
default:
return assertUnreachable(chainId)
}
Expand Down
9 changes: 9 additions & 0 deletions packages/contracts/src/viemClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
bsc,
gnosis,
hyperEvm,
katana,
mainnet,
monad,
optimism,
Expand Down Expand Up @@ -93,6 +94,11 @@ export const viemPlasmaClient = createPublicClient({
transport: fallback([process.env.VITE_PLASMA_NODE_URL].filter(Boolean).map(url => http(url))),
}) as PublicClient

export const viemKatanaClient = createPublicClient({
chain: katana,
transport: fallback([process.env.VITE_KATANA_NODE_URL].filter(Boolean).map(url => http(url))),
}) as PublicClient

export const viemClientByChainId: Record<ChainId, PublicClient> = {
[KnownChainIds.EthereumMainnet]: viemEthMainnetClient,
[KnownChainIds.BnbSmartChainMainnet]: viemBscClient,
Expand All @@ -106,6 +112,7 @@ export const viemClientByChainId: Record<ChainId, PublicClient> = {
[KnownChainIds.MonadMainnet]: viemMonadClient,
[KnownChainIds.HyperEvmMainnet]: viemHyperEvmClient,
[KnownChainIds.PlasmaMainnet]: viemPlasmaClient,
[KnownChainIds.KatanaMainnet]: viemKatanaClient,
}

export const viemNetworkIdByChainId: Record<ChainId, number> = {
Expand All @@ -121,6 +128,7 @@ export const viemNetworkIdByChainId: Record<ChainId, number> = {
[KnownChainIds.MonadMainnet]: monad.id,
[KnownChainIds.HyperEvmMainnet]: hyperEvm.id,
[KnownChainIds.PlasmaMainnet]: plasma.id,
[KnownChainIds.KatanaMainnet]: katana.id,
}

export const viemClientByNetworkId: Record<number, PublicClient> = {
Expand All @@ -136,6 +144,7 @@ export const viemClientByNetworkId: Record<number, PublicClient> = {
[monad.id]: viemMonadClient,
[hyperEvm.id]: viemHyperEvmClient,
[plasma.id]: viemPlasmaClient,
[katana.id]: viemKatanaClient,
}

export const assertGetViemClient = (chainId: ChainId): PublicClient => {
Expand Down
2 changes: 1 addition & 1 deletion packages/swapper/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"@shapeshiftoss/caip": "workspace:^",
"@shapeshiftoss/chain-adapters": "workspace:^",
"@shapeshiftoss/contracts": "workspace:^",
"@shapeshiftoss/hdwallet-core": "1.62.36",
"@shapeshiftoss/hdwallet-core": "1.62.38",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
"@shapeshiftoss/utils": "workspace:^",
Expand Down
Loading