что такое eth адрес

Что такое ETH Address и зачем он нужен – база знаний для криптоновичков

Большинство пользователей, только входящих в мир криптовалют, задают вопрос, что это такое ETH Address и зачем он нужен (продвинутые читатели, не обессудьте – есть люди, которые до вчерашнего дня и не догадывались о существовании других криптомонет, кроме биткоина!).

Дословный перевод значения – адрес Эфириума, который имеет определённый набор цифр и букв, обозначающие идентификатор владельца кошелька.

Получить ETH Wallet address, может только владелец криптокошелька. Услуга предоставляется совершенно бесплатно.

Содержание:

Что нужно знать криптоэнтузиасту

По своей сути, указанный ETH Address, это не кошелек, не ваш аккаунт, не содержит информации о наличии всех средств на криптокошельке.

Данный идентификатор нужен для того, чтобы отправители могли отправлять криптовалюту между собой, и она доходила на конкретный кошелек.

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

В программе клиента есть специальная кнопка, которая генерирует автоматически адрес.

Далее перед пользователем появляется информация в виде набора цифр и букв (уникальный код), которые в дальнейшем можно использовать для проведения транзакций.

Ошибка в адресе, как исправить

Каждый идентификатор имеет проверочный код, который предназначен для проверки написания точности адреса.

Если вы некорректно или ошибочно ввели адрес, транзакция будет отменена автоматически.

В техническом исполнении идентификатор представлен как математический код хеша открытого ключа ECDSA.

Зная определённые математические методики, можно «подписать» сведения при помощи наличия секретного ключа, при этом можно удостовериться в подлинности существования подлинности указанной подписи.

Простыми словами – имея секретный ключ (особый хэш) к открытому ключу (eth address) пользователь может управлять средствами на кошельке.

Об онлайн или оффлайн-адресах криптокошельках

Создать ETH Address можно двумя способами, при помощи веб-версии кошелька или скачав на мобильное устройство софт.

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

В настоящее время можно скачать приложения кошельков для ПК, в том числе для популярной ОС — Виндовс.

Кроме этого, есть мобильные версии для Андроид и для iOS.

Рекомендуем использовать официальные клиенты ПО:

Обратите внимание, что официальный клиент ПО для Виндовс занимает 2Гб свободной памяти на жёстком диске.

Такой большой объем обусловлен большими размерами алгоритма Эфириума.

Необходимо знать также одну техническую сторону работы Эфириум кошелька.

Если биткоины хранятся на специально выделенных серверах, то эфириум — прямо на вашем ПК или мобильном устройстве.

Реквизиты адресной строки

Адрес ETH будет иметь набор букв и цифр в количестве 40-44 значения, включающие арабские цифры и латинские буквы.

В дальнейшем вы можете скопировать полностью адрес и указать получателю и отправителю ваш идентификатор для перечисления или зачисления криптоактивов.

Примерный вид реквизита ETH будет выглядеть так:

Заключение

Для того чтобы транзакция прошла успешно или чтобы вы могли получать вознаграждения с eth-кранов, необходимо иметь уникальный идентификатор адреса Эфириума.

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

Проводите инвестиции безопасно и уверенно, используя только надежные сервисы.

Источник

Как узнать адрес Эфириум-кошелька?

Адрес кошелька Ethereum — что это и как выглядит

Криптовалюта Эфириум считается главным конкурентом Биткоина и борется с ним за лидерство в мире виртуальных валют. На 24 августа 2018 года эта монета находится на 2-м месте по капитализации с показателем 28,2 миллиона долларов. Что касается курсовой цены, она (как и предыдущий параметр) значительно отстаёт от стоимости BTC и составляет 278 долларов. Несмотря на это, Эфириум перспективен и на фоне падения цены даже более привлекателен для инвесторов. Чтобы внести эту криптовалюту на бумажник, необходимо получить адрес хранилища — публичный идентификатор (специальный номер), о котором упоминалось выше.

Адрес кошелька Ethereum — набор символов, который создается перед проведением транзакции и предназначен для решения различных задач:

