Солидность: вызов модификаторов из других умных контрактов - PullRequest
0 голосов
/ 24 марта 2019

Допустим, у меня есть смарт-контракт с токеном с кучей функций и модификатора, а также другой краудсейл-контракт.Ссылка на смарт-контракт токена в моем интеллектуальном контракте на краудсейл позволяет мне вызывать функции токена.Однако ... Я не могу использовать модификатор из смарт-контракта токена.

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 Ответ

0 голосов
/ 25 марта 2019

Мой текущий обходной путь следующий: - В моем смарт-контракте с токеном я добавил «промежуточную» функцию. Эта функция напрямую вызывается в модификаторе из моего токена. - В моем умном контракте на краудсейл я реплицировал модификатор, вызвав в нем промежуточную функцию.

Таким образом, всякий раз, когда я хочу обновить все мои модификаторы, исходящие из моего оригинального смарт-контракта, все, что мне нужно сделать, это отредактировать «промежуточную» функцию.

По умолчанию этот подход заключается в том, что «промежуточная функция» должна быть установлена ​​на public, чтобы вызываться из любого другого умного контракта, поэтому будьте осторожны, если вы выбираете этот подход.

...