Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Glow - A Versatile Flow Development DSL in Golang #192

Closed
1 of 3 tasks
robbie-wasabi opened this issue Aug 7, 2023 · 21 comments
Closed
1 of 3 tasks

Glow - A Versatile Flow Development DSL in Golang #192

robbie-wasabi opened this issue Aug 7, 2023 · 21 comments
Assignees

Comments

@robbie-wasabi
Copy link

robbie-wasabi commented Aug 7, 2023

Glow

Grant category

Please select one or more of:

  • Open source maintenance
  • Developer tools / services
  • Educational material

Description

Flow development in Golang! A versatile DSL to test your contracts/txns/scripts on Mainnet, Testnet or the embedded emulator.

Problem statement

Bjartek's Overflow (https://github.com/bjartek/overflow) makes building, testing, and deploying smart contracts less intimidating and relatively straightforward; however, its opinionated structure and functional restrictiveness are constraining for developers who are working with multi-project repositories or need high levels of configurability. The Flow Go SDK (https://github.com/onflow/flow-go-sdk) provides more versatility but is quite verbose for developers who are trying to simply develop and test smart contracts. I believe that a third golang alternative, one that supports multiple project scopes and ease of use functions like creating disposable user accounts for testing on Testnet/Mainnet would not only be a welcomed addition to the ecosystem but a necessary one.

Proposed solution

