@wormhole-foundation/sdk-evm-tokenbridge 5.2.0 → 6.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.
@@ -1,5 +1,4 @@
1
1
  export * as ethers_contracts from './ethers-contracts/index.js';
2
2
  export * from './tokenBridge.js';
3
- export * from './automaticTokenBridge.js';
4
3
  export * from './executorTokenBridge.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,13 +1,10 @@
1
1
  import { registerProtocol } from '@wormhole-foundation/sdk-connect';
2
2
  import { _platform } from '@wormhole-foundation/sdk-evm';
3
3
  import { EvmTokenBridge } from './tokenBridge.js';
4
- import { EvmAutomaticTokenBridge } from './automaticTokenBridge.js';
5
4
  import { EvmExecutorTokenBridge } from './executorTokenBridge.js';
6
5
  registerProtocol(_platform, 'TokenBridge', EvmTokenBridge);
7
- registerProtocol(_platform, 'AutomaticTokenBridge', EvmAutomaticTokenBridge);
8
6
  registerProtocol(_platform, 'ExecutorTokenBridge', EvmExecutorTokenBridge);
9
7
  export * as ethers_contracts from './ethers-contracts/index.js';
10
8
  export * from './tokenBridge.js';
11
- export * from './automaticTokenBridge.js';
12
9
  export * from './executorTokenBridge.js';
13
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAC3D,gBAAgB,CAAC,SAAS,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;AAC7E,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AAE3E,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAC3D,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AAE3E,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wormhole-foundation/sdk-evm-tokenbridge",
3
- "version": "5.2.0",
3
+ "version": "6.0.0-beta.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wormhole-foundation/wormhole-sdk-ts.git"
@@ -48,9 +48,9 @@
48
48
  "prettier": "prettier --write ./src"
49
49
  },
50
50
  "dependencies": {
51
- "@wormhole-foundation/sdk-connect": "5.2.0",
52
- "@wormhole-foundation/sdk-evm": "5.2.0",
53
- "@wormhole-foundation/sdk-evm-core": "5.2.0",
51
+ "@wormhole-foundation/sdk-connect": "6.0.0-beta.0",
52
+ "@wormhole-foundation/sdk-evm": "6.0.0-beta.0",
53
+ "@wormhole-foundation/sdk-evm-core": "6.0.0-beta.0",
54
54
  "ethers": "^6.5.1"
55
55
  },
56
56
  "type": "module",
