견고성: 숨겨진 변수가 가능한가?

여기 내 마음에 떠오르는 질문이 있습니다. 계약 저장소에서 일부 변수를 숨길 수 있습니까?

공식적으로 우리는 어떻게든 트랜잭션(또는 일련의 트랜잭션)을 만들어서 결국 일부 계약의 특정 위치p에 임의의 값이 저장되고 이 값이 특정 위치q에 저장될 확률이 1 / 2^256는 모든 q에 대해(또는 다른 일부q에 대해 무시할 정도로 적음)?

우리는 값이 무엇인지 알고 있는지 여부에 상관하지 않으며 값이 어디에 저장되어 있는지 표시하고 싶지 않습니다. 나는 또한 여기에서 임의의 신탁을 선호하지 않습니다.

나는 사실 이 문제에 대한 답을 모른다! 사실, 그리고 나는 당신의 의견을 보기 위해 여기에 있습니다! 자, 함께 브레인스토밍합시다 🧠🌪️

내 시도



내 초기 아이디어는 다음 런타임 코드로 스토리지 계약을 맺는 것이었습니다.

PUSH1 0xFF // our arbitrary value
<some position>
SSTORE


내가delegatecall 이 사람이 어떻게든 위치를 할당한 후에 내 저장소에 임의의 값을 갖게 됩니다.

그런 다음 트랜잭션에서 눈에 띄지 않게 이 계약에 해당 위치 값을 공급하는 방법을 해결해야 합니다.

내가 시도한 것:
  • 어떻게든 밸런스를 포지션으로 사용할 수 있는지 알아보고 이더를 보여주지 않고 보내려고 합니다. selfdestruct이 이를 암시적으로 수행하는 유일한 방법이지만 내부 트랜잭션에서 볼 수 있습니다.
  • 어떻게든 우리 컨트랙트에 잔고를 가져오더라도 나중에 볼 수 없도록 동일한 트랜잭션에서 제거해야 하고, 그렇게 할 수 없습니다. selfdestruct가 작동하더라도 저장소도 정리됩니다.
  • 알겠습니다. 그러면 다른 주소의 잔액을 가져와 내 위치로 사용할 수 있을까요? 표시하지 않고 해당 주소를 어떻게 제공합니까?
  • ...

  • 이것은 호기심과 도전을 위한 것입니다. 이 글을 쓰는 시점에서 나는 이것이 전혀 불가능하다고 99% 확신합니다. 그럼에도 불구하고 공식적으로 증명할 수 없는 것은 확신할 수 없습니다. 여기 있습니다.

    기타 관심 사항:
  • 어떻게든 인라인 어셈블리를 사용하여 변수를 숨기도록 설정.slot할 수 있습니까?
  • (게시물을 편집하면서 여기에 더 추가할 수 있음)
  • 좋은 웹페이지 즐겨찾기