Итак, как выглядит номер кошелька Эфириум? Люди, которые не знают особенностей бумажника, нередко путают его номер с идентификатором для других криптовалют. Адрес для хранилища Ethereum начинается с нуля и состоит из определенного числа символов (от 40 до 44). В состав кода входят цифры и латинские буквы.

Как узнать номер кошелька Эфириум — главные особенности

Чтобы найти и скопировать идентификатор для проведения операции (к примеру, пополнения бумажника другим пользователем), делаем следующие шаги:

Как узнать адрес Эфириум-кошелька для разных видов хранилищ — краткий обзор

В криптовалютной сети Ethereum существует два типа бумажников — онлайн и десктопные. Каждый из них имеет индивидуальный интерфейс и особенности. Перед покупкой Эфириума человек должен определиться с видом кошелька, установить его на ПК или телефон (если речь идет о десктопных вариантах), после чего изучить интерфейс.

Общий принцип получения Ethereum на кошелек имеет следующий вид:

Теперь рассмотрим, как узнать адрес кошелька Эфириум для наиболее популярных бумажников:

Ошибки в адресе кошелька Ethereum

У Биткоина также имеется первичный адрес кошелька, на который пользователи отправляют монеты намеренно, чтобы отблагодарить создателя виртуальной монеты. Считается, что первый идентификатор Bitcoin принадлежит бумажнику Сатоши Накамото. Что касается «нулевого» адреса Ethereum, на него также поступают деньги, но не в знак благодарности В. Бутерину, а по причине ошибки.

Так сложилось, что адрес кошелька Эфириума, состоящий из 0x и следующим за ним сорока нулями, можно ввести ошибочно. К примеру, если человек случайно зажимает палец на нуле дольше обычного. При этом монеты отправятся по идентификатору в одном направлению. Вернуть средства уже не получится. Кроме того, во многих хранилищах адрес устанавливается по умолчанию до настройки пользователем.

С такой проблемой, как правило, сталкиваются владельцы аппаратных кошельков, к примеру, Leger Nano S. Их особенность в том, что система по умолчанию задает идентификатор с одними нулями, если пользователь не указал адрес самостоятельно. Если заглянуть на форумы в Сети, можно найти множество жалоб пользователей.

Так, один владелец криптовалюты пишет, что по ошибке отправил на «нулевой» адрес 1493 монет. Если говорить в целом, за весь период существования Эфириума (с 2015 года), на идентификатор с сорока нулями после «0x» проведено больше 750 операций, а общая сумма на бумажнике составляет больше 7 тысяч монет. Сюда же попадают токены ERC20, многие из которых имеют вид бонусных. Известно, что на начальном этапе на «нулевой» адрес часто отправлялся Эфириум в количестве от 100 монет и более.

В случае с Биткоином отправка BTC на первичный адрес окончательна, а деньги возврату не подлежат. В ситуации с Эфириумом остается вероятность настройки смарт-контракта, позволяющего вернуть случайно отправленные монеты. Но для этого руководители проекта должны иметь ключ от адреса и волю для возврата средств пользователям. Пока этого не произошло.

Выше мы рассмотрели, как формируется адрес кошелька Ethereum, что это такое и из какого числа символов состоит. Рассмотрены принципы получения сведений об идентификаторе для разных типов хранилищ, а также последствия ошибочной отправки криптовалюты по «нулевому» адресу. Эта информация пригодится пользователям для проведения транзакций и защитит от случайной отправки виртуальных монет по ошибочному идентификатору.

Видео о том, как создать Эфириум-кошелек:

Источник

Адрес криптовалюты (Ethereum, Litecoin, Ripple, Dogecoin) — что это, как выглядит, где найти и взять. Полный обзор с примерами и пояснениями

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

Читайте также:  что делать если подвернул шею

Создав кошелек в онлайн-сервисе, на бирже (рейтинг надежных криптобирж) или скачав программный клиент, пользователь озадачивается вопросом, как пользоваться сервисом: осуществлять транзакции, пополнять баланс, делать переводы и т. д. Чтобы осуществлять необходимые операции в криптокошельке, нужно знать, что такое адрес криптовалюты, как он выглядит, где находится, как его найти и использовать и т. п. Именно на эти вопросы юзер найдет ответы в данной заметке на примере «ходовых» криптомонет, к которым относятся BTC, ETH, LTC, XRP, DOGE.

