Перейти к основному содержанию
Plasma полностью совместима с EVM, что позволяет использовать стандартный инструментарий Ethereum, одновременно получая преимущества возможностей, оптимизированных для приложений на основе стейблкоинов. Чтобы узнать больше о деталях архитектуры Plasma, см. раздел Обзор архитектуры.

Проверка RPC-соединения

Публичные RPC-точки доступа доступны для обеих сетей Plasma:
# Mainnet (recommended)
curl --location https://rpc.plasma.to --header 'Content-Type: application/json' --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}'

# Testnet (optional)
curl --location https://testnet-rpc.plasma.to --header 'Content-Type: application/json' --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}'
Ответы Mainnet будут выглядеть примерно так:
{"jsonrpc":"2.0","id":1,"result":"0x11180f"}
Публичные точки доступа ограничены по частоте запросов. Для production-использования или высокочастотных запросов рассмотрите партнёрского RPC-провайдера.

Настройка инструментов разработки

Ниже примеры для Hardhat и Truffle:

Hardhat

Создайте или измените файл hardhat.config.js, чтобы включить обе сети Plasma:
require("dotenv").config();

module.exports = {
  networks: {
    plasmaMainnet: {
      url: process.env.MAINNET_RPC_ENDPOINT || "https://rpc.plasma.to",
      chainId: 9745,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    },
    // Optional: enable the testnet for staging.
    plasmaTestnet: {
      url: process.env.TESTNET_RPC_ENDPOINT || "https://testnet-rpc.plasma.to",
      chainId: 9746,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    }
  },
  solidity: {
    version: "0.8.28",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  }
};

Конфигурация Truffle

Если вы используете Truffle, обновите truffle-config.js:
const HDWalletProvider = require('@truffle/hdwallet-provider');

module.exports = {
  networks: {
    plasmaMainnet: {
      provider: () => new HDWalletProvider(
        "<YOUR_MNEMONIC_HERE>",
        process.env.MAINNET_RPC_ENDPOINT || "https://rpc.plasma.to",
      ),
      network_id: 9745,
      gas: 5500000,
    },
    plasmaTestnet: {
      provider: () => new HDWalletProvider(
        "<YOUR_MNEMONIC_HERE>",
        process.env.TESTNET_RPC_ENDPOINT || "https://testnet-rpc.plasma.to",
      ),
      network_id: 9746,
      gas: 5500000,
    }
  },
  compilers: {
    solc: {
      version: "0.8.28",
      settings: {
        optimizer: {
          enabled: true,
          runs: 200
        }
      }
    }
  }
};

Интеграция с кошельком

Интеграция Web3.js

const Web3 = require('web3');
const web3 = new Web3(process.env.MAINNET_RPC_ENDPOINT || 'https://rpc.plasma.to');

// Check connection
web3.eth.getBlockNumber()
  .then(blockNumber => console.log('Connected to Plasma node. Current block:', blockNumber))
  .catch(error => console.error('Connection error:', error));

Интеграция Ethers.js

const { ethers } = require('ethers');
const provider = new ethers.JsonRpcProvider('https://testnet-rpc.plasma.to');

// Check connection
provider.getBlockNumber()
  .then(blockNumber => console.log('Connected to Plasma node. Current block:', blockNumber))
  .catch(error => console.error('Connection error:', error));

Проверка настройки

Создайте простой скрипт, чтобы убедиться, что окружение для разработки настроено правильно:
const { ethers } = require('ethers');
require('dotenv').config();

async function testSetup() {
  // Connect to the Plasma node.
  const provider = new ethers.JsonRpcProvider('https://testnet-rpc.plasma.to');
  
  // Get network information.
  const network = await provider.getNetwork();
  console.log('Connected to network:', network);
  
  // Get current block number.
  const blockNumber = await provider.getBlockNumber();
  console.log('Current block number:', blockNumber);
  
  // Optionally, print address and balance if PRIVATE_KEY is set.
  if (process.env.PRIVATE_KEY) {
    const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
    const balance = await provider.getBalance(wallet.address);
    console.log('Account address:', wallet.address);
    console.log('Balance:', ethers.formatEther(balance), 'XPL');
  } else {
    console.log('Set PRIVATE_KEY to also print address and balance.');
  }
}

testSetup()
  .then(() => console.log('Setup test completed successfully'))
  .catch(error => console.error('Setup test failed:', error));

Устранение неполадок

ПроблемаДействие
Соединение отклоненоУбедитесь, что RPC-точка указана правильно и доступна
Не удалось оценить газУбедитесь, что в кошельке достаточно XPL
Ошибка версии SolidityОбновите конфигурацию, чтобы соответствовать версии компилятора, поддерживаемой Plasma
Транзакция не проходитПроверьте RPC URL и правильный chain ID