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
6 changes: 4 additions & 2 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,17 @@ VITE_MONAD_NODE_URL=https://rpc.monad.xyz
VITE_PLASMA_NODE_URL=https://rpc.plasma.to
# VITE_THORCHAIN_NODE_URL=https://api.thorchain.shapeshift.com/lcd
VITE_THORCHAIN_NODE_URL=https://thornode.ninerealms.com
VITE_MAYACHAIN_NODE_URL=https://api.mayachain.shapeshift.com/lcd
# VITE_MAYACHAIN_NODE_URL=https://api.mayachain.shapeshift.com/lcd
VITE_MAYACHAIN_NODE_URL=https://mayanode.mayachain.info
VITE_SOLANA_NODE_URL=https://api.solana.shapeshift.com/api/v1/jsonrpc
VITE_TRON_NODE_URL=https://api.trongrid.io
VITE_ALCHEMY_POLYGON_URL=https://polygon-mainnet.g.alchemy.com/v2/anoTMcIc2hbPUxri37h4DeuUwg2p5_xZ

# midgard
# VITE_THORCHAIN_MIDGARD_URL=https://api.thorchain.shapeshift.com/midgard/v2
VITE_THORCHAIN_MIDGARD_URL=https://midgard.ninerealms.com/v2
VITE_MAYACHAIN_MIDGARD_URL=https://api.mayachain.shapeshift.com/midgard/v2
# VITE_MAYACHAIN_MIDGARD_URL=https://api.mayachain.shapeshift.com/midgard/v2
VITE_MAYACHAIN_MIDGARD_URL=https://midgard.mayachain.info/v2

# foxy apr
VITE_TOKEMAK_STATS_URL=https://stats.tokemaklabs.com/
Expand Down
6 changes: 4 additions & 2 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,16 @@ VITE_HYPEREVM_NODE_URL=https://rpc.hyperliquid.xyz/evm
# Swap me back to SS as-needed
# VITE_THORCHAIN_NODE_URL=https://dev-api.thorchain.shapeshift.com/lcd
VITE_THORCHAIN_NODE_URL=https://thornode.ninerealms.com
VITE_MAYACHAIN_NODE_URL=https://dev-api.mayachain.shapeshift.com/lcd
# VITE_MAYACHAIN_NODE_URL=https://dev-api.mayachain.shapeshift.com/lcd
VITE_MAYACHAIN_NODE_URL=https://mayanode.mayachain.info
VITE_SOLANA_NODE_URL=https://dev-api.solana.shapeshift.com/api/v1/jsonrpc
VITE_TRON_NODE_URL=https://api.trongrid.io

# midgard
# VITE_THORCHAIN_MIDGARD_URL=https://dev-api.thorchain.shapeshift.com/midgard/v2
VITE_THORCHAIN_MIDGARD_URL=https://midgard.ninerealms.com/v2
VITE_MAYACHAIN_MIDGARD_URL=https://dev-api.mayachain.shapeshift.com/midgard/v2
# VITE_MAYACHAIN_MIDGARD_URL=https://dev-api.mayachain.shapeshift.com/midgard/v2
VITE_MAYACHAIN_MIDGARD_URL=https://midgard.mayachain.info/v2

NODE_ENV=development

