@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.
- package/dist/cjs/automaticTokenBridge.d.ts +26 -0
- package/dist/cjs/automaticTokenBridge.d.ts.map +1 -0
- package/dist/cjs/automaticTokenBridge.js +109 -0
- package/dist/cjs/automaticTokenBridge.js.map +1 -0
- package/dist/cjs/ethers-contracts/Bridge.d.ts +630 -0
- package/dist/cjs/ethers-contracts/Bridge.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/Bridge.js +3 -0
- package/dist/cjs/ethers-contracts/Bridge.js.map +1 -0
- package/dist/cjs/ethers-contracts/TokenBridgeRelayer.d.ts +600 -0
- package/dist/cjs/ethers-contracts/TokenBridgeRelayer.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/TokenBridgeRelayer.js +3 -0
- package/dist/cjs/ethers-contracts/TokenBridgeRelayer.js.map +1 -0
- package/dist/cjs/ethers-contracts/common.d.ts +51 -0
- package/dist/cjs/ethers-contracts/common.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/common.js +3 -0
- package/dist/cjs/ethers-contracts/common.js.map +1 -0
- package/dist/cjs/ethers-contracts/factories/Bridge__factory.d.ts +944 -0
- package/dist/cjs/ethers-contracts/factories/Bridge__factory.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/factories/Bridge__factory.js +1248 -0
- package/dist/cjs/ethers-contracts/factories/Bridge__factory.js.map +1 -0
- package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts +820 -0
- package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.js +1079 -0
- package/dist/cjs/ethers-contracts/factories/TokenBridgeRelayer__factory.js.map +1 -0
- package/dist/cjs/ethers-contracts/factories/index.d.ts +3 -0
- package/dist/cjs/ethers-contracts/factories/index.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/factories/index.js +19 -0
- package/dist/cjs/ethers-contracts/factories/index.js.map +1 -0
- package/dist/cjs/ethers-contracts/index.d.ts +4 -0
- package/dist/cjs/ethers-contracts/index.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/index.js +18 -0
- package/dist/cjs/ethers-contracts/index.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +39 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/tokenBridge.d.ts +28 -0
- package/dist/cjs/tokenBridge.d.ts.map +1 -0
- package/dist/cjs/tokenBridge.js +154 -0
- package/dist/cjs/tokenBridge.js.map +1 -0
- package/dist/esm/automaticTokenBridge.d.ts +26 -0
- package/dist/esm/automaticTokenBridge.d.ts.map +1 -0
- package/dist/esm/automaticTokenBridge.js +105 -0
- package/dist/esm/automaticTokenBridge.js.map +1 -0
- package/dist/esm/ethers-contracts/Bridge.d.ts +630 -0
- package/dist/esm/ethers-contracts/Bridge.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/Bridge.js +2 -0
- package/dist/esm/ethers-contracts/Bridge.js.map +1 -0
- package/dist/esm/ethers-contracts/TokenBridgeRelayer.d.ts +600 -0
- package/dist/esm/ethers-contracts/TokenBridgeRelayer.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/TokenBridgeRelayer.js +2 -0
- package/dist/esm/ethers-contracts/TokenBridgeRelayer.js.map +1 -0
- package/dist/esm/ethers-contracts/common.d.ts +51 -0
- package/dist/esm/ethers-contracts/common.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/common.js +2 -0
- package/dist/esm/ethers-contracts/common.js.map +1 -0
- package/dist/esm/ethers-contracts/factories/Bridge__factory.d.ts +944 -0
- package/dist/esm/ethers-contracts/factories/Bridge__factory.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/factories/Bridge__factory.js +1244 -0
- package/dist/esm/ethers-contracts/factories/Bridge__factory.js.map +1 -0
- package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts +820 -0
- package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.js +1075 -0
- package/dist/esm/ethers-contracts/factories/TokenBridgeRelayer__factory.js.map +1 -0
- package/dist/esm/ethers-contracts/factories/index.d.ts +3 -0
- package/dist/esm/ethers-contracts/factories/index.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/factories/index.js +3 -0
- package/dist/esm/ethers-contracts/factories/index.js.map +1 -0
- package/dist/esm/ethers-contracts/index.d.ts +4 -0
- package/dist/esm/ethers-contracts/index.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/index.js +2 -0
- package/dist/esm/ethers-contracts/index.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/tokenBridge.d.ts +28 -0
- package/dist/esm/tokenBridge.d.ts.map +1 -0
- package/dist/esm/tokenBridge.js +150 -0
- package/dist/esm/tokenBridge.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- 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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"}
|