Как реализовать стандарт токена ERC777?

Кто-нибудь знает, как правильно внедрить новый стандарт маркера ERC777 ? Я пытаюсь создать контракт ERC777 (см. Код ниже), но продолжайте бороться с несколькими вещами.

  1. В соответствии со стандартом адреса получателей должны соответствовать интерфейсу ITokenRecipient, который возвращается ERC-672 обратный поиск. Любая идея, как это сделать?
  2. Кажется, существует резервный интерфейс ITokenFallback, который вообще не упоминается в стандарте. Как 777 обрабатывает резервные копии (например, если иностранные токены отправляются в контракт)?
  3. Стандарт требует использования operatorData и userData, но на самом деле не говорит, что делать с этими значениями. Достаточно ли включать эти данные в события, определенные в интерфейсе 777?

Моя реализация ERC777 :

contract MyToken is EIP777 {

string public name;            
uint8 public decimals;               
string public symbol;  
uint256 public totalSupply;
mapping (address => uint256) balances;
mapping (address => mapping (address => bool)) authorizedOperators;

function send(address _to, uint256 _value) returns (bool success) {
    if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Send(msg.sender, _to, _value, msg.sender, null, null);
        return true;
    } else { return false; }
}

function send(address _to, uint256 _value, _userData bytes) returns (bool success) {
    if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Send(msg.sender, _to, _value, msg.sender, _userData, null);
        return true;
    } else { return false; }
}

function operatorSend(address _from, address _to, uint256 _value, bytes _userData, bytes _operatorData) returns (bool success) {
    if (balances[_from] >= _value && _value > 0 && isOperatorAuthorizedFor(msg.sender, _from) ) {
        balances[_to] += _value;
        balances[_from] -= _value;
        Send(_from, _to, _value, msg.sender, _userData, _operatorData);
        return true;
    } else { return false; }
}

function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
}

function authorizeOperator(address _operator, bool _authorized) public {
    authorizedOperators[msg.sender][_operator] = _authorized;
    AuthorizeOperator(msg.sender, _operator, _authorized);
}

function isOperatorAuthorizedFor(address _operator, address _tokenHoler) public constant returns (bool) {
    return authorizedOperators[_tokenHoler][_operator];
}

}

Я провел некоторое исследование и наткнулся на YogaToken . Однако он использует ERC672 и более сложную реализацию authorizedOperators, который добавляет globallyAuthorizedOperators и doSend(). Он не реализует ITokenRecipient.

5 голосов | спросил hurb 9 Jpm1000000pmTue, 09 Jan 2018 17:52:53 +030018 2018, 17:52:53

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132