Важно! Адрес кошелька криптовалюты — по сути идентификационный номер электронного бумажника (не путать с ID-номером кошелька), при помощи которого осуществляются необходимые финансовые операции: ввод/вывод криптоактивов, перевод койнов другим адресатам и т. д. Для наглядности: в криптовалютном мире адрес электронного бумажника (открытый ключ) — как в реальной жизни 16-значный набор цифр банковской карточки.

Нюанс. Если нужно определить криптовалюту по адресу, то можно воспользоваться специальными сервисами walletexplorer.com.

Общая информация

Не принципиально, о каком койне идет речь, адрес криптовалюты — это точка нахождения токенов в Blockchain, необходимая для хранения цифровых активов с последующей реализацией любых финансовых операций. Визуально идентификатор электронного хранилища — набор случайно сгенерированных цифр и литер латинского алфавита нижнего и верхнего регистра. Количество сгенерированных символов зависит непосредственно от криптомонеты. Манипуляции с криптоактивами происходят при помощи следующих составляющих:

Проще говоря, первый шаг — генерация приватного кода. На основе конфиденциального ключа через хэширование формируется публичный код (метод тот же — случайный набор символов). Индивидуальный номер виртуального бумажника присваивается кошельку после авторизации на ресурсе. Как правило, увидеть собственный идентификатор можно, кликнув по опции «Receive» (по-русски — получить), которая расположена в любом популярном среди пользователей кошельке криптовалют. Если такая функция отсутствует, можно попытать счастье в разделе «Баланс», в частности активировать в этой вкладке опцию «Пополнить баланс».

Адрес Bitcoin

Адрес кошелька криптовалюты Bitcoin (Биткоин, BTC) — открытый код, который состоит из следующих параметров:

Выглядит адрес биткоин следующим образом (справа — приватный ключ, который ему соответствует):

Как упоминалось выше, общедоступный код генерируется вновь с каждой новой финансовой операцией. Этот механизм интегрирован для повышения безопасности криптоактивов. При этом «старые» ключи остаются в архиве пользователя и не теряют своей активности — то есть. если кто-то перевел средства на предыдущий адрес, баланс получателя пополняется. К слову сказать, есть опция отключения генерации новых адресов. Однако активировав ее, пользователь дает возможность третьим заинтересованным лицам проследить всю историю собственных финансовых операций по фиксированному (неизменному) публичному ключу.

Адрес криптовалюты Ethereum

Адрес кошелька криптовалюты Ethereum имеет отличия:

Выглядит адрес Эфириум так:

Чтобы увидеть и скопировать открытый ключ «эфира», необходимо предпринять следующие шаги: установить локальный бумажник на ПК, зарегистрировать онлайн-кошелек или использовать другие способы (список кошельков Ethereum), затем кликнуть по опции «Новый адрес» («New Address») и в открывшейся вкладке активировать функцию «Receive». Отличия относительно типа клиента имеют место быть, но, как правило, порядок действий и название опций соответствуют озвученному материалу. В разделе получения крипты видим и в случае необходимости копируем адрес.

Адреса кошелька Litecoin

Будучи форком «битка» криптовалюта Litecoin (Лайткоин, LTC) копирует параметры публичного ключа своего «старшего брата». Здесь тоже количество символов — до 34 знаков сгенерированных случайным образом, включающих в себя цифры и буквы латинского алфавита высокого и низкого регистра. Те же символы запрещены к использованию, как в Bitcoin.

Пример адреса Litecoin:

Увидеть публичный код, например, в официальном кошельке Litecoin Core можно, прибегнув к следующей инструкции:

Чтобы не совершить ошибку в процессе ручного ввода открытого ключа или не заморачиваться с копированием, можно воспользоваться QR-кодом. Для его считывания необходим специальный софт, зато нет необходимости узнавать идентификатор виртуального хранилища LTC. Применять QR-код целесообразно на мобильных клиентах.

Адреса для криптовалют Ripple и Dogecoin

