@wormhole-labs/cctp-executor-route 0.4.0 → 0.5.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/README.md +1 -1
- package/dist/cjs/aptos/executor.d.ts +1 -1
- package/dist/cjs/aptos/executor.d.ts.map +1 -1
- package/dist/cjs/aptos/executor.js +1 -1
- package/dist/cjs/aptos/executor.js.map +1 -1
- package/dist/cjs/consts.d.ts +21 -1
- package/dist/cjs/consts.d.ts.map +1 -1
- package/dist/cjs/consts.js +188 -5
- package/dist/cjs/consts.js.map +1 -1
- package/dist/cjs/evm/executor.d.ts +1 -1
- package/dist/cjs/evm/executor.d.ts.map +1 -1
- package/dist/cjs/evm/executor.js +1 -1
- package/dist/cjs/evm/executor.js.map +1 -1
- package/dist/cjs/evm/executorV2.d.ts +25 -0
- package/dist/cjs/evm/executorV2.d.ts.map +1 -0
- package/dist/cjs/evm/executorV2.js +100 -0
- package/dist/cjs/evm/executorV2.js.map +1 -0
- package/dist/cjs/evm/index.d.ts +1 -0
- package/dist/cjs/evm/index.d.ts.map +1 -1
- package/dist/cjs/evm/index.js +3 -0
- package/dist/cjs/evm/index.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -91
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +15 -334
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/layouts/circle.d.ts +161 -0
- package/dist/cjs/layouts/circle.d.ts.map +1 -0
- package/dist/cjs/layouts/circle.js +48 -0
- package/dist/cjs/layouts/circle.js.map +1 -0
- package/dist/cjs/layouts/index.d.ts +1 -1
- package/dist/cjs/layouts/index.d.ts.map +1 -1
- package/dist/cjs/layouts/index.js +1 -1
- package/dist/cjs/layouts/index.js.map +1 -1
- package/dist/cjs/routes/cctpV1.d.ts +93 -0
- package/dist/cjs/routes/cctpV1.d.ts.map +1 -0
- package/dist/cjs/routes/cctpV1.js +180 -0
- package/dist/cjs/routes/cctpV1.js.map +1 -0
- package/dist/cjs/routes/cctpV2Base.d.ts +58 -0
- package/dist/cjs/routes/cctpV2Base.d.ts.map +1 -0
- package/dist/cjs/routes/cctpV2Base.js +179 -0
- package/dist/cjs/routes/cctpV2Base.js.map +1 -0
- package/dist/cjs/routes/cctpV2Fast.d.ts +42 -0
- package/dist/cjs/routes/cctpV2Fast.d.ts.map +1 -0
- package/dist/cjs/routes/cctpV2Fast.js +127 -0
- package/dist/cjs/routes/cctpV2Fast.js.map +1 -0
- package/dist/cjs/routes/cctpV2Standard.d.ts +42 -0
- package/dist/cjs/routes/cctpV2Standard.d.ts.map +1 -0
- package/dist/cjs/routes/cctpV2Standard.js +116 -0
- package/dist/cjs/routes/cctpV2Standard.js.map +1 -0
- package/dist/cjs/routes/helpers.d.ts +12 -0
- package/dist/cjs/routes/helpers.d.ts.map +1 -0
- package/dist/cjs/routes/helpers.js +181 -0
- package/dist/cjs/routes/helpers.js.map +1 -0
- package/dist/cjs/routes/index.d.ts +5 -0
- package/dist/cjs/routes/index.d.ts.map +1 -0
- package/dist/cjs/routes/index.js +21 -0
- package/dist/cjs/routes/index.js.map +1 -0
- package/dist/cjs/sui/executor.d.ts +1 -1
- package/dist/cjs/sui/executor.d.ts.map +1 -1
- package/dist/cjs/svm/executor.d.ts +1 -1
- package/dist/cjs/svm/executor.d.ts.map +1 -1
- package/dist/cjs/svm/executor.js +1 -1
- package/dist/cjs/svm/executor.js.map +1 -1
- package/dist/cjs/types.d.ts +8 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils.d.ts +23 -2
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +119 -7
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/aptos/executor.d.ts +1 -1
- package/dist/esm/aptos/executor.d.ts.map +1 -1
- package/dist/esm/aptos/executor.js +2 -2
- package/dist/esm/aptos/executor.js.map +1 -1
- package/dist/esm/consts.d.ts +21 -1
- package/dist/esm/consts.d.ts.map +1 -1
- package/dist/esm/consts.js +181 -4
- package/dist/esm/consts.js.map +1 -1
- package/dist/esm/evm/executor.d.ts +1 -1
- package/dist/esm/evm/executor.d.ts.map +1 -1
- package/dist/esm/evm/executor.js +2 -2
- package/dist/esm/evm/executor.js.map +1 -1
- package/dist/esm/evm/executorV2.d.ts +25 -0
- package/dist/esm/evm/executorV2.d.ts.map +1 -0
- package/dist/esm/evm/executorV2.js +96 -0
- package/dist/esm/evm/executorV2.js.map +1 -0
- package/dist/esm/evm/index.d.ts +1 -0
- package/dist/esm/evm/index.d.ts.map +1 -1
- package/dist/esm/evm/index.js +3 -0
- package/dist/esm/evm/index.js.map +1 -1
- package/dist/esm/index.d.ts +1 -91
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -331
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layouts/circle.d.ts +161 -0
- package/dist/esm/layouts/circle.d.ts.map +1 -0
- package/dist/esm/layouts/circle.js +43 -0
- package/dist/esm/layouts/circle.js.map +1 -0
- package/dist/esm/layouts/index.d.ts +1 -1
- package/dist/esm/layouts/index.d.ts.map +1 -1
- package/dist/esm/layouts/index.js +1 -1
- package/dist/esm/layouts/index.js.map +1 -1
- package/dist/esm/routes/cctpV1.d.ts +93 -0
- package/dist/esm/routes/cctpV1.d.ts.map +1 -0
- package/dist/esm/routes/cctpV1.js +175 -0
- package/dist/esm/routes/cctpV1.js.map +1 -0
- package/dist/esm/routes/cctpV2Base.d.ts +58 -0
- package/dist/esm/routes/cctpV2Base.d.ts.map +1 -0
- package/dist/esm/routes/cctpV2Base.js +175 -0
- package/dist/esm/routes/cctpV2Base.js.map +1 -0
- package/dist/esm/routes/cctpV2Fast.d.ts +42 -0
- package/dist/esm/routes/cctpV2Fast.d.ts.map +1 -0
- package/dist/esm/routes/cctpV2Fast.js +122 -0
- package/dist/esm/routes/cctpV2Fast.js.map +1 -0
- package/dist/esm/routes/cctpV2Standard.d.ts +42 -0
- package/dist/esm/routes/cctpV2Standard.d.ts.map +1 -0
- package/dist/esm/routes/cctpV2Standard.js +111 -0
- package/dist/esm/routes/cctpV2Standard.js.map +1 -0
- package/dist/esm/routes/helpers.d.ts +12 -0
- package/dist/esm/routes/helpers.d.ts.map +1 -0
- package/dist/esm/routes/helpers.js +177 -0
- package/dist/esm/routes/helpers.js.map +1 -0
- package/dist/esm/routes/index.d.ts +5 -0
- package/dist/esm/routes/index.d.ts.map +1 -0
- package/dist/esm/routes/index.js +5 -0
- package/dist/esm/routes/index.js.map +1 -0
- package/dist/esm/sui/executor.d.ts +1 -1
- package/dist/esm/sui/executor.d.ts.map +1 -1
- package/dist/esm/svm/executor.d.ts +1 -1
- package/dist/esm/svm/executor.d.ts.map +1 -1
- package/dist/esm/svm/executor.js +2 -2
- package/dist/esm/svm/executor.js.map +1 -1
- package/dist/esm/types.d.ts +8 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +23 -2
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +115 -8
- package/dist/esm/utils.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/dist/cjs/layouts/requestForExecution.d.ts +0 -18
- package/dist/cjs/layouts/requestForExecution.d.ts.map +0 -1
- package/dist/cjs/layouts/requestForExecution.js +0 -15
- package/dist/cjs/layouts/requestForExecution.js.map +0 -1
- package/dist/esm/layouts/requestForExecution.d.ts +0 -18
- package/dist/esm/layouts/requestForExecution.d.ts.map +0 -1
- package/dist/esm/layouts/requestForExecution.js +0 -12
- package/dist/esm/layouts/requestForExecution.js.map +0 -1
package/dist/esm/utils.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { toChainId } from "@wormhole-foundation/sdk-base";
|
|
1
|
+
import { amount, circle, encoding, toChainId, amount as sdkAmount, } from "@wormhole-foundation/sdk-base";
|
|
2
|
+
import { deserializeCircleV2Message, } from "./layouts";
|
|
2
3
|
import axios from "axios";
|
|
3
|
-
import { apiBaseUrl } from "./consts";
|
|
4
|
+
import { apiBaseUrl, circleV2Api, getCircleV2Chain, getCircleV2Domain, } from "./consts";
|
|
5
|
+
import { DEFAULT_TASK_TIMEOUT, isSameToken, tasks, Wormhole, } from "@wormhole-foundation/sdk-connect";
|
|
4
6
|
export var RelayStatus;
|
|
5
7
|
(function (RelayStatus) {
|
|
6
8
|
RelayStatus["Pending"] = "pending";
|
|
@@ -10,6 +12,14 @@ export var RelayStatus;
|
|
|
10
12
|
RelayStatus["Underpaid"] = "underpaid";
|
|
11
13
|
RelayStatus["Aborted"] = "aborted";
|
|
12
14
|
})(RelayStatus || (RelayStatus = {}));
|
|
15
|
+
export var RequestPrefix;
|
|
16
|
+
(function (RequestPrefix) {
|
|
17
|
+
RequestPrefix["ERM1"] = "ERM1";
|
|
18
|
+
RequestPrefix["ERV1"] = "ERV1";
|
|
19
|
+
RequestPrefix["ERN1"] = "ERN1";
|
|
20
|
+
RequestPrefix["ERC1"] = "ERC1";
|
|
21
|
+
RequestPrefix["ERC2"] = "ERC2";
|
|
22
|
+
})(RequestPrefix || (RequestPrefix = {}));
|
|
13
23
|
export async function fetchCapabilities(network) {
|
|
14
24
|
const url = `${apiBaseUrl[network]}/v0/capabilities`;
|
|
15
25
|
try {
|
|
@@ -50,18 +60,115 @@ export async function fetchStatus(network, txHash, chain) {
|
|
|
50
60
|
}
|
|
51
61
|
}
|
|
52
62
|
const MAX_U16 = 65535n;
|
|
53
|
-
export function calculateReferrerFee(amount, dBps) {
|
|
63
|
+
export function calculateReferrerFee(amount, dBps, threshold) {
|
|
54
64
|
if (dBps > MAX_U16) {
|
|
55
65
|
throw new Error("dBps exceeds max u16");
|
|
56
66
|
}
|
|
67
|
+
let referrerFeeDbps = dBps;
|
|
68
|
+
let remainingAmount = amount;
|
|
69
|
+
let referrerFee = 0n;
|
|
57
70
|
if (dBps > 0) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
if (threshold !== undefined && amount > 0) {
|
|
72
|
+
// We first need to convert the threshold value to base units
|
|
73
|
+
const thresholdAmount = sdkAmount.parse(threshold.toString(), 6);
|
|
74
|
+
// Capped dBps is minimum of dBps and threshold/amount
|
|
75
|
+
const cappedMax = sdkAmount.units(thresholdAmount) / amount;
|
|
76
|
+
const cappedDBps = dBps < cappedMax ? dBps : cappedMax;
|
|
77
|
+
referrerFee = (amount * cappedDBps) / 100000n;
|
|
78
|
+
referrerFeeDbps = cappedDBps;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
referrerFee = (amount * dBps) / 100000n;
|
|
82
|
+
}
|
|
83
|
+
remainingAmount = amount - referrerFee;
|
|
61
84
|
}
|
|
62
|
-
return { referrerFee
|
|
85
|
+
return { referrerFee, remainingAmount, referrerFeeDbps };
|
|
63
86
|
}
|
|
64
87
|
export function sleep(ms) {
|
|
65
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
88
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
89
|
+
}
|
|
90
|
+
export async function getCircleV2Attestation(tx, network, timeout = DEFAULT_TASK_TIMEOUT) {
|
|
91
|
+
const sourceDomain = getCircleV2Domain(network, tx.chain);
|
|
92
|
+
return tasks.retry(async () => {
|
|
93
|
+
const url = `${circleV2Api[network]}/messages/${sourceDomain}?transactionHash=${tx.txid}`;
|
|
94
|
+
try {
|
|
95
|
+
const response = await axios.get(url);
|
|
96
|
+
// CCTP V2 could be used to send multiple transfers on a single tx
|
|
97
|
+
// but we'll assume it's only one
|
|
98
|
+
const attestation = response.data.messages[0];
|
|
99
|
+
if (!attestation)
|
|
100
|
+
return null;
|
|
101
|
+
if (attestation.cctpVersion !== 2)
|
|
102
|
+
throw new Error("CCTPv1 attestation found");
|
|
103
|
+
if (attestation.status === "pending_confirmations")
|
|
104
|
+
return null;
|
|
105
|
+
const message = deserializeCircleV2Message(encoding.hex.decode(attestation.message));
|
|
106
|
+
return {
|
|
107
|
+
message,
|
|
108
|
+
attestation: attestation.attestation,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (!error)
|
|
113
|
+
return null;
|
|
114
|
+
if (typeof error === "object") {
|
|
115
|
+
// A 404 error means the message is not yet available
|
|
116
|
+
// since its not available yet, we return null signaling it can be tried again
|
|
117
|
+
if (axios.isAxiosError(error) && error.response?.status === 404)
|
|
118
|
+
return null;
|
|
119
|
+
if ("status" in error && error.status === 404)
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}, 2000, timeout, "CCTPv2:GetMessage");
|
|
125
|
+
}
|
|
126
|
+
export async function getCircleV2FastBurnFee(network, fromChain, toChain) {
|
|
127
|
+
const sourceDomain = getCircleV2Domain(network, fromChain);
|
|
128
|
+
const destinationDomain = getCircleV2Domain(network, toChain);
|
|
129
|
+
const url = `${circleV2Api[network]}/fastBurn/USDC/fees/${sourceDomain}/${destinationDomain}`;
|
|
130
|
+
const response = await axios.get(url);
|
|
131
|
+
return BigInt(response.data.minimumFee);
|
|
132
|
+
}
|
|
133
|
+
// https://developers.circle.com/api-reference/stablecoins/common/reattest-message
|
|
134
|
+
export async function reattestCircleV2Message(network, attestation) {
|
|
135
|
+
// Re-Attest the message
|
|
136
|
+
const nonce = encoding.hex.encode(attestation.attestation.message.nonce, true);
|
|
137
|
+
const url = `${circleV2Api[network]}/reattest/${nonce}`;
|
|
138
|
+
const response = await axios.post(url);
|
|
139
|
+
if (response.data.error) {
|
|
140
|
+
if (response.data.error.includes("Message is already finalized")) {
|
|
141
|
+
return attestation.attestation;
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`Error re-attesting message: ${response.data.error}`);
|
|
144
|
+
}
|
|
145
|
+
const fromChain = getCircleV2Chain(network, attestation.attestation.message.sourceDomain);
|
|
146
|
+
return tasks.retry(async () => {
|
|
147
|
+
const newAttestation = await getCircleV2Attestation({ txid: attestation.id, chain: fromChain }, network);
|
|
148
|
+
if (!newAttestation)
|
|
149
|
+
return null;
|
|
150
|
+
if (newAttestation.message.messageBody.expirationBlock !== 0n)
|
|
151
|
+
return null;
|
|
152
|
+
return newAttestation;
|
|
153
|
+
}, 2000, DEFAULT_TASK_TIMEOUT, "CCTPv2:Reattest");
|
|
154
|
+
}
|
|
155
|
+
export async function getCircleV2FastBurnAllowance(network) {
|
|
156
|
+
const url = `${circleV2Api[network]}/fastBurn/USDC/allowance`;
|
|
157
|
+
const response = await axios.get(url);
|
|
158
|
+
return amount.units(amount.parse(response.data.allowance, 6));
|
|
159
|
+
}
|
|
160
|
+
export function getUsdcDestinationAddress(sourceToken, fromChain, toChain) {
|
|
161
|
+
// Ensure the source token is USDC
|
|
162
|
+
const sourceChainUsdcContract = circle.usdcContract.get(fromChain.network, fromChain.chain);
|
|
163
|
+
if (!(sourceChainUsdcContract &&
|
|
164
|
+
isSameToken(sourceToken, Wormhole.tokenId(fromChain.chain, sourceChainUsdcContract)))) {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
// Get the destination chain's USDC contract
|
|
168
|
+
const { network, chain } = toChain;
|
|
169
|
+
const destChainUsdcContract = circle.usdcContract.get(network, chain);
|
|
170
|
+
if (!destChainUsdcContract)
|
|
171
|
+
return [];
|
|
172
|
+
return [Wormhole.chainAddress(chain, destChainUsdcContract)];
|
|
66
173
|
}
|
|
67
174
|
//# sourceMappingURL=utils.js.map
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|