@wormhole-labs/cctp-executor-route 0.0.1-beta.10
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/README.md +68 -0
- package/dist/cjs/aptos/executor.d.ts +18 -0
- package/dist/cjs/aptos/executor.d.ts.map +1 -0
- package/dist/cjs/aptos/executor.js +73 -0
- package/dist/cjs/aptos/executor.js.map +1 -0
- package/dist/cjs/aptos/index.d.ts +2 -0
- package/dist/cjs/aptos/index.d.ts.map +1 -0
- package/dist/cjs/aptos/index.js +22 -0
- package/dist/cjs/aptos/index.js.map +1 -0
- package/dist/cjs/consts.d.ts +13 -0
- package/dist/cjs/consts.d.ts.map +1 -0
- package/dist/cjs/consts.js +94 -0
- package/dist/cjs/consts.js.map +1 -0
- package/dist/cjs/evm/executor.d.ts +19 -0
- package/dist/cjs/evm/executor.d.ts.map +1 -0
- package/dist/cjs/evm/executor.js +69 -0
- package/dist/cjs/evm/executor.js.map +1 -0
- package/dist/cjs/evm/index.d.ts +2 -0
- package/dist/cjs/evm/index.d.ts.map +1 -0
- package/dist/cjs/evm/index.js +22 -0
- package/dist/cjs/evm/index.js.map +1 -0
- package/dist/cjs/index.d.ts +96 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +321 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/layouts/conversions.d.ts +5 -0
- package/dist/cjs/layouts/conversions.d.ts.map +1 -0
- package/dist/cjs/layouts/conversions.js +8 -0
- package/dist/cjs/layouts/conversions.js.map +1 -0
- package/dist/cjs/layouts/index.d.ts +4 -0
- package/dist/cjs/layouts/index.d.ts.map +1 -0
- package/dist/cjs/layouts/index.js +20 -0
- package/dist/cjs/layouts/index.js.map +1 -0
- package/dist/cjs/layouts/relayInstruction.d.ts +86 -0
- package/dist/cjs/layouts/relayInstruction.d.ts.map +1 -0
- package/dist/cjs/layouts/relayInstruction.js +32 -0
- package/dist/cjs/layouts/relayInstruction.js.map +1 -0
- package/dist/cjs/layouts/requestForExecution.d.ts +18 -0
- package/dist/cjs/layouts/requestForExecution.d.ts.map +1 -0
- package/dist/cjs/layouts/requestForExecution.js +15 -0
- package/dist/cjs/layouts/requestForExecution.js.map +1 -0
- package/dist/cjs/layouts/signedQuote.d.ts +102 -0
- package/dist/cjs/layouts/signedQuote.d.ts.map +1 -0
- package/dist/cjs/layouts/signedQuote.js +46 -0
- package/dist/cjs/layouts/signedQuote.js.map +1 -0
- package/dist/cjs/sui/executor.d.ts +24 -0
- package/dist/cjs/sui/executor.d.ts.map +1 -0
- package/dist/cjs/sui/executor.js +129 -0
- package/dist/cjs/sui/executor.js.map +1 -0
- package/dist/cjs/sui/index.d.ts +2 -0
- package/dist/cjs/sui/index.d.ts.map +1 -0
- package/dist/cjs/sui/index.js +22 -0
- package/dist/cjs/sui/index.js.map +1 -0
- package/dist/cjs/svm/executor.d.ts +21 -0
- package/dist/cjs/svm/executor.d.ts.map +1 -0
- package/dist/cjs/svm/executor.js +89 -0
- package/dist/cjs/svm/executor.js.map +1 -0
- package/dist/cjs/svm/idl/example_cctp_with_executor.d.ts +72 -0
- package/dist/cjs/svm/idl/example_cctp_with_executor.d.ts.map +1 -0
- package/dist/cjs/svm/idl/example_cctp_with_executor.js +74 -0
- package/dist/cjs/svm/idl/example_cctp_with_executor.js.map +1 -0
- package/dist/cjs/svm/index.d.ts +2 -0
- package/dist/cjs/svm/index.d.ts.map +1 -0
- package/dist/cjs/svm/index.js +22 -0
- package/dist/cjs/svm/index.js.map +1 -0
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.d.ts +64 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +74 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/aptos/executor.d.ts +18 -0
- package/dist/esm/aptos/executor.d.ts.map +1 -0
- package/dist/esm/aptos/executor.js +69 -0
- package/dist/esm/aptos/executor.js.map +1 -0
- package/dist/esm/aptos/index.d.ts +2 -0
- package/dist/esm/aptos/index.d.ts.map +1 -0
- package/dist/esm/aptos/index.js +6 -0
- package/dist/esm/aptos/index.js.map +1 -0
- package/dist/esm/consts.d.ts +13 -0
- package/dist/esm/consts.d.ts.map +1 -0
- package/dist/esm/consts.js +91 -0
- package/dist/esm/consts.js.map +1 -0
- package/dist/esm/evm/executor.d.ts +19 -0
- package/dist/esm/evm/executor.d.ts.map +1 -0
- package/dist/esm/evm/executor.js +65 -0
- package/dist/esm/evm/executor.js.map +1 -0
- package/dist/esm/evm/index.d.ts +2 -0
- package/dist/esm/evm/index.d.ts.map +1 -0
- package/dist/esm/evm/index.js +6 -0
- package/dist/esm/evm/index.js.map +1 -0
- package/dist/esm/index.d.ts +96 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +316 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/layouts/conversions.d.ts +5 -0
- package/dist/esm/layouts/conversions.d.ts.map +1 -0
- package/dist/esm/layouts/conversions.js +5 -0
- package/dist/esm/layouts/conversions.js.map +1 -0
- package/dist/esm/layouts/index.d.ts +4 -0
- package/dist/esm/layouts/index.d.ts.map +1 -0
- package/dist/esm/layouts/index.js +4 -0
- package/dist/esm/layouts/index.js.map +1 -0
- package/dist/esm/layouts/relayInstruction.d.ts +86 -0
- package/dist/esm/layouts/relayInstruction.d.ts.map +1 -0
- package/dist/esm/layouts/relayInstruction.js +29 -0
- package/dist/esm/layouts/relayInstruction.js.map +1 -0
- package/dist/esm/layouts/requestForExecution.d.ts +18 -0
- package/dist/esm/layouts/requestForExecution.d.ts.map +1 -0
- package/dist/esm/layouts/requestForExecution.js +12 -0
- package/dist/esm/layouts/requestForExecution.js.map +1 -0
- package/dist/esm/layouts/signedQuote.d.ts +102 -0
- package/dist/esm/layouts/signedQuote.d.ts.map +1 -0
- package/dist/esm/layouts/signedQuote.js +43 -0
- package/dist/esm/layouts/signedQuote.js.map +1 -0
- package/dist/esm/sui/executor.d.ts +24 -0
- package/dist/esm/sui/executor.d.ts.map +1 -0
- package/dist/esm/sui/executor.js +125 -0
- package/dist/esm/sui/executor.js.map +1 -0
- package/dist/esm/sui/index.d.ts +2 -0
- package/dist/esm/sui/index.d.ts.map +1 -0
- package/dist/esm/sui/index.js +6 -0
- package/dist/esm/sui/index.js.map +1 -0
- package/dist/esm/svm/executor.d.ts +21 -0
- package/dist/esm/svm/executor.d.ts.map +1 -0
- package/dist/esm/svm/executor.js +85 -0
- package/dist/esm/svm/executor.js.map +1 -0
- package/dist/esm/svm/idl/example_cctp_with_executor.d.ts +72 -0
- package/dist/esm/svm/idl/example_cctp_with_executor.d.ts.map +1 -0
- package/dist/esm/svm/idl/example_cctp_with_executor.js +71 -0
- package/dist/esm/svm/idl/example_cctp_with_executor.js.map +1 -0
- package/dist/esm/svm/index.d.ts +2 -0
- package/dist/esm/svm/index.d.ts.map +1 -0
- package/dist/esm/svm/index.js +6 -0
- package/dist/esm/svm/index.js.map +1 -0
- package/dist/esm/types.d.ts +6 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.d.ts +64 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +64 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CCTPW7ExecutorRoute = void 0;
|
|
4
|
+
exports.cctpW7ExecutorRoute = cctpW7ExecutorRoute;
|
|
5
|
+
const sdk_base_1 = require("@wormhole-foundation/sdk-base");
|
|
6
|
+
const sdk_definitions_1 = require("@wormhole-foundation/sdk-definitions");
|
|
7
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
const layouts_1 = require("./layouts");
|
|
10
|
+
const consts_1 = require("./consts");
|
|
11
|
+
const sdk_solana_1 = require("@wormhole-foundation/sdk-solana");
|
|
12
|
+
// IMPORTANT: register the platform specific implementations of the protocol
|
|
13
|
+
require("./aptos/index.js");
|
|
14
|
+
require("./evm/index.js");
|
|
15
|
+
require("./sui/index.js");
|
|
16
|
+
require("./svm/index.js");
|
|
17
|
+
// The minimum rent exemption amount for a 165 byte account (e.g. an ATA)
|
|
18
|
+
// cache it here to avoid fetching it from the Solana RPC
|
|
19
|
+
let ataMinRentAmount = undefined;
|
|
20
|
+
// Use this function to create a new CCTPW7ExecutorRoute with custom config
|
|
21
|
+
function cctpW7ExecutorRoute(config) {
|
|
22
|
+
if (config.referrerFeeDbps < 0 || config.referrerFeeDbps > 65535n) {
|
|
23
|
+
throw new Error("Referrer fee must be between 0 and 65535");
|
|
24
|
+
}
|
|
25
|
+
class CCTPW7ExecutorRouteImpl extends CCTPW7ExecutorRoute {
|
|
26
|
+
static config = config;
|
|
27
|
+
}
|
|
28
|
+
return CCTPW7ExecutorRouteImpl;
|
|
29
|
+
}
|
|
30
|
+
class CCTPW7ExecutorRoute extends sdk_connect_1.routes.AutomaticRoute {
|
|
31
|
+
static NATIVE_GAS_DROPOFF_SUPPORTED = true;
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
// Since we set the config on the static class, access it with this param
|
|
34
|
+
// the CCTPW7ExecutorRoute.config will always be empty
|
|
35
|
+
staticConfig = this.constructor.config;
|
|
36
|
+
static config = { referrerFeeDbps: 0n };
|
|
37
|
+
static meta = {
|
|
38
|
+
name: "CCTPW7ExecutorRoute",
|
|
39
|
+
provider: "W7 Executor",
|
|
40
|
+
};
|
|
41
|
+
static supportedNetworks() {
|
|
42
|
+
return ["Mainnet", "Testnet"];
|
|
43
|
+
}
|
|
44
|
+
static supportedChains(network) {
|
|
45
|
+
if (sdk_base_1.contracts.circleContractChains.has(network)) {
|
|
46
|
+
return sdk_base_1.contracts.circleContractChains.get(network);
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
static async supportedDestinationTokens(sourceToken, fromChain, toChain) {
|
|
51
|
+
// Ensure the source token is USDC
|
|
52
|
+
const sourceChainUsdcContract = sdk_base_1.circle.usdcContract.get(fromChain.network, fromChain.chain);
|
|
53
|
+
if (!(sourceChainUsdcContract &&
|
|
54
|
+
(0, sdk_definitions_1.isSameToken)(sourceToken, sdk_connect_1.Wormhole.tokenId(fromChain.chain, sourceChainUsdcContract)))) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const { network, chain } = toChain;
|
|
58
|
+
if (!sdk_base_1.circle.usdcContract.has(network, chain))
|
|
59
|
+
return [];
|
|
60
|
+
return [
|
|
61
|
+
sdk_connect_1.Wormhole.chainAddress(chain, sdk_base_1.circle.usdcContract.get(network, chain)),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
getDefaultOptions() {
|
|
65
|
+
return {
|
|
66
|
+
nativeGas: 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async validate(request, params) {
|
|
70
|
+
if (params.options?.nativeGas &&
|
|
71
|
+
(params.options.nativeGas < 0 || params.options.nativeGas > 1)) {
|
|
72
|
+
return {
|
|
73
|
+
valid: false,
|
|
74
|
+
error: new Error("Invalid native gas percentage"),
|
|
75
|
+
params,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const validatedParams = {
|
|
79
|
+
normalizedParams: {
|
|
80
|
+
amount: request.parseAmount(params.amount),
|
|
81
|
+
},
|
|
82
|
+
options: params.options ?? this.getDefaultOptions(),
|
|
83
|
+
...params,
|
|
84
|
+
};
|
|
85
|
+
return { valid: true, params: validatedParams };
|
|
86
|
+
}
|
|
87
|
+
async quote(request, params) {
|
|
88
|
+
const { fromChain, toChain } = request;
|
|
89
|
+
const srcUsdcAddress = sdk_base_1.circle.usdcContract.get(fromChain.network, fromChain.chain);
|
|
90
|
+
if (!srcUsdcAddress) {
|
|
91
|
+
throw new Error("Invalid transfer, no USDC contract on source");
|
|
92
|
+
}
|
|
93
|
+
const dstUsdcAddress = sdk_base_1.circle.usdcContract.get(toChain.network, toChain.chain);
|
|
94
|
+
if (!dstUsdcAddress) {
|
|
95
|
+
throw new Error("Invalid transfer, no USDC contract on destination");
|
|
96
|
+
}
|
|
97
|
+
const referrerAddress = consts_1.referrers[fromChain.network]?.[fromChain.chain];
|
|
98
|
+
if (!referrerAddress) {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
error: new Error("No referrer address found"),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const referrer = sdk_connect_1.Wormhole.chainAddress(fromChain.chain, referrerAddress);
|
|
105
|
+
const referrerFeeDbps = this.staticConfig.referrerFeeDbps;
|
|
106
|
+
const { referrerFee, remainingAmount } = (0, utils_1.calculateReferrerFee)(sdk_base_1.amount.units(params.normalizedParams.amount), this.staticConfig.referrerFeeDbps);
|
|
107
|
+
if (remainingAmount <= 0n) {
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
error: new Error("Amount after fee <= 0"),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const gasLimit = consts_1.gasLimits[fromChain.network]?.[toChain.chain];
|
|
114
|
+
if (!gasLimit) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: new Error("Gas limit not found"),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const capabilities = await (0, utils_1.fetchCapabilities)(fromChain.network);
|
|
121
|
+
const srcCapabilities = capabilities[(0, sdk_base_1.toChainId)(fromChain.chain)];
|
|
122
|
+
if (!srcCapabilities) {
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
error: new Error("Unsupported source chain"),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const dstCapabilities = capabilities[(0, sdk_base_1.toChainId)(toChain.chain)];
|
|
129
|
+
if (!dstCapabilities || !dstCapabilities.requestPrefixes.includes("ERC1")) {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: new Error("Unsupported destination chain"),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const { recipient } = request;
|
|
136
|
+
let tokenAccountExists = true;
|
|
137
|
+
// Check if the associated token account (ATA) exists on Solana.
|
|
138
|
+
// If it doesn't, include a gas drop-off instruction so the relayer can create it.
|
|
139
|
+
// Note: There's a potential race condition — the account might exist during this check,
|
|
140
|
+
// but could be closed before the transfer completes.
|
|
141
|
+
if (recipient && toChain.chain === "Solana") {
|
|
142
|
+
const usdcAddress = sdk_connect_1.Wormhole.parseAddress("Solana", dstUsdcAddress);
|
|
143
|
+
const ata = await toChain.getTokenAccount(recipient.address, usdcAddress);
|
|
144
|
+
const connection = await toChain.getRpc();
|
|
145
|
+
const ataAccount = await connection.getAccountInfo(new sdk_solana_1.SolanaAddress(ata.address).unwrap());
|
|
146
|
+
tokenAccountExists = ataAccount !== null;
|
|
147
|
+
if (!tokenAccountExists && !ataMinRentAmount) {
|
|
148
|
+
ataMinRentAmount = BigInt(await connection.getMinimumBalanceForRentExemption(165));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
let msgValue = 0n;
|
|
152
|
+
if (toChain.chain === "Solana") {
|
|
153
|
+
msgValue += consts_1.SOLANA_MSG_VALUE_BASE_FEE;
|
|
154
|
+
if (!tokenAccountExists && ataMinRentAmount) {
|
|
155
|
+
msgValue += ataMinRentAmount;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const relayRequests = [];
|
|
159
|
+
// Add the gas instruction
|
|
160
|
+
relayRequests.push({
|
|
161
|
+
request: {
|
|
162
|
+
type: "GasInstruction",
|
|
163
|
+
gasLimit,
|
|
164
|
+
msgValue,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
// Calculate the gas dropOff value
|
|
168
|
+
const gasDropOffLimit = BigInt(dstCapabilities.gasDropOffLimit);
|
|
169
|
+
const dropOff = params.options.nativeGas && gasDropOffLimit > 0n
|
|
170
|
+
? (BigInt(Math.round(params.options.nativeGas * 100)) *
|
|
171
|
+
gasDropOffLimit) /
|
|
172
|
+
100n
|
|
173
|
+
: 0n;
|
|
174
|
+
// Add the gas drop-off instruction if applicable
|
|
175
|
+
if (dropOff > 0n || !tokenAccountExists) {
|
|
176
|
+
relayRequests.push({
|
|
177
|
+
request: {
|
|
178
|
+
type: "GasDropOffInstruction",
|
|
179
|
+
dropOff,
|
|
180
|
+
// If the recipient is undefined (e.g. the user hasn’t connected their wallet yet),
|
|
181
|
+
// we temporarily use a dummy address to fetch a quote.
|
|
182
|
+
// The recipient address is validated later in the `initiate` method, which will throw if it's still missing.
|
|
183
|
+
recipient: recipient
|
|
184
|
+
? recipient.address.toUniversalAddress()
|
|
185
|
+
: new sdk_definitions_1.UniversalAddress(new Uint8Array(32)),
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
const relayInstructions = (0, sdk_base_1.serializeLayout)(layouts_1.relayInstructionsLayout, {
|
|
190
|
+
requests: relayRequests,
|
|
191
|
+
});
|
|
192
|
+
const quote = await (0, utils_1.fetchSignedQuote)(fromChain.network, fromChain.chain, toChain.chain, sdk_base_1.encoding.hex.encode(relayInstructions, true));
|
|
193
|
+
if (!quote.estimatedCost) {
|
|
194
|
+
return {
|
|
195
|
+
success: false,
|
|
196
|
+
error: new Error("No estimated cost"),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const signedQuoteBytes = sdk_base_1.encoding.hex.decode(quote.signedQuote);
|
|
200
|
+
const signedQuote = (0, sdk_base_1.deserializeLayout)(layouts_1.signedQuoteLayout, signedQuoteBytes);
|
|
201
|
+
// https://developers.circle.com/stablecoins/docs/required-block-confirmations
|
|
202
|
+
const eta = fromChain.chain === "Polygon"
|
|
203
|
+
? 2_000 * 200
|
|
204
|
+
: sdk_base_1.finality.estimateFinalityTime(fromChain.chain) + 1_000; // buffer for the relayer
|
|
205
|
+
const estimatedCost = BigInt(quote.estimatedCost);
|
|
206
|
+
const details = {
|
|
207
|
+
signedQuote: signedQuoteBytes,
|
|
208
|
+
relayInstructions: relayInstructions,
|
|
209
|
+
estimatedCost,
|
|
210
|
+
referrer,
|
|
211
|
+
referrerFee,
|
|
212
|
+
remainingAmount,
|
|
213
|
+
referrerFeeDbps,
|
|
214
|
+
};
|
|
215
|
+
const [srcNativeDecimals, dstNativeDecimals] = await Promise.all([
|
|
216
|
+
fromChain.getDecimals("native"),
|
|
217
|
+
toChain.getDecimals("native"),
|
|
218
|
+
]);
|
|
219
|
+
return {
|
|
220
|
+
success: true,
|
|
221
|
+
params,
|
|
222
|
+
sourceToken: {
|
|
223
|
+
token: request.source.id,
|
|
224
|
+
amount: params.normalizedParams.amount,
|
|
225
|
+
},
|
|
226
|
+
destinationToken: {
|
|
227
|
+
token: request.destination.id,
|
|
228
|
+
amount: sdk_base_1.amount.fromBaseUnits(remainingAmount, request.destination.decimals),
|
|
229
|
+
},
|
|
230
|
+
relayFee: {
|
|
231
|
+
token: (0, sdk_definitions_1.nativeTokenId)(fromChain.chain),
|
|
232
|
+
amount: sdk_base_1.amount.fromBaseUnits(estimatedCost, srcNativeDecimals),
|
|
233
|
+
},
|
|
234
|
+
destinationNativeGas: sdk_base_1.amount.fromBaseUnits(dropOff, dstNativeDecimals),
|
|
235
|
+
eta,
|
|
236
|
+
expires: signedQuote.quote.expiryTime,
|
|
237
|
+
details,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
async initiate(request, signer, quote, to) {
|
|
241
|
+
if (!quote.details) {
|
|
242
|
+
throw new Error("Missing quote details");
|
|
243
|
+
}
|
|
244
|
+
const relayInstructions = (0, sdk_base_1.deserializeLayout)(layouts_1.relayInstructionsLayout, quote.details.relayInstructions);
|
|
245
|
+
// Make sure that the gas drop-off recipient matches the actual recipient
|
|
246
|
+
relayInstructions.requests.forEach(({ request }) => {
|
|
247
|
+
if (request.type === "GasDropOffInstruction" &&
|
|
248
|
+
!request.recipient.equals(to.address.toUniversalAddress())) {
|
|
249
|
+
throw new Error("Gas drop-off recipient does not match");
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
const executor = await request.fromChain.getProtocol("CCTPW7Executor");
|
|
253
|
+
const sender = sdk_connect_1.Wormhole.parseAddress(signer.chain(), signer.address());
|
|
254
|
+
// When transferring to Solana, the recipient address is the ATA for CCTP transfers
|
|
255
|
+
let cctpRecipient = to;
|
|
256
|
+
if (to.chain === "Solana") {
|
|
257
|
+
const usdcAddress = sdk_connect_1.Wormhole.parseAddress("Solana", sdk_base_1.circle.usdcContract.get(request.toChain.network, request.toChain.chain));
|
|
258
|
+
cctpRecipient = await request.toChain.getTokenAccount(to.address, usdcAddress);
|
|
259
|
+
}
|
|
260
|
+
const xfer = await executor.transfer(sender, cctpRecipient, quote.details);
|
|
261
|
+
const txids = await (0, sdk_connect_1.signSendWait)(request.fromChain, xfer, signer);
|
|
262
|
+
return {
|
|
263
|
+
from: request.fromChain.chain,
|
|
264
|
+
to: request.toChain.chain,
|
|
265
|
+
state: sdk_connect_1.TransferState.SourceInitiated,
|
|
266
|
+
originTxs: txids,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
async *track(receipt, timeout) {
|
|
270
|
+
if ((0, sdk_connect_1.isCompleted)(receipt) || (0, sdk_connect_1.isFailed)(receipt))
|
|
271
|
+
return receipt;
|
|
272
|
+
let leftover = timeout ? timeout : 60 * 60 * 1000;
|
|
273
|
+
while (leftover > 0) {
|
|
274
|
+
const start = Date.now();
|
|
275
|
+
if ((0, sdk_connect_1.isSourceInitiated)(receipt) ||
|
|
276
|
+
(0, sdk_connect_1.isSourceFinalized)(receipt) ||
|
|
277
|
+
(0, sdk_connect_1.isAttested)(receipt)) {
|
|
278
|
+
try {
|
|
279
|
+
const [txStatus] = await (0, utils_1.fetchStatus)(this.wh.network, receipt.originTxs.at(-1).txid, receipt.from);
|
|
280
|
+
if (!txStatus) {
|
|
281
|
+
throw new Error("No transaction status found");
|
|
282
|
+
}
|
|
283
|
+
const relayStatus = txStatus?.status;
|
|
284
|
+
if (relayStatus === utils_1.RelayStatus.Failed || // this could happen if simulation fails
|
|
285
|
+
relayStatus === utils_1.RelayStatus.Underpaid || // only happens if you don't pay at least the costEstimate
|
|
286
|
+
relayStatus === utils_1.RelayStatus.Unsupported || // capabilities check didn't pass
|
|
287
|
+
relayStatus === utils_1.RelayStatus.Aborted // An unrecoverable error indicating the attempt should stop (bad data, pre-flight checks failed, or chain-specific conditions)
|
|
288
|
+
) {
|
|
289
|
+
receipt = {
|
|
290
|
+
...receipt,
|
|
291
|
+
state: sdk_connect_1.TransferState.Failed,
|
|
292
|
+
error: new sdk_connect_1.routes.RelayFailedError(`Relay failed with status: ${relayStatus}`),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
if (relayStatus === utils_1.RelayStatus.Submitted) {
|
|
296
|
+
receipt = {
|
|
297
|
+
...receipt,
|
|
298
|
+
state: sdk_connect_1.TransferState.DestinationFinalized,
|
|
299
|
+
attestation: { id: txStatus.id, attestation: {} },
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// Important to yield before checking for completion
|
|
303
|
+
// so the caller can update the receipt state
|
|
304
|
+
yield receipt;
|
|
305
|
+
if ((0, sdk_connect_1.isCompleted)(receipt) || (0, sdk_connect_1.isFailed)(receipt)) {
|
|
306
|
+
return receipt;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
console.error(`Error fetching transaction status: ${error.message || error}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Sleep so we don't spam the endpoint
|
|
314
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
315
|
+
leftover -= Date.now() - start;
|
|
316
|
+
}
|
|
317
|
+
return receipt;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
exports.CCTPW7ExecutorRoute = CCTPW7ExecutorRoute;
|
|
321
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../../src/layouts/conversions.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;2BACX,MAAM;6BACJ,IAAI;CAC6B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dateConversion = void 0;
|
|
4
|
+
exports.dateConversion = {
|
|
5
|
+
to: (encoded) => new Date(Number(encoded * 1000n)),
|
|
6
|
+
from: (decoded) => BigInt(decoded.getTime()) / 1000n,
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=conversions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversions.js","sourceRoot":"","sources":["../../../src/layouts/conversions.ts"],"names":[],"mappings":";;;AAEa,QAAA,cAAc,GAAG;IAC5B,EAAE,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAa,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;CACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./relayInstruction.js"), exports);
|
|
18
|
+
__exportStar(require("./requestForExecution.js"), exports);
|
|
19
|
+
__exportStar(require("./signedQuote.js"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layouts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,2DAAyC;AACzC,mDAAiC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { DeriveType } from "binary-layout";
|
|
2
|
+
export declare const gasInstructionLayout: readonly [{
|
|
3
|
+
readonly name: "gasLimit";
|
|
4
|
+
readonly binary: "uint";
|
|
5
|
+
readonly size: 16;
|
|
6
|
+
}, {
|
|
7
|
+
readonly name: "msgValue";
|
|
8
|
+
readonly binary: "uint";
|
|
9
|
+
readonly size: 16;
|
|
10
|
+
}];
|
|
11
|
+
export type GasInstruction = DeriveType<typeof gasInstructionLayout>;
|
|
12
|
+
export declare const gasDropOffInstructionLayout: readonly [{
|
|
13
|
+
readonly name: "dropOff";
|
|
14
|
+
readonly binary: "uint";
|
|
15
|
+
readonly size: 16;
|
|
16
|
+
}, {
|
|
17
|
+
readonly binary: "bytes";
|
|
18
|
+
readonly size: 32;
|
|
19
|
+
readonly custom: {
|
|
20
|
+
to: (val: Uint8Array) => import("@wormhole-foundation/sdk-connect").UniversalAddress;
|
|
21
|
+
from: (val: import("@wormhole-foundation/sdk-connect").UniversalAddress) => Uint8Array;
|
|
22
|
+
};
|
|
23
|
+
readonly name: "recipient";
|
|
24
|
+
}];
|
|
25
|
+
export type GasDropOffInstruction = DeriveType<typeof gasDropOffInstructionLayout>;
|
|
26
|
+
export declare const relayInstructionLayout: readonly [{
|
|
27
|
+
readonly name: "request";
|
|
28
|
+
readonly binary: "switch";
|
|
29
|
+
readonly idSize: 1;
|
|
30
|
+
readonly idTag: "type";
|
|
31
|
+
readonly layouts: readonly [readonly [readonly [1, "GasInstruction"], readonly [{
|
|
32
|
+
readonly name: "gasLimit";
|
|
33
|
+
readonly binary: "uint";
|
|
34
|
+
readonly size: 16;
|
|
35
|
+
}, {
|
|
36
|
+
readonly name: "msgValue";
|
|
37
|
+
readonly binary: "uint";
|
|
38
|
+
readonly size: 16;
|
|
39
|
+
}]], readonly [readonly [2, "GasDropOffInstruction"], readonly [{
|
|
40
|
+
readonly name: "dropOff";
|
|
41
|
+
readonly binary: "uint";
|
|
42
|
+
readonly size: 16;
|
|
43
|
+
}, {
|
|
44
|
+
readonly binary: "bytes";
|
|
45
|
+
readonly size: 32;
|
|
46
|
+
readonly custom: {
|
|
47
|
+
to: (val: Uint8Array) => import("@wormhole-foundation/sdk-connect").UniversalAddress;
|
|
48
|
+
from: (val: import("@wormhole-foundation/sdk-connect").UniversalAddress) => Uint8Array;
|
|
49
|
+
};
|
|
50
|
+
readonly name: "recipient";
|
|
51
|
+
}]]];
|
|
52
|
+
}];
|
|
53
|
+
export type RelayInstruction = DeriveType<typeof relayInstructionLayout>;
|
|
54
|
+
export declare const relayInstructionsLayout: readonly [{
|
|
55
|
+
readonly name: "requests";
|
|
56
|
+
readonly binary: "array";
|
|
57
|
+
readonly layout: readonly [{
|
|
58
|
+
readonly name: "request";
|
|
59
|
+
readonly binary: "switch";
|
|
60
|
+
readonly idSize: 1;
|
|
61
|
+
readonly idTag: "type";
|
|
62
|
+
readonly layouts: readonly [readonly [readonly [1, "GasInstruction"], readonly [{
|
|
63
|
+
readonly name: "gasLimit";
|
|
64
|
+
readonly binary: "uint";
|
|
65
|
+
readonly size: 16;
|
|
66
|
+
}, {
|
|
67
|
+
readonly name: "msgValue";
|
|
68
|
+
readonly binary: "uint";
|
|
69
|
+
readonly size: 16;
|
|
70
|
+
}]], readonly [readonly [2, "GasDropOffInstruction"], readonly [{
|
|
71
|
+
readonly name: "dropOff";
|
|
72
|
+
readonly binary: "uint";
|
|
73
|
+
readonly size: 16;
|
|
74
|
+
}, {
|
|
75
|
+
readonly binary: "bytes";
|
|
76
|
+
readonly size: 32;
|
|
77
|
+
readonly custom: {
|
|
78
|
+
to: (val: Uint8Array) => import("@wormhole-foundation/sdk-connect").UniversalAddress;
|
|
79
|
+
from: (val: import("@wormhole-foundation/sdk-connect").UniversalAddress) => Uint8Array;
|
|
80
|
+
};
|
|
81
|
+
readonly name: "recipient";
|
|
82
|
+
}]]];
|
|
83
|
+
}];
|
|
84
|
+
}];
|
|
85
|
+
export type RelayInstructions = DeriveType<typeof relayInstructionsLayout>;
|
|
86
|
+
//# sourceMappingURL=relayInstruction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayInstruction.d.ts","sourceRoot":"","sources":["../../../src/layouts/relayInstruction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAU,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,oBAAoB;;;;;;;;EAGN,CAAC;AAE5B,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAErE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EAGb,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAC5C,OAAO,2BAA2B,CACnC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;EAWR,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEzE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMT,CAAC;AAE5B,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.relayInstructionsLayout = exports.relayInstructionLayout = exports.gasDropOffInstructionLayout = exports.gasInstructionLayout = void 0;
|
|
4
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
5
|
+
exports.gasInstructionLayout = [
|
|
6
|
+
{ name: "gasLimit", binary: "uint", size: 16 },
|
|
7
|
+
{ name: "msgValue", binary: "uint", size: 16 },
|
|
8
|
+
];
|
|
9
|
+
exports.gasDropOffInstructionLayout = [
|
|
10
|
+
{ name: "dropOff", binary: "uint", size: 16 },
|
|
11
|
+
{ name: "recipient", ...sdk_connect_1.layoutItems.universalAddressItem },
|
|
12
|
+
];
|
|
13
|
+
exports.relayInstructionLayout = [
|
|
14
|
+
{
|
|
15
|
+
name: "request",
|
|
16
|
+
binary: "switch",
|
|
17
|
+
idSize: 1,
|
|
18
|
+
idTag: "type",
|
|
19
|
+
layouts: [
|
|
20
|
+
[[1, "GasInstruction"], exports.gasInstructionLayout],
|
|
21
|
+
[[2, "GasDropOffInstruction"], exports.gasDropOffInstructionLayout],
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
exports.relayInstructionsLayout = [
|
|
26
|
+
{
|
|
27
|
+
name: "requests",
|
|
28
|
+
binary: "array",
|
|
29
|
+
layout: exports.relayInstructionLayout,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
//# sourceMappingURL=relayInstruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayInstruction.js","sourceRoot":"","sources":["../../../src/layouts/relayInstruction.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAGlD,QAAA,oBAAoB,GAAG;IAClC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9C,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;CACrB,CAAC;AAIf,QAAA,2BAA2B,GAAG;IACzC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7C,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,yBAAW,CAAC,oBAAoB,EAAE;CACjC,CAAC;AAMf,QAAA,sBAAsB,GAAG;IACpC;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,MAAM;QACb,OAAO,EAAE;YACP,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,4BAAoB,CAAC;YAC7C,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,mCAA2B,CAAC;SAC5D;KACF;CACwB,CAAC;AAIf,QAAA,uBAAuB,GAAG;IACrC;QACE,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,8BAAsB;KAC/B;CACwB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DeriveType } from "binary-layout";
|
|
2
|
+
export declare enum RequestPrefix {
|
|
3
|
+
ERM1 = "ERM1",// MM
|
|
4
|
+
ERV1 = "ERV1",// VAA_V1
|
|
5
|
+
ERN1 = "ERN1",// NTT_V1
|
|
6
|
+
ERC1 = "ERC1"
|
|
7
|
+
}
|
|
8
|
+
export declare const cctpV1RequestLayout: readonly [{
|
|
9
|
+
readonly name: "sourceDomain";
|
|
10
|
+
readonly binary: "uint";
|
|
11
|
+
readonly size: 4;
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "nonce";
|
|
14
|
+
readonly binary: "uint";
|
|
15
|
+
readonly size: 8;
|
|
16
|
+
}];
|
|
17
|
+
export type CCTPv1Request = DeriveType<typeof cctpV1RequestLayout>;
|
|
18
|
+
//# sourceMappingURL=requestForExecution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestForExecution.d.ts","sourceRoot":"","sources":["../../../src/layouts/requestForExecution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,MAAM,eAAe,CAAC;AAEnD,oBAAY,aAAa;IACvB,IAAI,SAAS,CAAE,KAAK;IACpB,IAAI,SAAS,CAAE,SAAS;IACxB,IAAI,SAAS,CAAE,SAAS;IACxB,IAAI,SAAS;CACd;AAED,eAAO,MAAM,mBAAmB;;;;;;;;EAGL,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cctpV1RequestLayout = exports.RequestPrefix = void 0;
|
|
4
|
+
var RequestPrefix;
|
|
5
|
+
(function (RequestPrefix) {
|
|
6
|
+
RequestPrefix["ERM1"] = "ERM1";
|
|
7
|
+
RequestPrefix["ERV1"] = "ERV1";
|
|
8
|
+
RequestPrefix["ERN1"] = "ERN1";
|
|
9
|
+
RequestPrefix["ERC1"] = "ERC1";
|
|
10
|
+
})(RequestPrefix || (exports.RequestPrefix = RequestPrefix = {}));
|
|
11
|
+
exports.cctpV1RequestLayout = [
|
|
12
|
+
{ name: "sourceDomain", binary: "uint", size: 4 },
|
|
13
|
+
{ name: "nonce", binary: "uint", size: 8 },
|
|
14
|
+
];
|
|
15
|
+
//# sourceMappingURL=requestForExecution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestForExecution.js","sourceRoot":"","sources":["../../../src/layouts/requestForExecution.ts"],"names":[],"mappings":";;;AAEA,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,8BAAa,CAAA;AACf,CAAC,EALW,aAAa,6BAAb,aAAa,QAKxB;AAEY,QAAA,mBAAmB,GAAG;IACjC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;IACjD,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;CACjB,CAAC"}
|