Можно ли запрашивать смарт-контракты внутри смарт-контракта?

Я хочу знать, можно ли запрашивать (обнаруживать) смарт-контракты внутри моего смарт-контракта. Например, я хочу найти смарт-контракт с каким-то именем и/или параметрами, а затем вызвать его. Это возможно?

Что-то связанное: ethereum.stackexchange.com/questions/1391/…

Ответы (1)

Контракт может вызывать другой произвольный контракт, зная его адрес и сигнатуру функции, которую вы хотите вызвать.

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

Эти две вещи вместе удовлетворили бы заявленным требованиям. Однако я не знаю никого, кто делал бы последнюю вещь, и я не могу представить, насколько это было бы полезно.

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

  • Определите интерфейс (сигнатуру функции) и сделайте так, чтобы ваш контракт мог вызывать его для какой-то конкретной задачи.
  • Разрешите пользователю указать адрес и передать его в ваш контракт в качестве параметра, и пусть ваш контракт вызывает другой контракт по указанному адресу, используя ожидаемый интерфейс.

Например, контракт может позволить вам продавать песни за любой токен ERC20. (Токен ERC — это контракт с интерфейсом, который соответствует стандарту токена ERC20 .) Продавец ищет адрес контракта для токена, который он хочет продать своей песне для использования на выбранном им веб-сайте, и передает его в контракт продавца вместе с идентификатором песни и ценой в этом токене. Позже, когда появится покупатель, контракт продавца вызовет ожидаемый интерфейс, в данном случае transferFrom()метод, для завершения платежа за продажу.

Этот шаблон работает, потому что пользователь может просматривать Интернет и использовать здравый смысл, чтобы решить, какой контракт будет хорошим для использования (в данном случае в качестве токена), поэтому ему не нужен смарт-контракт, чтобы иметь возможность это сделать. для них.