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
11 changes: 6 additions & 5 deletions modules/statics/src/coins/generateERC20.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { erc20, erc20Token, terc20 } from '../account';
import { BaseCoin, CoinFeature, UnderlyingAsset } from '../base';
import { AccountNetwork, EthereumNetwork, Networks } from '../networks';
import { ofcerc20, tofcerc20 } from '../ofc';
import { getFilteredFeatures, ofcerc20, tofcerc20 } from '../ofc';

// --- Shared config interfaces ---

Expand All @@ -20,6 +20,7 @@ interface BaseErc20Config {
interface Erc20WithOfcConfig extends BaseErc20Config {
ofcId: string;
ofcName: string;
ofcFeatures: CoinFeature[];
ofcAddressCoin?: string;
skipOfc?: false;
}
Expand All @@ -35,7 +36,7 @@ type Erc20TokenConfig = Erc20Config & { network: AccountNetwork };

function createOfcCoin(
config: Erc20WithOfcConfig,
onchainFeatures: CoinFeature[],
features: CoinFeature[],
defaultAddressCoin: string,
isTestnet: boolean
) {
Expand All @@ -48,7 +49,7 @@ function createOfcCoin(
config.decimalPlaces,
config.asset,
undefined, // kind
undefined,
getFilteredFeatures(features),
undefined, // prefix
undefined, // suffix
undefined, // network
Expand All @@ -75,7 +76,7 @@ export function generateErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoin>[]

if (config.skipOfc) return [onChain];

return [onChain, createOfcCoin(config, onChain.features, 'eth', false)];
return [onChain, createOfcCoin(config, config.ofcFeatures ?? onChain.features, 'eth', false)];
}

export function generateTestErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoin>[] {
Expand All @@ -94,7 +95,7 @@ export function generateTestErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoi

if (config.skipOfc) return [onChain];

return [onChain, createOfcCoin(config, onChain.features, 'teth', true)];
return [onChain, createOfcCoin(config, config.ofcFeatures ?? onChain.features, 'teth', true)];
}

// --- ERC20 Token generators (erc20Token for non-Ethereum EVM chains) ---
Expand Down
17 changes: 9 additions & 8 deletions modules/statics/src/ofc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,17 @@ const DISALLOWED_FEATURES = [
];

const REQUIRED_FEATURES = [CoinFeature.ACCOUNT_MODEL, CoinFeature.REQUIRES_BIG_NUMBER];
/**
* Get filtered features for a coin based on its suffix
* @param suffix The coin suffix to look up
* @returns Filtered array of CoinFeatures excluding the ones in the exclude list
*/
export function getFilteredFeatures(suffix: string): CoinFeature[] {
export function getFilteredFeatures(suffix: string): CoinFeature[];
export function getFilteredFeatures(features: CoinFeature[]): CoinFeature[];
export function getFilteredFeatures(input: string | CoinFeature[]): CoinFeature[] {
if (Array.isArray(input)) {
const filteredFeatures = input.filter((feature) => !DISALLOWED_FEATURES.includes(feature));
return [...filteredFeatures, ...REQUIRED_FEATURES];
}
const coinsMap = getAllCoinsAndTokensMap();
if (coinsMap.has(suffix.toLowerCase())) {
if (coinsMap.has(input.toLowerCase())) {
const filteredFeatures = coinsMap
.get(suffix.toLowerCase())
.get(input.toLowerCase())
.features.filter((feature) => !DISALLOWED_FEATURES.includes(feature));
return [...filteredFeatures, ...REQUIRED_FEATURES];
}
Expand Down
Loading