ERC-404 is a new token standard combining features of ERC-20 and ERC-721, allowing tokens to be both divisible and unique. It enables the creation of tokens with native liquidity and fractionalization opening new possibilities for asset representation and interoperability within the Ethereum ecosystem.
How ERC-404 Works:
Each ERC-404 token has a unique ID, just like ERC-721 tokens. But unlike ERC-721 tokens, ERC-404 tokens can be divided into smaller pieces, just like ERC-20 tokens, enabling a seamless exchange of both fungible and non-fungible assets within the same token contract.
Key Features
Fractional ownership: You can own part of an ERC-404 token instead of the whole thing. For example, you could own 0.5 of a token instead of 1 whole token.
Token Transfer: When you transfer a fractional amount of a token, like 0.5, a whole token gets subtracted from your account. This ensures that the total amount of tokens stays consistent. When a whole token gets subtracted from your account due to a fractional transfer, it goes into a special pool of available IDs. This pool ensures that there are always enough unique IDs available for new tokens, even if some are split into fractional amounts.
Pathing Mechanism: ERC-404 uses a technique called pathing to handle token transfers efficiently. Pathing allows token amount data and IDs to share space, which makes transfers smoother and reduces unnecessary complexity.
Integration with Existing Protocols: ERC-404 is designed to work well with existing token standards, like ERC-20 and ERC-721. It isolates different functionalities and uses pathing to make integration seamless and straightforward.
Usecase
ERC-404 can have a significant impact on DeFi and NFT ecosystems. In DeFi, integration with ERC 404 enhances liquidity pools, DEXs, and AMMs by fractionalizing unique assets enabling higher capital efficiency and broader accessibility to previously liquid assets. In the realm of NFTs, ERC404 opens up new possibilities to dynamic NFTs in gaming, digital art, and virtual worlds with customizable fungible and non-fungible traits.
Creating Your ERC404 Token: Step-by-Step Procedure.
Here is a simple implementation of the ERC-404 token contract providing basic functionality for minting ERC20 and ERC721 tokens, retrieving token URIs, and managing ERC721 transfer exemptions. Find the full working repository here.
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {ERC404} from "../ERC404.sol";
contract MinimalERC404 is ERC404 {
constructor(
string memory name_,
string memory symbol_,
uint8 decimals_,
address initialOwner_
) ERC404(name_, symbol_, decimals_) {}
function mintERC20(
address account_,
uint256 value_,
bool mintCorrespondingERC721s_
) external {
_mintERC20(account_, value_, mintCorrespondingERC721s_);
}
function tokenURI(uint256 id_) public pure override returns (string memory) {
return string.concat("https://example.com/token/", Strings.toString(id_));
}
function setERC721TransferExempt(address account_, bool value_) external {
_setERC721TransferExempt(account_, value_);
}
}
Scaffold-Eth 2 x Buildbear lets you create your own private Sandbox, forked for various EVM and EVM-compatible blockchain networks, with your own Token faucet and blockchain explorer. Let's get started:
- Clone the repository and install dependencies using the command:
git clone https://github.com/BuildBearLabs/ERC404.git
cd ERC404
yarn install
- create your private Sandbox, this command allows you to create a BuildBear SandBox details are stored in
packages/buildbear/sandbox.json
yarn fork-bb
- Deploy contract. This command deploys smart contracts to your BuildBear Sandbox.
yarn deploy
- Start the NextJs app. Visit your app on
http://localhost:3000
. You can interact with your smart contract using theDebug Contracts
page.
yarn start
You will get a similar screen as given below;
Interacting with the Contract
Go to the minterc20 function to mint some tokens by passing your account address, and amount of tokens to be minted, and type ‘true’ if you want to mint the corresponding erc721 token. After a successful transaction, you will get similar output as below;
Check the balance by calling the read function erc20BalanceOf by passing your address as an argument.
- The setERC721TransferExempt function provides a flexible mechanism for controlling ERC721 token transfer exemptions on a per-account basis.
Now this account will be exempt from ERC721 transfers. Check this by calling erc721TransferExempt, and passing the address to know the exemption status for that account.
Challenges
ERC-404 is an experimental standard, acknowledging the potential risks and uncertainties associated with its implementation. While extensive testing has been conducted to ensure accuracy, developers should approach ERC-404 with caution and conduct thorough testing before deploying it in production environments.
Conclusion
ERC-404 bridges the gap between ERC-20 and ERC-721 standards, offering native liquidity and fractionalization. It has the potential to drive innovation and reshape the DeFi and tokenization landscape on the Ethereum blockchain.
About BuilBear:
BuildBear is a platform tailored for DApp development and testing. Developers gain the freedom to construct a personalized Private Testnet sandbox across a variety of blockchain networks. The liberty to mint unlimited Native and ERC20 tokens, coupled with rapid transaction times on BuildBear (under 3 seconds!), enhances the DApp development lifecycle manifold. The platform comes equipped with tools designed for real-time testing and debugging, ensuring developers can keep tabs on intricate blockchain transactions with unparalleled ease.
Connect with us on Twitter | LinkedIn | Telegram | GitHub
Author: Sana and Chandan