10 промтов для Blockchain и смарт-контрактов: Solidity, Rust, Vyper — с примерами кода

Введение

Мир Web3 стремительно меняется. Если в 2021 году для написания смарт-контракта нужно было штудировать документацию Solidity часами, то к 2026 году любой разработчик может использовать нейросети для генерации, аудита и оптимизации кода. Но промпты — это не магия. Это инженерный инструмент, который требует понимания блокчейн-архитектуры, газовых моделей и безопасности. В этой статье я собрал 10 промптов для трёх языков смарт-контрактов — Solidity (Ethereum, Polygon), Rust (Solana, Near) и Vyper (Ethereum). Каждый промпт — это готовый запрос с примером результата, который вы можете адаптировать под свою задачу.

Почему промпты для блокчейна — это сложно

Смарт-контракты работают в детерминированной среде. Ошибка в коде может стоить миллионы долларов (вспомните взлом The DAO в 2016 году или уязвимость в Poly Network в 2021-м). Поэтому промпт должен быть точным: указывать версию компилятора, спецификацию токена (ERC-20, ERC-721, SPL) и требования к безопасности. Без этого нейросеть может сгенерировать код с reentrancy-уязвимостью или неправильной обработкой газа.

10 промптов для смарт-контрактов

1. Базовый контракт ERC-20 на Solidity

Задача: Сгенерировать минимальный контракт токена ERC-20 с функциями mint и burn для владельца.

Промт:

Напиши смарт-контракт на Solidity версии 0.8.20 для токена ERC-20 с именем "MyToken" и символом "MTK". Используй библиотеку OpenZeppelin v5.0.0. Добавь функции mint и burn, доступные только владельцу контракта. Используй Ownable для управления правами. Включи события Transfer и Approval.

Пример результата:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyToken is ERC20, Ownable {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000000 * 10**decimals());
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
}

2. Контракт NFT (ERC-721) с метаданными на Solidity

Задача: Создать контракт для NFT с возможностью установки base URI для метаданных.

Промт:

Напиши контракт ERC-721 на Solidity 0.8.20 с использованием OpenZeppelin v5.0.0. Добавь функцию mint для владельца и возможность установить baseURI. Используй ERC721URIStorage для хранения URI каждого токена. Включи счетчик токенов с помощью Counters.

Пример результата:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MyNFT is ERC721, ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("MyNFT", "MNFT") {}

    function safeMint(address to, string memory uri) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {
        return super.tokenURI(tokenId);
    }
}

3. Аудит безопасности контракта на Solidity

Задача: Проверить контракт на reentrancy-уязвимости и gas-оптимизацию.

Промт:

Проведи аудит безопасности следующего контракта на Solidity. Найди reentrancy-уязвимости, проблемы с переполнением целых чисел и предложи gas-оптимизации. Контракт: [вставьте код]. Используй чеклист из OWASP Smart Contract Top 10.

Пример результата:

Найдено 2 проблемы:
1. Reentrancy в функции withdraw: вызов external до обновления баланса. Исправление: используй паттерн Checks-Effects-Interactions.
2. Переполнение в unchecked блоке для переменной totalSupply. Исправление: используй SafeMath или Solidity 0.8+ с встроенной проверкой.

4. Контракт стейкинга на Rust (Solana)

Задача: Написать программу для стейкинга токенов SPL на Solana с начислением вознаграждения.

Промт:

Напиши программу на Rust для Solana с использованием Anchor v0.30.0. Реализуй стейкинг SPL-токенов: пользователь может застейкать токены, а через 7 дней снять их с наградой 10% APY. Используй инструкции: stake, unstake, claim_reward. Добавь проверки на время и баланс.

Пример результата (фрагмент):

use anchor_lang::prelude::*;
use anchor_spl::token::{self, Token, TokenAccount, Transfer};

#[program]
pub mod staking {
    use super::*;