An open source DSL for developing, testing, and deploying smart contracts called: Glow (https://github.com/rrossilli/glow). Please give the repo a quick run-through!

For almost 2 years now I've helped NFT Genius develop, test, and deploy NFT projects to their curated marketplace, Gaia (https://ongaia.com/). During this time, I was also building a passion project in my free time, Glow. This library has helped us build and deploy numerous projects to the Mainnet. With each project, I was able to gain new perspective and hone the library to fit a Cadence developer's needs.

Milestones and funding

Milestone Deliverables Timeline USD Proposal
1 - Update It has been about 9 months since Glow received much love - and we know a lot has changed. We'll start by getting antiquated with the most recent changes/standards and updating all of the libraries. Since we don't know what we don't know, it is difficult to estimate how long this will take. We'll make sure to update the flow team provided that this takes less time than anticipated. In such a case we can either decrease the budgeted amount or allocate the extra time elsewhere. ~2 weeks ~$4,000
2 - Code Refactoring We've proven that Glow is lightweight and versatile but it can be better. We'll spend some quality time in the bowels of the codebase to make sure everything is neat and tidy so that the code is readable and inspires contribution. We'll also add some commonly used helper functions that provide useful shorthand for developers, implement a reliable way of specifying a configuration (similar to a hardhat.config.json), and build out a "wrapped client" that allows for method chaining - something highly requested by other flow developers. Furthermore, we'll build build out 100% test coverage of Glow features and implementation examples so that we can maintain confidence in the codebase after each update. 3 Weeks $6,000
3 - Documentation/Tutorials A good library is nothing without clear and thorough documentation. We will spend a good chunk of time writing thorough docs with plenty of examples. 1 week $2,000
4 - Social Media Promotion Sharing more information via social media posts: tutorials, medium articles, flow forum, etc... to bring more attention to Glow 1 week $1,000

Team

Name Role Relevant Background Contact
Robert Rossilli Lead Developer Cadence developer for NFT Genius, wrote contracts for NFL All Day and numerous NFT projects for Gaia. (https://ongaia.com/https://nflallday.com) [email protected]

Final Thoughts

Glow was my passion project for months but I had to stop working on it when I was pulled in a different direction. I want to maintain it but am left with little time to do so these days. Any financial support would allow me to continue development and maintenance of the codebase. I want nothing more than to get Glow in the hands of some salacious Flowsters like myself and inspire further development through open source collaboration!

@franklywatson
Copy link
Contributor

franklywatson commented Aug 22, 2023

HI @rrossilli - we took a look at the proposal and we think it looks good. We would like to suggest that you add another milestone (4) where you spend time promoting and sharing this on social media, through blog articles etc so that we can make sure there's a focus and attention being brought to this. Could you update this with the suggested change?

@robbie-wasabi
Copy link
Author

robbie-wasabi commented Aug 23, 2023

That's a great idea! Let me know if there are any other changes you'd like me to make

@robbie-wasabi
Copy link
Author

@franklywatson any update on this?

@franklywatson
Copy link
Contributor

Hi @rrossilli we'll be sending out a grant letter for this later this week. Thanks

@robbie-wasabi
Copy link
Author

@franklywatson perfect, thanks!

@franklywatson
Copy link
Contributor

From discussing this a bit we would more specifically like understand the rough task breakdown for milestones 1 & 2. Would be most helpful to see them articulated as issues in the Glow repo. Is that something you can provide?

@robbie-wasabi
Copy link
Author

robbie-wasabi commented Sep 7, 2023

@franklywatson knocking those out now, please take a look here:
https://github.com/users/rrossilli/projects/1

@robbie-wasabi
Copy link
Author

@franklywatson I also updated the first 2 milestones to be a bit more descriptive

@robbie-wasabi
Copy link
Author

@franklywatson milestone 1 is complete.

merged PR:
robbie-wasabi/glow@fb1e5a4

issue #15, #20:
https://github.com/users/rrossilli/projects/1

@franklywatson
Copy link
Contributor

franklywatson commented Sep 21, 2023

Thanks, have reviewed and marked the milestone as accepted

@robbie-wasabi
Copy link
Author

@franklywatson just checking in, any idea when I'll be contacted about this?

@franklywatson
Copy link
Contributor

@rrossilli are you asking when the milestone will be paid? It will be this Friday

@robbie-wasabi
Copy link
Author

@franklywatson great! appreciate the update

@bjartek
Copy link

bjartek commented Oct 28, 2023

Can you elaborate on this please?

its opinionated structure and functional restrictiveness are constraining for developers who are working with multi-project repositories or need high levels of configurability.

@robbie-wasabi
Copy link
Author

robbie-wasabi commented Oct 29, 2023

Can you elaborate on this please?

its opinionated structure and functional restrictiveness are constraining for developers who are working with multi-project repositories or need high levels of configurability.

Howdy sir! Nice to meet ya - big fan. So it looks like I may have been mistaken here, that assertion was most likely based upon my experience with your library when I used it last (quite a while ago). I'm assuming that the ScriptBasePath/TransactionBasePath constructor args - among other notable changes - would allow overflow developers to organize multiple project scopes into a single monorepo. Is that assumption correct?

Edit: For example, if I had a monorepo with several "projects" (a set of contracts, transactions and scripts for a particular initiative) and those projects had defined golang functions that referenced cadence scripts/txns. I would be able to call those functions from elsewhere - other than the project in which the function was defined - correct?

@bjartek
Copy link

bjartek commented Nov 2, 2023

Hey, thank you for your kind words.

I think you should be able to do what you are asking but I am not sure. You could always make multiple overflow clients with different base paths for the different parts of your mono repo. It is also totally possible to override the base path for a single interaction (script/transaction)i belive, if not that builder option is really easy to add.

@bjartek
Copy link

bjartek commented Nov 2, 2023

You could also use go:emed and just embed all your scripts/transactions/flow.json from the library and use it in the other places. See here for a naive example

client: https://github.com/bjartek/embed-test-client/blob/main/main.go
server: https://github.com/bjartek/embed-test/blob/main/foo/main.go

@Aliserag
Copy link
Collaborator

Aliserag commented Dec 6, 2024

@robbie-wasabi just following up on the status of the remaining deliverables, noticed it's been over a year but haven't seen any updates on this thread.

@robbie-wasabi
Copy link
Author

@robbie-wasabi just following up on the status of the remaining deliverables, noticed it's been over a year but haven't seen any updates on this thread.

Hey there, thanks for the reply. Being honest, a lot of what I spoke about in my initial milestones was accomplishable a lot easier than I expected and I simply didn't feel comfortable collecting the remaining $9,000 to write some documentation and rewrite/bloat code that I believe is already quite simplified and elegant. I spent quite a bit of time adding more extensibility to the DSL but decided against committing it as I want to keep it lightweight and simple not only out of principle but to diversify my framework further from Bjartek's. Anyways, I should have been more communicative for certain and will do my best going forward.

@robbie-wasabi
Copy link
Author

As some sort of quantifiable update, I did push my wip changes that include some general cleanup and quite a bit of comments and documentation.

@Aliserag
Copy link
Collaborator

Aliserag commented Dec 6, 2024

Amazing and happy to hear @robbie-wasabi, I'll close this one down :)

@Aliserag Aliserag closed this as completed Dec 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants