本页目录
快速开始
启用扩展、选择账户,并将 API 客户端连接到目标链。根据链的当前元数据构建交易 payload;本指南中省略的十六进制数据均为占位值。
了解如何检测、连接和与 Polkadot 及 Substrate 链进行交互。
OneKey 通过 Polkadot.js 扩展接口提供本文列出的操作。
Provider 检测
// OneKey registers as a Polkadot.js extension
const provider = window.$onekey?.polkadot
// Or use the standard web3Enable API
import { web3Enable, web3Accounts } from '@polkadot/extension-dapp'启用扩展
// Using OneKey provider directly
const enabled = await provider.web3Enable('My dApp')
if (enabled) {
const accounts = await provider.web3Accounts()
console.log('Accounts:', accounts)
}使用 Polkadot.js Extension API(推荐)
import { web3Enable, web3Accounts } from '@polkadot/extension-dapp'
// Enable all extensions (including OneKey)
const extensions = await web3Enable('My dApp')
if (extensions.length === 0) {
throw new Error('No extension found')
}
// Get all accounts
const allAccounts = await web3Accounts()
console.log('Accounts:', allAccounts)获取账户
const accounts = await provider.web3Accounts()
accounts.forEach(account => {
console.log({
address: account.address, // Substrate address
name: account.name, // Account name
type: account.type, // 'sr25519' | 'ed25519' | 'ecdsa'
genesisHash: account.genesisHash, // Optional chain genesis
})
})订阅账户变更
const unsubscribe = provider.web3AccountsSubscribe((accounts) => {
console.log('Accounts changed:', accounts)
})
// Later: 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'
// Enable extensions
await web3Enable('My dApp')
// Get accounts
const accounts = await web3Accounts()
const account = accounts[0]
if (!account) throw new Error("No account was selected")
// Connect to chain
const wsProvider = new WsProvider('wss://rpc.polkadot.io')
const api = await ApiPromise.create({ provider: wsProvider })
// Get injector
const injector = await web3FromAddress(account.address)
// Create and sign transaction
const tx = api.tx.balances.transferKeepAlive(
recipientAddress,
'10000000000' // 1 DOT = 10^10 planck on Polkadot
)
// Sign and send
const hash = await tx.signAndSend(
account.address,
{ signer: injector.signer }
)
console.log('Transaction hash:', hash.toHex())最后更新于