Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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 @@ -93,3 +94,4 @@ VITE_FEATURE_NOTIFICATIONS_WEBSERVICES=true
VITE_FEATURE_WC_DIRECT_CONNECTION=true
VITE_FEATURE_CETUS_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],
}
Comment thread
gomesalexandre marked this conversation as resolved.
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 @@ -105,6 +106,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.37",
"@shapeshiftoss/hdwallet-core": "1.62.37",
"@shapeshiftoss/hdwallet-gridplus": "1.62.37",
"@shapeshiftoss/hdwallet-keepkey": "1.62.37",
"@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.37",
"@shapeshiftoss/hdwallet-keplr": "1.62.37",
"@shapeshiftoss/hdwallet-ledger": "1.62.37",
"@shapeshiftoss/hdwallet-ledger-webhid": "1.62.37",
"@shapeshiftoss/hdwallet-ledger-webusb": "1.62.37",
"@shapeshiftoss/hdwallet-metamask-multichain": "1.62.37",
"@shapeshiftoss/hdwallet-native": "1.62.37",
"@shapeshiftoss/hdwallet-native-vault": "1.62.37",
"@shapeshiftoss/hdwallet-phantom": "1.62.37",
"@shapeshiftoss/hdwallet-trezor": "1.62.37",
"@shapeshiftoss/hdwallet-trezor-connect": "1.62.37",
"@shapeshiftoss/hdwallet-vultisig": "1.62.37",
"@shapeshiftoss/hdwallet-walletconnect": "1.62.37",
"@shapeshiftoss/hdwallet-walletconnectv2": "1.62.37",
"@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'
Comment thread
gomesalexandre marked this conversation as resolved.

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.37",
"@shapeshiftoss/hdwallet-ledger": "1.62.37",
"@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'
}
Comment thread
gomesalexandre marked this conversation as resolved.

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 @@ -39,7 +39,7 @@
"@shapeshiftoss/caip": "workspace:^",
"@shapeshiftoss/chain-adapters": "workspace:^",
"@shapeshiftoss/contracts": "workspace:^",
"@shapeshiftoss/hdwallet-core": "1.62.36",
"@shapeshiftoss/hdwallet-core": "1.62.37",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
"@shapeshiftoss/utils": "workspace:^",
Expand Down
Loading
Loading