Деплой смарт-контракта в Arc Testnet
Arc — это L1-блокчейн от Circle, специально созданный под финансы на стейблкоинах.
Он:
— совместим с EVM
— использует USDC как gas-токен (а не ETH)
— уже работает в публичном тестнете, mainnet ожидается позже в 2026
Если вы уже деплоили контракты в Ethereum или других EVM-сетях — всё будет знакомо.
Если нет — этот гайд проведет вас с нуля.
Важный момент
В Arc газ оплачивается в USDC. Тестового ETH здесь нет.
Тестовый USDC вы получаете через faucet от Circle.
Я лично использую Mac, поэтому сначала покажу настройку для Mac.
Инструкции для Windows будут сразу после.
После установки Foundry все команды, начиная с Шага 1, одинаковы независимо от ОС.
Начало работы (Mac)
Откройте стандартное приложение Terminal (iTerm2).
curl -L foundry.paradigm.xyz | bash
Перезагрузите конфигурацию shell:
source ~/.zshenv
Установите инструменты Foundry (forge, cast, anvil, chisel):
foundryup
Все, можно начинать. Перейдите к Шагу 1 ниже.
Начало работы (Windows)
Для прохождения этого гайда вам потребуется WSL (Windows Subsystem for Linux).
Если у вас его ещё нет, откройте PowerShell от имени администратора и выполните:
wsl --install
После установки перезагрузите компьютер, затем откройте Ubuntu через меню «Пуск».
Это даст вам Linux-терминал внутри Windows.
curl -L foundry.paradigm.xyz | bash
Перезагрузите конфигурацию shell:
source ~/.bashrc
Установите инструменты Foundry (forge, cast, anvil, chisel):
foundryup
Совет
Если вы используете VS Code, введите команду:
code .
в терминале WSL, чтобы открыть текущую папку прямо в VS Code.
Возможно, сначала потребуется установить расширение WSL в VS Code.
С этого момента все команды одинаковы как для Mac, так и для Windows.
Просто убедитесь, что вы выполняете их в Terminal (Mac) или WSL Ubuntu (Windows).
Шаг 1: Инициализация нового Solidity-проекта
forge init hello-arc && cd hello-arc
Эта команда создаст новую папку проекта с названием "hello-arc" и сразу перейдёт в неё.
Откройте её в вашем редакторе кода.
Ваш терминал должен выглядеть примерно так 👇
Шаг 2: Настройка переменных окружения
Создайте файл .env в корне папки "hello-arc".
Вы можете сделать это вручную в редакторе или выполнить:
touch .env
nano .env
ARC_TESTNET_RPC_URL="https://rpc.testnet.arc.network"
Убедитесь, что вы указали префикс https://.
Без него команды деплоя не будут работать.
Сохраните и выйдите из nano: Ctrl + X → Y → Enter
Шаг 3: Написание смарт-контракта
Сначала удалите стандартный контракт Counter, который создаёт Foundry:
rm src/Counter.sol
Создайте новый файл контракта:
touch src/HelloArchitect.sol
nano src/HelloArchitect.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
contract HelloArchitect {
string private greeting;
event GreetingChanged(string newGreeting);
constructor() {
greeting = "Hello Architect!";
}
function setGreeting(string memory newGreeting) public {
greeting = newGreeting;
emit GreetingChanged(newGreeting);
}
function getGreeting() public view returns (string memory) {
return greeting;
}
}Простой контракт:
он хранит строку (greeting), позволяет её менять и вызывает событие при изменении.
Сохраните и выйдите: Ctrl + X → Y → Enter
Шаг 4: Написание тестов
Удалите стандартную папку со скриптами и тестовый файл:
rm -rf script rm test/Counter.t.sol
touch test/HelloArchitect.t.sol
nano test/HelloArchitect.t.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import "forge-std/Test.sol";
import "../src/HelloArchitect.sol";
contract HelloArchitectTest is Test {
HelloArchitect helloArchitect;
function setUp() public {
helloArchitect = new HelloArchitect();
}
function testInitialGreeting() public view {
string memory expected = "Hello Architect!";
string memory actual = helloArchitect.getGreeting();
assertEq(actual, expected);
}
function testSetGreeting() public {
string memory newGreeting = "Welcome to Arc Chain!";
helloArchitect.setGreeting(newGreeting);
string memory actual = helloArchitect.getGreeting();
assertEq(actual, newGreeting);
}
function testGreetingChangedEvent() public {
string memory newGreeting = "Building on Arc!";
vm.expectEmit(true, true, true, true);
emit HelloArchitect.GreetingChanged(newGreeting);
helloArchitect.setGreeting(newGreeting);
}
}Сохраните и выйдите: Ctrl + X → Y → Enter
Шаг 5: Тестирование и компиляция
forge test
Вы должны увидеть, что все три теста проходят успешно.
Если всё ок — скомпилируйте проект:
forge build
Шаг 6: Создание кошелька
Для деплоя вам понадобится кошелёк. Сгенерируйте его с помощью Foundry:
cast wallet new
Вы получите адрес и приватный ключ.
Сохраните их в безопасном месте. Никому не передавайте приватный ключ.
nano .env
Добавьте туда ваш приватный ключ:
PRIVATE_KEY="0x..."
Замените 0x... на ваш реальный приватный ключ.
Сохраните и выйдите: Ctrl + X → Y → Enter
Перезагрузите переменные окружения:
source .env
Эту команду нужно будет выполнять каждый раз, когда вы добавляете новые переменные в .env.
Шаг 7: Пополните кошелёк
Перейдите на faucet.circle.com, выберите Arc Testnet, вставьте адрес кошелька, который вы только что создали, и запросите тестовый USDC.
Помните: USDC — это gas-токен в Arc.
Именно он используется для оплаты деплоя и транзакций. ETH не нужен.
Шаг 8: Деплой контракта
forge create src/HelloArchitect.sol:HelloArchitect \ --rpc-url $ARC_TESTNET_RPC_URL \ --private-key $PRIVATE_KEY \ --broadcast
После успешного деплоя вы увидите:
— адрес деплойера
— адрес контракта
— хэш транзакции
Скопируйте адрес контракта из строки "Deployed to:".
Откройте файл .env:
nano .env
Добавьте адрес контракта новой строкой:
HELLOARCHITECT_ADDRESS="0x..."
Замените 0x... на реальный адрес контракта.
Сохраните и выйдите: Ctrl + X → Y → Enter
source .env
Шаг 9: Взаимодействие с контрактом
cast call $HELLOARCHITECT_ADDRESS "getGreeting()(string)" \ --rpc-url $ARC_TESTNET_RPC_URL
Вы должны получить ответ:
"Hello Architect!"
Шаг 10: Проверка в эксплорере
Перейдите на testnet.arcscan.app и вставьте хэш транзакции из деплоя.
Вы увидите подтверждение деплоя в эксплорере Arc Testnet.
Все, готово!
Теперь вы можете:
— расширять контракт
— добавлять логику
— изучать фичи Arc (USDC как gas, быстрая финализация)
Mainnet ожидается в 2026, поэтому раннее участие даёт преимущество.