@wormhole-foundation/sdk-evm-cctp 4.22.0 → 5.0.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.
Files changed (62) hide show
  1. package/package.json +12 -30
  2. package/dist/cjs/automaticCircleBridge.d.ts +0 -25
  3. package/dist/cjs/automaticCircleBridge.d.ts.map +0 -1
  4. package/dist/cjs/automaticCircleBridge.js +0 -75
  5. package/dist/cjs/automaticCircleBridge.js.map +0 -1
  6. package/dist/cjs/circleBridge.d.ts +0 -27
  7. package/dist/cjs/circleBridge.d.ts.map +0 -1
  8. package/dist/cjs/circleBridge.js +0 -124
  9. package/dist/cjs/circleBridge.js.map +0 -1
  10. package/dist/cjs/ethers-contracts/CircleRelayer.d.ts +0 -491
  11. package/dist/cjs/ethers-contracts/CircleRelayer.d.ts.map +0 -1
  12. package/dist/cjs/ethers-contracts/CircleRelayer.js +0 -3
  13. package/dist/cjs/ethers-contracts/CircleRelayer.js.map +0 -1
  14. package/dist/cjs/ethers-contracts/ICircleIntegration.d.ts +0 -292
  15. package/dist/cjs/ethers-contracts/ICircleIntegration.d.ts.map +0 -1
  16. package/dist/cjs/ethers-contracts/ICircleIntegration.js +0 -3
  17. package/dist/cjs/ethers-contracts/ICircleIntegration.js.map +0 -1
  18. package/dist/cjs/ethers-contracts/circle_abis/MessageTransmitter.d.ts +0 -474
  19. package/dist/cjs/ethers-contracts/circle_abis/MessageTransmitter.d.ts.map +0 -1
  20. package/dist/cjs/ethers-contracts/circle_abis/MessageTransmitter.js +0 -3
  21. package/dist/cjs/ethers-contracts/circle_abis/MessageTransmitter.js.map +0 -1
  22. package/dist/cjs/ethers-contracts/circle_abis/TokenMessenger.d.ts +0 -363
  23. package/dist/cjs/ethers-contracts/circle_abis/TokenMessenger.d.ts.map +0 -1
  24. package/dist/cjs/ethers-contracts/circle_abis/TokenMessenger.js +0 -3
  25. package/dist/cjs/ethers-contracts/circle_abis/TokenMessenger.js.map +0 -1
  26. package/dist/cjs/ethers-contracts/circle_abis/index.d.ts +0 -5
  27. package/dist/cjs/ethers-contracts/circle_abis/index.d.ts.map +0 -1
  28. package/dist/cjs/ethers-contracts/circle_abis/index.js +0 -33
  29. package/dist/cjs/ethers-contracts/circle_abis/index.js.map +0 -1
  30. package/dist/cjs/ethers-contracts/common.d.ts +0 -51
  31. package/dist/cjs/ethers-contracts/common.d.ts.map +0 -1
  32. package/dist/cjs/ethers-contracts/common.js +0 -3
  33. package/dist/cjs/ethers-contracts/common.js.map +0 -1
  34. package/dist/cjs/ethers-contracts/factories/CircleRelayer__factory.d.ts +0 -638
  35. package/dist/cjs/ethers-contracts/factories/CircleRelayer__factory.d.ts.map +0 -1
  36. package/dist/cjs/ethers-contracts/factories/CircleRelayer__factory.js +0 -839
  37. package/dist/cjs/ethers-contracts/factories/CircleRelayer__factory.js.map +0 -1
  38. package/dist/cjs/ethers-contracts/factories/ICircleIntegration__factory.d.ts +0 -463
  39. package/dist/cjs/ethers-contracts/factories/ICircleIntegration__factory.d.ts.map +0 -1
  40. package/dist/cjs/ethers-contracts/factories/ICircleIntegration__factory.js +0 -618
  41. package/dist/cjs/ethers-contracts/factories/ICircleIntegration__factory.js.map +0 -1
  42. package/dist/cjs/ethers-contracts/factories/MessageTransmitter__factory.d.ts +0 -573
  43. package/dist/cjs/ethers-contracts/factories/MessageTransmitter__factory.d.ts.map +0 -1
  44. package/dist/cjs/ethers-contracts/factories/MessageTransmitter__factory.js +0 -757
  45. package/dist/cjs/ethers-contracts/factories/MessageTransmitter__factory.js.map +0 -1
  46. package/dist/cjs/ethers-contracts/factories/TokenMessenger__factory.d.ts +0 -452
  47. package/dist/cjs/ethers-contracts/factories/TokenMessenger__factory.d.ts.map +0 -1
  48. package/dist/cjs/ethers-contracts/factories/TokenMessenger__factory.js +0 -597
  49. package/dist/cjs/ethers-contracts/factories/TokenMessenger__factory.js.map +0 -1
  50. package/dist/cjs/ethers-contracts/factories/index.d.ts +0 -4
  51. package/dist/cjs/ethers-contracts/factories/index.d.ts.map +0 -1
  52. package/dist/cjs/ethers-contracts/factories/index.js +0 -20
  53. package/dist/cjs/ethers-contracts/factories/index.js.map +0 -1
  54. package/dist/cjs/ethers-contracts/index.d.ts +0 -4
  55. package/dist/cjs/ethers-contracts/index.d.ts.map +0 -1
  56. package/dist/cjs/ethers-contracts/index.js +0 -20
  57. package/dist/cjs/ethers-contracts/index.js.map +0 -1
  58. package/dist/cjs/index.d.ts +0 -4
  59. package/dist/cjs/index.d.ts.map +0 -1
  60. package/dist/cjs/index.js +0 -39
  61. package/dist/cjs/index.js.map +0 -1
  62. package/dist/cjs/package.json +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wormhole-foundation/sdk-evm-cctp",
