@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.
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -3
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/esm/automaticTokenBridge.d.ts +0 -30
- package/dist/esm/automaticTokenBridge.d.ts.map +0 -1
- package/dist/esm/automaticTokenBridge.js +0 -111
- package/dist/esm/automaticTokenBridge.js.map +0 -1
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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,
|
|
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": "
|
|
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": "
|
|
52
|
-
"@wormhole-foundation/sdk-evm": "
|
|
53
|
-
"@wormhole-foundation/sdk-evm-core": "
|
|
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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"}
|