Solidity: модификаторы вызовов из других смарт-контрактов

#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, чтобы ее можно было вызывать из любого другого смарт-контракта, поэтому будьте осторожны, выбирая этот подход.