The idea of using the
fallback() function to pass arbitrary data to a smart contract came from Gnosis Safe.
While contracting for a crypto wallet startup last month, one of my tasks was adding EIP-1271 validation support to the startup's wallet SDK. The startup's wallet was based on the Gnosis Safe code, and I read through it to figure out what to do.
I saw that the
GnosisSafecontract extended another contract called
FallbackManager, which allowed a contract developer to arbitrarily swap out the implementation of the
fallbackfunction. This got me thinking about what a
fallbackfunction with more complex logic could do, and this project is the result.
The idea to implement HTTP over Ethereum/Solidity was inspired by reading about DNS tunneling (i.e. HTTP over DNS) to get free in-flight Wi-Fi.
More broadly, the idea that smart contracts could have arbitrary input interfaces beyond the standard protocols output by the Solidity compiler (e.g. the use of function selectors to control which contract function is executed), was inspired by the MagicNumber Ethernaut level, where the solution is a bytecode-only contract which always returns the number