BlockchainAppMaker Get a quote

Blockchain

Smart contract development company: the process and how to choose one

A smart contract development company specifies, writes, tests, deploys and maintains programs that run on a blockchain and hold value. This guide explains each stage of that work, the tools teams use in 2026, the bugs that keep causing losses and the questions to ask before you hire a team.

Contract code is often short, and the work around it decides whether a contract holds funds safely: the specification, tests, reviews, deployment and key handling. This guide covers the lifecycle on any chain. The Ethereum smart contract guide goes deeper on EVM details, and the Solidity development page covers the language itself.

What a smart contract can and cannot do

A smart contract is code plus storage at an address on a blockchain, and anyone can call its public functions. Every node runs the same code and gets the same result, and the contract's state changes only through transactions. These rules give three things that an ordinary backend cannot easily offer:

  • shared state that no single party can edit
  • custody of assets that follows written rules
  • the ability to call and combine other contracts on the same chain

Smart contracts also have limits that shape every design:

  • A contract cannot fetch web data by itself, so it needs an oracle to bring data on-chain.
  • A contract cannot keep secrets. All storage is public, even variables marked private.
  • A contract cannot run on a schedule, so some account must send a transaction to trigger it.
  • Every computation costs gas, so heavy logic belongs off-chain, with only a check on-chain.

What a smart contract development company delivers

A complete engagement covers more than code, so expect these items in a proposal:

  • a written specification with the rules the system must never break
  • the contracts, built on audited libraries
  • a test suite with unit, fuzz and invariant tests
  • deployment scripts and verified source code on block explorers
  • a plan for the external audit and time to fix its findings
  • a key and role plan, with admin rights moved to your multisig
  • monitoring, an incident plan and handover documentation

A quote that lists only the contract code leaves the riskiest parts to you.

Languages and platforms

LanguageRuns onNotes
SolidityEthereum and other EVM chains and rollupsLargest ecosystem, with audited libraries such as OpenZeppelin and Solady. Most auditors work in Solidity.
VyperEVM chainsPython-like syntax with fewer features by design. Curve uses it.
Rust with AnchorSolanaPrograms receive the accounts they act on. Missing account checks are a common bug class.
Rust with CosmWasm or StylusCosmos chains, ArbitrumContracts compile to WebAssembly.
MoveSui, AptosThe type system treats assets as resources, so code cannot copy or lose them by accident.
Kotlin, Java, GoCorda, Hyperledger FabricUsed on permissioned enterprise ledgers. See Hyperledger development.

Choose the chain for its users and liquidity, then use that chain's language. Auditor supply also matters, because far more experienced reviewers work on Solidity than on newer languages.

Solidity is at version 0.8.37 as of September 2026. Version 0.8.31 started deprecating features that the 0.9.0 release will remove, including send and transfer on addresses.

The EVM toolchain in 2026

  • Foundry: forge compiles code and runs tests written in Solidity, with built-in fuzz and invariant testing. cast talks to chains, and anvil runs a local node or a fork of a live chain. Many security-focused teams use Foundry by default.
  • Hardhat: Hardhat 3 runs tests written in Solidity or TypeScript and uses Ignition for deployments. Teams with TypeScript frontends and scripts often prefer it, and many projects use both tools.
  • Libraries: OpenZeppelin Contracts covers token standards (ERC-20, ERC-721, ERC-1155, ERC-4626), access control and upgradeable proxies. Solady saves gas, but its code is harder to read.
  • Static analysis: Slither and Aderyn flag common issues on every commit.
  • Client libraries: viem and ethers call contracts from scripts and frontends.

How to create a smart contract: the development process

  1. Write a specification. Describe every actor, function and state change in plain language. List the invariants, which are rules that must always hold, such as "total shares times price per share never exceeds the assets held." Auditors and fuzzers both use this list.
  2. Design the architecture. Decide the contract boundaries, the standards to implement, where oracles come in, who holds which roles, and whether the system is upgradeable.
  3. Build on standard parts. Inherit audited implementations instead of writing token logic from scratch. Keep custom code small and easy to read, because clever code is harder to review.
  4. Test in layers. Write unit tests for each function and fuzz tests with random inputs. Add invariant tests, which run random sequences of calls and check the spec's invariants after each one. Fork tests run against real mainnet state to check integrations with other protocols.
  5. Review internally. Peers review every line, and static analysis runs on each commit. Fix everything the team can find before an auditor is paid to find it.
  6. Audit externally. Freeze a commit and send it to one or more independent firms, or to an audit contest. The smart contract audit guide explains that process.
  7. Deploy with scripts. Use scripted, repeatable deployments, where CREATE2 can give a contract the same address on every chain. Verify the source on block explorers and Sourcify, and move ownership to a multisig at once.
  8. Monitor and respond. Set alerts for unusual events and balance changes. Write an incident plan, add pause functions where they fit, and run a bug bounty for ongoing review.

Upgradeability: options and trade-offs

Deployed bytecode cannot change, so an upgradeable system uses a proxy contract that forwards calls to a separate implementation contract. The proxy keeps the storage, and an upgrade points the proxy at new logic.

