AkashJS - Akash JavaScript Library

Developer Award Application

Proposal: AkashJS - Akash JavaScript Library

Contact:

1. First & Last Name: (optional)
SpacePotato :slight_smile:

2. Email Address:
spacepotahto@gmail.com

3. Akash Wallet Address:
akash12maevnhvagm97wwdxwsxtpnevst94hyp9fvdgz

4. Akashian URI:
TBA

5. Time Zone:
EST

6. Language:
JavaScript/TypeScript and Python mostly. Oh and English.

Social Networks

7. Discord Username:
wabam#3288

8. Discourse Username:
SpacePotato

9. Github:
spacepotahto

10. Twitter:
N/A

11. LinkedIn:
Private

12. Website:
TBA

13. Blog:
TBA

Experience:

14. Are you a developer or software engineer?
Software Engineer

15. Are you currently involved in Akash’s Discord developer community channel? (discord.akash.network)
Yes, been there since Akash testnet 2 before mainnet 2.

16. Have you deployed on Akash’s Mainnet or Testnet? (docs.akash.network)
Yes, on both.

17. Do you have other team members?
No

18. Are you looking for additional team members?
No

19. Are you interested in working on Akash full-time? Akash is hiring engineers and contractors. Learn more here: Careers | Akash Network
Yes! But it’s not quite the right time for me to leave my current position yet.

20. What Cloud hosting services do you currently use? (Amazon/Google/Microsoft)
A bit of AWS, GCP, DigitalOcean.

21. How much do you pay per month for Cloud services / hosting?
~$1000

22. How did you hear about this program?
I’ve been keeping up with basically all the Akash channels since testnet 2, and I saw the first proposal of this on forum.akash.network.

Product Vision:

23. What is your project?
To bring AkashJS to maturity. My vision of AkashJS is a JavaScript library (with full TypeScript support) that provides all the equivalent Akash command-line functionality necessary to deploy apps, query providers, transact AKT, and query the blockchain.

I wrote an MVP version of AkashJS during the Gitcoin Akash Deploy UI Hackathon in order to build the first self-contained Akash Deploy Website. One can just visit the website with some AKT in their Keplr wallet, and be able to click a few buttons to deploy (think Uniswap). Coincidentally and in parallel, the Akash team started an akashjs library. However, it’s comparatively limited in functionality at the moment, and the team have stated that they’ve placed akashjs on hold to focus on other things.

I spent nearly the entire month of the hackathon building AkashJS, and only had three days to spare to build the front-end. Nevertheless, there is still a lot of work that needs to be done on AkashJS to make it production ready (outlined in later sections). I hope to get funded to make this happen.

24. What is the problem you will solve?
My main motivation for writing AkashJS was to enable deploy websites to be built. While Akash officially requires the use of the command-line, a deploy UI can lessen the learning curve and reduce friction. In my opinion, the ideal UI should be in the form of a website with Keplr wallet integration. There should be no setup or installation. One should just be able to visit the website with some AKT in their Keplr wallet, and click a couple of buttons to deploy. But building something like that is not possible unless something like AkashJS exists.

AkashJS would also enable Akash functionality anywhere that runs JavaScript, not just in browsers, so I believe its existence will enable new classes of projects that can be built.

25. What are your goals?
At a high level, my goals for AkashJS are to:

  • Design and expose an easy-to-use API.
  • Reach feature parity with the Akash CLI commands necessary to deploy apps, query providers and deployments, transact AKT, and query the blockchain.
  • Provide easy to understand documentation.
  • If permitted, merge my work with the “official” akashjs repo started by the Akash team: GitHub - ovrclk/akashjs: JavaScript Library to interact with Akash Network

Functional and simple is what I’m going for. I want developers to build with it.

26. What impact will this project have on the Akash developer community?
I envision AkashJS will be an enabling tool for the Akash developer community. In general, AkashJS enables Akash functionality anywhere that runs JavaScript (which is basically everywhere nowadays), so not only would it enable building websites involving Akash with Keplr integration, e.g. deployment front-ends, monitoring dashboards, some sort of online Akash merch store, etc., it would also enable building e.g. Akash related browser extensions, mobile apps, VScode extensions, Electron Desktop apps, GitHub actions, some Node.js app intended to run on old armhf Raspberry Pi models (which the official Akash CLI does not support currently), etc.

