Деплой смарт-контрактов в Polygon
Polygon PoS — это не отдельный L1, а sidechain с собственными валидаторами, который использует Ethereum как чекпоинт-слой. С точки зрения разработчика: полная EVM совместимость, MATIC как gas токен, block time около 2 секунд, газ в 10-100 раз дешевле Ethereum mainnet. Деплой контракта, написанного для Ethereum, на Polygon занимает минуты.
Подготовка к деплою
Network конфигурация
Polygon имеет два публичных RPC:
- Официальный:
https://polygon-rpc.com(часто перегружен) - Рекомендованный: Alchemy/Infura/QuickNode endpoints (надёжнее)
В hardhat.config.ts:
import { HardhatUserConfig } from "hardhat/config"
const config: HardhatUserConfig = {
networks: {
polygon: {
url: process.env.POLYGON_RPC_URL || "https://polygon-rpc.com",
accounts: [process.env.DEPLOYER_PRIVATE_KEY!],
gasPrice: "auto", // или фиксированное значение в gwei
chainId: 137
},
amoy: { // Polygon testnet (заменил Mumbai в 2024)
url: "https://rpc-amoy.polygon.technology",
accounts: [process.env.DEPLOYER_PRIVATE_KEY!],
chainId: 80002
}
},
etherscan: {
apiKey: {
polygon: process.env.POLYGONSCAN_API_KEY!,
polygonAmoy: process.env.POLYGONSCAN_API_KEY!
},
customChains: [
{
network: "polygonAmoy",
chainId: 80002,
urls: {
apiURL: "https://api-amoy.polygonscan.com/api",
browserURL: "https://amoy.polygonscan.com"
}
}
]
}
}
Важно: Mumbai testnet выведен из эксплуатации в апреле 2024. Используйте Amoy (chainId: 80002).
MATIC для газа
Для Amoy: бесплатный faucet на faucet.polygon.technology. Для mainnet: bridge через Polygon Bridge (из Ethereum) или покупка MATIC на бирже с выводом на Polygon сеть напрямую.
Деплой
# Деплой на testnet
npx hardhat run scripts/deploy.ts --network amoy
# Верификация на PolygonScan
npx hardhat verify --network amoy DEPLOYED_ADDRESS "constructor_arg1" "constructor_arg2"
# Деплой на mainnet
npx hardhat run scripts/deploy.ts --network polygon
npx hardhat verify --network polygon DEPLOYED_ADDRESS
Скрипт деплоя с сохранением адреса:
import { ethers } from "hardhat"
import fs from "fs"
async function main() {
const [deployer] = await ethers.getSigners()
console.log("Deploying with:", deployer.address)
console.log("MATIC balance:", ethers.formatEther(await deployer.provider.getBalance(deployer.address)))
const Contract = await ethers.getContractFactory("MyContract")
const contract = await Contract.deploy(/* constructor args */)
await contract.waitForDeployment()
const address = await contract.getAddress()
console.log("Deployed to:", address)
// Сохраняем адрес
const deployments = { polygon: { MyContract: address, deployedAt: new Date().toISOString() } }
fs.writeFileSync("deployments.json", JSON.stringify(deployments, null, 2))
}
main().catch(console.error)
Gas price на Polygon
Polygon использует EIP-1559 с базовой комиссией. Рекомендуется не ставить слишком низкий maxPriorityFeePerGas — иначе транзакция зависнет в mempool:
// Получение актуальных газовых настроек
const feeData = await provider.getFeeData()
// maxFeePerGas = baseFee * 2 + maxPriorityFeePerGas (автоматически через "auto")
Минимальный baseFee на Polygon — 30 gwei (после EIP-1559 upgrade). При перегрузке сети может вырасти до 300-500 gwei — но в MATIC это всё равно копейки относительно Ethereum.
Polygon zkEVM
Если нужна более сильная связь с Ethereum security model — Polygon zkEVM (chainId: 1101) обеспечивает validity proofs на L1. Полная EVM эквивалентность (Type 2 zkEVM). Те же инструменты, другие RPC и chainId. Деплой аналогичен, но gas дешевле mainnet Ethereum раза в 3-10.
Верификация и безопасность деплоя
После деплоя обязательно:
- Верификация исходного кода на PolygonScan — пользователи и интеграции смогут видеть ABI и исходник
- Проверка конструктора: переданные аргументы соответствуют ожидаемым
- Smoke test базовых функций через PolygonScan Read/Write Contract или hardhat task
Сроки
Деплой готового контракта на Polygon Amoy + верификация: 2-4 часа (включая настройку сети и получение тестовых токенов). Деплой на mainnet с проверкой газовых настроек и верификацией: 4-8 часов. С нуля, включая написание deploy скриптов и миграций: до 2 дней.







