@wormhole-foundation/sdk-connect 2.4.0 → 3.0.0-tb-exec.beta.1
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/config.d.ts +4 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +3 -0
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/executor-api.d.ts +6 -0
- package/dist/cjs/executor-api.d.ts.map +1 -0
- package/dist/cjs/executor-api.js +49 -0
- package/dist/cjs/executor-api.js.map +1 -0
- package/dist/cjs/protocols/tokenBridge/tokenTransfer.d.ts +43 -18
- package/dist/cjs/protocols/tokenBridge/tokenTransfer.d.ts.map +1 -1
- package/dist/cjs/protocols/tokenBridge/tokenTransfer.js +202 -34
- package/dist/cjs/protocols/tokenBridge/tokenTransfer.js.map +1 -1
- package/dist/cjs/protocols/wormholeTransfer.d.ts +1 -1
- package/dist/cjs/protocols/wormholeTransfer.d.ts.map +1 -1
- package/dist/cjs/routes/tokenBridge/automatic.d.ts.map +1 -1
- package/dist/cjs/routes/tokenBridge/automatic.js +3 -4
- package/dist/cjs/routes/tokenBridge/automatic.js.map +1 -1
- package/dist/cjs/routes/tokenBridge/executor.d.ts +88 -0
- package/dist/cjs/routes/tokenBridge/executor.d.ts.map +1 -0
- package/dist/cjs/routes/tokenBridge/executor.js +199 -0
- package/dist/cjs/routes/tokenBridge/executor.js.map +1 -0
- package/dist/cjs/routes/tokenBridge/index.d.ts +1 -0
- package/dist/cjs/routes/tokenBridge/index.d.ts.map +1 -1
- package/dist/cjs/routes/tokenBridge/index.js +1 -0
- package/dist/cjs/routes/tokenBridge/index.js.map +1 -1
- package/dist/cjs/routes/tokenBridge/manual.d.ts.map +1 -1
- package/dist/cjs/routes/tokenBridge/manual.js +5 -0
- package/dist/cjs/routes/tokenBridge/manual.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +6 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/wormhole.d.ts +30 -5
- package/dist/cjs/wormhole.d.ts.map +1 -1
- package/dist/cjs/wormhole.js +66 -22
- package/dist/cjs/wormhole.js.map +1 -1
- package/dist/esm/config.d.ts +4 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +3 -0
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/executor-api.d.ts +6 -0
- package/dist/esm/executor-api.d.ts.map +1 -0
- package/dist/esm/executor-api.js +40 -0
- package/dist/esm/executor-api.js.map +1 -0
- package/dist/esm/protocols/tokenBridge/tokenTransfer.d.ts +43 -18
- package/dist/esm/protocols/tokenBridge/tokenTransfer.d.ts.map +1 -1
- package/dist/esm/protocols/tokenBridge/tokenTransfer.js +205 -37
- package/dist/esm/protocols/tokenBridge/tokenTransfer.js.map +1 -1
- package/dist/esm/protocols/wormholeTransfer.d.ts +1 -1
- package/dist/esm/protocols/wormholeTransfer.d.ts.map +1 -1
- package/dist/esm/routes/tokenBridge/automatic.d.ts.map +1 -1
- package/dist/esm/routes/tokenBridge/automatic.js +3 -4
- package/dist/esm/routes/tokenBridge/automatic.js.map +1 -1
- package/dist/esm/routes/tokenBridge/executor.d.ts +88 -0
- package/dist/esm/routes/tokenBridge/executor.d.ts.map +1 -0
- package/dist/esm/routes/tokenBridge/executor.js +194 -0
- package/dist/esm/routes/tokenBridge/executor.js.map +1 -0
- package/dist/esm/routes/tokenBridge/index.d.ts +1 -0
- package/dist/esm/routes/tokenBridge/index.d.ts.map +1 -1
- package/dist/esm/routes/tokenBridge/index.js +1 -0
- package/dist/esm/routes/tokenBridge/index.js.map +1 -1
- package/dist/esm/routes/tokenBridge/manual.d.ts.map +1 -1
- package/dist/esm/routes/tokenBridge/manual.js +5 -0
- package/dist/esm/routes/tokenBridge/manual.js.map +1 -1
- package/dist/esm/types.d.ts +6 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +4 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/wormhole.d.ts +30 -5
- package/dist/esm/wormhole.d.ts.map +1 -1
- package/dist/esm/wormhole.js +43 -22
- package/dist/esm/wormhole.js.map +1 -1
- package/package.json +3 -3
package/dist/cjs/config.d.ts
CHANGED
|
@@ -4,22 +4,26 @@ export declare const DEFAULT_TASK_TIMEOUT: number;
|
|
|
4
4
|
export type WormholeConfig<N extends Network = Network, P extends Platform = Platform> = {
|
|
5
5
|
api: string;
|
|
6
6
|
circleAPI: string;
|
|
7
|
+
executorAPI: string;
|
|
7
8
|
chains: ChainsConfig<N, P>;
|
|
8
9
|
};
|
|
9
10
|
export declare const CONFIG: {
|
|
10
11
|
readonly Mainnet: {
|
|
11
12
|
readonly api: "https://api.wormholescan.io";
|
|
12
13
|
readonly circleAPI: "https://iris-api.circle.com/v1/attestations";
|
|
14
|
+
readonly executorAPI: "https://executor.labsapis.com/v0";
|
|
13
15
|
readonly chains: ChainsConfig<"Mainnet", "Evm" | "Solana" | "Cosmwasm" | "Btc" | "Algorand" | "Sui" | "Aptos" | "Near">;
|
|
14
16
|
};
|
|
15
17
|
readonly Testnet: {
|
|
16
18
|
readonly api: "https://api.testnet.wormholescan.io";
|
|
17
19
|
readonly circleAPI: "https://iris-api-sandbox.circle.com/v1/attestations";
|
|
20
|
+
readonly executorAPI: "https://executor-testnet.labsapis.com/v0";
|
|
18
21
|
readonly chains: ChainsConfig<"Testnet", "Evm" | "Solana" | "Cosmwasm" | "Btc" | "Algorand" | "Sui" | "Aptos" | "Near">;
|
|
19
22
|
};
|
|
20
23
|
readonly Devnet: {
|
|
21
24
|
readonly api: "http://guardian:7071";
|
|
22
25
|
readonly circleAPI: "";
|
|
26
|
+
readonly executorAPI: "";
|
|
23
27
|
readonly chains: ChainsConfig<"Devnet", "Evm" | "Solana" | "Cosmwasm" | "Btc" | "Algorand" | "Sui" | "Aptos" | "Near">;
|
|
24
28
|
};
|
|
25
29
|
};
|
package/dist/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGtF,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGtF,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAmBiC,CAAC;AAErD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,EAC1E,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,CAAC,GACV,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAMpB;AAED,KAAK,gBAAgB,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACrC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GACrB,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,GAC/B,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACF,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,OAAO,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,IAAI,gBAAgB,CACzF,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAC;AACF,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,KAAK,IAAI,gBAAgB,CACrF,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAClB,CAAC;AAGF,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,OAAO,EAC5D,OAAO,EAAE,CAAC,EACV,SAAS,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACrC,cAAc,CAIhB;AAGD,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,EACpF,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,CAAC,EACX,SAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,GACtC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAIpB;AAgBD,eAAO,MAAM,eAAe,EAAE,OACgC,CAAC"}
|
package/dist/cjs/config.js
CHANGED
|
@@ -8,16 +8,19 @@ exports.CONFIG = {
|
|
|
8
8
|
Mainnet: {
|
|
9
9
|
api: "https://api.wormholescan.io",
|
|
10
10
|
circleAPI: sdk_base_1.circle.circleAPI("Mainnet"),
|
|
11
|
+
executorAPI: "https://executor.labsapis.com/v0",
|
|
11
12
|
chains: (0, sdk_definitions_1.buildConfig)("Mainnet"),
|
|
12
13
|
},
|
|
13
14
|
Testnet: {
|
|
14
15
|
api: "https://api.testnet.wormholescan.io",
|
|
15
16
|
circleAPI: sdk_base_1.circle.circleAPI("Testnet"),
|
|
17
|
+
executorAPI: "https://executor-testnet.labsapis.com/v0",
|
|
16
18
|
chains: (0, sdk_definitions_1.buildConfig)("Testnet"),
|
|
17
19
|
},
|
|
18
20
|
Devnet: {
|
|
19
21
|
api: "http://guardian:7071", // Tilt Guardian REST api
|
|
20
22
|
circleAPI: "",
|
|
23
|
+
executorAPI: "",
|
|
21
24
|
chains: (0, sdk_definitions_1.buildConfig)("Devnet"),
|
|
22
25
|
},
|
|
23
26
|
};
|
package/dist/cjs/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AACA,4DAAuD;AAEvD,0EAAmE;AAEtD,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,2BAA2B;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AACA,4DAAuD;AAEvD,0EAAmE;AAEtD,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,2BAA2B;AAS7D,QAAA,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,GAAG,EAAE,6BAA6B;QAClC,SAAS,EAAE,iBAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QACtC,WAAW,EAAE,kCAAkC;QAC/C,MAAM,EAAE,IAAA,6BAAW,EAAC,SAAS,CAAC;KAC/B;IACD,OAAO,EAAE;QACP,GAAG,EAAE,qCAAqC;QAC1C,SAAS,EAAE,iBAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QACtC,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,IAAA,6BAAW,EAAC,SAAS,CAAC;KAC/B;IACD,MAAM,EAAE;QACN,GAAG,EAAE,sBAAsB,EAAE,yBAAyB;QACtD,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,IAAA,6BAAW,EAAC,QAAQ,CAAC;KAC9B;CACiD,CAAC;AAErD,SAAgB,sBAAsB,CACpC,OAAU,EACV,QAAW;IAEX,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvD,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAChC,CAAC,CAAC,CACmB,CAAC;AAC1B,CAAC;AATD,wDASC;AAiBD,yCAAyC;AACzC,SAAgB,4BAA4B,CAC1C,OAAU,EACV,SAAsC;IAEtC,IAAI,IAAI,GAAG,cAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAPD,oEAOC;AAED,yCAAyC;AACzC,SAAgB,gCAAgC,CAC9C,OAAU,EACV,QAAW,EACX,SAAuC;IAEvC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AARD,4EAQC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,IAAS,EAAE,SAAc;IACzC,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC;AACjC,QAAA,eAAe,GAC1B,CAAC,MAAM,IAAK,OAAO,CAAC,GAAG,CAAC,SAAS,CAAa,CAAC,IAAI,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Chain } from "@wormhole-foundation/sdk-base";
|
|
2
|
+
import type { CapabilitiesResponse, QuoteResponse, StatusResponse, TxHash } from "@wormhole-foundation/sdk-definitions";
|
|
3
|
+
export declare function fetchCapabilities(apiBaseUrl: string): Promise<CapabilitiesResponse>;
|
|
4
|
+
export declare function fetchQuote(apiBaseUrl: string, srcChain: Chain, dstChain: Chain, relayInstructions: string): Promise<QuoteResponse>;
|
|
5
|
+
export declare function fetchStatus(apiBaseUrl: string, txHash: TxHash, chain: Chain): Promise<StatusResponse[]>;
|
|
6
|
+
//# sourceMappingURL=executor-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor-api.d.ts","sourceRoot":"","sources":["../../src/executor-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,MAAM,EACP,MAAM,sCAAsC,CAAC;AAI9C,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAQzF;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,cAAc,EAAE,CAAC,CAW3B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fetchStatus = exports.fetchQuote = exports.fetchCapabilities = void 0;
|
|
7
|
+
const sdk_base_1 = require("@wormhole-foundation/sdk-base");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
async function fetchCapabilities(apiBaseUrl) {
|
|
10
|
+
const url = `${apiBaseUrl}/capabilities`;
|
|
11
|
+
try {
|
|
12
|
+
const response = await axios_1.default.get(url);
|
|
13
|
+
return response.data;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw new Error("Failed to fetch capabilities.");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.fetchCapabilities = fetchCapabilities;
|
|
20
|
+
async function fetchQuote(apiBaseUrl, srcChain, dstChain, relayInstructions) {
|
|
21
|
+
const url = `${apiBaseUrl}/quote`;
|
|
22
|
+
try {
|
|
23
|
+
const response = await axios_1.default.post(url, {
|
|
24
|
+
srcChain: (0, sdk_base_1.toChainId)(srcChain),
|
|
25
|
+
dstChain: (0, sdk_base_1.toChainId)(dstChain),
|
|
26
|
+
relayInstructions,
|
|
27
|
+
});
|
|
28
|
+
return response.data;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw new Error(`Failed to fetch signed quote.`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.fetchQuote = fetchQuote;
|
|
35
|
+
async function fetchStatus(apiBaseUrl, txHash, chain) {
|
|
36
|
+
const url = `${apiBaseUrl}/status/tx`;
|
|
37
|
+
try {
|
|
38
|
+
const response = await axios_1.default.post(url, {
|
|
39
|
+
txHash,
|
|
40
|
+
chainId: (0, sdk_base_1.toChainId)(chain),
|
|
41
|
+
});
|
|
42
|
+
return response.data;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new Error(`Failed to fetch status for txHash: ${txHash}.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.fetchStatus = fetchStatus;
|
|
49
|
+
//# sourceMappingURL=executor-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor-api.js","sourceRoot":"","sources":["../../src/executor-api.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAsE;AAOtE,kDAA0B;AAGnB,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,GAAG,GAAG,GAAG,UAAU,eAAe,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAuB,GAAG,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AARD,8CAQC;AAEM,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,QAAe,EACf,QAAe,EACf,iBAAyB;IAEzB,MAAM,GAAG,GAAG,GAAG,UAAU,QAAQ,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAgB,GAAG,EAAE;YACpD,QAAQ,EAAE,IAAA,oBAAS,EAAC,QAAQ,CAAC;YAC7B,QAAQ,EAAE,IAAA,oBAAS,EAAC,QAAQ,CAAC;YAC7B,iBAAiB;SAClB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAjBD,gCAiBC;AAEM,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,MAAc,EACd,KAAY;IAEZ,MAAM,GAAG,GAAG,GAAG,UAAU,YAAY,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAmB,GAAG,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,IAAA,oBAAS,EAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAfD,kCAeC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Chain, Network } from "@wormhole-foundation/sdk-base";
|
|
2
|
-
import
|
|
2
|
+
import { amount } from "@wormhole-foundation/sdk-base";
|
|
3
|
+
import type { AttestationId, AutomaticTokenBridge, ChainContext, Signer, TokenId, TokenTransferDetails, TransactionId, TxHash, WormholeMessageId, ExecutorTokenBridge, ChainAddress } from "@wormhole-foundation/sdk-definitions";
|
|
3
4
|
import { TokenBridge } from "@wormhole-foundation/sdk-definitions";
|
|
4
5
|
import type { AttestationReceipt as _AttestationReceipt, TransferQuote, TransferReceipt as _TransferReceipt } from "../../types.js";
|
|
5
6
|
import { TransferState } from "../../types.js";
|
|
@@ -26,22 +27,46 @@ export declare class TokenTransfer<N extends Network = Network> implements Wormh
|
|
|
26
27
|
}
|
|
27
28
|
export declare namespace TokenTransfer {
|
|
28
29
|
/** 8 is maximum precision supported by the token bridge VAA */
|
|
29
|
-
const MAX_DECIMALS = 8;
|
|
30
|
-
type Protocol = "TokenBridge" | "AutomaticTokenBridge";
|
|
31
|
-
type VAA = TokenBridge.TransferVAA | AutomaticTokenBridge.VAA;
|
|
32
|
-
type AttestationReceipt = _AttestationReceipt<TokenTransfer.Protocol>;
|
|
33
|
-
type TransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> = _TransferReceipt<TokenTransfer.AttestationReceipt, SC, DC>;
|
|
34
|
-
function transfer<N extends Network>(fromChain: ChainContext<N, Chain>, transfer: TokenTransferDetails, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
35
|
-
function redeem<N extends Network>(toChain: ChainContext<N, Chain>, vaa: TokenTransfer.VAA, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
36
|
-
function track<N extends Network, SC extends Chain, DC extends Chain>(wh: Wormhole<N>, receipt: TokenTransfer.TransferReceipt<SC, DC>, timeout?: number, fromChain?: ChainContext<N, SC>, toChain?: ChainContext<N, DC>): AsyncGenerator<TokenTransfer.TransferReceipt<SC, DC>>;
|
|
37
|
-
function getReceipt<N extends Network>(xfer: TokenTransfer<N>): TransferReceipt;
|
|
38
|
-
function lookupDestinationToken<N extends Network, SC extends Chain, DC extends Chain>(srcChain: ChainContext<N, SC>, dstChain: ChainContext<N, DC>, token: TokenId<SC>): Promise<TokenId<DC>>;
|
|
39
|
-
function isTransferComplete<N extends Network, C extends Chain>(toChain: ChainContext<N, C>, vaa: TokenTransfer.VAA): Promise<boolean>;
|
|
40
|
-
function getTransferMessage<N extends Network, C extends Chain>(chain: ChainContext<N, C>, txid: TxHash, timeout?: number): Promise<WormholeMessageId>;
|
|
41
|
-
function getTransferVaa<N extends Network>(wh: Wormhole<N>, key: WormholeMessageId | TxHash, timeout?: number): Promise<TokenTransfer.VAA | null>;
|
|
42
|
-
function isTransferEnqueued<N extends Network>(wh: Wormhole<N>, key: WormholeMessageId): Promise<boolean>;
|
|
43
|
-
function validateTransferDetails<N extends Network>(wh: Wormhole<N>, transfer: TokenTransferDetails, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): void;
|
|
44
|
-
|
|
45
|
-
|
|
30
|
+
export const MAX_DECIMALS = 8;
|
|
31
|
+
export type Protocol = "TokenBridge" | "AutomaticTokenBridge" | "ExecutorTokenBridge";
|
|
32
|
+
export type VAA = TokenBridge.TransferVAA | AutomaticTokenBridge.VAA | ExecutorTokenBridge.VAA;
|
|
33
|
+
export type AttestationReceipt = _AttestationReceipt<TokenTransfer.Protocol>;
|
|
34
|
+
export type TransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> = _TransferReceipt<TokenTransfer.AttestationReceipt, SC, DC>;
|
|
35
|
+
export function transfer<N extends Network>(fromChain: ChainContext<N, Chain>, transfer: TokenTransferDetails, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
36
|
+
export function redeem<N extends Network>(toChain: ChainContext<N, Chain>, vaa: TokenTransfer.VAA, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
37
|
+
export function track<N extends Network, SC extends Chain, DC extends Chain>(wh: Wormhole<N>, receipt: TokenTransfer.TransferReceipt<SC, DC>, timeout?: number, fromChain?: ChainContext<N, SC>, toChain?: ChainContext<N, DC>): AsyncGenerator<TokenTransfer.TransferReceipt<SC, DC>>;
|
|
38
|
+
export function getReceipt<N extends Network>(xfer: TokenTransfer<N>): TransferReceipt;
|
|
39
|
+
export function lookupDestinationToken<N extends Network, SC extends Chain, DC extends Chain>(srcChain: ChainContext<N, SC>, dstChain: ChainContext<N, DC>, token: TokenId<SC>): Promise<TokenId<DC>>;
|
|
40
|
+
export function isTransferComplete<N extends Network, C extends Chain>(toChain: ChainContext<N, C>, vaa: TokenTransfer.VAA): Promise<boolean>;
|
|
41
|
+
export function getTransferMessage<N extends Network, C extends Chain>(chain: ChainContext<N, C>, txid: TxHash, timeout?: number): Promise<WormholeMessageId>;
|
|
42
|
+
export function getTransferVaa<N extends Network>(wh: Wormhole<N>, key: WormholeMessageId | TxHash, timeout?: number): Promise<TokenTransfer.VAA | null>;
|
|
43
|
+
export function isTransferEnqueued<N extends Network>(wh: Wormhole<N>, key: WormholeMessageId): Promise<boolean>;
|
|
44
|
+
export function validateTransferDetails<N extends Network>(wh: Wormhole<N>, transfer: TokenTransferDetails, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): void;
|
|
45
|
+
type BaseQuoteDetails = Omit<TokenTransferDetails, "from" | "to">;
|
|
46
|
+
export type QuoteTransferDetails = (BaseQuoteDetails & {
|
|
47
|
+
protocol: TokenBridge.ProtocolName;
|
|
48
|
+
payload?: Uint8Array;
|
|
49
|
+
}) | (BaseQuoteDetails & {
|
|
50
|
+
protocol: AutomaticTokenBridge.ProtocolName;
|
|
51
|
+
nativeGas?: bigint;
|
|
52
|
+
}) | (BaseQuoteDetails & {
|
|
53
|
+
protocol: ExecutorTokenBridge.ProtocolName;
|
|
54
|
+
msgValue: bigint;
|
|
55
|
+
gasLimit: bigint;
|
|
56
|
+
nativeGas?: bigint;
|
|
57
|
+
referrerFee?: {
|
|
58
|
+
feeDbps: bigint;
|
|
59
|
+
referrer: ChainAddress;
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
export function quoteTransfer<N extends Network>(wh: Wormhole<N>, srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: QuoteTransferDetails): Promise<TransferQuote>;
|
|
63
|
+
export function getExecutorGasDropOffLimit<N extends Network>(wh: Wormhole<N>, dstChain: ChainContext<N, Chain>): Promise<bigint>;
|
|
64
|
+
export function getExecutorQuote<N extends Network>(wh: Wormhole<N>, srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, gasLimit: bigint, msgValue: bigint, nativeGas?: bigint): Promise<ExecutorTokenBridge.ExecutorQuote>;
|
|
65
|
+
export function destinationOverrides<N extends Network>(srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: TokenTransferDetails): Promise<TokenTransferDetails>;
|
|
66
|
+
export function calculateReferrerFee(amt: amount.Amount, dBps: bigint): {
|
|
67
|
+
feeAmount: bigint;
|
|
68
|
+
remainingAmount: bigint;
|
|
69
|
+
};
|
|
70
|
+
export {};
|
|
46
71
|
}
|
|
47
72
|
//# sourceMappingURL=tokenTransfer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenTransfer.d.ts","sourceRoot":"","sources":["../../../../src/protocols/tokenBridge/tokenTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenTransfer.d.ts","sourceRoot":"","sources":["../../../../src/protocols/tokenBridge/tokenTransfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ const sdk_base_2 = require("@wormhole-foundation/sdk-base");
|
|
|
9
9
|
const types_js_1 = require("../../types.js");
|
|
10
10
|
const whscan_api_js_1 = require("../../whscan-api.js");
|
|
11
11
|
const wormhole_js_1 = require("../../wormhole.js");
|
|
12
|
+
const sdk_definitions_2 = require("@wormhole-foundation/sdk-definitions");
|
|
13
|
+
const index_js_1 = require("../../index.js");
|
|
12
14
|
class TokenTransfer {
|
|
13
15
|
wh;
|
|
14
16
|
fromChain;
|
|
@@ -39,10 +41,7 @@ class TokenTransfer {
|
|
|
39
41
|
// throws if invalid
|
|
40
42
|
TokenTransfer.validateTransferDetails(wh, from, fromChain, toChain);
|
|
41
43
|
// Apply hackery
|
|
42
|
-
from =
|
|
43
|
-
...from,
|
|
44
|
-
...(await TokenTransfer.destinationOverrides(fromChain, toChain, from)),
|
|
45
|
-
};
|
|
44
|
+
from = await TokenTransfer.destinationOverrides(fromChain, toChain, from);
|
|
46
45
|
return new TokenTransfer(wh, from, fromChain, toChain);
|
|
47
46
|
}
|
|
48
47
|
let tt;
|
|
@@ -65,7 +64,7 @@ class TokenTransfer {
|
|
|
65
64
|
const vaa = await TokenTransfer.getTransferVaa(wh, id, timeout);
|
|
66
65
|
if (!vaa)
|
|
67
66
|
throw new Error("VAA not found");
|
|
68
|
-
const
|
|
67
|
+
const protocol = vaa.protocolName;
|
|
69
68
|
// TODO: the `from.address` here is a lie, but we don't
|
|
70
69
|
// immediately have enough info to get the _correct_ one
|
|
71
70
|
let from = { chain: vaa.emitterChain, address: vaa.emitterAddress };
|
|
@@ -82,9 +81,7 @@ class TokenTransfer {
|
|
|
82
81
|
}
|
|
83
82
|
const decimals = await wh.getDecimals(from.chain, nativeAddress);
|
|
84
83
|
const scaledAmount = sdk_base_1.amount.scale(sdk_base_1.amount.fromBaseUnits(token.amount, Math.min(decimals, TokenTransfer.MAX_DECIMALS)), decimals);
|
|
85
|
-
|
|
86
|
-
if (automatic) {
|
|
87
|
-
nativeGasAmount = vaa.payload.payload.toNativeTokenAmount;
|
|
84
|
+
if (protocol === "AutomaticTokenBridge" || protocol === "ExecutorTokenBridge") {
|
|
88
85
|
from = { chain: vaa.emitterChain, address: vaa.payload.from };
|
|
89
86
|
to = { chain: vaa.payload.to.chain, address: vaa.payload.payload.targetRecipient };
|
|
90
87
|
}
|
|
@@ -93,8 +90,8 @@ class TokenTransfer {
|
|
|
93
90
|
amount: sdk_base_1.amount.units(scaledAmount),
|
|
94
91
|
from,
|
|
95
92
|
to,
|
|
96
|
-
|
|
97
|
-
nativeGas:
|
|
93
|
+
protocol,
|
|
94
|
+
nativeGas: protocol === "AutomaticTokenBridge" ? vaa.payload.payload.toNativeTokenAmount : 0n, // ExecutorTokenBridge: VAA doesn't contain original nativeGas amount from quote
|
|
98
95
|
};
|
|
99
96
|
// TODO: grab at least the init tx from the api
|
|
100
97
|
const tt = new TokenTransfer(wh, details);
|
|
@@ -176,14 +173,31 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
176
173
|
const senderAddress = (0, sdk_definitions_1.toNative)(signer.chain(), signer.address());
|
|
177
174
|
const token = (0, sdk_definitions_1.isTokenId)(transfer.token) ? transfer.token.address : transfer.token;
|
|
178
175
|
let xfer;
|
|
179
|
-
if (transfer.
|
|
176
|
+
if (transfer.protocol === "AutomaticTokenBridge") {
|
|
180
177
|
const tb = await fromChain.getAutomaticTokenBridge();
|
|
181
178
|
xfer = tb.transfer(senderAddress, transfer.to, token, transfer.amount, transfer.nativeGas);
|
|
182
179
|
}
|
|
183
|
-
else {
|
|
180
|
+
else if (transfer.protocol === "TokenBridge") {
|
|
184
181
|
const tb = await fromChain.getTokenBridge();
|
|
185
182
|
xfer = tb.transfer(senderAddress, transfer.to, token, transfer.amount, transfer.payload);
|
|
186
183
|
}
|
|
184
|
+
else if (transfer.protocol === "ExecutorTokenBridge") {
|
|
185
|
+
if (!transfer.executorQuote) {
|
|
186
|
+
throw new Error("ExecutorTokenBridge transfer requires an executorQuote");
|
|
187
|
+
}
|
|
188
|
+
const gasDropOffInstruction = transfer.executorQuote.relayInstructions.requests.find((r) => r.request.type === "GasDropOffInstruction");
|
|
189
|
+
if (gasDropOffInstruction &&
|
|
190
|
+
gasDropOffInstruction.request.type === "GasDropOffInstruction" &&
|
|
191
|
+
gasDropOffInstruction.request.recipient.equals(sdk_definitions_1.UniversalAddress.ZERO)) {
|
|
192
|
+
// @ts-ignore
|
|
193
|
+
gasDropOffInstruction.request.recipient = transfer.to.address.toUniversalAddress();
|
|
194
|
+
}
|
|
195
|
+
const tb = await fromChain.getExecutorTokenBridge();
|
|
196
|
+
xfer = tb.transfer(senderAddress, transfer.to, token, transfer.amount, transfer.executorQuote, transfer.referrerFee);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
throw new Error("Unknown token transfer protocol");
|
|
200
|
+
}
|
|
187
201
|
return (0, common_js_1.signSendWait)(fromChain, xfer, signer);
|
|
188
202
|
}
|
|
189
203
|
TokenTransfer.transfer = transfer;
|
|
@@ -192,7 +206,9 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
192
206
|
const signerAddress = (0, sdk_definitions_1.toNative)(signer.chain(), signer.address());
|
|
193
207
|
const xfer = vaa.protocolName === "AutomaticTokenBridge"
|
|
194
208
|
? (await toChain.getAutomaticTokenBridge()).redeem(signerAddress, vaa)
|
|
195
|
-
:
|
|
209
|
+
: vaa.protocolName === "ExecutorTokenBridge"
|
|
210
|
+
? (await toChain.getExecutorTokenBridge()).redeem(signerAddress, vaa)
|
|
211
|
+
: (await toChain.getTokenBridge()).redeem(signerAddress, vaa);
|
|
196
212
|
return (0, common_js_1.signSendWait)(toChain, xfer, signer);
|
|
197
213
|
}
|
|
198
214
|
TokenTransfer.redeem = redeem;
|
|
@@ -250,8 +266,11 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
250
266
|
// First try to grab the tx status from the API
|
|
251
267
|
// Note: this requires a subsequent async step on the backend
|
|
252
268
|
// to have the dest txid populated, so it may be delayed by some time
|
|
253
|
-
if ((0, types_js_1.isAttested)(receipt) ||
|
|
254
|
-
|
|
269
|
+
if ((0, types_js_1.isAttested)(receipt) ||
|
|
270
|
+
(0, types_js_1.isSourceFinalized)(receipt) ||
|
|
271
|
+
(0, types_js_1.isInReview)(receipt) ||
|
|
272
|
+
(0, types_js_1.isRelayFailed)(receipt)) {
|
|
273
|
+
if (!receipt.attestation?.id)
|
|
255
274
|
throw "Attestation id required to fetch redeem tx";
|
|
256
275
|
const { id } = receipt.attestation;
|
|
257
276
|
const txStatus = await wh.getTransactionStatus(id, leftover(start, timeout));
|
|
@@ -261,14 +280,15 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
261
280
|
...receipt,
|
|
262
281
|
destinationTxs: [{ chain: (0, sdk_base_1.toChain)(chainId), txid: txHash }],
|
|
263
282
|
state: types_js_1.TransferState.DestinationInitiated,
|
|
283
|
+
attestation: receipt.attestation,
|
|
264
284
|
};
|
|
265
285
|
}
|
|
266
286
|
yield receipt;
|
|
267
287
|
}
|
|
268
288
|
// Fall back to asking the destination chain if this VAA has been redeemed
|
|
269
289
|
// Note: We do not get any destinationTxs with this method
|
|
270
|
-
if ((0, types_js_1.isAttested)(receipt) || (0, types_js_1.isRedeemed)(receipt)) {
|
|
271
|
-
if (!receipt.attestation
|
|
290
|
+
if ((0, types_js_1.isAttested)(receipt) || (0, types_js_1.isRedeemed)(receipt) || (0, types_js_1.isRelayFailed)(receipt)) {
|
|
291
|
+
if (!receipt.attestation?.attestation)
|
|
272
292
|
throw "Signed Attestation required to check for redeem";
|
|
273
293
|
if (receipt.attestation.attestation.payloadName === "AttestMeta") {
|
|
274
294
|
throw new Error("Unable to track an AttestMeta receipt");
|
|
@@ -278,10 +298,31 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
278
298
|
receipt = {
|
|
279
299
|
...receipt,
|
|
280
300
|
state: types_js_1.TransferState.DestinationFinalized,
|
|
301
|
+
attestation: receipt.attestation,
|
|
281
302
|
};
|
|
282
303
|
}
|
|
283
304
|
yield receipt;
|
|
284
305
|
}
|
|
306
|
+
// If this is a ExecutorTokenBridge transfer, check if the relay failed
|
|
307
|
+
// If the relay succeeded, then the token bridge will return the transfer as completed
|
|
308
|
+
if ((0, types_js_1.isAttested)(receipt) &&
|
|
309
|
+
receipt.attestation.attestation.protocolName === "ExecutorTokenBridge") {
|
|
310
|
+
const [txStatus] = await wh.getExecutorTxStatus(receipt.originTxs.at(-1).txid, receipt.from);
|
|
311
|
+
if (!txStatus)
|
|
312
|
+
throw new Error("No transaction status found");
|
|
313
|
+
const relayStatus = txStatus.status;
|
|
314
|
+
if (relayStatus === sdk_definitions_2.RelayStatus.Failed ||
|
|
315
|
+
relayStatus === sdk_definitions_2.RelayStatus.Underpaid ||
|
|
316
|
+
relayStatus === sdk_definitions_2.RelayStatus.Unsupported ||
|
|
317
|
+
relayStatus === sdk_definitions_2.RelayStatus.Aborted) {
|
|
318
|
+
receipt = {
|
|
319
|
+
...receipt,
|
|
320
|
+
state: types_js_1.TransferState.Failed,
|
|
321
|
+
error: new index_js_1.routes.RelayFailedError(`Relay failed with status: ${relayStatus}`),
|
|
322
|
+
};
|
|
323
|
+
yield receipt;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
285
326
|
yield receipt;
|
|
286
327
|
}
|
|
287
328
|
TokenTransfer.track = track;
|
|
@@ -387,8 +428,9 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
387
428
|
}
|
|
388
429
|
TokenTransfer.lookupDestinationToken = lookupDestinationToken;
|
|
389
430
|
async function isTransferComplete(toChain, vaa) {
|
|
390
|
-
if (vaa.protocolName === "AutomaticTokenBridge")
|
|
431
|
+
if (vaa.protocolName === "AutomaticTokenBridge" || vaa.protocolName === "ExecutorTokenBridge") {
|
|
391
432
|
vaa = (0, sdk_definitions_1.deserialize)("TokenBridge:TransferWithPayload", (0, sdk_definitions_1.serialize)(vaa));
|
|
433
|
+
}
|
|
392
434
|
const tb = await toChain.getTokenBridge();
|
|
393
435
|
return tb.isTransferCompleted(vaa);
|
|
394
436
|
}
|
|
@@ -414,6 +456,11 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
414
456
|
if (!!relayerAddress && address.equals(relayerAddress)) {
|
|
415
457
|
return (0, sdk_definitions_1.deserialize)("AutomaticTokenBridge:TransferWithRelay", (0, sdk_definitions_1.serialize)(vaa));
|
|
416
458
|
}
|
|
459
|
+
// We aren't checking the to address here since it could be different than what's hard-coded in the sdk
|
|
460
|
+
try {
|
|
461
|
+
return (0, sdk_definitions_1.deserialize)("ExecutorTokenBridge:TransferWithExecutorRelay", (0, sdk_definitions_1.serialize)(vaa));
|
|
462
|
+
}
|
|
463
|
+
catch { }
|
|
417
464
|
}
|
|
418
465
|
return vaa;
|
|
419
466
|
}
|
|
@@ -429,9 +476,7 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
429
476
|
throw new Error("Cannot transfer to the same chain");
|
|
430
477
|
fromChain = fromChain ?? wh.getChain(transfer.from.chain);
|
|
431
478
|
toChain = toChain ?? wh.getChain(transfer.to.chain);
|
|
432
|
-
if (transfer.
|
|
433
|
-
if (transfer.payload)
|
|
434
|
-
throw new Error("Payload with automatic delivery is not supported");
|
|
479
|
+
if (transfer.protocol === "AutomaticTokenBridge") {
|
|
435
480
|
if (!fromChain.supportsAutomaticTokenBridge())
|
|
436
481
|
throw new Error(`Automatic Token Bridge not supported on ${transfer.from.chain}`);
|
|
437
482
|
if (!toChain.supportsAutomaticTokenBridge())
|
|
@@ -440,14 +485,21 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
440
485
|
if (nativeGas > transfer.amount)
|
|
441
486
|
throw new Error(`Native gas amount > amount (${nativeGas} > ${transfer.amount})`);
|
|
442
487
|
}
|
|
443
|
-
else {
|
|
444
|
-
if (transfer.nativeGas)
|
|
445
|
-
throw new Error("Gas Dropoff is only supported for automatic transfers");
|
|
488
|
+
else if (transfer.protocol === "TokenBridge") {
|
|
446
489
|
if (!fromChain.supportsTokenBridge())
|
|
447
490
|
throw new Error(`Token Bridge not supported on ${transfer.from.chain}`);
|
|
448
491
|
if (!toChain.supportsTokenBridge())
|
|
449
492
|
throw new Error(`Token Bridge not supported on ${transfer.to.chain}`);
|
|
450
493
|
}
|
|
494
|
+
else if (transfer.protocol === "ExecutorTokenBridge") {
|
|
495
|
+
if (!fromChain.supportsExecutorTokenBridge())
|
|
496
|
+
throw new Error(`Token Bridge Executor not supported on ${transfer.from.chain}`);
|
|
497
|
+
if (!toChain.supportsExecutorTokenBridge())
|
|
498
|
+
throw new Error(`Token Bridge Executor not supported on ${transfer.to.chain}`);
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
throw new Error("Unknown token transfer protocol");
|
|
502
|
+
}
|
|
451
503
|
}
|
|
452
504
|
TokenTransfer.validateTransferDetails = validateTransferDetails;
|
|
453
505
|
async function quoteTransfer(wh, srcChain, dstChain, transfer) {
|
|
@@ -523,19 +575,61 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
523
575
|
const dstDecimals = await dstChain.getDecimals(dstToken.address);
|
|
524
576
|
const dstAmountReceivable = sdk_base_1.amount.scale(srcAmountTruncated, dstDecimals);
|
|
525
577
|
const eta = sdk_base_1.finality.estimateFinalityTime(srcChain.chain) + sdk_base_1.guardians.guardianAttestationEta;
|
|
526
|
-
|
|
578
|
+
const baseQuote = {
|
|
579
|
+
sourceToken: {
|
|
580
|
+
token: transfer.token,
|
|
581
|
+
amount: sdk_base_1.amount.units(srcAmountTruncated),
|
|
582
|
+
},
|
|
583
|
+
destinationToken: { token: dstToken, amount: sdk_base_1.amount.units(dstAmountReceivable) },
|
|
584
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
585
|
+
eta,
|
|
586
|
+
};
|
|
587
|
+
if (transfer.protocol === "TokenBridge") {
|
|
527
588
|
return {
|
|
528
|
-
|
|
529
|
-
token: transfer.token,
|
|
530
|
-
amount: sdk_base_1.amount.units(srcAmountTruncated),
|
|
531
|
-
},
|
|
532
|
-
destinationToken: { token: dstToken, amount: sdk_base_1.amount.units(dstAmountReceivable) },
|
|
533
|
-
warnings: warnings.length > 0 ? warnings : undefined,
|
|
534
|
-
eta,
|
|
589
|
+
...baseQuote,
|
|
535
590
|
expires: sdk_base_1.time.expiration(24, 0, 0), // manual transfer quote is good for 24 hours
|
|
536
591
|
};
|
|
537
592
|
}
|
|
593
|
+
if (transfer.protocol === "ExecutorTokenBridge") {
|
|
594
|
+
const executorQuote = await getExecutorQuote(wh, srcChain, dstChain, transfer.gasLimit, transfer.msgValue, transfer.nativeGas);
|
|
595
|
+
const gasDropOffInstruction = executorQuote.relayInstructions.requests.find((r) => r.request.type === "GasDropOffInstruction");
|
|
596
|
+
const destinationNativeGas = gasDropOffInstruction?.request.type === "GasDropOffInstruction"
|
|
597
|
+
? gasDropOffInstruction.request.dropOff
|
|
598
|
+
: undefined;
|
|
599
|
+
let referrerFee;
|
|
600
|
+
if (transfer.referrerFee && transfer.referrerFee.feeDbps > 0n) {
|
|
601
|
+
const { feeDbps, referrer } = transfer.referrerFee;
|
|
602
|
+
const { feeAmount, remainingAmount } = TokenTransfer.calculateReferrerFee(srcAmountTruncated, feeDbps);
|
|
603
|
+
if (remainingAmount === 0n) {
|
|
604
|
+
throw new Error("Remaining amount after referrer fee is 0");
|
|
605
|
+
}
|
|
606
|
+
referrerFee = {
|
|
607
|
+
feeDbps,
|
|
608
|
+
feeAmount,
|
|
609
|
+
remainingAmount,
|
|
610
|
+
referrer,
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
return {
|
|
614
|
+
...baseQuote,
|
|
615
|
+
destinationToken: {
|
|
616
|
+
token: dstToken,
|
|
617
|
+
amount: referrerFee?.remainingAmount
|
|
618
|
+
? sdk_base_1.amount.units(sdk_base_1.amount.scale(sdk_base_1.amount.fromBaseUnits(referrerFee.remainingAmount, srcDecimals), dstDecimals))
|
|
619
|
+
: sdk_base_1.amount.units(dstAmountReceivable),
|
|
620
|
+
},
|
|
621
|
+
expires: executorQuote.signedQuote.quote.expiryTime,
|
|
622
|
+
relayFee: { token: (0, sdk_definitions_1.nativeTokenId)(srcChain.chain), amount: executorQuote.estimatedCost },
|
|
623
|
+
destinationNativeGas,
|
|
624
|
+
details: {
|
|
625
|
+
executorQuote,
|
|
626
|
+
referrerFee,
|
|
627
|
+
},
|
|
628
|
+
};
|
|
629
|
+
}
|
|
538
630
|
// Otherwise automatic
|
|
631
|
+
if (transfer.protocol !== "AutomaticTokenBridge")
|
|
632
|
+
throw new Error("Unknown token transfer protocol");
|
|
539
633
|
// The fee is removed from the amount transferred
|
|
540
634
|
// quoted on the source chain
|
|
541
635
|
const stb = await srcChain.getAutomaticTokenBridge();
|
|
@@ -591,13 +685,72 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
591
685
|
};
|
|
592
686
|
}
|
|
593
687
|
TokenTransfer.quoteTransfer = quoteTransfer;
|
|
688
|
+
async function getExecutorGasDropOffLimit(wh, dstChain) {
|
|
689
|
+
const capabilities = await wh.getExecutorCapabilities();
|
|
690
|
+
const dstCapabilities = capabilities[(0, sdk_base_1.toChainId)(dstChain.chain)];
|
|
691
|
+
if (!dstCapabilities) {
|
|
692
|
+
throw new Error(`No executor capabilities found for destination chain ${dstChain.chain}`);
|
|
693
|
+
}
|
|
694
|
+
return BigInt(dstCapabilities.gasDropOffLimit);
|
|
695
|
+
}
|
|
696
|
+
TokenTransfer.getExecutorGasDropOffLimit = getExecutorGasDropOffLimit;
|
|
697
|
+
async function getExecutorQuote(wh, srcChain, dstChain, gasLimit, msgValue, nativeGas) {
|
|
698
|
+
const capabilities = await wh.getExecutorCapabilities();
|
|
699
|
+
const srcCapabilities = capabilities[(0, sdk_base_1.toChainId)(srcChain.chain)];
|
|
700
|
+
if (!srcCapabilities) {
|
|
701
|
+
throw new Error(`No executor capabilities found for source chain ${srcChain.chain}`);
|
|
702
|
+
}
|
|
703
|
+
const dstCapabilities = capabilities[(0, sdk_base_1.toChainId)(dstChain.chain)];
|
|
704
|
+
if (!dstCapabilities || !dstCapabilities.requestPrefixes.includes("ERV1")) {
|
|
705
|
+
throw new Error(`No executor capabilities found for destination chain ${dstChain.chain}`);
|
|
706
|
+
}
|
|
707
|
+
// Validate nativeGas doesn't exceed limit
|
|
708
|
+
const dropOff = nativeGas ?? 0n;
|
|
709
|
+
if (dropOff > BigInt(dstCapabilities.gasDropOffLimit)) {
|
|
710
|
+
throw new Error(`Native gas amount ${dropOff} exceeds limit ${BigInt(dstCapabilities.gasDropOffLimit)} for destination chain ${dstChain.chain}`);
|
|
711
|
+
}
|
|
712
|
+
const instructions = [];
|
|
713
|
+
instructions.push({
|
|
714
|
+
request: {
|
|
715
|
+
type: "GasInstruction",
|
|
716
|
+
gasLimit,
|
|
717
|
+
msgValue,
|
|
718
|
+
},
|
|
719
|
+
});
|
|
720
|
+
if (dropOff > 0n) {
|
|
721
|
+
instructions.push({
|
|
722
|
+
request: {
|
|
723
|
+
type: "GasDropOffInstruction",
|
|
724
|
+
dropOff,
|
|
725
|
+
// Placeholder recipient for gas drop-off. This will be set at transfer time.
|
|
726
|
+
recipient: sdk_definitions_1.UniversalAddress.ZERO,
|
|
727
|
+
},
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
const relayInstructions = {
|
|
731
|
+
requests: instructions,
|
|
732
|
+
};
|
|
733
|
+
const relayInstructionsBytes = (0, sdk_base_1.serializeLayout)(sdk_definitions_1.relayInstructionsLayout, relayInstructions);
|
|
734
|
+
const executorQuote = await wh.getExecutorQuote(srcChain.chain, dstChain.chain, sdk_base_1.encoding.hex.encode(relayInstructionsBytes, true));
|
|
735
|
+
if (!executorQuote.estimatedCost) {
|
|
736
|
+
throw new Error("No estimated cost");
|
|
737
|
+
}
|
|
738
|
+
const estimatedCost = BigInt(executorQuote.estimatedCost);
|
|
739
|
+
const signedQuote = (0, sdk_base_1.deserializeLayout)(sdk_definitions_1.signedQuoteLayout, sdk_base_1.encoding.hex.decode(executorQuote.signedQuote));
|
|
740
|
+
return {
|
|
741
|
+
signedQuote,
|
|
742
|
+
estimatedCost,
|
|
743
|
+
relayInstructions,
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
TokenTransfer.getExecutorQuote = getExecutorQuote;
|
|
594
747
|
async function destinationOverrides(srcChain, dstChain, transfer) {
|
|
595
748
|
const _transfer = { ...transfer };
|
|
596
749
|
// Bit of (temporary) hackery until solana contracts support being
|
|
597
750
|
// sent a VAA with the primary address
|
|
598
751
|
// Note: Do _not_ override if automatic or if the destination token is native
|
|
599
752
|
// gas token
|
|
600
|
-
if ((0, sdk_base_2.chainToPlatform)(transfer.to.chain) === "Solana" &&
|
|
753
|
+
if ((0, sdk_base_2.chainToPlatform)(transfer.to.chain) === "Solana" && _transfer.protocol === "TokenBridge") {
|
|
601
754
|
const destinationToken = await TokenTransfer.lookupDestinationToken(srcChain, dstChain, _transfer.token);
|
|
602
755
|
if ((0, sdk_definitions_1.isNative)(destinationToken.address)) {
|
|
603
756
|
const nativeWrappedTokenId = await dstChain.getNativeWrappedTokenId();
|
|
@@ -607,7 +760,7 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
607
760
|
_transfer.to = await dstChain.getTokenAccount(_transfer.to.address, destinationToken.address);
|
|
608
761
|
}
|
|
609
762
|
}
|
|
610
|
-
if (_transfer.to.chain === "Sei") {
|
|
763
|
+
if (_transfer.to.chain === "Sei" && _transfer.protocol === "TokenBridge") {
|
|
611
764
|
if (_transfer.to.chain === "Sei" && _transfer.payload)
|
|
612
765
|
throw new Error("Arbitrary payloads unsupported for Sei");
|
|
613
766
|
// For sei, we reserve the payload for a token transfer through the sei bridge.
|
|
@@ -624,5 +777,20 @@ exports.TokenTransfer = TokenTransfer;
|
|
|
624
777
|
return _transfer;
|
|
625
778
|
}
|
|
626
779
|
TokenTransfer.destinationOverrides = destinationOverrides;
|
|
780
|
+
function calculateReferrerFee(amt, dBps) {
|
|
781
|
+
const MAX_U16 = 65535n;
|
|
782
|
+
if (dBps > MAX_U16) {
|
|
783
|
+
throw new Error("dBps exceeds max u16");
|
|
784
|
+
}
|
|
785
|
+
const amtUnits = sdk_base_1.amount.units(amt);
|
|
786
|
+
let remainingAmount = amtUnits;
|
|
787
|
+
let feeAmount = 0n;
|
|
788
|
+
if (dBps > 0) {
|
|
789
|
+
feeAmount = (amtUnits * dBps) / 100000n;
|
|
790
|
+
remainingAmount = amtUnits - feeAmount;
|
|
791
|
+
}
|
|
792
|
+
return { feeAmount, remainingAmount };
|
|
793
|
+
}
|
|
794
|
+
TokenTransfer.calculateReferrerFee = calculateReferrerFee;
|
|
627
795
|
})(TokenTransfer || (exports.TokenTransfer = TokenTransfer = {}));
|
|
628
796
|
//# sourceMappingURL=tokenTransfer.js.map
|