Skip to content

Commit aeb052e

Browse files
authored
feat: sui (#884)
* refactor: replaces WCM with Appkit * feat: sui + personal sign * chore: lock * feat: sui sign & send txs * fix: remove double base64 encoding * chore: adds cosmos logs * feat: returns tx bytes * refactor: returns cosmos signature + signed * feat: sui balance * feat: asks for recepient address * refactor: doesn't encode sui personal message to base64 * feat: validate `transactionBytes` in sui sign transaction
1 parent c01a873 commit aeb052e

37 files changed

+1399
-559
lines changed

advanced/dapps/react-dapp-v2/package.json

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"@noble/hashes": "^1.8.0",
2424
"@noble/secp256k1": "^2.2.3",
2525
"@polkadot/util-crypto": "^10.1.2",
26-
"@reown/appkit": "1.7.5",
2726
"@solana/web3.js": "^1.36.0",
2827
"@stacks/network": "^7.0.2",
2928
"@stacks/transactions": "^7.0.6",
@@ -33,7 +32,9 @@
3332
"@walletconnect/types": "2.20.1",
3433
"@walletconnect/universal-provider": "2.20.1",
3534
"@walletconnect/utils": "2.20.1",
35+
"@reown/appkit": "1.7.5",
3636
"axios": "^1.0.0",
37+
"@mysten/sui": "^1.29.1",
3738
"bitcoinjs-lib": "^6.1.5",
3839
"bitcoinjs-message": "^2.2.0",
3940
"blockies-ts": "^1.0.0",
@@ -109,7 +110,15 @@
109110
"semver@>=7.0.0 <7.5.2": ">=7.5.2",
110111
"next@>=9.5.5 <14.2.15": ">=14.2.15",
111112
"ansi-html@<0.0.8": ">=0.0.8",
112-
"axios@<1.8.2": ">=1.8.2"
113+
"axios@<1.8.2": ">=1.8.2",
114+
"@walletconnect/core@": ">=2.20.2",
115+
"@walletconnect/encoding@": ">=1.0.1",
116+
"@walletconnect/jsonrpc-utils@": ">=1.0.8",
117+
"@walletconnect/types@": ">=2.20.2",
118+
"@walletconnect/universal-provider@": ">=2.20.2",
119+
"@walletconnect/sign-client@": ">=2.20.2",
120+
"@walletconnect/utils@": ">=2.20.2",
121+
"@walletconnect/ethereum-provider@": ">=2.20.2"
113122
}
114123
}
115124
}

advanced/dapps/react-dapp-v2/pnpm-lock.yaml

Lines changed: 196 additions & 521 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Loading

advanced/dapps/react-dapp-v2/src/chains/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import * as tron from "./tron";
1010
import * as tezos from "./tezos";
1111
import * as kadena from "./kadena";
1212
import * as bip122 from "./bip122";
13+
import * as sui from "./sui";
1314
import * as stacks from "./stacks";
1415

