快速开始
了解如何检测、连接和与 Polkadot 及 Substrate 链进行交互。
OneKey 实现了 Polkadot.js 扩展接口,确保与所有 Substrate dApp 兼容。
Provider 检测
// OneKey 注册为 Polkadot.js 扩展
const provider = window.$onekey?.polkadot
// 或使用标准的 web3Enable API
import { web3Enable, web3Accounts } from '@polkadot/extension-dapp'启用扩展
// 直接使用 OneKey provider
const enabled = await provider.web3Enable('My dApp')
if (enabled) {
const accounts = await provider.web3Accounts()
console.log('账户:', accounts)
}使用 Polkadot.js Extension API(推荐)
import { web3Enable, web3Accounts } from '@polkadot/extension-dapp'
// 启用所有扩展(包括 OneKey)
const extensions = await web3Enable('My dApp')
if (extensions.length === 0) {
throw new Error('未找到扩展')
}
// 获取所有账户
const allAccounts = await web3Accounts()
console.log('账户:', allAccounts)获取账户
const accounts = await provider.web3Accounts()
accounts.forEach(account => {
console.log({
address: account.address, // Substrate 地址
name: account.name, // 账户名称
type: account.type, // 'sr25519' | 'ed25519' | 'ecdsa'
genesisHash: account.genesisHash, // 可选的链创世哈希
})
})订阅账户变更
const unsubscribe = provider.web3AccountsSubscribe((accounts) => {
console.log('账户已变更:', accounts)
})
// 稍后: unsubscribe()与 Polkadot.js API 配合使用
安装
npm install @polkadot/api @polkadot/extension-dapp连接并签署交易
import { ApiPromise, WsProvider } from '@polkadot/api'
import { web3Enable, web3FromAddress, web3Accounts } from '@polkadot/extension-dapp'
// 启用扩展
await web3Enable('My dApp')
// 获取账户
const accounts = await web3Accounts()
const account = accounts[0]
// 连接到链
const wsProvider = new WsProvider('wss://rpc.polkadot.io')
const api = await ApiPromise.create({ provider: wsProvider })
// 获取注入器
const injector = await web3FromAddress(account.address)
// 创建并签署交易
const tx = api.tx.balances.transfer(
recipientAddress,
1000000000000 // 1 DOT (10^12 planck)
)
// 签署并发送
const hash = await tx.signAndSend(
account.address,
{ signer: injector.signer }
)
console.log('交易哈希:', hash.toHex())Last updated on