sudharsan karapureddy
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    > []> []> []> []> []******** **Smart Contracts in Blockchain: Types, Use Cases & More** Smart contracts are increasingly making blockchain technology more robust. They are transforming our day-to-day lives, making them faster, more secure, scalable, and affordable. According to ==**Market Research Future**==, the global Smart Contracts market is expected to reach approximately USD 300 million by the end of 2023 at a 32% CAGR during the forecast period of 2017 to 2023. Are you excited to find out what smart contracts are? How do smart contracts work? ![](https://hackmd.io/_uploads/SklECBZlp.jpg) ==**What is a Smart Contract in Blockchain?**== Smart contracts have been around since 1994, when ==**Nick Szabo**==, a computer scientist, developed them with self-executing digital codes in mind. Smart contracts in blockchain are digital contracts that are stored on a blockchain. They typically run after meeting certain pre-established conditions. Moreover, they are used to automate the execution of an agreement. So, all participants can immediately look at the outcome without third-party involvement and without any time loss. Plus, one can also automate workflows, triggering the next action when conditions are met. ==**Types of Smart Contracts**== Let’s look at the types of self-executing smart contracts **Smart Legal Contracts** These contracts are legally enforceable and require the parties to satisfy their contractual obligations. Parties may face strict legal actions if they fail to comply. **Decentralized Autonomous Organizations (DAO)** For a DAO, the backbone is its smart contract. The contract is bound to specific rules that are coded into blockchain contracts blended with governance mechanisms. It has diverse use cases that range from simple to complex, which depends on the number of stakeholders. DAOs are open-source and also feature transparency, and, in theory, are incorruptible. Plus, any action taken by the community members gets replaced by a self-enforcing code. ==**Smart Contracts Use Cases**== Next, let’s look at some common smart contract use cases. **Digital Identity** ![](https://hackmd.io/_uploads/SkUHASWe6.jpg) One of the most popular smart contract use cases is Digital Identity. When you consider individual identity, it is one of the most significant assets for an individual. It contains data, reputation, and digital assets; when used correctly, it can bring new opportunities to the person. Smart contracts can help other parties to learn more about the individual without knowing their true identity or verifying transactions. The frictionless KYC can help improve resilience, interoperability, compliance, and more. **Loans and Mortgages** Smart contracts have been helping improve financial services, including loans and mortgages. It helps with the error-free process and helps to track payments and release the property when the whole loan is paid off. **Government** Smart contracts can help the government manage operations better. The operations include land title recording, which may help the government with property transfers. Plus, it will reduce auditing costs and improve transparency.Smart contracts also help with electronic elections. **Supply Chain Management** Yet another great use case is supply chain management, where the supply chain can be significantly improved. So, it is handy for you to track items within the supply chain with complete visibility and transparency. It improves other aspects of business and enhances tracing resulting in fewer frauds and thefts. **Clinical Trials** Smart contracts can significantly help in clinical trials that can improve cross-institutional visibility. It can help automate data sharing between institutions and aid privacy-preserving computations. ==**How do Smart Contracts Work?**== Now, let’s get to the part about learning how smart contracts work. Think for a moment if you want to buy a house. What would it all involve? You’re right! It may involve paying hefty fees to third-party companies, banks, lawyers, and house brokers. Now, that’s a lot of money! The good part is that you can avoid paying commissions, long delays, and brokers processing the agreement with smart contracts. All it needs is the agreement to be formed on the blockchain using a smart contract, which contains the agreement. ![](https://hackmd.io/_uploads/SkDiRS-l6.jpg) When the smart contract agreement is in place, it cannot be changed. Plus, smart contracts can automatically get executed once the conditions of the agreement are met, which means that there is no need for a third party, like a bank, a broker, or a government. The scenario is one example where smart contracts can be really handy. So, one can enjoy smart contracts to execute automatically once the conditions of the agreement are met. Let’s re-look at a smart contract. It’s a special kind of program that encodes business logic. Furthermore, it runs on a special-purpose virtual machine backed into a blockchain (or another type of distributed ledger.) Here are the steps of how the smart contracts work: **1. Comprehensive Business and Operational Practices** It starts with business teams working with developers to describe their requirements. If the requirements are vague, it can lead to disputes and operational delays. A clear picture of the business and operational practices of involved parties is critical when defining and agreeing on terms to automate contracts to prevent such situations. **2. Curating Logic Parameters** The specifications include desired behavior of the smart contract in response to events or circumstances. Events could be conditions such as payment authorization, utility meter reading threshold, and more. For example, legal contracts must contain terms on parameters including sources, tolerances, frequency, and time frames of data capture methods, among others. So, developers need such specifications, including location, time, and more, to inform logic parameters around data. It’s pretty simple—readings that aren’t well-defined can’t be automated. **3. Straightforward and Non-conflicted Contract Terms** It’s good to note that the code of a smart contract cannot be made to execute contradictory terms. The excellent part is that smart contracts achieve what they are programmed to execute and aren’t capable of judgment. So, any rules of engagement, such as fee calculations and billing practices, must be able to be encoded from non-conflicted contract terms. ==**Role of Smart Contracts in Blockchain**== It is exciting to see how self-executing contracts function effectively with radical changes brought in by disruptive technologies such as IoT, AI, and automation. Smart contracts are excellent digital protocols that enable us to deal with high-value digital assets to make businesses faster and more flexible. Here are some insights on the role of smart contracts in blockchain. * Security and high reliability: The transactions can be performed with high reliability. Plus, as the distributed ledger is highly encrypted, it is impenetrable and offers high security. * Transparency: It creates a cohesive environment because both the logic and information in the contract are visible to all those participating in the blockchain network. Plus, parties involved can check out any edits made by a party to the contract’s content as it is visible to everyone involved in the cycle, improving transparency. * Lesser human intervention: The transactions don’t need much human management, which reduces the risks involved in the contract execution cycle. * Speed and efficiency: Since smart contracts execute immediately when a pre-defined condition is met, they offer speed and efficiency. * Savings: We’ve already talked of smart contracts removing the need for intermediaries to handle transactions, reducing their associated time delays and fees. Here are some industries that benefit from smart contracts in blockchain. **Supply chain** ![](https://hackmd.io/_uploads/BJQpArZxp.png) When blockchain supply chain solutions use smart contracts, it can help to streamline the flow of goods by automatically triggering the next steps when conditions are met, including shipping, delivery, and more during handling. Thus, participants can act earlier to eliminate disruptions should an unexpected event occur. **Dispute resolution** Think about it! Discrepancies in financial settlements can take weeks or months to resolve, and naturally, it costs. Here, smart contracts can help because they are codified on agreed business rules; one can automate processes such as identifying discrepancies, reconciling documents, settling transactions, and resolving disputes. **Art** ![](https://hackmd.io/_uploads/B11ARB-gp.jpg) For many, the creation of an NFT marketplace is an excellent opportunity to demonstrate individual geniuses and creative artifacts and exhibit those products to inspire proper digital asset management. The process of NFT marketplace creation has a critical facet of NFT smart contract development. Non-fungible token marketplaces have many exclusive features and involve different development aspects, including NFT smart contract development. **Medical research** The medical research industry also benefits, just like the healthcare industry. First of all, highly sensitive data, such as patient records, can be transferred between departments or research centers after being securely encrypted via blockchain technology. **Most common smart contract vulnerabilities** **1. Reentrancy attack** Reentrancy is one of the most iconic exploitable smart contract vulnerabilities. It occurs when a smart contract calls another smart contract in its code and, when the new call is finished, continues with execution. This action requires the vulnerable contract to submit an external call. Scammers steal these external calls and make a recursive call back to the contract with the help of the callback function. They can create a contract at an external address using malicious code. When the smart contract fails to update its state before sending funds, the scammer can continuously call the withdraw function, thus allowing them to drain the contract funds. **Reentrancy attack real-life example** The most famous example of reentrancy is The ==**DAO attack**== that occurred only three months after its launch. An anonymous hacker managed to drain most of the $150M worth of ETH from the DAO’s smart contract over the course of a few weeks. This resulted in the loss of investors’ trust and struck a significant blow to Ethereum’s credibility. After the attack, the Ethereum community voted to return the network to its original state and shutter the DAO. **2. Front-running** Smart contracts and their transactions on Ethereum are fully public and visible in the network's mempools, making them vulnerable to front-running by malicious actors seeking to exploit contract outcomes for financial gain. This transparency enables attackers to copy and deploy similar contracts with higher gas fees, executing their transactions ahead of the original contract creator and potentially stealing arbitrage opportunities. While these attacks are challenging to prevent, there are advanced security measures such as gas limiting, which filters transactions based on gas price thresholds, and the use of pre-commit schemes, involving the submission of a hash initially and revealing details later, to help enhance contract security in the face of this visibility issue. **3. Integer overflow and underflow** Smart contract vulnerabilities, not limited to the Solidity programming language, can lead to severe issues like underflows and overflows. In Solidity, where a word size of 256 bits allows for a balance of 4.3 billion Ether, scammers can manipulate a smart contract to reset its balance to the maximum value by using a malicious address with a zero balance, followed by sending 1 Ether. This can mislead the contract into thinking it holds an enormous balance and potentially lead to unauthorized withdrawals, resulting in the loss of contract funds. To mitigate this risk, using the Solidity 0.8 compiler version is advisable as it automatically checks for and prevents underflow and overflow vulnerabilities. **Integer overflow and underflow real-life example** A good example of underflow and overflow vulnerabilities would be a cryptocurrency Ponzi scheme: ==**Proof of Week Hands Coin**==. The project promised a legitimate pyramid scheme, which quickly gained value of over a million dollars. But in just one night it lost $800K due to arithmetic flaws. The project’s implementation of ERC-20 allowed a person to approve another user to transfer tokens on their behalf. A malicious actor enabled a second account to sell coins from the first account. However, these coins were taken off the second account’s balance. As a result, integer underflow left the second account with an extremely large balance of PoWH Coins. **4. Simple logic error** Logic errors tend to be one of the most common types of blockchain smart contract vulnerabilities. These may include typographical errors, misinterpretation of specifications, and the more serious programming errors that decrease the security of smart contracts. The good news is that these problems can be identified and eliminated during the smart contract audit, which is why it is recommended that you do not ignore this step before deploying your smart contracts to the blockchain. **Simple logic error real-life example** ==**The Hegic case**== is an interesting example of how a minor typo can cause financial loss. Hegic is a platform that allows users to insure against price volatility options. The platform was forced to restart its protocol when it spotted a simple typo in the code: instead of the “OptionsIDs” function which unlocks liquidity in expired contracts, it had the non-existent “OptionIDs” command, which omitted the letter “s”. Because of this error, users’ assets were blocked whenever they didn’t use their options, resulting in no liquidity for expired contracts. Fixing this error and providing the affected users with a refund cost Hedic $48K. **5. Block gas limit vulnerability** The block gas limit helps ensure that blocks do not grow too large. If a transaction consumes too much gas, it will not fit the block and, ultimately, will not be executed. The result is a block gas limit vulnerability: if data is stored in arrays and further accessed through loops over these arrays, the transaction may run out of gas and get a refund. This can lead to a Denial of Service (DoS) attack. **Block gas limit vulnerability real-life example** ==**GovernMental**== is yet another failed Ponzi scheme project. To join the project a user was required to send a certain amount of Ether to the contract. At a certain point, the list of project participants grew so long that it would have required more gas to clear the arrays than the maximum amount allowed for a single transaction. From this point onwards, all attempts to clear the arrays have failed. **1. Introduction to Smart Contract Testing** Smart contract testing involves confirming that a smart contract's code behaves as predicted. It helps to ensure the smart contract is reliable, user-friendly, and secure. Typically, testing involves running a smart contract using a smaller data subset than it would ordinarily handle. If the outcomes align with expectations, it is believed to be working well. Various tools can help write and run test scenarios to check if a contract behaves as expected. Testing smart contracts is crucial as they often handle valuable financial transactions. Even small coding mistakes can lead to significant user losses. Testing helps find and fix these issues before launching the smart contract on Mainnet. Upgrading a contract to fix a bug is a complex process and can result in further errors. Instead, thorough testing reduces security risks and the need for complex upgrades after deploying. Smart contract testing methods for Ethereum fall under two categories: * automated and * manual testing. **2. Automated Smart Contract Testing** Automated testing uses tools to automatically find errors in a contract. The advantage here is that tests can be set to run frequently with minimal human input, making it more efficient than manual testing. Automated testing is great for repetitive, time-consuming tests, or when testing crucial contract functions. However, these tools can sometimes miss bugs and give false positives, so combining them with manual testing is advisable. **2.1 Unit Testing of Smart Contracts** Unit testing checks each part of a smart contract individually to ensure they work correctly. These tests are straightforward, quick, and help determine any errors. They verify function outputs and whether contract storage updates properly. **Popular tools**: **solidity-coverage** - This tool provides code coverage for smart contracts written in Solidity. **Waffle** - This is a framework for advanced development and testing of smart contracts, based on ethers.js. **Remix Test**- This tool tests Solidity smart contracts. It works with the "Solidity Unit Testing" plugin in Remix IDE, which is used to write and run contract test cases. **OpenZeppelin Test Helpers**- This is an assertion library for Ethereum smart contract testing, helping ensure contracts behave as planned. **Truffle Tests** - This is an automated testing framework designed to simplify contract testing. **Brownie unit testing framework** - Brownie uses Pytest, a robust test framework that allows small tests with minimal code and is suitable for large projects due to its scalability. **Foundry Tests**- Foundry features Forge, a speedy and adaptable Ethereum testing framework that can conduct simple unit tests, gas optimization checks, and contract fuzzing. **Hardhat Tests** - This is a testing framework for smart contracts, based on ethers.js, Mocha, and Chai. **2.2 Integration Testing of Smart Contracts** Integration testing, on the other hand, checks the entire smart contract, including interactions between different functions or contracts. This testing type is handy if your contract works with other on-chain contracts. A common method involves creating a copy of the blockchain and simulating interactions between your contract and others in a safe, local environment. **2.3 Property-based Testing of Smart Contracts** Property-based testing ensures a smart contract upholds certain properties in various scenarios, like "Arithmetic operations in the contract never overflow or underflow." There are two main techniques for this: * static analysis and * dynamic analysis. **Static analysis** Static analysis uses the smart contract's source code to determine if it meets the property. This technique doesn't involve contract execution but inspects possible execution paths based on the code structure. It's often used to spot safety issues, syntax errors, or code standard violations. However, it might miss deeper vulnerabilities and may flag false positives. **Popular tools:** **Slither** - This is a Python-based framework for static analysis of Solidity contracts. It helps find vulnerabilities, improves code understanding, and supports writing custom analyses for smart contracts. **Ethlint**- This is a linter used for applying style and security best practices in Solidity, the smart contract programming language. **Dynamic analysis** Dynamic analysis tests smart contract functions by generating symbolic or concrete inputs to see if any execution violates the properties. Unlike unit tests that cover a single scenario, dynamic analysis covers multiple scenarios, with test case generation handled by a program. **Popular tools:** **Echidna** - This is a quick contract fuzzer for spotting vulnerabilities in smart contracts using property-based testing. **Diligence Fuzzing** - This is an automated fuzzing tool helpful for identifying property violations in smart contract code. **Manticore**- This is a dynamic symbolic execution framework for analyzing EVM bytecode. **Mythril** - This tool assesses EVM bytecode for contract vulnerabilities using taint analysis, concolic analysis, and control flow checking. 3. Manual Smart Contract Testing Manual testing involves humans running each test one after the other and comparing the contract's actual behavior with the expected behavior. This approach requires significant resources and there's a chance of human error leading to missed issues. However, human testers can sometimes catch edge cases that automated tools might overlook. **3.1 Testing Smart Contracts on Testnets** Testing contracts on a testnet is another approach. A testnet operates just like Ethereum Mainnet but uses Ether (ETH) which holds no real-world value. This enables anyone to interact with your contract risk-free. This testing type helps evaluate the overall user experience of your application. Beta testers can do trial runs and report issues with the contract's functionality and logic. Ideally, after testing on a local blockchain, contracts should be deployed on a testnet as it mirrors the Ethereum Virtual Machine's behavior more closely. Many Ethereum projects deploy dapps on testnets to test smart contracts under realistic conditions.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully