Skip to content

Commit 8eec38a

Browse files
authored
Amount namespace (#306)
1 parent d6ecff6 commit 8eec38a

File tree

13 files changed

+164
-180
lines changed

13 files changed

+164
-180
lines changed

connect/src/protocols/tokenTransfer.ts

+13-16
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@ import {
44
Network,
55
Platform,
66
PlatformToChains,
7-
amountFromBaseUnits,
8-
baseUnits,
97
encoding,
10-
scaleAmount,
8+
amount,
119
toChain as toChainName,
12-
truncateAmount,
1310
} from "@wormhole-foundation/sdk-base";
1411
import {
1512
AttestationId,
@@ -177,8 +174,8 @@ export class TokenTransfer<N extends Network = Network>
177174
let from = { chain: vaa.emitterChain, address: vaa.emitterAddress };
178175
let { token, to } = vaa.payload;
179176

180-
const scaledAmount = scaleAmount(
181-
amountFromBaseUnits(token.amount, TOKEN_BRIDGE_MAX_DECIMALS),
177+
const scaledAmount = amount.scale(
178+
amount.fromBaseUnits(token.amount, TOKEN_BRIDGE_MAX_DECIMALS),
182179
await wh.getDecimals(token.chain, token.address),
183180
);
184181

@@ -191,7 +188,7 @@ export class TokenTransfer<N extends Network = Network>
191188

192189
const details: TokenTransferDetails = {
193190
token: token,
194-
amount: baseUnits(scaledAmount),
191+
amount: amount.units(scaledAmount),
195192
from,
196193
to,
197194
automatic,
@@ -458,15 +455,15 @@ export class TokenTransfer<N extends Network = Network>
458455
const srcDecimals = await srcChain.getDecimals(srcToken.address);
459456
const dstDecimals = await dstChain.getDecimals(dstToken.address);
460457

461-
const srcAmount = amountFromBaseUnits(transfer.amount, srcDecimals);
458+
const srcAmount = amount.fromBaseUnits(transfer.amount, srcDecimals);
462459

463-
const srcAmountTruncated = truncateAmount(srcAmount, TOKEN_BRIDGE_MAX_DECIMALS);
464-
const dstAmountReceivable = scaleAmount(srcAmountTruncated, dstDecimals);
460+
const srcAmountTruncated = amount.truncate(srcAmount, TOKEN_BRIDGE_MAX_DECIMALS);
461+
const dstAmountReceivable = amount.scale(srcAmountTruncated, dstDecimals);
465462

466463
if (!transfer.automatic) {
467464
return {
468-
sourceToken: { token: srcToken, amount: baseUnits(srcAmountTruncated) },
469-
destinationToken: { token: dstToken, amount: baseUnits(dstAmountReceivable) },
465+
sourceToken: { token: srcToken, amount: amount.units(srcAmountTruncated) },
466+
destinationToken: { token: dstToken, amount: amount.units(dstAmountReceivable) },
470467
};
471468
}
472469

@@ -476,8 +473,8 @@ export class TokenTransfer<N extends Network = Network>
476473
// quoted on the source chain
477474
const stb = await srcChain.getAutomaticTokenBridge();
478475
const fee = await stb.getRelayerFee(transfer.from.address, transfer.to, srcToken.address);
479-
const feeAmountDest = scaleAmount(
480-
truncateAmount(amountFromBaseUnits(fee, srcDecimals), TOKEN_BRIDGE_MAX_DECIMALS),
476+
const feeAmountDest = amount.scale(
477+
amount.truncate(amount.fromBaseUnits(fee, srcDecimals), TOKEN_BRIDGE_MAX_DECIMALS),
481478
dstDecimals,
482479
);
483480

@@ -504,12 +501,12 @@ export class TokenTransfer<N extends Network = Network>
504501
}
505502

506503
const destAmountLessFee =
507-
baseUnits(dstAmountReceivable) - dstNativeGasAmountRequested - baseUnits(feeAmountDest);
504+
amount.units(dstAmountReceivable) - dstNativeGasAmountRequested - amount.units(feeAmountDest);
508505

509506
return {
510507
sourceToken: {
511508
token: srcToken,
512-
amount: baseUnits(srcAmountTruncated),
509+
amount: amount.units(srcAmountTruncated),
513510
},
514511
destinationToken: { token: dstToken, amount: destAmountLessFee },
515512
relayFee: { token: srcToken, amount: fee },

connect/src/routes/cctp/automatic.ts

+11-19
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
import {
2-
Amount,
3-
Chain,
4-
Network,
5-
baseUnits,
6-
circle,
7-
contracts,
8-
displayAmount,
9-
} from "@wormhole-foundation/sdk-base";
1+
import { Chain, Network, circle, contracts, amount } from "@wormhole-foundation/sdk-base";
102
import {
113
ChainContext,
124
CircleTransferDetails,
@@ -33,9 +25,9 @@ export namespace AutomaticCCTPRoute {
3325
};
3426

3527
export type NormalizedParams = {
36-
amount: Amount;
37-
fee: Amount;
38-
nativeGasAmount: Amount;
28+
amount: amount.Amount;
29+
fee: amount.Amount;
30+
nativeGasAmount: amount.Amount;
3931
};
4032

4133
export interface ValidatedParams extends ValidatedTransferParams<Options> {
@@ -140,19 +132,19 @@ export class AutomaticCCTPRoute<N extends Network>
140132
}
141133

142134
private async normalizeTransferParams(params: Tp): Promise<AutomaticCCTPRoute.NormalizedParams> {
143-
const amount = this.request.parseAmount(params.amount);
135+
const amt = this.request.parseAmount(params.amount);
144136

145137
const ctb = await this.request.fromChain.getAutomaticCircleBridge();
146138
const fee = await ctb.getRelayerFee(this.request.to.chain);
147139

148140
const minAmount = (fee * 105n) / 100n;
149-
if (baseUnits(amount) < minAmount) {
141+
if (amount.units(amt) < minAmount) {
150142
throw new Error(
151-
`Minimum amount is ${displayAmount(this.request.amountFromBaseUnits(minAmount))}`,
143+
`Minimum amount is ${amount.display(this.request.amountFromBaseUnits(minAmount))}`,
152144
);
153145
}
154146

155-
const transferableAmount = baseUnits(amount) - fee;
147+
const transferableAmount = amount.units(amt) - fee;
156148

157149
const options = params.options ?? this.getDefaultOptions();
158150

@@ -170,7 +162,7 @@ export class AutomaticCCTPRoute<N extends Network>
170162

171163
return {
172164
fee: this.request.amountFromBaseUnits(fee),
173-
amount,
165+
amount: amt,
174166
nativeGasAmount: this.request.amountFromBaseUnits(nativeGasAmount),
175167
};
176168
}
@@ -179,9 +171,9 @@ export class AutomaticCCTPRoute<N extends Network>
179171
return {
180172
from: this.request.from,
181173
to: this.request.to,
182-
amount: baseUnits(params.normalizedParams.amount),
174+
amount: amount.units(params.normalizedParams.amount),
183175
automatic: true,
184-
nativeGas: baseUnits(params.normalizedParams.nativeGasAmount),
176+
nativeGas: amount.units(params.normalizedParams.nativeGasAmount),
185177
};
186178
}
187179

connect/src/routes/cctp/manual.ts

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
import {
2-
Amount,
3-
Chain,
4-
Network,
5-
baseUnits,
6-
circle,
7-
contracts,
8-
} from "@wormhole-foundation/sdk-base";
1+
import { Chain, Network, circle, contracts, amount } from "@wormhole-foundation/sdk-base";
92
import {
103
ChainContext,
114
CircleBridge,
@@ -27,7 +20,7 @@ export namespace CCTPRoute {
2720
};
2821

2922
export type NormalizedParams = {
30-
amount: Amount;
23+
amount: amount.Amount;
3124
};
3225

3326
export interface ValidatedParams extends ValidatedTransferParams<Options> {
@@ -164,7 +157,7 @@ export class CCTPRoute<N extends Network>
164157
return {
165158
from: this.request.from,
166159
to: this.request.to,
167-
amount: baseUnits(params.normalizedParams.amount),
160+
amount: amount.units(params.normalizedParams.amount),
168161
automatic: false,
169162
...params.options,
170163
};

connect/src/routes/mock/automatic.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
WormholeMessageId,
1111
encoding,
1212
nativeTokenId,
13-
parseAmount,
13+
amount,
1414
} from "../..";
1515
import { AutomaticRoute, StaticRouteMethods } from "../route";
1616
import {
@@ -79,15 +79,15 @@ export class AutomaticMockRoute<N extends Network>
7979
const fakeQuote: Q = {
8080
sourceToken: {
8181
token: this.request.source.id,
82-
amount: parseAmount(params.amount, this.request.source.decimals),
82+
amount: amount.parse(params.amount, this.request.source.decimals),
8383
},
8484
destinationToken: {
8585
token: this.request.destination!.id,
86-
amount: parseAmount(params.amount, this.request.destination.decimals),
86+
amount: amount.parse(params.amount, this.request.destination.decimals),
8787
},
8888
relayFee: {
8989
token: this.request.source.id,
90-
amount: parseAmount("0.01", this.request.source.decimals),
90+
amount: amount.parse("0.01", this.request.source.decimals),
9191
},
9292
};
9393
return fakeQuote;

connect/src/routes/mock/manual.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
WormholeMessageId,
1212
encoding,
1313
nativeTokenId,
14-
parseAmount,
14+
amount,
1515
} from "../..";
1616
import { ManualRoute, StaticRouteMethods } from "../route";
1717
import {
@@ -74,15 +74,15 @@ export class ManualMockRoute<N extends Network>
7474
const fakeQuote: Q = {
7575
sourceToken: {
7676
token: this.request.source.id,
77-
amount: parseAmount(params.amount, this.request.destination.decimals),
77+
amount: amount.parse(params.amount, this.request.destination.decimals),
7878
},
7979
destinationToken: {
8080
token: this.request.destination!.id,
81-
amount: parseAmount(params.amount, this.request.destination.decimals),
81+
amount: amount.parse(params.amount, this.request.destination.decimals),
8282
},
8383
relayFee: {
8484
token: this.request.source.id,
85-
amount: parseAmount("0.01", this.request.source.decimals),
85+
amount: amount.parse("0.01", this.request.source.decimals),
8686
},
8787
};
8888
return fakeQuote;

connect/src/routes/portico/automatic.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
Amount,
32
AttestationReceipt,
43
Chain,
54
ChainContext,
@@ -12,7 +11,6 @@ import {
1211
TransactionId,
1312
TransferState,
1413
Wormhole,
15-
baseUnits,
1614
canonicalAddress,
1715
chainToPlatform,
1816
contracts,
@@ -22,6 +20,7 @@ import {
2220
resolveWrappedToken,
2321
signSendWait,
2422
tokens,
23+
amount,
2524
} from "../..";
2625
import { AutomaticRoute, StaticRouteMethods } from "../route";
2726
import {
@@ -43,7 +42,7 @@ export namespace PorticoRoute {
4342
}
4443

4544
export type NormalizedParams = {
46-
amount: Amount;
45+
amount: amount.Amount;
4746

4847
canonicalSourceToken: TokenId;
4948
canonicalDestinationToken: TokenId;
@@ -237,7 +236,7 @@ export class AutomaticPorticoRoute<N extends Network>
237236
...(await this.request.displayQuote({
238237
sourceToken: {
239238
token: params.normalizedParams.sourceToken,
240-
amount: baseUnits(params.normalizedParams.amount),
239+
amount: amount.units(params.normalizedParams.amount),
241240
},
242241
destinationToken: {
243242
token: params.normalizedParams.destinationToken,
@@ -260,7 +259,7 @@ export class AutomaticPorticoRoute<N extends Network>
260259
this.request.from.address,
261260
this.request.to,
262261
sourceToken,
263-
baseUnits(params.normalizedParams.amount),
262+
amount.units(params.normalizedParams.amount),
264263
destToken!,
265264
params.quote!.quote,
266265
);
@@ -300,7 +299,7 @@ export class AutomaticPorticoRoute<N extends Network>
300299
const startQuote = await fromPorticoBridge.quoteSwap(
301300
params.normalizedParams.sourceToken.address,
302301
params.normalizedParams.canonicalSourceToken.address,
303-
baseUnits(params.normalizedParams.amount),
302+
amount.units(params.normalizedParams.amount),
304303
);
305304
const startSlippage = (startQuote * SLIPPAGE_BPS) / BPS_PER_HUNDRED_PERCENT;
306305

connect/src/routes/request.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Amount, Network, amountFromBaseUnits, parseAmount } from "@wormhole-foundation/sdk-base";
1+
import { Network, amount } from "@wormhole-foundation/sdk-base";
22
import { ChainAddress, ChainContext, TokenId } from "@wormhole-foundation/sdk-definitions";
33
import { TransferQuote } from "../types";
44
import { Wormhole } from "../wormhole";
@@ -30,12 +30,12 @@ export class RouteTransferRequest<N extends Network> {
3030
this.destination = destination;
3131
}
3232

33-
parseAmount(amt: string): Amount {
34-
return parseAmount(amt, this.source.decimals);
33+
parseAmount(amt: string): amount.Amount {
34+
return amount.parse(amt, this.source.decimals);
3535
}
3636

37-
amountFromBaseUnits(amt: bigint): Amount {
38-
return amountFromBaseUnits(amt, this.source.decimals);
37+
amountFromBaseUnits(amt: bigint): amount.Amount {
38+
return amount.fromBaseUnits(amt, this.source.decimals);
3939
}
4040

4141
async displayQuote(quote: TransferQuote): Promise<Quote> {
@@ -48,23 +48,23 @@ export class RouteTransferRequest<N extends Network> {
4848
let dq: Quote = {
4949
sourceToken: {
5050
token: quote.sourceToken.token,
51-
amount: amountFromBaseUnits(quote.sourceToken.amount, this.source.decimals),
51+
amount: amount.fromBaseUnits(quote.sourceToken.amount, this.source.decimals),
5252
},
5353
destinationToken: {
5454
token: quote.destinationToken.token,
55-
amount: amountFromBaseUnits(quote.destinationToken.amount, dstDecimals),
55+
amount: amount.fromBaseUnits(quote.destinationToken.amount, dstDecimals),
5656
},
5757
};
5858

5959
if (quote.relayFee) {
6060
dq.relayFee = {
6161
token: quote.relayFee.token,
62-
amount: amountFromBaseUnits(quote.relayFee.amount, this.source.decimals),
62+
amount: amount.fromBaseUnits(quote.relayFee.amount, this.source.decimals),
6363
};
6464
}
6565

6666
if (quote.destinationNativeGas) {
67-
dq.destinationNativeGas = amountFromBaseUnits(
67+
dq.destinationNativeGas = amount.fromBaseUnits(
6868
quote.destinationNativeGas,
6969
this.destination.decimals,
7070
);

0 commit comments

Comments
 (0)