Адреса криптовалют Ripple (XRP, Рипл) и Dogecoin (DOGE, Догкоин), их параметры (длину строчки, где увидеть и взять) объединим в таблицу:

Криптовалюта Количество знаков в публичном адресе Инструкция для копирования адреса кошелька
Ripple (XRP) До 34 символов Чтобы увидеть и осуществить в случае необходимости соответствующие действия с общедоступным адресом Ripple, нужно на платформе Gatehub (сервис выбран в качестве примера, так как является наиболее популярным хранилищем среди держателей данного токена) или любого другого кошелька Риппл зайти в учетную запись. Затем перейти в рубрику «Wallet», на страницу собственного бумажника. Внизу страницы в окошке «Wallet Address» будет обозначен адрес кошелька криптовалюты XPR.
Dogecoin До 34 символов На ресурсе DogeChain.info проходим регистрацию кошелька, которая не займет много времени — всего пару минут. После авторизации и получения приватного ключа, который необходимо хранить в надежном месте, находим открытый код, то есть идентификатор бумажника, активировав опцию «Open You Wallet». В появившейся вкладке обнаружим искомый объект.

Пример адреса и приватного ключа криптовалюты Ripple (XRP, Рипл):

Адреса Dogecoin:

В заключении

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

Источник

Учебник по Solidity. Все об адресах

Продолжаем серию статей про язык Solidity и платформу Ethereum. В этой статье будет рассказываться про адреса в Ethereum. Статья была написана в августе 2019 года, с той порой язык изменился, поэтому несоответствия в описании автора были исправлены.

Во введении проведено сравнение Ethereum адресов с почтовыми адресами в реальном мире.

Техническая часть начинается с раздела «Что такое (технически) адрес в Ethereum?»

Оглавление

Что такое (технически) адрес Ethereum?

Основы адресов в Solidity

address vs address payable

Методы доступные при работе с адресами

Преобразование типов address и address payable

Методы возвращающие тип address

1. Введение

На август 2021 года в блокчейне Ethereum насчитывается почти 166 миллионов уникальных адресов!

Давайте начнем с очень простого примера, чтобы понять, что такое адреса в Ethereum (и в блокчейне в целом). Для этого нам нужно представить себе сценарий.

Вы находитесь в отпуске в Суздали. Вы впервые посещаете этот город, и он вам очень понравился! Настолько, что вы решили сказать своему другу Алексу Цветкову, что он обязательно должен его посетить.

Хорошим способом намекнуть ему об этом будет отправка открытки с изображением Суздальского Кремля.

Вы идете на почту, и почтальон спрашивает вас: «Куда отправить?», на что вы отвечаете: «Моему другу, Алексу Цветкову».

Сотрудник за стойкой обязательно скажет, что:

он не знает, КТО этот ваш друг и

он не знает, ГДЕ он живет.

Поскольку вы знаете адрес Алекса, вы напишете его на открытке и передадите ее сотруднику почтового отделения.

Затем почтовая компания отправит вашу открытку, используя свою курьерскую сеть и отделения по всему миру. Открытка будет передаваться между почтовыми отделениями и перевозчиками.

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

Простые аналогии

Эта история с открыткой может показаться слишком упрощенным примером. Ведь каждый знает, как отправить письмо и проверить свой почтовый ящик, чтобы посмотреть, что ему принес курьер.

Адрес в Ethereum имеет схожие характеристики с почтовыми адресами. Благодаря использованию криптографии с открытым ключом.

Читайте также:  что делать если упал на руку и сильно болит локоть

Уникальность адреса

В реальном мире почтовый адрес связан с почтовым ящиком, а вернее он связан с его географическим расположением.

Даже если в мире существует несколько Алексов Цветковых, но есть только один Алекс Цветков, проживающий по адресу «RU, 121552, Москва, ул. Ярцевская, д. 30«.

Поскольку функции хэширования детерминированы, это значит, что для разных входных данных будет разный хэш, при этом для одних и тех же входных данных хэш функция будет возвращать всегда еднообразный хэш. Поэтому для уникального закрытого ключа => создаётся уникальный хэш.

Личное и секретное

