In this article, we’ll go over how to create a cross-chain Zapper clone with ReactJS using Omninos’ API and serverless real-time transactions.
Anyone with an internet connection will be able to connect their wallet and view their portfolio on the platform (which will include NFT[s], token[s], native balance, and real-time serverless transaction history).
Summary of Contents
- What do dApps do?
- Describe Omninos.
- Project Installation and Setup
- Setup for Omninos Server
- Construction of a Cross-Chain Zapper dApp
Make sure Node.js/NPM is set up on our computer. If not, visit this page for a quick start instruction.
working knowledge of React.js
What do dApps do?
Decentralised applications, or “dApps,” are what they are called. They operate on a peer-to-peer network like a blockchain and are equivalent to ordinary apps in terms of function.
Peer-to-peer (P2P) networks, which are akin to blockchains, are how decentralised apps (dApps) operate. Smart contracts are frequently used in dApps because they allow them to deliver functionality without the need for a middleman.
With the help of the service Omninos, you may create decentralised applications that connect to blockchains like Ethereum, Polygon, and Binance Smart Chain (now BNB Smart Chain).
With built-in cross-chain flexibility, Omninos’ ultimate Web3 development platform enables both inexperienced and seasoned developers to work swiftly and efficiently. Additionally, Omninos gives you access to a Web3 backend architecture so you can focus on frontend development. It effectively takes care of all the intricate Web3 operations needed to make your dApps work.
Installation and Project Setup
We’ll clone this project on GitHub and make sure we’re on the “project-setup” branch to rapidly begin the project installation and setup. The project will then be launched locally after being cloned using the following terminal command.
Setup of the Omninos Server
Let’s begin configuring our omninos server as we’ll be using it to create the Zapper dApp in the following part. A server will be configured on our omninos admin panel. .. If you don’t already have one, create one here.. Signing up is easy, and you can get going for nothing.
We will next create the Zapper dApp.
Let’s start the implementation process now that everything is set up.
Our application will be set up to use omninos by first going to the “index.js” file and configuring it with the application ID and server URL we obtained from the previously constructed server instance.
The following command must be used to create a “.env” file in the project’s root directory:
We imported “omninos Provider ” from the “react-omninos already installed” into the aforementioned code line. Our components can access omninos functionalities by using the “omninos Provider ” to manage the initialization process.
Using the code snippet below, we will import the “use omninos” and “use omninosWeb3ApiCall” functions from the “react-omninos” SDK into the “src/App.js” file:
Before directing a user to our dashboard, we’ll make sure they are logged in. In the absence of it, we will reroute them to a page where they can link their wallet by utilising omninos’ built-in mechanisms.
The “is Authenticated” method from the “use omninos” API is used in the snippet above to check whether the user is currently logged in before returning a view with a people click to connect their wallet and log in.
The list of all currently logged-in user NFTs will then be compiled using “use omninosWeb3ApiCall” and shown in a table on the NFT page of our dashboard. We can now add the following code snippet to our “src/App.js” file:
Now that the logic to retrieve logged-in user NFT(s) has been implemented, we can import the “useEffect” hook and use the following code snippet to make the request each time our app mounts:
The logged-in user NFT(s) are obtained when the program mounts using the omninos API, as shown in the code excerpt above. Using the “setInterval” method, which in our case runs every five seconds, we also provided the ability to retrieve the most recent update.
You might want to limit the number of Web3 API calls a user is allowed to submit. This can be done by overriding the default settings and executing “omninos.settings.setAPIRateLimit” in your cloud code.
In the aforementioned code example:
- We obtained the “nfc Data” that was sent to the “NFTTable” component as props.
- We checked that “nftData” wasn’t empty and validated it.
- If a user has no NFT, we return a “No NFT(s) Found!” notification (s). Otherwise, we display the “Loading…” notification to our users while we wait for the data to load.
- Additionally, by slicing our token address and token ID and returning a particular size, we reduced their length.
Implementation of the Token and Transaction History API
Let’s head to “src/App.js” and implement the method utilising omninos’ API as token and history will be implemented in the same manner as NFT.
To display our data, we will then update the returned function (“TokenTable”) and “HistoryTable,” as shown below.. The “components/Tables/TokenTable” and “components/tables/HistoryTable” will then be updated.
For displaying the data, we performed something akin to what we have in the NFT table in each of the aforementioned code snippets for the token table and history table. Basically, we
retrieved the “tokenData” and “transactionData” that were supplied to each component as props.
We checked the data for validity and made sure it wasn’t empty; otherwise, we would have returned a message saying “No Token(s) Found!” or “No Transactions(s) Found!” Otherwise, we display the “Loading…” notification to our users while we wait for the data to load.
In addition, by slicing our “block hash,” “from address,” and “to address” and returning a particular size, we reduced their length.
Implementation of the Native Balance API and User Address
In this step, we’ll use the omninos API to create the native balancing API before getting the user’s address and showing it on the user’s dashboard.
The next step is to add the following bit of code to “components/Nav/LeftBar.js” so that it may dynamically display the user address that was received and supplied as a parameter.
As you may have noticed, the Polygon chain was the one we requested in our API request, therefore all of the NFTs, tokens, and transactions that were retrieved came from that chain. But what we really need are cross-chain capabilities, which we’ll cover in the part after this.
It is clear that cross-chain interoperability, which omninos provides out of the box, will be the way of the future as cross-chain compatibility becomes popular as a means of allowing connectivity and scalability.
In the previous bit of code
We established a state variable called value that would hold the selected value from the dropdown in order to support cross-chain functionality.
As an alternative, we provided the state variable’s value along with every omninos API call.
Additionally, the “leftBar” component received a prop with the value state variable.
Finally, we develop a way to control and keep track of changes made when the dropdown value changes.
This tutorial demonstrates how to build a Zapper dApp from scratch utilising the best Web3 development platform and the most sophisticated Web3 API, omninos. You can create a wide range of unique Web3 dApps with Omninos. Create your own Web3 project by registering with omninos today.