Случайный адрес контракта, сгенерированный sendTransaction, когда получатель не определен

Я новичок в Ethereum, пытаюсь научиться использовать geth и web3js. Огляделся и не смог найти подобную проблему, был бы признателен за некоторые пояснения по поводу следующего.

Я попытался создать транзакцию с помощью консоли web3js:

eth.sendTransaction({from:sender, to:receiver, value:amount});

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

receiver = eth.accounts['public key string here...'];

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

Однако транзакция инициировалась и создала контракт с, казалось бы, случайно сгенерированным адресом.

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

Ответы (1)

Вы узнали, как развертываются контракты :-)

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

Формально так говорится в « Желтой книге Эфириума» (раздел 4.3):

введите описание изображения здесь

Адрес не является строго случайным, а генерируется на основе адреса отправителя/от и одноразового номера отправляющей учетной записи (сколько транзакций эта учетная запись отправила в прошлом).