    pub fn stake(ctx: Context<Stake>, amount: u64) -> Result<()> {
        // Переводим токены от пользователя на контракт
        let transfer_ix = Transfer {
            from: ctx.accounts.user_token.to_account_info(),
            to: ctx.accounts.vault.to_account_info(),
            authority: ctx.accounts.user.to_account_info(),
        };
        token::transfer(ctx.accounts.transfer_ctx(), amount)?;
        // Обновляем состояние стейкинга
        ctx.accounts.stake_account.amount += amount;
        ctx.accounts.stake_account.stake_time = Clock::get()?.unix_timestamp;
        Ok(())
    }
}

5. Контракт мультисиг-кошелька на Vyper

Задача: Создать мультисиг-кошелек с 3 подписантами, где нужно 2 подписи для транзакции.

Промт:

Напиши смарт-контракт на Vyper 0.4.0 для мультисиг-кошелька с 3 владельцами и порогом 2 подписи. Реализуй функции: submit_transaction, confirm_transaction, execute_transaction. Добавь проверку на повторное подтверждение и защиту от переполнения.

Пример результата:

# @version 0.4.0

owners: public(address[3])
required: public(uint256)

transactions: HashMap[uint256, Transaction]
transaction_count: public(uint256)
confirmations: HashMap[uint256, HashMap[address, bool]]

@external
def __init__(_owners: address[3], _required: uint256):
    self.owners = _owners
    self.required = _required

@external
def submit_transaction(to: address, value: uint256, data: Bytes[1024]) -> uint256:
    # ... логика создания транзакции

6. Оптимизация газа для Solidity

Задача: Уменьшить газовые затраты контракта на 30%.

Промт:

Оптимизируй следующий контракт Solidity для уменьшения газа. Используй: упаковку переменных в struct, unchecked блоки для безопасных операций, замена require на revert с кастомной ошибкой. Исходный код: [вставьте код].

Пример результата:

Было:
- address public owner;
- uint256 public totalSupply;
Стало:
- struct Storage { address owner; uint256 totalSupply; }
- Использовать Storage storage s = _storage;
Экономия: ~15% газа.

7. Интеграция с Chainlink Oracles на Solidity

Задача: Получить цену ETH/USD через Chainlink.

Промт:

Напиши контракт на Solidity, который получает актуальную цену ETH/USD с помощью Chainlink AggregatorV3Interface. Используй сеть Sepolia. Добавь функцию getLatestPrice, которая возвращает цену с 8 десятичными знаками.

Пример результата:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {
    AggregatorV3Interface internal priceFeed;

    constructor() {
        priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306);
    }

    function getLatestPrice() public view returns (int) {
        (, int price, , , ) = priceFeed.latestRoundData();
        return price;
    }
}

8. Контракт DeFi для обмена токенов (Uniswap V3-like)

Задача: Написать простую AMM-биржу на Solidity.

Промт:

Создай контракт на Solidity для децентрализованного обмена двух токенов ERC-20 по формуле x*y=k. Реализуй функции: addLiquidity, removeLiquidity, swap. Используй библиотеку Math для вычислений. Добавь защиту от фронтраннинга через минимальный вывод.

Пример результата:

function swap(address tokenIn, uint amountIn, address tokenOut, uint minAmountOut) external returns (uint) {
    // Проверка резервов
    (uint reserveIn, uint reserveOut) = getReserves(tokenIn, tokenOut);
    uint amountOut = (amountIn * reserveOut) / (reserveIn + amountIn);
    require(amountOut >= minAmountOut, "Slippage too high");
    // Перевод токенов
    IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
    IERC20(tokenOut).transfer(msg.sender, amountOut);
    // Обновление резервов
}

9. Генерация тестов для контракта (Foundry)

Задача: Создать тесты для контракта ERC-20.

Промт:

Напиши тесты на Solidity для контракта MyToken с использованием Foundry (forge). Проверь функции mint, burn и transfer. Используй fuzzing для тестирования переполнения. Добавь проверку событий.

