Write-up for Submerged
Overview
This challenge is based on an observation: by using single-use addresses, you can craft transactions such that a smart contract can verify the transaction hash of the current transaction. As a result, we can write a contract which simulates a hypothetical TXHASH
opcode, which other contracts can build upon.
There are a few interesting use cases for this primitive, but this challenge was focused primarily
on having challengers construct transactions that could be verified by the TxHashSimulator
.
Solving the puzzle
By modifying the code from the challenge files, we can write a Foundry script which constructs the raw transaction, derives the sender, and tells us how much ETH to fund the sender with before broadcasting the raw transaction:
After this, it's as simple as calling the proveSubmergedSeed
method and passing in the raw transaction bytes.