Crescendo is coming to Flow this July! Flow supercharges the Ethereum ecosystem with full EVM-equivalency and the power of Cadence 1.0.
May 7, 2021
Cadence Developer Insights: Learnings with Josh Hannan
Cadence Developer Insights: Learnings with Josh Hannan

Josh Hannan is a senior smart contract engineer contributing to the Flow ecosystem at Dapper Labs and is here to share his vast knowledge of Cadence’s resource-oriented programming language. He’s been in the blockchain space since early 2017, spending time working on Ethereum projects before joining Flow. His focus has been on writing Cadence smart contracts and documentation, as well as helping with community efforts within the Flow ecosystem. He is the author behind the NBA Top Shot smart contract among many other projects.

Josh is so passionate about smart contracts and Cadence that he started his very own blog, where he dives into a variety of Cadence related topics, making it one of the best resources in the community. It’s an awesome wealth of knowledge that we want to make sure everyone gets a chance to look at.

Cadence is a fascinating language, and we hope these posts from Josh leave you feeling the same way we do about it! We’ll update this post with additional sections as he publishes them, making this a great one-stop shop for your Cadence needs.  

Taking your First Steps with Cadence

What is Flow, how do you get started with Cadence, and where should someone learning this resource-oriented programming language begin their journey? Josh shares an amazing array of helpful places everyone dipping their toes in for the first time should check out. 

Learn the ropes of Cadence

Basic Access Control in Cadence

Access control is the restriction of fields, functions, and types to certain scopes and users. It is an extremely important tool for developers to deeply consider to ensure their code is protected against potential vulnerabilities. Every developer should have a thorough understanding of Cadence access control before even thinking about deploying their project on mainnet, and Josh is here to make sure of that. 

Get up to speed with access control on Cadence

A retrospective of the Cadence Cup

Haven’t heard of the Cadence Cup? It’s just one of the ways we engage with the Flow community and challenge developers to push the boundaries of Cadence. Josh takes a look back and highlights some of the interesting projects that were shared, which can be a great resource in learning about the possibilities of building on Flow.

Check out this awesome retrospective of the Cadence Cup

What I’ve learned in the year since I wrote the NBA Top Shot smart contracts

Top Shot is a large project with many moving parts, but the record of Moment ownership and value transfer is handled by a few smart contracts on the Flow blockchain, which Josh was in charge of writing. He looks back at how it was created, what he’s learned since then, and what he would approach differently today. 

Get Josh's thoughts on building the NBA Top shot smart contract

Creating a token on the Flow blockchain? Don’t forget this VITAL part!

Josh dives deep into the one of the most critical parts of every token contract that you cannot forget. Make sure this one line is in every smart contract on mainnet. If not, you should either update it immediately or contact the developer to do so. 

Learn more about this critical detail

How I organize my Cadence projects

It is very important to keep your code clear and organized, especially for smart contract code. This includes the way you name fields and functions, how you organize the definitions and structure within a contract or transaction, and how well the code is documented. Josh shares his thoughts on how to best organize the files for your project in your Github repository. 

Add some new tricks to your organizational toolbelt

Optionals in Cadence? Not Optional!

Optionals in Cadence are a safe, albeit somewhat complicated way to use variables. Optionals say either “there is a value, and it is x” or “there isn’t a value at all.” So the value either has been set or, more importantly, has not been set. They are an important feature of many languages and learning to use them properly is important for writing clean and secure code.

Learn about these important not-so-optionals

Access Control and msg.sender In Cadence

One question that every Solidity user asks when they start programming in Cadence is “how do I check msg.sender?" On Ethereum, checking msg.sender is used to identify the account that is calling a function and to modify that function's behavior appropriately. Cadence does not have msg.sender, but there's a very specific reason for that!

Learn about why the design of Cadence is intentionally different