@lendasat/lendaswap-sdk-pure 0.2.24 → 0.2.26
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/arkade-network.d.ts +8 -0
- package/dist/arkade-network.d.ts.map +1 -0
- package/dist/arkade-network.js +40 -0
- package/dist/arkade-network.js.map +1 -0
- package/dist/arkade.d.ts.map +1 -1
- package/dist/arkade.js +2 -9
- package/dist/arkade.js.map +1 -1
- package/dist/cctp/constants.d.ts.map +1 -1
- package/dist/cctp/constants.js +4 -0
- package/dist/cctp/constants.js.map +1 -1
- package/dist/cctp/fee.d.ts +49 -0
- package/dist/cctp/fee.d.ts.map +1 -0
- package/dist/cctp/fee.js +70 -0
- package/dist/cctp/fee.js.map +1 -0
- package/dist/cctp/index.d.ts +2 -1
- package/dist/cctp/index.d.ts.map +1 -1
- package/dist/cctp/index.js +2 -1
- package/dist/cctp/index.js.map +1 -1
- package/dist/cctp/utils.d.ts +15 -0
- package/dist/cctp/utils.d.ts.map +1 -1
- package/dist/cctp/utils.js +41 -0
- package/dist/cctp/utils.js.map +1 -1
- package/dist/cctp-bridge/bridge.d.ts +62 -0
- package/dist/cctp-bridge/bridge.d.ts.map +1 -0
- package/dist/cctp-bridge/bridge.js +74 -0
- package/dist/cctp-bridge/bridge.js.map +1 -0
- package/dist/cctp-bridge/index.d.ts +17 -0
- package/dist/cctp-bridge/index.d.ts.map +1 -0
- package/dist/cctp-bridge/index.js +16 -0
- package/dist/cctp-bridge/index.js.map +1 -0
- package/dist/cctp-inbound/approveAndBurn.d.ts +68 -0
- package/dist/cctp-inbound/approveAndBurn.d.ts.map +1 -0
- package/dist/cctp-inbound/approveAndBurn.js +95 -0
- package/dist/cctp-inbound/approveAndBurn.js.map +1 -0
- package/dist/cctp-inbound/burn.d.ts +51 -0
- package/dist/cctp-inbound/burn.d.ts.map +1 -0
- package/dist/cctp-inbound/burn.js +66 -0
- package/dist/cctp-inbound/burn.js.map +1 -0
- package/dist/cctp-inbound/chainMap.d.ts +48 -0
- package/dist/cctp-inbound/chainMap.d.ts.map +1 -0
- package/dist/cctp-inbound/chainMap.js +103 -0
- package/dist/cctp-inbound/chainMap.js.map +1 -0
- package/dist/cctp-inbound/client.d.ts +1573 -0
- package/dist/cctp-inbound/client.d.ts.map +1 -0
- package/dist/cctp-inbound/client.js +117 -0
- package/dist/cctp-inbound/client.js.map +1 -0
- package/dist/cctp-inbound/eip2612.d.ts +77 -0
- package/dist/cctp-inbound/eip2612.d.ts.map +1 -0
- package/dist/cctp-inbound/eip2612.js +95 -0
- package/dist/cctp-inbound/eip2612.js.map +1 -0
- package/dist/cctp-inbound/evmSignerAdapter.d.ts +25 -0
- package/dist/cctp-inbound/evmSignerAdapter.d.ts.map +1 -0
- package/dist/cctp-inbound/evmSignerAdapter.js +50 -0
- package/dist/cctp-inbound/evmSignerAdapter.js.map +1 -0
- package/dist/cctp-inbound/fundSwap.d.ts +94 -0
- package/dist/cctp-inbound/fundSwap.d.ts.map +1 -0
- package/dist/cctp-inbound/fundSwap.js +90 -0
- package/dist/cctp-inbound/fundSwap.js.map +1 -0
- package/dist/cctp-inbound/index.d.ts +35 -0
- package/dist/cctp-inbound/index.d.ts.map +1 -0
- package/dist/cctp-inbound/index.js +33 -0
- package/dist/cctp-inbound/index.js.map +1 -0
- package/dist/cctp-inbound/permit2.d.ts +33 -0
- package/dist/cctp-inbound/permit2.d.ts.map +1 -0
- package/dist/cctp-inbound/permit2.js +32 -0
- package/dist/cctp-inbound/permit2.js.map +1 -0
- package/dist/cctp-inbound/preflight.d.ts +36 -0
- package/dist/cctp-inbound/preflight.d.ts.map +1 -0
- package/dist/cctp-inbound/preflight.js +67 -0
- package/dist/cctp-inbound/preflight.js.map +1 -0
- package/dist/cctp-inbound/smartAccount.d.ts +1518 -0
- package/dist/cctp-inbound/smartAccount.d.ts.map +1 -0
- package/dist/cctp-inbound/smartAccount.js +117 -0
- package/dist/cctp-inbound/smartAccount.js.map +1 -0
- package/dist/cctp-inbound/submit.d.ts +75 -0
- package/dist/cctp-inbound/submit.d.ts.map +1 -0
- package/dist/cctp-inbound/submit.js +126 -0
- package/dist/cctp-inbound/submit.js.map +1 -0
- package/dist/cctp-inbound/types.d.ts +30 -0
- package/dist/cctp-inbound/types.d.ts.map +1 -0
- package/dist/cctp-inbound/types.js +5 -0
- package/dist/cctp-inbound/types.js.map +1 -0
- package/dist/cctp-inbound/userOp.d.ts +93 -0
- package/dist/cctp-inbound/userOp.d.ts.map +1 -0
- package/dist/cctp-inbound/userOp.js +151 -0
- package/dist/cctp-inbound/userOp.js.map +1 -0
- package/dist/client.d.ts +166 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +565 -32
- package/dist/client.js.map +1 -1
- package/dist/create/arkade.d.ts.map +1 -1
- package/dist/create/arkade.js +21 -19
- package/dist/create/arkade.js.map +1 -1
- package/dist/create/bitcoin.d.ts.map +1 -1
- package/dist/create/bitcoin.js +17 -15
- package/dist/create/bitcoin.js.map +1 -1
- package/dist/create/evm-to-arkade.d.ts.map +1 -1
- package/dist/create/evm-to-arkade.js +2 -0
- package/dist/create/evm-to-arkade.js.map +1 -1
- package/dist/create/evm-to-bitcoin.d.ts.map +1 -1
- package/dist/create/evm-to-bitcoin.js +2 -0
- package/dist/create/evm-to-bitcoin.js.map +1 -1
- package/dist/create/evm-to-lightning.d.ts.map +1 -1
- package/dist/create/evm-to-lightning.js +6 -3
- package/dist/create/evm-to-lightning.js.map +1 -1
- package/dist/create/lightning.d.ts.map +1 -1
- package/dist/create/lightning.js +17 -15
- package/dist/create/lightning.js.map +1 -1
- package/dist/create/types.d.ts +40 -0
- package/dist/create/types.d.ts.map +1 -1
- package/dist/delegate.d.ts.map +1 -1
- package/dist/delegate.js +2 -31
- package/dist/delegate.js.map +1 -1
- package/dist/evm/wallet.d.ts +16 -0
- package/dist/evm/wallet.d.ts.map +1 -1
- package/dist/evm/wallet.js.map +1 -1
- package/dist/generated/api.d.ts +408 -2
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/redeem/arkade.d.ts.map +1 -1
- package/dist/redeem/arkade.js +4 -43
- package/dist/redeem/arkade.js.map +1 -1
- package/dist/redeem/gasless.d.ts +16 -0
- package/dist/redeem/gasless.d.ts.map +1 -1
- package/dist/redeem/gasless.js +3 -1
- package/dist/redeem/gasless.js.map +1 -1
- package/dist/refund/arkade.d.ts.map +1 -1
- package/dist/refund/arkade.js +3 -39
- package/dist/refund/arkade.js.map +1 -1
- package/dist/refund/{collab.d.ts → collab-arkade-evm.d.ts} +6 -6
- package/dist/refund/collab-arkade-evm.d.ts.map +1 -0
- package/dist/refund/{collab.js → collab-arkade-evm.js} +6 -38
- package/dist/refund/collab-arkade-evm.js.map +1 -0
- package/dist/refund/collab-arkade-lightning.d.ts +59 -0
- package/dist/refund/collab-arkade-lightning.d.ts.map +1 -0
- package/dist/refund/collab-arkade-lightning.js +208 -0
- package/dist/refund/collab-arkade-lightning.js.map +1 -0
- package/dist/refund/index.d.ts +3 -2
- package/dist/refund/index.d.ts.map +1 -1
- package/dist/refund/index.js +3 -2
- package/dist/refund/index.js.map +1 -1
- package/dist/tokens.d.ts +18 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +43 -7
- package/dist/tokens.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +27 -2
- package/dist/refund/collab.d.ts.map +0 -1
- package/dist/refund/collab.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type NetworkName } from "@arkade-os/sdk";
|
|
2
|
+
/** Default Arkade server URL by network */
|
|
3
|
+
export declare const DEFAULT_ARKADE_URLS: Record<string, string>;
|
|
4
|
+
export declare function getNetworkName(network: string): NetworkName;
|
|
5
|
+
export declare function getNetworkHrp(networkName: NetworkName): string;
|
|
6
|
+
export declare function resolveArkadeServerUrl(network: string, arkadeServerUrl?: string): string;
|
|
7
|
+
export declare function resolveArkadeServerUrlByName(networkName: NetworkName, arkadeServerUrl?: string): string;
|
|
8
|
+
//# sourceMappingURL=arkade-network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-network.d.ts","sourceRoot":"","sources":["../src/arkade-network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAE5D,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAgB3D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAE9D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAGR;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,WAAW,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAQR"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { networks } from "@arkade-os/sdk";
|
|
2
|
+
/** Default Arkade server URL by network */
|
|
3
|
+
export const DEFAULT_ARKADE_URLS = {
|
|
4
|
+
bitcoin: "https://arkade.computer",
|
|
5
|
+
mainnet: "https://arkade.computer",
|
|
6
|
+
signet: "https://mutinynet.arkade.sh",
|
|
7
|
+
mutinynet: "https://mutinynet.arkade.sh",
|
|
8
|
+
};
|
|
9
|
+
export function getNetworkName(network) {
|
|
10
|
+
switch (network.toLowerCase()) {
|
|
11
|
+
case "mainnet":
|
|
12
|
+
case "bitcoin":
|
|
13
|
+
return "bitcoin";
|
|
14
|
+
case "testnet":
|
|
15
|
+
return "testnet";
|
|
16
|
+
case "signet":
|
|
17
|
+
return "signet";
|
|
18
|
+
case "mutinynet":
|
|
19
|
+
return "mutinynet";
|
|
20
|
+
case "regtest":
|
|
21
|
+
return "regtest";
|
|
22
|
+
default:
|
|
23
|
+
throw new Error(`Unknown network: ${network}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function getNetworkHrp(networkName) {
|
|
27
|
+
return networks[networkName].hrp;
|
|
28
|
+
}
|
|
29
|
+
export function resolveArkadeServerUrl(network, arkadeServerUrl) {
|
|
30
|
+
const networkName = getNetworkName(network);
|
|
31
|
+
return resolveArkadeServerUrlByName(networkName, arkadeServerUrl);
|
|
32
|
+
}
|
|
33
|
+
export function resolveArkadeServerUrlByName(networkName, arkadeServerUrl) {
|
|
34
|
+
const serverUrl = arkadeServerUrl ?? DEFAULT_ARKADE_URLS[networkName];
|
|
35
|
+
if (!serverUrl) {
|
|
36
|
+
throw new Error(`No Arkade server URL configured for network: ${networkName}`);
|
|
37
|
+
}
|
|
38
|
+
return serverUrl;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=arkade-network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-network.js","sourceRoot":"","sources":["../src/arkade-network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE5D,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,OAAO,EAAE,yBAAyB;IAClC,OAAO,EAAE,yBAAyB;IAClC,MAAM,EAAE,6BAA6B;IACrC,SAAS,EAAE,6BAA6B;CACzC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAwB;IACpD,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,eAAwB;IAExB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,4BAA4B,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAwB,EACxB,eAAwB;IAExB,MAAM,SAAS,GAAG,eAAe,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,gDAAgD,WAAW,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/arkade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arkade.d.ts","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"arkade.d.ts","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAClB,YAAY,GACZ,WAAW,GACX,aAAa,GACb,OAAO,GACP,OAAO,CAAC;AAEZ,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAsDvB"}
|
package/dist/arkade.js
CHANGED
|
@@ -5,11 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ArkAddress, RestIndexerProvider, } from "@arkade-os/sdk";
|
|
7
7
|
import { hex } from "@scure/base";
|
|
8
|
-
|
|
9
|
-
const DEFAULT_ARKADE_URLS = {
|
|
10
|
-
bitcoin: "https://arkade.computer",
|
|
11
|
-
signet: "https://signet.arkade.computer",
|
|
12
|
-
};
|
|
8
|
+
import { resolveArkadeServerUrl } from "./arkade-network.js";
|
|
13
9
|
/**
|
|
14
10
|
* Queries the Arkade indexer for spendable, spent, and recoverable balances
|
|
15
11
|
* at a VHTLC address.
|
|
@@ -23,10 +19,7 @@ export async function getVhtlcAmounts(params) {
|
|
|
23
19
|
const decoded = ArkAddress.decode(vhtlcAddress);
|
|
24
20
|
const pkScript = hex.encode(decoded.pkScript);
|
|
25
21
|
// Determine Arkade server URL: explicit override > network default
|
|
26
|
-
const serverUrl = arkadeServerUrl
|
|
27
|
-
if (!serverUrl) {
|
|
28
|
-
throw new Error(`Unknown network for Arkade: ${network}`);
|
|
29
|
-
}
|
|
22
|
+
const serverUrl = resolveArkadeServerUrl(network, arkadeServerUrl);
|
|
30
23
|
const indexerProvider = new RestIndexerProvider(serverUrl);
|
|
31
24
|
// Query each category separately
|
|
32
25
|
const [spendableResult, spentResult, recoverableResult] = await Promise.all([
|
package/dist/arkade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arkade.js","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EAEV,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,
|
|
1
|
+
{"version":3,"file":"arkade.js","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EAEV,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAgC7D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA6B;IAE7B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE1D,oEAAoE;IACpE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9C,mEAAmE;IACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEnE,MAAM,eAAe,GAAoB,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE5E,iCAAiC;IACjC,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACtE,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClE,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;KACzE,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,CAAC,KAA0B,EAAE,EAAE,CACzC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE7C,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC;QAC5C,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAC5B,gBAAgB,IAAI,CAAC,CAAC,KAAK,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC;IAEpE,MAAM,UAAU,GACd,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC;QACjD,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC;YAChC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,GAAG,CAAC;gBACb,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,WAAW,GAAG,CAAC;oBACf,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,OAAO,CAAC;IAEpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cctp/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,kBAAkB,+CAA+C,CAAC;AAC/E,eAAO,MAAM,sBAAsB,+CACW,CAAC;AAO/C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAgBf,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAMtD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cctp/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,kBAAkB,+CAA+C,CAAC;AAC/E,eAAO,MAAM,sBAAsB,+CACW,CAAC;AAO/C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAgBf,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAMtD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBjD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEjD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEjD,CAAC;AAOF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG1D,CAAC;AAEJ,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG9D,CAAC;AAMJ;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,uEAC6B,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,4CAA4C;AAC5C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,WAAa,CAAC;AAClD,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,UAAW,CAAC;AAM7C,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,gBAAgB,wCAAwC,CAAC"}
|
package/dist/cctp/constants.js
CHANGED
|
@@ -48,6 +48,10 @@ export const USDC_ADDRESSES = {
|
|
|
48
48
|
Sei: "0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392",
|
|
49
49
|
HyperEVM: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
|
|
50
50
|
Monad: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603",
|
|
51
|
+
// Solana's USDC is an SPL mint, encoded as a base58 pubkey rather than
|
|
52
|
+
// an EVM `0x...` hex address. Callers that parse the value with viem's
|
|
53
|
+
// `getAddress` / `Address.from_str` must guard against this entry.
|
|
54
|
+
Solana: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
51
55
|
};
|
|
52
56
|
export const EURC_ADDRESSES = {
|
|
53
57
|
Ethereum: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cctp/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GACjC,4CAA4C,CAAC;AAE/C,+EAA+E;AAC/E,kBAAkB;AAClB,gFAAgF;AAChF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,GAAG,EAAE,EAAE;CACC,CAAC;AAIX,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;IACtD,IAAI,EAAE,4CAA4C;IAClD,QAAQ,EAAE,4CAA4C;IACtD,SAAS,EAAE,4CAA4C;IACvD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,aAAa,EAAE,4CAA4C;IAC3D,GAAG,EAAE,4CAA4C;IACjD,KAAK,EAAE,4CAA4C;IACnD,GAAG,EAAE,4CAA4C;IACjD,QAAQ,EAAE,4CAA4C;IACtD,KAAK,EAAE,4CAA4C;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cctp/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GACjC,4CAA4C,CAAC;AAE/C,+EAA+E;AAC/E,kBAAkB;AAClB,gFAAgF;AAChF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,GAAG,EAAE,EAAE;CACC,CAAC;AAIX,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;IACtD,IAAI,EAAE,4CAA4C;IAClD,QAAQ,EAAE,4CAA4C;IACtD,SAAS,EAAE,4CAA4C;IACvD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,aAAa,EAAE,4CAA4C;IAC3D,GAAG,EAAE,4CAA4C;IACjD,KAAK,EAAE,4CAA4C;IACnD,GAAG,EAAE,4CAA4C;IACjD,QAAQ,EAAE,4CAA4C;IACtD,KAAK,EAAE,4CAA4C;IACnD,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,EAAE,8CAA8C;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,QAAQ,EAAE,4CAA4C;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,QAAQ,EAAE,4CAA4C;CACvD,CAAC;AAEF,+EAA+E;AAC/E,mEAAmE;AACnE,wEAAwE;AACxE,+EAA+E;AAE/E,MAAM,CAAC,MAAM,yBAAyB,GACpC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CACtE,CAAC;AAEJ,MAAM,CAAC,MAAM,6BAA6B,GACxC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAC1E,CAAC;AAEJ,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GACvC,oEAAoE,CAAC;AAEvE,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAU,CAAC;AAClD,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAQ,CAAC;AAE7C,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Fee tiers returned by the IRIS API (low/med/high gas estimates for the forwarder). */
|
|
2
|
+
export interface IrisForwardFeeTiers {
|
|
3
|
+
low: number;
|
|
4
|
+
med: number;
|
|
5
|
+
high: number;
|
|
6
|
+
}
|
|
7
|
+
/** Raw entry from `GET /v2/burn/USDC/fees/{sourceDomain}/{destDomain}`. */
|
|
8
|
+
export interface IrisFeeEntry {
|
|
9
|
+
finalityThreshold: number;
|
|
10
|
+
/** CCTPv2 fast-transfer fee in basis points (e.g. `1.3` = 0.013%). */
|
|
11
|
+
minimumFee: number;
|
|
12
|
+
/** Forward-service relayer fees (absolute USDC smallest-units). */
|
|
13
|
+
forwardFee: IrisForwardFeeTiers;
|
|
14
|
+
}
|
|
15
|
+
export interface FetchCctpFeeOptions {
|
|
16
|
+
/** CCTP source domain ID (e.g. 2 = Optimism, 6 = Base). */
|
|
17
|
+
sourceDomain: number;
|
|
18
|
+
/** CCTP destination domain ID (3 = Arbitrum). */
|
|
19
|
+
destinationDomain: number;
|
|
20
|
+
/** Finality threshold to query — defaults to `FINALITY_FAST` (1000). */
|
|
21
|
+
finalityThreshold?: number;
|
|
22
|
+
/** IRIS API base URL. Defaults to mainnet. */
|
|
23
|
+
irisApiUrl?: string;
|
|
24
|
+
/** Optional abort signal. */
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Fetch the fee entry for the given source → destination pair and
|
|
29
|
+
* finality threshold. Returns the raw IRIS shape — callers that want
|
|
30
|
+
* an applied maxFee should pass this to {@link computeCctpFastFee}.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fetchCctpFee(options: FetchCctpFeeOptions): Promise<IrisFeeEntry>;
|
|
33
|
+
/**
|
|
34
|
+
* Cached variant of {@link fetchCctpFee}. Multiple callers within a
|
|
35
|
+
* 60-second window share a single IRIS round-trip per source→dest pair.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getCachedCctpFee(options: FetchCctpFeeOptions): Promise<IrisFeeEntry>;
|
|
38
|
+
/**
|
|
39
|
+
* Apply IRIS's `minimumFee` (basis points) to an amount in USDC smallest
|
|
40
|
+
* units, matching the Rust backend's formula:
|
|
41
|
+
* protocolFee = amount × round(minimumFee × 100) ÷ 1_000_000
|
|
42
|
+
*
|
|
43
|
+
* Adds a conservative 20% buffer to absorb rounding drift between quote
|
|
44
|
+
* time and burn time. Return value is the fee in USDC smallest units,
|
|
45
|
+
* suitable for `maxFee` in `depositForBurn` and as the subtracted amount
|
|
46
|
+
* when sizing the Permit2 permit.
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeCctpFastFee(entry: IrisFeeEntry, amountUsdcUnits: bigint): bigint;
|
|
49
|
+
//# sourceMappingURL=fee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.d.ts","sourceRoot":"","sources":["../../src/cctp/fee.ts"],"names":[],"mappings":"AAaA,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CA0BvB;AAUD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAevB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,GACtB,MAAM,CAIR"}
|
package/dist/cctp/fee.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCTP v2 fast-transfer fee query against Circle's IRIS API.
|
|
3
|
+
*
|
|
4
|
+
* The fast-transfer fee (`minimumFee`, in basis points × 100) is deducted
|
|
5
|
+
* from the minted amount on the destination chain whenever the burn's
|
|
6
|
+
* `minFinalityThreshold ≤ 1000`. We need to query it to know precisely
|
|
7
|
+
* how much USDC will arrive so the Permit2 signature pulls the right
|
|
8
|
+
* amount and the Multicall doesn't underflow.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors the Rust backend's `swap/src/cctp.rs::compute_max_fee`.
|
|
11
|
+
*/
|
|
12
|
+
import { FINALITY_FAST, IRIS_API_MAINNET } from "./constants.js";
|
|
13
|
+
/**
|
|
14
|
+
* Fetch the fee entry for the given source → destination pair and
|
|
15
|
+
* finality threshold. Returns the raw IRIS shape — callers that want
|
|
16
|
+
* an applied maxFee should pass this to {@link computeCctpFastFee}.
|
|
17
|
+
*/
|
|
18
|
+
export async function fetchCctpFee(options) {
|
|
19
|
+
const { sourceDomain, destinationDomain, finalityThreshold = FINALITY_FAST, irisApiUrl = IRIS_API_MAINNET, signal, } = options;
|
|
20
|
+
const url = `${irisApiUrl}/v2/burn/USDC/fees/${sourceDomain}/${destinationDomain}?forward=true`;
|
|
21
|
+
const response = await fetch(url, { signal });
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`IRIS fee lookup failed: ${response.status} ${response.statusText}`);
|
|
24
|
+
}
|
|
25
|
+
const entries = (await response.json());
|
|
26
|
+
const entry = entries.find((e) => e.finalityThreshold === finalityThreshold) ??
|
|
27
|
+
entries[0];
|
|
28
|
+
if (!entry) {
|
|
29
|
+
throw new Error(`IRIS returned no fee entries for ${sourceDomain}→${destinationDomain}`);
|
|
30
|
+
}
|
|
31
|
+
return entry;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Tiny TTL cache for CCTP fee lookups. The IRIS fee is effectively
|
|
35
|
+
* constant per-pair minute-to-minute — re-fetching on every quote
|
|
36
|
+
* keystroke would bomb IRIS for no gain. 60s TTL is ample.
|
|
37
|
+
*/
|
|
38
|
+
const feeCache = new Map();
|
|
39
|
+
const FEE_CACHE_TTL_MS = 60_000;
|
|
40
|
+
/**
|
|
41
|
+
* Cached variant of {@link fetchCctpFee}. Multiple callers within a
|
|
42
|
+
* 60-second window share a single IRIS round-trip per source→dest pair.
|
|
43
|
+
*/
|
|
44
|
+
export async function getCachedCctpFee(options) {
|
|
45
|
+
const { sourceDomain, destinationDomain, finalityThreshold = FINALITY_FAST, irisApiUrl = IRIS_API_MAINNET, } = options;
|
|
46
|
+
const key = `${sourceDomain}-${destinationDomain}-${finalityThreshold}-${irisApiUrl}`;
|
|
47
|
+
const cached = feeCache.get(key);
|
|
48
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
49
|
+
return cached.entry;
|
|
50
|
+
}
|
|
51
|
+
const entry = await fetchCctpFee(options);
|
|
52
|
+
feeCache.set(key, { entry, expiresAt: Date.now() + FEE_CACHE_TTL_MS });
|
|
53
|
+
return entry;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Apply IRIS's `minimumFee` (basis points) to an amount in USDC smallest
|
|
57
|
+
* units, matching the Rust backend's formula:
|
|
58
|
+
* protocolFee = amount × round(minimumFee × 100) ÷ 1_000_000
|
|
59
|
+
*
|
|
60
|
+
* Adds a conservative 20% buffer to absorb rounding drift between quote
|
|
61
|
+
* time and burn time. Return value is the fee in USDC smallest units,
|
|
62
|
+
* suitable for `maxFee` in `depositForBurn` and as the subtracted amount
|
|
63
|
+
* when sizing the Permit2 permit.
|
|
64
|
+
*/
|
|
65
|
+
export function computeCctpFastFee(entry, amountUsdcUnits) {
|
|
66
|
+
const bpsScaled = Math.round(entry.minimumFee * 100);
|
|
67
|
+
const protocolFee = (amountUsdcUnits * BigInt(bpsScaled)) / 1000000n;
|
|
68
|
+
return (protocolFee * 120n) / 100n;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=fee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.js","sourceRoot":"","sources":["../../src/cctp/fee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA+BjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAAG,aAAa,EACjC,UAAU,GAAG,gBAAgB,EAC7B,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,GAAG,UAAU,sBAAsB,YAAY,IAAI,iBAAiB,eAAe,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;IAC1D,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,iBAAiB,CAAC;QAC9D,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oCAAoC,YAAY,IAAI,iBAAiB,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsD,CAAC;AAC/E,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA4B;IAE5B,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAAG,aAAa,EACjC,UAAU,GAAG,gBAAgB,GAC9B,GAAG,OAAO,CAAC;IACZ,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,iBAAiB,IAAI,iBAAiB,IAAI,UAAU,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,eAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,QAAU,CAAC;IACvE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC"}
|
package/dist/cctp/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { type AttestationResult, type FetchAttestationOptions, fetchAttestation, type TrackCctpMessageOptions, trackCctpMessage, } from "./attestation.js";
|
|
10
10
|
export { CCTP_DOMAINS, type CctpChainName, EURC_ADDRESSES, FINALITY_FAST, FINALITY_STANDARD, FORWARDING_FEE_ETHEREUM, FORWARDING_FEE_OTHER, FORWARDING_SERVICE_HOOK_DATA, IRIS_API_MAINNET, IRIS_API_TESTNET, MESSAGE_TRANSMITTER_ADDRESSES, MESSAGE_TRANSMITTER_V2, TOKEN_MESSENGER_ADDRESSES, TOKEN_MESSENGER_V2, USAT_ADDRESSES, USDC_ADDRESSES, } from "./constants.js";
|
|
11
|
+
export { computeCctpFastFee, type FetchCctpFeeOptions, fetchCctpFee, getCachedCctpFee, type IrisFeeEntry, type IrisForwardFeeTiers, } from "./fee.js";
|
|
11
12
|
export type { AttestationResponse, AttestationStatus, BridgeParams, BurnResult, CctpMessageResult, CctpMessageStatus, MintResult, } from "./types.js";
|
|
12
|
-
export { addressToBytes32, bytes32ToAddress, getDomain, needsBridge, } from "./utils.js";
|
|
13
|
+
export { addressToBytes32, bytes32ToAddress, getDomain, isValidSolanaAddress, needsBridge, solanaAddressToBytes32, } from "./utils.js";
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cctp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cctp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cctp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,YAAY,EACZ,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/cctp/index.js
CHANGED
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { fetchAttestation, trackCctpMessage, } from "./attestation.js";
|
|
10
10
|
export { CCTP_DOMAINS, EURC_ADDRESSES, FINALITY_FAST, FINALITY_STANDARD, FORWARDING_FEE_ETHEREUM, FORWARDING_FEE_OTHER, FORWARDING_SERVICE_HOOK_DATA, IRIS_API_MAINNET, IRIS_API_TESTNET, MESSAGE_TRANSMITTER_ADDRESSES, MESSAGE_TRANSMITTER_V2, TOKEN_MESSENGER_ADDRESSES, TOKEN_MESSENGER_V2, USAT_ADDRESSES, USDC_ADDRESSES, } from "./constants.js";
|
|
11
|
-
export {
|
|
11
|
+
export { computeCctpFastFee, fetchCctpFee, getCachedCctpFee, } from "./fee.js";
|
|
12
|
+
export { addressToBytes32, bytes32ToAddress, getDomain, isValidSolanaAddress, needsBridge, solanaAddressToBytes32, } from "./utils.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/cctp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cctp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,gBAAgB,EAEhB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EAEZ,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cctp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,gBAAgB,EAEhB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EAEZ,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAElB,YAAY,EACZ,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAWlB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/cctp/utils.d.ts
CHANGED
|
@@ -26,4 +26,19 @@ export declare function getDomain(chainName: string): number | undefined;
|
|
|
26
26
|
* @returns true if CCTP bridging is needed
|
|
27
27
|
*/
|
|
28
28
|
export declare function needsBridge(sourceChain: string, targetChain: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Validate a Solana address. Solana pubkeys are base58-encoded 32-byte
|
|
31
|
+
* values, typically 32-44 base58 characters. Cheap structural check —
|
|
32
|
+
* does not verify on-curve / system-program semantics.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isValidSolanaAddress(address: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Decode a base58-encoded Solana pubkey into CCTP's 32-byte recipient
|
|
37
|
+
* format. Solana pubkeys are natively 32 bytes — no padding needed.
|
|
38
|
+
*
|
|
39
|
+
* Returns a `0x`-prefixed 64-character hex string (the bytes32 form
|
|
40
|
+
* accepted by Circle's TokenMessenger `mintRecipient` field), so the
|
|
41
|
+
* shape matches `addressToBytes32` for EVM addresses.
|
|
42
|
+
*/
|
|
43
|
+
export declare function solanaAddressToBytes32(address: string): string;
|
|
29
44
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/cctp/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cctp/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cctp/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY9D"}
|
package/dist/cctp/utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CCTP utility functions.
|
|
3
3
|
*/
|
|
4
|
+
import { base58 } from "@scure/base";
|
|
4
5
|
import { CCTP_DOMAINS } from "./constants.js";
|
|
5
6
|
/**
|
|
6
7
|
* Convert an EVM address to CCTP's bytes32 format (left-padded with zeros).
|
|
@@ -47,4 +48,44 @@ export function needsBridge(sourceChain, targetChain) {
|
|
|
47
48
|
const targetDomain = getDomain(targetChain);
|
|
48
49
|
return sourceDomain !== undefined && targetDomain !== undefined;
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Validate a Solana address. Solana pubkeys are base58-encoded 32-byte
|
|
53
|
+
* values, typically 32-44 base58 characters. Cheap structural check —
|
|
54
|
+
* does not verify on-curve / system-program semantics.
|
|
55
|
+
*/
|
|
56
|
+
export function isValidSolanaAddress(address) {
|
|
57
|
+
if (!address)
|
|
58
|
+
return false;
|
|
59
|
+
if (address.length < 32 || address.length > 44)
|
|
60
|
+
return false;
|
|
61
|
+
// Disallow base58-illegal characters early so we don't rely on the
|
|
62
|
+
// decode throwing for obvious junk.
|
|
63
|
+
if (!/^[1-9A-HJ-NP-Za-km-z]+$/.test(address))
|
|
64
|
+
return false;
|
|
65
|
+
try {
|
|
66
|
+
return base58.decode(address).length === 32;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Decode a base58-encoded Solana pubkey into CCTP's 32-byte recipient
|
|
74
|
+
* format. Solana pubkeys are natively 32 bytes — no padding needed.
|
|
75
|
+
*
|
|
76
|
+
* Returns a `0x`-prefixed 64-character hex string (the bytes32 form
|
|
77
|
+
* accepted by Circle's TokenMessenger `mintRecipient` field), so the
|
|
78
|
+
* shape matches `addressToBytes32` for EVM addresses.
|
|
79
|
+
*/
|
|
80
|
+
export function solanaAddressToBytes32(address) {
|
|
81
|
+
const decoded = base58.decode(address);
|
|
82
|
+
if (decoded.length !== 32) {
|
|
83
|
+
throw new Error(`Solana pubkey must decode to 32 bytes, got ${decoded.length} for ${address}`);
|
|
84
|
+
}
|
|
85
|
+
let hex = "0x";
|
|
86
|
+
for (const byte of decoded) {
|
|
87
|
+
hex += byte.toString(16).padStart(2, "0");
|
|
88
|
+
}
|
|
89
|
+
return hex;
|
|
90
|
+
}
|
|
50
91
|
//# sourceMappingURL=utils.js.map
|
package/dist/cctp/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cctp/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAElE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,YAAY,CAAC,SAA0B,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,WAAmB;IAClE,IAAI,WAAW,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC;AAClE,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cctp/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAElE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,YAAY,CAAC,SAA0B,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,WAAmB;IAClE,IAAI,WAAW,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7D,mEAAmE;IACnE,oCAAoC;IACpC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,8CAA8C,OAAO,CAAC,MAAM,QAAQ,OAAO,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type BridgeChainIdentifier, type BridgeConfig, type BridgeParams, type BridgeResult, type EstimateResult } from "@circle-fin/bridge-kit";
|
|
2
|
+
type BridgeKitAdapter = BridgeParams["from"]["adapter"];
|
|
3
|
+
type BridgeEventPayload = any;
|
|
4
|
+
export interface BridgeUsdcParams {
|
|
5
|
+
/** Source chain + pre-built bridge-kit adapter. */
|
|
6
|
+
source: {
|
|
7
|
+
adapter: BridgeKitAdapter;
|
|
8
|
+
chain: BridgeChainIdentifier;
|
|
9
|
+
/** Required when the adapter is developer-controlled. */
|
|
10
|
+
address?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Destination. Adapter may be the same instance as `source.adapter` if the
|
|
14
|
+
* user holds the same key on both chains (the common case).
|
|
15
|
+
*/
|
|
16
|
+
destination: {
|
|
17
|
+
adapter: BridgeKitAdapter;
|
|
18
|
+
chain: BridgeChainIdentifier;
|
|
19
|
+
/** Required when the adapter is developer-controlled. */
|
|
20
|
+
address?: string;
|
|
21
|
+
/** Send to a different EVM address than the adapter's own. */
|
|
22
|
+
recipientAddress?: string;
|
|
23
|
+
};
|
|
24
|
+
/** Human-readable USDC amount, e.g. "10.50". */
|
|
25
|
+
amount: string;
|
|
26
|
+
config?: BridgeConfig;
|
|
27
|
+
/** Subscribe to all bridge-kit lifecycle events (approve/burn/attest/mint). */
|
|
28
|
+
onEvent?: (event: BridgeEventPayload) => void;
|
|
29
|
+
/** Subscribe to a single lifecycle event. */
|
|
30
|
+
onApprove?: (event: BridgeEventPayload) => void;
|
|
31
|
+
onBurn?: (event: BridgeEventPayload) => void;
|
|
32
|
+
onAttestation?: (event: BridgeEventPayload) => void;
|
|
33
|
+
onMint?: (event: BridgeEventPayload) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Bridge USDC cross-chain via Circle CCTPv2.
|
|
37
|
+
*
|
|
38
|
+
* Runs the full approve → burn → attest → mint flow in one call. Returns a
|
|
39
|
+
* `BridgeResult` whose `state` is `'success'` or `'error'`; inspect `steps`
|
|
40
|
+
* for per-action details. Recoverable failures can be resumed with
|
|
41
|
+
* `BridgeKit.retry()` — see bridge-kit's retry guide.
|
|
42
|
+
*/
|
|
43
|
+
export declare function bridgeUsdc(params: BridgeUsdcParams): Promise<BridgeResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Bridge USDC from any CCTPv2-supported chain into Arbitrum.
|
|
46
|
+
*
|
|
47
|
+
* Convenience for the common Lendaswap flow: land USDC on Arbitrum so the
|
|
48
|
+
* existing Arbitrum USDC → BTC HTLC swap can run against it.
|
|
49
|
+
*/
|
|
50
|
+
export declare function bridgeUsdcToArbitrum(params: Omit<BridgeUsdcParams, "destination"> & {
|
|
51
|
+
destination: Omit<BridgeUsdcParams["destination"], "chain"> & {
|
|
52
|
+
chain?: BridgeChainIdentifier;
|
|
53
|
+
};
|
|
54
|
+
}): Promise<BridgeResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Estimate CCTPv2 bridge costs (protocol fee + gas on source and destination)
|
|
57
|
+
* without executing anything. Requires an adapter on both sides because gas
|
|
58
|
+
* estimation depends on the specific wallet/account.
|
|
59
|
+
*/
|
|
60
|
+
export declare function estimateUsdcBridgeFees(params: Omit<BridgeUsdcParams, "onEvent" | "onApprove" | "onBurn" | "onAttestation" | "onMint">): Promise<EstimateResult>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/cctp-bridge/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AAGxD,KAAK,kBAAkB,GAAG,GAAG,CAAC;AAE9B,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,MAAM,EAAE;QACN,OAAO,EAAE,gBAAgB,CAAC;QAC1B,KAAK,EAAE,qBAAqB,CAAC;QAC7B,yDAAyD;QACzD,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,WAAW,EAAE;QACX,OAAO,EAAE,gBAAgB,CAAC;QAC1B,KAAK,EAAE,qBAAqB,CAAC;QAC7B,yDAAyD;QACzD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,8DAA8D;QAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,6CAA6C;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG;IAC9C,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG;QAC5D,KAAK,CAAC,EAAE,qBAAqB,CAAC;KAC/B,CAAC;CACH,GACA,OAAO,CAAC,YAAY,CAAC,CAQvB;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,IAAI,CACV,gBAAgB,EAChB,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAQ,CAChE,GACA,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { BridgeChain, BridgeKit, } from "@circle-fin/bridge-kit";
|
|
2
|
+
/**
|
|
3
|
+
* Bridge USDC cross-chain via Circle CCTPv2.
|
|
4
|
+
*
|
|
5
|
+
* Runs the full approve → burn → attest → mint flow in one call. Returns a
|
|
6
|
+
* `BridgeResult` whose `state` is `'success'` or `'error'`; inspect `steps`
|
|
7
|
+
* for per-action details. Recoverable failures can be resumed with
|
|
8
|
+
* `BridgeKit.retry()` — see bridge-kit's retry guide.
|
|
9
|
+
*/
|
|
10
|
+
export async function bridgeUsdc(params) {
|
|
11
|
+
const kit = new BridgeKit();
|
|
12
|
+
attachListeners(kit, params);
|
|
13
|
+
return kit.bridge(buildBridgeParams(params));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bridge USDC from any CCTPv2-supported chain into Arbitrum.
|
|
17
|
+
*
|
|
18
|
+
* Convenience for the common Lendaswap flow: land USDC on Arbitrum so the
|
|
19
|
+
* existing Arbitrum USDC → BTC HTLC swap can run against it.
|
|
20
|
+
*/
|
|
21
|
+
export async function bridgeUsdcToArbitrum(params) {
|
|
22
|
+
return bridgeUsdc({
|
|
23
|
+
...params,
|
|
24
|
+
destination: {
|
|
25
|
+
...params.destination,
|
|
26
|
+
chain: params.destination.chain ?? BridgeChain.Arbitrum,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Estimate CCTPv2 bridge costs (protocol fee + gas on source and destination)
|
|
32
|
+
* without executing anything. Requires an adapter on both sides because gas
|
|
33
|
+
* estimation depends on the specific wallet/account.
|
|
34
|
+
*/
|
|
35
|
+
export async function estimateUsdcBridgeFees(params) {
|
|
36
|
+
const kit = new BridgeKit();
|
|
37
|
+
return kit.estimate(buildBridgeParams(params));
|
|
38
|
+
}
|
|
39
|
+
function buildBridgeParams(params) {
|
|
40
|
+
const from = {
|
|
41
|
+
adapter: params.source.adapter,
|
|
42
|
+
chain: params.source.chain,
|
|
43
|
+
...(params.source.address ? { address: params.source.address } : {}),
|
|
44
|
+
};
|
|
45
|
+
const to = {
|
|
46
|
+
adapter: params.destination.adapter,
|
|
47
|
+
chain: params.destination.chain,
|
|
48
|
+
...(params.destination.address
|
|
49
|
+
? { address: params.destination.address }
|
|
50
|
+
: {}),
|
|
51
|
+
...(params.destination.recipientAddress
|
|
52
|
+
? { recipientAddress: params.destination.recipientAddress }
|
|
53
|
+
: {}),
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
from,
|
|
57
|
+
to,
|
|
58
|
+
amount: params.amount,
|
|
59
|
+
...(params.config ? { config: params.config } : {}),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function attachListeners(kit, params) {
|
|
63
|
+
if (params.onEvent)
|
|
64
|
+
kit.on("*", params.onEvent);
|
|
65
|
+
if (params.onApprove)
|
|
66
|
+
kit.on("approve", params.onApprove);
|
|
67
|
+
if (params.onBurn)
|
|
68
|
+
kit.on("burn", params.onBurn);
|
|
69
|
+
if (params.onAttestation)
|
|
70
|
+
kit.on("fetchAttestation", params.onAttestation);
|
|
71
|
+
if (params.onMint)
|
|
72
|
+
kit.on("mint", params.onMint);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/cctp-bridge/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGX,SAAS,GAIV,MAAM,wBAAwB,CAAC;AAuChC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAIC;IAED,OAAO,UAAU,CAAC;QAChB,GAAG,MAAM;QACT,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;YACrB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ;SACxD;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAGC;IAED,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwB;IACjD,MAAM,IAAI,GAAG;QACX,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;IAE1B,MAAM,EAAE,GAAG;QACT,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO;QACnC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;QAC/B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB;YACrC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;KACc,CAAC;IAExB,OAAO;QACL,IAAI;QACJ,EAAE;QACF,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAc,EAAE,MAAwB;IAC/D,IAAI,MAAM,CAAC,OAAO;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS;QAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,aAAa;QAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCTP bridge (source-side) — wraps Circle's @circle-fin/bridge-kit.
|
|
3
|
+
*
|
|
4
|
+
* Used for bridging USDC from any CCTPv2-supported chain into Arbitrum,
|
|
5
|
+
* so it can feed into an Arbitrum USDC → BTC swap. Exposed as a subpath
|
|
6
|
+
* export so bridge-kit + its viem adapter stay optional peer deps; consumers
|
|
7
|
+
* that don't import from `@lendasat/lendaswap-sdk-pure/cctp-bridge` don't
|
|
8
|
+
* pay the bundle cost.
|
|
9
|
+
*
|
|
10
|
+
* Attestation tracking for the *target* side of an existing swap (Circle's
|
|
11
|
+
* forwarding service) still lives in `../cctp` — that flow isn't what
|
|
12
|
+
* bridge-kit drives.
|
|
13
|
+
*/
|
|
14
|
+
export type { AdapterContext, BridgeChainIdentifier, BridgeConfig, BridgeParams, EstimateResult, } from "@circle-fin/bridge-kit";
|
|
15
|
+
export { BridgeChain, BridgeKit, type BridgeResult, TransferSpeed, } from "@circle-fin/bridge-kit";
|
|
16
|
+
export { type BridgeUsdcParams, bridgeUsdc, bridgeUsdcToArbitrum, estimateUsdcBridgeFees, } from "./bridge.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cctp-bridge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,WAAW,EACX,SAAS,EACT,KAAK,YAAY,EACjB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,gBAAgB,EACrB,UAAU,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCTP bridge (source-side) — wraps Circle's @circle-fin/bridge-kit.
|
|
3
|
+
*
|
|
4
|
+
* Used for bridging USDC from any CCTPv2-supported chain into Arbitrum,
|
|
5
|
+
* so it can feed into an Arbitrum USDC → BTC swap. Exposed as a subpath
|
|
6
|
+
* export so bridge-kit + its viem adapter stay optional peer deps; consumers
|
|
7
|
+
* that don't import from `@lendasat/lendaswap-sdk-pure/cctp-bridge` don't
|
|
8
|
+
* pay the bundle cost.
|
|
9
|
+
*
|
|
10
|
+
* Attestation tracking for the *target* side of an existing swap (Circle's
|
|
11
|
+
* forwarding service) still lives in `../cctp` — that flow isn't what
|
|
12
|
+
* bridge-kit drives.
|
|
13
|
+
*/
|
|
14
|
+
export { BridgeChain, BridgeKit, TransferSpeed, } from "@circle-fin/bridge-kit";
|
|
15
|
+
export { bridgeUsdc, bridgeUsdcToArbitrum, estimateUsdcBridgeFees, } from "./bridge.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cctp-bridge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,EACL,WAAW,EACX,SAAS,EAET,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,UAAU,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|