Hello! It is Josh again from the Flow Smart Contract Engineering team. If this is your first time reading one of my posts, please check out earlier ones in the series to get some insight into Cadence development! I’ll be posting more educational blog posts about Cadence soon, so give me a follow so you can stay tuned!
Some of What We Have Accomplished this Year
At the time of this post, it is Oct 2022, and it has been a super exciting year for the Flow community.
We shared the new Flow Developer Portal, which is a much more powerful way for developers to learn about Flow and Cadence:
Flow Blockchain
Your resource for everything you'll need to build in Flow
developers.flow.com
At the beginning of the year, the Flow developer community approved and enabled the Flow NFT metadata standard, a powerful way for NFT projects to expose their metadata in a generic and comprehensive way, allowing 3rd party smart contracts and apps to more easily integrate with any NFT project that implements the standard. An ecosystem team also built the NFT catalog to make this process even easier! It has been really cool to see how projects are using metadata to make the Flow ecosystem even more vibrant and it is humbling to see how far we’ve come since the beginning.
The Cadence community also enabled Secure Cadence! Secure Cadence is a milestone that the Cadence community was working on for a long time. It added some super useful new features, made some improvements to existing features, and even included a full formal security audit completed by Halborn and NCC, well-respected security firms in the space. As part of the milestone, the Flow community also agreed on and enabled permission-less deployment, an important feature on our path to full decentralization:
Road to Permissionless Deployment
Flow is on track to enable permissionless smart contract deployment this summer. Permissionless smart contract…
permissionless.onflow.org
The Flow community has achieved many more things this year and it would be impossible to go through all of them in one blog post, but I wanted to focus on my corner of the ecosystem here and my team.
My team is the smart contract engineering team. Our goal is to assist various teams in the Flow ecosystem in writing their smart contracts and generally work with the community to improve the state of smart contract development. We do that by designing and promoting safe and clear standards for smart contracts and providing feedback to projects and proposals around the ecosystem. We’ve had some exciting developments this year as well. We built and deployed the second version of NFT Storefront, a generic marketplace that anyone can use for their apps without having to deploy their own smart contract. It also supports the NFT royalties standard.
New Team Additions and Plans!
We’ve hired a few more developers to work full time on the team as well. In addition to me and Satyam, we hired Álvaro in May and Giovanni and Gustavo in August. They have been great additions to the team and have already made big contributions to the Flow ecosystem. You’ll probably see us around the smart contract-related Github issues and Discord, so feel free to say hi!
Our team had an in-person gathering in Vancouver recently, and we spent a lot of time talking about what we wanted our small team to prioritize for the next six months. We came up with a long list and that is what I want to share with you today! For the tasks where it is applicable, I will also share links to any Github issues or Flow Improvement Proposals (FLIPs) that contain more context and/or discussion.
The smart contract engineering team works with all the other developers in the ecosystem to agree on priorities to help improve the development experience and best practices for Flow and Cadence smart contracts. We are a part of the community with all the other developers, so all contributions and discussion are equally valid. These tasks are meant to represent a set of priorities that we and the community have decided to work on based on a lot of different variables. What our team works on does not represent the only work being completed on smart contract standards. Flow is an open source and decentralized project, and there are thousands of users and developers that contribute to its success. If you want to work on any of these projects or have any feedback about them, please comment on the respective forum post or Github issue and you’ll be on your way! Our priorities can and will change based on what the whole ecosystem discusses and decides.
I’ll start with the higher priority tasks and move to lower priority tasks from there.
High Priorities
These goals are things that are very important to us that we are actively working on or are mostly finished with.
Interaction Templates: A framework for storing transaction information on-chain so that apps and wallets can more easily use audited and standardized transactions and scripts. We’ve gave feedback on the proposals, helped with the smart contracts for it, and helped prepare the repo for open-sourcing.
NFT Storefront V2 Documentation: With the NFT Storefront contract complete, we rounded out some remaining documentation to help with ease of adoption and education for all the projects in the ecosystem.
Fungible Token Metadata View Standard: The community originally designed the metadata standard for use with just NFTs, but it actually is useful for fungible tokens as well! The community is currently deliberating about a new fungible token metadata views contract and we’re updating our example contracts as well as the FlowToken contract to use it.
Gaming Smart Contracts: Our team has some really interesting ideas for how different complex game mechanics can be implemented in Cadence smart contracts such as dynamic metadata, time locked escrow for gaming purposes, and commit-reveal schemes. Once we have our thoughts organized and some rough drafts ready, we are going to share these with the community to hopefully spark some creativity and get more discussion going!
Freshmint Collaboration: Freshmint is a command line tool that allows developers to generate various common NFT contracts without having to actually write any code! We’re not leading the effort, but we’re working closely with the developer and the community so make sure all the contracts follow Cadence best practices and are easy to use.
Streamlined Token Standards: As part of the Stable Cadence milestone, the Cadence community has reached some consensus on an upgrade to the token standard contracts. We believe it is important for the standards to be as safe and powerful as possible in the long term because there will hopefully be millions of people using them in the future. The community has proposed upgrades to both standards and are looking for more feedback from additional developers on the proposals. These changes include breaking changes that would affect anyone in the ecosystem who has a token smart contract, so it is extremely important that we get as many eyes on it as possible!
WIP: V2 FungibleToken Standard by joshuahannan · Pull Request #77 · onflow/flow-ft
Adds the v2 fungible token standard, as described in this forum post…
github.com
WIP: V2 NonFungibleToken Standard by joshuahannan · Pull Request #126 · onflow/flow-nft
Adds the v2 fungible token standard, as described in this forum post…
github.com
Staking Slot Selection: This is a protocol smart contract improvement to have randomized slot assignments for staking nodes instead of the current method where all nodes are automatically approved. This will help us achieve a milestone in our decentralization roadmap by implementing the first features of full staking auctions and getting us closer to permissionless node operation.
Execution Node Upgrade Smart Contract: A protocol smart contract that should make protocol updates smoother and more predictable by tracking execution node versions.
Offers Smart Contract Open Sourcing: The Dapper Wallet team built a great smart contract for users to submit offers to NFTs in other users’ accounts. We’ve been helping them make the smart contract generic and prepare the repo for open sourcing so that the whole community can contribute to and use it! Stay tuned for more updates!
Medium Priorities
These goals are still very important, but we are likely still in the early stages of working on them.
Improvements to the later Cadence tutorials: The voting tutorial and the composable resources tutorial haven’t changed in a very long time and are in need of some enhancements to make them more practical and to follow cadence best practices. We’ve got some meaty improvements coming to these to hopefully help developers bridge the gap between Cadence fundamentals and unit testing/app development. There are PRs connected to the linked issues if anyone wants to give any feedback!
Exploration of DeFi smart contracts in Cadence: Decentralized Finance is a technology that is huge in the blockchain world, but has not been explored very much in Cadence. We are going to start researching for and building some of our own proof of concept smart contracts to share with the community to see what is possible in Cadence.
Low Priorities
Cadence Testing Framework: The Cadence team built a testing framework where you can write tests IN Cadence for your smart contracts! We’ll be using it and providing feedback about the design and we highly encourage every Cadence developer to give it a try.
Technical Debt in the Smart Contract Repos: We’ve been maintaining the flow-ft, flow-nft, flow-core-contracts, and nft-storefront repos for a long time and we have definitely accrued some technical debt in that time period. We want to do various things to those repos such as refactoring tests, using correct import syntax, update documentation, and more. Lots of those tasks are already listed in their respective repos if you’d like to take a look!
Epoch Contracts — Re-architecting and Slashing: The protocol developer community has been discussing some big improvements coming in the future for the Flow protocol. The staking and epoch smart contracts may need to be re-architected to support these improvements as well as to improve gas efficiency. These discussions are still in their early stages though, but it should be an extremely interesting undertaking for all of us.
Cadence Style Guide: Cadence is getting used enough that it is probably time to start discussing a formal style guide for community members to emulate. We’d love more feedback and suggestions on the first three PRs we have open.
That is pretty much it for our large priorities! Of course, we will continue working with the community on various proposals, reviewing smart contracts, and reviewing FLIPs, but these are the main priorities for our small team in the near future. If you’d like to participate in any of these, please follow a link to the issue you’re interested in and comment on the issue and we will get you up to speed and involved as quickly as possible!
Thanks for reading and you’ll hear from me again soon with some more Cadence content and updates!
Flow Website: https://flow.com/
Flow Discord: https://discord.gg/flow
Flow Developer Portal: https://developers.flow.com/
Flow Github: https://github.com/onflow/flow
See you next time! 👋