@wormhole-foundation/sdk-evm-tokenbridge 0.5.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 (83) hide show
  1. package/dist/cjs/automaticTokenBridge.d.ts +26 -0
  2. package/dist/cjs/automaticTokenBridge.d.ts.map +1 -0
  3. package/dist/cjs/automaticTokenBridge.js +109 -0
  4. package/dist/cjs/automaticTokenBridge.js.map +1 -0
  5. package/dist/cjs/ethers-contracts/Bridge.d.ts +630 -0
  6. package/dist/cjs/ethers-contracts/Bridge.d.ts.map +1 -0
  7. package/dist/cjs/ethers-contracts/Bridge.js +3 -0
  8. package/dist/cjs/ethers-contracts/Bridge.js.map +1 -0
  9. package/dist/cjs/ethers-contracts/TokenBridgeRelayer.d.ts +600 -0
  10. package/dist/cjs/ethers-contracts/TokenBridgeRelayer.d.ts.map +1 -0
  11. package/dist/cjs/ethers-contracts/TokenBridgeRelayer.js +3 -0
  12. package/dist/cjs/ethers-contracts/TokenBridgeRelayer.js.map +1 -0
  13. package/dist/cjs/ethers-contracts/common.d.ts +51 -0
  14. package/dist/cjs/ethers-contracts/common.d.ts.map +1 -0
  15. package/dist/cjs/ethers-contracts/common.js +3 -0
  16. package/dist/cjs/ethers-contracts/common.js.map +1 -0
  17. package/dist/cjs/ethers-contracts/factories/Bridge__factory.d.ts +944 -0
  18. package/dist/cjs/ethers-contracts/factories/Bridge__factory.d.ts.map +1 -0
  19. package/dist/cjs/ethers-contracts/factories/Bridge__factory.js +1248 -0
  20. package/dist/cjs/ethers-contracts/factories/Bridge__factory.js.map +1 -0
  21. package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts +820 -0
  22. package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts.map +1 -0
  23. package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.js +1079 -0
  24. package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.js.map +1 -0
  25. package/dist/cjs/ethers-contracts/factories/index.d.ts +3 -0
  26. package/dist/cjs/ethers-contracts/factories/index.d.ts.map +1 -0
  27. package/dist/cjs/ethers-contracts/factories/index.js +19 -0
  28. package/dist/cjs/ethers-contracts/factories/index.js.map +1 -0
  29. package/dist/cjs/ethers-contracts/index.d.ts +4 -0
  30. package/dist/cjs/ethers-contracts/index.d.ts.map +1 -0
  31. package/dist/cjs/ethers-contracts/index.js +18 -0
  32. package/dist/cjs/ethers-contracts/index.js.map +1 -0
  33. package/dist/cjs/index.d.ts +4 -0
  34. package/dist/cjs/index.d.ts.map +1 -0
  35. package/dist/cjs/index.js +39 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/tokenBridge.d.ts +28 -0
  38. package/dist/cjs/tokenBridge.d.ts.map +1 -0
  39. package/dist/cjs/tokenBridge.js +154 -0
  40. package/dist/cjs/tokenBridge.js.map +1 -0
  41. package/dist/esm/automaticTokenBridge.d.ts +26 -0
  42. package/dist/esm/automaticTokenBridge.d.ts.map +1 -0
  43. package/dist/esm/automaticTokenBridge.js +105 -0
  44. package/dist/esm/automaticTokenBridge.js.map +1 -0
  45. package/dist/esm/ethers-contracts/Bridge.d.ts +630 -0
  46. package/dist/esm/ethers-contracts/Bridge.d.ts.map +1 -0
  47. package/dist/esm/ethers-contracts/Bridge.js +2 -0
  48. package/dist/esm/ethers-contracts/Bridge.js.map +1 -0
  49. package/dist/esm/ethers-contracts/TokenBridgeRelayer.d.ts +600 -0
  50. package/dist/esm/ethers-contracts/TokenBridgeRelayer.d.ts.map +1 -0
  51. package/dist/esm/ethers-contracts/TokenBridgeRelayer.js +2 -0
  52. package/dist/esm/ethers-contracts/TokenBridgeRelayer.js.map +1 -0
  53. package/dist/esm/ethers-contracts/common.d.ts +51 -0
  54. package/dist/esm/ethers-contracts/common.d.ts.map +1 -0
  55. package/dist/esm/ethers-contracts/common.js +2 -0
  56. package/dist/esm/ethers-contracts/common.js.map +1 -0
  57. package/dist/esm/ethers-contracts/factories/Bridge__factory.d.ts +944 -0
  58. package/dist/esm/ethers-contracts/factories/Bridge__factory.d.ts.map +1 -0
  59. package/dist/esm/ethers-contracts/factories/Bridge__factory.js +1244 -0
  60. package/dist/esm/ethers-contracts/factories/Bridge__factory.js.map +1 -0
  61. package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts +820 -0
  62. package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts.map +1 -0
  63. package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.js +1075 -0
  64. package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.js.map +1 -0
  65. package/dist/esm/ethers-contracts/factories/index.d.ts +3 -0
  66. package/dist/esm/ethers-contracts/factories/index.d.ts.map +1 -0
  67. package/dist/esm/ethers-contracts/factories/index.js +3 -0
  68. package/dist/esm/ethers-contracts/factories/index.js.map +1 -0
  69. package/dist/esm/ethers-contracts/index.d.ts +4 -0
  70. package/dist/esm/ethers-contracts/index.d.ts.map +1 -0
  71. package/dist/esm/ethers-contracts/index.js +2 -0
  72. package/dist/esm/ethers-contracts/index.js.map +1 -0
  73. package/dist/esm/index.d.ts +4 -0
  74. package/dist/esm/index.d.ts.map +1 -0
  75. package/dist/esm/index.js +10 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/tokenBridge.d.ts +28 -0
  78. package/dist/esm/tokenBridge.d.ts.map +1 -0
  79. package/dist/esm/tokenBridge.js +150 -0
  80. package/dist/esm/tokenBridge.js.map +1 -0
  81. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  82. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  83. package/package.json +59 -0
