So as the name suggests, this question is targeted more toward DApp development than stake pools.
TLDR: What is some best practice for DApps who want to run their own nodes to interact with blockchain via tools such as NodeJS or Python with the idea of getting running as quick as possible?
Explanation
There are a lot of DApp developers on Cardano who probably need to spool up their own Cardano nodes. I know there are HTTP based solutions popping up that abstract all of the Cardano node operations away to an API endpoint that you simply query via a local package (e.g. https://mesh.martify.io/) . However, as most experienced devs know, this introduces a very localized point of failure. It works well for smaller-scale projects, but what about larger projects that want to engineer something?
Suppose we standardize and say that most dapps want to run some of the following tasks at a minimum:
- Transaction creation
- Transaction submission
- NFT generation
- Misc Queries related to user wallets.
Suppose then that most devs will use NodeJS or Python (or similar tooling) to build out DApps, are working with constrained engineering resources, and don’t have months to figure out complex workarounds or manual serialization. What is the best way to interact with the blockchain if they choose to provision and run their own infrastructure?
My Thoughts
It took me a day to get a cardano-node with cli synced and running on an EC2 instance using csnapshots.io
to download the db. This gave me a virtual environment I could deploy nodeJS code to and build a back-end API using tools such as cardnaocli-js
. However, this also meant that I needed to create an internal NodeJS API to interact with my cardano-node.
This works well in most cases; however, scaling this will be a pain. What happens when I need to start looking at load balancing across multiple nodes?
This also is a little iffy to get running because the cardanocli-js
doesn’t work with the docker image for the node. So if I want to simplify the node deployment by running docker, I would then need to recode large portions of what has already been done with cli-js
. Surely there are better ways?