PatternHow it worksTrade-off
Transparent proxyThe proxy and a separate admin hold the upgrade logic.Easy to understand. Each call costs slightly more gas.
UUPS (ERC-1822 style)The implementation holds the upgrade logic.Calls cost less. An upgrade to an implementation without the upgrade function blocks all later upgrades.
Beacon proxyMany proxies read their implementation address from one beacon.One change upgrades many instances, which suits factories.
Diamond (EIP-2535)Several implementation contracts, called facets, sit behind one address.Suits large systems but is complex to audit.

Proxies store the implementation address in standard slots defined by EIP-1967. Two upgrade bugs recur: a new version can change the storage layout so that variables collide, or an implementation can be left uninitialized, in which case an attacker can then initialize it and take control.

Users of an upgradeable system must trust whoever controls upgrades, so put that control in a multisig behind a timelock. The timelock delay should give users time to exit before a change they reject takes effect.

Security: the bug classes that keep recurring

The 2025 edition of the OWASP Smart Contract Top 10 puts access control first and price oracle manipulation second. The common classes are these:

  • Access control: admin functions without a permission check, or initializers that anyone can call.
  • Oracle and price manipulation: a contract reads the spot price from one pool, and a flash loan moves that price within one transaction. Robust oracles and time-weighted prices reduce the risk.
  • Reentrancy: a contract calls another contract before it updates its own state. The checks-effects-interactions order and reentrancy guards prevent it. Read-only reentrancy across protocols needs separate checks.
  • Rounding and precision: division before multiplication loses precision. In the ERC-4626 vault inflation attack, the first depositor manipulates the share price.
  • Signature handling: signatures replayed on other chains or contracts, missing nonces, and malleable signatures. EIP-712 typed data with a domain separator prevents replay.
  • Token assumptions: some tokens do not return a boolean, and fee-on-transfer and rebasing tokens change balances in unexpected ways.
  • Front-running and MEV: bots trade just before and just after a swap that has no slippage limit or deadline (a "sandwich" attack).

Solidity 0.8 and later revert on integer overflow by default. Code inside unchecked blocks skips that check, so the old overflow bug returns there. The article on smart contract security covers known exploits in more detail.

Gas and performance

Storage writes cost the most gas, so data layout gives the largest savings. Teams pack several variables into one storage slot and avoid loops over storage that can grow without limit. Data that only off-chain systems read can go into events instead of storage.

Ethereum's Dencun upgrade in March 2024 added transient storage (EIP-1153), which makes reentrancy locks cheaper. On rollups, posting data to Ethereum often costs more than execution, so compact inputs lower the cost. Code that holds large value should stay readable even when that costs a little gas.

Keys, roles and operational security

Many large losses came from stolen keys or compromised signing tools, not from contract bugs. Split roles so that no single key can do everything:

  • a deployer key that is retired after setup
  • an owner or admin role held by a multisig such as Safe, with signers on separate hardware wallets
  • a narrow operator role for routine actions
  • a guardian role that can only pause

Put upgrades and parameter changes behind a timelock so users see them in advance. Rehearse the incident plan, which names who can pause, how signers are reached at night and how the team informs users.

Cost and timeline drivers

Project typeTypical engineering effort
Standard token (ERC-20, ERC-721 or ERC-1155) from audited librariesA few days to two weeks for one engineer, including tests and deployment scripts
Staking, vesting or escrow contracts3 to 6 weeks for one senior engineer
DeFi protocol with new mechanics, such as lending, an AMM variant or vaults3 to 6 months for two or three engineers, with more than one audit
Cross-chain systemsLonger than a DeFi protocol. Bridge and messaging security is a separate specialty.

Audit cost grows with code size and complexity, and established audit firms are often booked weeks ahead. The plan needs time for fixes and a second review. The guide to DeFi smart contract development covers DeFi-specific points.

Questions to ask a smart contract developer

  • Does the test suite include fuzz and invariant tests, and what is the branch coverage?
  • Which invariants did the team define, and how does it test them?
  • Who holds the deployer and admin keys at each stage, and when do they move to the client's multisig?
  • How is the system upgraded or paused, and who can do it?
  • Which outside protocols and oracles does the system depend on, and what happens if one fails?
  • Can the team share audit reports from past projects, with the fixes for each finding?

Frequently asked questions

How long does smart contract development take?

A standard token built on audited libraries can be ready in days. A custom protocol with new economics takes months, including audits. Testing and review often take as long as writing the code.

Should a team use Foundry or Hardhat?

Foundry runs fast and has fuzzing built in, and many security-focused teams prefer it. Hardhat suits teams that work mainly in TypeScript and want its plugins. Many teams test with Foundry and deploy with Hardhat scripts.

Can a smart contract be changed after deployment?

The bytecode at an address cannot change. A system can use proxies so that its logic can be upgraded, or it can migrate to a new contract. In both cases, whoever controls the upgrade can change the rules, so a multisig and a timelock should limit that power.

Is an audit enough to make a contract safe?

No. An audit is a review with a fixed time limit, and it reduces risk without removing it. Internal testing, written invariants, more than one review for high-value code, bug bounties and live monitoring add further protection.

Should I write my own token contract?

Not from scratch. Inherit from audited implementations such as OpenZeppelin and add only the custom behavior you need. Hand-written transfer and minting logic causes many token exploits.

What does "verified" mean on a block explorer?

A verified contract has published source code that compiles to the exact bytecode at its address, so anyone can read what the contract does. Users and integrators treat an unverified contract as a warning sign.