27. Who will use your project when it’s complete?
Any developer who knows JavaScript/TypeScript will be able to use AkashJS to build the next big thing.

28. Will you monetize your project?
No

29. Will you open source your project?
Yes

Product Leadership / Drive:

30. Tell us about yourself, your passion, your values
I’m a software engineer with 6 years of industry experience, primarily passionate about web development and machine learning.

31. What’s your aspiration for blockchain technology?
I see blockchain technology as an enabling technology with some very useful properties. These properties, e.g. immutability and auditability via distributed consensus, can be utilized and built on top of in creative ways to produce decentralized solutions to many of the same problems that centralized solutions are employed to solve today. Right now, I feel too many projects are jumping on the blockchain bandwagon just for the sake of it rather than to solve a real problem or to occupy a needed niche. But amid the noise, I’m optimistic about the gems that’ll emerge down the road. If used well in the right context, I really think projects that incorporate blockchain technology can bring a lot of value, Akash being one of them.

32. If you had $1 million in grant funding what would you do?
Oh boy. If the $1 million is in AKT, the sensible thing to do is to delay the project by 1 year and stake all of it. After 1 year, plus compounding, and because AKT will inevitably moon by then, I’ll sell just enough of the AKT to acquire AWS from Amazon and partner it with Akash.

In all seriousness, such funds would allow me to hire visual designers and a few other developers to build out the best possible versions of various project ideas I have involving Akash (future proposals planned :slight_smile:).

33. Who will benefit most from your project?
Developers (particularly web developers) will directly benefit first, as they can use AkashJS to build stuff that previously wasn’t possible, and consumers of these applications would also benefit. For example, developers can easily create a webpage using AkashJS with a giant button that says “DEPLOY PKT MINER”, and suddenly many people can just visit the website and click the button to deploy a PKT miner in less than 2 minutes and zero learning curve. Whatever cool stuff developers build using AkashJS will also eventually become good publicity for Akash.

34. How will you help grow the Akash community?
By building tools and apps, and writing Medium articles about them, to show that cool stuff can be built on Akash.

35. How will you make Akash approachable to developers?
Also by building tools and writing techincal guides to reduce the barrier of entry to using Akash. This AkashJS project for example, would enable generic deployment websites or deployment websites tailored to specific workflows to be built, among many other things, which I feel would greatly reduce the friction of using Akash, and perhaps makes deploying onto Akash a much more enjoyable experience.

36. How do you think Akash should improve?
The Akash tech is legit, but convincing developers to adopt is key. This means Akash (perhaps in partnership with other projects) needs to be as close to feature parity with traditional cloud as possible in the long term, so that there’s no obvious reason developers won’t choose the Akash stack over traditional cloud.

In the short term, I feel native SSL/port 443 support is badly needed. HTTPS is basically required nowadays, and is the main reason why I’m unable to use Akash for anything serious. Without port 443 exposure, developers can neither use Let’s Encrypt certificates nor Full Cloudflare SSL. Something as simple as being able to obtain the nonsensical provider URI but in HTTPS would be useful enough to attract more developers I feel. The next short term feature that I think would get people excited is GPU support (I’m personally very excited about cheap deep learning models training and hosting).

Product Execution:

