Zum Hauptinhalt springen

Multi-VM (VM-übergreifende Aufrufe)

Ein Multi-VM-Rollup betreibt eine EVM-Ausführungsschicht, die über ein dediziertes VM-übergreifendes Precompile CosmWasm-Contracts auf der QoreChain Native-Laufzeitumgebung (Wasm) aufrufen kann. Das RDK liefert das TypeScript-Tooling zum Kodieren dieser Aufrufe sowie eine Scaffold-Vorlage als Ausgangspunkt.

Dieses Tooling deckt ausschließlich EVM → QoreChain Native (CosmWasm-Contracts) ab. SVM ist eine eigene Laufzeitumgebung und nicht Teil des VM-übergreifenden Precompiles.

hinweis

Seit RDK v0.4.2 lautet der VM-Options-Bezeichner der Wasm-Laufzeitumgebung native (QoreChain Native); cosmwasm bleibt als Legacy-Alias weiterhin gültig, und beide werden auf Protokollebene auf cosmwasm abgebildet — die Chain, der Explorer und die ABI des VM-übergreifenden Precompiles (executeCrossVMCall) bleiben unverändert.

Das Precompile

Das VM-übergreifende Precompile ist unter einer festen Adresse verfügbar:

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

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

Kodieren eines VM-übergreifenden Aufrufs

encodeCrossVmCalldata erstellt die Calldata, die Ihr EVM-Contract an das Precompile sendet, um einen CosmWasm-Contract aufzurufen. functionSelector berechnet den 4-Byte-Selektor für eine Solidity-Funktionssignatur.

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

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

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

Die Solidity-Seite

Aus einem EVM-Contract rufen Sie die Precompile-Adresse mit der kodierten Calldata auf. Die Vorlage multivm-rollup enthält ein contracts/CrossVmCaller.sol-Snippet in dieser Art:

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

Ein Multi-VM-Rollup per Scaffold erstellen

Eine neue Vorlage, multivm-rollup, erstellt per Scaffold ein EVM-Rollup, das für den Aufruf von CosmWasm verdrahtet ist, einschließlich des CrossVmCaller.sol-Snippets:

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

Siehe Ein Rollup bereitstellen für alle Scaffolder-Vorlagen.