Sur cette page
Algorand
Intégrez la blockchain Algorand à l’aide du fournisseur OneKey. Accès via window.$onekey.algo.
Le fournisseur Algorand OneKey prend en charge les interfaces historiques et celles conformes à ARC-0001.
Liens rapides
Détection du fournisseur
// Detect OneKey Algorand provider
const provider = window.$onekey?.algo
if (!provider) {
throw new Error('OneKey Algorand provider not detected')
}
// Check compatibility
console.log('isOneKey:', provider.isOneKey) // trueDémarrage rapide
Connexion (API historique)
const { address } = await provider.connect()
console.log('Connected:', address)
// Check connection status
console.log('isConnected:', provider.isConnected)
console.log('Address:', provider.address)Activation (ARC-0001)
const result = await provider.enable({
genesisID: 'mainnet-v1.0',
genesisHash: 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=',
})
console.log('Accounts:', result.accounts)
console.log('Genesis Hash:', result.genesisHash)Déconnexion
await provider.disconnect()
console.log('Disconnected')Transactions
Signer des transactions (ARC-0001)
Signer une ou plusieurs transactions :
import algosdk from 'algosdk'
// Create transaction
const suggestedParams = await algodClient.getTransactionParams().do()
const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
from: senderAddress,
to: recipientAddress,
amount: 1000000, // 1 ALGO (microAlgos)
suggestedParams,
})
// Prepare for signing
const walletTxns = [{
txn: Buffer.from(algosdk.encodeUnsignedTransaction(txn)).toString('base64'),
}]
// Sign
const signedTxns = await provider.signTxns(walletTxns)
console.log('Signed transactions:', signedTxns)Signer plusieurs transactions
// Group transactions
const txns = [txn1, txn2, txn3]
algosdk.assignGroupID(txns)
// Prepare for signing
const walletTxns = txns.map(txn => ({
txn: Buffer.from(algosdk.encodeUnsignedTransaction(txn)).toString('base64'),
}))
// Sign all
const signedTxns = await provider.signTxns(walletTxns)Signature partielle (multisignature)
// Only sign specific transactions in a group
const walletTxns = [
{ txn: encodedTxn1 },
{ txn: encodedTxn2, signers: [] }, // Skip this one
{ txn: encodedTxn3 },
]
const signedTxns = await provider.signTxns(walletTxns)
// signedTxns[1] will be nullPublier des transactions
Diffuser des transactions signées :
const completeTxns = signedTxns.filter((txn) => txn !== null)
if (completeTxns.length !== signedTxns.length) {
throw new Error('Complete all required signatures before broadcasting the group')
}
const result = await provider.postTxns(completeTxns)
console.log('Transaction IDs:', result.txnIDs)Signer et publier
Signer et diffuser en une seule étape :
const result = await provider.signAndPostTxns(walletTxns)
console.log('Transaction IDs:', result.txnIDs)API de transaction historique
Signer une transaction (historique)
// Create transaction as Uint8Array
const txnBytes = algosdk.encodeUnsignedTransaction(txn)
// Sign
const signedTxnBytes = await provider.signTransaction([txnBytes])
// Send
const { txId } = await algodClient.sendRawTransaction(signedTxnBytes[0]).do()Signer et envoyer (historique)
const result = await provider.signAndSendTransaction([txnBytes])
console.log('Transaction ID:', result.txId)Signature de message
Signer un message arbitraire
const message = new TextEncoder().encode('Hello Algorand!')
const { signature, address } = await provider.signMessage(
message,
'utf8' // or 'hex'
)
console.log('Signature:', signature)
console.log('Signer:', address)Vérifier la signature
import nacl from 'tweetnacl'
const message = new TextEncoder().encode('Hello Algorand!')
const { signature } = await provider.signMessage(message)
// Get public key from address
const publicKey = algosdk.decodeAddress(provider.address).publicKey
const isValid = nacl.sign.detached.verify(message, signature, publicKey)
console.log('Valid:', isValid)Gestion des événements
Écouter les changements de compte
provider.on('accountChanged', (address) => {
if (address) {
console.log('Account changed:', address)
} else {
console.log('Disconnected')
}
})Écouter la connexion
provider.on('connect', ({ address }) => {
console.log('Connected:', address)
})
provider.on('disconnect', () => {
console.log('Disconnected')
})Utilisation avec le client Algod
Obtenir le client depuis le fournisseur
// Get pre-configured clients
const algodTransport = await provider.getAlgodv2Client()
const indexerTransport = await provider.getIndexerClient()
// These are BaseHTTPClient transports, not Algodv2 or Indexer SDK instances.
// Use the manual setup below for SDK methods such as status().do().Configuration manuelle du client
import algosdk from 'algosdk'
const algodClient = new algosdk.Algodv2(
'', // Token (not needed for public nodes)
'https://mainnet-api.algonode.cloud',
''
)
const indexerClient = new algosdk.Indexer(
'',
'https://mainnet-idx.algonode.cloud',
''
)Référence de l’API
Méthodes
| Méthode | Description |
|---|---|
connect() | Connecter le portefeuille (historique) |
disconnect() | Déconnecter le portefeuille |
enable(opts?) | Activer le portefeuille (ARC-0001) |
signTxns(transactions) | Signer des transactions (ARC-0001) |
postTxns(signedTxns) | Diffuser des transactions |
signAndPostTxns(transactions) | Signer et diffuser |
signTransaction(txns) | Signer des transactions (historique) |
signAndSendTransaction(txns) | Signer et envoyer (historique) |
signMessage(message, encoding?) | Signer un message arbitraire |
getAlgodv2Client() | Obtenir le client Algod |
getIndexerClient() | Obtenir le client Indexer |
Types
interface EnableOpts {
genesisID?: string
genesisHash?: string
}
interface EnableResult {
genesisID: string
genesisHash: string
accounts: string[]
}
interface WalletTransaction {
txn: string // Base64 encoded unsigned transaction
signers?: string[] // Addresses that should sign (empty = skip)
stxn?: string // Pre-signed transaction
message?: string // Message to display
msig?: MultisigMetadata
authAddr?: string // Rekeyed auth address
}
type SignTxnsResult = (string | null)[]; // Base64 signed transactions; null means skipped.
interface PostTxnsResult {
txnIDs: string[]
}
interface TransactionResult {
txId: string
}Propriétés
| Propriété | Type | Description |
|---|---|---|
isConnected | boolean | État de connexion |
address | string | null | Adresse connectée |
isOneKey | boolean | Identifiant OneKey |
Événements
| Événement | Paramètres | Description |
|---|---|---|
connect | { address } | Portefeuille connecté |
disconnect | - | Portefeuille déconnecté |
accountChanged | address | Compte modifié |
Gestion des erreurs
try {
const signedTxns = await provider.signTxns(walletTxns)
} catch (error) {
if (error.code === 4001) {
console.log('User rejected the request')
} else if (error.code === 4100) {
console.log('The account or method is not authorized')
} else {
console.error('Error:', error.message)
}
}Codes d’erreur courants
| Code | Description |
|---|---|
| 4001 | Demande rejetée par l’utilisateur |
| 4100 | Non autorisé |
| 4200 | Méthode non prise en charge |
| -32602 | Paramètres non valides |
Exemple complet
import algosdk from 'algosdk'
async function sendAlgo() {
// Connect
const provider = window.$onekey?.algo
if (!provider) throw new Error("OneKey Algorand provider is unavailable")
const { address } = await provider.connect()
// Setup client
const algodClient = new algosdk.Algodv2(
'',
'https://mainnet-api.algonode.cloud',
''
)
// Get params
const suggestedParams = await algodClient.getTransactionParams().do()
// Create transaction
const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
from: address,
to: 'RECIPIENT_ADDRESS',
amount: 1000000, // 1 ALGO
suggestedParams,
})
// Sign
const walletTxns = [{
txn: Buffer.from(algosdk.encodeUnsignedTransaction(txn)).toString('base64'),
}]
const signedTxns = await provider.signTxns(walletTxns)
if (!signedTxns[0]) throw new Error("The transaction was not signed")
// Send
const { txId } = await algodClient.sendRawTransaction(
Buffer.from(signedTxns[0], 'base64')
).do()
console.log('Transaction ID:', txId)
// Wait for confirmation
await algosdk.waitForConfirmation(algodClient, txId, 4)
console.log('Confirmed!')
}Dernière mise à jour le