Ключ вашего почтового ящика не только уникален, но также личный и секретный. С уникальностью мы уже познакомились, теперь давайте рассмотрим «личный» и «секретный».

Секретный (закрытый) вы и только вы знаете, для чего может быть использован данный физический ключ. Если я дам вам свой набор ключей, вы не будете знать, каким именно ключом вам открыть мой почтовый ящик.

Аналогично в Ethereum, ваш закрытый ключ хранится в вашем кошельке. Только вы должны знать его и никогда не делиться им!

Управление секретным (закрытым) ключом

В реальном мире вы можете открыть свой почтовый ящик уникальным физическим ключом. Ваш почтовый ящик имеет встроенный замок, к которому привязан уникальный секретный ключ для его открытия.

В Ethereum вы можете использовать свой аккаунт с уникальным закрытым ключом.

Заметка: закрытый или секретный ключ? По сути это одно и тоже. Если вы говорите про “открытый ключ”, то в пару к нему говорите “закрытый ключ”. Если говорите “публичный ключ”, то говорите “секретный ключ”. Зависит от ваших предпочтений как использовать русский язык. Далее по тексту будет использоваться “закрытый” ключ.

В мире криптографии «личный» и «закрытый» ключ являются взаимозаменяемыми терминами. Открытый ключ является производным от закрытого ключа, поэтому они связаны между собой.

Закрытые ключи в Ethereum позволяют отправлять ether путем подписания транзакций. Единственным исключением являются смарт-контракты, как мы увидим позже.

Различные типы адресов

Виды адресов в Ethereum: Externally owned accounts, contract accounts

External owned accounts (учетные записи, принадлежащие внешним пользователям, EOA): контролируются закрытыми ключами.

Закрытый ключ даёт контроль над ether на счёте и над процессами аутентификации, необходимой счёту при взаимодействии со смарт-контрактами. Они (закрытые ключи) используются для создания цифровых подписей, которые требуются для транзакций по расходованию любых средств на счете.

Contract accounts (учетные записи смарт-контрактов, CA): самоуправляемы своим своим кодом.

В отличие от EOA, у смарт-контрактов нет открытых или закрытых ключей. Смарт-контракты поддерживаются не закрытым ключом, а присущим им кодом. Можно сказать, что они «владеют собой».

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

2. Что такое (технически) адрес Ethereum?

Хэш-функции являются ключевым элементом при создании адресов. Ethereum использует хэш-функцию keccak-256 для генерации адресов.

В Ethereum и Solidity адрес имеет размер в 20 байт (160 бит или 40 шестнадцатеричных символов). Он соответствует последним 20 байтам хэша (keccak-256) открытого ключа. Адрес всегда имеет префикс 0x, поскольку он представлен в шестнадцатеричном формате (нотация base16).

Как создается адрес Ethereum?

Очень полезно понять процесс создания адреса в Ethereum. Это позволит по-другому взглянуть и понять, как устроена платформа Ethereum.

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

Процесс создания адресов в Ethereum можно разделить на два типа: создание EOA адресов и создание адресов смарт-контрактов.

Как создаются EOA адреса?

Давайте используем спецификацию Yellow Paper и создадим адрес Ethereum с нуля. Мы будем использовать эту статью Винсента Кобеля в качестве пошагового руководства по созданию адреса Ethereum.

1. Начнём с открытого ключа (128 символов / 64 байта)

Примечание: открытый ключ получается из закрытого ключа с помощью ECDSA (алгоритм цифровой подписи на эллиптической кривой). Ethereum использует тот же тип кривой, что и биткоин: secp256k1.

2. Применим хэш (keccak-256) к открытому ключу. Должна получиться строка длиной 64 символа / 32 байта.

3. Возьмем последние 40 символов / 20 байт из полученного хэша или отбросьте первые 24 символа / 12 байт.

Эти 40 символов / 20 байт являются адресом.

С префиксом 0x адрес фактически становится длиной 42 символа. Кроме того, важно отметить, что они нечувствительны к регистру. Все кошельки должны понимать адреса Ethereum, выраженные заглавными или строчными символами. (Начиная с EIP-55, адреса в верхнем регистре используются для проверки контрольной суммы)

