Разве не все контракты, которые принимают значение и развертываются после HF, фатально уязвимы для повторных атак?

Допустим, я развертываю контракт с простой функцией, которая принимает некоторое значение, и развертываю ее в разветвленной цепочке. Контракт окажется на непредсказуемом адресе U. Затем люди начнут отправлять в контракт несколько транзакций со значением ETH, одновременно вызывая функцию. Все в порядке.

Но все эти входящие транзакции воспроизводимы и, вероятно, фактически воспроизводятся в цепочке ETC (при условии, что на адресе отправителя есть баланс ETC, что может произойти в любое время в будущем, например, если какая-то третья сторона случайно отправит туда средства) . Проблема здесь в том, что в цепочке ETC нет контракта по адресу U (даже если я разверну тот же контракт в этой цепочке, он окажется на другом адресе), поэтому адрес U рассматривается как учетная запись, контролируемая извне, поэтому значение будет передано, и никакая функция не будет вызвана (похоже, поле данных в транзакции игнорируется для транзакций на счета, контролируемые извне). Таким образом, значение ETC ушло в пустоту и не подлежит восстановлению.

Это правда или я что-то не так понимаю? Кажется, это может происходить очень часто.

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

Ответы (1)

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

Не совсем потому, что одноразовый номер не будет (всегда) одним и тем же. Итак, детерминированный, да, но не идентичный для обеих цепочек.
@bortzmeyer Адрес будет таким же, если tx воспроизводится повторно (как при атаках повторного воспроизведения). Это также будет то же самое, если мы убедимся, что адрес развертывания и его одноразовый номер совпадают.