All projects
Graphiti demo orbiting a three-dimensional Ethereum transaction graph

Making transaction history spatial

Graphiti started after I completed a BuidlGuidl batch and wanted a project that would push me further into Solidity and the EVM. The original idea was to make the dense transaction history behind an Ethereum address more intuitive and tangible by turning it into an explorable 3D orbital map.

I began with Scaffold-ETH 2 and implemented the wallet, contract, and IPFS workflow. What started as an exercise in data visualization quickly became just as much a React and Three.js project. Building the scene meant learning how to organize a 3D graph, keep several kinds of application state in sync, and prevent a busy wallet from turning the experience into an unresponsive cloud of nodes.

Exploring an address

Enter an Ethereum address and Graphiti retrieves its transaction history through the Alchemy API. Each connected address becomes a node and each transfer becomes a link, turning activity that normally appears as dense, hard-to-read rows in a block explorer into a visual network that can be explored.

The visualization can be rearranged between shell, force-directed, and Fibonacci layouts, with additional particle and display effects. Selecting a node reveals its details, and following one of those nodes generates a new graph around the connected address. The result is less about presenting a single fixed diagram and more about giving people a way to move through the relationships behind an address.

Some wallets have thousands of transactions, so fetching and drawing everything at once was not practical. I added batched data retrieval, limited concurrent requests, lazy loading, and more deliberate React updates to keep the graph usable as the amount of data grows.

Preserving the view

If the connected wallet owns the address being viewed, the graph can be minted as an NFT. The metadata stored through IPFS preserves the chosen layout, visual effects, and camera position so the token represents the particular view the user composed rather than only the underlying address.

That workflow brought the different parts of the project together: wagmi keeps the wallet and selected network aligned, the application prepares the graph metadata, and the contract verifies an ECDSA signature from an authorized server-side key before minting. A per-user nonce prevents the same authorization from being reused. Graphiti supports viewing activity across several EVM networks, while minting is limited to the networks where the contract has been deployed.

My takeaways

Graphiti became an exercise in 3D rendering, graph layout, data visualization, and the pipeline needed to turn a large transaction history into a responsive scene. Managing API requests, wallet state, network changes, metadata generation, and contract calls gave me practical experience coordinating several asynchronous systems without losing the user along the way.

The minting flow also taught me how to use ECDSA signatures across the wallet, server, and contract. The wallet proves ownership of the address, while a server-side ECDSA signature lets the public mint function accept only metadata prepared and authorized by the application.