Expand Down
36 changes: 18 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,24 +100,24 @@
"@shapeshiftoss/chain-adapters": "workspace:^",
"@shapeshiftoss/contracts": "workspace:^",
"@shapeshiftoss/errors": "workspace:^",
"@shapeshiftoss/hdwallet-coinbase": "1.62.32",
"@shapeshiftoss/hdwallet-core": "1.62.32",
"@shapeshiftoss/hdwallet-gridplus": "1.62.32",
"@shapeshiftoss/hdwallet-keepkey": "1.62.32",
"@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.32",
"@shapeshiftoss/hdwallet-keplr": "1.62.32",
"@shapeshiftoss/hdwallet-ledger": "1.62.32",
"@shapeshiftoss/hdwallet-ledger-webhid": "1.62.32",
"@shapeshiftoss/hdwallet-ledger-webusb": "1.62.32",
"@shapeshiftoss/hdwallet-metamask-multichain": "1.62.32",
"@shapeshiftoss/hdwallet-native": "1.62.32",
"@shapeshiftoss/hdwallet-native-vault": "1.62.32",
"@shapeshiftoss/hdwallet-phantom": "1.62.32",
"@shapeshiftoss/hdwallet-trezor": "1.62.32",
"@shapeshiftoss/hdwallet-trezor-connect": "1.62.32",
"@shapeshiftoss/hdwallet-vultisig": "1.62.32",
"@shapeshiftoss/hdwallet-walletconnect": "1.62.32",
"@shapeshiftoss/hdwallet-walletconnectv2": "1.62.32",
"@shapeshiftoss/hdwallet-coinbase": "1.62.35",
"@shapeshiftoss/hdwallet-core": "1.62.35",
"@shapeshiftoss/hdwallet-gridplus": "1.62.35",
"@shapeshiftoss/hdwallet-keepkey": "1.62.35",
"@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.35",
"@shapeshiftoss/hdwallet-keplr": "1.62.35",
"@shapeshiftoss/hdwallet-ledger": "1.62.35",
"@shapeshiftoss/hdwallet-ledger-webhid": "1.62.35",
"@shapeshiftoss/hdwallet-ledger-webusb": "1.62.35",
"@shapeshiftoss/hdwallet-metamask-multichain": "1.62.35",
"@shapeshiftoss/hdwallet-native": "1.62.35",
"@shapeshiftoss/hdwallet-native-vault": "1.62.35",
"@shapeshiftoss/hdwallet-phantom": "1.62.35",
"@shapeshiftoss/hdwallet-trezor": "1.62.35",
"@shapeshiftoss/hdwallet-trezor-connect": "1.62.35",
"@shapeshiftoss/hdwallet-vultisig": "1.62.35",
"@shapeshiftoss/hdwallet-walletconnect": "1.62.35",
"@shapeshiftoss/hdwallet-walletconnectv2": "1.62.35",
"@shapeshiftoss/swapper": "workspace:^",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
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 @@ -31,8 +31,8 @@
"dependencies": {
"@mysten/sui": "1.45.0",
"@shapeshiftoss/caip": "workspace:^",
"@shapeshiftoss/hdwallet-core": "1.62.32",
"@shapeshiftoss/hdwallet-ledger": "1.62.32",
"@shapeshiftoss/hdwallet-core": "1.62.35",
"@shapeshiftoss/hdwallet-ledger": "1.62.35",
"@shapeshiftoss/types": "workspace:^",
"@shapeshiftoss/unchained-client": "workspace:^",
"@shapeshiftoss/utils": "workspace:^",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import type { AssetId } from '@shapeshiftoss/caip'
import { ASSET_REFERENCE, mayachainAssetId } from '@shapeshiftoss/caip'
import {
ASSET_REFERENCE,
generateAssetIdFromCosmosSdkDenom,
mayachainAssetId,
} from '@shapeshiftoss/caip'
import type { HDWallet, MayachainSignTx, MayachainWallet } from '@shapeshiftoss/hdwallet-core'
import { supportsMayachain } from '@shapeshiftoss/hdwallet-core'
import type { RootBip44Params } from '@shapeshiftoss/types'
Expand All @@ -8,6 +12,8 @@ import * as unchained from '@shapeshiftoss/unchained-client'

import { ChainAdapterError, ErrorHandler } from '../../error/ErrorHandler'
import type {
Account,
BroadcastTransactionInput,
BuildDepositTxInput,
BuildSendApiTxInput,
BuildSendTxInput,
Expand All @@ -34,6 +40,7 @@ const DEFAULT_CHAIN_ID = KnownChainIds.MayachainMainnet

export interface ChainAdapterArgs extends BaseChainAdapterArgs<unchained.mayachain.V1Api> {
midgardUrl: string
nodeUrl: string
}

export class ChainAdapter extends CosmosSdkBaseAdapter<KnownChainIds.MayachainMainnet> {
Expand All @@ -43,6 +50,8 @@ export class ChainAdapter extends CosmosSdkBaseAdapter<KnownChainIds.MayachainMa
accountNumber: 0,
}

protected readonly nodeUrl: string

constructor(args: ChainAdapterArgs) {
super({
assetId: mayachainAssetId,
Expand All @@ -57,6 +66,8 @@ export class ChainAdapter extends CosmosSdkBaseAdapter<KnownChainIds.MayachainMa
supportedChainIds: SUPPORTED_CHAIN_IDS,
...args,
})

this.nodeUrl = args.nodeUrl
}

private assertSupportsChain(wallet: HDWallet): asserts wallet is MayachainWallet {
Expand Down Expand Up @@ -250,4 +261,101 @@ export class ChainAdapter extends CosmosSdkBaseAdapter<KnownChainIds.MayachainMa
})
}
}

