Skip to content

Commit

Permalink
Merge branch '528-decouple-the-network-type-from-the-wallets-to-facil…
Browse files Browse the repository at this point in the history
…itate-the-splitting-of-networks-within-their' into 'dev'

Resolve "Decouple the network type from the wallets to facilitate the splitting of networks within their packages"

Closes #528

See merge request ergo/rosen-bridge/ui!439
  • Loading branch information
vorujack committed Jan 28, 2025
2 parents f81b109 + 8f76ad3 commit 0f621ee
Show file tree
Hide file tree
Showing 28 changed files with 189 additions and 96 deletions.
5 changes: 5 additions & 0 deletions .changeset/smart-years-compete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rosen-bridge/rosen-app': patch
---

Decouple the network type from the wallets to enable the separation of networks within their packages, thereby improving code quality
22 changes: 17 additions & 5 deletions apps/rosen/app/_hooks/useWallet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ import {
useCallback,
useContext,
useEffect,
useMemo,
useState,
} from 'react';

import { useSnackbar } from '@rosen-bridge/ui-kit';
import { Wallet } from '@rosen-ui/wallet-api';

import * as availableWallets from '@/_wallets';

import { useNetwork } from './useNetwork';

/**
Expand Down Expand Up @@ -41,6 +44,13 @@ export const WalletProvider = ({ children }: PropsWithChildren) => {

const [selected, setSelected] = useState<Wallet>();

const wallets = useMemo(() => {
if (!selectedSource) return [];
return Object.values<Wallet>(availableWallets).filter((wallet) => {
return wallet.supportedChains.includes(selectedSource.name);
});
}, [selectedSource]);

const select = useCallback(
async (wallet: Wallet) => {
try {
Expand Down Expand Up @@ -69,11 +79,13 @@ export const WalletProvider = ({ children }: PropsWithChildren) => {

const name = localStorage.getItem('rosen:wallet:' + selectedSource.name);

const wallet = selectedSource.wallets.find(
(wallet) => wallet.name === name && wallet.isAvailable(),
);
if (!name) return;

const wallet = availableWallets[
name as keyof typeof availableWallets
] as Wallet;

if (!wallet) return;
if (!wallet || !wallet.isAvailable()) return;

if ((await wallet.isConnected?.()) === false) return;

Expand All @@ -93,7 +105,7 @@ export const WalletProvider = ({ children }: PropsWithChildren) => {
const state = {
select,
selected,
wallets: selectedSource?.wallets || [],
wallets,
};

return (
Expand Down
10 changes: 0 additions & 10 deletions apps/rosen/app/_networks/binance/client.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { BinanceIcon } from '@rosen-bridge/icons';
import { NETWORK_LABELS, NETWORKS } from '@rosen-ui/constants';
import { MetaMaskWallet } from '@rosen-ui/metamask-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';
import { BinanceNetwork as BinanceNetworkType } from '@/_types';

import { getMaxTransfer } from './getMaxTransfer';
import { generateLockData, generateTxParameters } from './server';

/**
* the main object for Binance network
Expand All @@ -17,13 +14,6 @@ import { generateLockData, generateTxParameters } from './server';
export const BinanceNetwork: BinanceNetworkType = {
name: NETWORKS.BINANCE,
label: NETWORK_LABELS.BINANCE,
wallets: [
new MetaMaskWallet({
getTokenMap,
generateLockData: unwrap(generateLockData),
generateTxParameters: unwrap(generateTxParameters),
}),
],
nextHeightInterval: 200,
logo: BinanceIcon,
lockAddress: process.env.NEXT_PUBLIC_BINANCE_LOCK_ADDRESS!,
Expand Down
17 changes: 0 additions & 17 deletions apps/rosen/app/_networks/bitcoin/client.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,11 @@
import { BitcoinIcon } from '@rosen-bridge/icons';
import { NETWORK_LABELS, NETWORKS } from '@rosen-ui/constants';
import { OKXWallet } from '@rosen-ui/okx-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';
import { BitcoinNetwork as BitcoinNetworkType } from '@/_types';

import { LOCK_ADDRESSES } from '../../../configs';
import { getMaxTransfer } from './getMaxTransfer';
import {
generateOpReturnData,
generateUnsignedTx,
submitTransaction,
getAddressBalance,
} from './server';

const config = {
getTokenMap,
generateOpReturnData: unwrap(generateOpReturnData),
generateUnsignedTx: unwrap(generateUnsignedTx),
getAddressBalance: unwrap(getAddressBalance),
submitTransaction: unwrap(submitTransaction),
};

/**
* the main object for Bitcoin network
Expand All @@ -32,7 +16,6 @@ export const BitcoinNetwork: BitcoinNetworkType = {
name: NETWORKS.BITCOIN,
label: NETWORK_LABELS.BITCOIN,
logo: BitcoinIcon,
wallets: [new OKXWallet(config)],
nextHeightInterval: 1,
lockAddress: LOCK_ADDRESSES.BITCOIN,
getMaxTransfer: unwrap(getMaxTransfer),
Expand Down
23 changes: 0 additions & 23 deletions apps/rosen/app/_networks/cardano/client.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,11 @@
import { CardanoIcon } from '@rosen-bridge/icons';
import { NETWORK_LABELS, NETWORKS } from '@rosen-ui/constants';
import { EtrnlWallet } from '@rosen-ui/eternl-wallet';
import { LaceWallet } from '@rosen-ui/lace-wallet';
import { NamiWallet } from '@rosen-ui/nami-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';
import { CardanoNetwork as CardanoNetworkType } from '@/_types';

import { LOCK_ADDRESSES } from '../../../configs';
import { getMaxTransfer } from './getMaxTransfer';
import {
decodeWasmValue,
generateLockAuxiliaryData,
generateUnsignedTx,
setTxWitnessSet,
} from './server';

const config = {
getTokenMap,
decodeWasmValue: unwrap(decodeWasmValue),
generateLockAuxiliaryData: unwrap(generateLockAuxiliaryData),
generateUnsignedTx: unwrap(generateUnsignedTx),
setTxWitnessSet: unwrap(setTxWitnessSet),
};

/**
* the main object for Cardano network
Expand All @@ -33,11 +15,6 @@ const config = {
export const CardanoNetwork: CardanoNetworkType = {
name: NETWORKS.CARDANO,
label: NETWORK_LABELS.CARDANO,
wallets: [
new EtrnlWallet(config),
new LaceWallet(config),
new NamiWallet(config),
],
nextHeightInterval: 30,
logo: CardanoIcon,
lockAddress: LOCK_ADDRESSES.CARDANO,
Expand Down
9 changes: 0 additions & 9 deletions apps/rosen/app/_networks/ergo/client.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
import { ErgoIcon } from '@rosen-bridge/icons';
import { NETWORK_LABELS, NETWORKS } from '@rosen-ui/constants';
import { NautilusWallet } from '@rosen-ui/nautilus-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';
import { ErgoNetwork as ErgoNetworkType } from '@/_types';

import { LOCK_ADDRESSES } from '../../../configs';
import { getMaxTransfer } from './getMaxTransfer';
import { generateUnsignedTx } from './server';

const config = {
getTokenMap,
generateUnsignedTx: unwrap(generateUnsignedTx),
};

/**
* the main object for Ergo network
Expand All @@ -23,7 +15,6 @@ const config = {
export const ErgoNetwork: ErgoNetworkType = {
name: NETWORKS.ERGO,
label: NETWORK_LABELS.ERGO,
wallets: [new NautilusWallet(config)],
logo: ErgoIcon,
nextHeightInterval: 5,
lockAddress: LOCK_ADDRESSES.ERGO,
Expand Down
10 changes: 0 additions & 10 deletions apps/rosen/app/_networks/ethereum/client.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { EthereumIcon } from '@rosen-bridge/icons';
import { NETWORK_LABELS, NETWORKS } from '@rosen-ui/constants';
import { MetaMaskWallet } from '@rosen-ui/metamask-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';
import { EthereumNetwork as EthereumNetworkType } from '@/_types';

import { LOCK_ADDRESSES } from '../../../configs';
import { getMaxTransfer } from './getMaxTransfer';
import { generateLockData, generateTxParameters } from './server';

/**
* the main object for Ethereum network
Expand All @@ -18,13 +15,6 @@ import { generateLockData, generateTxParameters } from './server';
export const EthereumNetwork: EthereumNetworkType = {
name: NETWORKS.ETHEREUM,
label: NETWORK_LABELS.ETHEREUM,
wallets: [
new MetaMaskWallet({
getTokenMap,
generateLockData: unwrap(generateLockData),
generateTxParameters: unwrap(generateTxParameters),
}),
],
logo: EthereumIcon,
nextHeightInterval: 50,
lockAddress: LOCK_ADDRESSES.ETHEREUM,
Expand Down
20 changes: 0 additions & 20 deletions apps/rosen/app/_networks/ethereum/server.ts

This file was deleted.

2 changes: 0 additions & 2 deletions apps/rosen/app/_types/network.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Network, RosenAmountValue } from '@rosen-ui/types';
import { Wallet } from '@rosen-ui/wallet-api';

interface GetMaxTransferParams {
balance: RosenAmountValue;
Expand All @@ -16,7 +15,6 @@ export interface BaseNetwork<
name: NetworkName;
logo: string;
label: string;
wallets: Wallet[];
nextHeightInterval: number;
lockAddress: string;
// THIS FUNCTION WORKS WITH WRAPPED-VALUE
Expand Down
1 change: 1 addition & 0 deletions apps/rosen/app/_wallets/eternl/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './wallet';
File renamed without changes.
19 changes: 19 additions & 0 deletions apps/rosen/app/_wallets/eternl/wallet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { EtrnlWallet } from '@rosen-ui/eternl-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';

import {
decodeWasmValue,
generateLockAuxiliaryData,
generateUnsignedTx,
setTxWitnessSet,
} from './server';

export const eternl = new EtrnlWallet({
getTokenMap,
decodeWasmValue: unwrap(decodeWasmValue),
generateLockAuxiliaryData: unwrap(generateLockAuxiliaryData),
generateUnsignedTx: unwrap(generateUnsignedTx),
setTxWitnessSet: unwrap(setTxWitnessSet),
});
6 changes: 6 additions & 0 deletions apps/rosen/app/_wallets/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export * from './eternl';
export * from './lace';
export * from './metamask';
export * from './nami';
export * from './nautilus';
export * from './okx';
1 change: 1 addition & 0 deletions apps/rosen/app/_wallets/lace/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './wallet';
28 changes: 28 additions & 0 deletions apps/rosen/app/_wallets/lace/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
'use server';

import {
decodeWasmValue as decodeWasmValueCore,
generateLockAuxiliaryData as generateLockAuxiliaryDataCore,
generateUnsignedTx as generateUnsignedTxCore,
setTxWitnessSet as setTxWitnessSetCore,
} from '@rosen-network/cardano';

import { wrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getServerTokenMap';

export const decodeWasmValue = wrap(decodeWasmValueCore, {
cache: Infinity,
traceKey: 'decodeWasmValue',
});

export const generateLockAuxiliaryData = wrap(generateLockAuxiliaryDataCore, {
traceKey: 'generateLockAuxiliaryData',
});

export const generateUnsignedTx = wrap(generateUnsignedTxCore(getTokenMap()), {
traceKey: 'generateUnsignedTx',
});

export const setTxWitnessSet = wrap(setTxWitnessSetCore, {
traceKey: 'setTxWitnessSet',
});
19 changes: 19 additions & 0 deletions apps/rosen/app/_wallets/lace/wallet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { LaceWallet } from '@rosen-ui/lace-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';

import {
decodeWasmValue,
generateLockAuxiliaryData,
generateUnsignedTx,
setTxWitnessSet,
} from './server';

export const lace = new LaceWallet({
getTokenMap,
decodeWasmValue: unwrap(decodeWasmValue),
generateLockAuxiliaryData: unwrap(generateLockAuxiliaryData),
generateUnsignedTx: unwrap(generateUnsignedTx),
setTxWitnessSet: unwrap(setTxWitnessSet),
});
1 change: 1 addition & 0 deletions apps/rosen/app/_wallets/metamask/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './wallet';
File renamed without changes.
12 changes: 12 additions & 0 deletions apps/rosen/app/_wallets/metamask/wallet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { MetaMaskWallet } from '@rosen-ui/metamask-wallet';

import { unwrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getClientTokenMap';

import { generateLockData, generateTxParameters } from './server';

export const metamask = new MetaMaskWallet({
getTokenMap,
generateLockData: unwrap(generateLockData),
generateTxParameters: unwrap(generateTxParameters),
});
1 change: 1 addition & 0 deletions apps/rosen/app/_wallets/nami/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './wallet';
28 changes: 28 additions & 0 deletions apps/rosen/app/_wallets/nami/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
'use server';

import {
decodeWasmValue as decodeWasmValueCore,
generateLockAuxiliaryData as generateLockAuxiliaryDataCore,
generateUnsignedTx as generateUnsignedTxCore,
setTxWitnessSet as setTxWitnessSetCore,
} from '@rosen-network/cardano';

import { wrap } from '@/_safeServerAction';
import { getTokenMap } from '@/_tokenMap/getServerTokenMap';

export const decodeWasmValue = wrap(decodeWasmValueCore, {
cache: Infinity,
traceKey: 'decodeWasmValue',
});

export const generateLockAuxiliaryData = wrap(generateLockAuxiliaryDataCore, {
traceKey: 'generateLockAuxiliaryData',
});

export const generateUnsignedTx = wrap(generateUnsignedTxCore(getTokenMap()), {
traceKey: 'generateUnsignedTx',
});

export const setTxWitnessSet = wrap(setTxWitnessSetCore, {
traceKey: 'setTxWitnessSet',
});
Loading

0 comments on commit 0f621ee

Please sign in to comment.