Implementing EIP-3074 on Optimism L2 geth to enable mass adoption through gasless onboarding.
EIP-3074 lets EOAs delegate control over its signer to an 'invoker contract', which then can receive calls from third party contracts to execute transactions on behalf of the EOA. This enables sponsored gas payments where EOAs can make transactions as a sender even without a single ETH in their wallet.
This EIP has been prototyped on Ethereum in the past, but we sought to implement the two opcodes—AUTH and AUTHCALL—on the OVM and to launch functional smart contracts that display gasless transactions and the invoker contract in action.
The project compares the address of the 'tx.origin' in two cases: one where a third party contract directly modifies the storage, and one where the third party contract modifies the storage through the invoker. In the former, the tx.origin is displayed to be the third party contract's address, and in the latter, despite the fact that it is still the third party contract calling a function to modify storage, the tx.origin is correctly displayed to be the EOA address, as the function was called on behalf of the EOA through the invoker contract.
I built this project by forking the Optimism Geth node client and writing our own logic to implement EIP-3074. I used Golang to write the node, and had to write the demo smart contracts in assembly as our custom opcodes weren't supported by solidity. I also used a React frontend to provide a simple UI for the demo. I wanted to challenge myself with this project and go out of my usual solidity/web comfort zone, and I'm proud of the learnings—debugging in the OVM by looking through each step of the execution trace, examining every element in the stack, parsing each byte of the opcode, as well as configuring local geth networks. Even though at its current state the code is not fit for production, and nor is it completely up to date to grab arguments for memory, it was a worthwhile project to say the least for my own learning!