@wormhole-foundation/sdk-evm-portico 0.10.12 → 0.11.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api.d.ts +1 -35
- package/dist/cjs/api.d.ts.map +1 -1
- package/dist/cjs/api.js +1 -122
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/bridge.d.ts +13 -8
- package/dist/cjs/bridge.d.ts.map +1 -1
- package/dist/cjs/bridge.js +76 -32
- package/dist/cjs/bridge.js.map +1 -1
- package/dist/cjs/consts.d.ts +6 -2
- package/dist/cjs/consts.d.ts.map +1 -1
- package/dist/cjs/consts.js +36 -9
- package/dist/cjs/consts.js.map +1 -1
- package/dist/esm/api.d.ts +1 -35
- package/dist/esm/api.d.ts.map +1 -1
- package/dist/esm/api.js +1 -122
- package/dist/esm/api.js.map +1 -1
- package/dist/esm/bridge.d.ts +13 -8
- package/dist/esm/bridge.d.ts.map +1 -1
- package/dist/esm/bridge.js +79 -35
- package/dist/esm/bridge.js.map +1 -1
- package/dist/esm/consts.d.ts +6 -2
- package/dist/esm/consts.d.ts.map +1 -1
- package/dist/esm/consts.js +35 -8
- package/dist/esm/consts.js.map +1 -1
- package/package.json +5 -5
package/dist/cjs/api.d.ts
CHANGED
|
@@ -1,44 +1,10 @@
|
|
|
1
|
-
import type { Chain,
|
|
2
|
-
import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
3
|
-
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
1
|
+
import type { Chain, TokenAddress } from '@wormhole-foundation/sdk-connect';
|
|
4
2
|
export declare const RELAYER_FEE_API_URL = "https://gfx.relayers.xlabs.xyz/api/v1/swap/quote";
|
|
5
|
-
export declare const OKU_TRADE_BASE_URL = "https://oku.trade/app";
|
|
6
|
-
export interface CreateOrderRequest {
|
|
7
|
-
startingChainId: number;
|
|
8
|
-
destinationChainId: number;
|
|
9
|
-
startingToken: string;
|
|
10
|
-
startingTokenAmount: string;
|
|
11
|
-
destinationToken: string;
|
|
12
|
-
destinationAddress: string;
|
|
13
|
-
relayerFee: string;
|
|
14
|
-
feeTierStart: number;
|
|
15
|
-
feeTierEnd: number;
|
|
16
|
-
minAmountStart: string;
|
|
17
|
-
minAmountEnd: string;
|
|
18
|
-
bridgeNonce: number;
|
|
19
|
-
shouldWrapNative: boolean;
|
|
20
|
-
shouldUnwrapNative: boolean;
|
|
21
|
-
porticoAddress: string;
|
|
22
|
-
destinationPorticoAddress: string;
|
|
23
|
-
}
|
|
24
|
-
export interface CreateOrderResponse {
|
|
25
|
-
transactionData: string;
|
|
26
|
-
transactionTarget: string;
|
|
27
|
-
transactionValue: string;
|
|
28
|
-
startParameters: string[];
|
|
29
|
-
estimatedAmountOut: string;
|
|
30
|
-
}
|
|
31
3
|
export interface RelayerQuoteResponse {
|
|
32
4
|
fee: string;
|
|
33
5
|
validUntil: string;
|
|
34
6
|
}
|
|
35
7
|
export declare class PorticoApi {
|
|
36
|
-
static createOrder<N extends Network, C extends EvmChains>(network: N, chain: C, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote, nonce: number): Promise<CreateOrderResponse>;
|
|
37
|
-
/**
|
|
38
|
-
* Validates that the response from the order creation API matches the request
|
|
39
|
-
* throws an error if there is a mismatch
|
|
40
|
-
*/
|
|
41
|
-
static validateCreateOrderResponse: (response: CreateOrderResponse, request: CreateOrderRequest) => void;
|
|
42
8
|
static quoteRelayer<C extends Chain>(chain: Chain, from: TokenAddress<C>, to: TokenAddress<C>): Promise<bigint>;
|
|
43
9
|
}
|
|
44
10
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/cjs/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAQ5E,eAAO,MAAM,mBAAmB,qDACoB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;WACR,YAAY,CAAC,CAAC,SAAS,KAAK,EACvC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,MAAM,CAAC;CA8BnB"}
|
package/dist/cjs/api.js
CHANGED
|
@@ -3,132 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PorticoApi = exports.
|
|
6
|
+
exports.PorticoApi = exports.RELAYER_FEE_API_URL = void 0;
|
|
7
7
|
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const abis_js_1 = require("./abis.js");
|
|
10
|
-
const consts_js_1 = require("./consts.js");
|
|
11
9
|
exports.RELAYER_FEE_API_URL = 'https://gfx.relayers.xlabs.xyz/api/v1/swap/quote';
|
|
12
|
-
exports.OKU_TRADE_BASE_URL = 'https://oku.trade/app';
|
|
13
|
-
const CREATE_ORDER_API_URL = 'https://thermae.fly.dev/api/order/create';
|
|
14
10
|
class PorticoApi {
|
|
15
|
-
// Post the order to the portico API
|
|
16
|
-
static async createOrder(network, chain, receiver, token, amount, destToken, quote, nonce) {
|
|
17
|
-
try {
|
|
18
|
-
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
19
|
-
const receiverAddress = (0, sdk_connect_1.canonicalAddress)(receiver);
|
|
20
|
-
const [isStartTokenNative, startToken] = (0, sdk_connect_1.resolveWrappedToken)(network, chain, token);
|
|
21
|
-
const [isFinalTokenNative, finalToken] = (0, sdk_connect_1.resolveWrappedToken)(network, receiver.chain, destToken);
|
|
22
|
-
const startTokenAddress = (0, sdk_connect_1.canonicalAddress)(startToken);
|
|
23
|
-
const finalTokenAddress = (0, sdk_connect_1.canonicalAddress)(finalToken);
|
|
24
|
-
const sourcePorticoAddress = sdk_connect_1.contracts.portico.get(network, chain).portico;
|
|
25
|
-
const destinationPorticoAddress = sdk_connect_1.contracts.portico.get(network, receiver.chain).portico;
|
|
26
|
-
const startingChainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
|
|
27
|
-
const destinationChainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, receiver.chain);
|
|
28
|
-
// Create the order
|
|
29
|
-
const orderRequest = {
|
|
30
|
-
startingChainId: Number(startingChainId),
|
|
31
|
-
startingToken: startTokenAddress.toLowerCase(),
|
|
32
|
-
destinationChainId: Number(destinationChainId),
|
|
33
|
-
destinationToken: finalTokenAddress.toLowerCase(),
|
|
34
|
-
destinationAddress: receiverAddress,
|
|
35
|
-
porticoAddress: sourcePorticoAddress,
|
|
36
|
-
destinationPorticoAddress: destinationPorticoAddress,
|
|
37
|
-
startingTokenAmount: amount.toString(),
|
|
38
|
-
minAmountStart: minAmountStart.toString(),
|
|
39
|
-
minAmountEnd: minAmountFinish.toString(),
|
|
40
|
-
bridgeNonce: nonce,
|
|
41
|
-
relayerFee: quote.relayerFee.toString(),
|
|
42
|
-
feeTierStart: consts_js_1.FEE_TIER,
|
|
43
|
-
feeTierEnd: consts_js_1.FEE_TIER,
|
|
44
|
-
shouldWrapNative: isStartTokenNative,
|
|
45
|
-
shouldUnwrapNative: isFinalTokenNative,
|
|
46
|
-
};
|
|
47
|
-
const response = await axios_1.default.post(CREATE_ORDER_API_URL, orderRequest);
|
|
48
|
-
// Validate the response, not strictly necessary but if some details are wrong we want to know
|
|
49
|
-
this.validateCreateOrderResponse(response.data, orderRequest);
|
|
50
|
-
return response.data;
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
if (axios_1.default.isAxiosError(e)) {
|
|
54
|
-
const message = `${e.response?.statusText}: ${e.response?.data.message}`;
|
|
55
|
-
throw new Error(`Could not create order: ${message},`);
|
|
56
|
-
}
|
|
57
|
-
throw e;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Validates that the response from the order creation API matches the request
|
|
62
|
-
* throws an error if there is a mismatch
|
|
63
|
-
*/
|
|
64
|
-
static validateCreateOrderResponse = (response, request) => {
|
|
65
|
-
if (!(0, sdk_connect_1.isEqualCaseInsensitive)(request.porticoAddress || '', response.transactionTarget)) {
|
|
66
|
-
throw new Error('portico address mismatch');
|
|
67
|
-
}
|
|
68
|
-
const decoded = abis_js_1.porticoAbi.decodeFunctionData('start', response.transactionData);
|
|
69
|
-
if (decoded.length !== 1 || decoded[0].length !== 10) {
|
|
70
|
-
throw new Error('decoded length mismatch');
|
|
71
|
-
}
|
|
72
|
-
const flagSetBuffer = sdk_connect_1.encoding.hex.decode(decoded[0][0]);
|
|
73
|
-
if (flagSetBuffer.length !== 32) {
|
|
74
|
-
throw new Error('flag set length mismatch');
|
|
75
|
-
}
|
|
76
|
-
const { recipientChain, feeTierStart, feeTierFinish, flags } = sdk_connect_1.PorticoBridge.deserializeFlagSet(flagSetBuffer);
|
|
77
|
-
const { shouldWrapNative, shouldUnwrapNative } = flags;
|
|
78
|
-
const [_, expectedChain] = sdk_connect_1.nativeChainIds.platformNativeChainIdToNetworkChain('Evm', BigInt(request.destinationChainId));
|
|
79
|
-
if (recipientChain !== (0, sdk_connect_1.toChainId)(expectedChain)) {
|
|
80
|
-
throw new Error('recipient chain mismatch');
|
|
81
|
-
}
|
|
82
|
-
if (feeTierStart !== request.feeTierStart) {
|
|
83
|
-
throw new Error('fee tier start mismatch');
|
|
84
|
-
}
|
|
85
|
-
if (feeTierFinish !== request.feeTierEnd) {
|
|
86
|
-
throw new Error('fee tier end mismatch');
|
|
87
|
-
}
|
|
88
|
-
if (!!shouldWrapNative !== request.shouldWrapNative) {
|
|
89
|
-
throw new Error('should wrap native mismatch');
|
|
90
|
-
}
|
|
91
|
-
if (!!shouldUnwrapNative !== request.shouldUnwrapNative) {
|
|
92
|
-
throw new Error('should unwrap native mismatch');
|
|
93
|
-
}
|
|
94
|
-
const startTokenAddress = decoded[0][1];
|
|
95
|
-
if (!(0, sdk_connect_1.isEqualCaseInsensitive)(startTokenAddress, request.startingToken)) {
|
|
96
|
-
throw new Error('start token address mismatch');
|
|
97
|
-
}
|
|
98
|
-
// const startTokenId = Wormhole.chainAddress(toChain(request.startingChainId), startTokenAddress);
|
|
99
|
-
// const canonicalTokenAddress: string = decoded[0][2];
|
|
100
|
-
// if (!isEqualCaseInsensitive(canonicalTokenAddress, getOriginalAddress("Mainnet", startTokenId))) {
|
|
101
|
-
// throw new Error("canonical token address mismatch");
|
|
102
|
-
// }
|
|
103
|
-
const finalTokenAddress = decoded[0][3];
|
|
104
|
-
if (!(0, sdk_connect_1.isEqualCaseInsensitive)(finalTokenAddress, request.destinationToken)) {
|
|
105
|
-
throw new Error('final token address mismatch');
|
|
106
|
-
}
|
|
107
|
-
const recipientAddress = decoded[0][4];
|
|
108
|
-
if (!(0, sdk_connect_1.isEqualCaseInsensitive)(recipientAddress, request.destinationAddress)) {
|
|
109
|
-
throw new Error('recipient address mismatch');
|
|
110
|
-
}
|
|
111
|
-
const destinationPorticoAddress = decoded[0][5];
|
|
112
|
-
if (!(0, sdk_connect_1.isEqualCaseInsensitive)(destinationPorticoAddress, request.destinationPorticoAddress || '')) {
|
|
113
|
-
throw new Error('destination portico address mismatch');
|
|
114
|
-
}
|
|
115
|
-
const amountSpecified = decoded[0][6];
|
|
116
|
-
if (amountSpecified.toString() !== request.startingTokenAmount) {
|
|
117
|
-
throw new Error('amount mismatch');
|
|
118
|
-
}
|
|
119
|
-
const minAmountStart = decoded[0][7];
|
|
120
|
-
if (minAmountStart.toString() !== request.minAmountStart) {
|
|
121
|
-
throw new Error('min amount start mismatch');
|
|
122
|
-
}
|
|
123
|
-
const minAmountFinish = decoded[0][8];
|
|
124
|
-
if (minAmountFinish.toString() !== request.minAmountEnd) {
|
|
125
|
-
throw new Error('min amount finish mismatch');
|
|
126
|
-
}
|
|
127
|
-
const relayerFee = decoded[0][9];
|
|
128
|
-
if (relayerFee.toString() !== request.relayerFee) {
|
|
129
|
-
throw new Error('relayer fee mismatch');
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
11
|
static async quoteRelayer(chain, from, to) {
|
|
133
12
|
if ((0, sdk_connect_1.isNative)(from) || (0, sdk_connect_1.isNative)(to))
|
|
134
13
|
throw new Error('how did you get here tho?');
|
package/dist/cjs/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":";;;;;;AACA,kEAI0C;AAC1C,kDAA0B;AAEb,QAAA,mBAAmB,GAC9B,kDAAkD,CAAC;AAOrD,MAAa,UAAU;IACrB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,KAAY,EACZ,IAAqB,EACrB,EAAmB;QAEnB,IAAI,IAAA,sBAAQ,EAAC,IAAI,CAAC,IAAI,IAAA,sBAAQ,EAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,sBAAQ,CAAC,GAAG,CAAC,MAAM,CACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,EACxC,KAAK,CACN,CAAC;QAEF,MAAM,WAAW,GAAG,sBAAQ,CAAC,GAAG,CAAC,MAAM,CACrC,EAAE,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,EACtC,KAAK,CACN,CAAC;QAEF,MAAM,WAAW,GAAG,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,2BAAmB,EACnB,OAAO,CACR,CAAC;YACF,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,eAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF;AAnCD,gCAmCC"}
|
package/dist/cjs/bridge.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
|
3
3
|
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
4
4
|
import { EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
|
|
5
5
|
import type { Provider } from 'ethers';
|
|
6
|
-
import { ethers } from 'ethers';
|
|
7
6
|
import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
|
|
7
|
+
import { EvmTokenBridge } from '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
8
8
|
import '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
9
9
|
export declare class EvmPorticoBridge<N extends Network, C extends EvmChains = EvmChains> implements PorticoBridge<N, C> {
|
|
10
10
|
readonly network: N;
|
|
@@ -12,19 +12,24 @@ export declare class EvmPorticoBridge<N extends Network, C extends EvmChains = E
|
|
|
12
12
|
readonly provider: Provider;
|
|
13
13
|
readonly contracts: Contracts;
|
|
14
14
|
chainId: bigint;
|
|
15
|
-
porticoAddress: string;
|
|
16
|
-
uniswapAddress: string;
|
|
17
|
-
porticoContract: ethers.Contract;
|
|
18
|
-
uniswapContract: ethers.Contract;
|
|
19
15
|
core: EvmWormholeCore<N, C>;
|
|
16
|
+
tokenBridge: EvmTokenBridge<N, C>;
|
|
20
17
|
constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
|
|
21
18
|
static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmPorticoBridge<N, EvmChains>>;
|
|
22
|
-
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
19
|
+
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, destinationPorticoAddress: string, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
23
20
|
redeem(sender: AccountAddress<C>, vaa: PorticoBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
24
|
-
|
|
21
|
+
isTransferCompleted(vaa: PorticoBridge.VAA): Promise<boolean>;
|
|
22
|
+
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, tokenGroup: string, amount: bigint): Promise<bigint>;
|
|
25
23
|
quoteRelay(startToken: TokenAddress<C>, endToken: TokenAddress<C>): Promise<bigint>;
|
|
26
|
-
getTransferrableToken(address: string): TokenId
|
|
24
|
+
getTransferrableToken(address: string): Promise<TokenId>;
|
|
25
|
+
supportedTokens(): {
|
|
26
|
+
group: string;
|
|
27
|
+
token: TokenId;
|
|
28
|
+
}[];
|
|
29
|
+
getTokenGroup(address: string): string;
|
|
27
30
|
private approve;
|
|
28
31
|
private createUnsignedTransaction;
|
|
32
|
+
getPorticoAddress(group: string): string;
|
|
33
|
+
private getQuoterAddress;
|
|
29
34
|
}
|
|
30
35
|
//# sourceMappingURL=bridge.d.ts.map
|
package/dist/cjs/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAM3D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,0CAA0C,CAAC;AAElD,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,SAAS,GAAG,SAAS,CAC/B,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAS5B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAV/B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGvB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WAelB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAUnC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,yBAAyB,EAAE,MAAM,EACjC,KAAK,EAAE,aAAa,CAAC,KAAK;IAoFrB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG;IAwBzD,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7D,SAAS,CACb,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IA+BZ,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAMjE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9D,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE;IAUtD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;YAOvB,OAAO;IAuBtB,OAAO,CAAC,yBAAyB;IAajC,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAS/B,OAAO,CAAC,gBAAgB;CAQzB"}
|
package/dist/cjs/bridge.js
CHANGED
|
@@ -7,8 +7,8 @@ const ethers_1 = require("ethers");
|
|
|
7
7
|
const abis_js_1 = require("./abis.js");
|
|
8
8
|
const api_js_1 = require("./api.js");
|
|
9
9
|
const consts_js_1 = require("./consts.js");
|
|
10
|
-
const tokens_1 = require("@wormhole-foundation/sdk-connect/tokens");
|
|
11
10
|
const sdk_evm_core_1 = require("@wormhole-foundation/sdk-evm-core");
|
|
11
|
+
const sdk_evm_tokenbridge_1 = require("@wormhole-foundation/sdk-evm-tokenbridge");
|
|
12
12
|
require("@wormhole-foundation/sdk-evm-tokenbridge");
|
|
13
13
|
class EvmPorticoBridge {
|
|
14
14
|
network;
|
|
@@ -16,11 +16,8 @@ class EvmPorticoBridge {
|
|
|
16
16
|
provider;
|
|
17
17
|
contracts;
|
|
18
18
|
chainId;
|
|
19
|
-
porticoAddress;
|
|
20
|
-
uniswapAddress;
|
|
21
|
-
porticoContract;
|
|
22
|
-
uniswapContract;
|
|
23
19
|
core;
|
|
20
|
+
tokenBridge;
|
|
24
21
|
constructor(network, chain, provider, contracts) {
|
|
25
22
|
this.network = network;
|
|
26
23
|
this.chain = chain;
|
|
@@ -29,12 +26,8 @@ class EvmPorticoBridge {
|
|
|
29
26
|
if (!contracts.portico)
|
|
30
27
|
throw new Error('Unsupported chain, no contract addresses for: ' + chain);
|
|
31
28
|
this.core = new sdk_evm_core_1.EvmWormholeCore(network, chain, provider, contracts);
|
|
32
|
-
|
|
33
|
-
this.porticoAddress = porticoAddress;
|
|
34
|
-
this.uniswapAddress = uniswapAddress;
|
|
29
|
+
this.tokenBridge = new sdk_evm_tokenbridge_1.EvmTokenBridge(network, chain, provider, contracts);
|
|
35
30
|
this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
|
|
36
|
-
this.porticoContract = new ethers_1.ethers.Contract(this.porticoAddress, abis_js_1.porticoAbi.fragments, this.provider);
|
|
37
|
-
this.uniswapContract = new ethers_1.ethers.Contract(this.uniswapAddress, abis_js_1.uniswapQuoterV2Abi.fragments, this.provider);
|
|
38
31
|
}
|
|
39
32
|
static async fromRpc(provider, config) {
|
|
40
33
|
const [network, chain] = await sdk_evm_1.EvmPlatform.chainFromRpc(provider);
|
|
@@ -43,7 +36,7 @@ class EvmPorticoBridge {
|
|
|
43
36
|
throw new Error(`Network mismatch: ${conf.network} != ${network}`);
|
|
44
37
|
return new EvmPorticoBridge(network, chain, provider, conf.contracts);
|
|
45
38
|
}
|
|
46
|
-
async *transfer(sender, receiver, token, amount, destToken, quote) {
|
|
39
|
+
async *transfer(sender, receiver, token, amount, destToken, destinationPorticoAddress, quote) {
|
|
47
40
|
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
48
41
|
if (minAmountStart === 0n)
|
|
49
42
|
throw new Error('Invalid min swap amount');
|
|
@@ -53,10 +46,9 @@ class EvmPorticoBridge {
|
|
|
53
46
|
const [isStartTokenNative, startToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, token);
|
|
54
47
|
const [isFinalTokenNative, finalToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, receiver.chain, destToken);
|
|
55
48
|
const startTokenAddress = (0, sdk_connect_1.canonicalAddress)(startToken);
|
|
56
|
-
const cannonTokenAddress = (0, sdk_connect_1.canonicalAddress)(this.getTransferrableToken(startTokenAddress));
|
|
49
|
+
const cannonTokenAddress = (0, sdk_connect_1.canonicalAddress)(await this.getTransferrableToken(startTokenAddress));
|
|
57
50
|
const receiverAddress = (0, sdk_connect_1.canonicalAddress)(receiver);
|
|
58
51
|
const finalTokenAddress = (0, sdk_connect_1.canonicalAddress)(finalToken);
|
|
59
|
-
const destinationPorticoAddress = sdk_connect_1.contracts.portico.get(this.network, receiver.chain).portico;
|
|
60
52
|
const nonce = new Date().valueOf() % 2 ** 4;
|
|
61
53
|
const flags = sdk_connect_1.PorticoBridge.serializeFlagSet({
|
|
62
54
|
flags: {
|
|
@@ -83,32 +75,47 @@ class EvmPorticoBridge {
|
|
|
83
75
|
quote.relayerFee.toString(),
|
|
84
76
|
],
|
|
85
77
|
]);
|
|
78
|
+
const group = this.getTokenGroup(startToken.address.toString());
|
|
79
|
+
const porticoAddress = this.getPorticoAddress(group);
|
|
86
80
|
// Approve the token if necessary
|
|
87
81
|
if (!isStartTokenNative)
|
|
88
|
-
yield* this.approve(startTokenAddress, senderAddress, amount,
|
|
82
|
+
yield* this.approve(startTokenAddress, senderAddress, amount, porticoAddress);
|
|
89
83
|
const messageFee = await this.core.getMessageFee();
|
|
90
84
|
const tx = {
|
|
91
|
-
to:
|
|
85
|
+
to: porticoAddress,
|
|
92
86
|
data: transactionData,
|
|
93
87
|
value: messageFee + (isStartTokenNative ? amount : 0n),
|
|
94
88
|
};
|
|
95
89
|
yield this.createUnsignedTransaction((0, sdk_evm_1.addFrom)(tx, senderAddress), 'PorticoBridge.Transfer');
|
|
96
90
|
}
|
|
97
91
|
async *redeem(sender, vaa) {
|
|
98
|
-
const
|
|
92
|
+
const recipientChain = (0, sdk_connect_1.toChain)(vaa.payload.payload.flagSet.recipientChain);
|
|
93
|
+
const tokenAddress = vaa.payload.payload.finalTokenAddress
|
|
94
|
+
.toNative(recipientChain)
|
|
95
|
+
.toString();
|
|
96
|
+
const group = this.getTokenGroup(tokenAddress);
|
|
97
|
+
const porticoAddress = this.getPorticoAddress(group);
|
|
98
|
+
const contract = new ethers_1.ethers.Contract(porticoAddress, abis_js_1.porticoAbi.fragments, this.provider);
|
|
99
|
+
const txReq = await contract
|
|
99
100
|
.getFunction('receiveMessageAndSwap')
|
|
100
101
|
.populateTransaction((0, sdk_connect_1.serialize)(vaa));
|
|
101
102
|
const address = new sdk_evm_1.EvmAddress(sender).toString();
|
|
102
103
|
yield this.createUnsignedTransaction((0, sdk_evm_1.addFrom)(txReq, address), 'PorticoBridge.Redeem');
|
|
103
104
|
}
|
|
104
|
-
async
|
|
105
|
+
async isTransferCompleted(vaa) {
|
|
106
|
+
const isCompleted = await this.tokenBridge.tokenBridge.isTransferCompleted((0, ethers_1.keccak256)(vaa.hash));
|
|
107
|
+
return isCompleted;
|
|
108
|
+
}
|
|
109
|
+
async quoteSwap(input, output, tokenGroup, amount) {
|
|
105
110
|
const [, inputTokenId] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, input);
|
|
106
111
|
const [, outputTokenId] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, output);
|
|
107
112
|
const inputAddress = (0, sdk_connect_1.canonicalAddress)(inputTokenId);
|
|
108
113
|
const outputAddress = (0, sdk_connect_1.canonicalAddress)(outputTokenId);
|
|
109
114
|
if ((0, sdk_connect_1.isEqualCaseInsensitive)(inputAddress, outputAddress))
|
|
110
115
|
return amount;
|
|
111
|
-
const
|
|
116
|
+
const quoterAddress = this.getQuoterAddress(tokenGroup);
|
|
117
|
+
const quoter = new ethers_1.ethers.Contract(quoterAddress, abis_js_1.uniswapQuoterV2Abi.fragments, this.provider);
|
|
118
|
+
const result = await quoter
|
|
112
119
|
.getFunction('quoteExactInputSingle')
|
|
113
120
|
.staticCall([inputAddress, outputAddress, amount, consts_js_1.FEE_TIER, 0]);
|
|
114
121
|
return result[0];
|
|
@@ -116,21 +123,42 @@ class EvmPorticoBridge {
|
|
|
116
123
|
async quoteRelay(startToken, endToken) {
|
|
117
124
|
return await api_js_1.PorticoApi.quoteRelayer(this.chain, startToken, endToken);
|
|
118
125
|
}
|
|
119
|
-
// For a given token, return the
|
|
120
|
-
//
|
|
121
|
-
getTransferrableToken(address) {
|
|
126
|
+
// For a given token, return the Wormhole-wrapped/highway token
|
|
127
|
+
// that actually gets bridged from this chain
|
|
128
|
+
async getTransferrableToken(address) {
|
|
129
|
+
const token = sdk_connect_1.Wormhole.tokenId(this.chain, address);
|
|
130
|
+
const [, wrappedToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, token);
|
|
122
131
|
if (this.chain === 'Ethereum')
|
|
123
|
-
return
|
|
124
|
-
//
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (!
|
|
132
|
-
throw new Error(`
|
|
133
|
-
|
|
132
|
+
return wrappedToken;
|
|
133
|
+
// Find the group that this token belongs to
|
|
134
|
+
const group = Object.values(consts_js_1.supportedTokens).find((tokens) => tokens.find((t) => t.chain === this.chain &&
|
|
135
|
+
(0, sdk_connect_1.canonicalAddress)(t) === (0, sdk_connect_1.canonicalAddress)(wrappedToken)));
|
|
136
|
+
if (!group)
|
|
137
|
+
throw new Error(`No token group found for ${address} on ${this.chain}`);
|
|
138
|
+
// Find the token in this group that originates on Ethereum
|
|
139
|
+
const tokenOnEthereum = group.find((t) => t.chain === 'Ethereum');
|
|
140
|
+
if (!tokenOnEthereum)
|
|
141
|
+
throw new Error(`No Ethereum origin token found for ${address} on ${this.chain}`);
|
|
142
|
+
// Now find the corresponding Wormhole-wrapped/highway token on this chain
|
|
143
|
+
const highwayTokenAddr = await this.tokenBridge.getWrappedAsset(tokenOnEthereum);
|
|
144
|
+
return sdk_connect_1.Wormhole.tokenId(this.chain, highwayTokenAddr.toString());
|
|
145
|
+
}
|
|
146
|
+
supportedTokens() {
|
|
147
|
+
const result = [];
|
|
148
|
+
for (const [group, tokens] of Object.entries(consts_js_1.supportedTokens)) {
|
|
149
|
+
for (const token of tokens) {
|
|
150
|
+
if (token.chain === this.chain)
|
|
151
|
+
result.push({ group, token });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
getTokenGroup(address) {
|
|
157
|
+
const tokens = this.supportedTokens();
|
|
158
|
+
const token = tokens.find((t) => (0, sdk_connect_1.canonicalAddress)(t.token) === address);
|
|
159
|
+
if (!token)
|
|
160
|
+
throw new Error('Token not found');
|
|
161
|
+
return token.group;
|
|
134
162
|
}
|
|
135
163
|
async *approve(token, senderAddr, amount, contract) {
|
|
136
164
|
const tokenContract = sdk_evm_1.EvmPlatform.getTokenImplementation(this.provider, token);
|
|
@@ -143,6 +171,22 @@ class EvmPorticoBridge {
|
|
|
143
171
|
createUnsignedTransaction(txReq, description) {
|
|
144
172
|
return new sdk_evm_1.EvmUnsignedTransaction((0, sdk_evm_1.addChainId)(txReq, this.chainId), this.network, this.chain, description, false);
|
|
145
173
|
}
|
|
174
|
+
getPorticoAddress(group) {
|
|
175
|
+
const portico = this.contracts.portico;
|
|
176
|
+
if (group === 'USDT') {
|
|
177
|
+
// Use PancakeSwap if available for USDT
|
|
178
|
+
return portico.porticoPancakeSwap || portico.porticoUniswap;
|
|
179
|
+
}
|
|
180
|
+
return portico.porticoUniswap;
|
|
181
|
+
}
|
|
182
|
+
getQuoterAddress(group) {
|
|
183
|
+
const portico = this.contracts.portico;
|
|
184
|
+
if (group === 'USDT') {
|
|
185
|
+
// Use PancakeSwap if available for USDT
|
|
186
|
+
return portico.pancakeSwapQuoterV2 || portico.uniswapQuoterV2;
|
|
187
|
+
}
|
|
188
|
+
return portico.uniswapQuoterV2;
|
|
189
|
+
}
|
|
146
190
|
}
|
|
147
191
|
exports.EvmPorticoBridge = EvmPorticoBridge;
|
|
148
192
|
//# sourceMappingURL=bridge.js.map
|
package/dist/cjs/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":";;;AAUA,kEAU0C;AAE1C,0DAMsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":";;;AAUA,kEAU0C;AAE1C,0DAMsC;AAEtC,mCAA2C;AAC3C,uCAA2D;AAC3D,qCAAsC;AACtC,2CAAwD;AAExD,oEAAoE;AACpE,kFAA0E;AAE1E,oDAAkD;AAElD,MAAa,gBAAgB;IAYhB;IACA;IACA;IACA;IAVX,OAAO,CAAS;IAEhB,IAAI,CAAwB;IAE5B,WAAW,CAAuB;IAElC,YACW,OAAU,EACV,KAAQ,EACR,QAAkB,EAClB,SAAoB;QAHpB,YAAO,GAAP,OAAO,CAAG;QACV,UAAK,GAAL,KAAK,CAAG;QACR,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAW;QAE7B,IAAI,CAAC,SAAS,CAAC,OAAO;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,KAAK,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,GAAG,IAAI,8BAAe,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC,WAAW,GAAG,IAAI,oCAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,4BAAc,CAAC,2BAA2B,CAAC,GAAG,CAC3D,OAAO,EACP,KAAK,CACI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,QAAkB,EAClB,MAAiC;QAEjC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,qBAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;QAErE,OAAO,IAAI,gBAAgB,CAAC,OAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,CAAC,QAAQ,CACb,MAAyB,EACzB,QAAsB,EACtB,KAAsB,EACtB,MAAc,EACd,SAAkB,EAClB,yBAAiC,EACjC,KAA0B;QAE1B,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9D,IAAI,cAAc,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,IAAI,eAAe,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAExD,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAAG,IAAA,iCAAmB,EAC1D,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QAEF,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAAG,IAAA,iCAAmB,EAC1D,IAAI,CAAC,OAAO,EACZ,QAAQ,CAAC,KAAK,EACd,SAAS,CACV,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAA,8BAAgB,EAAC,UAAU,CAAC,CAAC;QAEvD,MAAM,kBAAkB,GAAG,IAAA,8BAAgB,EACzC,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CACpD,CAAC;QAEF,MAAM,eAAe,GAAG,IAAA,8BAAgB,EAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,iBAAiB,GAAG,IAAA,8BAAgB,EAAC,UAAU,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,2BAAa,CAAC,gBAAgB,CAAC;YAC3C,KAAK,EAAE;gBACL,gBAAgB,EAAE,kBAAkB;gBACpC,kBAAkB,EAAE,kBAAkB;aACvC;YACD,cAAc,EAAE,IAAA,uBAAS,EAAC,QAAQ,CAAC,KAAK,CAAC;YACzC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,oBAAQ;YACtB,aAAa,EAAE,oBAAQ;YACvB,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,oBAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC7D;gBACE,KAAK;gBACL,iBAAiB,CAAC,WAAW,EAAE;gBAC/B,kBAAkB;gBAClB,iBAAiB,CAAC,WAAW,EAAE;gBAC/B,eAAe;gBACf,yBAAyB;gBACzB,MAAM,CAAC,QAAQ,EAAE;gBACjB,cAAc,CAAC,QAAQ,EAAE;gBACzB,eAAe,CAAC,QAAQ,EAAE;gBAC1B,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;aAC5B;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAErD,iCAAiC;QACjC,IAAI,CAAC,kBAAkB;YACrB,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CACjB,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,cAAc,CACf,CAAC;QAEJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEnD,MAAM,EAAE,GAAG;YACT,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,UAAU,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC;QACF,MAAM,IAAI,CAAC,yBAAyB,CAClC,IAAA,iBAAO,EAAC,EAAE,EAAE,aAAa,CAAC,EAC1B,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,MAAyB,EAAE,GAAsB;QAC7D,MAAM,cAAc,GAAG,IAAA,qBAAO,EAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB;aACvD,QAAQ,CAAC,cAAc,CAAC;aACxB,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,QAAQ,CAClC,cAAc,EACd,oBAAU,CAAC,SAAS,EACpB,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,QAAQ;aACzB,WAAW,CAAC,uBAAuB,CAAC;aACpC,mBAAmB,CAAC,IAAA,uBAAS,EAAC,GAAG,CAAC,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAElD,MAAM,IAAI,CAAC,yBAAyB,CAClC,IAAA,iBAAO,EAAC,KAAK,EAAE,OAAO,CAAC,EACvB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAsB;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CACxE,IAAA,kBAAS,EAAC,GAAG,CAAC,IAAI,CAAC,CACpB,CAAC;QACF,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAAsB,EACtB,MAAuB,EACvB,UAAkB,EAClB,MAAc;QAEd,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,IAAA,iCAAmB,EAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QAEF,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,IAAA,iCAAmB,EAC3C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,MAAM,CACP,CAAC;QAEF,MAAM,YAAY,GAAG,IAAA,8BAAgB,EAAC,YAAY,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,IAAA,8BAAgB,EAAC,aAAa,CAAC,CAAC;QAEtD,IAAI,IAAA,oCAAsB,EAAC,YAAY,EAAE,aAAa,CAAC;YAAE,OAAO,MAAM,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,QAAQ,CAChC,aAAa,EACb,4BAAkB,CAAC,SAAS,EAC5B,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM;aACxB,WAAW,CAAC,uBAAuB,CAAC;aACpC,UAAU,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,oBAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAA2B,EAAE,QAAyB;QACrE,OAAO,MAAM,mBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,+DAA+D;IAC/D,6CAA6C;IAC7C,KAAK,CAAC,qBAAqB,CAAC,OAAe;QACzC,MAAM,KAAK,GAAG,sBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,IAAA,iCAAmB,EAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,YAAY,CAAC;QAEnD,4CAA4C;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,2BAAe,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3D,MAAM,CAAC,IAAI,CACT,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YACtB,IAAA,8BAAgB,EAAC,CAAC,CAAC,KAAK,IAAA,8BAAgB,EAAC,YAAY,CAAC,CACzD,CACF,CAAC;QACF,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE1E,2DAA2D;QAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe;YAClB,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,OAAO,IAAI,CAAC,KAAK,EAAE,CACjE,CAAC;QAEJ,0EAA0E;QAC1E,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAE1D,OAAO,sBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,eAAe;QACb,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,2BAAe,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8BAAgB,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,CAAC,OAAO,CACpB,KAAa,EACb,UAAkB,EAClB,MAAc,EACd,QAAgB;QAEhB,MAAM,aAAa,GAAG,qBAAW,CAAC,sBAAsB,CACtD,IAAI,CAAC,QAAQ,EACb,KAAK,CACN,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAC3D,QAAQ,EACR,MAAM,CACP,CAAC;YACF,MAAM,IAAI,CAAC,yBAAyB,CAClC,IAAA,iBAAO,EAAC,KAAK,EAAE,UAAU,CAAC,EAC1B,uBAAuB,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,yBAAyB,CAC/B,KAAyB,EACzB,WAAmB;QAEnB,OAAO,IAAI,gCAAsB,CAC/B,IAAA,oBAAU,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAC/B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,WAAW,EACX,KAAK,CACN,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,wCAAwC;YACxC,OAAO,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;QAC9D,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,wCAAwC;YACxC,OAAO,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC,eAAe,CAAC;IACjC,CAAC;CACF;AAvTD,4CAuTC"}
|
package/dist/cjs/consts.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export declare const FEE_TIER = 100;
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
2
|
+
export declare const supportedTokens: {
|
|
3
|
+
readonly ETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">];
|
|
4
|
+
readonly WETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Avalanche">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Bsc">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">];
|
|
5
|
+
readonly wstETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">];
|
|
6
|
+
readonly USDT: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Avalanche">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Bsc">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">, import("@wormhole-foundation/sdk-connect").TokenId<"Celo">];
|
|
7
|
+
};
|
|
4
8
|
//# sourceMappingURL=consts.d.ts.map
|
package/dist/cjs/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,eAAe;;;;;CAiClB,CAAC"}
|
package/dist/cjs/consts.js
CHANGED
|
@@ -1,13 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.supportedTokens = exports.FEE_TIER = void 0;
|
|
4
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
4
5
|
exports.FEE_TIER = 100;
|
|
5
|
-
exports.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
exports.supportedTokens = {
|
|
7
|
+
ETH: [
|
|
8
|
+
sdk_connect_1.Wormhole.tokenId('Arbitrum', 'native'),
|
|
9
|
+
sdk_connect_1.Wormhole.tokenId('Base', 'native'),
|
|
10
|
+
sdk_connect_1.Wormhole.tokenId('Ethereum', 'native'),
|
|
11
|
+
sdk_connect_1.Wormhole.tokenId('Optimism', 'native'),
|
|
12
|
+
],
|
|
13
|
+
WETH: [
|
|
14
|
+
sdk_connect_1.Wormhole.tokenId('Arbitrum', '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),
|
|
15
|
+
sdk_connect_1.Wormhole.tokenId('Avalanche', '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB'),
|
|
16
|
+
sdk_connect_1.Wormhole.tokenId('Base', '0x4200000000000000000000000000000000000006'),
|
|
17
|
+
sdk_connect_1.Wormhole.tokenId('Bsc', '0x2170Ed0880ac9A755fd29B2688956BD959F933F8'),
|
|
18
|
+
sdk_connect_1.Wormhole.tokenId('Ethereum', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
|
|
19
|
+
sdk_connect_1.Wormhole.tokenId('Optimism', '0x4200000000000000000000000000000000000006'),
|
|
20
|
+
sdk_connect_1.Wormhole.tokenId('Polygon', '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619'),
|
|
21
|
+
],
|
|
22
|
+
wstETH: [
|
|
23
|
+
sdk_connect_1.Wormhole.tokenId('Arbitrum', '0x5979D7b546E38E414F7E9822514be443A4800529'),
|
|
24
|
+
sdk_connect_1.Wormhole.tokenId('Base', '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452'),
|
|
25
|
+
sdk_connect_1.Wormhole.tokenId('Ethereum', '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
|
|
26
|
+
sdk_connect_1.Wormhole.tokenId('Optimism', '0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb'),
|
|
27
|
+
sdk_connect_1.Wormhole.tokenId('Polygon', '0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD'),
|
|
28
|
+
],
|
|
29
|
+
USDT: [
|
|
30
|
+
sdk_connect_1.Wormhole.tokenId('Arbitrum', '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),
|
|
31
|
+
sdk_connect_1.Wormhole.tokenId('Avalanche', '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7'),
|
|
32
|
+
sdk_connect_1.Wormhole.tokenId('Base', '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2'),
|
|
33
|
+
sdk_connect_1.Wormhole.tokenId('Bsc', '0x55d398326f99059fF775485246999027B3197955'),
|
|
34
|
+
sdk_connect_1.Wormhole.tokenId('Ethereum', '0xdAC17F958D2ee523a2206206994597C13D831ec7'),
|
|
35
|
+
sdk_connect_1.Wormhole.tokenId('Optimism', '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),
|
|
36
|
+
sdk_connect_1.Wormhole.tokenId('Polygon', '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),
|
|
37
|
+
sdk_connect_1.Wormhole.tokenId('Celo', '0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e'),
|
|
38
|
+
],
|
|
39
|
+
};
|
|
13
40
|
//# sourceMappingURL=consts.js.map
|
package/dist/cjs/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":";;;AAAA,kEAA4D;AAE/C,QAAA,QAAQ,GAAG,GAAG,CAAC;AAEf,QAAA,eAAe,GAAG;IAC7B,GAAG,EAAE;QACH,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACtC,sBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClC,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACtC,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;KACvC;IACD,IAAI,EAAE;QACJ,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,4CAA4C,CAAC;QAC3E,sBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,sBAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,4CAA4C,CAAC;QACrE,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC1E;IACD,MAAM,EAAE;QACN,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC1E;IACD,IAAI,EAAE;QACJ,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,4CAA4C,CAAC;QAC3E,sBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,sBAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,4CAA4C,CAAC;QACrE,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,sBAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;QACzE,sBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;KACvE;CACO,CAAC"}
|
package/dist/esm/api.d.ts
CHANGED
|
@@ -1,44 +1,10 @@
|
|
|
1
|
-
import type { Chain,
|
|
2
|
-
import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
3
|
-
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
1
|
+
import type { Chain, TokenAddress } from '@wormhole-foundation/sdk-connect';
|
|
4
2
|
export declare const RELAYER_FEE_API_URL = "https://gfx.relayers.xlabs.xyz/api/v1/swap/quote";
|
|
5
|
-
export declare const OKU_TRADE_BASE_URL = "https://oku.trade/app";
|
|
6
|
-
export interface CreateOrderRequest {
|
|
7
|
-
startingChainId: number;
|
|
8
|
-
destinationChainId: number;
|
|
9
|
-
startingToken: string;
|
|
10
|
-
startingTokenAmount: string;
|
|
11
|
-
destinationToken: string;
|
|
12
|
-
destinationAddress: string;
|
|
13
|
-
relayerFee: string;
|
|
14
|
-
feeTierStart: number;
|
|
15
|
-
feeTierEnd: number;
|
|
16
|
-
minAmountStart: string;
|
|
17
|
-
minAmountEnd: string;
|
|
18
|
-
bridgeNonce: number;
|
|
19
|
-
shouldWrapNative: boolean;
|
|
20
|
-
shouldUnwrapNative: boolean;
|
|
21
|
-
porticoAddress: string;
|
|
22
|
-
destinationPorticoAddress: string;
|
|
23
|
-
}
|
|
24
|
-
export interface CreateOrderResponse {
|
|
25
|
-
transactionData: string;
|
|
26
|
-
transactionTarget: string;
|
|
27
|
-
transactionValue: string;
|
|
28
|
-
startParameters: string[];
|
|
29
|
-
estimatedAmountOut: string;
|
|
30
|
-
}
|
|
31
3
|
export interface RelayerQuoteResponse {
|
|
32
4
|
fee: string;
|
|
33
5
|
validUntil: string;
|
|
34
6
|
}
|
|
35
7
|
export declare class PorticoApi {
|
|
36
|
-
static createOrder<N extends Network, C extends EvmChains>(network: N, chain: C, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote, nonce: number): Promise<CreateOrderResponse>;
|
|
37
|
-
/**
|
|
38
|
-
* Validates that the response from the order creation API matches the request
|
|
39
|
-
* throws an error if there is a mismatch
|
|
40
|
-
*/
|
|
41
|
-
static validateCreateOrderResponse: (response: CreateOrderResponse, request: CreateOrderRequest) => void;
|
|
42
8
|
static quoteRelayer<C extends Chain>(chain: Chain, from: TokenAddress<C>, to: TokenAddress<C>): Promise<bigint>;
|
|
43
9
|
}
|
|
44
10
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/esm/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAQ5E,eAAO,MAAM,mBAAmB,qDACoB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;WACR,YAAY,CAAC,CAAC,SAAS,KAAK,EACvC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,MAAM,CAAC;CA8BnB"}
|
package/dist/esm/api.js
CHANGED
|
@@ -1,128 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { encoding, isNative, toChainId, } from '@wormhole-foundation/sdk-connect';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import { porticoAbi } from './abis.js';
|
|
4
|
-
import { FEE_TIER } from './consts.js';
|
|
5
3
|
export const RELAYER_FEE_API_URL = 'https://gfx.relayers.xlabs.xyz/api/v1/swap/quote';
|
|
6
|
-
export const OKU_TRADE_BASE_URL = 'https://oku.trade/app';
|
|
7
|
-
const CREATE_ORDER_API_URL = 'https://thermae.fly.dev/api/order/create';
|
|
8
4
|
export class PorticoApi {
|
|
9
|
-
// Post the order to the portico API
|
|
10
|
-
static async createOrder(network, chain, receiver, token, amount, destToken, quote, nonce) {
|
|
11
|
-
try {
|
|
12
|
-
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
13
|
-
const receiverAddress = canonicalAddress(receiver);
|
|
14
|
-
const [isStartTokenNative, startToken] = resolveWrappedToken(network, chain, token);
|
|
15
|
-
const [isFinalTokenNative, finalToken] = resolveWrappedToken(network, receiver.chain, destToken);
|
|
16
|
-
const startTokenAddress = canonicalAddress(startToken);
|
|
17
|
-
const finalTokenAddress = canonicalAddress(finalToken);
|
|
18
|
-
const sourcePorticoAddress = contracts.portico.get(network, chain).portico;
|
|
19
|
-
const destinationPorticoAddress = contracts.portico.get(network, receiver.chain).portico;
|
|
20
|
-
const startingChainId = nativeChainIds.networkChainToNativeChainId.get(network, chain);
|
|
21
|
-
const destinationChainId = nativeChainIds.networkChainToNativeChainId.get(network, receiver.chain);
|
|
22
|
-
// Create the order
|
|
23
|
-
const orderRequest = {
|
|
24
|
-
startingChainId: Number(startingChainId),
|
|
25
|
-
startingToken: startTokenAddress.toLowerCase(),
|
|
26
|
-
destinationChainId: Number(destinationChainId),
|
|
27
|
-
destinationToken: finalTokenAddress.toLowerCase(),
|
|
28
|
-
destinationAddress: receiverAddress,
|
|
29
|
-
porticoAddress: sourcePorticoAddress,
|
|
30
|
-
destinationPorticoAddress: destinationPorticoAddress,
|
|
31
|
-
startingTokenAmount: amount.toString(),
|
|
32
|
-
minAmountStart: minAmountStart.toString(),
|
|
33
|
-
minAmountEnd: minAmountFinish.toString(),
|
|
34
|
-
bridgeNonce: nonce,
|
|
35
|
-
relayerFee: quote.relayerFee.toString(),
|
|
36
|
-
feeTierStart: FEE_TIER,
|
|
37
|
-
feeTierEnd: FEE_TIER,
|
|
38
|
-
shouldWrapNative: isStartTokenNative,
|
|
39
|
-
shouldUnwrapNative: isFinalTokenNative,
|
|
40
|
-
};
|
|
41
|
-
const response = await axios.post(CREATE_ORDER_API_URL, orderRequest);
|
|
42
|
-
// Validate the response, not strictly necessary but if some details are wrong we want to know
|
|
43
|
-
this.validateCreateOrderResponse(response.data, orderRequest);
|
|
44
|
-
return response.data;
|
|
45
|
-
}
|
|
46
|
-
catch (e) {
|
|
47
|
-
if (axios.isAxiosError(e)) {
|
|
48
|
-
const message = `${e.response?.statusText}: ${e.response?.data.message}`;
|
|
49
|
-
throw new Error(`Could not create order: ${message},`);
|
|
50
|
-
}
|
|
51
|
-
throw e;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Validates that the response from the order creation API matches the request
|
|
56
|
-
* throws an error if there is a mismatch
|
|
57
|
-
*/
|
|
58
|
-
static validateCreateOrderResponse = (response, request) => {
|
|
59
|
-
if (!isEqualCaseInsensitive(request.porticoAddress || '', response.transactionTarget)) {
|
|
60
|
-
throw new Error('portico address mismatch');
|
|
61
|
-
}
|
|
62
|
-
const decoded = porticoAbi.decodeFunctionData('start', response.transactionData);
|
|
63
|
-
if (decoded.length !== 1 || decoded[0].length !== 10) {
|
|
64
|
-
throw new Error('decoded length mismatch');
|
|
65
|
-
}
|
|
66
|
-
const flagSetBuffer = encoding.hex.decode(decoded[0][0]);
|
|
67
|
-
if (flagSetBuffer.length !== 32) {
|
|
68
|
-
throw new Error('flag set length mismatch');
|
|
69
|
-
}
|
|
70
|
-
const { recipientChain, feeTierStart, feeTierFinish, flags } = PorticoBridge.deserializeFlagSet(flagSetBuffer);
|
|
71
|
-
const { shouldWrapNative, shouldUnwrapNative } = flags;
|
|
72
|
-
const [_, expectedChain] = nativeChainIds.platformNativeChainIdToNetworkChain('Evm', BigInt(request.destinationChainId));
|
|
73
|
-
if (recipientChain !== toChainId(expectedChain)) {
|
|
74
|
-
throw new Error('recipient chain mismatch');
|
|
75
|
-
}
|
|
76
|
-
if (feeTierStart !== request.feeTierStart) {
|
|
77
|
-
throw new Error('fee tier start mismatch');
|
|
78
|
-
}
|
|
79
|
-
if (feeTierFinish !== request.feeTierEnd) {
|
|
80
|
-
throw new Error('fee tier end mismatch');
|
|
81
|
-
}
|
|
82
|
-
if (!!shouldWrapNative !== request.shouldWrapNative) {
|
|
83
|
-
throw new Error('should wrap native mismatch');
|
|
84
|
-
}
|
|
85
|
-
if (!!shouldUnwrapNative !== request.shouldUnwrapNative) {
|
|
86
|
-
throw new Error('should unwrap native mismatch');
|
|
87
|
-
}
|
|
88
|
-
const startTokenAddress = decoded[0][1];
|
|
89
|
-
if (!isEqualCaseInsensitive(startTokenAddress, request.startingToken)) {
|
|
90
|
-
throw new Error('start token address mismatch');
|
|
91
|
-
}
|
|
92
|
-
// const startTokenId = Wormhole.chainAddress(toChain(request.startingChainId), startTokenAddress);
|
|
93
|
-
// const canonicalTokenAddress: string = decoded[0][2];
|
|
94
|
-
// if (!isEqualCaseInsensitive(canonicalTokenAddress, getOriginalAddress("Mainnet", startTokenId))) {
|
|
95
|
-
// throw new Error("canonical token address mismatch");
|
|
96
|
-
// }
|
|
97
|
-
const finalTokenAddress = decoded[0][3];
|
|
98
|
-
if (!isEqualCaseInsensitive(finalTokenAddress, request.destinationToken)) {
|
|
99
|
-
throw new Error('final token address mismatch');
|
|
100
|
-
}
|
|
101
|
-
const recipientAddress = decoded[0][4];
|
|
102
|
-
if (!isEqualCaseInsensitive(recipientAddress, request.destinationAddress)) {
|
|
103
|
-
throw new Error('recipient address mismatch');
|
|
104
|
-
}
|
|
105
|
-
const destinationPorticoAddress = decoded[0][5];
|
|
106
|
-
if (!isEqualCaseInsensitive(destinationPorticoAddress, request.destinationPorticoAddress || '')) {
|
|
107
|
-
throw new Error('destination portico address mismatch');
|
|
108
|
-
}
|
|
109
|
-
const amountSpecified = decoded[0][6];
|
|
110
|
-
if (amountSpecified.toString() !== request.startingTokenAmount) {
|
|
111
|
-
throw new Error('amount mismatch');
|
|
112
|
-
}
|
|
113
|
-
const minAmountStart = decoded[0][7];
|
|
114
|
-
if (minAmountStart.toString() !== request.minAmountStart) {
|
|
115
|
-
throw new Error('min amount start mismatch');
|
|
116
|
-
}
|
|
117
|
-
const minAmountFinish = decoded[0][8];
|
|
118
|
-
if (minAmountFinish.toString() !== request.minAmountEnd) {
|
|
119
|
-
throw new Error('min amount finish mismatch');
|
|
120
|
-
}
|
|
121
|
-
const relayerFee = decoded[0][9];
|
|
122
|
-
if (relayerFee.toString() !== request.relayerFee) {
|
|
123
|
-
throw new Error('relayer fee mismatch');
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
5
|
static async quoteRelayer(chain, from, to) {
|
|
127
6
|
if (isNative(from) || isNative(to))
|
|
128
7
|
throw new Error('how did you get here tho?');
|
package/dist/esm/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kDAAkD,CAAC;AAOrD,MAAM,OAAO,UAAU;IACrB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,KAAY,EACZ,IAAqB,EACrB,EAAmB;QAEnB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,EACxC,KAAK,CACN,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CACrC,EAAE,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,EACtC,KAAK,CACN,CAAC;QAEF,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,mBAAmB,EACnB,OAAO,CACR,CAAC;YACF,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF"}
|
package/dist/esm/bridge.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
|
3
3
|
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
4
4
|
import { EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
|
|
5
5
|
import type { Provider } from 'ethers';
|
|
6
|
-
import { ethers } from 'ethers';
|
|
7
6
|
import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
|
|
7
|
+
import { EvmTokenBridge } from '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
8
8
|
import '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
9
9
|
export declare class EvmPorticoBridge<N extends Network, C extends EvmChains = EvmChains> implements PorticoBridge<N, C> {
|
|
10
10
|
readonly network: N;
|
|
@@ -12,19 +12,24 @@ export declare class EvmPorticoBridge<N extends Network, C extends EvmChains = E
|
|
|
12
12
|
readonly provider: Provider;
|
|
13
13
|
readonly contracts: Contracts;
|
|
14
14
|
chainId: bigint;
|
|
15
|
-
porticoAddress: string;
|
|
16
|
-
uniswapAddress: string;
|
|
17
|
-
porticoContract: ethers.Contract;
|
|
18
|
-
uniswapContract: ethers.Contract;
|
|
19
15
|
core: EvmWormholeCore<N, C>;
|
|
16
|
+
tokenBridge: EvmTokenBridge<N, C>;
|
|
20
17
|
constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
|
|
21
18
|
static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmPorticoBridge<N, EvmChains>>;
|
|
22
|
-
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
19
|
+
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, destinationPorticoAddress: string, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
23
20
|
redeem(sender: AccountAddress<C>, vaa: PorticoBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
24
|
-
|
|
21
|
+
isTransferCompleted(vaa: PorticoBridge.VAA): Promise<boolean>;
|
|
22
|
+
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, tokenGroup: string, amount: bigint): Promise<bigint>;
|
|
25
23
|
quoteRelay(startToken: TokenAddress<C>, endToken: TokenAddress<C>): Promise<bigint>;
|
|
26
|
-
getTransferrableToken(address: string): TokenId
|
|
24
|
+
getTransferrableToken(address: string): Promise<TokenId>;
|
|
25
|
+
supportedTokens(): {
|
|
26
|
+
group: string;
|
|
27
|
+
token: TokenId;
|
|
28
|
+
}[];
|
|
29
|
+
getTokenGroup(address: string): string;
|
|
27
30
|
private approve;
|
|
28
31
|
private createUnsignedTransaction;
|
|
32
|
+
getPorticoAddress(group: string): string;
|
|
33
|
+
private getQuoterAddress;
|
|
29
34
|
}
|
|
30
35
|
//# sourceMappingURL=bridge.d.ts.map
|
package/dist/esm/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAM3D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,0CAA0C,CAAC;AAElD,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,SAAS,GAAG,SAAS,CAC/B,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAS5B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAV/B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGvB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WAelB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAUnC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,yBAAyB,EAAE,MAAM,EACjC,KAAK,EAAE,aAAa,CAAC,KAAK;IAoFrB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG;IAwBzD,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7D,SAAS,CACb,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IA+BZ,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAMjE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9D,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE;IAUtD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;YAOvB,OAAO;IAuBtB,OAAO,CAAC,yBAAyB;IAajC,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAS/B,OAAO,CAAC,gBAAgB;CAQzB"}
|
package/dist/esm/bridge.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { PorticoBridge, Wormhole, canonicalAddress,
|
|
1
|
+
import { PorticoBridge, Wormhole, canonicalAddress, isEqualCaseInsensitive, nativeChainIds, resolveWrappedToken, serialize, toChain, toChainId, } from '@wormhole-foundation/sdk-connect';
|
|
2
2
|
import { EvmAddress, EvmPlatform, EvmUnsignedTransaction, addChainId, addFrom, } from '@wormhole-foundation/sdk-evm';
|
|
3
|
-
import { ethers } from 'ethers';
|
|
3
|
+
import { ethers, keccak256 } from 'ethers';
|
|
4
4
|
import { porticoAbi, uniswapQuoterV2Abi } from './abis.js';
|
|
5
5
|
import { PorticoApi } from './api.js';
|
|
6
|
-
import { FEE_TIER } from './consts.js';
|
|
7
|
-
import { getTokensBySymbol, getTokenByAddress, } from '@wormhole-foundation/sdk-connect/tokens';
|
|
6
|
+
import { FEE_TIER, supportedTokens } from './consts.js';
|
|
8
7
|
import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
|
|
8
|
+
import { EvmTokenBridge } from '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
9
9
|
import '@wormhole-foundation/sdk-evm-tokenbridge';
|
|
10
10
|
export class EvmPorticoBridge {
|
|
11
11
|
network;
|
|
@@ -13,11 +13,8 @@ export class EvmPorticoBridge {
|
|
|
13
13
|
provider;
|
|
14
14
|
contracts;
|
|
15
15
|
chainId;
|
|
16
|
-
porticoAddress;
|
|
17
|
-
uniswapAddress;
|
|
18
|
-
porticoContract;
|
|
19
|
-
uniswapContract;
|
|
20
16
|
core;
|
|
17
|
+
tokenBridge;
|
|
21
18
|
constructor(network, chain, provider, contracts) {
|
|
22
19
|
this.network = network;
|
|
23
20
|
this.chain = chain;
|
|
@@ -26,12 +23,8 @@ export class EvmPorticoBridge {
|
|
|
26
23
|
if (!contracts.portico)
|
|
27
24
|
throw new Error('Unsupported chain, no contract addresses for: ' + chain);
|
|
28
25
|
this.core = new EvmWormholeCore(network, chain, provider, contracts);
|
|
29
|
-
|
|
30
|
-
this.porticoAddress = porticoAddress;
|
|
31
|
-
this.uniswapAddress = uniswapAddress;
|
|
26
|
+
this.tokenBridge = new EvmTokenBridge(network, chain, provider, contracts);
|
|
32
27
|
this.chainId = nativeChainIds.networkChainToNativeChainId.get(network, chain);
|
|
33
|
-
this.porticoContract = new ethers.Contract(this.porticoAddress, porticoAbi.fragments, this.provider);
|
|
34
|
-
this.uniswapContract = new ethers.Contract(this.uniswapAddress, uniswapQuoterV2Abi.fragments, this.provider);
|
|
35
28
|
}
|
|
36
29
|
static async fromRpc(provider, config) {
|
|
37
30
|
const [network, chain] = await EvmPlatform.chainFromRpc(provider);
|
|
@@ -40,7 +33,7 @@ export class EvmPorticoBridge {
|
|
|
40
33
|
throw new Error(`Network mismatch: ${conf.network} != ${network}`);
|
|
41
34
|
return new EvmPorticoBridge(network, chain, provider, conf.contracts);
|
|
42
35
|
}
|
|
43
|
-
async *transfer(sender, receiver, token, amount, destToken, quote) {
|
|
36
|
+
async *transfer(sender, receiver, token, amount, destToken, destinationPorticoAddress, quote) {
|
|
44
37
|
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
45
38
|
if (minAmountStart === 0n)
|
|
46
39
|
throw new Error('Invalid min swap amount');
|
|
@@ -50,10 +43,9 @@ export class EvmPorticoBridge {
|
|
|
50
43
|
const [isStartTokenNative, startToken] = resolveWrappedToken(this.network, this.chain, token);
|
|
51
44
|
const [isFinalTokenNative, finalToken] = resolveWrappedToken(this.network, receiver.chain, destToken);
|
|
52
45
|
const startTokenAddress = canonicalAddress(startToken);
|
|
53
|
-
const cannonTokenAddress = canonicalAddress(this.getTransferrableToken(startTokenAddress));
|
|
46
|
+
const cannonTokenAddress = canonicalAddress(await this.getTransferrableToken(startTokenAddress));
|
|
54
47
|
const receiverAddress = canonicalAddress(receiver);
|
|
55
48
|
const finalTokenAddress = canonicalAddress(finalToken);
|
|
56
|
-
const destinationPorticoAddress = contracts.portico.get(this.network, receiver.chain).portico;
|
|
57
49
|
const nonce = new Date().valueOf() % 2 ** 4;
|
|
58
50
|
const flags = PorticoBridge.serializeFlagSet({
|
|
59
51
|
flags: {
|
|
@@ -80,32 +72,47 @@ export class EvmPorticoBridge {
|
|
|
80
72
|
quote.relayerFee.toString(),
|
|
81
73
|
],
|
|
82
74
|
]);
|
|
75
|
+
const group = this.getTokenGroup(startToken.address.toString());
|
|
76
|
+
const porticoAddress = this.getPorticoAddress(group);
|
|
83
77
|
// Approve the token if necessary
|
|
84
78
|
if (!isStartTokenNative)
|
|
85
|
-
yield* this.approve(startTokenAddress, senderAddress, amount,
|
|
79
|
+
yield* this.approve(startTokenAddress, senderAddress, amount, porticoAddress);
|
|
86
80
|
const messageFee = await this.core.getMessageFee();
|
|
87
81
|
const tx = {
|
|
88
|
-
to:
|
|
82
|
+
to: porticoAddress,
|
|
89
83
|
data: transactionData,
|
|
90
84
|
value: messageFee + (isStartTokenNative ? amount : 0n),
|
|
91
85
|
};
|
|
92
86
|
yield this.createUnsignedTransaction(addFrom(tx, senderAddress), 'PorticoBridge.Transfer');
|
|
93
87
|
}
|
|
94
88
|
async *redeem(sender, vaa) {
|
|
95
|
-
const
|
|
89
|
+
const recipientChain = toChain(vaa.payload.payload.flagSet.recipientChain);
|
|
90
|
+
const tokenAddress = vaa.payload.payload.finalTokenAddress
|
|
91
|
+
.toNative(recipientChain)
|
|
92
|
+
.toString();
|
|
93
|
+
const group = this.getTokenGroup(tokenAddress);
|
|
94
|
+
const porticoAddress = this.getPorticoAddress(group);
|
|
95
|
+
const contract = new ethers.Contract(porticoAddress, porticoAbi.fragments, this.provider);
|
|
96
|
+
const txReq = await contract
|
|
96
97
|
.getFunction('receiveMessageAndSwap')
|
|
97
98
|
.populateTransaction(serialize(vaa));
|
|
98
99
|
const address = new EvmAddress(sender).toString();
|
|
99
100
|
yield this.createUnsignedTransaction(addFrom(txReq, address), 'PorticoBridge.Redeem');
|
|
100
101
|
}
|
|
101
|
-
async
|
|
102
|
+
async isTransferCompleted(vaa) {
|
|
103
|
+
const isCompleted = await this.tokenBridge.tokenBridge.isTransferCompleted(keccak256(vaa.hash));
|
|
104
|
+
return isCompleted;
|
|
105
|
+
}
|
|
106
|
+
async quoteSwap(input, output, tokenGroup, amount) {
|
|
102
107
|
const [, inputTokenId] = resolveWrappedToken(this.network, this.chain, input);
|
|
103
108
|
const [, outputTokenId] = resolveWrappedToken(this.network, this.chain, output);
|
|
104
109
|
const inputAddress = canonicalAddress(inputTokenId);
|
|
105
110
|
const outputAddress = canonicalAddress(outputTokenId);
|
|
106
111
|
if (isEqualCaseInsensitive(inputAddress, outputAddress))
|
|
107
112
|
return amount;
|
|
108
|
-
const
|
|
113
|
+
const quoterAddress = this.getQuoterAddress(tokenGroup);
|
|
114
|
+
const quoter = new ethers.Contract(quoterAddress, uniswapQuoterV2Abi.fragments, this.provider);
|
|
115
|
+
const result = await quoter
|
|
109
116
|
.getFunction('quoteExactInputSingle')
|
|
110
117
|
.staticCall([inputAddress, outputAddress, amount, FEE_TIER, 0]);
|
|
111
118
|
return result[0];
|
|
@@ -113,21 +120,42 @@ export class EvmPorticoBridge {
|
|
|
113
120
|
async quoteRelay(startToken, endToken) {
|
|
114
121
|
return await PorticoApi.quoteRelayer(this.chain, startToken, endToken);
|
|
115
122
|
}
|
|
116
|
-
// For a given token, return the
|
|
117
|
-
//
|
|
118
|
-
getTransferrableToken(address) {
|
|
123
|
+
// For a given token, return the Wormhole-wrapped/highway token
|
|
124
|
+
// that actually gets bridged from this chain
|
|
125
|
+
async getTransferrableToken(address) {
|
|
126
|
+
const token = Wormhole.tokenId(this.chain, address);
|
|
127
|
+
const [, wrappedToken] = resolveWrappedToken(this.network, this.chain, token);
|
|
119
128
|
if (this.chain === 'Ethereum')
|
|
120
|
-
return
|
|
121
|
-
//
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (!
|
|
129
|
-
throw new Error(`
|
|
130
|
-
|
|
129
|
+
return wrappedToken;
|
|
130
|
+
// Find the group that this token belongs to
|
|
131
|
+
const group = Object.values(supportedTokens).find((tokens) => tokens.find((t) => t.chain === this.chain &&
|
|
132
|
+
canonicalAddress(t) === canonicalAddress(wrappedToken)));
|
|
133
|
+
if (!group)
|
|
134
|
+
throw new Error(`No token group found for ${address} on ${this.chain}`);
|
|
135
|
+
// Find the token in this group that originates on Ethereum
|
|
136
|
+
const tokenOnEthereum = group.find((t) => t.chain === 'Ethereum');
|
|
137
|
+
if (!tokenOnEthereum)
|
|
138
|
+
throw new Error(`No Ethereum origin token found for ${address} on ${this.chain}`);
|
|
139
|
+
// Now find the corresponding Wormhole-wrapped/highway token on this chain
|
|
140
|
+
const highwayTokenAddr = await this.tokenBridge.getWrappedAsset(tokenOnEthereum);
|
|
141
|
+
return Wormhole.tokenId(this.chain, highwayTokenAddr.toString());
|
|
142
|
+
}
|
|
143
|
+
supportedTokens() {
|
|
144
|
+
const result = [];
|
|
145
|
+
for (const [group, tokens] of Object.entries(supportedTokens)) {
|
|
146
|
+
for (const token of tokens) {
|
|
147
|
+
if (token.chain === this.chain)
|
|
148
|
+
result.push({ group, token });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
getTokenGroup(address) {
|
|
154
|
+
const tokens = this.supportedTokens();
|
|
155
|
+
const token = tokens.find((t) => canonicalAddress(t.token) === address);
|
|
156
|
+
if (!token)
|
|
157
|
+
throw new Error('Token not found');
|
|
158
|
+
return token.group;
|
|
131
159
|
}
|
|
132
160
|
async *approve(token, senderAddr, amount, contract) {
|
|
133
161
|
const tokenContract = EvmPlatform.getTokenImplementation(this.provider, token);
|
|
@@ -140,5 +168,21 @@ export class EvmPorticoBridge {
|
|
|
140
168
|
createUnsignedTransaction(txReq, description) {
|
|
141
169
|
return new EvmUnsignedTransaction(addChainId(txReq, this.chainId), this.network, this.chain, description, false);
|
|
142
170
|
}
|
|
171
|
+
getPorticoAddress(group) {
|
|
172
|
+
const portico = this.contracts.portico;
|
|
173
|
+
if (group === 'USDT') {
|
|
174
|
+
// Use PancakeSwap if available for USDT
|
|
175
|
+
return portico.porticoPancakeSwap || portico.porticoUniswap;
|
|
176
|
+
}
|
|
177
|
+
return portico.porticoUniswap;
|
|
178
|
+
}
|
|
179
|
+
getQuoterAddress(group) {
|
|
180
|
+
const portico = this.contracts.portico;
|
|
181
|
+
if (group === 'USDT') {
|
|
182
|
+
// Use PancakeSwap if available for USDT
|
|
183
|
+
return portico.pancakeSwapQuoterV2 || portico.uniswapQuoterV2;
|
|
184
|
+
}
|
|
185
|
+
return portico.uniswapQuoterV2;
|
|
186
|
+
}
|
|
143
187
|
}
|
|
144
188
|
//# sourceMappingURL=bridge.js.map
|
package/dist/esm/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,OAAO,EACP,SAAS,GACV,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,OAAO,GACR,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,0CAA0C,CAAC;AAElD,MAAM,OAAO,gBAAgB;IAYhB;IACA;IACA;IACA;IAVX,OAAO,CAAS;IAEhB,IAAI,CAAwB;IAE5B,WAAW,CAAuB;IAElC,YACW,OAAU,EACV,KAAQ,EACR,QAAkB,EAClB,SAAoB;QAHpB,YAAO,GAAP,OAAO,CAAG;QACV,UAAK,GAAL,KAAK,CAAG;QACR,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAW;QAE7B,IAAI,CAAC,SAAS,CAAC,OAAO;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,KAAK,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAC3D,OAAO,EACP,KAAK,CACI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,QAAkB,EAClB,MAAiC;QAEjC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;QAErE,OAAO,IAAI,gBAAgB,CAAC,OAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,CAAC,QAAQ,CACb,MAAyB,EACzB,QAAsB,EACtB,KAAsB,EACtB,MAAc,EACd,SAAkB,EAClB,yBAAiC,EACjC,KAA0B;QAE1B,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9D,IAAI,cAAc,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,IAAI,eAAe,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAExD,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAC1D,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QAEF,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAC1D,IAAI,CAAC,OAAO,EACZ,QAAQ,CAAC,KAAK,EACd,SAAS,CACV,CAAC;QAEF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEvD,MAAM,kBAAkB,GAAG,gBAAgB,CACzC,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CACpD,CAAC;QAEF,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,aAAa,CAAC,gBAAgB,CAAC;YAC3C,KAAK,EAAE;gBACL,gBAAgB,EAAE,kBAAkB;gBACpC,kBAAkB,EAAE,kBAAkB;aACvC;YACD,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,QAAQ;YACtB,aAAa,EAAE,QAAQ;YACvB,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC7D;gBACE,KAAK;gBACL,iBAAiB,CAAC,WAAW,EAAE;gBAC/B,kBAAkB;gBAClB,iBAAiB,CAAC,WAAW,EAAE;gBAC/B,eAAe;gBACf,yBAAyB;gBACzB,MAAM,CAAC,QAAQ,EAAE;gBACjB,cAAc,CAAC,QAAQ,EAAE;gBACzB,eAAe,CAAC,QAAQ,EAAE;gBAC1B,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;aAC5B;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAErD,iCAAiC;QACjC,IAAI,CAAC,kBAAkB;YACrB,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CACjB,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,cAAc,CACf,CAAC;QAEJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEnD,MAAM,EAAE,GAAG;YACT,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,UAAU,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC;QACF,MAAM,IAAI,CAAC,yBAAyB,CAClC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,EAC1B,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,MAAyB,EAAE,GAAsB;QAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB;aACvD,QAAQ,CAAC,cAAc,CAAC;aACxB,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAClC,cAAc,EACd,UAAU,CAAC,SAAS,EACpB,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,QAAQ;aACzB,WAAW,CAAC,uBAAuB,CAAC;aACpC,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAElD,MAAM,IAAI,CAAC,yBAAyB,CAClC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EACvB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAsB;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CACxE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CACpB,CAAC;QACF,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAAsB,EACtB,MAAuB,EACvB,UAAkB,EAClB,MAAc;QAEd,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,mBAAmB,CAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QAEF,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,mBAAmB,CAC3C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,MAAM,CACP,CAAC;QAEF,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAEtD,IAAI,sBAAsB,CAAC,YAAY,EAAE,aAAa,CAAC;YAAE,OAAO,MAAM,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAChC,aAAa,EACb,kBAAkB,CAAC,SAAS,EAC5B,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM;aACxB,WAAW,CAAC,uBAAuB,CAAC;aACpC,UAAU,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAA2B,EAAE,QAAyB;QACrE,OAAO,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,+DAA+D;IAC/D,6CAA6C;IAC7C,KAAK,CAAC,qBAAqB,CAAC,OAAe;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,mBAAmB,CAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,KAAK,CACN,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,YAAY,CAAC;QAEnD,4CAA4C;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3D,MAAM,CAAC,IAAI,CACT,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YACtB,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,YAAY,CAAC,CACzD,CACF,CAAC;QACF,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE1E,2DAA2D;QAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe;YAClB,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,OAAO,IAAI,CAAC,KAAK,EAAE,CACjE,CAAC;QAEJ,0EAA0E;QAC1E,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAE1D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,eAAe;QACb,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,CAAC,OAAO,CACpB,KAAa,EACb,UAAkB,EAClB,MAAc,EACd,QAAgB;QAEhB,MAAM,aAAa,GAAG,WAAW,CAAC,sBAAsB,CACtD,IAAI,CAAC,QAAQ,EACb,KAAK,CACN,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAC3D,QAAQ,EACR,MAAM,CACP,CAAC;YACF,MAAM,IAAI,CAAC,yBAAyB,CAClC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1B,uBAAuB,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,yBAAyB,CAC/B,KAAyB,EACzB,WAAmB;QAEnB,OAAO,IAAI,sBAAsB,CAC/B,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAC/B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,WAAW,EACX,KAAK,CACN,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,wCAAwC;YACxC,OAAO,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;QAC9D,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,wCAAwC;YACxC,OAAO,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC,eAAe,CAAC;IACjC,CAAC;CACF"}
|
package/dist/esm/consts.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export declare const FEE_TIER = 100;
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
2
|
+
export declare const supportedTokens: {
|
|
3
|
+
readonly ETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">];
|
|
4
|
+
readonly WETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Avalanche">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Bsc">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">];
|
|
5
|
+
readonly wstETH: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">];
|
|
6
|
+
readonly USDT: readonly [import("@wormhole-foundation/sdk-connect").TokenId<"Arbitrum">, import("@wormhole-foundation/sdk-connect").TokenId<"Avalanche">, import("@wormhole-foundation/sdk-connect").TokenId<"Base">, import("@wormhole-foundation/sdk-connect").TokenId<"Bsc">, import("@wormhole-foundation/sdk-connect").TokenId<"Ethereum">, import("@wormhole-foundation/sdk-connect").TokenId<"Optimism">, import("@wormhole-foundation/sdk-connect").TokenId<"Polygon">, import("@wormhole-foundation/sdk-connect").TokenId<"Celo">];
|
|
7
|
+
};
|
|
4
8
|
//# sourceMappingURL=consts.d.ts.map
|
package/dist/esm/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,eAAe;;;;;CAiClB,CAAC"}
|
package/dist/esm/consts.js
CHANGED
|
@@ -1,10 +1,37 @@
|
|
|
1
|
+
import { Wormhole } from '@wormhole-foundation/sdk-connect';
|
|
1
2
|
export const FEE_TIER = 100;
|
|
2
|
-
export const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
export const supportedTokens = {
|
|
4
|
+
ETH: [
|
|
5
|
+
Wormhole.tokenId('Arbitrum', 'native'),
|
|
6
|
+
Wormhole.tokenId('Base', 'native'),
|
|
7
|
+
Wormhole.tokenId('Ethereum', 'native'),
|
|
8
|
+
Wormhole.tokenId('Optimism', 'native'),
|
|
9
|
+
],
|
|
10
|
+
WETH: [
|
|
11
|
+
Wormhole.tokenId('Arbitrum', '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),
|
|
12
|
+
Wormhole.tokenId('Avalanche', '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB'),
|
|
13
|
+
Wormhole.tokenId('Base', '0x4200000000000000000000000000000000000006'),
|
|
14
|
+
Wormhole.tokenId('Bsc', '0x2170Ed0880ac9A755fd29B2688956BD959F933F8'),
|
|
15
|
+
Wormhole.tokenId('Ethereum', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
|
|
16
|
+
Wormhole.tokenId('Optimism', '0x4200000000000000000000000000000000000006'),
|
|
17
|
+
Wormhole.tokenId('Polygon', '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619'),
|
|
18
|
+
],
|
|
19
|
+
wstETH: [
|
|
20
|
+
Wormhole.tokenId('Arbitrum', '0x5979D7b546E38E414F7E9822514be443A4800529'),
|
|
21
|
+
Wormhole.tokenId('Base', '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452'),
|
|
22
|
+
Wormhole.tokenId('Ethereum', '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
|
|
23
|
+
Wormhole.tokenId('Optimism', '0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb'),
|
|
24
|
+
Wormhole.tokenId('Polygon', '0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD'),
|
|
25
|
+
],
|
|
26
|
+
USDT: [
|
|
27
|
+
Wormhole.tokenId('Arbitrum', '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),
|
|
28
|
+
Wormhole.tokenId('Avalanche', '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7'),
|
|
29
|
+
Wormhole.tokenId('Base', '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2'),
|
|
30
|
+
Wormhole.tokenId('Bsc', '0x55d398326f99059fF775485246999027B3197955'),
|
|
31
|
+
Wormhole.tokenId('Ethereum', '0xdAC17F958D2ee523a2206206994597C13D831ec7'),
|
|
32
|
+
Wormhole.tokenId('Optimism', '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),
|
|
33
|
+
Wormhole.tokenId('Polygon', '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),
|
|
34
|
+
Wormhole.tokenId('Celo', '0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e'),
|
|
35
|
+
],
|
|
36
|
+
};
|
|
10
37
|
//# sourceMappingURL=consts.js.map
|
package/dist/esm/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE;QACH,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACtC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACtC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;KACvC;IACD,IAAI,EAAE;QACJ,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,4CAA4C,CAAC;QAC3E,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,4CAA4C,CAAC;QACrE,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC1E;IACD,MAAM,EAAE;QACN,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC1E;IACD,IAAI,EAAE;QACJ,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,4CAA4C,CAAC;QAC3E,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;QACtE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,4CAA4C,CAAC;QACrE,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;QACzE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,4CAA4C,CAAC;KACvE;CACO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wormhole-foundation/sdk-evm-portico",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1-beta.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/wormhole-foundation/connect-sdk.git"
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"prettier": "prettier --write ./src"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@wormhole-foundation/sdk-connect": "0.
|
|
56
|
-
"@wormhole-foundation/sdk-evm": "0.
|
|
57
|
-
"@wormhole-foundation/sdk-evm-core": "0.
|
|
58
|
-
"@wormhole-foundation/sdk-evm-tokenbridge": "0.
|
|
55
|
+
"@wormhole-foundation/sdk-connect": "0.11.1-beta.0",
|
|
56
|
+
"@wormhole-foundation/sdk-evm": "0.11.1-beta.0",
|
|
57
|
+
"@wormhole-foundation/sdk-evm-core": "0.11.1-beta.0",
|
|
58
|
+
"@wormhole-foundation/sdk-evm-tokenbridge": "0.11.1-beta.0",
|
|
59
59
|
"ethers": "^6.5.1"
|
|
60
60
|
},
|
|
61
61
|
"type": "module",
|