3
- "version": "4.22.0",
3
+ "version": "5.0.0-beta.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wormhole-foundation/wormhole-sdk-ts.git"
@@ -13,14 +13,13 @@
13
13
  "test": "tests"
14
14
  },
15
15
  "license": "Apache-2.0",
16
- "main": "./dist/cjs/index.js",
17
- "types": "./dist/cjs/index.d.ts",
16
+ "main": "./dist/esm/index.js",
17
+ "types": "./dist/esm/index.d.ts",
18
18
  "module": "./dist/esm/index.js",
19
19
  "author": "",
20
20
  "description": "SDK for EVM chains, used in conjunction with @wormhole-foundation/sdk",
21
21
  "files": [
22
- "dist/esm",
23
- "dist/cjs"
22
+ "dist/esm"
24
23
  ],
25
24
  "keywords": [
26
25
  "wormhole",
@@ -36,48 +35,31 @@
36
35
  "evm"
37
36
  ],
38
37
  "engines": {
39
- "node": ">=16"
38
+ "node": ">=20.19"
40
39
  },
41
40
  "sideEffects": [
42
- "./dist/cjs/index.js",
43
41
  "./dist/esm/index.js"
44
42
  ],
45
43
  "scripts": {
46
- "build:cjs": "tsc -p ./tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
47
44
  "build:esm": "tsc -p ./tsconfig.esm.json",
48
- "build": "npm run build:esm && npm run build:cjs",
45
+ "build": "npm run build:esm",
49
46
  "rebuild": "npm run clean && npm run build",
50
47
  "clean": "rm -rf ./dist && rm -rf ./.turbo",
51
48
  "lint": "npm run prettier && eslint --fix ./src --ext .ts",
52
49
  "prettier": "prettier --write ./src"
53
50
  },
54
51
  "dependencies": {
55
- "@wormhole-foundation/sdk-connect": "4.22.0",
56
- "@wormhole-foundation/sdk-evm": "4.22.0",
57
- "@wormhole-foundation/sdk-evm-core": "4.22.0",
52
+ "@wormhole-foundation/sdk-connect": "5.0.0-beta.0",
53
+ "@wormhole-foundation/sdk-evm": "5.0.0-beta.0",
54
+ "@wormhole-foundation/sdk-evm-core": "5.0.0-beta.0",
58
55
  "ethers": "^6.5.1"
59
56
  },
