このページの内容
はじめに
署名前に権限を要求し、接続済みアカウントを選択して、有効なチェーンを読み取ってください。これらの例では、現在のプロバイダーが受け入れる @mysten/[email protected] の形式に合う @mysten/[email protected] を使用します。
OneKey のプロバイダーを検出して接続し、Sui を操作する方法を説明します。
OneKey は Sui Wallet Standard を実装し、互換性のある wallet-standard 統合に対応しています。
プロバイダーの検出
// Detect OneKey Sui provider
const provider = window.$onekey?.sui
if (!provider) {
throw new Error('OneKey Sui provider not detected')
}権限を確認
// Check if already connected
const hasPermission = await provider.hasPermissions()
if (hasPermission) {
const accounts = await provider.getAccounts()
console.log('Connected accounts:', accounts)
}接続を要求
// Request permissions to connect
const result = await provider.requestPermissions()
if (result) {
const accounts = await provider.getAccounts()
console.log('Connected:', accounts[0].address)
}署名用のアカウントコンテキスト
@mysten/[email protected] をインストールします。注入されたプロバイダーの getAccounts() は AccountInfo[] を返しますが、署名メソッドで必要な WalletAccount とは異なります。以下のヘルパーは Wallet Standard 経由で完全なアカウントを取得します。ウォレット登録後、ユーザー操作から呼び出してください。拒否を処理し、アカウントやネットワークが変わったら再接続してください。
import { getWallets, isWalletWithRequiredFeatureSet } from '@mysten/wallet-standard'
async function connectSuiAccount() {
const wallet = getWallets().get().find(wallet => wallet.name === 'OneKey Wallet')
if (!wallet || !isWalletWithRequiredFeatureSet(wallet)) {
throw new Error('OneKey Sui Wallet Standard is not available')
}
const { accounts } = await wallet.features['standard:connect'].connect()
const [account] = accounts
const chain = await provider.getActiveChain()
if (!account || !chain || !account.chains.includes(chain)) {
throw new Error('No connected Sui account for the active chain')
}
return { account, chain }
}アカウントを取得
const accounts = await provider.getAccounts()
accounts.forEach(account => {
console.log({
address: account.address, // Sui address
publicKey: account.publicKey, // Public key (hex string)
})
})有効なチェーンを取得
const chain = await provider.getActiveChain()
console.log('Active chain:', chain) // e.g., 'sui:testnet'接続状態を確認
const isConnected = provider.isConnected()
console.log('Connected:', isConnected)切断
await provider.disconnect()イベントリスナー
アカウント変更を監視
provider.onAccountChange((account) => {
if (account) {
console.log('Account changed:', account.address)
} else {
console.log('Disconnected')
}
})ネットワーク変更を監視
provider.onNetworkChange((network) => {
console.log('Network changed:', network)
})Sui Wallet Kit との併用
この React の例では、以下に固定した互換性のあるパッケージバージョンを使用します:
npm install @mysten/[email protected] @mysten/[email protected] @tanstack/react-query@^5import { SuiClientProvider, WalletProvider } from '@mysten/dapp-kit'
import { getFullnodeUrl } from '@mysten/sui/client'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
const queryClient = new QueryClient()
const networks = {
mainnet: { url: getFullnodeUrl('mainnet') },
testnet: { url: getFullnodeUrl('testnet') },
}
function App() {
return (
<QueryClientProvider client={queryClient}>
<SuiClientProvider networks={networks} defaultNetwork="mainnet">
<WalletProvider>
<YourApp />
</WalletProvider>
</SuiClientProvider>
</QueryClientProvider>
)
}OneKey は Sui Wallet Standard を通じて自動検出されます。
最終更新日