@@ -1,30 +0,0 @@
1
- import type { AccountAddress, AutomaticTokenBridge, Chain, ChainAddress, ChainsConfig, Contracts, NativeAddress, Network, TokenAddress } from '@wormhole-foundation/sdk-connect';
2
- import type { EvmChains, EvmPlatformType } from '@wormhole-foundation/sdk-evm';
3
- import { EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
4
- import type { Provider } from 'ethers';
5
- import { ethers_contracts } from './index.js';
6
- import '@wormhole-foundation/sdk-evm-core';
7
- import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
8
- export declare class EvmAutomaticTokenBridge<N extends Network, C extends EvmChains> implements AutomaticTokenBridge<N, C> {
9
- readonly network: N;
10
- readonly chain: C;
11
- readonly provider: Provider;
12
- readonly contracts: Contracts;
13
- readonly tokenBridgeRelayer: ethers_contracts.TokenBridgeRelayer;
14
- readonly tokenBridge: ethers_contracts.TokenBridgeContract;
15
- readonly core: EvmWormholeCore<N, C>;
16
- readonly chainId: bigint;
17
- constructor(network: N, chain: C, provider: Provider, contracts: Contracts);
18
- redeem(sender: AccountAddress<C>, vaa: AutomaticTokenBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
19
- static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, EvmPlatformType>): Promise<EvmAutomaticTokenBridge<N, EvmChains>>;
20
- transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, nativeGas?: bigint): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
21
- getRelayerFee(destination: Chain, token: TokenAddress<C>): Promise<bigint>;
22
- nativeTokenAmount(token: TokenAddress<C>, amount: bigint): Promise<bigint>;
23
- maxSwapAmount(token: TokenAddress<C>): Promise<bigint>;
24
- getRegisteredTokens(): Promise<NativeAddress<C>[]>;
25
- isRegisteredToken(token: TokenAddress<C>): Promise<boolean>;
26
- private tokenAddress;
27
- getWeth(): Promise<string>;
28
- private createUnsignedTx;
29
- }
30
- //# sourceMappingURL=automaticTokenBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticTokenBridge.d.ts","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,OAAO,EACP,YAAY,EACb,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAGL,sBAAsB,EAIvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,qBAAa,uBAAuB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACzE,YAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAQnC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAT/B,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,mBAAmB,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGd,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS;IAkCxB,MAAM,CACX,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,GAAG,EAAE,oBAAoB,CAAC,GAAG,GAC5B,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;WAalC,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,GACvC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAgB1C,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAmEzC,aAAa,CACjB,WAAW,EAAE,KAAK,EAClB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,MAAM,CAAC;IAoBZ,iBAAiB,CACrB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAQZ,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtD,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAKlD,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAKnD,YAAY;IAMpB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,OAAO,CAAC,gBAAgB;CAazB"}
@@ -1,111 +0,0 @@
1
- import { isNative, serialize, toNative, nativeChainIds, toChainId, } from '@wormhole-foundation/sdk-connect';
2
- import { EvmAddress, EvmPlatform, EvmUnsignedTransaction, WETH_CONTRACTS, addChainId, addFrom, } from '@wormhole-foundation/sdk-evm';
3
- import { ethers_contracts } from './index.js';
4
- import '@wormhole-foundation/sdk-evm-core';
5
- import { EvmWormholeCore } from '@wormhole-foundation/sdk-evm-core';
6
- export class EvmAutomaticTokenBridge {
7
- network;
8
- chain;
9
- provider;
10
- contracts;
11
- tokenBridgeRelayer;
12
- tokenBridge;
13
- core;
14
- chainId;
15
- constructor(network, chain, provider, contracts) {
16
- this.network = network;
17
- this.chain = chain;
18
- this.provider = provider;
19
- this.contracts = contracts;
20
- if (network === 'Devnet')
21
- throw new Error('AutomaticTokenBridge not supported on Devnet');
22
- this.chainId = nativeChainIds.networkChainToNativeChainId.get(network, chain);
23
- const tokenBridgeAddress = this.contracts.tokenBridge;
24
- if (!tokenBridgeAddress)
25
- throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
26
- this.tokenBridge = ethers_contracts.Bridge__factory.connect(tokenBridgeAddress, provider);
27
- const relayerAddress = this.contracts.tokenBridgeRelayer;
28
- if (!relayerAddress)
29
- throw new Error(`Wormhole Token Bridge Relayer contract for domain ${chain} not found`);
30
- this.tokenBridgeRelayer =
31
- ethers_contracts.TokenBridgeRelayer__factory.connect(relayerAddress, provider);
32
- this.core = new EvmWormholeCore(network, chain, provider, contracts);
33
- }
34
- async *redeem(sender, vaa) {
35
- const senderAddr = new EvmAddress(sender).toString();
36
- const txReq = await this.tokenBridgeRelayer.completeTransferWithRelay.populateTransaction(serialize(vaa));
37
- yield this.createUnsignedTx(addFrom(txReq, senderAddr), 'TokenBridgeRelayer.completeTransferWithRelay');
38
- }
39
- static async fromRpc(provider, config) {
40
- const [network, chain] = await EvmPlatform.chainFromRpc(provider);
41
- const conf = config[chain];
42
- if (conf.network !== network)
43
- throw new Error(`Network mismatch: ${conf.network} != ${network}`);
44
- return new EvmAutomaticTokenBridge(network, chain, provider, conf.contracts);
45
- }
46
- //alternative naming: initiateTransfer
47
- async *transfer(sender, recipient, token, amount, nativeGas) {
48
- const senderAddr = new EvmAddress(sender).toString();
49
- const recipientChainId = toChainId(recipient.chain);
50
- const messageFee = await this.core.getMessageFee();
51
- const recipientAddress = recipient.address
52
- .toUniversalAddress()
53
- .toUint8Array();
54
- const nativeTokenGas = nativeGas ? nativeGas : 0n;
55
- if (isNative(token)) {
56
- const txReq = await this.tokenBridgeRelayer.wrapAndTransferEthWithRelay.populateTransaction(nativeTokenGas, recipientChainId, recipientAddress, 0, // skip batching
57
- { value: amount + messageFee });
58
- yield this.createUnsignedTx(addFrom(txReq, senderAddr), 'TokenBridgeRelayer.wrapAndTransferETHWithRelay');
59
- }
60
- else {
61
- //TODO check for ERC-2612 (permit) support on token?
62
- const tokenAddr = new EvmAddress(token).toString();
63
- const tokenContract = EvmPlatform.getTokenImplementation(this.provider, tokenAddr);
64
- const allowance = await tokenContract.allowance(senderAddr, this.tokenBridgeRelayer.target);
65
- if (allowance < amount) {
66
- const txReq = await tokenContract.approve.populateTransaction(this.tokenBridgeRelayer.target, amount);
67
- yield this.createUnsignedTx(addFrom(txReq, senderAddr), 'AutomaticTokenBridge.Approve');
68
- }
69
- const txReq = await this.tokenBridgeRelayer.transferTokensWithRelay.populateTransaction(tokenAddr, amount, nativeTokenGas, recipientChainId, recipientAddress, 0, { value: messageFee });
70
- yield this.createUnsignedTx(addFrom(txReq, senderAddr), 'TokenBridgeRelayer.TransferTokensWithRelay');
71
- }
72
- }
73
- async getRelayerFee(destination, token) {
74
- const destChainId = toChainId(destination);
75
- const srcTokenAddress = await this.tokenAddress(token);
76
- const tokenContract = EvmPlatform.getTokenImplementation(this.provider, srcTokenAddress);
77
- const decimals = await tokenContract.decimals();
78
- return await this.tokenBridgeRelayer.calculateRelayerFee(destChainId, srcTokenAddress, decimals);
79
- }
80
- // Return the amount of native gas that will be
81
- // received when the incoming bridge transfer is redeemed
82
- // Note: for a quote, this should be called on the destination chain
83
- async nativeTokenAmount(token, amount) {
84
- const address = await this.tokenAddress(token);
85
- return this.tokenBridgeRelayer.calculateNativeSwapAmountOut(address, amount);
86
- }
87
- async maxSwapAmount(token) {
88
- const address = await this.tokenAddress(token);
89
- return this.tokenBridgeRelayer.calculateMaxSwapAmountIn(address);
90
- }
91
- async getRegisteredTokens() {
92
- const tokens = await this.tokenBridgeRelayer.getAcceptedTokensList();
93
- return tokens.map((address) => toNative(this.chain, address));
94
- }
95
- async isRegisteredToken(token) {
96
- const address = await this.tokenAddress(token);
97
- return await this.tokenBridgeRelayer.isAcceptedToken(address);
98
- }
99
- async tokenAddress(token) {
100
- return isNative(token)
101
- ? await this.getWeth()
102
- : new EvmAddress(token).toString();
103
- }
104
- async getWeth() {
105
- return WETH_CONTRACTS[this.network]?.[this.chain] ?? this.tokenBridge.WETH();
106
- }
107
- createUnsignedTx(txReq, description, parallelizable = false) {
108
- return new EvmUnsignedTransaction(addChainId(txReq, this.chainId), this.network, this.chain, description, parallelizable);
109
- }
110
- }
111
- //# sourceMappingURL=automaticTokenBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticTokenBridge.js","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"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"}