Skip to Content
dAppsCardano

Cardano

Integra la cadena de bloques Cardano mediante el proveedor de OneKey compatible con CIP-30. Accede a través de window.cardano.onekey o window.cardano.nami.

OneKey implementa CIP-30 (Cardano dApp Connector) para las operaciones documentadas aquí. También ofrece compatibilidad con la cartera Nami.



Detección del proveedor

// OneKey provides both onekey and nami interfaces const onekey = window.cardano?.onekey const nami = window.cardano?.nami // Check availability if (!onekey) { throw new Error('OneKey Cardano provider not detected') } // Get wallet info console.log('Name:', onekey.name) // 'OneKey' console.log('API Version:', onekey.apiVersion) // '0.1.0' console.log('Icon:', onekey.icon)

Inicio rápido

Habilitar la cartera

// Request wallet access const api = await window.cardano.onekey.enable() // Now you can use the full API const networkId = await api.getNetworkId() console.log('Network:', networkId === 1 ? 'Mainnet' : 'Testnet')

Comprobar si está habilitada

const isEnabled = await window.cardano.onekey.isEnabled() if (isEnabled) { const api = await window.cardano.onekey.enable() // Use API... }

Información de la cuenta

Obtener el ID de red

const api = await window.cardano.onekey.enable() const networkId = await api.getNetworkId() // 0 = Testnet, 1 = Mainnet console.log('Network:', networkId)

Obtener el saldo

const balance = await api.getBalance() // Returns CBOR-encoded value (hex string) console.log('Balance (CBOR):', balance) // Decode using cardano-serialization-lib import { Value, BigNum } from '@emurgo/cardano-serialization-lib-browser' const value = Value.from_bytes(Buffer.from(balance, 'hex')) const lovelace = value.coin().to_str() console.log('Balance in lovelace:', lovelace) // Keep the exact integer string.

Obtener direcciones

// Get used addresses (addresses with transaction history) const usedAddresses = await api.getUsedAddresses() console.log('Used addresses:', usedAddresses) // Get unused addresses (fresh addresses) const unusedAddresses = await api.getUnusedAddresses() console.log('Unused addresses:', unusedAddresses) // Get change address const changeAddress = await api.getChangeAddress() console.log('Change address:', changeAddress) // Get reward/staking addresses const rewardAddresses = await api.getRewardAddresses() console.log('Reward addresses:', rewardAddresses)

Obtener UTxO

// Get all UTxOs const utxos = await api.getUtxos() console.log('UTxOs:', utxos) // Get UTxOs with minimum amount const utxosWithAmount = await api.getUtxos( Buffer.from(Value.new(BigNum.from_str('1000000')).to_bytes()).toString('hex') // CBOR-encoded Value for 1 ADA; import Value and BigNum from the serialization SDK. ) // With pagination const paginatedUtxos = await api.getUtxos(undefined, { page: 0, limit: 10, })

Transacciones

Firmar una transacción

// transaction should be CBOR-encoded hex string const witnessSetCbor = await api.signTx(transactionCbor, partialSign) // partialSign: boolean // - false: reject if the wallet cannot provide every required signature // - true: return the signatures the wallet can provide console.log('Witness set:', witnessSetCbor)

Enviar una transacción

// Submit signed transaction const txHash = await api.submitTx(signedTransactionCbor) console.log('Transaction hash:', txHash)

Construir, firmar y enviar

signTx devuelve un conjunto de testigos, no una transacción firmada completa. Construye la transacción sin firmar con una biblioteca de transacciones de Cardano, combina los testigos devueltos con el conjunto de testigos existente y envía la transacción completa resultante.

// `unsignedTransactionCbor` is a complete transaction built with current // protocol parameters, selected inputs, outputs, fees, and change. const witnessSetCbor = await api.signTx(unsignedTransactionCbor, false) // Merge witnessSetCbor into the original transaction using your Cardano SDK. // Preserve existing witnesses, scripts, datums, redeemers, and auxiliary data. // Submit the serialized complete transaction, never witnessSetCbor alone. const txHash = await api.submitTx(completeSignedTransactionCbor)

Usa el flujo de Lucid o Mesh que aparece a continuación si tu aplicación aún no implementa la construcción de transacciones y la combinación de testigos. Estos ejemplos de SDK son específicos de una versión; sigue la documentación de la versión que instales.


Firma de datos

Firmar datos (CIP-8)

Firma datos arbitrarios para autenticación:

const api = await window.cardano.onekey.enable() const addresses = await api.getUsedAddresses() const address = addresses[0] // Message to sign const payload = Buffer.from('Hello Cardano!').toString('hex') const signature = await api.signData(address, payload) console.log({ signature: signature.signature, // COSE_Sign1 signature key: signature.key, // COSE_Key public key })

Verificar la firma

import { COSESign1, COSEKey } from '@emurgo/cardano-message-signing-browser' const coseSign1 = COSESign1.from_bytes( Buffer.from(signature.signature, 'hex') ) const coseKey = COSEKey.from_bytes( Buffer.from(signature.key, 'hex') ) // Get the signed payload const signedPayload = coseSign1.payload() // Verify signature // Parsing COSE is not verification. Use a CIP-8 verifier to check the // protected headers, signing structure, payload, signature, and address binding.

Gestión de eventos

Escuchar cambios de cuenta

const api = await window.cardano.onekey.enable() // Nami-compatible event API api.experimental.on('accountChange', (addresses) => { console.log('Account changed:', addresses) })

Referencia de la API

Interfaz de cartera (CIP-30)

Propiedad/métodoDescripción
nameNombre de la cartera (‘OneKey’)
iconURL del icono de la cartera
apiVersionVersión de la API
isEnabled()Comprobar si está habilitada
enable()Solicitar acceso a la cartera

API para dApps (tras habilitar)

MétodoDescripción
getNetworkId()Obtener la red (0=red de pruebas, 1=red principal)
getBalance()Obtener el saldo total (CBOR)
getUtxos(amount?, paginate?)Obtener UTxO
getUsedAddresses()Obtener las direcciones usadas
getUnusedAddresses()Obtener las direcciones sin usar
getChangeAddress()Obtener la dirección de cambio
getRewardAddresses()Obtener las direcciones de staking
signTx(tx, partialSign?)Devolver las partes firmadas de un conjunto de testigos
signData(addr, payload)Firmar datos (CIP-8)
submitTx(tx)Enviar una transacción

API experimental

MétodoDescripción
experimental.getCollateral()Obtener UTxO de garantía
experimental.on(event, cb)Suscribirse a eventos
experimental.off()Cancelar la suscripción

Tipos

type Cbor = string // Hex-encoded CBOR interface Paginate { page: number limit: number } interface Cip30DataSignature { signature: string // COSE_Sign1 hex key: string // COSE_Key hex } type NetworkId = 0 | 1 // 0=testnet, 1=mainnet

Eventos

EventoDescripción
accountChangeCuenta cambiada

Gestión de errores

try { const api = await window.cardano.onekey.enable() } catch (error) { if (error.code === -3) { console.log('The wallet refused the request') } else if (error.code === -4) { console.log('The account changed; reconnect and retry') } else { console.error('Error:', error.message) } }

Errores habituales

CódigoDescripción
-1Solicitud no válida
-2Error interno
-3Solicitud rechazada
-4Cuenta cambiada

Uso con Lucid

Lucid  ofrece una API más sencilla:

npm install lucid-cardano
import { Lucid, Blockfrost } from 'lucid-cardano' // Initialize Lucid with OneKey const lucid = await Lucid.new( new Blockfrost('https://cardano-mainnet.blockfrost.io/api', 'your-api-key'), 'Mainnet' ) // Connect OneKey const api = await window.cardano.onekey.enable() lucid.selectWallet(api) // Send ADA const tx = await lucid .newTx() .payToAddress('addr1...', { lovelace: 5000000n }) .complete() const signedTx = await tx.sign().complete() const txHash = await signedTx.submit() console.log('TX Hash:', txHash)

Uso con Mesh

Mesh  es otro SDK popular de Cardano:

npm install @meshsdk/core
import { BrowserWallet, Transaction } from '@meshsdk/core' // Connect to OneKey const wallet = await BrowserWallet.enable('onekey') // Get wallet info const balance = await wallet.getBalance() const addresses = await wallet.getUsedAddresses() // Build and send transaction const tx = new Transaction({ initiator: wallet }) .sendLovelace('addr1...', '5000000') const unsignedTx = await tx.build() const signedTx = await wallet.signTx(unsignedTx) const txHash = await wallet.submitTx(signedTx)

Compatibilidad con Nami

El alias de compatibilidad puede pertenecer a otra extensión. Usa window.cardano.onekey para seleccionar OneKey explícitamente.

// Access via Nami interface const nami = window.cardano.nami const api = await nami.enable() // Same API as OneKey const balance = await api.getBalance()
Última actualización el