60
57
  "type": "module",
61
58
  "exports": {
62
59
  ".": {
63
- "react-native": {
64
- "import": "./dist/esm/index.js",
65
- "require": "./dist/cjs/index.js",
66
- "types": "./dist/cjs/index.d.ts",
67
- "default": "./dist/cjs/index.js"
68
- },
69
- "import": {
70
- "types": "./dist/esm/index.d.ts",
71
- "default": "./dist/esm/index.js"
72
- },
73
- "require": {
74
- "types": "./dist/cjs/index.d.ts",
75
- "default": "./dist/cjs/index.js"
76
- },
77
- "default": {
78
- "types": "./dist/cjs/index.d.ts",
79
- "default": "./dist/cjs/index.js"
80
- }
60
+ "types": "./dist/esm/index.d.ts",
61
+ "import": "./dist/esm/index.js",
62
+ "default": "./dist/esm/index.js"
81
63
  }
82
64
  }
83
65
  }
@@ -1,25 +0,0 @@
1
- import type { AccountAddress, AutomaticCircleBridge, Chain, ChainAddress, ChainsConfig, Contracts, Network, Platform } from '@wormhole-foundation/sdk-connect';
2
- import type { Provider } from 'ethers';
3
- import type { CircleRelayer } from './ethers-contracts/index.js';
4
- import type { EvmChains } from '@wormhole-foundation/sdk-evm';
5
- import { EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
6
- import '@wormhole-foundation/sdk-evm-tokenbridge';
7
- import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
8
- export declare class EvmAutomaticCircleBridge<N extends Network, C extends EvmChains> implements AutomaticCircleBridge<N, C> {
9
- readonly network: N;
10
- readonly chain: C;
11
- readonly provider: Provider;
12
- readonly contracts: Contracts;
13
- readonly circleRelayer: CircleRelayer;
14
- readonly chainId: bigint;
15
- readonly tokenAddr: string;
16
- readonly core: EvmWormholeCore<N, C>;
17
- constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
18
- static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmAutomaticCircleBridge<N, EvmChains>>;
19
- getRelayerFee(destination: Chain): Promise<bigint>;
20
- transfer(sender: AccountAddress<C>, recipient: ChainAddress, amount: bigint, nativeGas?: bigint): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
21
- private createUnsignedTx;
22
- nativeTokenAmount(amount: bigint): Promise<bigint>;
23
- maxSwapAmount(): Promise<bigint>;
24
- }
25
- //# sourceMappingURL=automaticCircleBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticCircleBridge.d.ts","sourceRoot":"","sources":["../../src/automaticCircleBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACT,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CAC1E,YAAW,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;IAUpC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAX/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAK1B,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WAmClB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAa5C,aAAa,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjD,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA+C/C,OAAO,CAAC,gBAAgB;IAclB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAGvC"}
@@ -1,75 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EvmAutomaticCircleBridge = void 0;
4
- const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
- const index_js_1 = require("./index.js");
6
- const sdk_evm_1 = require("@wormhole-foundation/sdk-evm");
7
- require("@wormhole-foundation/sdk-evm-tokenbridge");
8
- const sdk_evm_core_1 = require("@wormhole-foundation/sdk-evm-core");
9
- class EvmAutomaticCircleBridge {
10
- network;
11
- chain;
12
- provider;
13
- contracts;
14
- circleRelayer;
15
- chainId;
16
- tokenAddr;
17
- core;
18
- // https://github.com/wormhole-foundation/wormhole-connect/blob/development/sdk/src/contexts/eth/context.ts#L379
19
- constructor(network, chain, provider, contracts) {
20
- this.network = network;
21
- this.chain = chain;
22
- this.provider = provider;
23
- this.contracts = contracts;
24
- if (network === 'Devnet')
25
- throw new Error('AutomaticCircleBridge not supported on Devnet');
26
- this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
27
- const relayerAddress = this.contracts.cctp?.wormholeRelayer;
28
- if (!relayerAddress)
29
- throw new Error(`Wormhole Circle relayer contract for domain ${chain} not found`);
30
- this.circleRelayer = index_js_1.ethers_contracts.CircleRelayer__factory.connect(relayerAddress, provider);
31
- const tokenAddr = sdk_connect_1.circle.usdcContract.get(this.network, this.chain);
32
- if (!tokenAddr)
33
- throw new Error(`USDC contract not found for ${this.network} ${this.chain}`);
34
- this.tokenAddr = tokenAddr;
35
- this.core = new sdk_evm_core_1.EvmWormholeCore(network, chain, provider, contracts);
36
- }
37
- static async fromRpc(provider, config) {
38
- const [network, chain] = await sdk_evm_1.EvmPlatform.chainFromRpc(provider);
39
- const conf = config[chain];
40
- if (conf.network !== network)
41
- throw new Error(`Network mismatch: ${conf.network} != ${network}`);
42
- return new EvmAutomaticCircleBridge(network, chain, provider, conf.contracts);
43
- }
44
- async getRelayerFee(destination) {
45
- return this.circleRelayer.relayerFee((0, sdk_connect_1.toChainId)(destination), this.tokenAddr);
46
- }
47
- async *transfer(sender, recipient, amount, nativeGas) {
48
- const senderAddr = new sdk_evm_1.EvmAddress(sender).toString();
49
- const recipientChainId = (0, sdk_connect_1.chainToChainId)(recipient.chain);
50
- const recipientAddress = recipient.address
51
- .toUniversalAddress()
52
- .toUint8Array();
53
- const nativeTokenGas = nativeGas ? nativeGas : 0n;
54
- const tokenContract = sdk_evm_1.EvmPlatform.getTokenImplementation(this.provider, this.tokenAddr);
55
- const allowance = await tokenContract.allowance(senderAddr, this.circleRelayer.target);
56
- if (allowance < amount) {
57
- const txReq = await tokenContract.approve.populateTransaction(this.circleRelayer.target, amount);
58
- yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'ERC20.approve of CircleRelayer');
59
- }
60
- const messageFee = await this.core.getMessageFee();
61
- const txReq = await this.circleRelayer.transferTokensWithRelay.populateTransaction(this.tokenAddr, amount, nativeTokenGas, recipientChainId, recipientAddress, { value: messageFee });
62
- yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'CircleRelayer.transfer');
63
- }
64
- createUnsignedTx(txReq, description, parallelizable = false) {
65
- return new sdk_evm_1.EvmUnsignedTransaction((0, sdk_evm_1.addChainId)(txReq, this.chainId), this.network, this.chain, description, parallelizable);
66
- }
67
- async nativeTokenAmount(amount) {
68
- return await this.circleRelayer.calculateNativeSwapAmountOut(this.tokenAddr, amount);
69
- }
70
- async maxSwapAmount() {
71
- return await this.circleRelayer.calculateMaxSwapAmountIn(this.tokenAddr);
72
- }
73
- }
74
- exports.EvmAutomaticCircleBridge = EvmAutomaticCircleBridge;
75
- //# sourceMappingURL=automaticCircleBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticCircleBridge.js","sourceRoot":"","sources":["../../src/automaticCircleBridge.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import type { AccountAddress, ChainAddress, ChainsConfig, CircleTransferMessage, Contracts, Network, Platform } from '@wormhole-foundation/sdk-connect';
2
- import { CircleBridge } from '@wormhole-foundation/sdk-connect';
3
- import type { MessageTransmitter, TokenMessenger } from './ethers-contracts/index.js';
4
- import type { EvmChains } from '@wormhole-foundation/sdk-evm';
5
- import { EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
6
- import type { Provider } from 'ethers';
7
- export declare class EvmCircleBridge<N extends Network, C extends EvmChains> implements CircleBridge<N, C> {
8
- readonly network: N;
9
- readonly chain: C;
10
- readonly provider: Provider;
11
- readonly contracts: Contracts;
12
- readonly chainId: bigint;
13
- readonly circleChainId: number;
14
- readonly msgTransmitter: MessageTransmitter.MessageTransmitter;
15
- readonly tokenMessenger: TokenMessenger.TokenMessenger;
16
- readonly tokenEventHash: string;
17
- readonly messageSentEventHash: string;
18
- readonly messageReceivedEventHash: string;
19
- constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
20
- static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, Platform>): Promise<EvmCircleBridge<N, EvmChains>>;
21
- redeem(sender: AccountAddress<C>, message: CircleBridge.Message, attestation: string): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
22
- transfer(sender: AccountAddress<C>, recipient: ChainAddress, amount: bigint): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
23
- isTransferCompleted(message: CircleBridge.Message): Promise<boolean>;
24
- parseTransactionDetails(txid: string): Promise<CircleTransferMessage>;
25
- private createUnsignedTx;
26
- }
27
- //# sourceMappingURL=circleBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circleBridge.d.ts","sourceRoot":"","sources":["../../src/circleBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,QAAQ,EACT,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,YAAY,EAIb,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACf,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAGL,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAkB,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAK3E,qBAAa,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACjE,YAAW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAa3B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAd/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC,kBAAkB,CAAC;IAC/D,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;IAEvD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;WA+ClB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAQlC,MAAM,CACX,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAcxC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,GACb,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA2CzC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpE,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAyD3E,OAAO,CAAC,gBAAgB;CAazB"}
@@ -1,124 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EvmCircleBridge = void 0;
4
- const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
- const sdk_evm_1 = require("@wormhole-foundation/sdk-evm");
6
- const ethers_1 = require("ethers");
7
- const index_js_1 = require("./index.js");
8
- //https://github.com/circlefin/evm-cctp-contracts
9
- class EvmCircleBridge {
10
- network;
11
- chain;
12
- provider;
13
- contracts;
14
- chainId;
15
- circleChainId;
16
- msgTransmitter;
17
- tokenMessenger;
18
- tokenEventHash;
19
- messageSentEventHash;
20
- messageReceivedEventHash;
21
- constructor(network, chain, provider, contracts) {
22
- this.network = network;
23
- this.chain = chain;
24
- this.provider = provider;
25
- this.contracts = contracts;
26
- if (network === 'Devnet')
27
- throw new Error('CircleBridge not supported on Devnet');
28
- this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
29
- const circleChainId = sdk_connect_1.circle.circleChainId.get(network, chain);
30
- if (circleChainId === undefined)
31
- throw new Error(`Circle chain id not found for ${network} ${chain}`);
32
- this.circleChainId = circleChainId;
33
- const msgTransmitterAddress = contracts.cctp?.messageTransmitter;
34
- if (!msgTransmitterAddress)
35
- throw new Error(`Circle Messenger Transmitter contract for domain ${chain} not found`);
36
- this.msgTransmitter = index_js_1.ethers_contracts.MessageTransmitter__factory.connect(msgTransmitterAddress, provider);
37
- const tokenMessengerAddress = contracts.cctp?.tokenMessenger;
38
- if (!tokenMessengerAddress)
39
- throw new Error(`Circle Token Messenger contract for domain ${chain} not found`);
40
- this.tokenMessenger = index_js_1.ethers_contracts.TokenMessenger__factory.connect(tokenMessengerAddress, provider);
41
- this.tokenEventHash =
42
- this.tokenMessenger.getEvent('DepositForBurn').fragment.topicHash;
43
- this.messageSentEventHash =
44
- this.msgTransmitter.getEvent('MessageSent').fragment.topicHash;
45
- this.messageReceivedEventHash =
46
- this.msgTransmitter.getEvent('MessageReceived').fragment.topicHash;
47
- }
48
- static async fromRpc(provider, config) {
49
- const [network, chain] = await sdk_evm_1.EvmPlatform.chainFromRpc(provider);
50
- const conf = config[chain];
51
- if (conf.network !== network)
52
- throw new Error(`Network mismatch: ${conf.network} != ${network}`);
53
- return new EvmCircleBridge(network, chain, provider, conf.contracts);
54
- }
55
- async *redeem(sender, message, attestation) {
56
- const senderAddr = new sdk_evm_1.EvmAddress(sender).toString();
57
- const txReq = await this.msgTransmitter.receiveMessage.populateTransaction(sdk_connect_1.CircleBridge.serialize(message), sdk_connect_1.encoding.hex.decode(attestation));
58
- yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'CircleBridge.redeem');
59
- }
60
- //alternative naming: initiateTransfer
61
- async *transfer(sender, recipient, amount) {
62
- const senderAddr = new sdk_evm_1.EvmAddress(sender).toString();
63
- const recipientAddress = recipient.address
64
- .toUniversalAddress()
65
- .toUint8Array();
66
- const tokenAddr = sdk_connect_1.circle.usdcContract.get(this.network, this.chain);
67
- const tokenContract = sdk_evm_1.EvmPlatform.getTokenImplementation(this.provider, tokenAddr);
68
- const allowance = await tokenContract.allowance(senderAddr, this.tokenMessenger.target);
69
- if (allowance < amount) {
70
- const txReq = await tokenContract.approve.populateTransaction(this.tokenMessenger.target, amount);
71
- yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'ERC20.approve of CircleBridge', false);
72
- }
73
- const txReq = await this.tokenMessenger.depositForBurn.populateTransaction(amount, sdk_connect_1.circle.circleChainId.get(this.network, recipient.chain), recipientAddress, tokenAddr);
74
- yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'CircleBridge.transfer');
75
- }
76
- async isTransferCompleted(message) {
77
- const hash = ethers_1.ethers.keccak256(ethers_1.ethers.solidityPacked(['uint32', 'uint64'], [message.sourceDomain, message.nonce]));
78
- const result = await this.msgTransmitter.usedNonces.staticCall(hash);
79
- return result.toString() === '1';
80
- }
81
- // Fetch the transaction logs and parse the CircleTransferMessage
82
- async parseTransactionDetails(txid) {
83
- const receipt = await this.provider.getTransactionReceipt(txid);
84
- if (!receipt)
85
- throw new Error(`No receipt for ${txid} on ${this.chain}`);
86
- const messageLogs = receipt.logs
87
- .filter((log) => log.topics[0] === this.messageSentEventHash)
88
- .map((messageLog) => {
89
- const { topics, data } = messageLog;
90
- return this.msgTransmitter.interface.parseLog({
91
- topics: topics.slice(),
92
- data: data,
93
- });
94
- })
95
- .filter((l) => !!l);
96
- if (messageLogs.length === 0)
97
- throw new Error(`No log message for message transmitter found in ${txid}`);
98
- // just taking the first one here, will there ever be >1?
99
- if (messageLogs.length > 1)
100
- console.error(`Expected 1 event to be found for transaction, got>${messageLogs.length}}`);
101
- const [messageLog] = messageLogs;
102
- const { message } = messageLog.args;
103
- const [circleMsg, hash] = sdk_connect_1.CircleBridge.deserialize(sdk_connect_1.encoding.hex.decode(message));
104
- const { payload: body } = circleMsg;
105
- const xferSender = body.messageSender;
106
- const xferReceiver = body.mintRecipient;
107
- const sendChain = sdk_connect_1.circle.toCircleChain(this.network, circleMsg.sourceDomain);
108
- const rcvChain = sdk_connect_1.circle.toCircleChain(this.network, circleMsg.destinationDomain);
109
- const token = { chain: sendChain, address: body.burnToken };
110
- return {
111
- from: { chain: sendChain, address: xferSender },
112
- to: { chain: rcvChain, address: xferReceiver },
113
- token: token,
114
- amount: body.amount,
115
- message: circleMsg,
116
- id: { hash },
117
- };
118
- }
119
- createUnsignedTx(txReq, description, parallelizable = false) {
120
- return new sdk_evm_1.EvmUnsignedTransaction((0, sdk_evm_1.addChainId)(txReq, this.chainId), this.network, this.chain, description, parallelizable);
121
- }
122
- }
123
- exports.EvmCircleBridge = EvmCircleBridge;
124
- //# sourceMappingURL=circleBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circleBridge.js","sourceRoot":"","sources":["../../src/circleBridge.ts"],"names":[],"mappings":"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"}