#ethereum #solidity
#ethereum #надежность
Вопрос:
Допустим, у меня есть смарт-контракт токена с набором функций и модификатором и другой смарт-контракт для краудсейла. Ссылка на смарт-контракт токена в моем смарт-контракте crowdsale позволяет мне вызывать функции токена. Однако… Я не могу использовать модификатор из смарт-контракта токена.
contract Crowdsale is Token {
token private _token;
constructor (ERC20 token) public {
require(address(token) != address(0));
_token = token;
}
// this one works
function test(address account) public view returns (uint256) {
_token.functionFromToken(account);
}
// This does not work because of modifierInToken
function test2(address account) public modifierInToken {
}
}
Это нормально? И если да, есть ли обходной путь?
Комментарии:
1. вы использовали наследование? можете ли вы показать код?
2. @AbdullahAziz Я просто добавил туда немного кода, спасибо за вашу помощь!
3. также покажите код для токена. Позвольте мне взглянуть на модификатор.
4. Я не думаю, что код для токена действительно имеет значение, поскольку ошибка заключается в «Необъявленном идентификаторе». Похоже, что модификатор строго приватен, в то время как доступ к функциям может быть установлен на общедоступный или любой другой, который мы захотим.
Ответ №1:
Мой текущий обходной путь заключается в следующем: — В моем смарт-контракте с токенами я добавил «промежуточную» функцию. Эта функция вызывается непосредственно в модификаторе из моего токена. — В моем смарт-контракте crowdsale я воспроизвел модификатор, вызвав в нем промежуточную функцию.
Таким образом, всякий раз, когда я хочу обновить все мои модификаторы, исходящие из моего оригинального смарт-контракта, все, что мне нужно сделать, это отредактировать «промежуточную» функцию.
По умолчанию для этого подхода «промежуточной функции» необходимо присвоить значение public, чтобы ее можно было вызывать из любого другого смарт-контракта, поэтому будьте осторожны, выбирая этот подход.