1516
import { ChainMetadata, ChainRequestRender } from "../helpers";
@@ -37,6 +38,8 @@ export function getChainMetadata(chainId: string): ChainMetadata {
3738
return tezos.getChainMetadata(chainId);
3839
case "bip122":
3940
return bip122.getChainMetadata(chainId);
41+
case "sui":
42+
return sui.getChainMetadata(chainId);
4043
case "stacks":
4144
return stacks.getChainMetadata(chainId);
4245
default:
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers";
2+
3+
export const SUI_MAINNET = "mainnet";
4+
export const SUI_TESTNET = "testnet";
5+
export const SUI_DEVNET = "devnet";
6+
7+
export const SuiChainData: ChainsMap = {
8+
[SUI_MAINNET]: {
9+
id: `sui:${SUI_MAINNET}`,
10+
name: "SUI Mainnet",
11+
rpc: [],
12+
slip44: 0,
13+
testnet: false,
14+
},
15+
[SUI_TESTNET]: {
16+
id: `sui:${SUI_TESTNET}`,
17+
name: "SUI Testnet",
18+
rpc: [],
19+
slip44: 0,
20+
testnet: true,
21+
},
22+
[SUI_DEVNET]: {
23+
id: `sui:${SUI_DEVNET}`,
24+
name: "SUI Devnet",
25+
rpc: [],
26+
slip44: 0,
27+
testnet: true,
28+
},
29+
};
30+
31+
export const SuiMetadata: NamespaceMetadata = {
32+
[SUI_MAINNET]: {
33+
logo: "/assets/sui.png",
34+
rgb: "6, 135, 245",
35+
},
36+
[SUI_TESTNET]: {
37+
logo: "/assets/sui.png",
38+
rgb: "6, 135, 245",
39+
},
40+
[SUI_DEVNET]: {
41+
logo: "/assets/sui.png",
42+
rgb: "6, 135, 245",
43+
},
44+
};
45+
46+
export function getChainMetadata(chainId: string): ChainMetadata {
47+
const reference = chainId.split(":")[1];
48+
const metadata = SuiMetadata[reference];
49+
if (typeof metadata === "undefined") {
50+
throw new Error(`No chain metadata found for chainId: ${chainId}`);
51+
}
52+
return metadata;
53+
}

advanced/dapps/react-dapp-v2/src/components/Asset.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const kadenaLogo = getChainMetadata("kadena:testnet04").logo;
1313
const btcLogo = getChainMetadata(
1414
"bip122:000000000933ea01ad0ee984209779ba"
1515
).logo;
16-
16+
const suiLogo = getChainMetadata("sui:mainnet").logo;
1717
const SAsset = styled.div`
1818
width: 100%;
1919
padding: 20px;
@@ -53,6 +53,8 @@ function getAssetIcon(asset: AssetData): JSX.Element {
5353
return <Icon src={kadenaLogo} />;
5454
case "btc":
5555
return <Icon src={btcLogo} />;
56+
case "sui":
57+
return <Icon src={suiLogo} />;
5658
default:
5759
return <Icon src={"/assets/eth20.svg"} />;
5860
}
@@ -72,7 +74,7 @@ const Asset = (props: AssetProps) => {
7274
</SAssetLeft>
7375
<SAssetRight>
7476
<SAssetBalance>
75-
{fromWad(asset.balance || "0")} {asset.symbol}
77+
{fromWad(asset.balance || "0", asset.decimals)} {asset.symbol}
7678
</SAssetBalance>
7779
</SAssetRight>
7880
</SAsset>

advanced/dapps/react-dapp-v2/src/components/Button.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ const SButton = styled.button<ButtonStyleProps>`
109109
const Button = (props: ButtonProps) => (
110110
<SButton
111111
{...props}
112+
onClick={props.onClick}
112113
type={props.type}
113114
outline={props.outline}
114115
color={props.color}

advanced/dapps/react-dapp-v2/src/components/Column.tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,7 @@ const SColumn = styled.div<ColumnStyleProps>`
2727

2828
const Column = (props: ColumnProps) => {
2929
const { children, spanHeight, maxWidth, center } = props;
30-
return (
31-
<SColumn
32-
{...props}
33-
spanHeight={spanHeight}
34-
maxWidth={maxWidth}
35-
center={center}
36-
>
37-
{children}
38-
</SColumn>
39-
);
30+
return <SColumn {...props}>{children}</SColumn>;
4031
};
4132

4233
Column.propTypes = {

advanced/dapps/react-dapp-v2/src/constants/default.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const DEFAULT_MAIN_CHAINS = [
2020
"tezos:mainnet",
2121
"kadena:mainnet01",
2222
"bip122:000000000019d6689c085ae165831e93",
23+
"sui:mainnet",
2324
"stacks:1",
2425
];
2526

@@ -41,6 +42,8 @@ export const DEFAULT_TEST_CHAINS = [
4142
"tezos:testnet",
4243
"kadena:testnet04",
4344
"bip122:000000000933ea01ad0ee984209779ba",
45+
"sui:testnet",
46+
"sui:devnet",
4447
"stacks:2147483648",
4548
];
4649

@@ -304,6 +307,20 @@ export enum DEFAULT_BIP122_EVENTS {
304307
BIP122_ADDRESS_CHANGED = "bip122_addressesChanged",
305308
}
306309

310+
/**
311+
* SUI
312+
*/
313+
export enum DEFAULT_SUI_METHODS {
314+
SUI_SIGN_TRANSACTION = "sui_signTransaction",
315+
SUI_SIGN_AND_EXECUTE_TRANSACTION = "sui_signAndExecuteTransaction",
316+
SUI_SIGN_PERSONAL_MESSAGE = "sui_signPersonalMessage",
317+
}
318+
319+
export enum DEFAULT_SUI_EVENTS {
320+
SUI_ACCOUNTS_CHANGED = "sui_accountsChanged",
321+
SUI_CHAIN_CHANGED = "sui_chainChanged",
322+
}
323+
307324
export const REGIONALIZED_RELAYER_ENDPOINTS: RelayerType[] = [
308325
{
309326
value: DEFAULT_RELAY_URL,

advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { EIP155ChainData } from "../chains/eip155";
1717
import { TezosChainData } from "../chains/tezos";
1818
import { KadenaChainData } from "../chains/kadena";
1919
import { BtcChainData } from "../chains/bip122";
20+
import { SuiChainData } from "../chains/sui";
2021
import { StacksChainData } from "../chains/stacks";
2122

2223
/**
@@ -78,6 +79,9 @@ export function ChainDataContextProvider({
7879
case "bip122":
7980
chains = BtcChainData;
8081
break;
82+
case "sui":
83+
chains = SuiChainData;
84+
break;
8185
case "stacks":
8286
chains = StacksChainData;
8387
break;

0 commit comments

Comments
 (0)