استدعِ Solana من EVM
المتطلبات الأساسية
الـ CPI Precompile
import {CpiProgram} from "@rome-protocol/solidity-sdk/contracts/core/Precompiles.sol";
// استدعاء برنامج Solana
CpiProgram.invoke(programId, accounts, instructionData);
// الاستدعاء مع توقيع PDA (عقدك يوقّع بصفته PDA)
CpiProgram.invoke_signed(programId, accounts, data, seeds);مثال أساسي: تحويل SOL
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {SystemProgram, CpiProgram} from "@rome-protocol/solidity-sdk/contracts/core/Precompiles.sol";
import {RomeEVMAccount} from "@rome-protocol/solidity-sdk/contracts/core/RomeEVMAccount.sol";
contract SolTransfer {
function transferSol(bytes32 recipient, uint64 lamports) external {
// الحصول على PDA للمرسِل
bytes32 senderPda = RomeEVMAccount.pda(msg.sender);
// بناء تعليمات التحويل لبرنامج النظام
ICrossProgramInvocation.AccountMeta[] memory accounts = new ICrossProgramInvocation.AccountMeta[](2);
accounts[0] = ICrossProgramInvocation.AccountMeta(senderPda, true, true); // المرسِل (موقّع، قابل للكتابة)
accounts[1] = ICrossProgramInvocation.AccountMeta(recipient, false, true); // المستلم (قابل للكتابة)
// تعليمات التحويل لبرنامج النظام (النوع 2، كمية u64 بترتيب little-endian)
bytes memory data = abi.encodePacked(uint32(2), lamports);
CpiProgram.invoke(SystemProgram.program_id(), accounts, data);
}
}قراءة بيانات الحساب
العمل مع رموز SPL
اشتقاق PDA
التحويل إلى Base58
استدعاء برامج Solana المخصّصة
القيود الرئيسية
ما التالي
آخر تحديث
هل كان هذا مفيدا؟