Skip to content

Sui

Bitget Wallet only supports this feature in the following versions

PlatformVersionDescription
Chrome Extension>=v1.4.6mainnet
App(iOS)>=v7.3.4mainnet
App(Android)>=v7.3.4mainnet

provider

Sui wallet is based on wallet-standard, Different from other heterogeneous chains, providers are obtained through events.

js
const chainName = 'suiMainnet';
const GlobalWallet = {
    register: (wallet) => {
        GlobalWallet[chainName] = wallet
    }
}
const event = new CustomEvent('wallet-standard:app-ready', { detail: GlobalWallet });
window.dispatchEvent(event);

const provider = GlobalWallet[chainName]
const chainName = 'suiMainnet';
const GlobalWallet = {
    register: (wallet) => {
        GlobalWallet[chainName] = wallet
    }
}
const event = new CustomEvent('wallet-standard:app-ready', { detail: GlobalWallet });
window.dispatchEvent(event);

const provider = GlobalWallet[chainName]

connect

connect to wallet

js
await provider.features['standard:connect'].connect();
await provider.features['standard:connect'].connect();

account

get current account info

js
const accounts = provider.account

accounts = [account, account,,, account]

//data contains:
account = {
  address: '0x,,,,,,,,,,,,,,b1c',
  chains: ['sui:mainet']
};
const accounts = provider.account

accounts = [account, account,,, account]

//data contains:
account = {
  address: '0x,,,,,,,,,,,,,,b1c',
  chains: ['sui:mainet']
};

standard:events

events listeners

js
let on = provider.features['standard:events'].on;

on("connect", (event) => console.log("sui connected.", event));
on("disconnect", (event) => console.log("sui disconnect.", event));
on("accountChanged", (event) => console.log("sui accountChanged.", event));
let on = provider.features['standard:events'].on;

on("connect", (event) => console.log("sui connected.", event));
on("disconnect", (event) => console.log("sui disconnect.", event));
on("accountChanged", (event) => console.log("sui accountChanged.", event));

signTransactionBlock

Sign a transaction

provider.features['sui:signTransactionBlock'].signTransactionBlock

js
//https://docs.sui.io/guides/developer/sui-101/building-ptb

import { TransactionBlock } from "@mysten/sui.js/transactions"; 
const tx = new TransactionBlock();
tx.moveCall({
  target: 'xxx',
  arguments: [
    tx.pure('Bitget'),
    tx.pure('wallet'),
  ],
});
const input = {
  transactionBlockSerialized: tx.serialize(),
  options: {
    showEffects: true,
  }
}

const signTransactionBlock = provider.features['sui:signTransactionBlock'].signTransactionBlock;
const transaction = await signTransactionBlock({ transactionBlock: tx })
//https://docs.sui.io/guides/developer/sui-101/building-ptb

import { TransactionBlock } from "@mysten/sui.js/transactions"; 
const tx = new TransactionBlock();
tx.moveCall({
  target: 'xxx',
  arguments: [
    tx.pure('Bitget'),
    tx.pure('wallet'),
  ],
});
const input = {
  transactionBlockSerialized: tx.serialize(),
  options: {
    showEffects: true,
  }
}

const signTransactionBlock = provider.features['sui:signTransactionBlock'].signTransactionBlock;
const transaction = await signTransactionBlock({ transactionBlock: tx })

signAndExecuteTransactionBlock

Sign a transaction and broadcast it

provider.features['sui:signAndExecuteTransactionBlock'].signAndExecuteTransactionBlock

js
import { TransactionBlock } from "@mysten/sui.js/transactions";

const handleTransaction = async () => {
    const tx = new TransactionBlock()
    tx.moveCall({
      target: `${packageId}::${moduleName}::${functionName}`,
      arguments: [
        tx.pure(params1),
        tx.pure(params2),
      ],
      typeArguments: [],
    })
    const signAndExecuteTransactionBlock = provider.features['sui:signAndExecuteTransactionBlock'].signAndExecuteTransactionBlock;
    const result = await signAndExecuteTransactionBlock({
      transactionBlock: tx,
      options: { showEffects: true },
    })
    console.log('result', result)
    // result?.effects?.status?.status: 'success',失败为'failure'
}
import { TransactionBlock } from "@mysten/sui.js/transactions";

const handleTransaction = async () => {
    const tx = new TransactionBlock()
    tx.moveCall({
      target: `${packageId}::${moduleName}::${functionName}`,
      arguments: [
        tx.pure(params1),
        tx.pure(params2),
      ],
      typeArguments: [],
    })
    const signAndExecuteTransactionBlock = provider.features['sui:signAndExecuteTransactionBlock'].signAndExecuteTransactionBlock;
    const result = await signAndExecuteTransactionBlock({
      transactionBlock: tx,
      options: { showEffects: true },
    })
    console.log('result', result)
    // result?.effects?.status?.status: 'success',失败为'failure'
}

signMessage

Sign a message for a single transaction

Convert UTF-8 bytes based on TextEncoder

js
const msg = 'Hello Bitget Wallet!'
const msgBytes = new TextEncoder().encode(msg)
      
// const message = ethers.utils.toUtf8Bytes('bitget')

const signMessage = suiWallet.features['sui:signMessage'].signMessage;
const { signature, messageBytes } = await signMessage({ message: msgBytes })
const msg = 'Hello Bitget Wallet!'
const msgBytes = new TextEncoder().encode(msg)
      
// const message = ethers.utils.toUtf8Bytes('bitget')

const signMessage = suiWallet.features['sui:signMessage'].signMessage;
const { signature, messageBytes } = await signMessage({ message: msgBytes })

Refs

  1. Sui official documentation
  2. Wallet Standard
  3. TextEncoder