В Solidity, языке программирования смарт-контрактов Ethereum, часто необходимо получить список владельцев токенов. В этой статье мы рассмотрим несколько методов выполнения этой задачи, приведя попутно примеры кода.
Методы получения владельцев токенов:
-
Сопоставление идентификаторов токенов владельцам.
Одним из распространенных подходов является сохранение сопоставления, которое связывает каждый идентификатор токена с адресом соответствующего владельца. Вот пример реализации:contract TokenRegistry { mapping(uint256 => address) private tokenToOwner; function setOwner(uint256 tokenId, address owner) public { tokenToOwner[tokenId] = owner; } function getOwner(uint256 tokenId) public view returns (address) { return tokenToOwner[tokenId]; } }
Вызвав функцию
setOwner
, вы можете связать идентификатор токена с адресом его владельца. Позже вы сможете получить адрес владельца с помощью функцииgetOwner
. -
Хранение владельцев в массиве.
Другой подход — создать массив, в котором хранятся адреса всех владельцев токенов. Этот метод позволяет получить список всех владельцев. Вот пример реализации:contract TokenRegistry { address[] private owners; function addOwner(address owner) public { owners.push(owner); } function getOwners() public view returns (address[] memory) { return owners; } }
Вызвав функцию
addOwner
, вы можете добавить в массив адрес владельца. ФункцияgetOwners
позволяет получить весь список владельцев. -
Реализация стандарта ERC721.
Если ваш контракт токена соответствует стандарту ERC721, вы можете использовать функциюownerOf
для получения владельца определенного токена. Вот пример:contract MyToken is ERC721 { // ERC721 implementation function getOwnerOfToken(uint256 tokenId) public view returns (address) { return ownerOf(tokenId); } }
Вызвав функцию
getOwnerOfToken
, вы можете получить адрес владельца для данного идентификатора токена.
Получить владельцев токенов в Solidity можно различными методами. В этой статье мы рассмотрели три подхода: сопоставление идентификаторов токенов с владельцами, сохранение владельцев в массиве и использование функции ownerOf
стандарта ERC721. В зависимости от вашего конкретного варианта использования вы можете выбрать наиболее подходящий метод для ваших нужд.