TON development: smart contracts, TON Connect, and turnkey back end

Subscription and payment logic moved to the server causes failures and disputes on every check. We develop TON applications turnkey: smart contracts, wallet connection, and back end in a single loop. Time to market accelerates many times over, and disputed operations move into a transparent ledger.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1376
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1350
  • B2B Advance company logo design
    B2B Advance company logo design
    798
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1088
  • AIDER company logo development
    AIDER company logo development
    1034
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1130

TON app development: where the logic breaks

The logic of a TON app breaks not when connecting a wallet, but where the interface and the chain start running on different clocks. The user has signed a transaction, the app has already displayed “success,” while the smart contract could reject the message or return it back.

A few minutes later, the balance in the app and on the network diverge — and that is the first call to support.

The most common failure is desynchronization between the app state and the network. Smart contract data changes only after a transaction is included in a block, while the interface lives by the button press.

This is treated with a separate confirmation layer: the service listens to the chain, matches events with requests, and only then marks the operation as executed. Without it, a session break looks to the client like missing funds.

The second bottleneck in blockchain logic is resubmission. The connection dropped after signing, the app does not know whether the message went through, and the user presses the button again — that is how duplicate credits appear.

What saves you is not a timer, but reliance on the wallet sequence number: a repeat with the same number does not create a second operation but returns the previous result.

Otherwise, mass debits have to be reconciled manually — some addresses are rejected, and the accounting picture does not add up.

We analyze all these points before the first line of code: where a confirmation layer is needed, how refunds are handled, and what to do with a partially executed batch. Below is how this is covered in TON app development.

What a predictable blockchain product launch gives you

We design smart contracts, the backend, and wallet connections as a single loop — then the effect is visible in metrics, not in a presentation.

We ship logic updates by separating an immutable core and a replaceable module: the address and history are preserved, the new version is connected without user migration, so from edit to release it takes hours, not weeks of approvals and manual reissues.

The asynchronous model of TON forgives mistakes only for those who anticipated them: idempotent handlers, an event log, and retry with the same identifier do not let an operation hang.

The share of transactions in an undefined status under peak load drops to single-digit percentages, and an entire class of failures — the database diverging from the network — goes away along with manual reconciliation.

Fees stop being a surprise when the cost of computation and storage is estimated before sending.

An execution limit, return of unspent balance, and storage reserve make the debit predictable: the operation does not fail due to insufficient funds, and network behavior is visible in monitoring before the user notices it.

We automate payments at the contract level: acceptance via wallet connection, confirmation by an event from the network, distribution of amounts, and fee retention without manual operations.

TON app development in this form gives not a “fashionable technology” but a product where updates ship quickly, operations close, and settlements reconcile without manual accounting labor.

Implementation options: custom build or hybrid

The choice of option determines how much logic remains under our control and where failure boundaries lie. Below are four schemes that people realistically choose between when launching an app on TON, with honest limitations for each.

Option When it fits Limitations
Contracts from scratch Non-standard logic: share distribution, escrow deal, custom rights accounting Slower to get to the network; an audit is needed before publication, and fixes afterward only through state migration
Adaptation of open solutions Standard scenarios: token issuance, exchange, simple logic — the code has already been vetted by the community You inherit other people's assumptions and license terms; non-standard rules have to be fit into someone else's structure
Hybrid: contract and backend Part of the logic is private, and only the calculation and recording of the result are moved to the network The server is a single point of failure; a backup loop, operation log, and state recovery are needed
Without custom contracts Demand validation, internal services, integration with already deployed solutions No control over fees and limits; the rules are changed by the contract owner, not you

The boundaries between schemes are not rigid: a project often starts on ready-made solutions and, as its logic grows, moves to a hybrid.

We build in compatibility in advance — addresses, message formats, and wallet structure are described so that migration does not break already connected users.

Implementation stages: from task analysis to handover

We work in iterations: after each stage, an artifact remains that can be reviewed and challenged, rather than “we'll show you the launch-ready product.” The order is such that errors in the data model, rights, and limits surface before they become fixed in the contract — reworking logic at a late stage is the most expensive.

  1. Scenario analysis. We break the product down into operations: what must be verifiable and immutable, what lives in a regular database, and where the user's signature is required. The output is an operation map with a division of responsibility zones.
  2. Design of the scheme and data model. Addressing, roles, fees, limits, separation of logic between contracts, and behavior on resubmission. We fix the scheme in text and a diagram before the first line of code.
  3. Contract assembly. Implementation with tests covering not only the happy path but also boundaries: zero amounts, repeated calls, insufficient funds, and deadlines.
  4. Integration with the backend and wallet. Payment flow, confirmations, retries when the connection drops, and display of operation status in the user account.
  5. Testing on the testnet. Running the full path on a copy of the real environment: from wallet connection to withdrawal and refund.
  6. Acceptance and handover. We compare the result against the scenarios, run through the security checklist, hand over repositories, schemes, deployment and rollback instructions, and train your team.

Handover package: code, schemes, and procedures

