SCF #12
Award Completed
useSoroban.app
by

Online Soroban playground with a fully emulated host environment and instant contract calls, designed for onboarding web devs.

Awarded
Awarded
Budget request:
$
82,000
*
WebsiteCode

Project Stage

Development

Category

Soroban
Tools

Based in

Team size

1

Active since

Products & Services

The product I'm building - useSoroban dot app - will provide an accessible environment for anyone with a web development background to experiment with Soroban.

With an in-browser host environment, users will be able to instantly see their contract call outcomes, see ledger changes, compose and execute complex transactions involving multiple accounts and contracts, among other things.

Smart contract platform onboarding is tricky, especially when you want to reach web developers - the biggest developer demographic. The time it takes for a curious web dev to interact with their first contract is a point of churn. Web devs are used to amazing, zero-setup tools that work in the browser, and by reducing the time-to-interaction to essentially zero - we keep them engaged. Moreover, once you click that button to "compile" a contract and you start interacting with it, you've created something - you have left your mark on the blockchain. This could provide extra incentive to stick around.

The product is composed of 4 services and packages.

  1. A compiler service that uses Rust and Cargo to configure and compile Soroban contracts into executables. I'm using Node to indirectly interface with Cargo, without interacting with the Soroban CLI.
  2. A custom WebAssembly disassembler/reassembler to inspect and optimize contract executables written in JavaScript. I also want to instrument contract executables to further enhance the playground experience.
  3. Web app that is the primary point of contact with useSoroban dot app, written in JavaScript + React. I'm leveraging the JavaScript interface for WebAssembly to simulate a host environment for contracts within the browser.
  4. A custom JavaScript SDK for Soroban. It's something I started building for sorobandev dot com and abstracted into it's own public package. This SDK is required to enable simplified contract based transactions using minimal syntax. The SDK will also be used when users export their playground projects to continue work locally.
No items found.
Previous Project(s)
No items found.
Progress so far
Goals
To get there, we request a budget of  
$
82,000
*
  to:
Additional information

Funding

My inspiration is CodeSandbox. They have a freemium model with $12/month for extra compute and storage + private sandboxes. I believe with the value attached to smart contracts, a premium tier for useSoroban.app should be considerably more valuable than $12/month. There's also the potential to include revenue sharing with contracts people build. There are also opportunities for connecting playground users with folks that are looking to hire Soroban devs. Lastly, cross-selling educational material as well as bootcamps would make sense for the audience.

Market

useSoroban will exist in the universe of smart contract development tools, among players like Truffle, Remix, Blocks, etc. I personally have spent a lot of time exploring the Flow Playground, which is a great start to what web developers expect - a zero setup, click-n-play type of environment. However, with a WebAssembly runtime, a focus on test-driven development, Soroban provides the perfect platform to build a smart contract playground tool that would be a head above everyone else.

Competition

I'm only familiar with RAEN that is based on some of the same principles, including leveraging a WebAssembly runtime, however it doesn't support in-browser contract calls because it doesn't have an in-browser host environment. RAEN contract calls require an account and signatures. I believe it's a major differentiator for web developers, to be able to just start playing with a smart contract platform, without having to worry about setting up private keys, signing transactions, etc.

Relationships

I'm a highly qualified developer with lots of experience building web and mobile apps. I can deliver amazing developer and user UX. However, I don't have enough Rust experience, not yet at least. For that reason, I've arranged a Rust expert, the top 47 Rust contributor with over 1000 individual contributions to the Rust language. He will consult me and the project in all Rust and WebAssembly matters. We went to school together, and I can vouch for how important his consulting will be to the success of useSoroban.app.

Marketing

I'm in love with teaching, and I believe by offering classes and bootcamps I will be able to market useSoroban.app, as well as Soroban, while generating revenue for the project. Web developers are used to constantly learning and are familiar with and appreciate such events.

I've organized a bootcamp and a month long hackathon before, and I know what separates good outcomes from bad. I've previously marketed these events with success on Reddit, Discord, Twitter, and in developer forums, as well as during in-person events.

Pitch deck
No items found.
Deliverables
First Deliverable

JavaScript implementation of Soroban RawVal to enable encoding and decoding values between the browser app/host environment and the Soroban contract WebAssembly executable.


Reviewer instructions

Every valid Rust and Soroban value can be used as a function argument, as well as the return value, with useSoroban compiling a contract with this function, where Any is a placeholder for all valid Rust and Soroban SDK types for a contract function.

pub fn test(env: Env, any: Any) -> Any

Along with compiling, this should render the return value in an accessible way.

--- Update, March 12th, 2023 ---

To check the completion of the first deliverable, please visit https://useSoroban.app and log in using these credentials.

Developer ID: 4e0955d2-1d96-4b91-a329-15b2b27cc81e

Access Token: qui2oxie7gooshook4niesh2EeShamoo

In the project explorer, you will find two projects. You can also follow the provided URL. After you open up each project, you will be able to interact with the "Actions" section by calling contract functions. Some functions provide only output (prefix ri_), while others provide input and output (prefix ro_).

  1. Project "SmallValue" https://usesoroban.app/41eea9c1-11c5-4eca-9ae3-5490041f998e
  2. Project "HostValue" https://usesoroban.app/9b4cbb24-01b9-4810-a11a-8f65328de004

Both projects cover all available Soroban RawVal types as can be confirmed in the official Rust SDK repository https://github.com/stellar/rs-soroban-env/blob/main/soroban-env-common/src/raw_val.rs#L45

I've also recorded and uploaded a live demonstration of everything described above to prove that it satisfies the first deliverable, the video can be found here https://www.youtube.com/watch?v=G_QZSNlgxyA

Links:
https://usesoroban.app/?accessToken=eichae9iepeeraiH5quie5ajie9liemu

Team

Morgan Wilde (MorganW#8983)

Founder / Software developer

My primary skill is full-stack development and I have over 10 years of experience. I've mentored close to 200 junior to senior developers. I've started and lead a team building user acquisition tools at a healthcare startup, those tools drove the first $1 million in revenue. My first Stellar account dates back to 2016, and I've been deeply engaged with Soroban since Sorobanathon. I have close to 2 years of blockchain experience, and have created and lead a weeklong decentralized developer bootcamp, I also have 9 months of experience as a core contributor for a blockchain developer tools startup.

With my technical and leadership background I believe I can lead and deliver a best-in-class web developer playground for Soroban.

Twitter / Github / GitLab / YouTube

Simonas

Rust / WebAssembly consultant

Simonas is number 47 (out of 7759) in the Rust language all-time contributor list with over 1000 contributions to Rust. He's one of the top experts in Rust and currently works as lead developer on a project dealing with WebAssembly. Even though I couldn't get Simonas on the team, he has committed a good chunk of his time to help with all matters related to Rust and WebAssembly.

Rust all-time contributors