@@ -0,0 +1,26 @@
1
+ import { AccountAddress, AutomaticTokenBridge, ChainAddress, ChainsConfig, Contracts, NativeAddress, Network, TokenAddress } from '@wormhole-foundation/sdk-connect';
2
+ import { EvmChains, EvmPlatformType, EvmUnsignedTransaction } from '@wormhole-foundation/sdk-evm';
3
+ import { Provider } from 'ethers';
4
+ import { ethers_contracts } from '.';
5
+ import '@wormhole-foundation/sdk-evm-core';
6
+ export declare class EvmAutomaticTokenBridge<N extends Network, C extends EvmChains> implements AutomaticTokenBridge<N, C> {
7
+ readonly network: N;
8
+ readonly chain: C;
9
+ readonly provider: Provider;
10
+ readonly contracts: Contracts;
11
+ readonly tokenBridgeRelayer: ethers_contracts.TokenBridgeRelayer;
12
+ readonly tokenBridge: ethers_contracts.TokenBridgeContract;
13
+ readonly chainId: bigint;
14
+ private constructor();
15
+ redeem(sender: AccountAddress<C>, vaa: AutomaticTokenBridge.VAA): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
16
+ static fromRpc<N extends Network>(provider: Provider, config: ChainsConfig<N, EvmPlatformType>): Promise<EvmAutomaticTokenBridge<N, EvmChains>>;
17
+ transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, nativeGas?: bigint): AsyncGenerator<EvmUnsignedTransaction<N, C>>;
18
+ getRelayerFee(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>): Promise<bigint>;
19
+ nativeTokenAmount(token: TokenAddress<C>, amount: bigint): Promise<bigint>;
20
+ maxSwapAmount(token: TokenAddress<C>): Promise<bigint>;
21
+ getRegisteredTokens(): Promise<NativeAddress<C>[]>;
22
+ isRegisteredToken(token: TokenAddress<C>): Promise<boolean>;
23
+ private tokenAddress;
24
+ private createUnsignedTx;
25
+ }
26
+ //# sourceMappingURL=automaticTokenBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automaticTokenBridge.d.ts","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,OAAO,EACP,YAAY,EAIb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,SAAS,EAET,eAAe,EACf,sBAAsB,EAGvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAsB,MAAM,QAAQ,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC;AAErC,OAAO,mCAAmC,CAAC;AAE3C,qBAAa,uBAAuB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACzE,YAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAOnC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAR/B,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,mBAAmB,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO;IAqCA,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;IAiEzC,aAAa,CACjB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,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;IAM1B,OAAO,CAAC,gBAAgB;CAazB"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmAutomaticTokenBridge = void 0;
4
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
+ const sdk_evm_1 = require("@wormhole-foundation/sdk-evm");
6
+ const sdk_base_1 = require("@wormhole-foundation/sdk-base");
7
+ const _1 = require(".");
8
+ require("@wormhole-foundation/sdk-evm-core");
9
+ class EvmAutomaticTokenBridge {
10
+ network;
11
+ chain;
12
+ provider;
13
+ contracts;
14
+ tokenBridgeRelayer;
15
+ tokenBridge;
16
+ chainId;
17
+ constructor(network, chain, provider, contracts) {
18
+ this.network = network;
19
+ this.chain = chain;
20
+ this.provider = provider;
21
+ this.contracts = contracts;
22
+ if (network === 'Devnet')
23
+ throw new Error('AutomaticTokenBridge not supported on Devnet');
24
+ this.chainId = sdk_base_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
25
+ const tokenBridgeAddress = this.contracts.tokenBridge;
26
+ if (!tokenBridgeAddress)
27
+ throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
28
+ this.tokenBridge = _1.ethers_contracts.Bridge__factory.connect(tokenBridgeAddress, provider);
29
+ const relayerAddress = this.contracts.tokenBridgeRelayer;
30
+ if (!relayerAddress)
31
+ throw new Error(`Wormhole Token Bridge Relayer contract for domain ${chain} not found`);
32
+ this.tokenBridgeRelayer =
33
+ _1.ethers_contracts.TokenBridgeRelayer__factory.connect(relayerAddress, provider);
34
+ }
35
+ async *redeem(sender, vaa) {
36
+ const senderAddr = new sdk_evm_1.EvmAddress(sender).toString();
37
+ const txReq = await this.tokenBridgeRelayer.completeTransferWithRelay.populateTransaction((0, sdk_connect_1.serialize)(vaa));
38
+ return this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'TokenBridgeRelayer.completeTransferWithRelay');
39
+ }
40
+ static async fromRpc(provider, config) {
41
+ const [network, chain] = await sdk_evm_1.EvmPlatform.chainFromRpc(provider);
42
+ const conf = config[chain];
43
+ if (conf.network !== network)
44
+ throw new Error(`Network mismatch: ${conf.network} != ${network}`);
45
+ return new EvmAutomaticTokenBridge(network, chain, provider, conf.contracts);
46
+ }
47
+ //alternative naming: initiateTransfer
48
+ async *transfer(sender, recipient, token, amount, nativeGas) {
49
+ const senderAddr = new sdk_evm_1.EvmAddress(sender).toString();
50
+ const recipientChainId = (0, sdk_base_1.toChainId)(recipient.chain);
51
+ const recipientAddress = recipient.address
52
+ .toUniversalAddress()
53
+ .toUint8Array();
54
+ const nativeTokenGas = nativeGas ? nativeGas : 0n;
55
+ if ((0, sdk_connect_1.isNative)(token)) {
56
+ const txReq = await this.tokenBridgeRelayer.wrapAndTransferEthWithRelay.populateTransaction(nativeTokenGas, recipientChainId, recipientAddress, 0, // skip batching
57
+ { value: amount });
58
+ yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'TokenBridgeRelayer.wrapAndTransferETHWithRelay');
59
+ }
60
+ else {
61
+ //TODO check for ERC-2612 (permit) support on token?
62
+ const tokenAddr = new sdk_evm_1.EvmAddress(token).toString();
63
+ const tokenContract = sdk_evm_1.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((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'AutomaticTokenBridge.Approve');
68
+ }
69
+ const txReq = await this.tokenBridgeRelayer.transferTokensWithRelay.populateTransaction(tokenAddr, amount, nativeTokenGas, recipientChainId, recipientAddress, 0);
70
+ yield this.createUnsignedTx((0, sdk_evm_1.addFrom)(txReq, senderAddr), 'TokenBridgeRelayer.TransferTokensWithRelay');
71
+ }
72
+ }
73
+ async getRelayerFee(sender, recipient, token) {
74
+ const destChainId = (0, sdk_base_1.toChainId)(recipient.chain);
75
+ const srcTokenAddress = await this.tokenAddress(token);
76
+ const tokenContract = sdk_evm_1.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) => (0, sdk_connect_1.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 (0, sdk_connect_1.isNative)(token)
101
+ ? await this.tokenBridge.WETH()
102
+ : new sdk_evm_1.EvmAddress(token).toString();
103
+ }
104
+ createUnsignedTx(txReq, description, parallelizable = false) {
105
+ return new sdk_evm_1.EvmUnsignedTransaction((0, sdk_evm_1.addChainId)(txReq, this.chainId), this.network, this.chain, description, parallelizable);
106
+ }
107
+ }
108
+ exports.EvmAutomaticTokenBridge = EvmAutomaticTokenBridge;
109
+ //# sourceMappingURL=automaticTokenBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automaticTokenBridge.js","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"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"}