37. How would you utilize the grant funding?
As touched upon in my AkashJS GitHub README: GitHub - spacepotahto/akashjs, the availability of CORS enabled RPC nodes, and an HTTPS enabled provider gateway proxy server is required for apps to consume AkashJS (see also the diagram in #47). While developers can host their own, it would be best if public ones are readily available for use. I would use the grant funding as follows:

  • Host one or more CORS enabled RPC nodes, probably on Akash. Or ask the team to enable CORS on some of the public ones they own.
  • Host one or more proxy servers. For best security, these need to be HTTPS enabled because sensitive certificate keys will be sent to them. My understanding is that this can’t be done with Akash. Even in combination with Cloudflare, only Flexible SSL is possible and not Full SSL. I’ll need to pay for traditional VPS and a domain to set something up myself, or pay for services like Heroku, which provides an HTTPS URI out of the box.
  • The rest I’m using to support myself as a developer and indefinite maintainer of the library.

38. Have you already started this work?
Yes, I wrote an MVP AkashJS library as a means to build a deploy website during the Gitcoin hackathon.

39. Do you have a GitHub or website for your project?
Yes, I will be building on top of the MVP AkashJS library I wrote: GitHub - spacepotahto/akashjs

40. How will this task be accomplished?
Lots of coding and writing :slight_smile: . See milestones below.

41. How would you break this work up into 3 or 4 phases / milestones?

Milestone 1: Redesign the API and figure out tooling
The current AkashJS API is a bit incoherent. It also only works when used as an npm module and in a browser setting. Work needs to be done to redesign the API, setup the right tooling, and refactor the code such that the final library can be used as an npm module or standalone bundle, and works in both the browser and in Node.js.

Milestone 2: Refactor existing code, add tests, host nodes and proxy server
After finalizing the API, the current code needs to be refactored to adhere to the API design. Tests also needs to be added, and the necessary nodes and proxy server need to be hosted (as described in #37).

Milestone 3: Implement feature gaps
Completion of Milestone 1 and 2 brings AkashJS close to a production ready state. At this point the following equivalent CLI functionalities would be supported:

  • All the akash query commands (minus pagination support)
  • The majority of the akash tx commands:
    akash tx bank send
    akash tx cert create
    akash tx cert revoke
    akash tx deployment close
    akash tx deployment create
    akash tx deployment deposit
    akash tx deployment group close
    akash tx deployment group pause
    akash tx deployment group start
    akash tx market lease create
  • akash provider sendManifest
  • akash provider leaseStatus

This milestone focuses on implementing feature gaps, notably the equivalent to:

  • akash provider service-logs
  • akash provider service-status
  • Pagination support to all the akash query commands
  • akash tx distribution
  • akash tx staking
  • Using wallet signer to encrypt the client-side certificate (similar to the approached used by the Akash Golang implementation)

Milestone 4: Publish the package, and write documentation and tutorials
This involves publishing the package to a registry, generating documentation (e.g. by using TypeDoc), writing a comprehensive GitHub README, and producing supplement tutorials, e.g. in the form of Medium articles and/or Docusaurus pages.

If it makes sense to do so, I will merge my work with the “official” akashjs repo started by the Akash team: GitHub - ovrclk/akashjs: JavaScript Library to interact with Akash Network after all milestones completion.

42. How many months of work will this project require?
1 to 2 months (assuming 1 to 2 weeks per milestone). I plan to continue to maintain and improve the library thereafter as long as people use it.

43. What’s the expected amount of funding required for your project?
$10,000, to pay for indefinite hosting and self support (see #37).

Product Progress:

44. Will you open source your project?
Yes

45. How do you plan to share your work with the community once complete?
I’ll write a Medium article giving an overview of AkashJS and a brief tutorial on how to use it, and share it together with the GitHub link on the Discord channel (e.g. the Akash javascript channel) and this forum. I’ll also consult the Akash team to see if they’re interested in putting together an Akash blog about it.

46. Will you report your progress to the community every month?
Yes, I’ll report my progress on this forum.

47. Do you have any screenshots, videos, or other context you can share?
The MVP AkashJS library I wrote is here: GitHub - spacepotahto/akashjs.
There’s some information in the GitHub README, but here’s a simplified graphic to give you a better idea of the approach (red boxes are part of AkashJS):

The Akash Deploy Website I built using my MVP AkashJS library is described here: Akash Deploy UI Challenge (SpacePotato) - #3 by SpacePotato
Video demo here:
Akash Deploy Website (SpacePotato) - YouTube

As you can see from the video, the deploy website allows complete deployment, from certificate creation to obtaining deployment details, all in 1.5 minutes and 3 mouse clicks. This is an example of what AkashJS enables!

Developer Associations:

48. Are you associated with any accelerators, incubators, venture capital firms, or startup funds?
No

49. Are you associated with any startup communities?
No

50. Are you associated with the Cloud Native Computing Foundation (CNCF)?
No

51. Are you associated with any open source projects?
No

52. Are you associated with any of the Akash Network core team members?
No

Legalese:

53. Are you a resident of, citizen, or located in a geographic area that is subject to UN, US, EU, Swiss or any other sovereign country sanctions or embargoes?
No

54. Are you over the age of 18?
Yes

3 Likes

We will fund this project with $1,000 and recommend that the CAB fund it for $10,000!

3 Likes