Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
556 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Foundry: организация адресов для тестов

Интересный способ для организации и создания пользовательских адресов для тестов были реализованы в контрактах от Sablier. Давайте посмотрим на нее внимательнее.

Для начала у нас есть структура с адресами необходимых нам пользователей, в которую позже будет удобно добавлять новые адреса:

 
struct Users {
// Default admin for all Sablier V2 contracts.
address payable admin;
// Impartial user.
address payable alice;
// Default stream broker.
address payable broker;
// Malicious user.
address payable eve;
// Default NFT operator.
address payable operator;
// Default stream recipient.
address payable recipient;
// Default stream sender.
}


В самих тестах мы определяем эту структуру в переменную:

Users internal users;

И уже в setUp() мы инициализируем эти адреса:

 
function setUp() public virtual {

users = Users({
admin: createUser("Admin"),
alice: createUser("Alice"),
broker: createUser("Broker"),
eve: createUser("Eve"),
operator: createUser("Operator"),
recipient: createUser("Recipient"),
sender: createUser("Sender")
});

}



Сама функция createUser() тоже не совсем проста, там сразу начисляются токены:

 
function createUser(string memory name) internal returns (address payable) {
address payable user = payable(makeAddr(name));
vm.deal({ account: user, newBalance: 100 ether });
deal({ token: address(dai), to: user, give: 1_000_000e18 });
deal({ token: address(usdt), to: user, give: 1_000_000e18 });
return user;
}


Таким образом, мы можем обращаться в тестах к нужному пользователю через users., например, users.admin.

Достаточно простая и удобная система, как вы думаете?

Полный код теста можно посмотреть в репо Sablier.

#foundry #users #setup
👍9