このページの内容
署名
拡張機能を有効にし、アカウントを選択して、目的のチェーンに API クライアントを接続します。現在のチェーンメタデータからトランザクションペイロードを構築してください。このガイドの省略された 16 進数値はプレースホルダーです。
Polkadot でトランザクションとメッセージに署名する方法を説明します。
トランザクションペイロードに署名
extrinsic ペイロードに署名します:
import { web3FromAddress } from '@polkadot/extension-dapp'
// Get injector for specific account
const injector = await web3FromAddress(accountAddress)
// Sign payload
const payload = {
address: accountAddress,
blockHash: '0x...',
blockNumber: '0x...',
era: '0x...',
genesisHash: '0x...',
method: '0x...',
nonce: '0x...',
specVersion: '0x...',
tip: '0x...',
transactionVersion: '0x...',
signedExtensions: [], // Populate from current chain metadata; do not sign this placeholder
version: 4,
}
const result = await provider.web3SignPayload(payload)
console.log({
id: result.id,
signature: result.signature, // Hex signature
})生のメッセージに署名
const payload = {
address: accountAddress,
data: '0x48656c6c6f', // Hex-encoded message
type: 'bytes',
}
const result = await provider.web3SignRaw(payload)
console.log({
id: result.id,
signature: result.signature,
})トランザクションイベントを監視
await tx.signAndSend(
account.address,
{ signer: injector.signer },
({ status, events }) => {
if (status.isInBlock) {
console.log('In block:', status.asInBlock.toHex())
}
if (status.isFinalized) {
console.log('Finalized:', status.asFinalized.toHex())
events.forEach(({ event }) => {
if (api.events.system.ExtrinsicSuccess.is(event)) {
console.log('Transaction succeeded')
}
if (api.events.system.ExtrinsicFailed.is(event)) {
console.log('Transaction failed')
}
})
}
}
)RPC メソッド
RPC リクエストを送信
const response = await provider.web3RpcSend({
method: 'chain_getHeader',
params: [],
})
console.log('Latest header:', response.result)RPC イベントを購読
const subscriptionId = await provider.web3RpcSubscribe(
{
method: 'chain_subscribeNewHeads',
params: [],
},
(response) => {
console.log('New block:', response.result)
}
)
// Unsubscribe later
await provider.web3RpcUnSubscribe()エラー処理
try {
const result = await provider.web3SignPayload(payload)
} catch (error) {
if (error.message === 'Cancelled') {
console.log('User cancelled signing')
} else {
console.error('Signing failed:', error)
}
}React との併用
import { useState, useEffect } from 'react'
import { web3Enable, web3Accounts } from '@polkadot/extension-dapp'
function usePolkadotWallet() {
const [accounts, setAccounts] = useState([])
const [isConnected, setIsConnected] = useState(false)
const connect = async () => {
const extensions = await web3Enable('My dApp')
if (extensions.length > 0) {
const allAccounts = await web3Accounts()
setAccounts(allAccounts)
setIsConnected(true)
}
}
return { accounts, isConnected, connect }
}最終更新日