Skip to main content


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 GnosisSafe contract extended another contract called FallbackManager, which allowed a contract developer to arbitrarily swap out the implementation of the GnosisSafe's fallback function. This got me thinking about what a fallback function 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 42 .

Finally, the API of the HTML DSL was inspired by HyperScript and Pug.