async getAccount(pubkey: string): Promise<Account<KnownChainIds.MayachainMainnet>> {
try {
const [authRes, balanceRes] = await Promise.all([
fetch(`${this.nodeUrl}/cosmos/auth/v1beta1/accounts/${pubkey}`),
fetch(`${this.nodeUrl}/cosmos/bank/v1beta1/balances/${pubkey}`),
])

if (!authRes.ok) {
throw new Error(`Failed to fetch account: ${authRes.status} ${authRes.statusText}`)
}
if (!balanceRes.ok) {
throw new Error(`Failed to fetch balances: ${balanceRes.status} ${balanceRes.statusText}`)
}

const authData = (await authRes.json()) as {
account: { account_number: string; sequence: string; pub_key?: { key: string } }
}
const balanceData = (await balanceRes.json()) as {
balances: { denom: string; amount: string }[]
}

const assets = balanceData.balances.reduce<{ amount: string; assetId: AssetId }[]>(
(acc, b) => {
if (b.denom === this.denom) return acc
try {
acc.push({
amount: b.amount,
assetId: generateAssetIdFromCosmosSdkDenom(b.denom),
})
} catch {}
return acc
},
[],
)

const nativeBalance = balanceData.balances.find(b => b.denom === this.denom)?.amount ?? '0'

return {
balance: nativeBalance,
pubkey,
chainId: this.chainId,
assetId: this.assetId,
chain: this.getType(),
chainSpecific: {
accountNumber: authData.account.account_number,
sequence: authData.account.sequence,
assets,
delegations: [],
redelegations: [],
undelegations: [],
rewards: [],
},
} as Account<KnownChainIds.MayachainMainnet>
} catch (err) {
return ErrorHandler(err, {
translation: 'chainAdapters.errors.getAccount',
options: { pubkey },
})
}
}

async broadcastTransaction({
senderAddress,
receiverAddress,
hex,
}: BroadcastTransactionInput): Promise<string> {
try {
await Promise.all([
assertAddressNotSanctioned(senderAddress),
receiverAddress !== CONTRACT_INTERACTION && assertAddressNotSanctioned(receiverAddress),
])

const response = await fetch(`${this.nodeUrl}/cosmos/tx/v1beta1/txs`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
tx_bytes: hex,
mode: 'BROADCAST_MODE_SYNC',
}),
})

const data = (await response.json()) as {
tx_response?: { code: number; txhash: string; raw_log?: string }
}

if (data.tx_response?.code !== 0) {
throw new Error(data.tx_response?.raw_log || 'Broadcast failed')
}

return data.tx_response.txhash
} catch (err) {
return ErrorHandler(err, {
translation: 'chainAdapters.errors.broadcastTransaction',
})
}
}
}
Loading
Loading