Solidity: Возможна ли скрытая переменная?

Вот какой вопрос пришел мне в голову: можно ли скрыть какую-то переменную в хранилище контрактов?

Формально, можем ли мы каким-то образом провести транзакцию (или серию транзакций) так, чтобы в итоге в некоторой позиции p некоторого контракта хранилось произвольное значение, где вероятность того, что это значение хранится в некоторой позиции q, равна 1 / 2^256 для всех q (или ничтожно мала для некоторых других q)?

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

На самом деле я не знаю ответа на эту проблему! На самом деле, и я здесь, чтобы увидеть ваши комментарии! Так что давайте, давайте вместе пораскинем мозгами 🧠🌪️.

Моя попытка

Моя первоначальная идея состояла в том, чтобы иметь контракт на хранение данных со следующим кодом во время выполнения:

PUSH1 0xFF // our arbitrary value
<some position>
SSTORE
Вход в полноэкранный режим Выход из полноэкранного режима

Если я delegatecall этого парня после того, как каким-то образом назначу позицию, у меня в хранилище будет произвольное значение.

Затем нужно решить, как передать это значение позиции в этот контракт так, чтобы оно не было замечено в транзакции.

Что я попытался сделать:

  • Я пытался понять, могу ли я как-то использовать баланс в качестве позиции, и попытаться отправить эфир, не показывая его. selfdestruct — единственный способ сделать это неявно, но это можно увидеть во внутренних транзакциях.
  • Даже если мы каким-то образом получим баланс к нашему контракту, мы должны избавиться от него в той же транзакции, чтобы его нельзя было увидеть потом, а мы не можем этого сделать. Даже если selfdestruct сработает, хранилище тоже очистится.
  • Хорошо, тогда, может быть, я могу получить баланс какого-то другого адреса и использовать его как свою позицию? Хотя, как мы предоставим этот адрес, не показываясь.

Обратите внимание, что это просто из любопытства и ради вызова. На момент написания этой статьи я на %99 уверен, что это вообще невозможно. Тем не менее, то, что я не могу формально доказать, я не могу быть уверен в этом; так что вот так.

Другие интересные моменты:

  • Могу ли я как-то использовать встроенную сборку для установки .slot переменной, чтобы скрыть ее?
  • (возможно, добавлю еще что-нибудь по мере редактирования сообщения)

Оцените статью
devanswers.ru
Добавить комментарий