Kick Off

IntroductionπŸ”—

Any denizen of the 2000s internet who dabbled in web development probably remembers the Acid3 browser testing website. The six squares jittering slightly as they change color, never quite reaching the rainbow from the reference image:

Acid3 Reference Image

If you've been following the AllWalletDevs meetingsβ€”and if you haven't been, you should beβ€”you might be aware that we've prototyped a framework for testing Ethereum wallets inspired by the Acid3 tests. Our goal is to foster quality and consistency by making it trivially easy to share tests across wallets.

This project is official now, with a one year grant from the Ethereum Foundation's Ecosystem Support Program!

ProjectπŸ”—

The initial scope of the project is split into several milestones spaced out over one year. After completing these milestones, the testing framework should be in a reasonable place for outside contributors and be ready for wallets to integrate.

MilestonesπŸ”—

  1. Reassess the prototype, and get it into reasonable shape to form the foundation of the framework.
  2. Happy-path coverage of all of the endpoints available in the execution-apis specification for a single wallet, where the website walks the user through the tests with specific human-readable instructions.
  3. Expand the coverage to include multiple wallets, possibly including at least one browser extension and one hardware wallet.
  4. Build automation glue (eg. WebDriver) for at least one wallet.

ArchitectureπŸ”—

OverviewπŸ”—

Architecture Diagram

ComponentsπŸ”—

ProxyπŸ”—

A web server that forwards JSON-RPC requests between the wallet and the simulated chain. Necessary because browsers do not allow web pages to listen for HTTP or WebSocket connections.

WalletπŸ”—

The software under test. Communicates with the tests using window.ethereum, and with the simulated chain through the proxy with JSON-RPC.

Simulated ChainπŸ”—

An isolated Ethereum-compatible blockchain (like Ganache.) The simulated chain presents a JSON-RPC interface to the wallet through the proxy.

TestsπŸ”—

Collection of functions that put the simulated chain into a known state, then perform some operation with or retrieve some information through the wallet.

GlueπŸ”—

Software specific to each wallet that translates conceptual actions (eg. approve transaction) into a format that the wallet understands. Initially this will be on-screen instructions for the user to follow, but later on the glue could be implemented with, for example, WebDriver for browser-based wallets.

What's Next?πŸ”—

You'll start to see some activity in the repository in the next week or so, and perhaps some discussion in #testing.

If you're developing a wallet and want to contribute, please reach out to @gaudren_!