Preguntas frecuentes y resolución de problemas
¿Está la mainnet en funcionamiento?
Sí. La mainnet está en funcionamiento (id de cadena qorechain-vladi). El
preajuste de testnet (qorechain-diana) también sigue disponible. Ambos
preajustes incluyen endpoints predeterminados de localhost; selecciona la red con
createClient({ network: "mainnet" }) y sobrescribe endpoints con las URL de
tus nodos. Consulta Red y endpoints.
¿Por qué mis llamadas van a localhost?
createClient() usa de forma predeterminada endpoints de localhost. Para
comunicarte con un nodo real, pasa un objeto endpoints:
const client = createClient({
endpoints: {
rest: "https://api-testnet.qore.host",
rpc: "https://rpc-testnet.qore.host",
evmRpc: "https://evm-testnet.qore.host",
},
});
La ruta de firma (connectTx) necesita el endpoint de consenso rpc; las
lecturas de CosmWasm también lo usan. Las lecturas REST usan rest; las llamadas
EVM usan evmRpc (y las llamadas qor_ también, en un nodo que sirva ese
espacio de nombres). Las URL de la mainnet están en la
referencia de red.
"Cannot find module 'viem'" / "'@solana/web3.js'"
Estas son dependencias de pares de @qorechain/evm y @qorechain/svm
respectivamente. Instálalas en tu proyecto:
npm i @qorechain/evm viem
npm i @qorechain/svm @solana/web3.js
Una llamada a un precompilado lanza "returned no data" / "feature not present"
Los precompilados EVM de QoreChain están compilados en el nodo pero todavía no
están activos en la mainnet ni en la testnet: solo responden donde sus
direcciones figuran en el parámetro active_static_precompiles del módulo EVM, y
esa lista está vacía en ambas redes. Hoy la llamada devuelve datos vacíos, así que
viem informa returned no data ("0x") y el auxiliar lanza un error también en las
redes públicas (consulta
Precompilados EVM: estado de la red).
En un nodo EVM normal las llamadas fallan del mismo modo. Revisa
GET /cosmos/evm/vm/v1/params y envuelve cada llamada a un precompilado para que
el error se maneje por llamada.
Mi llamada a client.qor falla con -32601
client.qor llama al espacio de nombres JSON-RPC qor_, que ninguna compilación
publicada del nodo sirve; rpc_modules en los endpoints EVM públicos solo lista
eth, net, rpc, txpool y web3. Usa en su lugar una ruta REST, por ejemplo
GET /qorechain/pqc/v1/account/{address} (estado de la clave PQC) o
GET /qorechain/burn/v1/stats, mediante client.rest.get(...). Consulta
el espacio de nombres qor_.
Mis cantidades están desfasadas por un factor de un millón
QOR tiene 10^6 unidades base uqor. Usa toBase / fromBase y haz todas las
operaciones matemáticas en unidades base:
toBase("1.5"); // "1500000"
fromBase("1500000"); // "1.5"
Ten en cuenta que el runtime EVM representa QOR con 18 decimales (convención
de EVM), lo cual es distinto de la base uqor Native de 10^6.
¿Qué paquetes están publicados y dónde?
Todos. El núcleo de TypeScript (@qorechain/sdk, 0.8.3), los adaptadores EVM/SVM
(@qorechain/evm, @qorechain/svm, 0.8.0), el kit de React (@qorechain/react,
0.8.3) y el generador de proyectos create-qorechain-dapp (0.8.0) están en npm;
el cliente de Python está en PyPI (pip install qorechain-sdk en 0.8.3, importa
qorsdk); el cliente de Go está en el proxy de módulos
(go get github.com/qorechain/qorechain-sdk/packages/go/..., tag
packages/go/v0.8.4); el cliente de Rust está en crates.io
(cargo add qorechain-sdk, 0.8.3); y el cliente de Java está en Maven Central
(io.github.qorechain:qorechain-sdk:0.8.3). Consulta
Instalación para ver los comandos completos por lenguaje.
Mi frase mnemotécnica es rechazada
El SDK valida tanto la lista de palabras BIP-39 como la suma de comprobación
antes de derivar cualquier clave, de modo que una frase con una errata genera un
error en lugar de producir silenciosamente la cuenta equivocada. Vuelve a revisar
las palabras; usa validateMnemonic para probar una frase.
Transacciones híbridas (PQC)
El envío híbrido (clásico + ML-DSA-87) está en funcionamiento y es
obligatorio en la ruta Native: las transacciones Native solo clásicas son
rechazadas en la cadena (chain v3.2.0). Antes de que una transacción híbrida se
verifique con PQC, la clave pública PQC del firmante debe registrarse de forma
explícita con MsgRegisterPQCKeyV2 (una transacción firmada de forma clásica y
exenta del requisito híbrido); incrustar la clave pública en la extensión
(includePqcPublicKey: true) no la registra, y la cadena no registra una
clave en el primer uso.
La cadena acepta cualquier firma ML-DSA-87 válida según FIPS-204, hedged o
determinista. El SDK firma de forma determinista por defecto (desde 0.5.1) para
que una transacción tenga siempre la misma firma y el mismo hash de tx. Si una tx
híbrida falla con el código 21 de pqc (hybrid_verify_failed), la causa es la
versión de los sign-bytes, el chain-id, una biblioteca PQC obsoleta o una clave no
registrada, nunca la firma hedged.
Ambas redes verifican la forma v2 de los sign-bytes, así que usa el SDK 0.8.1 o
posterior y pasa rest (o signBytesVersion): los constructores lanzan un
error en qorechain-vladi / qorechain-diana si no se indica uno de ellos.
Consulta
Solución de problemas del código 21 y
Cuentas y firma PQC.
Mi transacción EVM es rechazada con "no open EVM authorisation window"
Desde chain v3.2.0, el carril EVM admite una transacción solo de una cuenta que
tenga una clave PQC registrada y una ventana de autorización abierta. Registra una
clave, abre una ventana y luego envía. Consulta
Ventana de autorización EVM. Con el SDK,
classifyEvmWindowRejection(err) devuelve "no-pqc-key", "no-window",
"exhausted" o "invalid".
Mis transacciones híbridas fallan en CheckTx con un error de análisis de la transacción
Actualiza el SDK. Las versiones 0.6.0 y anteriores serializaban en JSON la
extensión del cuerpo de la transacción /qorechain.pqc.v1.PQCHybridSignature,
que el decodificador de transacciones de la cadena rechaza en CheckTx. Desde
0.6.1 la extensión se codifica en protobuf (el valor comienza con 0x08) en
los cinco lenguajes: las transacciones híbridas construidas con versiones
anteriores son rechazadas en la cadena, en todos los carriles (incluido
eth-native).
Mi gasto mediante authenticator es rechazado con authenticator_replay
(El módulo abstractaccount está desactivado en ambas redes hoy; un gasto se
rechaza con abstract account module is disabled antes de comprobar ningún
nonce. Consulta Authenticators y gasto delegado. La
orientación siguiente se aplica una vez que se active el módulo.)
El nonce es incorrecto. MsgExecuteEVM.nonce debe ser el nonce EVM actual de
la cuenta (el relayer es una cuenta distinta, así que no sumes 1);
MsgExecuteCosmos.nonce es la secuencia por authenticator para
(account, pubkey), un contador de almacenamiento separado. Vuelve a obtener el
valor y firma de nuevo. Otros fallos de authenticator se decodifican mediante
decodeTxError: códigos de abstractaccount 5 (spending_limit_exceeded),
6 (session_key_expired) y 10 (permission_denied). Consulta
Authenticators y gasto delegado.