Aller au contenu principal

Multi-VM (appels inter-VM)

Un rollup multi-VM exécute une couche d'exécution EVM capable d'appeler des contrats CosmWasm sur le runtime QoreChain Native (Wasm) via un précompilé inter-VM dédié. Le RDK fournit l'outillage TypeScript pour encoder ces appels ainsi qu'un modèle de structure (scaffold) pour démarrer.

Cet outillage couvre uniquement EVM → QoreChain Native (contrats CosmWasm). La SVM est un environnement d'exécution distinct et ne fait pas partie du précompilé inter-VM.

remarque

Depuis la version v0.4.2 du RDK, l'identifiant de l'option VM du runtime Wasm est native (QoreChain Native) ; cosmwasm reste un alias hérité accepté, et les deux correspondent à cosmwasm sur le réseau — la chaîne, l'explorateur et l'ABI du précompilé inter-VM (executeCrossVMCall) restent inchangés.

Le précompilé

Le précompilé inter-VM est exposé à une adresse fixe :

import { CROSS_VM_PRECOMPILE } from "@qorechain/rdk";

console.log(CROSS_VM_PRECOMPILE); // 0x…0901

Encoder un appel inter-VM

encodeCrossVmCalldata construit les calldata que votre contrat EVM envoie au précompilé pour invoquer un contrat CosmWasm. functionSelector calcule le sélecteur de 4 octets pour une signature de fonction Solidity.

import { encodeCrossVmCalldata, functionSelector } from "@qorechain/rdk";

const calldata = encodeCrossVmCalldata({
contract: "qor1cosmwasmcontractaddress...",
msg: { transfer: { recipient: "qor1...", amount: "100" } },
});

const selector = functionSelector("callCosmwasm(string,bytes)");

Le côté Solidity

Depuis un contrat EVM, vous appelez l'adresse du précompilé avec les calldata encodés. Le modèle multivm-rollup inclut un extrait contracts/CrossVmCaller.sol de ce type :

// contracts/CrossVmCaller.sol
address constant CROSS_VM_PRECOMPILE = 0x0000000000000000000000000000000000000901;

function callCosmwasm(bytes memory calldata_) internal returns (bytes memory) {
(bool ok, bytes memory out) = CROSS_VM_PRECOMPILE.call(calldata_);
require(ok, "cross-vm call failed");
return out;
}

Générer un rollup multi-VM

Un nouveau modèle, multivm-rollup, génère un rollup EVM câblé pour appeler CosmWasm, y compris l'extrait CrossVmCaller.sol :

npm create qorechain-rollup my-app -- --template multivm-rollup

Consultez Déployer un Rollup pour tous les modèles du générateur de structure.