---
title: "What is a Smart Contract?"
canonical: https://wavect.io/glossary/smart-contract/
language: en
description: "Code that runs on a blockchain, executes deterministically, and cannot be changed once deployed (unless you designed it to be)."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

TECHNOLOGIES

# Smart Contract

Code that runs on a blockchain, executes deterministically, and cannot be changed once deployed (unless you designed it to be).

Last reviewed: 2026-05-24 by [Kevin Riedl](/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

A smart contract is a program deployed to a blockchain. Once deployed, its bytecode is immutable, its state is publicly readable, and its execution is governed by consensus rules that nobody can override. That permanence is the feature and the risk: a bug in production is a bug forever, unless you built upgrade machinery in (which itself is a vulnerability surface).

Most production smart-contract systems are not a single contract but a set of them: a proxy for upgradeability, an implementation contract for the logic, often an access-control contract for governance. The pattern is familiar to anyone who has built versioned APIs; the cost of getting it wrong is higher.

Worked example of why the deployment discipline differs from normal software: ship a bug in a SaaS backend and you patch it and redeploy in an hour. Ship a reentrancy bug in a contract holding user funds and an attacker can drain it before you can react, because there is no rollback and the value is live from block one. This is why the question is not “should we audit” but “how do we structure upgrades safely”. The usual answer is a proxy pattern behind a timelock and a multisig: immediate upgrade authority is a single point of failure, no upgrade path leaves you stuck with the first bug, and timelocked upgrades transparent to users is the middle ground most production systems converge on.

The honest trade-off and common founder mistake: founders treat the contract like a feature and the audit like an optional line item. For any contract holding non-trivial value, the audit is the cheapest insurance you will ever buy, usually 1 to 2 weeks of the build budget against the entire value at stake. Wavect writes smart contracts in Solidity for [EVM](/glossary/evm/) chains and Rust for [Solana](/glossary/solana/), Near, and ICP, and the language is downstream of which chain your [web3](/glossary/web3/) use case demands, not a preference. We recommend a third-party audit before mainnet on anything that matters, and we have shipped audited contracts to production. Skipping the audit is how teams learn this the expensive way.

// FAQ

## FAQs

### Do I really need an audit?

For any contract holding non-trivial value: yes. The audit cost is usually 1 to 2 weeks of the build budget. Skipping it is one of the cheapest ways to lose all of the value the contract is holding. Insurance and bug bounties are complements, not substitutes.

### Solidity or Rust?

Solidity for EVM chains (Ethereum, Polygon, Arbitrum, Optimism, Base). Rust for Solana, Near, and ICP. The choice is downstream of which chain matches your use case; the language is a constraint, not a preference.

### How do you handle upgradeability safely?

Proxy pattern with a timelock and a multisig on the admin keys. Immediate upgrade authority is a single point of failure; no upgrade path leaves you stuck with the first bug. The middle ground (timelocked upgrades, transparent to users) is what most production systems converge on.

Related terms

- [Web3](/glossary/web3/)
- [EVM](/glossary/evm/)
- [Solana](/glossary/solana/)
- [Account Abstraction](/glossary/account-abstraction/)
- [Zero-Knowledge](/glossary/zero-knowledge/)

Related services

- [Blockchain](/services/blockchain/)

Related case studies

- [LightBridge](/case-studies/lightbridge/)
- [Scramble Pay](/case-studies/scramble-pay/)
- [ZybraMoney](/case-studies/zybra-money/)

Related guides

- [How to choose a software development agency](/software-development-guide/how-to-choose-a-software-agency/)

Talk to us

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/glossary/smart-contract/#term",
      "@type": "DefinedTerm",
      "alternateName": [],
      "description": "Code that runs on a blockchain, executes deterministically, and cannot be changed once deployed (unless you designed it to be).",
      "inDefinedTermSet": "https://wavect.io/glossary/#termset",
      "name": "Smart Contract",
      "termCode": "smart-contract",
      "url": "https://wavect.io/glossary/smart-contract/"
    },
    {
      "@id": "https://wavect.io/glossary/smart-contract/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-05-24",
      "description": "Code that runs on a blockchain, executes deterministically, and cannot be changed once deployed (unless you designed it to be).",
      "headline": "Smart Contract",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-24",
      "mainEntity": {
        "@id": "https://wavect.io/glossary/smart-contract/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "Blockchain",
          "url": "https://wavect.io/services/blockchain/"
        }
      ],
      "name": "Smart Contract",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/glossary/smart-contract/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/",
          "name": "Home",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/",
          "name": "Tech, product & engagement glossary",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/smart-contract/",
          "name": "Smart Contract",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "For any contract holding non-trivial value: yes. The audit cost is usually 1 to 2 weeks of the build budget. Skipping it is one of the cheapest ways to lose all of the value the contract is holding. Insurance and bug bounties are complements, not substitutes."
      },
      "name": "Do I really need an audit?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Solidity for EVM chains (Ethereum, Polygon, Arbitrum, Optimism, Base). Rust for Solana, Near, and ICP. The choice is downstream of which chain matches your use case; the language is a constraint, not a preference."
      },
      "name": "Solidity or Rust?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Proxy pattern with a timelock and a multisig on the admin keys. Immediate upgrade authority is a single point of failure; no upgrade path leaves you stuck with the first bug. The middle ground (timelocked upgrades, transparent to users) is what most production systems converge on."
      },
      "name": "How do you handle upgradeability safely?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
