There are currently a lot of different smart contracts out there and each and everyone has their own icon. Take the ERC20 as an example - there are different wallets. Are they able to show all the ERC20 smart contracts and their icons/logos? From what we have seen, it is a tedious process. Therefore we decided to build a registry, where an owner of a smart contract is able to register an icon for a smart contract. This is how it works: You go on our site and enter all the necessary information, like the address of your smart contract, name, type, and your icon. After that, it is going to be uploaded to IPFS and pinned by Pinata. Your icon has been uploaded, the IPFS hash with name and address are registered in our smart contract registry. Once registered is every software able, like a wallet, to curl all data and load the icons from IPFS and display those to the users :)
How It's Made
We build our frontend using VueJs & Vuetify. The frontend has a connection to the Görli testnet via Infura and a connection to IPFS via Pinata. It is also able to interact with MetaMask. Our Registry is written in Solidity and deployed using truffle obviously in the Görli network. A registry entry contains three information parts. The name of the contract, the type and the IPFS hash. All concatenated to a single string, to make the logic in the contract as simple as possible. This information blob is mapped to the contract address. We also store a list of all contracts. When you upload an image to the website, we first have to convert it to a blob, because otherwise we can't store it using Pinata. This blob then gets uploaded to the Pinata pinning service, which returns the hash. This hash then gets stored in the registry as described earlier. Upon storage, the registry checks using the OpenZepplin Ownable Interface if the sender of the tx is the current owner of the Smart Contract. The site gets deployed via the Fleek Github pipeline. And we manually add the Unstoppable Domain for the current version.