Контракт ERC20 Solidity с декодированными символами UTF-8

Мне нужно написать контракт, в котором используется словоблудие из латыни. Что принимает специальные символы, такие как é, ç, ã, ô так далее....

Я использую Hard Hat, чтобы написать это.

Я нашел здесь пример, также использующий открытый Zeppelin:

Пример, который работает

При попытке написать что-то подобное в своем контракте я получаю сообщение об ошибке: Invalid character in string.

          contract Ouro is ERC20, Ownable {

    string public constant tokenMinuta = "Céu, Carraço"; // "Céu, Carraço" is the Problem to solve here

    constructor() ERC20("Ouro", "ORO") {
        _mint(msg.sender, 1000000000 * 10**decimals());
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

}

Затем я добавил к этим символам кодировку UTF-8 в надежде, что они будут правильно скомпилированы либо на BSCScan, либо на EtherScan:

т.е. string public constant tokenMinuta = "C\xC3\xA9u, Carra\xC3\xA7o";

Вышеупомянутое компилируется, как и должно быть в моем терминале, см. Здесь:

Однако это не работает, когда я добавляю исходный код в BSCScan или EtherScan.

Специальный символ не скомпилирован в удобочитаемом виде

Посмотрите, где я добавил UTF-8 - я надеюсь, что это будет компилироваться в удобочитаемом для человека виде, а не так:

Мой вопрос: как я могу написать эти специальные символы в теле контракта, не получая ошибок компиляции, и, следовательно, иметь возможность проверить этот контракт с этими символами в удобочитаемом для человека способе на BSCSan или EtherScan? Работать так же, как и в самом первом примере, который я привел выше.

1 ответ

Какую версию компилятора solc вы используете? Я компилирую 0.5.16, и он работает с буквами UTF-8 в исходном коде.

Не кодируйте эти буквы в строке в кодировке UTF-8, она еще не будет передана.

Другие вопросы по тегам