Skip to content

Commit b2268aa

Browse files
authored
tokenBridge: fromIdentifier amount scaling fix (#700)
* tokenBridge: fromIdentifier amount scaling fix We were not scaling the transfer amount on the VAA to the source chain amount correctly. Fixes #580 * fix toNative chain
1 parent dbbbc7c commit b2268aa

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

connect/src/protocols/tokenBridge/tokenTransfer.ts

+20-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import type { Chain, Network } from "@wormhole-foundation/sdk-base";
2-
import { amount, encoding, finality, guardians, toChain as toChainName } from "@wormhole-foundation/sdk-base";
2+
import {
3+
amount,
4+
encoding,
5+
finality,
6+
guardians,
7+
toChain as toChainName,
8+
} from "@wormhole-foundation/sdk-base";
39
import type {
410
AttestationId,
511
AutomaticTokenBridge,
@@ -167,9 +173,20 @@ export class TokenTransfer<N extends Network = Network>
167173
let from = { chain: vaa.emitterChain, address: vaa.emitterAddress };
168174
let { token, to } = vaa.payload;
169175

176+
let nativeAddress: NativeAddress<Chain>;
177+
if (token.chain === from.chain) {
178+
nativeAddress = await wh.getTokenNativeAddress(from.chain, token.chain, token.address);
179+
} else {
180+
const fromChain = await wh.getChain(from.chain);
181+
const tb = await fromChain.getTokenBridge();
182+
const wrapped = await tb.getWrappedAsset(token);
183+
nativeAddress = toNative(from.chain, wrapped.toString());
184+
}
185+
186+
const decimals = await wh.getDecimals(from.chain, nativeAddress);
170187
const scaledAmount = amount.scale(
171-
amount.fromBaseUnits(token.amount, TokenTransfer.MAX_DECIMALS),
172-
await wh.getDecimals(token.chain, token.address),
188+
amount.fromBaseUnits(token.amount, Math.min(decimals, TokenTransfer.MAX_DECIMALS)),
189+
decimals,
173190
);
174191

175192
let nativeGasAmount: bigint = 0n;

0 commit comments

Comments
 (0)