Programming Languages
Thank you, icme.
We use the following languages for our wallet:
- JavaScript: 90.5% (React JS)
- Motoko: 9.1%
- Other: 0.4%
Data Storage Requirements
For processing payment approvals, attaching documents is an option. Such attachments could include photos, scanned documents, voice messages, or simple PDF files. Groups also have a group chat feature, where attachments can be exchanged as well. A group might represent an average company with dozens of office workers conducting a dozen transactions every day. Assuming an average file size of 2MB, and allocating 50GB for their repository, storage should last for about five years. To ensure at least three years of storage even for groups with heavy file usage, we plan to reserve the full canister capacity of 200GB for each user group. Accordingly, it makes sense to grant either each user or each user group its own canister.
Computing Requirements
The application doesn’t perform any operations that are very demanding in terms of computing power since there is no video streaming or 3D rendering. However, we do need to maintain low latency to ensure a good user experience. For example, when setting up a transaction that requires approval, fetching the spending power and available balance should be fast. Similarly, simple tasks like updating a profile shouldn’t take too long. Although calling data from a ledger canister on a different, fiduciary subnet takes about six seconds, we can potentially preload some data in the front-end to minimize the perceived waiting time while awaiting final confirmation.
Parent-Child Canisters
Yes, we plan to use an Index/Factory setup, at least as I understand it. One canister will store the user-user group matrix along with access levels, and other canisters will serve as parents for users and user groups. We will look at OpenChat’s code for how they manage multiple levels of index canisters, as this indeed sounds like a very promising approach.
Inter-Canister Calls
Here is where things start to get tricky. The front-end needs to look up the index to find the ledger canister, which may take up to six seconds if the front-end, index, and ledger canisters are not on the same subnet. I admit I still don’t fully understand the relationship between canisters and subnets, but I will now further dive into this topic. I will also explore the options for asynchronous requests and consult people with more experience than myself.
Thank you again for the great support.