Saltar al contenido principal

Multi-VM (llamadas entre VMs)

Un rollup multi-VM ejecuta una capa de ejecución EVM que puede invocar contratos CosmWasm en el runtime QoreChain Native (Wasm) a través de un precompilado cross-VM dedicado. El RDK incluye las herramientas TypeScript para codificar esas llamadas y una plantilla de andamiaje desde la cual empezar.

Estas herramientas cubren únicamente EVM → QoreChain Native (contratos CosmWasm). SVM es un runtime independiente y no forma parte del precompilado cross-VM.

nota

A partir de RDK v0.4.2, el identificador de la opción de VM del runtime Wasm es native (QoreChain Native); cosmwasm sigue siendo un alias heredado aceptado, y ambos se mapean a cosmwasm en el protocolo — la cadena, el explorador y el ABI del precompilado cross-VM (executeCrossVMCall) no cambian.

El precompilado

El precompilado cross-VM se expone en una dirección fija:

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

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

Codificar una llamada cross-VM

encodeCrossVmCalldata construye el calldata que tu contrato EVM envía al precompilado para invocar un contrato CosmWasm. functionSelector calcula el selector de 4 bytes para una firma de función de Solidity.

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

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

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

El lado de Solidity

Desde un contrato EVM llamas a la dirección del precompilado con el calldata codificado. La plantilla multivm-rollup incluye un fragmento contracts/CrossVmCaller.sol similar a este:

// 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;
}

Generar el andamiaje de un rollup multi-VM

Una nueva plantilla, multivm-rollup, genera el andamiaje de un rollup EVM preparado para llamar a CosmWasm, incluido el fragmento CrossVmCaller.sol:

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

Consulta Desplegar un Rollup para ver todas las plantillas del generador de andamiaje.