Контракт 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, она еще не будет передана.