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.
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.