@wormhole-foundation/sdk-evm-portico 0.10.12-beta.0 → 0.11.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 +35 -1
- package/dist/cjs/api.d.ts.map +1 -1
- package/dist/cjs/api.js +122 -1
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/bridge.d.ts +8 -13
- package/dist/cjs/bridge.d.ts.map +1 -1
- package/dist/cjs/bridge.js +32 -76
- package/dist/cjs/bridge.js.map +1 -1
- package/dist/cjs/consts.d.ts +2 -6
- package/dist/cjs/consts.d.ts.map +1 -1
- package/dist/cjs/consts.js +9 -36
- package/dist/cjs/consts.js.map +1 -1
- package/dist/esm/api.d.ts +35 -1
- package/dist/esm/api.d.ts.map +1 -1
- package/dist/esm/api.js +122 -1
- package/dist/esm/api.js.map +1 -1
- package/dist/esm/bridge.d.ts +8 -13
- package/dist/esm/bridge.d.ts.map +1 -1
- package/dist/esm/bridge.js +35 -79
- package/dist/esm/bridge.js.map +1 -1
- package/dist/esm/consts.d.ts +2 -6
- package/dist/esm/consts.d.ts.map +1 -1
- package/dist/esm/consts.js +8 -35
- package/dist/esm/consts.js.map +1 -1
- package/package.json +5 -5
package/dist/cjs/api.d.ts
CHANGED
|
@@ -1,10 +1,44 @@
|
|
|
1
|
-
import type { Chain, TokenAddress } from '@wormhole-foundation/sdk-connect';
|
|
1
|
+
import type { Chain, ChainAddress, Network, TokenAddress, TokenId } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
3
|
+
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
2
4
|
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
|
+
}
|
|
3
31
|
export interface RelayerQuoteResponse {
|
|
4
32
|
fee: string;
|
|
5
33
|
validUntil: string;
|
|
6
34
|
}
|
|
7
35
|
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;
|
|
8
42
|
static quoteRelayer<C extends Chain>(chain: Chain, from: TokenAddress<C>, to: TokenAddress<C>): Promise<bigint>;
|
|
9
43
|
}
|
|
10
44
|
//# 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,EACV,KAAK,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAK9D,eAAO,MAAM,mBAAmB,qDACoB,CAAC;AACrD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAI1D,MAAM,WAAW,kBAAkB;IAEjC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAE3B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;WAER,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,EAC7D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC;IA6E/B;;;OAGG;IACH,MAAM,CAAC,2BAA2B,aACtB,mBAAmB,WACpB,kBAAkB,KAC1B,IAAI,CAuGL;WAEW,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,11 +3,132 @@ 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.RELAYER_FEE_API_URL = void 0;
|
|
6
|
+
exports.PorticoApi = exports.OKU_TRADE_BASE_URL = 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");
|
|
9
11
|
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';
|
|
10
14
|
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
|
+
};
|
|
11
132
|
static async quoteRelayer(chain, from, to) {
|
|
12
133
|
if ((0, sdk_connect_1.isNative)(from) || (0, sdk_connect_1.isNative)(to))
|
|
13
134
|
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":"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"}
|
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';
|
|
6
7
|
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,24 +12,19 @@ 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;
|
|
15
19
|
core: EvmWormholeCore<N, C>;
|
|
16
|
-
tokenBridge: EvmTokenBridge<N, C>;
|
|
17
20
|
constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
|
|
18
21
|
static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmPorticoBridge<N, EvmChains>>;
|
|
19
|
-
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId,
|
|
22
|
+
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
20
23
|
redeem(sender: AccountAddress<C>, vaa: PorticoBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
21
|
-
|
|
22
|
-
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, tokenGroup: string, amount: bigint): Promise<bigint>;
|
|
24
|
+
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, amount: bigint): Promise<bigint>;
|
|
23
25
|
quoteRelay(startToken: TokenAddress<C>, endToken: TokenAddress<C>): Promise<bigint>;
|
|
24
|
-
getTransferrableToken(address: string):
|
|
25
|
-
supportedTokens(): {
|
|
26
|
-
group: string;
|
|
27
|
-
token: TokenId;
|
|
28
|
-
}[];
|
|
29
|
-
getTokenGroup(address: string): string;
|
|
26
|
+
getTransferrableToken(address: string): TokenId;
|
|
30
27
|
private approve;
|
|
31
28
|
private createUnsignedTransaction;
|
|
32
|
-
getPorticoAddress(group: string): string;
|
|
33
|
-
private getQuoterAddress;
|
|
34
29
|
}
|
|
35
30
|
//# 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;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAShC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,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;IAW5B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAZ/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAEvB,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGjB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WA+BlB,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,KAAK,EAAE,aAAa,CAAC,KAAK;IAqFrB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG;IAazD,SAAS,CACb,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAyBZ,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAMvE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;YAsBhC,OAAO;IAuBtB,OAAO,CAAC,yBAAyB;CAYlC"}
|
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");
|
|
10
11
|
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,8 +16,11 @@ class EvmPorticoBridge {
|
|
|
16
16
|
provider;
|
|
17
17
|
contracts;
|
|
18
18
|
chainId;
|
|
19
|
+
porticoAddress;
|
|
20
|
+
uniswapAddress;
|
|
21
|
+
porticoContract;
|
|
22
|
+
uniswapContract;
|
|
19
23
|
core;
|
|
20
|
-
tokenBridge;
|
|
21
24
|
constructor(network, chain, provider, contracts) {
|
|
22
25
|
this.network = network;
|
|
23
26
|
this.chain = chain;
|
|
@@ -26,8 +29,12 @@ class EvmPorticoBridge {
|
|
|
26
29
|
if (!contracts.portico)
|
|
27
30
|
throw new Error('Unsupported chain, no contract addresses for: ' + chain);
|
|
28
31
|
this.core = new sdk_evm_core_1.EvmWormholeCore(network, chain, provider, contracts);
|
|
29
|
-
|
|
32
|
+
const { portico: porticoAddress, uniswapQuoterV2: uniswapAddress } = contracts.portico;
|
|
33
|
+
this.porticoAddress = porticoAddress;
|
|
34
|
+
this.uniswapAddress = uniswapAddress;
|
|
30
35
|
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);
|
|
31
38
|
}
|
|
32
39
|
static async fromRpc(provider, config) {
|
|
33
40
|
const [network, chain] = await sdk_evm_1.EvmPlatform.chainFromRpc(provider);
|
|
@@ -36,7 +43,7 @@ class EvmPorticoBridge {
|
|
|
36
43
|
throw new Error(`Network mismatch: ${conf.network} != ${network}`);
|
|
37
44
|
return new EvmPorticoBridge(network, chain, provider, conf.contracts);
|
|
38
45
|
}
|
|
39
|
-
async *transfer(sender, receiver, token, amount, destToken,
|
|
46
|
+
async *transfer(sender, receiver, token, amount, destToken, quote) {
|
|
40
47
|
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
41
48
|
if (minAmountStart === 0n)
|
|
42
49
|
throw new Error('Invalid min swap amount');
|
|
@@ -46,9 +53,10 @@ class EvmPorticoBridge {
|
|
|
46
53
|
const [isStartTokenNative, startToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, token);
|
|
47
54
|
const [isFinalTokenNative, finalToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, receiver.chain, destToken);
|
|
48
55
|
const startTokenAddress = (0, sdk_connect_1.canonicalAddress)(startToken);
|
|
49
|
-
const cannonTokenAddress = (0, sdk_connect_1.canonicalAddress)(
|
|
56
|
+
const cannonTokenAddress = (0, sdk_connect_1.canonicalAddress)(this.getTransferrableToken(startTokenAddress));
|
|
50
57
|
const receiverAddress = (0, sdk_connect_1.canonicalAddress)(receiver);
|
|
51
58
|
const finalTokenAddress = (0, sdk_connect_1.canonicalAddress)(finalToken);
|
|
59
|
+
const destinationPorticoAddress = sdk_connect_1.contracts.portico.get(this.network, receiver.chain).portico;
|
|
52
60
|
const nonce = new Date().valueOf() % 2 ** 4;
|
|
53
61
|
const flags = sdk_connect_1.PorticoBridge.serializeFlagSet({
|
|
54
62
|
flags: {
|
|
@@ -75,47 +83,32 @@ class EvmPorticoBridge {
|
|
|
75
83
|
quote.relayerFee.toString(),
|
|
76
84
|
],
|
|
77
85
|
]);
|
|
78
|
-
const group = this.getTokenGroup(startToken.address.toString());
|
|
79
|
-
const porticoAddress = this.getPorticoAddress(group);
|
|
80
86
|
// Approve the token if necessary
|
|
81
87
|
if (!isStartTokenNative)
|
|
82
|
-
yield* this.approve(startTokenAddress, senderAddress, amount, porticoAddress);
|
|
88
|
+
yield* this.approve(startTokenAddress, senderAddress, amount, this.porticoAddress);
|
|
83
89
|
const messageFee = await this.core.getMessageFee();
|
|
84
90
|
const tx = {
|
|
85
|
-
to: porticoAddress,
|
|
91
|
+
to: this.porticoAddress,
|
|
86
92
|
data: transactionData,
|
|
87
93
|
value: messageFee + (isStartTokenNative ? amount : 0n),
|
|
88
94
|
};
|
|
89
95
|
yield this.createUnsignedTransaction((0, sdk_evm_1.addFrom)(tx, senderAddress), 'PorticoBridge.Transfer');
|
|
90
96
|
}
|
|
91
97
|
async *redeem(sender, vaa) {
|
|
92
|
-
const
|
|
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
|
|
98
|
+
const txReq = await this.porticoContract
|
|
100
99
|
.getFunction('receiveMessageAndSwap')
|
|
101
100
|
.populateTransaction((0, sdk_connect_1.serialize)(vaa));
|
|
102
101
|
const address = new sdk_evm_1.EvmAddress(sender).toString();
|
|
103
102
|
yield this.createUnsignedTransaction((0, sdk_evm_1.addFrom)(txReq, address), 'PorticoBridge.Redeem');
|
|
104
103
|
}
|
|
105
|
-
async
|
|
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) {
|
|
104
|
+
async quoteSwap(input, output, amount) {
|
|
110
105
|
const [, inputTokenId] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, input);
|
|
111
106
|
const [, outputTokenId] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, output);
|
|
112
107
|
const inputAddress = (0, sdk_connect_1.canonicalAddress)(inputTokenId);
|
|
113
108
|
const outputAddress = (0, sdk_connect_1.canonicalAddress)(outputTokenId);
|
|
114
109
|
if ((0, sdk_connect_1.isEqualCaseInsensitive)(inputAddress, outputAddress))
|
|
115
110
|
return amount;
|
|
116
|
-
const
|
|
117
|
-
const quoter = new ethers_1.ethers.Contract(quoterAddress, abis_js_1.uniswapQuoterV2Abi.fragments, this.provider);
|
|
118
|
-
const result = await quoter
|
|
111
|
+
const result = await this.uniswapContract
|
|
119
112
|
.getFunction('quoteExactInputSingle')
|
|
120
113
|
.staticCall([inputAddress, outputAddress, amount, consts_js_1.FEE_TIER, 0]);
|
|
121
114
|
return result[0];
|
|
@@ -123,42 +116,21 @@ class EvmPorticoBridge {
|
|
|
123
116
|
async quoteRelay(startToken, endToken) {
|
|
124
117
|
return await api_js_1.PorticoApi.quoteRelayer(this.chain, startToken, endToken);
|
|
125
118
|
}
|
|
126
|
-
// For a given token, return the
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
const token = sdk_connect_1.Wormhole.tokenId(this.chain, address);
|
|
130
|
-
const [, wrappedToken] = (0, sdk_connect_1.resolveWrappedToken)(this.network, this.chain, token);
|
|
119
|
+
// For a given token, return the corresponding
|
|
120
|
+
// Wormhole wrapped token that originated on Ethereum
|
|
121
|
+
getTransferrableToken(address) {
|
|
131
122
|
if (this.chain === 'Ethereum')
|
|
132
|
-
return
|
|
133
|
-
//
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (!
|
|
141
|
-
throw new Error(`
|
|
142
|
-
|
|
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;
|
|
123
|
+
return sdk_connect_1.Wormhole.tokenId('Ethereum', address);
|
|
124
|
+
// get the nativeTokenDetails
|
|
125
|
+
const nToken = (0, tokens_1.getTokenByAddress)(this.network, this.chain, address);
|
|
126
|
+
if (!nToken)
|
|
127
|
+
throw new Error('Unsupported source token: ' + address);
|
|
128
|
+
const xToken = (0, tokens_1.getTokensBySymbol)(this.network, this.chain, nToken.symbol)?.find((orig) => {
|
|
129
|
+
return orig.original === 'Ethereum';
|
|
130
|
+
});
|
|
131
|
+
if (!xToken)
|
|
132
|
+
throw new Error(`Unsupported symbol for chain ${nToken.symbol}: ${this.chain} `);
|
|
133
|
+
return sdk_connect_1.Wormhole.tokenId(xToken.chain, xToken.address);
|
|
162
134
|
}
|
|
163
135
|
async *approve(token, senderAddr, amount, contract) {
|
|
164
136
|
const tokenContract = sdk_evm_1.EvmPlatform.getTokenImplementation(this.provider, token);
|
|
@@ -171,22 +143,6 @@ class EvmPorticoBridge {
|
|
|
171
143
|
createUnsignedTransaction(txReq, description) {
|
|
172
144
|
return new sdk_evm_1.EvmUnsignedTransaction((0, sdk_evm_1.addChainId)(txReq, this.chainId), this.network, this.chain, description, false);
|
|
173
145
|
}
|
|
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
|
-
}
|
|
190
146
|
}
|
|
191
147
|
exports.EvmPorticoBridge = EvmPorticoBridge;
|
|
192
148
|
//# 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":"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"}
|
package/dist/cjs/consts.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
export declare const FEE_TIER = 100;
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
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
|
-
};
|
|
2
|
+
export declare const SWAP_ERROR = "This transaction will not succeed due to price movement.";
|
|
3
|
+
export declare const swapErrors: string[];
|
|
8
4
|
//# 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":"AAAA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,UAAU,6DACqC,CAAC;AAC7D,eAAO,MAAM,UAAU,UAMtB,CAAC"}
|
package/dist/cjs/consts.js
CHANGED
|
@@ -1,40 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
3
|
+
exports.swapErrors = exports.SWAP_ERROR = exports.FEE_TIER = void 0;
|
|
5
4
|
exports.FEE_TIER = 100;
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
};
|
|
5
|
+
exports.SWAP_ERROR = 'This transaction will not succeed due to price movement.';
|
|
6
|
+
exports.swapErrors = [
|
|
7
|
+
'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT',
|
|
8
|
+
'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT',
|
|
9
|
+
'Too little received',
|
|
10
|
+
'Too much requested',
|
|
11
|
+
'STF',
|
|
12
|
+
];
|
|
40
13
|
//# 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,QAAA,QAAQ,GAAG,GAAG,CAAC;AACf,QAAA,UAAU,GACrB,0DAA0D,CAAC;AAChD,QAAA,UAAU,GAAG;IACxB,6CAA6C;IAC7C,yCAAyC;IACzC,qBAAqB;IACrB,oBAAoB;IACpB,KAAK;CACN,CAAC"}
|
package/dist/esm/api.d.ts
CHANGED
|
@@ -1,10 +1,44 @@
|
|
|
1
|
-
import type { Chain, TokenAddress } from '@wormhole-foundation/sdk-connect';
|
|
1
|
+
import type { Chain, ChainAddress, Network, TokenAddress, TokenId } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { PorticoBridge } from '@wormhole-foundation/sdk-connect';
|
|
3
|
+
import type { EvmChains } from '@wormhole-foundation/sdk-evm';
|
|
2
4
|
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
|
+
}
|
|
3
31
|
export interface RelayerQuoteResponse {
|
|
4
32
|
fee: string;
|
|
5
33
|
validUntil: string;
|
|
6
34
|
}
|
|
7
35
|
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;
|
|
8
42
|
static quoteRelayer<C extends Chain>(chain: Chain, from: TokenAddress<C>, to: TokenAddress<C>): Promise<bigint>;
|
|
9
43
|
}
|
|
10
44
|
//# 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,EACV,KAAK,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,aAAa,EASd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAK9D,eAAO,MAAM,mBAAmB,qDACoB,CAAC;AACrD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAI1D,MAAM,WAAW,kBAAkB;IAEjC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAE3B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;WAER,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,EAC7D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC;IA6E/B;;;OAGG;IACH,MAAM,CAAC,2BAA2B,aACtB,mBAAmB,WACpB,kBAAkB,KAC1B,IAAI,CAuGL;WAEW,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,7 +1,128 @@
|
|
|
1
|
-
import { encoding, isNative, toChainId, } from '@wormhole-foundation/sdk-connect';
|
|
1
|
+
import { PorticoBridge, canonicalAddress, contracts, encoding, isEqualCaseInsensitive, isNative, nativeChainIds, resolveWrappedToken, 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';
|
|
3
5
|
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';
|
|
4
8
|
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
|
+
};
|
|
5
126
|
static async quoteRelayer(chain, from, to) {
|
|
6
127
|
if (isNative(from) || isNative(to))
|
|
7
128
|
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":"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"}
|
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';
|
|
6
7
|
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,24 +12,19 @@ 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;
|
|
15
19
|
core: EvmWormholeCore<N, C>;
|
|
16
|
-
tokenBridge: EvmTokenBridge<N, C>;
|
|
17
20
|
constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
|
|
18
21
|
static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmPorticoBridge<N, EvmChains>>;
|
|
19
|
-
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId,
|
|
22
|
+
transfer(sender: AccountAddress<C>, receiver: ChainAddress, token: TokenAddress<C>, amount: bigint, destToken: TokenId, quote: PorticoBridge.Quote): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
20
23
|
redeem(sender: AccountAddress<C>, vaa: PorticoBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>, void, unknown>;
|
|
21
|
-
|
|
22
|
-
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, tokenGroup: string, amount: bigint): Promise<bigint>;
|
|
24
|
+
quoteSwap(input: TokenAddress<C>, output: TokenAddress<C>, amount: bigint): Promise<bigint>;
|
|
23
25
|
quoteRelay(startToken: TokenAddress<C>, endToken: TokenAddress<C>): Promise<bigint>;
|
|
24
|
-
getTransferrableToken(address: string):
|
|
25
|
-
supportedTokens(): {
|
|
26
|
-
group: string;
|
|
27
|
-
token: TokenId;
|
|
28
|
-
}[];
|
|
29
|
-
getTokenGroup(address: string): string;
|
|
26
|
+
getTransferrableToken(address: string): TokenId;
|
|
30
27
|
private approve;
|
|
31
28
|
private createUnsignedTransaction;
|
|
32
|
-
getPorticoAddress(group: string): string;
|
|
33
|
-
private getQuoterAddress;
|
|
34
29
|
}
|
|
35
30
|
//# 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;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAShC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,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;IAW5B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAZ/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAEvB,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGjB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WA+BlB,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,KAAK,EAAE,aAAa,CAAC,KAAK;IAqFrB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG;IAazD,SAAS,CACb,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAyBZ,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAMvE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;YAsBhC,OAAO;IAuBtB,OAAO,CAAC,yBAAyB;CAYlC"}
|
package/dist/esm/bridge.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { PorticoBridge, Wormhole, canonicalAddress, isEqualCaseInsensitive, nativeChainIds, resolveWrappedToken, serialize,
|
|
1
|
+
import { PorticoBridge, Wormhole, canonicalAddress, contracts, isEqualCaseInsensitive, nativeChainIds, resolveWrappedToken, serialize, toChainId, } from '@wormhole-foundation/sdk-connect';
|
|
2
2
|
import { EvmAddress, EvmPlatform, EvmUnsignedTransaction, addChainId, addFrom, } from '@wormhole-foundation/sdk-evm';
|
|
3
|
-
import { ethers
|
|
3
|
+
import { ethers } from 'ethers';
|
|
4
4
|
import { porticoAbi, uniswapQuoterV2Abi } from './abis.js';
|
|
5
5
|
import { PorticoApi } from './api.js';
|
|
6
|
-
import { FEE_TIER
|
|
6
|
+
import { FEE_TIER } from './consts.js';
|
|
7
|
+
import { getTokensBySymbol, getTokenByAddress, } from '@wormhole-foundation/sdk-connect/tokens';
|
|
7
8
|
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,8 +13,11 @@ export class EvmPorticoBridge {
|
|
|
13
13
|
provider;
|
|
14
14
|
contracts;
|
|
15
15
|
chainId;
|
|
16
|
+
porticoAddress;
|
|
17
|
+
uniswapAddress;
|
|
18
|
+
porticoContract;
|
|
19
|
+
uniswapContract;
|
|
16
20
|
core;
|
|
17
|
-
tokenBridge;
|
|
18
21
|
constructor(network, chain, provider, contracts) {
|
|
19
22
|
this.network = network;
|
|
20
23
|
this.chain = chain;
|
|
@@ -23,8 +26,12 @@ export class EvmPorticoBridge {
|
|
|
23
26
|
if (!contracts.portico)
|
|
24
27
|
throw new Error('Unsupported chain, no contract addresses for: ' + chain);
|
|
25
28
|
this.core = new EvmWormholeCore(network, chain, provider, contracts);
|
|
26
|
-
|
|
29
|
+
const { portico: porticoAddress, uniswapQuoterV2: uniswapAddress } = contracts.portico;
|
|
30
|
+
this.porticoAddress = porticoAddress;
|
|
31
|
+
this.uniswapAddress = uniswapAddress;
|
|
27
32
|
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);
|
|
28
35
|
}
|
|
29
36
|
static async fromRpc(provider, config) {
|
|
30
37
|
const [network, chain] = await EvmPlatform.chainFromRpc(provider);
|
|
@@ -33,7 +40,7 @@ export class EvmPorticoBridge {
|
|
|
33
40
|
throw new Error(`Network mismatch: ${conf.network} != ${network}`);
|
|
34
41
|
return new EvmPorticoBridge(network, chain, provider, conf.contracts);
|
|
35
42
|
}
|
|
36
|
-
async *transfer(sender, receiver, token, amount, destToken,
|
|
43
|
+
async *transfer(sender, receiver, token, amount, destToken, quote) {
|
|
37
44
|
const { minAmountStart, minAmountFinish } = quote.swapAmounts;
|
|
38
45
|
if (minAmountStart === 0n)
|
|
39
46
|
throw new Error('Invalid min swap amount');
|
|
@@ -43,9 +50,10 @@ export class EvmPorticoBridge {
|
|
|
43
50
|
const [isStartTokenNative, startToken] = resolveWrappedToken(this.network, this.chain, token);
|
|
44
51
|
const [isFinalTokenNative, finalToken] = resolveWrappedToken(this.network, receiver.chain, destToken);
|
|
45
52
|
const startTokenAddress = canonicalAddress(startToken);
|
|
46
|
-
const cannonTokenAddress = canonicalAddress(
|
|
53
|
+
const cannonTokenAddress = canonicalAddress(this.getTransferrableToken(startTokenAddress));
|
|
47
54
|
const receiverAddress = canonicalAddress(receiver);
|
|
48
55
|
const finalTokenAddress = canonicalAddress(finalToken);
|
|
56
|
+
const destinationPorticoAddress = contracts.portico.get(this.network, receiver.chain).portico;
|
|
49
57
|
const nonce = new Date().valueOf() % 2 ** 4;
|
|
50
58
|
const flags = PorticoBridge.serializeFlagSet({
|
|
51
59
|
flags: {
|
|
@@ -72,47 +80,32 @@ export class EvmPorticoBridge {
|
|
|
72
80
|
quote.relayerFee.toString(),
|
|
73
81
|
],
|
|
74
82
|
]);
|
|
75
|
-
const group = this.getTokenGroup(startToken.address.toString());
|
|
76
|
-
const porticoAddress = this.getPorticoAddress(group);
|
|
77
83
|
// Approve the token if necessary
|
|
78
84
|
if (!isStartTokenNative)
|
|
79
|
-
yield* this.approve(startTokenAddress, senderAddress, amount, porticoAddress);
|
|
85
|
+
yield* this.approve(startTokenAddress, senderAddress, amount, this.porticoAddress);
|
|
80
86
|
const messageFee = await this.core.getMessageFee();
|
|
81
87
|
const tx = {
|
|
82
|
-
to: porticoAddress,
|
|
88
|
+
to: this.porticoAddress,
|
|
83
89
|
data: transactionData,
|
|
84
90
|
value: messageFee + (isStartTokenNative ? amount : 0n),
|
|
85
91
|
};
|
|
86
92
|
yield this.createUnsignedTransaction(addFrom(tx, senderAddress), 'PorticoBridge.Transfer');
|
|
87
93
|
}
|
|
88
94
|
async *redeem(sender, vaa) {
|
|
89
|
-
const
|
|
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
|
|
95
|
+
const txReq = await this.porticoContract
|
|
97
96
|
.getFunction('receiveMessageAndSwap')
|
|
98
97
|
.populateTransaction(serialize(vaa));
|
|
99
98
|
const address = new EvmAddress(sender).toString();
|
|
100
99
|
yield this.createUnsignedTransaction(addFrom(txReq, address), 'PorticoBridge.Redeem');
|
|
101
100
|
}
|
|
102
|
-
async
|
|
103
|
-
const isCompleted = await this.tokenBridge.tokenBridge.isTransferCompleted(keccak256(vaa.hash));
|
|
104
|
-
return isCompleted;
|
|
105
|
-
}
|
|
106
|
-
async quoteSwap(input, output, tokenGroup, amount) {
|
|
101
|
+
async quoteSwap(input, output, amount) {
|
|
107
102
|
const [, inputTokenId] = resolveWrappedToken(this.network, this.chain, input);
|
|
108
103
|
const [, outputTokenId] = resolveWrappedToken(this.network, this.chain, output);
|
|
109
104
|
const inputAddress = canonicalAddress(inputTokenId);
|
|
110
105
|
const outputAddress = canonicalAddress(outputTokenId);
|
|
111
106
|
if (isEqualCaseInsensitive(inputAddress, outputAddress))
|
|
112
107
|
return amount;
|
|
113
|
-
const
|
|
114
|
-
const quoter = new ethers.Contract(quoterAddress, uniswapQuoterV2Abi.fragments, this.provider);
|
|
115
|
-
const result = await quoter
|
|
108
|
+
const result = await this.uniswapContract
|
|
116
109
|
.getFunction('quoteExactInputSingle')
|
|
117
110
|
.staticCall([inputAddress, outputAddress, amount, FEE_TIER, 0]);
|
|
118
111
|
return result[0];
|
|
@@ -120,42 +113,21 @@ export class EvmPorticoBridge {
|
|
|
120
113
|
async quoteRelay(startToken, endToken) {
|
|
121
114
|
return await PorticoApi.quoteRelayer(this.chain, startToken, endToken);
|
|
122
115
|
}
|
|
123
|
-
// For a given token, return the
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
const token = Wormhole.tokenId(this.chain, address);
|
|
127
|
-
const [, wrappedToken] = resolveWrappedToken(this.network, this.chain, token);
|
|
116
|
+
// For a given token, return the corresponding
|
|
117
|
+
// Wormhole wrapped token that originated on Ethereum
|
|
118
|
+
getTransferrableToken(address) {
|
|
128
119
|
if (this.chain === 'Ethereum')
|
|
129
|
-
return
|
|
130
|
-
//
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (!
|
|
138
|
-
throw new Error(`
|
|
139
|
-
|
|
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;
|
|
120
|
+
return Wormhole.tokenId('Ethereum', address);
|
|
121
|
+
// get the nativeTokenDetails
|
|
122
|
+
const nToken = getTokenByAddress(this.network, this.chain, address);
|
|
123
|
+
if (!nToken)
|
|
124
|
+
throw new Error('Unsupported source token: ' + address);
|
|
125
|
+
const xToken = getTokensBySymbol(this.network, this.chain, nToken.symbol)?.find((orig) => {
|
|
126
|
+
return orig.original === 'Ethereum';
|
|
127
|
+
});
|
|
128
|
+
if (!xToken)
|
|
129
|
+
throw new Error(`Unsupported symbol for chain ${nToken.symbol}: ${this.chain} `);
|
|
130
|
+
return Wormhole.tokenId(xToken.chain, xToken.address);
|
|
159
131
|
}
|
|
160
132
|
async *approve(token, senderAddr, amount, contract) {
|
|
161
133
|
const tokenContract = EvmPlatform.getTokenImplementation(this.provider, token);
|
|
@@ -168,21 +140,5 @@ export class EvmPorticoBridge {
|
|
|
168
140
|
createUnsignedTransaction(txReq, description) {
|
|
169
141
|
return new EvmUnsignedTransaction(addChainId(txReq, this.chainId), this.network, this.chain, description, false);
|
|
170
142
|
}
|
|
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
|
-
}
|
|
187
143
|
}
|
|
188
144
|
//# 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,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/consts.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
export declare const FEE_TIER = 100;
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
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
|
-
};
|
|
2
|
+
export declare const SWAP_ERROR = "This transaction will not succeed due to price movement.";
|
|
3
|
+
export declare const swapErrors: string[];
|
|
8
4
|
//# 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":"AAAA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,UAAU,6DACqC,CAAC;AAC7D,eAAO,MAAM,UAAU,UAMtB,CAAC"}
|
package/dist/esm/consts.js
CHANGED
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
import { Wormhole } from '@wormhole-foundation/sdk-connect';
|
|
2
1
|
export const FEE_TIER = 100;
|
|
3
|
-
export const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
};
|
|
2
|
+
export const SWAP_ERROR = 'This transaction will not succeed due to price movement.';
|
|
3
|
+
export const swapErrors = [
|
|
4
|
+
'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT',
|
|
5
|
+
'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT',
|
|
6
|
+
'Too little received',
|
|
7
|
+
'Too much requested',
|
|
8
|
+
'STF',
|
|
9
|
+
];
|
|
37
10
|
//# 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,
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,UAAU,GACrB,0DAA0D,CAAC;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,6CAA6C;IAC7C,yCAAyC;IACzC,qBAAqB;IACrB,oBAAoB;IACpB,KAAK;CACN,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.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.0",
|
|
56
|
+
"@wormhole-foundation/sdk-evm": "0.11.0",
|
|
57
|
+
"@wormhole-foundation/sdk-evm-core": "0.11.0",
|
|
58
|
+
"@wormhole-foundation/sdk-evm-tokenbridge": "0.11.0",
|
|
59
59
|
"ethers": "^6.5.1"
|
|
60
60
|
},
|
|
61
61
|
"type": "module",
|