Ответ 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".