Index
- Lesson 1: CryptoZombies
- Chapter 2 Contracts
- Chapter 3: State Variables & Integers
- Chapter 4: Math Operations
- Chapter 5: Structs
- Chapter 6: Arrays
- Chapter 7: Function Declarations
- Chapter 8: Working With Structs and Arrays
- Chapter 9: Private / Public Functions
- Chapter 10: More on Functions
- Chapter 11: Keccak256 and Typecasting
- Chapter 12: Putting It Together
- Chapter 13: Events
- Chapter 14: Web3.js
- Lesson 2: Zombies Attack Their Victims
- Chapter 2: Mappings and Addresses
- Chapter 3: Msg.sender
- Chapter 4: Require
- Chapter 5: Inheritance
- Chapter 6: Import
- Chapter 7: Storage vs Memory
- Chapter 8: Zombie DNA
- Chapter 9: More on Function Visibility
- Chapter 10: What Do Zombies Eat?
- Chapter 11: Using an Interface
- Chapter 12: Handling Multiple Return Values
- Chapter 13: Bonus: Kitty Genes
- Chapter 14: Wrapping It Up
- Lesson 3: Advanced Solidity Concepts
- Chapter 2: Ownable Contracts
- Chapter 3: onlyOwner Function Modifier
- Chapter 4: Gas
- Chapter 5: Time Units
- Chapter 6: Zombie Cooldowns
- Chapter 7: Public Functions & Security
- Chapter 8: More on Function Modifiers
- Chapter 9: Zombie Modifiers
- Chapter 10: Saving Gas With 'View' Functions
- Chapter 11: Storage is Expensive
- Chapter 12: For Loops
- Chapter 13: Wrapping It Up
- Lesson 4: Zombie Battle System
- Chapter 1: Payable
- Chapter 2: Withdraws
- Chapter 3: Zombie Battles
- Chapter 4: Random Numbers
- Chapter 5: Zombie Fightin'
- Chapter 6: Refactoring Common Logic
- Chapter 7: More Refactoring
- Chapter 8: Back to Attack!
- Chapter 9: Zombie Wins and Losses
- Chapter 10: Zombie Victory 😄
- Chapter 11: Zombie Loss 😞
- Lesson 5: ERC721 & Crypto-Collectibles
- Chapter 1: Tokens on Ethereum
- Chapter 2: ERC721 Standard, Multiple Inheritance
- Chapter 3: balanceOf & ownerOf
- Chapter 4: Refactoring
- Chapter 5: ERC721: Transfer Logic
- Chapter 6: ERC721: Transfer Cont'd
- Chapter 7: ERC721: Approve
- Chapter 8: ERC721: Approve
- Chapter 9: Preventing Overflows
- Chapter 10: SafeMath Part 2
- Chapter 11: SafeMath Part 3
- Chapter 12: SafeMath Part 4
- Chapter 13: Comments
- Chapter 14: Wrapping It Up
- App Front-ends & Web3.js
- Chapter 1: Intro to Web3.js
- Chapter 2: Web3 Providers
- Chapter 3: Talking to Contracts
- Chapter 4: Calling Contract Functions
- Chapter 5: Metamask & Accounts
- Chapter 6: Displaying our Zombie Army
- Chapter 7: Sending Transactions
- Chapter 8: Calling Payable Functions
- Chapter 9: Subscribing to Events
- Chapter 10: Wrapping It Up
Chapter 13: Comments
Chapter 13: Comments
The Solidity code for our zombie game is finally finished!
In the next lessons, we'll look at how to deploy the code to Ethereum, and how to interact with it with Web3.js.
But one final thing before we let you go in Lesson 5: Let's talk about commenting your code.
Syntax for comments
Commenting in Solidity is just like JavaScript. You've already seen some examples of single line comments throughout the CryptoZombies lessons:
// This is a single-line comment. It's kind of like a note to self (or to others)
Just add double //
anywhere and you're commenting. It's so easy that you should do it all the time.But I hear you — sometimes a single line is not enough. You are born a writer, after all!
Thus we also have multi-line comments:
contract CryptoZombies {
/* This is a multi-lined comment. I'd like to thank all of you
who have taken your time to try this programming course.
I know it's free to all of you, and it will stay free
forever, but we still put our heart and soul into making
this as good as it can be.
Know that this is still the beginning of Blockchain development.
We've come very far but there are so many ways to make this
community better. If we made a mistake somewhere, you can
help us out and open a pull request here:
https://github.com/loomnetwork/cryptozombie-lessons
Or if you have some ideas, comments, or just want to say
hi - drop by our Telegram community at https://t.me/loomnetwork
*/
}
/* This is a multi-lined comment. I'd like to thank all of you
who have taken your time to try this programming course.
I know it's free to all of you, and it will stay free
forever, but we still put our heart and soul into making
this as good as it can be.
Know that this is still the beginning of Blockchain development.
We've come very far but there are so many ways to make this
community better. If we made a mistake somewhere, you can
help us out and open a pull request here:
https://github.com/loomnetwork/cryptozombie-lessons
Or if you have some ideas, comments, or just want to say
hi - drop by our Telegram community at https://t.me/loomnetwork
*/
}
In particular, it's good practice to comment your code to explain the expected behavior of every function in your contract. This way another developer (or you, after a 6 month hiatus from a project!) can quickly skim and understand at a high level what your code does without having to read the code itself.The standard in the Solidity community is to use a format called natspec, which looks like this:
/// @title A contract for basic math operations
/// @author H4XF13LD MORRIS 💯💯😎💯💯
/// @notice For now, this contract just adds a multiply function
contract Math {
/// @notice Multiplies 2 numbers together
/// @param x the first uint.
/// @param y the second uint.
/// @return z the product of (x * y)
/// @dev This function does not currently check for overflows
function multiply(uint x, uint y) returns (uint z) {
// This is just a normal comment, and won't get picked up by natspec
z = x * y;
}
}
/// @author H4XF13LD MORRIS 💯💯😎💯💯
/// @notice For now, this contract just adds a multiply function
contract Math {
/// @notice Multiplies 2 numbers together
/// @param x the first uint.
/// @param y the second uint.
/// @return z the product of (x * y)
/// @dev This function does not currently check for overflows
function multiply(uint x, uint y) returns (uint z) {
// This is just a normal comment, and won't get picked up by natspec
z = x * y;
}
}
@title
and @author
are straightforward.@notice
explains to a user what the contract / function does. @dev
is for explaining extra details to developers.@param
and @return
are for describing what each parameter and return value of a function are for.Note that you don't always have to use all of these tags for every function — all tags are optional. But at the very least, leave a
@dev
note explaining what each function does.Put it to the test
If you haven't noticed by now, the CryptoZombies answer-checker ignores comments when it checks your answers. So we can't actually check your natspec code for this chapter ;)
However, by now you're a Solidity whiz — we're just going to assume you've got this!
Give it a try anyway, and try adding some natspec tags to
ZombieOwnership
:1.
@title
— E.g. A contract that manages transfering zombie ownership2.
@author
— Your name!3.
@dev
— E.g. Compliant with OpenZeppelin's implementation of the ERC721 spec draft