Skip to Content
dAppsAlgorand

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.



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) // true

Dé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 null

Publier 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éthodeDescription
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éTypeDescription
isConnectedbooleanÉtat de connexion
addressstring | nullAdresse connectée
isOneKeybooleanIdentifiant OneKey

Événements

ÉvénementParamètresDescription
connect{ address }Portefeuille connecté
disconnect-Portefeuille déconnecté
accountChangedaddressCompte 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

CodeDescription
4001Demande rejetée par l’utilisateur
4100Non autorisé
4200Méthode non prise en charge
-32602Paramè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