Proposal: A multichain wallet viewer that can be self-hosted as a static website on IPFS.

This project seeks to create an open-source frontend application that acts as a generic viewer for NFTs from multiple blockchains. The application will operate as a static reactjs website that uses only public APIs to fetch wallet and NFT data. By doing this, the application should be able to be fully hosted on IPFS by anybody.

It will not require any wallet logins and will provide read-only access to public wallet information. This is for security and sharability but applications utilizing this framework are free to add server validation.

The significant features of this application are:

  • Allowing users to create links to one or more supported cryptocurrency addresses that will load all on the same page and can be shared with others.
  • Presenting users a sorted list of collections which can each be expanded to show the individual NFTs within, including thumbnails, names, and other available information
  • Stacking NFTs that use the same contract with a visual effect similar to a pile of cards to save space and only present unique NFTs in the collection view
  • Allow NFTs in the collection view to be expanded into a detail view showing any metadata on the NFT
  • Showing the individual mint numbers owned per NFT (if applicable)
  • Bridging together collections that are on multiple blockchains on one collection page

NFTs contain vastly different formats and features depending on the blockchain. I have found WAX to have the most comprehensive metadata available, so I will use it as the base for a generic NFT type. NFTs from Ethereum (including Polygon) and Tezos will be mapped into the generic NFT type so the viewer can similarly render everything.

This open-source project will be available on GitHub under an MIT license. Interested developers can customize the look and feel or include the viewer features in their projects. This project is based on what I learned writing another wallet viewer on my site WAXWORKS, and I am hoping it will also act as an in-place upgrade for that community site.

The project will also include hooks for adding additional server-based functionality, such as resizing images at the server level, hiding undesirable NFTs, storing preferences, or using non-public APIs. This will be fully documented and left to future developers if they choose to implement these hooks.

The viewer will be modular, and new blockchains can be added as wrappers on the generic NFT type utilized throughout the system. This project will include a few demos of non-WAX chains, which will work in an introductory way.

The bulk of this project work will be coding the viewer itself and creating how-to documentation for incorporating this application in new projects. I hope it becomes a valuable starter pack to enable artists and collections to display their WAX NFTs in new and exciting ways.

Out-of-the-Box User Features

  • Generate social share links for your WAX wallet!
  • Ability to group wallets into a unique link showing XTZ, WAX, ETH, and Polygon collectibles in one sorted list.
  • NFTs are sorted by collection and lazy loaded for fast viewing.
  • Similar NFTs are stacked, but mint numbers are preserved on the detail view.
  • Styled for a mobile-first experience and the hosted demo will utilize an image resizer.
  • Built using React (the industry standard for reactive frontend) means mobile phone view is considered the primary view

Highlighted Technical Features

  • “Host-lane-queue” to respect marketplace and API rate limits while providing free, distributed, and anonymous access for end users to public APIs.
  • Lazy loading based on item visibility to minimize bandwidth use
  • Optional image-resizer gateway hooks to prevent image-based scripting attacks (requires Filebase account.)
  • Launcher website to link to the IPFS path representing the latest version of the application along with patch notes hosted on the GitHub static site platform.
  • Content-ID-based security on all IPFS script files to ensure all files are not tampered with for any given version of the wallet viewer.
  • Full support for bootstrap themes to enable users to view the wallet in light mode, dark mode, or anything in between.
  • Localstorage based preferences for data persistence that is private and in-browser.
  • Works as a self-hosted ipfs static site with no need for servers beyond the public APIs referenced in the config file.
  • Custom domains should work via an additional off-chain launcher page that loads the IPFS code. This is necessary for any upgrades to the software version.

Phase 1 Deliverable – Public Alpha

  • Public alpha of client app deployed on Cloudflare Pages as a static site using react routing.
  • Includes all user features listed. Only atomicassets based NFTs on WAX will be fully supported but other chains will be included with limited features.
  • Users can enter one or more wallet addresses using a simple form interface to generate their social links. If users already have their social link, the URL will load their wallets.
  • Wallets from multiple chains or multiple wax wallets can all be combined into one profile page.
  • Users can store local preferences, which will persist in their browser via localstorage and cookies.
  • Minimal styling on NFT metadata, but a tested and responsive website will be available in the alpha.

Est. Cost: $XYZ for coding effort, tools licensing, testing, and a CI deployment pipeline (dev, staging, live servers.)

Phase 2 Deliverable – Public Beta

  • Dedicated gateway code will be added to utilize Filebase’s image resizer and video gateway to IPFS resources. This can be activated if a user has a gateway and will serve as the model for implementing other IPFS gateways. All images should be resized and sanitized to offer additional security to users if possible.
  • Test site will be deployed to IPFS for added security.
  • The WAX NFT datatype detection for books, comics, music, poems, and videos will be added and some basic customized viewers will be provided.
  • All viewer-related code will be made open source, and the viewer application will be provided via a GitHub public repo. Some documentation will be provided.
  • Pull requests will be available via invite-only.

Est. Cost: $XYZ for additional coding and testing

Phase 3 Deliverable – Release To Public

  • Tutorials for customizing app config and deploying to IPFS will be written.
  • A readme documenting how to access all the user features will be finalized.
  • Rules for public pull requests and contributors will be established.
  • JavaScript tests will be written to test the build
  • The principal developer will maintain the library for at least 1 year from release (but hopefully longer if the code is widely used.)

Est. Cost: $XYZ for ongoing development and maintenance


WAX is my home chain, and I am the most familiar with it. I have coded 10k projects here, such as vBots and YoshiBear. I run a community website called WAXWORKS with over 100 artists and collectors who have given me feedback on what a wallet viewer needs to provide. As we enter this build phase of crypto winter, having WAX Labs invest in a community project that brings us closer to the multichain digital collectible future can only help. Plus, collectors could showcase all their Blockchain Brawlers in one spot!

A core benefit to WAX in providing multichain libraries could be increased exposure to developers from other chains. Since this is a static web app it should be embeddable in games or apps that support webview components (like Unity.)

If a library like this existed, I would already be using it. I have big plans for crypto but it all depends on being able to visualize the data in a mobile-friendly way. I hope to be able to use this project to springboard into developing even more multichain apps.

My efforts to fund free services on this chain with donations or subscriptions have not been successful. I feel a grant would enable me to spend the time needed to develop this tool as a sponsored open-source project.

Thank you for your consideration.