After release, the main value is that the product can be read and reproduced without the authors. Therefore, handover is not an archive of files but a working package: code with history, deployment schemes, access policies, and procedures by which your team acts independently. Below is exactly what you receive.

  • Contract source code in your repository: change history, release branches, access for several employees — without a single copy on someone's laptop.
  • Deployment schemes: what is located where, publication order, dependencies between contracts and external services.
  • Access policies and roles: who holds the keys, which operations require a second confirmation, and how access is revoked.
  • Scenario descriptions: issuance, transfer, withdrawal, and handling of disputed situations — with a list of events that go into the log.
  • Update procedure: how an edit is prepared, how it is tested on the testnet, and in what order it is rolled out.
  • Rollback procedure: how to return the previous state and what happens to already executed operations.
  • A set of support documentation: code map, integration points, typical failures, and the procedure to follow.

The handover protocol is a separate stage: a joint review with your engineers, answers to questions, and a period during which you can reach out about the handed-over code.

Case study: smart contracts on TON for a subscription service

The manual operations at the client — a subscription service for content access — looked like this: an accountant reconciled incoming payments, a manager marked the renewal in the admin panel, and access was enabled a few hours later, sometimes the next day.

One payment involved 3-4 manual operations, and discrepancies in statements were resolved in correspondence with the subscriber.

What was moved into the contract

Debiting, auto-renewal, and refund of the remaining balance upon cancellation became rules in code, not an employee's procedure.

Payment in the interface was built on TON Connect: the wallet connects directly from the app, and subscription status updates immediately after transaction confirmation — there is no separate gateway or manual confirmation anymore.

Contract events are indexed by the backend and passed to the user account and billing. Credits are built so that reprocessing does not double a payment when the connection drops, and subscription state is always restored from blockchain history.

Metrics before and after

Metric Before After
Crediting time hours, sometimes a day tens of seconds
Manual operations per payment 3-4 0
Support requests about payment baseline minus ~70%
Reconciliation of incoming payments a dedicated employee not required

The share of support requests about payments and renewals fell by about 70% — the bulk of questions were specifically about “the money left, but access did not arrive.” The user now handles cancellation and refund of the remaining balance in the account, and the team does not keep a person on manual reconciliation.

How does a smart contract differ from a signature on the server?

A signature with a private key confirms that the wallet owner sent the command, but by itself it does not create a record of ownership.

The accounting remains in the database on the server: who transferred what and to whom is determined by the application code and the administrator with access to that database. The user trusts the signature exactly to the extent that they trust the platform.

A smart contract moves state to the network: balances, owners, limits, and rules for transfer of rights lie in an open ledger, and verification is performed by TON network nodes, not your server. The result cannot be rewritten without leaving a public trace.

Trust in the signature here is replaced by code verification, and the support burden shifts: instead of scaling the database — precision of logic, because an error in a deployed contract cannot be fixed with a regular update.

A contract is not needed where the value is closed within the platform: internal points without withdrawal, private accounting, scenarios for which rolling back an operation is normal behavior.

Here, signature verification on the server side is enough: rules change in a single release, logic remains mutable, and storing state in the ledger does not add costs for you or require an update mechanism.

The fork is resolved by one question: should the user be able to take the asset or prove the right to it without your participation. If yes — state and rules go into the contract, and the backend turns into a storefront and settlement layer with cache and analytics.

If no — a signature and your database give the same result faster and with fewer irreversible decisions.

Technical concerns: wallets, failures, updates

Concerns about TON projects usually relate not to the blockchain itself but to integrations: who owns the keys when a wallet is connected, what the user sees when the network fails, and how to update logic without losing accumulated data. Below are the scenarios most often checked at acceptance.

Does the app get access to wallet keys?

No. The connection is non-custodial: the private key never leaves the wallet, and the app receives the public address and the signature of a specific operation.

The transaction is assembled by the backend, but the user confirms it — we do not request the secret phrase or store it on the server. The session is bound to the domain, so the recipient address cannot be swapped on the app side.

What happens if the network is unavailable or the transaction drops?

Success is determined by the state on the network, not by the API response — the app will not show a nonexistent credit. Each operation receives an identifier; a retry after a break goes out with the same number, so no double debit occurs.

In the queue, you can see what went out, what is awaiting confirmation, and what requires investigation.

Can a contract be updated without losing user data?

Yes, if logic and state are separated: data lies in a separate storage, and the working contract accesses it at a fixed address. When a new version is released, the code changes, but the records remain.

We run the update on a copy of the network and keep the previous version ready for rollback — if behavior differs, we return without losing history.

Let's discuss the task and come back with a work plan

Estimate accuracy is determined by the input data, not by response speed.

If you have a scenario description and access to the current code, we will come back with a solution scheme and timelines after one call; if there is no data, we will gather part of it ourselves during the analysis stage — this lengthens preparation but does not change the result. To avoid guessing, we need the following from you:

  • Scenario: what the user does, which actions and in what order, and what is considered successful completion of an operation.
  • Roles and access: who signs operations, where keys are stored, and whether multisignature and limits by amount or frequency are needed.
  • Current code: repository, build state, test coverage, known defects, and places where the application already diverges from the documentation.
  • External connections: payment services, exchanges, data sources — where events go out and where they come in from.
  • Load: expected number of users, peak periods, and acceptable transaction confirmation time.
  • Constraints: closed environment, security service requirements, and whether a separate network is needed for testing.
  • Decisions on your side: who resolves disputed questions and how quickly gives feedback on stages.

Then the order is: a 40–60 minute call, then a solution scheme broken down by stages, scope of work, and timelines, and only after approval — the start with the first verifiable version.