Skip to content

Commit c23320f

Browse files
yuli-fernaM-Picco
andauthored
[Enhancemenet] Show automatic redemption route even if insufficient funds are available (#1360)
Co-authored-by: M-Picco <martin@xlabs.xyz>
1 parent a6f591d commit c23320f

File tree

14 files changed

+228
-91
lines changed

14 files changed

+228
-91
lines changed

wormhole-connect/src/routes/abstracts/routeAbstract.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,16 @@ export abstract class RouteAbstract {
2020
// protected abstract sendGasFallback: { [key: ChainName]: TokenConfig };
2121
// protected abstract claimGasFallback: { [key: ChainName]: TokenConfig };
2222

23-
// Is this route available for the given chain, token and amount specifications?
23+
// Is this route supported for the given chain, token and amount specifications?
24+
public abstract isRouteSupported(
25+
sourceToken: string,
26+
destToken: string,
27+
amount: string,
28+
sourceChain: ChainName | ChainId,
29+
destChain: ChainName | ChainId,
30+
): Promise<boolean>;
31+
32+
// Is this route available for the given chain, fee and amount specifications?
2433
public abstract isRouteAvailable(
2534
sourceToken: string,
2635
destToken: string,

wormhole-connect/src/routes/bridge/baseRoute.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ export abstract class BaseRoute extends RouteAbstract {
8686
});
8787
}
8888

89+
async isRouteAvailable(
90+
sourceToken: string,
91+
destToken: string,
92+
amount: string,
93+
sourceChain: ChainName | ChainId,
94+
destChain: ChainName | ChainId,
95+
): Promise<boolean> {
96+
return true;
97+
}
98+
8999
async getPreview(
90100
token: TokenConfig,
91101
destToken: TokenConfig,

wormhole-connect/src/routes/bridge/bridge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class BridgeRoute extends BaseRoute {
2828
readonly NATIVE_GAS_DROPOFF_SUPPORTED: boolean = false;
2929
readonly AUTOMATIC_DEPOSIT: boolean = false;
3030

31-
async isRouteAvailable(
31+
async isRouteSupported(
3232
sourceToken: string,
3333
destToken: string,
3434
amount: string,

wormhole-connect/src/routes/cctpManual/cctpManual.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export class CCTPManualRoute extends BaseRoute {
143143
});
144144
}
145145

146-
async isRouteAvailable(
146+
async isRouteSupported(
147147
sourceToken: string,
148148
destToken: string,
149149
amount: string,

wormhole-connect/src/routes/cctpRelay/cctpRelay.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export class CCTPRelayRoute extends CCTPManualRoute implements RelayAbstract {
150150
});
151151
}
152152

153-
async isRouteAvailable(
153+
async isRouteSupported(
154154
sourceToken: string,
155155
destToken: string,
156156
amount: string,
@@ -186,8 +186,17 @@ export class CCTPRelayRoute extends CCTPManualRoute implements RelayAbstract {
186186
const bothHaveRelayer =
187187
CHAINS[sourceChainName]?.contracts.cctpContracts?.wormholeCircleRelayer &&
188188
CHAINS[destChainName]?.contracts.cctpContracts?.wormholeCircleRelayer;
189-
if (!bothHaveRelayer) return false;
190189

190+
return !!bothHaveRelayer;
191+
}
192+
193+
async isRouteAvailable(
194+
sourceToken: string,
195+
destToken: string,
196+
amount: string,
197+
sourceChain: ChainName | ChainId,
198+
destChain: ChainName | ChainId,
199+
): Promise<boolean> {
191200
let relayerFee;
192201
try {
193202
relayerFee = await this.getRelayerFee(

wormhole-connect/src/routes/cosmosGateway/cosmosGateway.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export class CosmosGatewayRoute extends BaseRoute {
5757
return isGatewayChain(chain);
5858
}
5959

60-
async isRouteAvailable(
60+
async isRouteSupported(
6161
sourceToken: string,
6262
destToken: string,
6363
amount: string,

wormhole-connect/src/routes/hashflow/hashflow.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class HashflowRoute extends RouteAbstract {
2222
return false;
2323
}
2424

25-
async isRouteAvailable(
25+
async isRouteSupported(
2626
sourceToken: string,
2727
destToken: string,
2828
amount: string,
@@ -35,6 +35,16 @@ export class HashflowRoute extends RouteAbstract {
3535

3636
throw new Error('Method not implemented.');
3737
}
38+
39+
public isRouteAvailable(
40+
sourceToken: string,
41+
destToken: string,
42+
amount: string,
43+
sourceChain: ChainName | ChainId,
44+
destChain: ChainName | ChainId,
45+
): Promise<boolean> {
46+
throw new Error('Method not implemented.');
47+
}
3848
isSupportedSourceToken(
3949
token: TokenConfig | undefined,
4050
destToken: TokenConfig | undefined,

wormhole-connect/src/routes/operator.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,27 @@ export class Operator {
113113
: Route.Bridge;
114114
}
115115

116+
async isRouteSupported(
117+
route: Route,
118+
sourceToken: string,
119+
destToken: string,
120+
amount: string,
121+
sourceChain: ChainName | ChainId,
122+
destChain: ChainName | ChainId,
123+
): Promise<boolean> {
124+
if (!ROUTES.includes(route)) {
125+
return false;
126+
}
127+
128+
const r = this.getRoute(route);
129+
return await r.isRouteSupported(
130+
sourceToken,
131+
destToken,
132+
amount,
133+
sourceChain,
134+
destChain,
135+
);
136+
}
116137
async isRouteAvailable(
117138
route: Route,
118139
sourceToken: string,
@@ -134,7 +155,6 @@ export class Operator {
134155
destChain,
135156
);
136157
}
137-
138158
allSupportedChains(): ChainName[] {
139159
const supported = new Set<ChainName>();
140160
for (const key in CHAINS) {

wormhole-connect/src/routes/relay/relay.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export class RelayRoute extends BridgeRoute implements RelayAbstract {
5959
return !!sdkConfig.chains[chain]?.contracts.relayer;
6060
}
6161

62-
async isRouteAvailable(
62+
async isRouteSupported(
6363
sourceToken: string,
6464
destToken: string,
6565
amount: string,
@@ -70,7 +70,7 @@ export class RelayRoute extends BridgeRoute implements RelayAbstract {
7070
return false;
7171
}
7272

73-
const isBridgeRouteAvailable = await super.isRouteAvailable(
73+
const isBridgeRouteAvailable = await super.isRouteSupported(
7474
sourceToken,
7575
destToken,
7676
amount,
@@ -85,10 +85,18 @@ export class RelayRoute extends BridgeRoute implements RelayAbstract {
8585
}
8686
const tokenConfig = TOKENS[sourceToken]!;
8787
const tokenId = getWrappedTokenId(tokenConfig);
88-
const accepted = await isAcceptedToken(tokenId);
89-
90-
if (!accepted) return false;
88+
return isAcceptedToken(tokenId);
89+
}
9190

91+
async isRouteAvailable(
92+
sourceToken: string,
93+
destToken: string,
94+
amount: string,
95+
sourceChain: ChainName | ChainId,
96+
destChain: ChainName | ChainId,
97+
): Promise<boolean> {
98+
const tokenConfig = TOKENS[sourceToken]!;
99+
const tokenId = getWrappedTokenId(tokenConfig);
92100
let relayerFee;
93101
try {
94102
relayerFee = await this.getRelayerFee(

wormhole-connect/src/routes/tbtc/tbtc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export class TBTCRoute extends BaseRoute {
8585
return wh.toChainId(token.nativeChain) === CHAIN_ID_ETH;
8686
}
8787

88-
async isRouteAvailable(
88+
async isRouteSupported(
8989
sourceToken: string,
9090
destToken: string,
9191
amount: string,

0 commit comments

Comments
 (0)