Skip to content

timothyshen/eth-stacks

 
 

Repository files navigation


ETHStacks.xyz

Stack your bags with token bound accounts

Short Description

ETHStacks.xyz is an account management interface for token bound accounts (TBAs). Stack your assets in token bound accounts and manage them all through a simple interface.

About the project

ETHStacks.xyz is an account management interface for token bound accounts (TBAs). By leveraging the properties of ERC-6551 tokens, ETHStacks allows you to create token bound accounts and manage them all through a simple interface.

Why ETHStacks.xyz?

  • Manage multiple token bound accounts through a simple interface
  • Stack assets within token bound accounts
  • Interact with dApps and dynamic NFTs as your token bound accounts
  • Take advantage of the security, privacy and capabilities of smart contract wallets

Our goal was to explore use cases leveraging the parent-child relationship of ERC-6551 tokens, improve the existing wallet management user experience and build a future-facing solution for managing assets and inventory of token bound accounts.

(back to top)

How it works

ETHStacks.xyz used an NFT Contract factory to deploy and NFT contract for each user. Each NFT token minted represents a Stack, a ERC-6551 token-bound account that can hold ERC20 and ERC721 tokens, and execute functions on other contracts.

When s Stacks NFT contract is deployed, it also mints the master NFT stack, and deploys an ERC-6551 Account for the master or "root" Stack. All subsequent NFTs minted are "children" NFTs that are owned by this master tokenbound account. Each NFT has it own tokenbound account that hold assets, though it may not be deployed until the user wants to withraw any of the assets. Due to the couterfactual deterministic addresses, asssets can be sent to these addresses prior to deployment, and the user can be confident that only the only of the Stack NFT will ever be able to access them.

While the potential is limitless, example included in this submission include:

  • transferring assets between Stacks
  • supplying assets to both Compound and Aave to earn yield (ie. "Savings Stacks")
  • borrowing assets from Aave (ie. "Loan Stacks")
  • using a Stack to send your spam assets
  • creating a Stack for high value assets and then sending the Stack to your cold wallet
  • adding a joint account holder who has equal access to the Stack's assets
  • adding a trusted social recovery address that can access the asset if you lose your private key
  • creating a Stack as a stealth address that you want to receive payment, without immediately being linked your main address
  • creating Stacks to act as NFT galleries
  • recycle your private keys periodically by sending your master Stack to a new wallet address -- only 1 transaction required!

Contracts were deployed using Hardhat via Scaffold.eth, interfacing with already-deployed registry and account implementation contracts for ERC-6551 tokenbound accounts.

The front-end is powered by React, Wagmi, Tailwind, Prisma, Sign-in with Ethereum, ConnectKit and Viem.

User assets are pulled using Airstack endpoints.

Unit tests were written using hardhat and ethers.js.

All of the above was powered by caffeine.

(back to top)

How it was made

Tech Stack

Are you using any Ethereum developer tools for your project? Wagmi, Viem, ConnectKit, Sign In With Ethereum

Which blockchain networks will your project interact with? Polygon, Goerli

Which programming languages are you using in your project? Typescript and Solidity

Are you using any web frameworks for your project? Next.js

Are you using any databases for your project? Railway

Are you using any design tools for your project? Figma

Are there any other specific technologies, libraries, frameworks, or tools you're making heavy usage of don't fit into the categories above?

Prize Selection

(back to top)

Contributors:

Credits:

(back to top)

About

ETH Waterloo 2023 Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 94.3%
  • JavaScript 5.3%
  • Other 0.4%