0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9 или 0X001D3F1EF827552AE1114027BD3ECF1F086BA0F9

Как создаются адреса смарт-контрактов?

Адреса смарт-контрактов создаются по-другому. Они детерминировано вычисляются из двух вещей:

Адрес создателя смарт-контракта: sender

Сколько транзакций отправил создатель: nonce

Ниже описаны шаги по созданию адреса смарт-контракта

Возьмите значения sender и nonce.

Закодируйте их с помощью RLP

Захэшируйте результат с помощью Keccak-256

Адреса в кратком изложении

В целом, основными характеристиками адресного типа в Solidity являются:

Длина 20 байт (160 бит): как уже было сказано, Ethereum адрес соответствует последним 20 байтам хэша Keccak-256 связанного с ним открытого ключа.

Шестнадцатеричный формат (нотация base16): Ethereum адрес содержит ровно 40 символов (2 символа = 1 байт) из шестнадцатеричного диапазона (0 1 2 3 4 5 6 7 8 9 или a b c d e f).

Префикс 0x: поскольку это шестнадцатеричный формат, он должен иметь префикс 0x. Поэтому его общая длина составляет 42 символа, если считать 0x.

3. Основы адресов в Solidity

Как определить переменную адресного типа?

Чтобы определить переменную адресного типа, укажите ключевое слово address перед именем переменной.

address user = msg.sender;

Мы использовали встроенную функцию Solidity msg.sender для получения адреса текущего аккаунта, взаимодействующего со смарт-контрактом.

Но вы можете жёстко закодировать определенные адреса в коде Solidity, используя адресные литералы. Они описаны в следующем разделе.

Адресные литералы

Вот пример того, как объявить литерал адреса в Solidity.

address owner = 0xc0ffee254729296a45a3885639AC7E10F9d54979;

Как уже отмечалось ранее, литерал адреса должен:

содержать 40 символов (длиной 20 байт), и

должны иметь префикс 0x.

имеют правильную контрольную сумму

Что касается пункта 3), адресные литералы должны иметь правильную контрольную сумму. Если они не проходят тест на контрольную сумму, Remix или компилятор Solidity выдадут предупреждение и будут рассматривать их как обычные интервалы чисел. Формат контрольной суммы адреса в смешанном регистре определен в EIP-55.

4. address vs address payable?

В Solidity, с точки зрения отправителя:

Вы можете отправить ether в переменную, определенную как address payable

Вы не можете отправить ether в переменную, определенную как address

Вы можете использовать ключевое слово payable перед именем переменной типа address, чтобы позволить переменной принимать ether.

Примечание: Тип, возвращаемый msg.sender, является типом address payable.

5. Методы, доступные при работе с адресами

Примечание: количество ether в _amount, указанное в качестве параметра в приведенных ниже методах, выражается в Wei (18 нулей):

1 ether = 1¹⁸ wei = 1 000 000 000 000 000 000 000 000 000 000 wei

Все методы типа address в Solidity:

Мы разделим методы, связанные с адресами, на 3 категории и 2 типа транзакций:

Методы, связанные с ether

возвращает баланс счета в wei.

Любая переменная, определенная как address, имеет метод balance(). Этот метод позволяет получить количество ether, хранящегося на счете, принадлежащем внешнему владельцу (EOA / пользователю) или смарт-контракту. Возвращаемое число представляет собой количество ether в wei.

В приведенном ниже коде показано, как получить ether баланс вашего адреса. В примере мы используем msg.sender.

Читайте также:  что делать если на макбук пролили воду

На самом деле существует два способа посмотреть баланс Ethereum адреса.

Если вы хотите получить остаток по текущему смарт-контракту, мы можем использовать address(this) (это явное преобразование).

Переводит указанное количество ether (в wei) на указанный address.

Возвращает при неудаче и выбрасывает исключение при ошибке.

Потребляет 2 300 gas.

Под капотом функция transfer() запрашивает баланс адреса, применяя свойство balance, перед отправкой ether.

Метод: address.send(uint256) returns (bool)

