Подтвердить что ты не робот

Что такое адрес (0) в Solidity

Может ли кто-нибудь объяснить мне, какой address(0) находится в Solidity? В документах я нашел следующее, но для меня это не имеет смысла:

Если целевой учетной записью является нулевая учетная запись (учетная запись с адресом 0), транзакция создает новый контракт. Как уже упоминалось, адрес этого контракта не является нулевым адресом, а адресом, полученным от отправителя и его количеством отправленных транзакций ("nonce"). Полезная нагрузка такой транзакции создания контракта принимается как байт-код EVM и выполняется. Результат этого исполнения постоянно сохраняется как код контракта. Это означает, что для создания контракта вы не отправляете фактический код контракта, а на самом деле код, который возвращает этот код.

http://solidity.readthedocs.io/en/develop/introduction-to-smart-contracts.html?highlight=address(0)#index-8

4b9b3361

Ответ 1

В транзакции Ethereum нулевая учетная запись является лишь особым случаем, используемым для указания того, что развертывается новый контракт. Он буквально "0x0" установлен to поле в сырой транзакции.

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

transaction = {
  nonce: '0x0', 
  gasLimit: '0x6acfc0', // 7000000
  gasPrice: '0x4a817c800', // 20000000000
  to: '0x0',
  value: '0x0',
  data: '0xfffff'
};

Если to установлено значение "0x0", этот запрос приведет к передаче эфира по адресу (если value не равно нулю) и выполнить функцию, закодированную в поле data. Помните, что адрес может быть либо контрактом, либо внешней учетной записью.

Когда to адреса нулевого адреса, новый контракт будет создан путем выполнения кода в data (это то, что подразумевается под "кодом, который возвращает код"). Адрес вновь созданного контракта технически известен заранее, поскольку он основан на адресе отправителя и его текущей версии nonce. Этот адрес становится официальным адресом контракта после добычи.

За довольно неплохое чтение транзакций Ethereum, посмотрите этот пост в блоге.

Примечание. Существует также фактический address(0) оператора кода Solidity address(0) который является начальным значением переменной address типа. Однако документация, которую вы опубликовали, относится конкретно, когда to адреса учетной записи в транзакции установлено значение "0x0".