Örnekler
Çalıştırılabilir TypeScript örnekleri, SDK monorepo'sunun
examples/
dizininde bulunur — aşağıdakilerin yanı sıra ai-preflight,
cross-vm-call, react-dapp, register-sidechain, rollup-lifecycle,
amm-swap, connect-keplr, evm-nft ve subscribe-blocks. Her klasör,
kendi README.md, .env.example dosyaları ve tek bir index.ts içeren,
kendi kendine yeten bir workspace paketidir. Uç noktaları ve mnemonic'leri
makul localhost varsayılanlarıyla ortam değişkenlerinden okurlar; ağa bağımlı
olanlar, erişilebilir bir düğüm yoksa bir ipucu vererek düzgün şekilde
sonlanır.
Depo kökünden bir kez kurulum yapın, ardından herhangi bir örneği çalıştırın:
pnpm install
pnpm --filter @qorechain/example-pqc-hybrid-sign start
Yalnızca test mnemonic'leri veya üretilmiş anahtarlar kullanın. Gerçek gizli bilgileri asla commit etmeyin.
Aşağıdaki kod parçaları, her örneğin index.ts dosyasından özetlenmiştir.
Tam ve çalıştırılabilir program için bağlantısı verilen kaynağa bakın.
connect-and-query
Bir istemci oluşturun ve herkese açık zincir durumunu okuyun — yerel bir bank
bakiyesi ve bir tokenomik anlık görüntüsü. Erişilebilir bir düğüm gerektirir.
Depodaki örnek anlık görüntüyü, herkese açık uç noktaların sunmadığı bir qor_
JSON-RPC çağrısı olan client.qor üzerinden okur; aşağıdaki kod parçası ise
mainnet ve testnet'te çalışan REST karşılığını (yakım istatistikleri) kullanır.
import { createClient } from "@qorechain/sdk";
const client = createClient({
network: "testnet",
endpoints: {
rest: process.env.QORE_REST_URL ?? "http://localhost:1317",
evmRpc: process.env.QORE_EVM_RPC_URL ?? "http://localhost:8545",
},
});
const balances = await client.rest.getAllBalances(address);
const burn = await client.rest.getBurnStats(); // GET /qorechain/burn/v1/stats
send-qor
Bir mnemonic'ten yerel (qor1...) bir hesap türetin ve bir QOR transferi
yayınlayın: türet → imzala → simüle et → ücreti tahmin et → bankSend.
Erişilebilir bir konsensüs RPC'si ile REST ve fonlanmış bir hesap gerektirir.
Bu örnek yalnızca klasik imzayla imzalar; bu nedenle yerel veya geliştirme
düğümüne karşı çalışır, ancak her Native yol işleminde hibrit imza isteyen
mainnet ve testnet tarafından reddedilir. Herkese açık ağlar için
Hızlı Başlangıç sayfasındaki hibrit gönderimi
kullanın.
import {
createClient,
deriveNativeAccount,
directSignerFromPrivateKey,
toBase,
} from "@qorechain/sdk";
const account = await deriveNativeAccount(mnemonic);
const signer = await directSignerFromPrivateKey(account.privateKey, prefix);
const amount = [{ denom: baseDenom, amount: toBase("1.5") }]; // "1500000" uqor
const tx = await client.connectTx(signer);
const gasEstimate = await tx.simulate(messages);
const fee = await client.fees.estimate("normal");
const result = await tx.bankSend(recipient, amount, { fee });
console.log(result.transactionHash);
svm-transfer
@qorechain/svm kullanarak QoreChain'in Solana uyumlu (SVM) çalışma zamanında
memo talimatı içeren bir SOL transferi oluşturun. İşlemi çevrimdışı oluşturur
ve yazdırır. Gönderim için erişilebilir bir SVM JSON-RPC'si ve fonlanmış bir
hesap gerekir ve herkese açık ağlarda başarılı olamaz: SVM işlem gönderimi
ağ genelinde devre dışıdır ve herkese açık SVM uç noktaları salt okunurdur
(SVM Geliştirme sayfasına bakın).
import { deriveSvmAccount } from "@qorechain/sdk";
import {
createSvmClient,
svmKeypairFromSecretKey,
createMemoInstruction,
} from "@qorechain/svm";
import { LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
const account = await deriveSvmAccount(mnemonic);
const keypair = svmKeypairFromSecretKey(account.secretKey);
const client = createSvmClient({ endpoints: { svmRpc } });
const lamports = Math.round(0.01 * LAMPORTS_PER_SOL);
const to = new PublicKey(recipient); // `to` is a PublicKey, not a string
const tx = client.buildTransferSol({ from: keypair, to, lamports });
tx.add(createMemoInstruction("hello from @qorechain/svm", [keypair.publicKey]));
// To broadcast: client.sendTransaction(tx, [keypair])
evm-precompile
Salt okunur QoreChain precompile'larını çağırmak ve bir ERC-20 bakiyesini
okumak için @qorechain/evm paketini (viem üzerinde ince bir katman) kullanın.
EVM zincir kimliği eth_chainId aracılığıyla otomatik olarak algılanır.
Precompile'lar henüz mainnet veya testnet'te etkin değildir
(Ağ durumu bölümüne bakın);
etkinleşene kadar ve precompile'ların bulunmadığı bir düğümde bu çağrılar, her
çağrı için ayrı ayrı raporlanan "feature not present" hatası fırlatır.
import { createEvmClient, precompiles, erc20 } from "@qorechain/evm";
const client = await createEvmClient({ endpoints: { evmRpc } });
console.log(`evm chain id: ${await client.getChainId()}`);
const params = await precompiles.rlConsensusParams(client.publicClient);
const status = await precompiles.pqcKeyStatus(client.publicClient, account);
const bal = await erc20.balanceOf(client.publicClient, token, account);
pqc-hybrid-sign
ML-DSA-87 (Dilithium-5, FIPS 204) ile post-kuantum imzalama. Tamamen
çevrimdışı çalışır — düğüm gerekmez. 1. bölüm bir mesajı imzalar ve doğrular
(kurcalama kontrolüyle birlikte); 2. bölüm, hem klasik bir secp256k1 imzasını
hem de bir PQCHybridSignature uzantısı olarak ML-DSA-87 imzasını taşıyan
hibrit bir işlem oluşturur, ardından PQC yarısını yerel olarak doğrular.
import {
generatePqcKeypair,
pqcSign,
pqcVerify,
buildHybridTx,
} from "@qorechain/sdk";
const keypair = generatePqcKeypair();
const message = new TextEncoder().encode("QoreChain is quantum-safe");
const signature = pqcSign(keypair.secretKey, message);
const valid = pqcVerify(keypair.publicKey, message, signature);
const built = await buildHybridTx({
registry,
signer,
pqcKeypair,
messages,
fee: { amount: [{ denom: "uqor", amount: "40000" }], gas: "400000" }, // network floor: 0.1 uqor per gas
chainId: "qorechain-diana",
accountNumber: 0,
sequence: 0,
signBytesVersion: "v2", // explicit, so this offline example needs no node
includePqcPublicKey: true, // embeds the key in the extension (registration is a separate, explicit step)
});
cosmwasm-query
Dağıtılmış bir CosmWasm sözleşmesine karşı salt okunur bir smart sorgu çalıştırın. Erişilebilir bir konsensüs RPC'si ve dağıtılmış bir sözleşme adresi gerektirir.
import {
createClient,
queryContractSmart,
getContractInfo,
} from "@qorechain/sdk";
const client = createClient({
network: "testnet",
endpoints: { rpc: process.env.QORE_RPC_URL ?? "http://localhost:26657" },
});
const cw = await client.cosmwasm(); // read-only, memoized on the client
const info = await getContractInfo(cw, contract);
const result = await queryContractSmart(cw, contract, { token_info: {} });
read-tokenomics
Tokenomik durumunu, EVM JSON-RPC uç noktası üzerinden sunulan tipli qor_*
JSON-RPC ad alanı (client.qor) aracılığıyla okuyun. Üç okuma birbirinden
bağımsızdır; bu nedenle diğerleri kullanılamıyor olsa bile her biri ayrı ayrı
raporlanır. Henüz hiçbir yayımlanmış düğüm sürümü qor_ ad alanını sunmadığından,
bugün her okuma -32601 ile başarısız olur
(qor_ ad alanı sayfasına bakın).
import { createClient } from "@qorechain/sdk";
const client = createClient({
network: "testnet",
endpoints: {
evmRpc: process.env.QORE_EVM_RPC_URL ?? "http://localhost:8545",
},
});
const burn = await client.qor.getBurnStats(); // qor_getBurnStats
const xqore = await client.qor.getXqorePosition(address); // qor_getXQOREPosition (xQORE has no query service yet)
const inflation = await client.qor.getInflationRate(); // qor_getInflationRate
unified-wallet
Birleşik eth-native bir hesap türetin (SDK 0.6.0): tek bir eth_secp256k1
anahtarı, ortak tek bir bakiyeyle üç QoreChain adresinin tümü olarak sunulur;
buna adres bağlantılı ML-DSA-87 anahtar çifti de eşlik eder. Tamamen
çevrimdışı çalışır.
import {
deriveUnifiedAccount,
qoreAddresses,
unifiedAccountFromSeed,
} from "@qorechain/sdk";
const account = await deriveUnifiedAccount(mnemonic);
console.log(account.cosmos); // "qor1…" — Native lane
console.log(account.evm); // "0x…" — EVM lane
console.log(account.svm); // base58 — SVM lane (same 20 bytes)
// Decode any one encoding into all three.
const all = qoreAddresses({ evm: account.evm });
// Or derive from a raw 32-byte seed instead of a mnemonic.
const fromSeed = unifiedAccountFromSeed(seed32);
authenticator-spend
Native authenticator hattında, relayer tarafından gönderilen bir
MsgExecuteCosmos oluşturun (SDK 0.7.0, zincir v3.1.85; abstractaccount
modülü bugün her iki ağda da kapalıdır, bu nedenle bu hat orada henüz
kullanılamaz): Phantom tarzı bir
ed25519 anahtarı, alan ayrımlı (domain-separated) kimlik doğrulama özetini
imzalar ve ortaya çıkan mesaj, bir relayer'ın yayınlamasına hazır hale gelir
(ücretleri relayer öder; harici anahtar hiçbir zaman bir ML-DSA eş-imzası
üretmez). Kuru çalıştırma — düğüm gerekmez.
import {
buildPhantomExecuteCosmos,
cosmosAuthSignBytes,
qorechainRegistry,
} from "@qorechain/sdk";
// Show the exact 32-byte digest the wallet signs (byte-exact vs the chain).
const digest = cosmosAuthSignBytes({ chainId, account, pubkey, to, amount, nonce });
// Build the relayer-ready message: the Phantom wallet signs the digest.
const msg = await buildPhantomExecuteCosmos({
wallet, // window.solana in a browser
relayer, // submits + pays fees (a DIFFERENT account)
chainId,
account, // the canonical PQC-required owner
to,
amount: "100uqor",
nonce, // the per-authenticator sequence
});
// Prove it encodes via the default registry (what the relayer broadcasts).
const bytes = qorechainRegistry().encode(msg);
Kaynak · Ayrıntılı anlatım: Authenticator'lar ve yetkilendirilmiş harcama