Hermes Network is a layer 2 execution market for Ethereum transactions. It comprises of two core pieces:
- Hermes The Executor A daemon, subscribing to a channel for incoming signed transactions, and submits them to the network, paying gas, and being refunded and rewarded.
- Hermesjs A JS module for dapp developers, which creates signed executable transactions, and publishes them to the network.
- Safe-contracts Fork of the Gnosis Safe contracts. We needed to modify signature validation of the contract, because signatures generated by the RPCSign weren't, to our knowledge, supported by the Gnosis Safe contracts.
In order to demonstrate the the workings on the Hermes Network, a demo has been created.
Contracts on Ropsten:
Various projects aim to improve user experience by enabling recurring fee subscriptions, delegated conditional execution or sponsored gas. These second layer execution markets all share the need for a mechanism that submit signed user transactions to the network. We hope to implement a modular relayer that fulfills these requirements.
In the Minimal Viable Product we focused on creating a decentralized execution market for Gnosis Safe, which acts as an identity proxy for the user. In short, we have:
- Created Hermes The Executor, which is a daemon, listening to a whisper channel, and after doing some verifications, submits the transaction to the network, and gets reimbursed and rewarded from the user's Safe. In order to prevent multiple executors from submitting the transaction and, all but one failing, we propose to add a Proof of Work mechanism. However because that required changes to the Gnosis Safe contracts, for now we simply do a Proof of Random Sleep!
- Created a demo, with a
SimpleStorage
which the user wants to update via meta transactions. The demo embeds HermesJS for creating signed executable transactions and publishing them to the network via whisper. - Deployed our fork of Gnosis Safe to Ropsten, and the SimpleStorage, which can be interacted with via our demo.
The following is a summary of different components of the network coming together:
- End user deploys an identity proxy and puts ether in it. It's important to note that, this need be done only once by the user, and be used for different dapps, or dapps could handle this deployment process.
- There should be at least one executor node running and listening on the same channel as the demo.
- User can then interact with the example dapp which internally is using HermesJS, to sign the transaction without paying gas directly.
- An executor picks up the transaction and submits it to the network, and being reimbursed and rewarded for the gas. As a result of this,
SimpleStorage
gets updated with the chosen user value.