@wormhole-labs/cctp-executor-route 0.24.0 → 0.26.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/aptos/executor.d.ts.map +1 -1
- package/dist/cjs/aptos/executor.js +3 -2
- package/dist/cjs/aptos/executor.js.map +1 -1
- package/dist/cjs/evm/executor.d.ts.map +1 -1
- package/dist/cjs/evm/executor.js +4 -3
- package/dist/cjs/evm/executor.js.map +1 -1
- package/dist/cjs/evm/executorV2.d.ts.map +1 -1
- package/dist/cjs/evm/executorV2.js +4 -3
- package/dist/cjs/evm/executorV2.js.map +1 -1
- package/dist/cjs/routes/cctpV1.d.ts +4 -4
- package/dist/cjs/routes/cctpV1.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV1.js +2 -5
- package/dist/cjs/routes/cctpV1.js.map +1 -1
- package/dist/cjs/routes/cctpV2Base.d.ts +2 -2
- package/dist/cjs/routes/cctpV2Base.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Base.js.map +1 -1
- package/dist/cjs/routes/cctpV2Fast.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Fast.js +3 -7
- package/dist/cjs/routes/cctpV2Fast.js.map +1 -1
- package/dist/cjs/routes/cctpV2Standard.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Standard.js +2 -5
- package/dist/cjs/routes/cctpV2Standard.js.map +1 -1
- package/dist/cjs/routes/helpers.d.ts.map +1 -1
- package/dist/cjs/routes/helpers.js +8 -5
- package/dist/cjs/routes/helpers.js.map +1 -1
- package/dist/cjs/sui/executor.js +4 -4
- package/dist/cjs/sui/executor.js.map +1 -1
- package/dist/cjs/svm/executor.js +2 -2
- package/dist/cjs/svm/executor.js.map +1 -1
- package/dist/cjs/svm/executorV2.js +3 -3
- package/dist/cjs/svm/executorV2.js.map +1 -1
- package/dist/cjs/utils.d.ts +7 -28
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +18 -58
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/aptos/executor.d.ts.map +1 -1
- package/dist/esm/aptos/executor.js +3 -2
- package/dist/esm/aptos/executor.js.map +1 -1
- package/dist/esm/evm/executor.d.ts.map +1 -1
- package/dist/esm/evm/executor.js +4 -3
- package/dist/esm/evm/executor.js.map +1 -1
- package/dist/esm/evm/executorV2.d.ts.map +1 -1
- package/dist/esm/evm/executorV2.js +4 -3
- package/dist/esm/evm/executorV2.js.map +1 -1
- package/dist/esm/routes/cctpV1.d.ts +4 -4
- package/dist/esm/routes/cctpV1.d.ts.map +1 -1
- package/dist/esm/routes/cctpV1.js +2 -5
- package/dist/esm/routes/cctpV1.js.map +1 -1
- package/dist/esm/routes/cctpV2Base.d.ts +2 -2
- package/dist/esm/routes/cctpV2Base.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Base.js.map +1 -1
- package/dist/esm/routes/cctpV2Fast.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Fast.js +4 -8
- package/dist/esm/routes/cctpV2Fast.js.map +1 -1
- package/dist/esm/routes/cctpV2Standard.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Standard.js +2 -5
- package/dist/esm/routes/cctpV2Standard.js.map +1 -1
- package/dist/esm/routes/helpers.d.ts.map +1 -1
- package/dist/esm/routes/helpers.js +9 -6
- package/dist/esm/routes/helpers.js.map +1 -1
- package/dist/esm/sui/executor.js +4 -4
- package/dist/esm/sui/executor.js.map +1 -1
- package/dist/esm/svm/executor.js +2 -2
- package/dist/esm/svm/executor.js.map +1 -1
- package/dist/esm/svm/executorV2.js +3 -3
- package/dist/esm/svm/executorV2.js.map +1 -1
- package/dist/esm/utils.d.ts +7 -28
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +19 -59
- 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 +1 -1
package/dist/esm/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { amount, circle, encoding, toChainId,
|
|
1
|
+
import { amount, circle, encoding, toChainId, } from "@wormhole-foundation/sdk-base";
|
|
2
2
|
import { deserializeCircleV2Message, } from "./layouts";
|
|
3
3
|
import axios from "axios";
|
|
4
|
-
import { apiBaseUrl, circleV2Api, getCircleV2Chain, getCircleV2Domain, } from "./consts";
|
|
4
|
+
import { apiBaseUrl, CircleV2FinalityThreshold, circleV2Api, getCircleV2Chain, getCircleV2Domain, } from "./consts";
|
|
5
5
|
import { DEFAULT_TASK_TIMEOUT, isSameToken, tasks, Wormhole, } from "@wormhole-foundation/sdk-connect";
|
|
6
6
|
export var RelayStatus;
|
|
7
7
|
(function (RelayStatus) {
|
|
@@ -59,64 +59,20 @@ export async function fetchStatus(network, txHash, chain) {
|
|
|
59
59
|
throw new Error(`Failed to fetch status for txHash: ${txHash}.`);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const MAX_U16 = 65535n;
|
|
63
62
|
/**
|
|
64
|
-
*
|
|
63
|
+
* Calculates the fast burn max fee from the remaining amount and fee in basis points.
|
|
64
|
+
* The fee can be a decimal (e.g., 1.3 bps), so we scale by 100 to preserve precision.
|
|
65
65
|
*
|
|
66
|
-
*
|
|
67
|
-
* -
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* Example (1 bps / 10 dBps with $1M threshold):
|
|
71
|
-
* ┌─────────────────┬────────────┬──────────────────────┐
|
|
72
|
-
* │ Transfer Amount │ Fee Amount │ Effective Rate (dBps)│
|
|
73
|
-
* ├─────────────────┼────────────┼──────────────────────┤
|
|
74
|
-
* │ $0 - $1M │ 0.01% scaling │ 10 (full rate) │
|
|
75
|
-
* │ $1M (threshold) │ $100 │ 10 (full rate) │
|
|
76
|
-
* │ $5M │ $100 │ 2 (0.2%) │
|
|
77
|
-
* │ $10M (max) │ $100 │ 1 (0.1%) │
|
|
78
|
-
* └─────────────────┴────────────┴──────────────────────┘
|
|
79
|
-
*
|
|
80
|
-
* The threshold is designed so that at the maximum expected transfer amount ($10M),
|
|
81
|
-
* the effective rate is still >= 1 dBps, avoiding integer division to zero.
|
|
82
|
-
*
|
|
83
|
-
* @param amount - Transfer amount in token base units (6 decimals for USDC)
|
|
84
|
-
* @param dBps - Referrer fee rate in tenths of basis points (10 = 1 bps = 0.01%)
|
|
85
|
-
* @param threshold - Optional amount threshold in whole USDC units where fee caps
|
|
86
|
-
* @returns Object containing fee amount, remaining amount, and effective dBps rate
|
|
66
|
+
* @param remainingAmount - The amount after other fees have been deducted
|
|
67
|
+
* @param feeBps - The fast burn fee in basis points (can be decimal, e.g., 1.3)
|
|
68
|
+
* @returns The max fee as a bigint, rounded up
|
|
87
69
|
*/
|
|
88
|
-
export function
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
let remainingAmount = amount;
|
|
95
|
-
if (dBps > 0) {
|
|
96
|
-
if (threshold !== undefined && amount > 0) {
|
|
97
|
-
// Convert threshold from whole USDC units to base units (6 decimals)
|
|
98
|
-
const thresholdAmount = sdkAmount.parse(threshold.toString(), 6);
|
|
99
|
-
const thresholdAmountUnits = sdkAmount.units(thresholdAmount);
|
|
100
|
-
// Cap the amount used for fee calculation at the threshold
|
|
101
|
-
// This creates a fee structure where fees plateau after the threshold amount
|
|
102
|
-
// For amounts below threshold: normal scaling applies
|
|
103
|
-
// For amounts at or above threshold: fee is fixed at (threshold * dBps / 100_000)
|
|
104
|
-
const cappedAmount = amount < thresholdAmountUnits ? amount : thresholdAmountUnits;
|
|
105
|
-
referrerFee = (cappedAmount * dBps) / 100000n;
|
|
106
|
-
// Calculate effective dBps rate based on actual amount transferred
|
|
107
|
-
// This represents what rate would produce the actual fee charged
|
|
108
|
-
// As transfer amounts grow beyond threshold, effective rate decreases
|
|
109
|
-
// Example: $100 fee on $10M transfer = 1 dBps effective rate
|
|
110
|
-
// This value is passed to the quote API to accurately represent the fee structure
|
|
111
|
-
referrerFeeDbps = (referrerFee * 100000n) / amount;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// Standard calculation without threshold: fee scales linearly with amount
|
|
115
|
-
referrerFee = (amount * dBps) / 100000n;
|
|
116
|
-
}
|
|
117
|
-
remainingAmount = amount - referrerFee;
|
|
118
|
-
}
|
|
119
|
-
return { referrerFee, remainingAmount, referrerFeeDbps };
|
|
70
|
+
export function calculateFastBurnMaxFee(remainingAmount, feeBps) {
|
|
71
|
+
// Scale bps to preserve 2 decimal places (e.g. 1.3 -> 130)
|
|
72
|
+
const scaledBps = BigInt(Math.round(feeBps * 100));
|
|
73
|
+
// fee = amount * (bps / 100) / 10_000
|
|
74
|
+
// => amount * scaledBps / 1_000_000
|
|
75
|
+
return (remainingAmount * scaledBps + 1000000n - 1n) / 1000000n;
|
|
120
76
|
}
|
|
121
77
|
export function sleep(ms) {
|
|
122
78
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -160,9 +116,13 @@ export async function getCircleV2Attestation(tx, network, timeout = DEFAULT_TASK
|
|
|
160
116
|
export async function getCircleV2FastBurnFee(network, fromChain, toChain) {
|
|
161
117
|
const sourceDomain = getCircleV2Domain(network, fromChain);
|
|
162
118
|
const destinationDomain = getCircleV2Domain(network, toChain);
|
|
163
|
-
const url = `${circleV2Api[network]}/
|
|
119
|
+
const url = `${circleV2Api[network]}/burn/USDC/fees/${sourceDomain}/${destinationDomain}`;
|
|
164
120
|
const response = await axios.get(url);
|
|
165
|
-
|
|
121
|
+
const feeTier = response.data.find((tier) => tier.finalityThreshold === CircleV2FinalityThreshold.CONFIRMED);
|
|
122
|
+
if (!feeTier) {
|
|
123
|
+
throw new Error("No fee tier found for CONFIRMED finality threshold");
|
|
124
|
+
}
|
|
125
|
+
return feeTier.minimumFee;
|
|
166
126
|
}
|
|
167
127
|
// https://developers.circle.com/api-reference/stablecoins/common/reattest-message
|
|
168
128
|
export async function reattestCircleV2Message(network, attestation) {
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,MAAM,EACN,QAAQ,EAER,SAAS,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|