Использование send сопряжено с некоторыми опасностями: передача не состоится, если глубина стека вызовов равна 1024 (это всегда может быть принудительно исправлено вызывающей стороной), а также если у получателя закончится gas. Поэтому для безопасных переводов ether всегда проверяйте возвращаемое значение send, используйте transfer или даже лучше: используйте шаблон, в котором получатель снимает деньги.

Возвращает false при неудаче (Внимание: всегда проверяйте возвращаемое значение send).

Потребляет газ в размере 2300.

Методы взаимодействия со смарт-контрактами

Solidity предлагает удобный способ вызова функций удалённых смарт-контрактов (например: targetContract.doSomething(. ) ). Однако этот высокоуровневый синтаксис доступен только в том случае, если интерфейс удалённого смарт-контракта известен на этапе компиляции.

В EVM представлено 4 специальных операционных кодов (opcode) для взаимодействия с другими смарт-контрактами, из которых 3 доступны, как методы типа address: call, delegatecode и staticcall.

Примечание: callcode устарел, но все еще доступен в низкоуровневых ассемблерных вставках.

Все низкоуровневые функции, определенные ниже, принимают один аргумент: необработанное сообщение (Может быть создано в библиотеке web3 с помощью encodeABI()).

В этом разделе мы опишем эти низкоуровневые методы. Для лучшего понимания нам необходимо разделить контекст сценария на три части:

Мы рассматриваем сценарий, в котором смарт-контракт A взаимодействует с смарт-контрактом B

Кто вызывает функции удалённого смарт-контракта (отправляет сообщения)? Хранилище какого смарт-контракта обновляется?

Технические детали (возвращаемые значения, передаваемый gas и т.д.)

Метод: address.call(bytes memory) returns (bool, bytes memory)

Типичный случай: смарт-контракт A хочет выполнить функцию смарт-контракта B, которая обращается или изменяет хранилище смарт-контракта B. Вызов B.function() может обновить только хранилище B.

ПРЕДУПРЕЖДЕНИЕ: НЕБЕЗОПАСНО! Получатель может (случайно или злонамеренно) израсходовать весь ваш газ, в результате чего ваш смарт-контракт остановится с исключением out of gas (OOG); всегда проверяйте возвращаемое значение метода call.

Спецификация

Отправляет сообщение (низкоуровневый CALL, см. опкод OxF1), передавая полезную нагрузку полученную в аргументе и помеченную как memory.

Передаёт весь доступный газ.

Возвращает кортеж с:

истинностное значение результата вызова (true при успехе, false при неудаче или ошибке).

данные в байтовом формате.

Типичный случай: смарт-контракт A по сути копирует себе функцию B. Выполнение функции смарт-контракта В будет происходить в контексте смарт-контракта A, возможно взаимодействие со хранилищем смарт-контракта А. Вызов B.function() обновит хранилище A.

Спецификация

Низкоуровневая функция CALLCODE, подобная address(this).call(. ), но с заменой кода этого смарт-контракта на код адреса.

Возвращает false при ошибке.

Метод: address.delegatecall(bytes memory) returns (bool, bytes memory)

Типичный случай: смарт-контракт A хочет выполнить функцию смарт-контракта B, при этом функция будет выполнена в контексте смарт-контракта А. При этом функция B может перезаписать хранилище A и выдать себя за A для любого другого смарт-контракта. Тогда msg.sender будет адресом A, а не B.

В этом случае смарт-контракт A по сути делегирует вызов функции смарт-контракту B. Разница с прежним методом callcode заключается в том, что использование delegatecall позволяет не только перезаписать хранилище смарт-контракта A. Но и если смарт-контракт B вызовет другой смарт-контракт C, смарт-контракт C увидит, что отправителем msg.sender является смарт-контракт A.

Спецификация

Низкоуровневая операция DELEGATECALL (см. опкод OxF4) (с полным контекстом msg, видимым текущим смарт-контрактом), передавая полезную нагрузку полученную в аргументе и помеченную как memory.

Передаёт весь доступный газ

Возвращает кортеж с:

истинностным значением как результатом вызова (true при успехе, false при неудаче или ошибке).

данные в байтовом формате.

