Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Smart Contract Development with Solidity: A beginner's guide

Smart Contract Development with Solidity: A beginner's guide

Smart Contract Development with Solidity: A beginner's guide.

Code Africa Conference(Online), November 2023

Olubisi Idris Ayinde

November 23, 2023
Tweet

More Decks by Olubisi Idris Ayinde

Other Decks in Technology

Transcript

  1. What will you learn in this talk? • Introduction to

    blockchain • What is a smart contract and why use solidity? • Solidity basics and syntax • Development tools and testing • Best practices and security considerations • Building, compiling and deploying smart contracts
  2. What is a Blockchain? A blockchain is a digital ledger

    of transactions, duplicated and distributed across a network of computer systems.
  3. "From 1989 to 2001, there were almost no legitimate winners

    of the high-value game pieces in the McDonald’s Monopoly game" FBI Special Agent Doug Mathews
  4. What is a Smart Contract? A smart contract is a

    self-executing contract with the terms of the agreement between buyer and seller being directly written into lines of code and can be deployed on the blockchain.
  5. Variables in Solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract

    Example { int public count; // Integer variable bool public isActive; // Boolean variable address public userAddress; // Address variable }
  6. Functions in Solidity contract Example { uint private storedData; function

    set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }
  7. Data Types in Solidity contract DataTypes { bool public isTrue

    = false; uint public num = 123; address public userAddress; struct Person { uint id; string name; } Person public person = Person(1, "Alice"); }
  8. Basic Structure of a Solidity Contract // SPDX-License-Identifier: MIT pragma

    solidity ^0.8.0; contract SimpleContract { uint public count; function setCount(uint _count) public { count = _count; } function incrementCount() public { count += 1; } }
  9. Automated Testing • Truffle, Foundry and Hardhat offer frameworks for

    writing and running automated tests • Mocha and Chai can be used in conjunction with these frameworks for more advanced testing
  10. Automated Testing: Type of Test • Unit tests for individual

    functions • Integration tests for contract interactions • Fuzz test
  11. Security and Best Practices Common vulnerabilities • Re-entrancy • Integer

    overflows/underflows • Access control issues • Unsafe external calls • Front-running • Denial of service
  12. Security and Best Practices Best practices • Use tested libraries

    and frameworks • Keep contracts simple • Add revert conditions • Validate inputs and outputs • Adhere to check-effects-interactions pattern • Extensive testing
  13. Security and Best Practices Avoiding mainnet deployments • Use Remix

    to deploy initially • Deploy to testnets first • Run through multiple test cases • Upgradeability best for mainnet
  14. Resources and Communities • Solidity docs • OpenZeppelin contracts •

    32 hrs course by Patrick Collins • LearnWeb3.io • Alchemy University