Функция интерфейса

Я понимаю, что следующая функция используется для привязки контракта ico к токену. Спасибо, если кто-то может объяснить, как использовать эту функцию и как именно она работает. Спасибо.

/**
 * @title Token
 * @dev API interface for interacting with the Token contract 
 */
interface Token {
  function transfer(address _to, uint256 _value) returns (bool);
  function balanceOf(address _owner) constant returns (uint256 balance);
}

Ответы (3)

Это контракт «Абстрактный», он же «Интерфейс».

Он используется для определения интерфейса, то есть существующих функций, их точных имен и входов/выходов, но ничего не говорит о том, как они работают внутри.

Идея состоит в том, чтобы использовать наследование для создания совместимой реализации — контракта с точно такими же реализованными функциями.

Вы поступаете так.

contract Interface {
  // undefined functions with names and arguments
}

contract Implementation is Interface {
  // now you are forced to have matching functions with definition
}
```

Вы не сможете выполнить развертывание, Implementationесли оно не реализует каждую функцию, определенную в Interface.

Надеюсь, это поможет.

Спасибо. Это действительно полезно. Я сделал некоторые дальнейшие исследования, и это стало яснее. Одна вещь, которую я все еще не понимаю, - это видео Эда Зигги (ссылка ниже - 4:20 и далее), он включает в контракт следующие строки текста:
Я где-то это видел... как это связано с приведенным выше объяснением? Создание экземпляра IEnergy немного странное -contract IEnergy { function transfer(address _to, uint256 _amount) external; } contract EnergyImpl is SomeOtherContract { IEnergy constant Energy = IEnergy(uint160(bytes6("Energy")));
Где мы можем увидеть этот репозиторий?

Это интерфейс для взаимодействия с Token Contract. Если вы прочтете документ Solidity, вы заметите характеристики интерфейса.

Позвольте мне снова написать о свойствах интерфейса:

1) Интерфейсы не могут иметь никаких реализованных функций

2) Интерфейсы не могут наследовать другие контракты или интерфейсы

3) Интерфейсы не могут определять конструктор

4) Интерфейсы не могут определять переменные

5) Интерфейсы не могут определять структуры

6) Интерфейсы не могут определять перечисления.

7) Интерфейсы выражаются с помощью ключевого слова interface.

Теперь, если мы проанализируем код:

 interface Token {
   function transfer(address _to, uint256 _value) returns (bool);
   function balanceOf(address _owner) constant returns (uint256 balance);
}

Интерфейс токена имеет две функции. Обе эти функции здесь не реализованы. Но любой может реализовать эти функции позже. Это самое интересное.

Баланс пользователей хранится в отображении, называемом балансами;

mapping(address => uint) balances;

Когда вы вызываете функцию перевода с адресом получателя и суммой перевода, вы уменьшаете свой баланс на эту сумму и увеличиваете сумму получателя. Как это:

balances[msg.sender] -= _value;
balances[_to] += _value;

Функция BalanceOf просто возвращает ваш баланс.

return balances[msg.sender]