Как узнать, является ли адрес Ethereum контрактом?
адресом в солидности может быть счет или контракт (или другие вещи, такие как транзакция). Когда у меня есть переменная x, содержащая адрес, как я могу проверить, является ли это контрактом или нет?
(Да, я читал глава о видах в doc)
4 ответов
Edit: солидность изменилась с тех пор, как этот ответ был впервые написан, @manuel-aráoz имеет правильный ответ.
в солидности нет способа проверить, является ли адрес контрактом. Одна из целей Ethereum заключается в том, чтобы люди и смарт-контракты рассматривались одинаково. Это ведет в будущее, где смарт-контракты легко взаимодействуют с людьми и другими контрактами. В будущем это может измениться , но пока произвольный адрес неоднозначен.
Да, вы можете, используя некоторый код сборки EVM, чтобы получить адрес ‘ размер кода:
это не то, что вы можете запросить из контракта, используя солидность, но если вы просто хотите знать, содержит ли адрес код контракта или нет, вы можете проверить с помощью консоли geth или аналогично, например:
С шестнадцатеричной строкой (здесь 0xbfb2e296d9cf3e593e79981235aed29ab9984c0f ) в качестве адреса, который вы хотите запросить. Это вернет байт-код, хранящийся по этому адресу.
вы также можете использовать блокчейн-сканер, чтобы найти исходный код контракта по этому адресу, для пример библиотека ecsol как показано на etherscan.io.
Что вы можете сделать, если у вас есть информация под рукой. Если адрес отправителя транзакций был пустым или незанятым, вы можете определить, является ли адрес контрактным счетом или счетом EOA (внешним счетом). т. е. при отправке транзакции create contract в сети адрес получения в транзакции равен null / не используется.
Адрес контракта криптовалюты
Адрес контракта криптовалюты или еще называют адрес контракта токена нужен в тот момент, когда вы планируете вывести с биржи крипто актив, а в вашем локальном кошельке его нет. Тема для новичков не сложная, но важная. Поможет вам разобраться, как найти адрес контракта и как не нарваться на мошенников и аферистов.
Оглавление:
- Что такое адрес контракта токена и зачем он нужен
- Где искать его и как добавить
- Безопасность и возможные ошибки новичков
Что такое адрес контракта криптовалюты и зачем он нужен?
Пока вы покупаете и храните криптовалюту на бирже и за ее пределы крипту не выводите, вы даже знать не будете что такое адрес контракта и с чем его едят. Все эти вопросы решит биржа, причем незаметно для вас. А самое главное, что биржа гарантирует безопасность и корректность всех адресов криптовалют, с которыми работает.
Начнем с определения и постараюсь максимально простыми словами.
Что такое адрес контракта токена:
это адрес в цепочке блокчейн. Что бы вся система понимала, что это за криптовалюта, что за токен вы переводите между кошельками. Фактически это путь, где находятся все транзакции конкретной криптовалюты во всей цепи блокчейна.
Кто только погружается в крипто мир, должен усвоить несколько моментов:
- Блокчейн это технология совершения децентрализованных транзакций между кошельками и одновременно такая база данных, где хранится вся история транзакций.
- На одном блокчейне может работать сотня криптовалют.
- Причем главная криптовалюта блокчейна – это coin. А все остальные – token.
- Что это вообще такое, как отличить, во что лучше инвестировать, читайте в статье: что такое коины и токены.
В какой момент вам может понадобиться адрес контракта:
- Хотите добавить себе в локальный или холодный кошелек какой либо токен, которого у вас нет. Что бы он стал отображаться у вас как актив.
- Вам предлагают купить вне биржи какую либо криптовалюту, на более выгодных условиях (в 99% это мошенники). По адресу контракта того токена, что вам продают, можете проверить это та монета, что нужна или СКАМ.
- Про СКАМ можно прочитать более подробно в статье: Бесплатная криптовалюта, что нужно знать новичку.
Где искать и как добавить адрес контракта токена
Реально, существует два способа добавить адрес контракта в свой кошелек, что бы токен отразился в интерфейсе.
- Ручной
- Автоматический
В ручном режиме, что бы найти как это сделать смотрите скрин ниже на примере кошелька Метамаск.
Нажимаем – импорт токенов
И заполняем 3 поля ниже и все готово
Копируете в поле на скрине выше адрес контракта, который у вас есть. Символ токена обычно подтягивается автоматически из блокчейна. А число десятичных знаков токена, это количество знаков после запятой, так же чаще всего заполняется автоматически. Можно открыть любой онлайн сервис в интернете, где есть цена этой криптовалюты и просто посчитать вручную. Обычно это 8, 16 или 32.
Полезно знать:
В поле десятичные знаки можно допустить ошибку, тогда у вас на кошельке этот токен будет отображаться с неверным количеством знаков после запятой. Но в самом блокчейне за вами будет верное количество монет. Это поле всегда можно будет отредактировать.
На последнем скриншоте выше, прочитайте сообщение которое в красном прямоугольнике. Важно быть уверенным, что адрес контракта у вас верный, а не от бандитов.
А теперь расскажу про автоматический или полуавтоматический способ добавления адреса. И собственно где его взять, если вам его не дали. Там же можно будет и проверить.
- Самый крупный ресурс по всем токенам и коинам в интернете это – CoinmarketCap
- Там вы найдете практически по любой криптовалюте все интересующую информацию
- И там же есть гарантированно проверенные адреса всех контрактов, которые можно добавить в свой кошелек одним нажатием. Смотрите скриншот ниже.
Безопасность и возможные ошибки новичков
Важно понимать следующие моменты:
- Если блокчейн открыт, то кто угодно может создать токен в этом блокчейне, даже похожий на реально существующий, поддельную версию. Например блокчейн второй по капитализации монеты Ethereum является открытым и таких огромное количество.
- Важно быть уверенным в том источнике, где вы взяли адрес контракта. К примеру, если вам в личку скинули в телеграмме, пусть и из большого популярного канала, скорее всего это мошенники. Которые так же сидят в этих популярных каналах.
- Реальные адреса токенов обычно всегда есть на сайте конкретного проекта в открытом доступе.
- Посмотрите скрин, что был выше. Токен CERE работает в сети блокчейна Ethereum и адрес контракта из этой сети.
- Что такое сети криптовалют и что нужно знать про них.
- И вот вам предлагают купить эту криптовалюту дешевле рынка. Тоже название CERE, может так совпасть (вряд ли конечно, но кто знает) что даже адрес тот же, тот же логотип, но сеть не Ethereum, а другая.
- Знайте это подделка и вы просто попадете на бабки.
- Реальные проекты никогда не рассылают в личку или почту адреса своих контрактов, они всегда есть на официальных страницах в открытом доступе.
Это только один аспект безопасности на тему: как избежать кражи криптовалюты. Больше информации по ссылке.
В заключение: зная всю мат часть про адрес контракта, денег больше вы точно не заработаете. Но это знание однозначно поможет вам их сохранить и не отдать аферистам. А последних на крипто рынке сегодня пруд пруди.
Полезные ссылки для любого начинающего крипто инвестора:
Аккаунты Ethereum
Аккаунт Ethereum — это сущность с балансом эфира (ETH), которая может отправлять транзакции в Ethereum. Аккаунты могут управляться пользователем или развертываться как умные контракты.
Прежде чем начать
Аккаунты — простая тема для новичков. Но чтобы помочь вам лучше понять эту страницу, мы рекомендуем сначала прочитать наше введение в Ethereum.
В Ethereum есть два типа аккаунтов:
- Внешний — контролируется тем, у кого есть приватный ключ
- Контракт — умный контракт, развернутый в сети и управляемый кодом. Подробнее об умных контрактах
Оба типа аккаунтов имеют возможность:
- Получать, удерживать и отправлять ETH и токены
- Взаимодействовать с развернутыми умными контрактами
Внешний
- Создание аккаунта бесплатно
- Можно инициировать транзакции
- Транзакции между внешними аккаунтами могут быть только в ETH и токенах
Контракт
- Создание контракта имеет свою цену, потому что вы используете сетевое хранилище
- Может отправлять транзакции только в ответ на получение транзакции
- Транзакции с внешнего аккаунта на аккаунт контракта могут запустить код, который может выполнить множество различных действий, таких как передача токенов или даже создание нового контракта
У аккаунтов Ethereum есть четыре поля:
- nonce — счетчик транзакций, исходящих из этого аккаунта. Он гарантирует, что транзакции обрабатываются только один раз. Если это аккаунт контракта, счетчик представляет собой количество созданных им контрактов.
- balance — количество wei, принадлежащих этому адресу. Wei — это часть ЕТН, один ETH равен 1e+18 Wei.
- codeHash — этот хэш ссылается на код учетной записи на виртуальной машине Ethereum (EVM). Аккаунты контракта имеют запрограммированные фрагменты кода, которые могут выполнять различные операции. Этот EVM-код запускается при вызове аккаунта. Изменить это нельзя, в отличие от других полей аккаунта. Все фрагменты кода содержатся в базе состояний под соответствующими хэшами для последующего извлечения. Это значение хэша известно как codeHash. Для внешних аккаунтов поле codeHash — это хэш пустой строки.
- storageRoot — так