@aptos-labs/cross-chain-core 5.5.0 → 5.6.0-alpha.1
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/CrossChainCore.d.ts +1 -1
- package/dist/CrossChainCore.d.ts.map +1 -1
- package/dist/config/mainnet/chains.d.ts.map +1 -1
- package/dist/config/testnet/chains.d.ts.map +1 -1
- package/dist/config/types.d.ts +2 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.js +94 -57
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +94 -57
- package/dist/index.mjs.map +1 -1
- package/dist/providers/wormhole/signers/AptosLocalSigner.d.ts.map +1 -1
- package/dist/providers/wormhole/signers/Signer.d.ts.map +1 -1
- package/dist/providers/wormhole/signers/SuiSigner.d.ts.map +1 -1
- package/dist/providers/wormhole/wormhole.d.ts.map +1 -1
- package/dist/utils/getUsdcBalance.d.ts +1 -0
- package/dist/utils/getUsdcBalance.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/package.json +13 -12
- package/src/CrossChainCore.ts +10 -1
- package/src/config/mainnet/chains.ts +11 -15
- package/src/config/mainnet/tokens.ts +10 -10
- package/src/config/testnet/chains.ts +11 -15
- package/src/config/testnet/tokens.ts +10 -10
- package/src/config/types.ts +1 -0
- package/src/providers/wormhole/signers/AptosLocalSigner.ts +4 -3
- package/src/providers/wormhole/signers/Signer.ts +15 -8
- package/src/providers/wormhole/signers/SuiSigner.ts +42 -0
- package/src/providers/wormhole/wormhole.ts +17 -13
- package/src/utils/getUsdcBalance.ts +24 -6
- package/src/version.ts +1 -1
|
@@ -78,19 +78,15 @@ export const mainnetChains: ChainsConfig = {
|
|
|
78
78
|
symbol: "MATIC",
|
|
79
79
|
defaultRpc: "https://polygon-bor-rpc.publicnode.com",
|
|
80
80
|
},
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// icon: "Sui",
|
|
93
|
-
// maxBlockSearch: 0,
|
|
94
|
-
// symbol: "SUI",
|
|
95
|
-
// },
|
|
81
|
+
Sui: {
|
|
82
|
+
key: "Sui",
|
|
83
|
+
context: Context.SUI,
|
|
84
|
+
displayName: "Sui",
|
|
85
|
+
explorerUrl: "https://suiscan.xyz/",
|
|
86
|
+
explorerName: "Suiscan",
|
|
87
|
+
chainId: 0,
|
|
88
|
+
icon: "Sui",
|
|
89
|
+
symbol: "SUI",
|
|
90
|
+
defaultRpc: "https://fullnode.mainnet.sui.io:443",
|
|
91
|
+
},
|
|
96
92
|
};
|
|
@@ -65,14 +65,14 @@ export const mainnetTokens: Record<string, TokenConfig> = {
|
|
|
65
65
|
address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
Sui: {
|
|
69
|
+
symbol: "USDC",
|
|
70
|
+
decimals: 6,
|
|
71
|
+
tokenId: {
|
|
72
|
+
chain: "Sui",
|
|
73
|
+
address:
|
|
74
|
+
"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
|
|
75
|
+
},
|
|
76
|
+
icon: "USDC",
|
|
77
|
+
},
|
|
78
78
|
};
|
|
@@ -79,19 +79,15 @@ export const testnetChains: ChainsConfig = {
|
|
|
79
79
|
symbol: "APT",
|
|
80
80
|
defaultRpc: "https://fullnode.testnet.aptos.dev",
|
|
81
81
|
},
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// maxBlockSearch: 0,
|
|
94
|
-
// symbol: "SUI",
|
|
95
|
-
// sdkName: "Sui",
|
|
96
|
-
// },
|
|
82
|
+
Sui: {
|
|
83
|
+
key: "Sui",
|
|
84
|
+
context: Context.SUI,
|
|
85
|
+
displayName: "Sui",
|
|
86
|
+
explorerUrl: "https://suiscan.xyz/testnet",
|
|
87
|
+
explorerName: "Suiscan",
|
|
88
|
+
chainId: 0,
|
|
89
|
+
icon: "Sui",
|
|
90
|
+
symbol: "SUI",
|
|
91
|
+
defaultRpc: "https://fullnode.testnet.sui.io:443",
|
|
92
|
+
},
|
|
97
93
|
};
|
|
@@ -65,14 +65,14 @@ export const testnetTokens: Record<string, TokenConfig> = {
|
|
|
65
65
|
address: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
Sui: {
|
|
69
|
+
symbol: "USDC",
|
|
70
|
+
tokenId: {
|
|
71
|
+
chain: "Sui",
|
|
72
|
+
address:
|
|
73
|
+
"0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC",
|
|
74
|
+
},
|
|
75
|
+
icon: "USDC",
|
|
76
|
+
decimals: 6,
|
|
77
|
+
},
|
|
78
78
|
};
|
package/src/config/types.ts
CHANGED
|
@@ -20,9 +20,10 @@ import {
|
|
|
20
20
|
} from "@wormhole-foundation/sdk-aptos";
|
|
21
21
|
import { GasStationApiKey } from "../types";
|
|
22
22
|
|
|
23
|
-
export class AptosLocalSigner<
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
export class AptosLocalSigner<
|
|
24
|
+
N extends Network,
|
|
25
|
+
C extends Chain,
|
|
26
|
+
> implements SignAndSendSigner<N, C> {
|
|
26
27
|
_chain: C;
|
|
27
28
|
_options: any;
|
|
28
29
|
_wallet: Account;
|
|
@@ -11,15 +11,15 @@ import {
|
|
|
11
11
|
EvmUnsignedTransaction,
|
|
12
12
|
EvmChains,
|
|
13
13
|
} from "@wormhole-foundation/sdk-evm";
|
|
14
|
+
import {
|
|
15
|
+
SuiChains,
|
|
16
|
+
SuiUnsignedTransaction,
|
|
17
|
+
} from "@wormhole-foundation/sdk-sui";
|
|
14
18
|
|
|
15
19
|
import * as solanaSigner from "./SolanaSigner";
|
|
16
20
|
import * as ethereumSigner from "./EthereumSigner";
|
|
17
21
|
import * as aptosSigner from "./AptosSigner";
|
|
18
|
-
|
|
19
|
-
// SuiChains,
|
|
20
|
-
// SuiUnsignedTransaction,
|
|
21
|
-
// } from "@wormhole-foundation/sdk-sui";
|
|
22
|
-
// import * as suiSigner from "./SuiSigner";
|
|
22
|
+
import * as suiSigner from "./SuiSigner";
|
|
23
23
|
|
|
24
24
|
import { ChainConfig } from "../../../config";
|
|
25
25
|
import { CrossChainCore } from "../../../CrossChainCore";
|
|
@@ -27,9 +27,10 @@ import { AptosChains } from "@wormhole-foundation/sdk-aptos/dist/cjs/types";
|
|
|
27
27
|
import { AptosUnsignedTransaction } from "@wormhole-foundation/sdk-aptos/dist/cjs/unsignedTransaction";
|
|
28
28
|
import { GasStationApiKey } from "../types";
|
|
29
29
|
import { Account } from "@aptos-labs/ts-sdk";
|
|
30
|
-
export class Signer<
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
export class Signer<
|
|
31
|
+
N extends Network,
|
|
32
|
+
C extends Chain,
|
|
33
|
+
> implements SignAndSendSigner<N, C> {
|
|
33
34
|
_chain: ChainConfig;
|
|
34
35
|
_address: string;
|
|
35
36
|
_options: any;
|
|
@@ -113,6 +114,12 @@ export const signAndSendTransaction = async (
|
|
|
113
114
|
options,
|
|
114
115
|
);
|
|
115
116
|
return tx;
|
|
117
|
+
} else if (chain.context === "Sui") {
|
|
118
|
+
const tx = await suiSigner.signAndSendTransaction(
|
|
119
|
+
request as SuiUnsignedTransaction<Network, SuiChains>,
|
|
120
|
+
wallet,
|
|
121
|
+
);
|
|
122
|
+
return tx;
|
|
116
123
|
} else if (chain.context === "Aptos") {
|
|
117
124
|
const tx = await aptosSigner.signAndSendTransaction(
|
|
118
125
|
request as AptosUnsignedTransaction<Network, AptosChains>,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AdapterWallet } from "@aptos-labs/wallet-adapter-core";
|
|
2
|
+
import { Network } from "@wormhole-foundation/sdk";
|
|
3
|
+
import {
|
|
4
|
+
SuiChains,
|
|
5
|
+
SuiUnsignedTransaction,
|
|
6
|
+
} from "@wormhole-foundation/sdk-sui";
|
|
7
|
+
import { SuiDerivedWallet } from "@aptos-labs/derived-wallet-sui";
|
|
8
|
+
import {
|
|
9
|
+
SuiSignAndExecuteTransactionInput,
|
|
10
|
+
SuiSignAndExecuteTransactionOutput,
|
|
11
|
+
} from "@mysten/wallet-standard";
|
|
12
|
+
|
|
13
|
+
export async function signAndSendTransaction(
|
|
14
|
+
request: SuiUnsignedTransaction<Network, SuiChains>,
|
|
15
|
+
wallet: AdapterWallet,
|
|
16
|
+
): Promise<string> {
|
|
17
|
+
if (!wallet) {
|
|
18
|
+
throw new Error("wallet is undefined");
|
|
19
|
+
}
|
|
20
|
+
const suiDerivedWallet = wallet as SuiDerivedWallet;
|
|
21
|
+
|
|
22
|
+
const signAndExecuteTransactionFeature = suiDerivedWallet.suiWallet.features[
|
|
23
|
+
"sui:signAndExecuteTransaction"
|
|
24
|
+
] as {
|
|
25
|
+
signAndExecuteTransaction: (
|
|
26
|
+
input: SuiSignAndExecuteTransactionInput,
|
|
27
|
+
) => Promise<SuiSignAndExecuteTransactionOutput>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
if (!signAndExecuteTransactionFeature) {
|
|
31
|
+
throw new Error("wallet does not support signAndExecuteTransaction");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const { digest } =
|
|
35
|
+
await signAndExecuteTransactionFeature.signAndExecuteTransaction({
|
|
36
|
+
transaction: request.transaction,
|
|
37
|
+
account: suiDerivedWallet.suiWallet.accounts[0],
|
|
38
|
+
chain: `sui:${request.network.toLocaleLowerCase()}`,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
return digest;
|
|
42
|
+
}
|
|
@@ -11,6 +11,7 @@ import { Network, sleep } from "@aptos-labs/ts-sdk";
|
|
|
11
11
|
import aptos from "@wormhole-foundation/sdk/aptos";
|
|
12
12
|
import solana from "@wormhole-foundation/sdk/solana";
|
|
13
13
|
import evm from "@wormhole-foundation/sdk/evm";
|
|
14
|
+
import sui from "@wormhole-foundation/sdk/sui";
|
|
14
15
|
|
|
15
16
|
import {
|
|
16
17
|
Chain,
|
|
@@ -36,18 +37,16 @@ import {
|
|
|
36
37
|
} from "./types";
|
|
37
38
|
import { SolanaDerivedWallet } from "@aptos-labs/derived-wallet-solana";
|
|
38
39
|
import { EIP1193DerivedWallet } from "@aptos-labs/derived-wallet-ethereum";
|
|
40
|
+
import { SuiDerivedWallet } from "@aptos-labs/derived-wallet-sui";
|
|
39
41
|
|
|
40
|
-
export class WormholeProvider
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
WormholeWithdrawResponse
|
|
49
|
-
>
|
|
50
|
-
{
|
|
42
|
+
export class WormholeProvider implements CrossChainProvider<
|
|
43
|
+
WormholeQuoteRequest,
|
|
44
|
+
WormholeQuoteResponse,
|
|
45
|
+
WormholeTransferRequest,
|
|
46
|
+
WormholeTransferResponse,
|
|
47
|
+
WormholeWithdrawRequest,
|
|
48
|
+
WormholeWithdrawResponse
|
|
49
|
+
> {
|
|
51
50
|
private crossChainCore: CrossChainCore;
|
|
52
51
|
|
|
53
52
|
private _wormholeContext: Wormhole<"Mainnet" | "Testnet"> | undefined;
|
|
@@ -73,7 +72,7 @@ export class WormholeProvider
|
|
|
73
72
|
throw new Error("Origin chain not selected");
|
|
74
73
|
}
|
|
75
74
|
const isMainnet = dappNetwork === Network.MAINNET;
|
|
76
|
-
const platforms: PlatformLoader<any>[] = [aptos, solana, evm];
|
|
75
|
+
const platforms: PlatformLoader<any>[] = [aptos, solana, evm, sui];
|
|
77
76
|
const wh = await wormhole(isMainnet ? "Mainnet" : "Testnet", platforms);
|
|
78
77
|
this._wormholeContext = wh;
|
|
79
78
|
}
|
|
@@ -190,13 +189,18 @@ export class WormholeProvider
|
|
|
190
189
|
signerAddress =
|
|
191
190
|
(wallet as SolanaDerivedWallet).solanaWallet.publicKey?.toBase58() ||
|
|
192
191
|
"";
|
|
193
|
-
} else {
|
|
192
|
+
} else if (chainContext === "Ethereum") {
|
|
194
193
|
// is Ethereum
|
|
195
194
|
[signerAddress] = await (
|
|
196
195
|
wallet as EIP1193DerivedWallet
|
|
197
196
|
).eip1193Provider.request({
|
|
198
197
|
method: "eth_requestAccounts",
|
|
199
198
|
});
|
|
199
|
+
} else if (chainContext === "Sui") {
|
|
200
|
+
signerAddress =
|
|
201
|
+
(wallet as SuiDerivedWallet).suiWallet.accounts[0].address || "";
|
|
202
|
+
} else {
|
|
203
|
+
throw new Error("Unsupported chain context: " + chainContext);
|
|
200
204
|
}
|
|
201
205
|
logger.log("signerAddress", signerAddress);
|
|
202
206
|
|
|
@@ -3,6 +3,7 @@ import { Connection, PublicKey } from "@solana/web3.js";
|
|
|
3
3
|
import { mainnetTokens, testnetTokens } from "../config";
|
|
4
4
|
import { ethers, JsonRpcProvider } from "ethers";
|
|
5
5
|
import { Chain } from "../CrossChainCore";
|
|
6
|
+
import { SuiClient } from "@mysten/sui/client";
|
|
6
7
|
|
|
7
8
|
export const getSolanaWalletUSDCBalance = async (
|
|
8
9
|
walletAddress: string,
|
|
@@ -29,7 +30,7 @@ export const getSolanaWalletUSDCBalance = async (
|
|
|
29
30
|
|
|
30
31
|
return (
|
|
31
32
|
balance.value.uiAmountString ??
|
|
32
|
-
(
|
|
33
|
+
ethers.formatUnits(BigInt(balance.value.amount), balance.value.decimals)
|
|
33
34
|
);
|
|
34
35
|
};
|
|
35
36
|
|
|
@@ -74,9 +75,26 @@ export const getAptosWalletUSDCBalance = async (
|
|
|
74
75
|
if (response.length === 0) {
|
|
75
76
|
return "0";
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
return ethers.formatUnits(BigInt(response[0].amount), token.decimals);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const getSuiWalletUSDCBalance = async (
|
|
82
|
+
walletAddress: string,
|
|
83
|
+
aptosNetwork: Network,
|
|
84
|
+
rpc: string,
|
|
85
|
+
): Promise<string> => {
|
|
86
|
+
const token =
|
|
87
|
+
aptosNetwork === Network.MAINNET
|
|
88
|
+
? mainnetTokens["Sui"]
|
|
89
|
+
: testnetTokens["Sui"];
|
|
90
|
+
|
|
91
|
+
const client = new SuiClient({
|
|
92
|
+
url: rpc,
|
|
93
|
+
});
|
|
94
|
+
const balance = await client.getBalance({
|
|
95
|
+
owner: walletAddress,
|
|
96
|
+
coinType: token.tokenId.address,
|
|
97
|
+
});
|
|
98
|
+
// Reuse ethers' formatter for precise decimal formatting of large integers.
|
|
99
|
+
return ethers.formatUnits(BigInt(balance.totalBalance), token.decimals);
|
|
82
100
|
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const CROSS_CHAIN_CORE_VERSION = "5.
|
|
1
|
+
export const CROSS_CHAIN_CORE_VERSION = "5.6.0-alpha.1";
|