Пример результата:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Test.sol";
import "../src/MyToken.sol";

contract MyTokenTest is Test {
    MyToken public token;
    address public owner = address(0x123);

    function setUp() public {
        token = new MyToken();
        vm.prank(owner);
        token.mint(owner, 1000);
    }

    function testMint() public {
        assertEq(token.balanceOf(owner), 1000);
    }

    function testBurn() public {
        vm.prank(owner);
        token.burn(100);
        assertEq(token.balanceOf(owner), 900);
    }

    function testTransferFuzz(uint256 amount) public {
        vm.assume(amount <= token.balanceOf(owner));
        vm.prank(owner);
        token.transfer(address(0x456), amount);
        assertEq(token.balanceOf(address(0x456)), amount);
    }
}

10. Контракт для управления DAO на Rust (Solana)

Задача: Создать программу для голосования в DAO.

Промт:

Напиши программу на Rust с Anchor для DAO на Solana. Реализуй: создание предложения, голосование за/против, выполнение предложения при достижении кворума. Используй SPL-токены для взвешенного голосования.

Пример результата (фрагмент):

#[derive(Accounts)]
pub struct CreateProposal<'info> {
    #[account(init, payer = proposer, space = 8 + 32 + 8 + 8 + 1)]
    pub proposal: Account<'info, Proposal>,
    #[account(mut)]
    pub proposer: Signer<'info>,
    pub system_program: Program<'info, System>,
}

pub fn create_proposal(ctx: Context<CreateProposal>, description: String, vote_start: i64, vote_end: i64) -> Result<()> {
    ctx.accounts.proposal.proposer = *ctx.accounts.proposer.key;
    ctx.accounts.proposal.description = description;
    ctx.accounts.proposal.vote_start = vote_start;
    ctx.accounts.proposal.vote_end = vote_end;
    ctx.accounts.proposal.executed = false;
    Ok(())
}

Заключение

Промпты для смарт-контрактов — это мощный инструмент, но они не заменяют понимание блокчейн-архитектуры. Всегда проверяйте сгенерированный код на тестовой сети (Sepolia, Devnet), используйте формальные верификаторы (например, Certora) и следите за обновлениями компиляторов. В 2026 году нейросети стали отличными помощниками для рутинных задач — генерации токенов, тестов и документации. Но безопасность и оптимизация газа по-прежнему требуют человеческого глаза. ASI Biont поддерживает интеграцию с популярными Web3-инструментами через API — подробнее на asibiont.com/courses. Экспериментируйте с промптами, но не забывайте: код — это закон.

← Все статьи

Комментарии

Читайте также

Интеграция Banana Pi с AI-агентом ASI Biont: автоматизация на одноплатнике без единой строки кода

14 июля 2026

Telegram Bot Development: как автоматизировать бизнес и заработать на ботах в 2026 году

14 июля 2026

AI-агент оживляет завод: интеграция Modbus RTU (RS-485) с ASI Biont для предиктивного обслуживания

14 июля 2026

Uber не хочет быть «всем для всех»: что на самом деле сказал продакт-директор про отели, роботакси и будущее платформы

14 июля 2026

Курс «Промышленный интернет вещей (IIoT) и системы SCADA»: ваш путь к Индустрии 4.0 в 2026 году

14 июля 2026

ИИ незаметно меняет мнения пользователей в соцсетях: как алгоритмы формируют нашу реальность

14 июля 2026

CKA + CKAD — Kubernetes Administrator & Developer: как подготовиться к сертификации в 2026 году с AI-тьютором

14 июля 2026

Как перестать терять сделки из-за языка: обзор курса «Английский для бизнеса» на asibiont.com

14 июля 2026

Трансформационное лидерство и стратегическое мышление CEO: Программа для основателей на уровне Гарварда, желающих овладеть принятием решений

14 июля 2026