Welcome to uBin!
uBin (formerly Asset App) is a platform that allows you to seamlessly launch your own file storage smart contracts on the Internet Computer using only a wallet and interact with them via an intuitive file explorer in the browser.
Now in Beta 2.0!
This app is currently deployed live on the Internet Computer. You can access it here. It is currently under whitelist access only to control user flow while testing is underway.
Features:
-
Self-paid and automated user controlled canister creation system.
-
Ability to name your own canisters and manage them anytime, anywhere.
-
Intuitive file manager in the browser to interact with your smart contract.
-
Currently supports deleting, renaming, moving, and sharing files.
-
Drag and drop file/folder support with a progress bar for uploading.
-
Mobile optimizations including canister creation with NFID.
-
Save/load support for user settings including icon/text settings and dedicated themes.
-
In-app bug reporting, feedback, and support ticketing system.
-
Automatic reporting system that detects errors and reports them to the development team.
-
In-app cycles top-up functionality.
How To Use:
-
Choose your wallet, once logged in you can choose to create a new canister on the mainnet or manage an existing one.
-
Once you create or choose your canister you will be forwarded to the in browser file explorer, this page will auto-load with the canister’s file list.
-
You can select a file by clicking on it, the file operations will appear below the upload section.
-
From there you can open, delete, share, move, or duplicate files. Beware of deletion as there is currently no warning or confirmation prompt (coming sooon).
-
On the left side of the manager is a file upload form capable of adding multiple files at once. Once you click upload a progress bar will appear and the files will begin uploading. The file list will auto-refresh once the upload is complete.
What’s under the hood?
Frontend:
The frontend to this application is built using react-tsx which is a TypeScript enabled version of JSX. Included in the frontend is an interoperable wallet list
that allows the user to use whichever auth provider they wish while keeping a level of simplicity with each integration.
The frontend consists of a pay-for-self canister creation feature that will allow users to choose the amount of ICP they would like to burn into cycles to gas up their canister smart contract upon creation and an intuitive UI inside the browser for managing their files including batch uploading, deleting, and renaming.
Backend:
The backend of this program was made using Azle from Demergent Labs. The primary backend canister consists of 4 main functions:
-
Canister Creation - Creates a new blank canister on the mainnet on behalf of the user.
-
Wasm Installation - Downloads a pre-built assets canister wasm from the latest dfx and installs it to the canister.
-
User Authorization - An azle raw call that authorizes the caller to their new assets canister so they can write to it.
-
Controller Release - A canister settings update call that makes the caller the only controller, effectively releasing full control of it to the user.
Disclaimer:
This application is in beta and is constantly being updated. It is subject to errors, inconsistent operation, and sudden changes hence the whitelist access. Due to this, I do not advise placing large amounts of cycles inside of canisters you create with this platform for now. The platform has a temporary hard cap of 3 ICP per creation/top-up anyway. The codebase is changing and growing almost everyday and will get progressively more clean as things move forward, but for now I hope everyone enjoys this. It has been under development for about a year and a half. If anyone would like to check it out via whitelist access please reach out to me via X. A full demo video showing all of the new features will be coming soon but until then you can check out the pinned post on my X.
Any feedback is welcomed and greatly appreciated, thank you for checking out my app! - Daniel McCoy (X: @RealDanMcCoy)