Загрузка...

Batch NFT and why it is needed

Thread in Programming created by leisure Apr 16, 2025. 81 view

  1. leisure
    leisure Topic starter Apr 16, 2025 Work 24/7 :cool_bun: 888 Sep 9, 2018
    Приветствую! Наверное много из вас видел или же получал NFT которые не чего не стоят. Их как правило рассылают пачками по 10к на разные кошельки в любых сетях. Ether, Bsc, Matic, Tron.

    Batch NFT рассылка - это технология массового распространения NFT среди множества адресов в одной транзакции, как показано в представленном смарт-контракте.

    Для чего это нужно?
    1. Эффективность: Рассылка сотен NFT за одну транзакцию экономит время и газовые fees
    2. Аирдропы: Распределение NFT-наград среди участников сообщества
    3. Маркетинг: Массовые раздачи промо-NFT
    4. Токенизация: Быстрое создание коллекций для множества пользователей
    Пример функция смарт контракта Solidity.
    Отправка на n кол-во адресов сети.

    Code
    function batchMint(address[] memory recipients) public onlyOwner {

    require(recipients.length <= MAX_BATCH_SIZE, "Batch too large");

    // ...

    }
    Пример рабочего смарт контракта.

    Code
    contract BatchNFT is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    string public baseTokenURI;
    uint256 public constant MAX_BATCH_SIZE = 100;

    event BatchMinted(address[] recipients, uint256 startTokenId, uint256 endTokenId);
    event BatchTransferred(address[] recipients, uint256[] tokenIds);

    constructor(
    string memory name,
    string memory symbol,
    string memory _baseTokenURI
    ) ERC721(name, symbol) Ownable(msg.sender) {
    baseTokenURI = _baseTokenURI;
    }

    function _baseURI() internal view override returns (string memory) {
    return baseTokenURI;
    }

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

    function batchMint(address[] memory recipients) public onlyOwner {
    require(recipients.length > 0, "No recipients provided");
    require(recipients.length <= MAX_BATCH_SIZE, "Batch too large");

    uint256 startTokenId = _tokenIdCounter.current();

    for (uint256 i = 0; i < recipients.length; i++) {
    require(recipients[i] != address(0), "Invalid recipient address");
    uint256 tokenId = _tokenIdCounter.current();
    _tokenIdCounter.increment();
    _safeMint(recipients[i], tokenId);
    }

    emit BatchMinted(recipients, startTokenId, _tokenIdCounter.current() - 1);
    }

    function batchTransfer(
    address[] memory recipients,
    uint256[] memory tokenIds
    ) public {
    require(recipients.length == tokenIds.length, "Length mismatch");
    require(recipients.length <= MAX_BATCH_SIZE, "Batch too large");

    for (uint256 i = 0; i < recipients.length; i++) {
    require(ownerOf(tokenIds[i]) == msg.sender, "Not token owner");
    require(recipients[i] != address(0), "Invalid recipient address");
    safeTransferFrom(msg.sender, recipients[i], tokenIds[i]);
    }

    emit BatchTransferred(recipients, tokenIds);
    }

    function setBaseURI(string memory _baseTokenURI) public onlyOwner {
    baseTokenURI = _baseTokenURI;
    }
    }
    Рассылку использую как правило для рассылки блек проектов с целью опустошить ваши коши. Я же хочу показать как это работает под капотом. Удачи)
     
Top
Loading...