Passa al contenuto principale

FAQ e risoluzione dei problemi

La mainnet è attiva?

Sì. La mainnet è attiva (chain id qorechain-vladi). Anche il preset di testnet (qorechain-diana) rimane disponibile. Entrambi i preset includono endpoint predefiniti su localhost; seleziona la rete con createClient({ network: "mainnet" }) e sovrascrivi endpoints con gli URL del tuo nodo. Vedi Rete ed endpoint.

Perché le mie chiamate finiscono su localhost?

createClient() usa per impostazione predefinita endpoint su localhost. Per comunicare con un nodo reale, passa un oggetto endpoints:

const client = createClient({
endpoints: {
rest: "https://api-testnet.qore.host",
rpc: "https://rpc-testnet.qore.host",
evmRpc: "https://evm-testnet.qore.host",
},
});

Il percorso di firma (connectTx) richiede l'endpoint rpc del consenso; anche le letture CosmWasm lo usano. Le letture REST usano rest; le chiamate EVM e qor_ usano evmRpc.

"Cannot find module 'viem'" / "'@solana/web3.js'"

Si tratta di peer dependency rispettivamente di @qorechain/evm e @qorechain/svm. Installale nel tuo progetto:

npm i @qorechain/evm viem
npm i @qorechain/svm @solana/web3.js

Una chiamata a un precompile lancia "feature not present"

I precompile EVM esistono solo sui nodi che eseguono il QoreChain EVM Engine. Su un nodo EVM semplice quelle chiamate falliscono. Se ti rivolgi a nodi eterogenei, incapsula ogni chiamata al precompile e gestisci l'errore per ciascuna chiamata.

I miei importi sono sbagliati di un fattore di un milione

QOR ha unità base uqor a 10^6. Usa toBase / fromBase ed esegui tutti i calcoli in unità base:

toBase("1.5"); // "1500000"
fromBase("1500000"); // "1.5"

Nota che il runtime EVM rappresenta QOR con 18 decimali (convenzione EVM), il che è distinto dalla base Native uqor di 10^6.

Quali pacchetti sono pubblicati, e dove?

Tutti. Il core TypeScript (@qorechain/sdk), gli adapter EVM/SVM (@qorechain/evm, @qorechain/svm), il kit React (@qorechain/react) e lo scaffolder create-qorechain-dapp sono su npm alla versione 0.7.0; il client Python è su PyPI (pip install qorechain-sdk alla 0.7.0, import qorsdk); il client Go è sul module proxy (go get github.com/qorechain/qorechain-sdk/packages/go/..., tag packages/go/v0.7.0); e il client Java è su Maven Central (io.github.qorechain:qorechain-sdk:0.7.0). Il client Rust è su crates.io (cargo add qorechain-sdk) alla versione più recente del crate pubblicata, che attualmente è indietro rispetto alla 0.7.0 — installalo da crates.io o dal repo. Vedi Installazione per i comandi completi per ciascun linguaggio.

La mia mnemonica viene rifiutata

L'SDK convalida sia la wordlist BIP-39 sia il checksum prima di derivare qualsiasi chiave, quindi una frase con un errore di battitura solleva un'eccezione invece di produrre silenziosamente l'account sbagliato. Ricontrolla le parole; usa validateMnemonic per testare una frase.

Transazioni ibride (PQC)

L'invio ibrido (classico + ML-DSA-87) è attivo e obbligatorio sul percorso Native — le transazioni Native solo classiche vengono rifiutate on-chain (chain v3.1.85). Prima che una tx ibrida superi la verifica PQC, la chiave pubblica PQC del firmatario deve essere registrata (MsgRegisterPQCKeyV2), oppure puoi impostare includePqcPublicKey: true per incorporarla e ottenere la registrazione automatica al primo utilizzo. La chain accetta solo firme ML-DSA-87 deterministiche (l'SDK firma in modo deterministico per impostazione predefinita dalla 0.5.1); le firme hedged falliscono con pqc codice 21 (hybrid_verify_failed). Vedi Account e firma PQC.

Le mie transazioni ibride falliscono a CheckTx con un errore di parsing della tx

Aggiorna l'SDK. Le versioni 0.6.0 e precedenti serializzavano in JSON l'estensione del tx-body /qorechain.pqc.v1.PQCHybridSignature, che il decodificatore di tx della chain rifiuta a CheckTx. Dalla 0.6.1 l'estensione è codificata in protobuf (il valore inizia con 0x08) in tutti e cinque i linguaggi — le transazioni ibride costruite con versioni più vecchie vengono rifiutate on-chain, in ogni lane (inclusa eth-native).

La mia spesa tramite authenticator viene rifiutata con authenticator_replay

Il nonce è sbagliato. MsgExecuteEVM.nonce deve essere il nonce EVM corrente dell'account (il relayer è un account diverso, quindi non aggiungere 1); MsgExecuteCosmos.nonce è la sequenza per authenticator di (account, pubkey), un contatore di store separato. Recupera di nuovo il valore e firma nuovamente. Gli altri errori degli authenticator si decodificano con decodeTxError: abstractaccount codici 5 (spending_limit_exceeded), 6 (session_key_expired) e 10 (permission_denied). Vedi Authenticator e spesa delegata.