FAQ 및 문제 해결
메인넷이 라이브 상태인가요?
네, 메인넷은 라이브 상태입니다 (체인 ID qorechain-vladi). 테스트넷 프리셋
(qorechain-diana)도 계속 사용할 수 있습니다. 두 프리셋 모두 기본값으로
localhost 엔드포인트를 사용하므로, createClient({ network: "mainnet" })으로
네트워크를 선택하고 endpoints를 여러분의 노드 URL로 재정의하세요. 자세한 내용은
네트워크 및 엔드포인트 문서를 참고하세요.
왜 호출이 localhost로 전송되나요?
createClient()는 기본적으로 localhost 엔드포인트를 사용합니다. 실제 노드와
통신하려면 endpoints 객체를 전달하세요:
const client = createClient({
endpoints: {
rest: "https://api-testnet.qore.host",
rpc: "https://rpc-testnet.qore.host",
evmRpc: "https://evm-testnet.qore.host",
},
});
서명 경로(connectTx)는 컨센서스 rpc 엔드포인트가 필요하며, CosmWasm 읽기
작업도 이를 사용합니다. REST 읽기 작업은 rest를 사용하고, EVM 호출은
evmRpc를 사용합니다(해당 네임스페이스를 제공하는 노드에서는 qor_ 호출도
마찬가지입니다). 메인넷 URL은
네트워크 레퍼런스에 있습니다.
"Cannot find module 'viem'" / "'@solana/web3.js'" 오류가 뜹니다
이는 각각 @qorechain/evm과 @qorechain/svm의 피어 종속성(peer dependency)
입니다. 프로젝트에 다음을 설치하세요:
npm i @qorechain/evm viem
npm i @qorechain/svm @solana/web3.js
프리컴파일 호출에서 "returned no data" / "feature not present" 오류가 발생합니다
QoreChain EVM 프리컴파일은 노드에 컴파일되어 있지만 메인넷이나 테스트넷에서는
아직 활성화되지 않았습니다. 프리컴파일은 해당 주소가 EVM 모듈의
active_static_precompiles 파라미터에 나열된 곳에서만 응답하며, 이 목록은 두
네트워크 모두에서 비어 있습니다. 현재 이 호출은 빈 데이터를 반환하므로 viem은
returned no data ("0x")를 보고하고, 헬퍼는 퍼블릭 네트워크에서도 오류를
발생시킵니다(EVM 프리컴파일: 네트워크 상태
참고). 일반 EVM 노드에서도 호출은 같은 방식으로 실패합니다.
GET /cosmos/evm/vm/v1/params를 확인하고, 각 프리컴파일 호출을 감싸서 호출별로
오류를 처리하세요.
client.qor 호출이 -32601로 실패합니다
client.qor는 qor_ JSON-RPC 네임스페이스를 호출하는데, 릴리스된 어떤 노드
빌드도 이를 제공하지 않습니다. 퍼블릭 EVM 엔드포인트의 rpc_modules에는 eth,
net, rpc, txpool, web3만 나열됩니다. 대신 REST 경로를 사용하세요. 예를 들어
client.rest.get(...)을 통해 GET /qorechain/pqc/v1/account/{address}(PQC 키 상태)
또는 GET /qorechain/burn/v1/stats를 호출할 수 있습니다.
qor_ 네임스페이스를 참고하세요.
금액이 백만 배 차이가 납니다
QOR는 기본 단위 uqor가 10^6입니다. toBase / fromBase를 사용하여 모든
계산을 기본 단위로 수행하세요:
toBase("1.5"); // "1500000"
fromBase("1500000"); // "1.5"
EVM 런타임은 QOR를 18 자리 소수(EVM 관례)로 표현하며, 이는 Native uqor
기본 단위인 10^6과 다르다는 점에 유의하세요.
어떤 패키지가 배포되어 있으며, 어디에 있나요?
모두 배포되어 있습니다. TypeScript 코어(@qorechain/sdk, 0.8.3), EVM/SVM 어댑터
(@qorechain/evm, @qorechain/svm, 0.8.0), React 키트(@qorechain/react,
0.8.3), 그리고 create-qorechain-dapp 스캐폴더(0.8.0)는 npm에 있습니다. Python
클라이언트는 PyPI에 있으며(pip install qorechain-sdk로 0.8.3 설치, qorsdk로
import), Go 클라이언트는 모듈 프록시에 있습니다
(go get github.com/qorechain/qorechain-sdk/packages/go/..., 태그
packages/go/v0.8.4). Rust 클라이언트는 crates.io에 있으며(cargo add qorechain-sdk,
0.8.3), Java 클라이언트는 Maven Central에 있습니다
(io.github.qorechain:qorechain-sdk:0.8.3). 언어별 전체 설치 명령은
설치 문서를 참고하세요.
니모닉이 거부됩니다
SDK는 키를 파생하기 전에 BIP-39 단어 목록과 체크섬을 모두 검증하므로,
오타가 있는 구문은 잘못된 계정을 조용히 생성하는 대신 오류를 발생시킵니다.
단어를 다시 확인하고, validateMnemonic으로 구문을 테스트하세요.
하이브리드(PQC) 트랜잭션
하이브리드(클래식 + ML-DSA-87) 제출은 Native 경로에서 라이브 상태이며
필수입니다 — 클래식 전용 Native 트랜잭션은 체인에서 거부됩니다(체인
v3.2.0). 하이브리드 트랜잭션이 PQC 검증을 통과하려면 서명자의 PQC 공개키가
MsgRegisterPQCKeyV2(클래식 서명이며 하이브리드가 면제되는 트랜잭션)로
명시적으로 등록되어 있어야 합니다. 공개키를 확장에 포함시키는 것
(includePqcPublicKey: true)은 키를 등록하지 않으며, 체인은 최초 사용 시
키를 등록하지 않습니다.
체인은 헤지(hedged)든 결정론적이든 유효한 FIPS-204 ML-DSA-87 서명을 모두
허용합니다. SDK는 (0.5.1부터) 기본적으로 결정론적으로 서명하므로 트랜잭션은 항상
같은 서명과 tx 해시를 가집니다. 하이브리드 tx가 pqc 코드 21
(hybrid_verify_failed)로 실패한다면 원인은 sign-bytes 버전, 체인 ID, 오래된 PQC
라이브러리 또는 등록되지 않은 키이며, 헤지 서명은 원인이 아닙니다.
두 네트워크 모두 v2 sign-bytes 형식을 검증하므로 SDK 0.8.1 이상을 사용하고
rest(또는 signBytesVersion)를 전달하세요. 둘 중 하나가 없으면 빌더는
qorechain-vladi / qorechain-diana에서 오류를 발생시킵니다. 자세한 내용은
코드 21 문제 해결 및
계정 및 PQC 서명 문서를 참고하세요.
EVM 트랜잭션이 "no open EVM authorisation window"로 거부됩니다
체인 v3.2.0부터 EVM 레인은 등록된 PQC 키와 열려 있는 인증 윈도우를 가진
계정의 트랜잭션만 받아들입니다. 키를 등록하고, 윈도우를 연 다음 전송하세요.
EVM 인증 윈도우를 참고하세요. SDK에서는
classifyEvmWindowRejection(err)가 "no-pqc-key", "no-window",
"exhausted" 또는 "invalid"를 반환합니다.
하이브리드 트랜잭션이 CheckTx 단계에서 tx parse 오류로 실패합니다
SDK를 업그레이드하세요. 0.6.0 이하 버전은
/qorechain.pqc.v1.PQCHybridSignature tx-body 확장을 JSON으로 직렬화했는데,
체인의 tx 디코더가 이를 CheckTx 단계에서 거부합니다. 0.6.1부터는 5개 언어
모두에서 이 확장이 protobuf로 인코딩됩니다(값이 0x08로 시작). 이전 버전으로
빌드된 하이브리드 트랜잭션은 eth-native를 포함한 모든 레인에서 체인상
거부됩니다.
인증자(authenticator) 지출이 authenticator_replay로 거부됩니다
(abstractaccount 모듈은 현재 두 네트워크 모두에서 꺼져 있으며, 지출은 nonce가
확인되기 전에 abstract account module is disabled로 거부됩니다.
인증자 및 위임 지출을 참고하세요. 아래 안내는
모듈이 활성화된 이후에 적용됩니다.)
nonce가 잘못되었습니다. MsgExecuteEVM.nonce는 계정의 현재 EVM nonce여야
합니다(릴레이어는 별도의 계정이므로 1을 더하면 안 됩니다).
MsgExecuteCosmos.nonce는 (account, pubkey)에 대한 인증자별 시퀀스로,
별도의 저장소 카운터입니다. 값을 다시 가져와서 재서명하세요. 그 밖의 인증자
실패는 decodeTxError로 디코딩됩니다: abstractaccount 코드 5
(spending_limit_exceeded), 6(session_key_expired), 10
(permission_denied). 자세한 내용은
인증자 및 위임 지출 문서를 참고하세요.