Smart Contracts & Web3
Smart contracts and Web3 apps built to be reviewed, tested and upgraded safely
We build on-chain logic, wallet connections and Web3 interfaces with security as the starting point: a threat model before code, automated tests that try to break the rules, independent audits where value is at stake and clear controls over every privileged action.
Blockchain & Web3
What is a smart contract?
A smart contract is a program deployed to a blockchain that executes agreed rules automatically once its conditions are met, such as transferring a token, releasing an escrowed payment or recording a vote. Web3 development covers the wallets, front ends and back-end services that let people and systems interact with those contracts safely and understand what they are approving.
Once a smart contract is deployed to a public network, anyone can read its code and whatever it holds is exposed to whoever finds a flaw. Mistakes cannot be quietly patched on a Friday afternoon. That changes how the work must be done: smaller contracts, explicit permissions, thorough testing and independent review before anything reaches a live network.
We start with the business rule the contract must enforce and the people who might try to abuse it. From there we design the contract architecture, decide which logic belongs on-chain and which can safely stay in conventional back-end services, and specify how upgrades, pauses and emergency actions are controlled and by whom.
Contracts are only one part of a Web3 product. Users need wallet connections that explain what they are signing, interfaces that handle pending and failed transactions clearly, and back ends that index contract events for search, support and reporting. We build those layers too, so the product behaves like familiar software while its records stay verifiable.
Challenges
The problems we are usually brought in to solve
Code that cannot be patched after launch
Deployed contracts are immutable or tightly controlled. A logic error discovered later can freeze funds or force a migration that every user has to follow.
Admin powers that become the weak point
Upgradeable contracts and owner functions are convenient, but one compromised admin key can bypass every other safeguard in the system.
Signing prompts users cannot read
Unreadable transaction requests, unclear network fees and silent failures lead people to abandon actions or approve things they do not understand.
Tests written only for honest users
Suites that check expected behaviour miss reentrancy, rounding errors, broken access control and oracle manipulation, which are the first things attackers probe.
Fragile dependence on outside data
Contracts that rely on external inputs, such as delivery confirmations or reference rates, are only as trustworthy as the service feeding them that data.
Fees that make small actions uneconomic
Every on-chain write costs someone a network fee, and contracts that store too much or loop over growing lists become expensive to use as activity grows.
Capabilities
What the service covers
Smart contract architecture
Modular contract design with clear separation of storage, logic and permissions, keeping the code that needs auditing small and readable.
Threat modelling and secure coding
Documented attacker scenarios, access control matrices and coding patterns that address reentrancy, front-running and signature replay before review begins.
Automated, fuzz and invariant testing
Unit, integration, fuzz and invariant tests that confirm rules such as total supply or escrow balances hold under unexpected inputs, run on every change in CI.
Independent audit preparation
Specifications, test reports and frozen code packaged for an independent audit firm, followed by remediation of findings and a re-check of the fixes before deployment.
Token contracts on established standards
Fungible, non-fungible and transfer-restricted tokens with mint, burn, transfer and freeze rules matched to the business case and documented for every role.
Wallet integration
Browser, mobile and embedded wallet connections with readable signing requests, network checks and clear handling of pending, replaced and failed transactions.
Web3 front ends
Next.js and React interfaces that show contract state, transaction history and permissions in plain language, designed for users who are new to wallets.
Contract event indexing for support and reporting
Node.js services that read contract events into PostgreSQL, so support staff can look up a user's transactions, finance can report on balances and users get notifications without anyone querying the chain.
Upgrade, pause and admin controls
Multi-signature administration, time-delayed upgrades and emergency pause functions, with written procedures for who can act and under what conditions.
Our process
How an engagement runs
Every engagement has a named lead, a written scope and working software to review every one to two weeks.
- 01
Rules and threat model
We write down the business rules the contract enforces, the roles that interact with it and how each role could misuse it, before any code exists.
- 02
Specification and architecture
A specification fixes contract structure, storage, events, admin powers, the upgrade path and the boundary between on-chain logic and back-end services.
- 03
Build alongside the tests
Contracts, wallet flows and indexers are developed together with their test suites and deployed to a test network for you to review every one to two weeks.
- 04
Internal review and independent audit
Our engineers review the code against the threat model. Where contracts hold assets or control valuable records, we coordinate an audit by an independent specialist firm and fix its findings.
- 05
Staged deployment and monitoring
Deployment runs through scripted, reviewable steps with limited initial exposure where possible, and alerts cover unusual contract events, failed transactions and admin actions.
Technology
Technology we use
Chosen per project for fit, maintainability and your team's ability to own it.
Web3 front end
- Next.js
- React
- TypeScript
- React Native
Indexing and services
- Node.js
- NestJS
- PostgreSQL
- RabbitMQ
Delivery
- GitHub Actions
- Docker
- Terraform
Use cases
Where it makes the biggest difference
Escrow and milestone payments
Funds are released to a supplier or contractor when agreed milestones are confirmed by the right parties, with a dispute path that pauses release.
Product passports and authenticity
Non-fungible tokens linked to physical goods record origin and each change of owner, so a buyer can check authenticity before a resale.
Tokenised loyalty and access passes
Points, memberships or event passes issued as tokens with clear transfer rules, redeemable across partner businesses without one central database.
Wallet-based credential checks
Holders prove they own a qualification or membership by signing with their wallet, without handing over the personal data behind it.
Royalty and revenue splits
Incoming payments are divided between rights holders according to recorded shares, with every distribution visible to each party.
Consortium voting
Proposal and voting contracts let member organisations approve changes to shared rules, with each vote and result recorded for later review.
Industries
Industries we apply this to
Why Softweb Planet
Why teams choose us for this work
A written specification before contract code
Our blockchain solution architect sets down the rules, roles, storage layout and upgrade path first, so your team, our engineers and any external auditor review the same document instead of inferring intent from code.
Audits recommended when value is at stake
We advise an independent audit firm whenever contracts hold assets or control valuable records, and we prepare the specification and test evidence that let auditors focus on real risk.
Release discipline from DevOps and QA
In-house DevOps engineers set up CI pipelines and scripted deployments, and our QA specialists test wallet journeys across browsers and mobile devices, so contract releases follow a reviewed, repeatable process.
Working contracts on a test network
A named lead and a written scope keep the work visible, and at each review you connect your own wallet to the contracts and interfaces deployed on a test network.
What you can expect
- Contracts with documented rules, permissions and upgrade paths
- Security issues found in testing and review rather than on a live network
- Wallet interactions people understand before they sign
- Admin powers held by signers you nominate, with written procedures for using them
- Contract events available in your own database for support and reporting
Smart Contracts & Web3 FAQ
Frequently asked questions
A smart contract can enforce agreed rules automatically wherever several parties need to trust an outcome without trusting each other. Typical examples include releasing escrowed funds when milestones are confirmed, issuing and transferring tokens, recording votes and splitting payments between rights holders. It works well for clear, rule-based steps. Judgement calls, legal interpretation and anything involving private data are better handled off-chain, with the contract recording the result.
A smart contract is code, not automatically a legal contract, although it can carry out obligations set out in one. Whether it is binding depends on the surrounding written agreement and the law in your jurisdiction, so the legal terms should be drafted by your lawyers. We make sure the code matches the agreed terms, document how it behaves in each scenario and keep a readable specification that both teams can sign off.
A smart contract cannot be edited in place, but it can be designed to be upgradeable or replaceable. Common approaches include proxy patterns that point to new logic, modular contracts that can be swapped out and migration plans that move state to a new version. Each option adds admin power, so we protect upgrades with multi-signature approval and time delays, and we say plainly when an immutable design is the safer choice.
Yes. We coordinate an independent audit by a specialist security firm whenever contracts hold assets, mint tokens or control valuable records, and the firm quotes for its work separately. Before the audit we freeze the code and supply a specification, threat model and test results, which helps the auditors concentrate on genuine risk. After the report we fix the findings, document any accepted risks with your sign-off and ask the auditors to review the fixes before deployment.
We test smart contracts at several levels before any live deployment. Unit tests check each function, integration tests cover full user journeys, and fuzz and invariant tests throw unexpected inputs at the contracts to confirm that core rules, such as balances always adding up, never break. We also run static analysis, test on a public test network with real wallets and rehearse upgrades and emergency pauses.
With a custodial wallet a service provider holds the keys and acts for the user, while with a non-custodial wallet users hold their own keys. Custodial options feel familiar and allow account recovery, but they place regulatory and security responsibilities on whoever holds the keys. Non-custodial wallets give users full control and full responsibility. Many products offer both, or use embedded wallets that simplify sign-up while keeping a recovery route.
We make wallet interactions easier by reducing the number of signatures, showing a plain-language summary of what each transaction does, and handling network switching, fee estimates and failures inside the interface. Where suitable we use embedded wallets with email or social sign-in, and sponsored transactions so users do not need to hold tokens just to pay network fees. Before release, we test these flows with people who have not used a wallet before.
Yes, selectively. We take on decentralised finance work where the use case is clear, your advisers have assessed the regulatory position in your target markets and the risks can be controlled. That can include escrow, pooled funds between known parties or on-chain treasury tools for an organisation. We do not build speculative token launches or make claims about returns, and we will not recommend deploying a contract that holds funds without an independent audit.
Smart contract costs depend on scope, and we provide a fixed quote once discovery is complete. The main drivers are the number and complexity of contracts, how much value they control, the wallets and front ends required, the off-chain services needed and the scope of the independent audit, which the audit firm quotes separately. We also estimate deployment and transaction costs on your chosen network, so the full picture is clear before work begins.
Smart contract development time depends mostly on contract complexity, the number of user journeys and the audit firm's availability, which often sets the critical path. A small, well-defined first release, such as a single escrow or token contract with a basic interface, reaches a test network early, and you review working software every one to two weeks. We book audit slots in advance and plan deployment around the remediation window.
You do: the source code, deployment scripts and documentation pass to you under the project contract, and admin keys sit with people you nominate. We set up multi-signature wallets for those signers, so we do not hold sole control of a production contract. Where we need deployment rights during the project, they are temporary and logged, and they are transferred to your signers before launch. That transfer is itself an on-chain transaction you can verify independently.
Smart contracts receive outside data through oracles, which are services that sign and publish information such as reference rates, delivery confirmations or identity checks to the chain. Because a contract trusts whatever its oracle reports, we choose sources carefully, require several confirmations for high-impact inputs, add sanity limits and freshness checks, and plan a fallback when data stops arriving. Where possible, approvals come directly from the responsible party's own signature.
We reduce gas fees mainly through contract design and network choice. Contracts store only what must be on-chain, pack values efficiently, emit events for data that only off-chain systems read and avoid loops over lists that grow with usage. Layer 2 networks usually charge far less per transaction than the base networks they settle to. Where users should not pay at all, sponsored transactions move the fee to the business, and we model expected fee spend at your projected volumes before deployment.
Keep exploring
Related services and solutions
Start your project
Tell us what you're building.
Share the problem, the systems involved and where you want to be. A senior engineer replies with honest advice on scope, architecture and the fastest safe path to production.