Метод: address.staticcall(bytes memory) returns (bool, bytes memory)

Спецификация

Низкоуровневая операция STATICCALL (см. опкод OxF4) (с полным контекстом msg, видимым текущим смарт-контрактом), передавая полезную нагрузку полученную в аргументе и помеченную как memor.

Возвращает кортеж с:

истинностным значением как результат вызова (true при успехе, false при неудаче или ошибке).

данные в байтовом формате.

Передаёт весь имеющийся газ

Дополнительные параметры для вызовов низкого уровня

При взаимодействии с смарт-контрактами в Solidity через низкоуровневые вызовы call(. ), delegatecall(. ) и staticcall(. ) у вас есть возможность добавить некоторые пользовательские параметры (немного похоже на web3js). Это позволит вам указать, например, сколько ether вы хотите отправить по адресу, указанному в вызове (value), а также сколько gas вы готовы использовать.

В приведенном ниже фрагменте кода приведен пример.

6. Преобразование типов address и address payable

Допускаются неявные преобразования из address payable в address

Неявные преобразования из address в address payable невозможен (за исключением address payable к address payable).

Явное преобразование из и в address разрешено для: целых чисел uint160, целочисленных литералов, bytes20 и типа contract.

Только выражения типа address и contract могут быть преобразованы в тип address payable с помощью явного преобразования payable(. ). Для типа contract это преобразование допустимо только в том случае, если смарт-контракт может получать ether, т.е. смарт-контракт либо имеет функцию receive, либо функцию fallback c payable. Обратите внимание, что payable(0) допустимо и является исключением из этого правила.

Контракты как address

Начиная с версии 0.5.0 Solidity, смарт-контракты больше не cодержат тип address, но все еще могут быть явно преобразованы в address или address payable (если у них есть функция receive или fallback payable).

Примечание: преобразование выполняется с использованием address(переменная) и payable(address(переменная)).

Операторы используемые с address

С address доступны следующие операторы: = и >.

7. Методы, возвращающие тип address

msg.sender

msg.sender() возвращает address payable.

Как следует из названия, функция msg.sender возвращает адрес, который инициировал вызов этого смарт-контракта. Однако важно отметить следующее:

msg.sender возвращается в текущем вызове. Он не обязательно возвращает отправителя EOA, который отправил транзакцию.

Если смарт-контракт A вызван непосредственно в транзакции отправленной с EOA, то в msg.sender будет адрес EOA.

Если смарт-контракт A вызван другим смарт-контрактом B, где B был вызван транзакцией отправленной с EOA, то в msg.sender будет адрес смарт-контракта B.

tx.origin

Предупреждение: небезопасно!

tx.origin() возвращает address.

tx.origin возвращает EOA адрес отправителя изначальной транзакции. Таким образом, возвращается полная цепочка вызовов.

block.coinbase

block.coinbase() возвращает address payable.

Адрес добытчика текущего блока, т.е. адрес получателя платы за текущий блок и вознаграждения за блок.

ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)

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

r = первые 32 байта подписи

s = вторые 32 байта подписи

v = последний 1 байт подписи

ecrecover возвращает address, а не address payable.

8. Нулевой адрес

После написания смарт-контракта он развертывается в сети Ethereum с помощью специальной транзакции. Однако транзакция подразумевает наличие отправителя и получателя. Поэтому эта специальная транзакция должна быть отправлена на специальный адрес.

Так какой же адрес следует указывать в качестве получателя, когда речь идет о создании смарт-контракта?

Создание смарт-контракта в Ethereum предполагает создание специальной транзакции, адресом назначения которой является адрес: 0x00000000000000000000000000000000000000000000000000, также известный как нулевой адрес.

Раздел, связанный с нулевыми адресами из YellowPaper.

Виртуальная машина Ethereum (EVM) понимает, что транзакция направлена на создание нового смарт-контракта, если в поле получателя указан этот нулевой адрес. Этот адрес также имеет длину 20 байт, но содержит только пустые байты 0x0.

В сети Ethereum майнеры выполняют такую транзакцию (содержащую нулевой адрес), как инструкцию по созданию нового смарт-контракта.

Источник

Строительный портал