Каково значение того, чтобы сделать конструктор платным?

Разве конструкторы не используются для инициализации переменной во время создания контракта? В разделе общих шаблонов документации по солидности конструктор платных платежей используется для примера шаблона вывода.

      function   WithdrawalContract ()   public  payable { richest =  msg . sender ; mostSent =  msg . value ; 
 } 

Какое значение имеет то, что мы не можем жестко закодировать значение или инициализировать его какой-нибудь другой функцией?

Ответы (1)

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

Но если я развертываю контракт, зачем мне нужен эфир для его создания? Можете ли вы предложить вариант использования? Например, я создаю dapp и продаю некоторые предметы коллекционирования, в то время как создание контракта не имеет смысла помещать эфир. Спасибо
Вам не нужно, если это не ваш вариант использования. У вас может быть отдельная function deposit() payable {..} . Но есть случаи, когда это нужно. Примером может служить однонаправленный канал оплаты, где вы добавляете эфир в условное депонирование при создании канала.
Я приведу вам пример. Если вы сделаете дапп, где пользователь может отправить эфир и сделать ставку на номер от 1 до 5, где он получит в 4,90 раза больше своих денег, когда он прав, вам нужно будет предварительно загрузить контракт с Ether. Если вы этого не сделаете, контракт сработает, когда пользователь выберет правильный номер с первой попытки, так как в контракте не будет эфира, чтобы заплатить пользователю.